summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLorry <lorry@roadtrain.codethink.co.uk>2012-01-17 15:29:11 +0000
committerLorry <lorry@roadtrain.codethink.co.uk>2012-01-17 15:29:11 +0000
commit4ca63c0cf0f37ab550bcca8b36f67f631cf1f8d0 (patch)
treee055aa1329452dceeafd63de121a048a08a2eb7f
downloadtexinfo-tarball-4ca63c0cf0f37ab550bcca8b36f67f631cf1f8d0.tar.gz
Tarball conversion
-rw-r--r--ABOUT-NLS1068
-rw-r--r--AUTHORS39
-rw-r--r--COPYING674
-rw-r--r--ChangeLog8317
-rw-r--r--ChangeLog.4612516
-rw-r--r--INSTALL49
-rw-r--r--INSTALL.generic234
-rw-r--r--INTRODUCTION108
-rw-r--r--Makefile.am74
-rw-r--r--Makefile.in936
-rw-r--r--NEWS888
-rw-r--r--README112
-rw-r--r--README.dev52
-rw-r--r--TODO212
-rw-r--r--aclocal.m4997
-rwxr-xr-xbuild-aux/compile142
-rwxr-xr-xbuild-aux/config.guess1500
-rwxr-xr-xbuild-aux/config.rpath672
-rwxr-xr-xbuild-aux/config.sub1608
-rwxr-xr-xbuild-aux/depcomp571
-rwxr-xr-xbuild-aux/install-sh442
-rw-r--r--build-aux/link-warning.h28
-rwxr-xr-xbuild-aux/mdate-sh201
-rwxr-xr-xbuild-aux/missing367
-rw-r--r--build-aux/texinfo.tex0
-rw-r--r--config.in540
-rwxr-xr-xconfigure21790
-rw-r--r--configure.ac240
-rw-r--r--djgpp/README431
-rwxr-xr-xdjgpp/config.bat237
-rw-r--r--djgpp/config.sed104
-rwxr-xr-xdjgpp/config.site62
-rw-r--r--doc/Makefile.am132
-rw-r--r--doc/Makefile.in1135
-rw-r--r--doc/README44
-rw-r--r--doc/epsf.tex644
-rw-r--r--doc/fdl.texi451
-rw-r--r--doc/info-stnd.texi2270
-rw-r--r--doc/info.1101
-rw-r--r--doc/info.572
-rw-r--r--doc/info.texi1511
-rw-r--r--doc/infokey.142
-rw-r--r--doc/install-info.1129
-rw-r--r--doc/makeinfo.1222
-rw-r--r--doc/pdftexi2dvi.1187
-rwxr-xr-xdoc/refcard/txicmdcheck131
-rw-r--r--doc/refcard/txirefcard-a4.pdfbin0 -> 94645 bytes
-rw-r--r--doc/refcard/txirefcard.pdfbin0 -> 95335 bytes
-rw-r--r--doc/refcard/txirefcard.tex968
-rw-r--r--doc/stamp-14
-rw-r--r--doc/stamp-vti4
-rw-r--r--doc/texi2dvi.1187
-rw-r--r--doc/texi2pdf.1187
-rw-r--r--doc/texindex.142
-rw-r--r--doc/texinfo.561
-rw-r--r--doc/texinfo.tex8997
-rw-r--r--doc/texinfo.txi21234
-rw-r--r--doc/txi-cs.tex73
-rw-r--r--doc/txi-de.tex78
-rw-r--r--doc/txi-en.tex68
-rw-r--r--doc/txi-es.tex59
-rw-r--r--doc/txi-fr.tex72
-rw-r--r--doc/txi-it.tex68
-rw-r--r--doc/txi-nb.tex67
-rw-r--r--doc/txi-nl.tex67
-rw-r--r--doc/txi-pl.tex70
-rw-r--r--doc/txi-pt.tex68
-rw-r--r--doc/txi-ru.tex71
-rw-r--r--doc/txi-sr.tex67
-rw-r--r--doc/txi-tr.tex81
-rw-r--r--doc/txi-uk.tex68
-rw-r--r--doc/version-stnd.texi4
-rw-r--r--doc/version.texi4
-rw-r--r--gnulib/lib/Makefile.am881
-rw-r--r--gnulib/lib/Makefile.in1159
-rw-r--r--gnulib/lib/alloca.in.h56
-rw-r--r--gnulib/lib/argz.c406
-rw-r--r--gnulib/lib/argz.in.h161
-rwxr-xr-xgnulib/lib/config.charset649
-rw-r--r--gnulib/lib/error.c338
-rw-r--r--gnulib/lib/error.h65
-rw-r--r--gnulib/lib/exitfail.c24
-rw-r--r--gnulib/lib/exitfail.h18
-rw-r--r--gnulib/lib/getopt.c1186
-rw-r--r--gnulib/lib/getopt.in.h225
-rw-r--r--gnulib/lib/getopt1.c170
-rw-r--r--gnulib/lib/getopt_int.h130
-rw-r--r--gnulib/lib/gettext.h270
-rw-r--r--gnulib/lib/gettimeofday.c142
-rw-r--r--gnulib/lib/intprops.h77
-rw-r--r--gnulib/lib/localcharset.c462
-rw-r--r--gnulib/lib/localcharset.h41
-rw-r--r--gnulib/lib/malloc.c57
-rw-r--r--gnulib/lib/malloca.c137
-rw-r--r--gnulib/lib/malloca.h134
-rw-r--r--gnulib/lib/malloca.valgrind7
-rw-r--r--gnulib/lib/mbchar.c35
-rw-r--r--gnulib/lib/mbchar.h350
-rw-r--r--gnulib/lib/mbiter.h215
-rw-r--r--gnulib/lib/mbscasecmp.c102
-rw-r--r--gnulib/lib/mbschr.c56
-rw-r--r--gnulib/lib/mbslen.c48
-rw-r--r--gnulib/lib/mbsncasecmp.c103
-rw-r--r--gnulib/lib/mbsstr.c385
-rw-r--r--gnulib/lib/mbswidth.c175
-rw-r--r--gnulib/lib/mbswidth.h60
-rw-r--r--gnulib/lib/mbuiter.h222
-rw-r--r--gnulib/lib/memchr.c172
-rw-r--r--gnulib/lib/memcmp.c361
-rw-r--r--gnulib/lib/memcpy.c35
-rw-r--r--gnulib/lib/memmem.c76
-rw-r--r--gnulib/lib/memmove.c26
-rw-r--r--gnulib/lib/mempcpy.c29
-rw-r--r--gnulib/lib/mkstemp.c44
-rw-r--r--gnulib/lib/ref-add.sin30
-rw-r--r--gnulib/lib/ref-del.sin25
-rw-r--r--gnulib/lib/setenv.c330
-rw-r--r--gnulib/lib/stdbool.in.h119
-rw-r--r--gnulib/lib/stdint.in.h522
-rw-r--r--gnulib/lib/stdlib.in.h240
-rw-r--r--gnulib/lib/stpcpy.c48
-rw-r--r--gnulib/lib/str-kmp.h150
-rw-r--r--gnulib/lib/str-two-way.h429
-rw-r--r--gnulib/lib/strdup.c55
-rw-r--r--gnulib/lib/streq.h176
-rw-r--r--gnulib/lib/strerror.c49
-rw-r--r--gnulib/lib/string.in.h585
-rw-r--r--gnulib/lib/strndup.c37
-rw-r--r--gnulib/lib/strnlen.c31
-rw-r--r--gnulib/lib/strnlen1.c35
-rw-r--r--gnulib/lib/strnlen1.h39
-rw-r--r--gnulib/lib/sys_stat.in.h291
-rw-r--r--gnulib/lib/sys_time.in.h52
-rw-r--r--gnulib/lib/tempname.c314
-rw-r--r--gnulib/lib/tempname.h39
-rw-r--r--gnulib/lib/unistd.in.h340
-rw-r--r--gnulib/lib/unitypes.h26
-rw-r--r--gnulib/lib/uniwidth.h64
-rw-r--r--gnulib/lib/uniwidth/cjk.h37
-rw-r--r--gnulib/lib/uniwidth/width.c323
-rw-r--r--gnulib/lib/unsetenv.c90
-rw-r--r--gnulib/lib/wchar.in.h91
-rw-r--r--gnulib/lib/wctype.in.h178
-rw-r--r--gnulib/lib/wcwidth.c51
-rw-r--r--gnulib/lib/xalloc-die.c41
-rw-r--r--gnulib/lib/xalloc.h280
-rw-r--r--gnulib/lib/xmalloc.c122
-rw-r--r--gnulib/lib/xsetenv.c38
-rw-r--r--gnulib/lib/xsetenv.h31
-rw-r--r--gnulib/m4/alloca.m446
-rw-r--r--gnulib/m4/argz.m480
-rw-r--r--gnulib/m4/codeset.m421
-rw-r--r--gnulib/m4/eealloc.m432
-rw-r--r--gnulib/m4/environ.m436
-rw-r--r--gnulib/m4/error.m422
-rw-r--r--gnulib/m4/exitfail.m413
-rw-r--r--gnulib/m4/extensions.m482
-rw-r--r--gnulib/m4/getopt.m483
-rw-r--r--gnulib/m4/gettext.m4381
-rw-r--r--gnulib/m4/gettimeofday.m4101
-rw-r--r--gnulib/m4/glibc21.m430
-rw-r--r--gnulib/m4/gnulib-cache.m453
-rw-r--r--gnulib/m4/gnulib-common.m491
-rw-r--r--gnulib/m4/gnulib-comp.m4412
-rw-r--r--gnulib/m4/iconv.m4180
-rw-r--r--gnulib/m4/include_next.m4110
-rw-r--r--gnulib/m4/inline.m440
-rw-r--r--gnulib/m4/intlmacosx.m451
-rw-r--r--gnulib/m4/lib-ld.m4110
-rw-r--r--gnulib/m4/lib-link.m4739
-rw-r--r--gnulib/m4/lib-prefix.m4185
-rw-r--r--gnulib/m4/localcharset.m416
-rw-r--r--gnulib/m4/longlong.m4106
-rw-r--r--gnulib/m4/malloc.m441
-rw-r--r--gnulib/m4/malloca.m414
-rw-r--r--gnulib/m4/mbchar.m413
-rw-r--r--gnulib/m4/mbiter.m417
-rw-r--r--gnulib/m4/mbrtowc.m431
-rw-r--r--gnulib/m4/mbscasecmp.m416
-rw-r--r--gnulib/m4/mbschr.m416
-rw-r--r--gnulib/m4/mbslen.m416
-rw-r--r--gnulib/m4/mbsncasecmp.m416
-rw-r--r--gnulib/m4/mbsstr.m416
-rw-r--r--gnulib/m4/mbstate_t.m430
-rw-r--r--gnulib/m4/mbswidth.m442
-rw-r--r--gnulib/m4/memchr.m418
-rw-r--r--gnulib/m4/memcmp.m431
-rw-r--r--gnulib/m4/memcpy.m418
-rw-r--r--gnulib/m4/memmem.m483
-rw-r--r--gnulib/m4/memmove.m418
-rw-r--r--gnulib/m4/mempcpy.m426
-rw-r--r--gnulib/m4/mkstemp.m456
-rw-r--r--gnulib/m4/nls.m431
-rw-r--r--gnulib/m4/onceonly.m490
-rw-r--r--gnulib/m4/po.m4449
-rw-r--r--gnulib/m4/progtest.m492
-rw-r--r--gnulib/m4/setenv.m471
-rw-r--r--gnulib/m4/stdbool.m4115
-rw-r--r--gnulib/m4/stdint.m4395
-rw-r--r--gnulib/m4/stdlib_h.m447
-rw-r--r--gnulib/m4/stpcpy.m426
-rw-r--r--gnulib/m4/strdup.m422
-rw-r--r--gnulib/m4/strerror.m447
-rw-r--r--gnulib/m4/string_h.m489
-rw-r--r--gnulib/m4/strndup.m453
-rw-r--r--gnulib/m4/strnlen.m431
-rw-r--r--gnulib/m4/sys_stat_h.m455
-rw-r--r--gnulib/m4/sys_time_h.m457
-rw-r--r--gnulib/m4/tempname.m422
-rw-r--r--gnulib/m4/unistd_h.m463
-rw-r--r--gnulib/m4/wchar.m454
-rw-r--r--gnulib/m4/wchar_t.m420
-rw-r--r--gnulib/m4/wctype.m474
-rw-r--r--gnulib/m4/wcwidth.m485
-rw-r--r--gnulib/m4/wint_t.m428
-rw-r--r--gnulib/m4/xalloc.m424
-rw-r--r--info/Makefile.am82
-rw-r--r--info/Makefile.in810
-rw-r--r--info/README30
-rw-r--r--info/dir.c290
-rw-r--r--info/display.c526
-rw-r--r--info/display.h79
-rw-r--r--info/doc.h102
-rw-r--r--info/dribble.c67
-rw-r--r--info/dribble.h40
-rw-r--r--info/echo-area.c1525
-rw-r--r--info/echo-area.h84
-rw-r--r--info/filesys.c710
-rw-r--r--info/filesys.h92
-rw-r--r--info/footnotes.c267
-rw-r--r--info/footnotes.h43
-rw-r--r--info/gc.c91
-rw-r--r--info/gc.h36
-rw-r--r--info/indices.c743
-rw-r--r--info/indices.h44
-rw-r--r--info/info-utils.c729
-rw-r--r--info/info-utils.h136
-rw-r--r--info/info.c707
-rw-r--r--info/info.h163
-rw-r--r--info/infodoc.c1193
-rw-r--r--info/infokey.c924
-rw-r--r--info/infokey.h127
-rw-r--r--info/infomap.c1285
-rw-r--r--info/infomap.h81
-rw-r--r--info/key.h34
-rw-r--r--info/m-x.c213
-rw-r--r--info/makedoc.c584
-rw-r--r--info/man.c678
-rw-r--r--info/man.h38
-rw-r--r--info/nodemenu.c346
-rw-r--r--info/nodes.c1269
-rw-r--r--info/nodes.h156
-rw-r--r--info/pcterm.c759
-rw-r--r--info/search.c677
-rw-r--r--info/search.h77
-rw-r--r--info/session.c5455
-rw-r--r--info/session.h249
-rw-r--r--info/signals.c294
-rw-r--r--info/signals.h96
-rw-r--r--info/termdep.h58
-rw-r--r--info/terminal.c872
-rw-r--r--info/terminal.h129
-rw-r--r--info/tilde.c340
-rw-r--r--info/tilde.h53
-rw-r--r--info/variables.c319
-rw-r--r--info/variables.h67
-rw-r--r--info/window.c1958
-rw-r--r--info/window.h270
-rw-r--r--install-info/Makefile.am31
-rw-r--r--install-info/Makefile.in816
-rw-r--r--install-info/README15
-rw-r--r--install-info/install-info.c2685
-rw-r--r--install-info/tests/Makefile.am237
-rw-r--r--install-info/tests/Makefile.in872
-rw-r--r--install-info/tests/README172
-rw-r--r--install-info/tests/defs.in48
-rw-r--r--install-info/tests/ii-0001-expected-dir-file24
-rw-r--r--install-info/tests/ii-0001-input-dir-file23
-rw-r--r--install-info/tests/ii-0001-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0001-test28
-rw-r--r--install-info/tests/ii-0002-expected-dir-file25
-rw-r--r--install-info/tests/ii-0002-input-dir-file23
-rw-r--r--install-info/tests/ii-0002-input-info-file12
-rwxr-xr-xinstall-info/tests/ii-0002-test28
-rw-r--r--install-info/tests/ii-0003-expected-dir-file25
-rw-r--r--install-info/tests/ii-0003-input-dir-file23
-rw-r--r--install-info/tests/ii-0003-input-info-file15
-rwxr-xr-xinstall-info/tests/ii-0003-test28
-rw-r--r--install-info/tests/ii-0004-expected-dir-file28
-rw-r--r--install-info/tests/ii-0004-input-dir-file26
-rw-r--r--install-info/tests/ii-0004-input-info-file16
-rwxr-xr-xinstall-info/tests/ii-0004-test28
-rw-r--r--install-info/tests/ii-0005-expected-dir-file27
-rw-r--r--install-info/tests/ii-0005-input-dir-file23
-rw-r--r--install-info/tests/ii-0005-input-info-file16
-rwxr-xr-xinstall-info/tests/ii-0005-test28
-rw-r--r--install-info/tests/ii-0006-expected-dir-file24
-rw-r--r--install-info/tests/ii-0006-input-dir-file23
-rw-r--r--install-info/tests/ii-0006-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0006-test28
-rw-r--r--install-info/tests/ii-0007-expected-dir-file25
-rw-r--r--install-info/tests/ii-0007-input-dir-file24
-rw-r--r--install-info/tests/ii-0007-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0007-test28
-rw-r--r--install-info/tests/ii-0008-expected-dir-file25
-rw-r--r--install-info/tests/ii-0008-input-dir-file23
-rw-r--r--install-info/tests/ii-0008-input-info-file12
-rwxr-xr-xinstall-info/tests/ii-0008-test28
-rw-r--r--install-info/tests/ii-0009-expected-dir-file24
-rw-r--r--install-info/tests/ii-0009-input-dir-file23
-rw-r--r--install-info/tests/ii-0009-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0009-test28
-rw-r--r--install-info/tests/ii-0010-expected-dir-file25
-rw-r--r--install-info/tests/ii-0010-input-dir-file23
-rw-r--r--install-info/tests/ii-0010-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0010-test28
-rw-r--r--install-info/tests/ii-0011-expected-dir-file24
-rw-r--r--install-info/tests/ii-0011-input-dir-file23
-rw-r--r--install-info/tests/ii-0011-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0011-test28
-rw-r--r--install-info/tests/ii-0012-expected-dir-file25
-rw-r--r--install-info/tests/ii-0012-input-dir-file24
-rw-r--r--install-info/tests/ii-0012-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0012-test28
-rw-r--r--install-info/tests/ii-0013-expected-dir-file24
-rw-r--r--install-info/tests/ii-0013-input-dir-file24
-rw-r--r--install-info/tests/ii-0013-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0013-test28
-rw-r--r--install-info/tests/ii-0014-expected-dir-file24
-rw-r--r--install-info/tests/ii-0014-input-dir-file25
-rw-r--r--install-info/tests/ii-0014-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0014-test28
-rw-r--r--install-info/tests/ii-0015-expected-dir-file25
-rw-r--r--install-info/tests/ii-0015-input-dir-file24
-rw-r--r--install-info/tests/ii-0015-input-info-file12
-rwxr-xr-xinstall-info/tests/ii-0015-test28
-rw-r--r--install-info/tests/ii-0016-expected-dir-file23
-rw-r--r--install-info/tests/ii-0016-input-dir-file23
-rw-r--r--install-info/tests/ii-0016-input-info-file7
-rwxr-xr-xinstall-info/tests/ii-0016-test28
-rw-r--r--install-info/tests/ii-0017-expected-dir-file18
-rw-r--r--install-info/tests/ii-0017-input-dir-file15
-rw-r--r--install-info/tests/ii-0017-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0017-test28
-rw-r--r--install-info/tests/ii-0018-input-dir-file0
-rw-r--r--install-info/tests/ii-0018-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0018-test25
-rw-r--r--install-info/tests/ii-0019-input-dir-file2
-rw-r--r--install-info/tests/ii-0019-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0019-test25
-rw-r--r--install-info/tests/ii-0020-expected-dir-file27
-rw-r--r--install-info/tests/ii-0020-input-dir-file23
-rw-r--r--install-info/tests/ii-0020-input-info-file7
-rwxr-xr-xinstall-info/tests/ii-0020-test27
-rw-r--r--install-info/tests/ii-0021-expected-dir-file25
-rw-r--r--install-info/tests/ii-0021-input-dir-file23
-rw-r--r--install-info/tests/ii-0021-input-info-file7
-rwxr-xr-xinstall-info/tests/ii-0021-test27
-rw-r--r--install-info/tests/ii-0022-expected-dir-file27
-rw-r--r--install-info/tests/ii-0022-input-dir-file24
-rw-r--r--install-info/tests/ii-0022-input-info-file7
-rwxr-xr-xinstall-info/tests/ii-0022-test28
-rw-r--r--install-info/tests/ii-0023-expected-dir-file26
-rw-r--r--install-info/tests/ii-0023-input-dir-file23
-rw-r--r--install-info/tests/ii-0023-input-info-file7
-rwxr-xr-xinstall-info/tests/ii-0023-test28
-rw-r--r--install-info/tests/ii-0024-expected-dir-file26
-rw-r--r--install-info/tests/ii-0024-input-dir-file23
-rw-r--r--install-info/tests/ii-0024-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0024-test28
-rw-r--r--install-info/tests/ii-0025-expected-dir-file24
-rw-r--r--install-info/tests/ii-0025-input-dir-file23
-rw-r--r--install-info/tests/ii-0025-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0025-test28
-rw-r--r--install-info/tests/ii-0026-expected-dir-file24
-rw-r--r--install-info/tests/ii-0026-input-dir-file23
-rw-r--r--install-info/tests/ii-0026-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0026-test28
-rw-r--r--install-info/tests/ii-0027-expected-dir-file26
-rw-r--r--install-info/tests/ii-0027-input-dir-file23
-rw-r--r--install-info/tests/ii-0027-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0027-test28
-rw-r--r--install-info/tests/ii-0028-expected-dir-file24
-rw-r--r--install-info/tests/ii-0028-input-dir-file23
-rw-r--r--install-info/tests/ii-0028-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0028-test28
-rw-r--r--install-info/tests/ii-0029-expected-dir-file25
-rw-r--r--install-info/tests/ii-0029-input-dir-file23
-rw-r--r--install-info/tests/ii-0029-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0029-test28
-rw-r--r--install-info/tests/ii-0030-expected-dir-file24
-rw-r--r--install-info/tests/ii-0030-input-dir-file23
-rw-r--r--install-info/tests/ii-0030-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0030-test28
-rw-r--r--install-info/tests/ii-0031-expected-dir-file24
-rw-r--r--install-info/tests/ii-0031-input-dir-file23
-rw-r--r--install-info/tests/ii-0031-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0031-test28
-rw-r--r--install-info/tests/ii-0032-expected-dir-file24
-rw-r--r--install-info/tests/ii-0032-input-dir-file23
-rw-r--r--install-info/tests/ii-0032-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0032-test28
-rw-r--r--install-info/tests/ii-0033-expected-dir-file26
-rw-r--r--install-info/tests/ii-0033-input-dir-file23
-rw-r--r--install-info/tests/ii-0033-input-info-file10
-rwxr-xr-xinstall-info/tests/ii-0033-test28
-rw-r--r--install-info/tests/ii-0034-expected-dir-file24
-rw-r--r--install-info/tests/ii-0034-input-dir-file23
-rw-r--r--install-info/tests/ii-0034-input-info-file10
-rwxr-xr-xinstall-info/tests/ii-0034-test28
-rw-r--r--install-info/tests/ii-0035-expected-dir-file24
-rw-r--r--install-info/tests/ii-0035-input-dir-file23
-rw-r--r--install-info/tests/ii-0035-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0035-test28
-rw-r--r--install-info/tests/ii-0036-expected-dir-file24
-rw-r--r--install-info/tests/ii-0036-input-dir-file23
-rw-r--r--install-info/tests/ii-0036-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0036-test28
-rw-r--r--install-info/tests/ii-0037-expected-dir-file24
-rw-r--r--install-info/tests/ii-0037-input-dir-file23
-rw-r--r--install-info/tests/ii-0037-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0037-test28
-rw-r--r--install-info/tests/ii-0038-expected-dir-file29
-rw-r--r--install-info/tests/ii-0038-input-dir-file23
-rw-r--r--install-info/tests/ii-0038-input-info-file7
-rwxr-xr-xinstall-info/tests/ii-0038-test28
-rw-r--r--install-info/tests/ii-0039-expected-dir-file25
-rw-r--r--install-info/tests/ii-0039-input-dir-file23
-rw-r--r--install-info/tests/ii-0039-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0039-test29
-rw-r--r--install-info/tests/ii-0040-expected-dir-file24
-rw-r--r--install-info/tests/ii-0040-input-dir-file23
-rw-r--r--install-info/tests/ii-0040-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0040-test28
-rw-r--r--install-info/tests/ii-0041-expected-dir-file.gzbin0 -> 457 bytes
-rw-r--r--install-info/tests/ii-0041-input-dir-file.gzbin0 -> 429 bytes
-rw-r--r--install-info/tests/ii-0041-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0041-test32
-rw-r--r--install-info/tests/ii-0042-expected-dir-file29
-rw-r--r--install-info/tests/ii-0042-input-dir-file23
-rw-r--r--install-info/tests/ii-0042-input-info-file15
-rwxr-xr-xinstall-info/tests/ii-0042-test28
-rw-r--r--install-info/tests/ii-0043-expected-dir-file46
-rw-r--r--install-info/tests/ii-0043-input-dir-file43
-rw-r--r--install-info/tests/ii-0043-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0043-test28
-rw-r--r--install-info/tests/ii-0044-expected-dir-file23
-rw-r--r--install-info/tests/ii-0044-input-dir-file25
-rw-r--r--install-info/tests/ii-0044-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0044-test28
-rw-r--r--install-info/tests/ii-0045-expected-dir-file23
-rw-r--r--install-info/tests/ii-0045-input-dir-file27
-rw-r--r--install-info/tests/ii-0045-input-info-file12
-rwxr-xr-xinstall-info/tests/ii-0045-test28
-rw-r--r--install-info/tests/ii-0046-expected-dir-file23
-rw-r--r--install-info/tests/ii-0046-input-dir-file24
-rwxr-xr-xinstall-info/tests/ii-0046-test28
-rw-r--r--install-info/tests/ii-0047-expected-dir-file16
-rw-r--r--install-info/tests/ii-0047-input-dir-file19
-rw-r--r--install-info/tests/ii-0047-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0047-test28
-rw-r--r--install-info/tests/ii-0048-expected-dir-file17
-rw-r--r--install-info/tests/ii-0048-input-dir-file19
-rw-r--r--install-info/tests/ii-0048-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0048-test28
-rw-r--r--install-info/tests/ii-0049-expected-dir-file23
-rw-r--r--install-info/tests/ii-0049-input-dir-file23
-rw-r--r--install-info/tests/ii-0049-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0049-test28
-rw-r--r--install-info/tests/ii-0050-expected-dir-file.gzbin0 -> 432 bytes
-rw-r--r--install-info/tests/ii-0050-input-dir-file.gzbin0 -> 476 bytes
-rw-r--r--install-info/tests/ii-0050-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0050-test33
-rw-r--r--install-info/tests/ii-0051-expected-dir-file18
-rw-r--r--install-info/tests/ii-0051-input-dir-file15
-rw-r--r--install-info/tests/ii-0051-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0051-test30
-rw-r--r--install-info/tests/ii-0052-expected-dir-file19
-rw-r--r--install-info/tests/ii-0052-input-dir-file15
-rw-r--r--install-info/tests/ii-0052-input-info-file11
-rwxr-xr-xinstall-info/tests/ii-0052-test30
-rw-r--r--install-info/tests/ii-0053-expected-dir-file19
-rw-r--r--install-info/tests/ii-0053-input-dir-file15
-rw-r--r--install-info/tests/ii-0053-input-info-file12
-rwxr-xr-xinstall-info/tests/ii-0053-test20
-rw-r--r--lib/Makefile.am22
-rw-r--r--lib/Makefile.in670
-rw-r--r--lib/README13
-rw-r--r--lib/substring.c34
-rw-r--r--lib/xexit.c87
-rw-r--r--makeinfo/Makefile.am32
-rw-r--r--makeinfo/Makefile.in837
-rw-r--r--makeinfo/README17
-rw-r--r--makeinfo/cmds.c2184
-rw-r--r--makeinfo/cmds.h223
-rw-r--r--makeinfo/defun.c720
-rw-r--r--makeinfo/defun.h30
-rw-r--r--makeinfo/files.c783
-rw-r--r--makeinfo/files.h68
-rw-r--r--makeinfo/float.c430
-rw-r--r--makeinfo/float.h55
-rw-r--r--makeinfo/footnote.c390
-rw-r--r--makeinfo/footnote.h36
-rw-r--r--makeinfo/html.c870
-rw-r--r--makeinfo/html.h67
-rw-r--r--makeinfo/index.c1004
-rw-r--r--makeinfo/index.h92
-rw-r--r--makeinfo/insertion.c2403
-rw-r--r--makeinfo/insertion.h82
-rw-r--r--makeinfo/lang.c1811
-rw-r--r--makeinfo/lang.h141
-rw-r--r--makeinfo/macro.c1095
-rw-r--r--makeinfo/macro.h77
-rw-r--r--makeinfo/makeinfo.c4397
-rw-r--r--makeinfo/makeinfo.h395
-rw-r--r--makeinfo/multi.c646
-rw-r--r--makeinfo/multi.h26
-rw-r--r--makeinfo/node.c1947
-rw-r--r--makeinfo/node.h129
-rw-r--r--makeinfo/sectioning.c832
-rw-r--r--makeinfo/sectioning.h102
-rw-r--r--makeinfo/tests/Makefile.am40
-rw-r--r--makeinfo/tests/Makefile.in672
-rwxr-xr-xmakeinfo/tests/accent34
-rw-r--r--makeinfo/tests/accent-text.txi73
-rw-r--r--makeinfo/tests/accent.txi10
-rwxr-xr-xmakeinfo/tests/accentenc24
-rw-r--r--makeinfo/tests/accentenc.txi11
-rwxr-xr-xmakeinfo/tests/cond33
-rw-r--r--makeinfo/tests/cond.txi40
-rwxr-xr-xmakeinfo/tests/copying13
-rw-r--r--makeinfo/tests/copying.txi8
-rwxr-xr-xmakeinfo/tests/defxcond16
-rw-r--r--makeinfo/tests/defxcond.txi18
-rwxr-xr-xmakeinfo/tests/emph-option10
-rw-r--r--makeinfo/tests/emph-option.txi8
-rwxr-xr-xmakeinfo/tests/html-docdesc12
-rw-r--r--makeinfo/tests/html-docdesc.txi14
-rwxr-xr-xmakeinfo/tests/html-extrali14
-rw-r--r--makeinfo/tests/html-extrali.txi11
-rwxr-xr-xmakeinfo/tests/html-manuals13
-rwxr-xr-xmakeinfo/tests/html-min8
-rw-r--r--makeinfo/tests/html-min.txi12
-rwxr-xr-xmakeinfo/tests/html-para8
-rw-r--r--makeinfo/tests/html-para.txi24
-rwxr-xr-xmakeinfo/tests/html-title13
-rw-r--r--makeinfo/tests/html-title.txi12
-rwxr-xr-xmakeinfo/tests/html-top13
-rw-r--r--makeinfo/tests/html-top.txi7
-rw-r--r--makeinfo/tests/incl-incl.txi1
-rwxr-xr-xmakeinfo/tests/include-value22
-rw-r--r--makeinfo/tests/include-value.txi32
-rwxr-xr-xmakeinfo/tests/macro-at8
-rw-r--r--makeinfo/tests/macro-at.txi38
-rwxr-xr-xmakeinfo/tests/menu-whitespace72
-rw-r--r--makeinfo/tests/menu-whitespace.txi18
-rwxr-xr-xmakeinfo/tests/no-headers12
-rwxr-xr-xmakeinfo/tests/node-expand12
-rw-r--r--makeinfo/tests/node-expand.txi64
-rwxr-xr-xmakeinfo/tests/node-value12
-rw-r--r--makeinfo/tests/node-value.txi15
-rwxr-xr-xmakeinfo/tests/node-whitespace12
-rw-r--r--makeinfo/tests/node-whitespace.txi30
-rwxr-xr-xmakeinfo/tests/quote-args19
-rw-r--r--makeinfo/tests/quote-args.txi20
-rwxr-xr-xmakeinfo/tests/top11
-rw-r--r--makeinfo/tests/top.txi25
-rwxr-xr-xmakeinfo/tests/twofiles23
-rw-r--r--makeinfo/toc.c378
-rw-r--r--makeinfo/toc.h44
-rw-r--r--makeinfo/xml.c2252
-rw-r--r--makeinfo/xml.h159
-rw-r--r--makeinfo/xref.c632
-rw-r--r--makeinfo/xref.h29
-rw-r--r--po/ChangeLog36
-rw-r--r--po/LINGUAS22
-rw-r--r--po/Makefile.in.in429
-rw-r--r--po/Makevars41
-rw-r--r--po/POTFILES.in47
-rw-r--r--po/Rules-quot47
-rw-r--r--po/boldquot.sed10
-rw-r--r--po/cs.gmobin0 -> 34221 bytes
-rw-r--r--po/cs.po3599
-rw-r--r--po/da.gmobin0 -> 41741 bytes
-rw-r--r--po/da.po3508
-rw-r--r--po/de.gmobin0 -> 84480 bytes
-rw-r--r--po/de.po3343
-rw-r--r--po/de_AT.gmobin0 -> 431 bytes
-rw-r--r--po/de_AT.po2881
-rw-r--r--po/en@boldquot.header25
-rw-r--r--po/en@quot.header22
-rw-r--r--po/eo.gmobin0 -> 51928 bytes
-rw-r--r--po/eo.po3474
-rw-r--r--po/es.gmobin0 -> 90122 bytes
-rw-r--r--po/es.po3424
-rw-r--r--po/fr.gmobin0 -> 54939 bytes
-rw-r--r--po/fr.po3943
-rw-r--r--po/he.gmobin0 -> 40084 bytes
-rw-r--r--po/he.po3482
-rw-r--r--po/hr.gmobin0 -> 28827 bytes
-rw-r--r--po/hr.po3406
-rw-r--r--po/hu.gmobin0 -> 45112 bytes
-rw-r--r--po/hu.po3325
-rw-r--r--po/insert-header.sin23
-rw-r--r--po/ja.gmobin0 -> 39301 bytes
-rw-r--r--po/ja.po3737
-rw-r--r--po/nb.gmobin0 -> 50344 bytes
-rw-r--r--po/nb.po3522
-rw-r--r--po/nl.gmobin0 -> 80842 bytes
-rw-r--r--po/nl.po3239
-rw-r--r--po/pl.gmobin0 -> 80977 bytes
-rw-r--r--po/pl.po3229
-rw-r--r--po/quot.sed6
-rw-r--r--po/remove-potcdate.sin19
-rw-r--r--po/ro.gmobin0 -> 51978 bytes
-rw-r--r--po/ro.po3546
-rw-r--r--po/ru.gmobin0 -> 52259 bytes
-rw-r--r--po/ru.po3537
-rw-r--r--po/rw.gmobin0 -> 1205 bytes
-rw-r--r--po/rw.po3540
-rw-r--r--po/stamp-po1
-rw-r--r--po/sv.gmobin0 -> 77997 bytes
-rw-r--r--po/sv.po3862
-rw-r--r--po/texinfo.pot2880
-rw-r--r--po/tr.gmobin0 -> 78956 bytes
-rw-r--r--po/tr.po3221
-rw-r--r--po/vi.gmobin0 -> 88013 bytes
-rw-r--r--po/vi.po3252
-rw-r--r--po/zh_CN.gmobin0 -> 77238 bytes
-rw-r--r--po/zh_CN.po3464
-rw-r--r--po/zh_TW.gmobin0 -> 27870 bytes
-rw-r--r--po/zh_TW.po3465
-rw-r--r--system.h260
-rw-r--r--util/Makefile.am62
-rw-r--r--util/Makefile.in882
-rw-r--r--util/README13
-rwxr-xr-xutil/bibtex.test57
-rw-r--r--util/defs.in364
-rw-r--r--util/deref.c208
-rw-r--r--util/dir-example494
-rwxr-xr-xutil/dvipdf.test66
-rwxr-xr-xutil/fix-info-dir317
-rwxr-xr-xutil/fixfonts84
-rw-r--r--util/fixref.gawk143
-rw-r--r--util/gdoc914
-rwxr-xr-xutil/gen-dir-node212
-rwxr-xr-xutil/gendocs.sh351
-rw-r--r--util/gendocs_template100
-rwxr-xr-xutil/infosrch104
-rw-r--r--util/install-info-html157
-rwxr-xr-xutil/latex2html.test79
-rwxr-xr-xutil/local.test59
-rw-r--r--util/outline.gawk144
-rwxr-xr-xutil/pdftexi2dvi19
-rw-r--r--util/prepinfo.awk355
-rwxr-xr-xutil/tex3patch70
-rw-r--r--util/texi-docstring-magic.el347
-rwxr-xr-xutil/texi2dvi1792
-rwxr-xr-xutil/texi2dvi.test84
-rwxr-xr-xutil/texi2pdf19
-rw-r--r--util/texindex.c1194
-rw-r--r--util/texinfo-cat.in3
-rw-r--r--util/texinfo.dtd507
-rw-r--r--util/texinfo.xsl242
-rwxr-xr-xutil/txitextest77
665 files changed, 267617 insertions, 0 deletions
diff --git a/ABOUT-NLS b/ABOUT-NLS
new file mode 100644
index 0000000..83bc72e
--- /dev/null
+++ b/ABOUT-NLS
@@ -0,0 +1,1068 @@
+1 Notes on the Free Translation Project
+***************************************
+
+Free software is going international! The Free Translation Project is
+a way to get maintainers of free software, translators, and users all
+together, so that free software will gradually become able to speak many
+languages. A few packages already provide translations for their
+messages.
+
+ If you found this `ABOUT-NLS' file inside a distribution, you may
+assume that the distributed package does use GNU `gettext' internally,
+itself available at your nearest GNU archive site. But you do _not_
+need to install GNU `gettext' prior to configuring, installing or using
+this package with messages translated.
+
+ Installers will find here some useful hints. These notes also
+explain how users should proceed for getting the programs to use the
+available translations. They tell how people wanting to contribute and
+work on translations can contact the appropriate team.
+
+ When reporting bugs in the `intl/' directory or bugs which may be
+related to internationalization, you should tell about the version of
+`gettext' which is used. The information can be found in the
+`intl/VERSION' file, in internationalized packages.
+
+1.1 Quick configuration advice
+==============================
+
+If you want to exploit the full power of internationalization, you
+should configure it using
+
+ ./configure --with-included-gettext
+
+to force usage of internationalizing routines provided within this
+package, despite the existence of internationalizing capabilities in the
+operating system where this package is being installed. So far, only
+the `gettext' implementation in the GNU C library version 2 provides as
+many features (such as locale alias, message inheritance, automatic
+charset conversion or plural form handling) as the implementation here.
+It is also not possible to offer this additional functionality on top
+of a `catgets' implementation. Future versions of GNU `gettext' will
+very likely convey even more functionality. So it might be a good idea
+to change to GNU `gettext' as soon as possible.
+
+ So you need _not_ provide this option if you are using GNU libc 2 or
+you have installed a recent copy of the GNU gettext package with the
+included `libintl'.
+
+1.2 INSTALL Matters
+===================
+
+Some packages are "localizable" when properly installed; the programs
+they contain can be made to speak your own native language. Most such
+packages use GNU `gettext'. Other packages have their own ways to
+internationalization, predating GNU `gettext'.
+
+ By default, this package will be installed to allow translation of
+messages. It will automatically detect whether the system already
+provides the GNU `gettext' functions. If not, the included GNU
+`gettext' library will be used. This library is wholly contained
+within this package, usually in the `intl/' subdirectory, so prior
+installation of the GNU `gettext' package is _not_ required.
+Installers may use special options at configuration time for changing
+the default behaviour. The commands:
+
+ ./configure --with-included-gettext
+ ./configure --disable-nls
+
+will, respectively, bypass any pre-existing `gettext' to use the
+internationalizing routines provided within this package, or else,
+_totally_ disable translation of messages.
+
+ When you already have GNU `gettext' installed on your system and run
+configure without an option for your new package, `configure' will
+probably detect the previously built and installed `libintl.a' file and
+will decide to use this. This might not be desirable. You should use
+the more recent version of the GNU `gettext' library. I.e. if the file
+`intl/VERSION' shows that the library which comes with this package is
+more recent, you should use
+
+ ./configure --with-included-gettext
+
+to prevent auto-detection.
+
+ The configuration process will not test for the `catgets' function
+and therefore it will not be used. The reason is that even an
+emulation of `gettext' on top of `catgets' could not provide all the
+extensions of the GNU `gettext' library.
+
+ Internationalized packages usually have many `po/LL.po' files, where
+LL gives an ISO 639 two-letter code identifying the language. Unless
+translations have been forbidden at `configure' time by using the
+`--disable-nls' switch, all available translations are installed
+together with the package. However, the environment variable `LINGUAS'
+may be set, prior to configuration, to limit the installed set.
+`LINGUAS' should then contain a space separated list of two-letter
+codes, stating which languages are allowed.
+
+1.3 Using This Package
+======================
+
+As a user, if your language has been installed for this package, you
+only have to set the `LANG' environment variable to the appropriate
+`LL_CC' combination. If you happen to have the `LC_ALL' or some other
+`LC_xxx' environment variables set, you should unset them before
+setting `LANG', otherwise the setting of `LANG' will not have the
+desired effect. Here `LL' is an ISO 639 two-letter language code, and
+`CC' is an ISO 3166 two-letter country code. For example, let's
+suppose that you speak German and live in Germany. At the shell
+prompt, merely execute `setenv LANG de_DE' (in `csh'),
+`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
+This can be done from your `.login' or `.profile' file, once and for
+all.
+
+ You might think that the country code specification is redundant.
+But in fact, some languages have dialects in different countries. For
+example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The
+country code serves to distinguish the dialects.
+
+ The locale naming convention of `LL_CC', with `LL' denoting the
+language and `CC' denoting the country, is the one use on systems based
+on GNU libc. On other systems, some variations of this scheme are
+used, such as `LL' or `LL_CC.ENCODING'. You can get the list of
+locales supported by your system for your language by running the
+command `locale -a | grep '^LL''.
+
+ Not all programs have translations for all languages. By default, an
+English message is shown in place of a nonexistent translation. If you
+understand other languages, you can set up a priority list of languages.
+This is done through a different environment variable, called
+`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG'
+for the purpose of message handling, but you still need to have `LANG'
+set to the primary language; this is required by other parts of the
+system libraries. For example, some Swedish users who would rather
+read translations in German than English for when Swedish is not
+available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
+
+ Special advice for Norwegian users: The language code for Norwegian
+bokma*l changed from `no' to `nb' recently (in 2003). During the
+transition period, while some message catalogs for this language are
+installed under `nb' and some older ones under `no', it's recommended
+for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and
+older translations are used.
+
+ In the `LANGUAGE' environment variable, but not in the `LANG'
+environment variable, `LL_CC' combinations can be abbreviated as `LL'
+to denote the language's main dialect. For example, `de' is equivalent
+to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
+(Portuguese as spoken in Portugal) in this context.
+
+1.4 Translating Teams
+=====================
+
+For the Free Translation Project to be a success, we need interested
+people who like their own language and write it well, and who are also
+able to synergize with other translators speaking the same language.
+Each translation team has its own mailing list. The up-to-date list of
+teams can be found at the Free Translation Project's homepage,
+`http://translationproject.org/', in the "Teams" area.
+
+ If you'd like to volunteer to _work_ at translating messages, you
+should become a member of the translating team for your own language.
+The subscribing address is _not_ the same as the list itself, it has
+`-request' appended. For example, speakers of Swedish can send a
+message to `sv-request@li.org', having this message body:
+
+ subscribe
+
+ Keep in mind that team members are expected to participate
+_actively_ in translations, or at solving translational difficulties,
+rather than merely lurking around. If your team does not exist yet and
+you want to start one, or if you are unsure about what to do or how to
+get started, please write to `coordinator@translationproject.org' to
+reach the coordinator for all translator teams.
+
+ The English team is special. It works at improving and uniformizing
+the terminology in use. Proven linguistic skills are praised more than
+programming skills, here.
+
+1.5 Available Packages
+======================
+
+Languages are not equally supported in all packages. The following
+matrix shows the current state of internationalization, as of November
+2007. The matrix shows, in regard of each package, for which languages
+PO files have been submitted to translation coordination, with a
+translation percentage of at least 50%.
+
+ Ready PO files af am ar az be bg bs ca cs cy da de el en en_GB eo
+ +----------------------------------------------------+
+ Compendium | [] [] [] [] |
+ a2ps | [] [] [] [] [] |
+ aegis | () |
+ ant-phone | () |
+ anubis | [] |
+ ap-utils | |
+ aspell | [] [] [] [] [] |
+ bash | [] |
+ bfd | |
+ bibshelf | [] |
+ binutils | |
+ bison | [] [] |
+ bison-runtime | [] |
+ bluez-pin | [] [] [] [] [] |
+ cflow | [] |
+ clisp | [] [] [] |
+ console-tools | [] [] |
+ coreutils | [] [] [] [] |
+ cpio | |
+ cpplib | [] [] [] |
+ cryptonit | [] |
+ dialog | |
+ diffutils | [] [] [] [] [] [] |
+ doodle | [] |
+ e2fsprogs | [] [] |
+ enscript | [] [] [] [] |
+ fetchmail | [] [] () [] [] |
+ findutils | [] |
+ findutils_stable | [] [] [] |
+ flex | [] [] [] |
+ fslint | |
+ gas | |
+ gawk | [] [] [] |
+ gcal | [] |
+ gcc | [] |
+ gettext-examples | [] [] [] [] [] |
+ gettext-runtime | [] [] [] [] [] |
+ gettext-tools | [] [] |
+ gip | [] |
+ gliv | [] [] |
+ glunarclock | [] |
+ gmult | [] [] |
+ gnubiff | () |
+ gnucash | [] [] () () [] |
+ gnuedu | |
+ gnulib | [] |
+ gnunet | |
+ gnunet-gtk | |
+ gnutls | [] |
+ gpe-aerial | [] [] |
+ gpe-beam | [] [] |
+ gpe-calendar | |
+ gpe-clock | [] [] |
+ gpe-conf | [] [] |
+ gpe-contacts | |
+ gpe-edit | [] |
+ gpe-filemanager | |
+ gpe-go | [] |
+ gpe-login | [] [] |
+ gpe-ownerinfo | [] [] |
+ gpe-package | |
+ gpe-sketchbook | [] [] |
+ gpe-su | [] [] |
+ gpe-taskmanager | [] [] |
+ gpe-timesheet | [] |
+ gpe-today | [] [] |
+ gpe-todo | |
+ gphoto2 | [] [] [] [] |
+ gprof | [] [] |
+ gpsdrive | |
+ gramadoir | [] [] |
+ grep | [] [] |
+ gretl | () |
+ gsasl | |
+ gss | |
+ gst-plugins-bad | [] [] |
+ gst-plugins-base | [] [] |
+ gst-plugins-good | [] [] [] |
+ gst-plugins-ugly | [] [] |
+ gstreamer | [] [] [] [] [] [] [] |
+ gtick | () |
+ gtkam | [] [] [] [] |
+ gtkorphan | [] [] |
+ gtkspell | [] [] [] [] |
+ gutenprint | [] |
+ hello | [] [] [] [] [] |
+ herrie | [] |
+ hylafax | |
+ idutils | [] [] |
+ indent | [] [] [] [] |
+ iso_15924 | |
+ iso_3166 | [] [] [] [] [] [] [] [] [] [] [] |
+ iso_3166_2 | |
+ iso_4217 | [] [] [] |
+ iso_639 | [] [] [] [] |
+ jpilot | [] |
+ jtag | |
+ jwhois | |
+ kbd | [] [] [] [] |
+ keytouch | [] [] |
+ keytouch-editor | [] |
+ keytouch-keyboa... | [] |
+ latrine | () |
+ ld | [] |
+ leafpad | [] [] [] [] [] |
+ libc | [] [] [] [] |
+ libexif | [] |
+ libextractor | [] |
+ libgpewidget | [] [] [] |
+ libgpg-error | [] |
+ libgphoto2 | [] [] |
+ libgphoto2_port | [] [] |
+ libgsasl | |
+ libiconv | [] [] |
+ libidn | [] [] [] |
+ lifelines | [] () |
+ lilypond | [] |
+ lingoteach | |
+ lprng | |
+ lynx | [] [] [] [] |
+ m4 | [] [] [] [] |
+ mailfromd | |
+ mailutils | [] |
+ make | [] [] |
+ man-db | [] [] [] |
+ minicom | [] [] [] |
+ nano | [] [] [] |
+ opcodes | [] |
+ parted | [] [] |
+ pilot-qof | |
+ popt | [] [] [] |
+ psmisc | [] |
+ pwdutils | |
+ qof | |
+ radius | [] |
+ recode | [] [] [] [] [] [] |
+ rpm | [] |
+ screem | |
+ scrollkeeper | [] [] [] [] [] [] [] [] |
+ sed | [] [] [] |
+ shared-mime-info | [] [] [] [] () [] [] [] |
+ sharutils | [] [] [] [] [] [] |
+ shishi | |
+ skencil | [] () |
+ solfege | |
+ soundtracker | [] [] |
+ sp | [] |
+ system-tools-ba... | [] [] [] [] [] [] [] [] [] |
+ tar | [] [] |
+ texinfo | [] [] [] |
+ tin | () () |
+ tuxpaint | [] [] [] [] [] [] |
+ unicode-han-tra... | |
+ unicode-transla... | |
+ util-linux | [] [] [] [] |
+ util-linux-ng | [] [] [] [] |
+ vorbis-tools | [] |
+ wastesedge | () |
+ wdiff | [] [] [] [] |
+ wget | [] [] [] |
+ xchat | [] [] [] [] [] [] [] |
+ xkeyboard-config | [] |
+ xpad | [] [] [] |
+ +----------------------------------------------------+
+ af am ar az be bg bs ca cs cy da de el en en_GB eo
+ 6 0 2 1 8 26 2 40 48 2 56 88 15 1 15 18
+
+ es et eu fa fi fr ga gl gu he hi hr hu id is it
+ +--------------------------------------------------+
+ Compendium | [] [] [] [] [] |
+ a2ps | [] [] [] () |
+ aegis | |
+ ant-phone | [] |
+ anubis | [] |
+ ap-utils | [] [] |
+ aspell | [] [] [] |
+ bash | [] |
+ bfd | [] [] |
+ bibshelf | [] [] [] |
+ binutils | [] [] [] |
+ bison | [] [] [] [] [] [] |
+ bison-runtime | [] [] [] [] [] |
+ bluez-pin | [] [] [] [] [] |
+ cflow | [] |
+ clisp | [] [] |
+ console-tools | |
+ coreutils | [] [] [] [] [] [] |
+ cpio | [] [] [] |
+ cpplib | [] [] |
+ cryptonit | [] |
+ dialog | [] [] [] |
+ diffutils | [] [] [] [] [] [] [] [] [] |
+ doodle | [] [] |
+ e2fsprogs | [] [] [] |
+ enscript | [] [] [] |
+ fetchmail | [] |
+ findutils | [] [] [] |
+ findutils_stable | [] [] [] [] |
+ flex | [] [] [] |
+ fslint | |
+ gas | [] [] |
+ gawk | [] [] [] [] () |
+ gcal | [] [] |
+ gcc | [] |
+ gettext-examples | [] [] [] [] [] [] [] |
+ gettext-runtime | [] [] [] [] [] [] |
+ gettext-tools | [] [] [] [] |
+ gip | [] [] [] [] |
+ gliv | () |
+ glunarclock | [] [] [] |
+ gmult | [] [] [] |
+ gnubiff | () () |
+ gnucash | () () () |
+ gnuedu | [] |
+ gnulib | [] [] [] |
+ gnunet | |
+ gnunet-gtk | |
+ gnutls | |
+ gpe-aerial | [] [] |
+ gpe-beam | [] [] |
+ gpe-calendar | |
+ gpe-clock | [] [] [] [] |
+ gpe-conf | [] |
+ gpe-contacts | [] [] |
+ gpe-edit | [] [] [] [] |
+ gpe-filemanager | [] |
+ gpe-go | [] [] [] |
+ gpe-login | [] [] [] |
+ gpe-ownerinfo | [] [] [] [] [] |
+ gpe-package | [] |
+ gpe-sketchbook | [] [] |
+ gpe-su | [] [] [] [] |
+ gpe-taskmanager | [] [] [] |
+ gpe-timesheet | [] [] [] [] |
+ gpe-today | [] [] [] [] |
+ gpe-todo | [] |
+ gphoto2 | [] [] [] [] [] |
+ gprof | [] [] [] [] [] |
+ gpsdrive | [] |
+ gramadoir | [] [] |
+ grep | [] [] [] |
+ gretl | [] [] [] () |
+ gsasl | [] [] |
+ gss | [] [] |
+ gst-plugins-bad | [] [] [] [] |
+ gst-plugins-base | [] [] [] [] |
+ gst-plugins-good | [] [] [] [] [] |
+ gst-plugins-ugly | [] [] [] [] |
+ gstreamer | [] [] [] |
+ gtick | [] [] [] |
+ gtkam | [] [] [] [] |
+ gtkorphan | [] [] |
+ gtkspell | [] [] [] [] [] [] [] |
+ gutenprint | [] |
+ hello | [] [] [] [] [] [] [] [] [] [] [] [] [] |
+ herrie | [] |
+ hylafax | |
+ idutils | [] [] [] [] [] |
+ indent | [] [] [] [] [] [] [] [] [] [] |
+ iso_15924 | [] |
+ iso_3166 | [] [] [] [] [] [] [] [] [] [] [] [] [] |
+ iso_3166_2 | [] |
+ iso_4217 | [] [] [] [] [] [] |
+ iso_639 | [] [] [] [] [] [] |
+ jpilot | [] [] |
+ jtag | [] |
+ jwhois | [] [] [] [] [] |
+ kbd | [] [] |
+ keytouch | [] [] [] |
+ keytouch-editor | [] |
+ keytouch-keyboa... | [] [] |
+ latrine | [] [] |
+ ld | [] [] [] [] |
+ leafpad | [] [] [] [] [] [] |
+ libc | [] [] [] [] [] |
+ libexif | [] |
+ libextractor | [] |
+ libgpewidget | [] [] [] [] [] |
+ libgpg-error | [] |
+ libgphoto2 | [] [] [] |
+ libgphoto2_port | [] [] |
+ libgsasl | [] [] |
+ libiconv | [] [] [] |
+ libidn | [] [] |
+ lifelines | () |
+ lilypond | [] [] [] |
+ lingoteach | [] [] [] |
+ lprng | |
+ lynx | [] [] [] |
+ m4 | [] [] [] [] |
+ mailfromd | |
+ mailutils | [] [] |
+ make | [] [] [] [] [] [] [] [] |
+ man-db | [] |
+ minicom | [] [] [] [] |
+ nano | [] [] [] [] [] [] [] |
+ opcodes | [] [] [] [] |
+ parted | [] [] [] |
+ pilot-qof | |
+ popt | [] [] [] [] |
+ psmisc | [] [] |
+ pwdutils | |
+ qof | [] |
+ radius | [] [] |
+ recode | [] [] [] [] [] [] [] [] |
+ rpm | [] [] |
+ screem | |
+ scrollkeeper | [] [] [] |
+ sed | [] [] [] [] [] |
+ shared-mime-info | [] [] [] [] [] [] |
+ sharutils | [] [] [] [] [] [] [] [] |
+ shishi | [] |
+ skencil | [] [] |
+ solfege | [] |
+ soundtracker | [] [] [] |
+ sp | [] |
+ system-tools-ba... | [] [] [] [] [] [] [] [] [] |
+ tar | [] [] [] [] [] |
+ texinfo | [] [] [] |
+ tin | [] () |
+ tuxpaint | [] [] |
+ unicode-han-tra... | |
+ unicode-transla... | [] [] |
+ util-linux | [] [] [] [] [] [] [] |
+ util-linux-ng | [] [] [] [] [] [] [] |
+ vorbis-tools | |
+ wastesedge | () |
+ wdiff | [] [] [] [] [] [] [] [] |
+ wget | [] [] [] [] [] [] [] [] |
+ xchat | [] [] [] [] [] [] [] |
+ xkeyboard-config | [] [] [] [] |
+ xpad | [] [] [] |
+ +--------------------------------------------------+
+ es et eu fa fi fr ga gl gu he hi hr hu id is it
+ 85 22 14 2 48 101 61 12 2 8 2 6 53 29 1 52
+
+ ja ka ko ku ky lg lt lv mk mn ms mt nb ne nl nn
+ +--------------------------------------------------+
+ Compendium | [] |
+ a2ps | () [] [] |
+ aegis | () |
+ ant-phone | [] |
+ anubis | [] [] [] |
+ ap-utils | [] |
+ aspell | [] [] |
+ bash | [] |
+ bfd | |
+ bibshelf | [] |
+ binutils | |
+ bison | [] [] [] |
+ bison-runtime | [] [] [] |
+ bluez-pin | [] [] [] |
+ cflow | |
+ clisp | [] |
+ console-tools | |
+ coreutils | [] |
+ cpio | [] |
+ cpplib | [] |
+ cryptonit | [] |
+ dialog | [] [] |
+ diffutils | [] [] [] |
+ doodle | |
+ e2fsprogs | [] |
+ enscript | [] |
+ fetchmail | [] [] |
+ findutils | [] |
+ findutils_stable | [] |
+ flex | [] [] |
+ fslint | |
+ gas | |
+ gawk | [] [] |
+ gcal | |
+ gcc | |
+ gettext-examples | [] [] [] |
+ gettext-runtime | [] [] [] |
+ gettext-tools | [] [] |
+ gip | [] [] |
+ gliv | [] |
+ glunarclock | [] [] |
+ gmult | [] [] [] |
+ gnubiff | |
+ gnucash | () () () |
+ gnuedu | |
+ gnulib | [] [] |
+ gnunet | |
+ gnunet-gtk | |
+ gnutls | [] |
+ gpe-aerial | [] |
+ gpe-beam | [] |
+ gpe-calendar | [] |
+ gpe-clock | [] [] [] |
+ gpe-conf | [] [] [] |
+ gpe-contacts | [] |
+ gpe-edit | [] [] [] |
+ gpe-filemanager | [] [] |
+ gpe-go | [] [] [] |
+ gpe-login | [] [] [] |
+ gpe-ownerinfo | [] [] |
+ gpe-package | [] [] |
+ gpe-sketchbook | [] [] |
+ gpe-su | [] [] [] |
+ gpe-taskmanager | [] [] [] [] |
+ gpe-timesheet | [] |
+ gpe-today | [] [] |
+ gpe-todo | [] |
+ gphoto2 | [] [] |
+ gprof | [] |
+ gpsdrive | [] |
+ gramadoir | () |
+ grep | [] [] |
+ gretl | |
+ gsasl | [] |
+ gss | |
+ gst-plugins-bad | [] |
+ gst-plugins-base | [] |
+ gst-plugins-good | [] |
+ gst-plugins-ugly | [] |
+ gstreamer | [] |
+ gtick | [] |
+ gtkam | [] [] |
+ gtkorphan | [] |
+ gtkspell | [] [] |
+ gutenprint | [] |
+ hello | [] [] [] [] [] [] [] |
+ herrie | [] |
+ hylafax | |
+ idutils | [] |
+ indent | [] [] |
+ iso_15924 | [] |
+ iso_3166 | [] [] [] [] [] [] [] [] |
+ iso_3166_2 | [] |
+ iso_4217 | [] [] [] |
+ iso_639 | [] [] [] [] |
+ jpilot | () () |
+ jtag | |
+ jwhois | [] |
+ kbd | [] |
+ keytouch | [] |
+ keytouch-editor | [] |
+ keytouch-keyboa... | |
+ latrine | [] |
+ ld | |
+ leafpad | [] [] |
+ libc | [] [] [] |
+ libexif | |
+ libextractor | |
+ libgpewidget | [] |
+ libgpg-error | |
+ libgphoto2 | [] |
+ libgphoto2_port | [] |
+ libgsasl | [] |
+ libiconv | [] |
+ libidn | [] [] |
+ lifelines | [] |
+ lilypond | [] |
+ lingoteach | [] |
+ lprng | |
+ lynx | [] [] |
+ m4 | [] [] |
+ mailfromd | |
+ mailutils | |
+ make | [] [] [] |
+ man-db | |
+ minicom | [] |
+ nano | [] [] [] |
+ opcodes | [] |
+ parted | [] [] |
+ pilot-qof | |
+ popt | [] [] [] |
+ psmisc | [] [] [] |
+ pwdutils | |
+ qof | |
+ radius | |
+ recode | [] |
+ rpm | [] [] |
+ screem | [] |
+ scrollkeeper | [] [] [] [] |
+ sed | [] [] |
+ shared-mime-info | [] [] [] [] [] [] [] |
+ sharutils | [] [] |
+ shishi | |
+ skencil | |
+ solfege | () () |
+ soundtracker | |
+ sp | () |
+ system-tools-ba... | [] [] [] [] |
+ tar | [] [] [] |
+ texinfo | [] [] |
+ tin | |
+ tuxpaint | () [] [] |
+ unicode-han-tra... | |
+ unicode-transla... | |
+ util-linux | [] [] |
+ util-linux-ng | [] [] |
+ vorbis-tools | |
+ wastesedge | [] |
+ wdiff | [] [] |
+ wget | [] [] |
+ xchat | [] [] [] [] |
+ xkeyboard-config | [] [] [] |
+ xpad | [] [] [] |
+ +--------------------------------------------------+
+ ja ka ko ku ky lg lt lv mk mn ms mt nb ne nl nn
+ 51 2 25 3 2 0 6 0 2 2 20 0 11 1 103 6
+
+ or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv ta
+ +--------------------------------------------------+
+ Compendium | [] [] [] [] [] |
+ a2ps | () [] [] [] [] [] [] |
+ aegis | () () |
+ ant-phone | [] [] |
+ anubis | [] [] [] |
+ ap-utils | () |
+ aspell | [] [] [] |
+ bash | [] [] |
+ bfd | |
+ bibshelf | [] |
+ binutils | [] [] |
+ bison | [] [] [] [] [] |
+ bison-runtime | [] [] [] [] [] |
+ bluez-pin | [] [] [] [] [] [] [] [] [] |
+ cflow | [] |
+ clisp | [] |
+ console-tools | [] |
+ coreutils | [] [] [] [] |
+ cpio | [] [] [] |
+ cpplib | [] |
+ cryptonit | [] [] |
+ dialog | [] |
+ diffutils | [] [] [] [] [] [] |
+ doodle | [] [] |
+ e2fsprogs | [] [] |
+ enscript | [] [] [] [] [] |
+ fetchmail | [] [] [] |
+ findutils | [] [] [] |
+ findutils_stable | [] [] [] [] [] [] |
+ flex | [] [] [] [] [] |
+ fslint | [] |
+ gas | |
+ gawk | [] [] [] [] |
+ gcal | [] |
+ gcc | [] [] |
+ gettext-examples | [] [] [] [] [] [] [] [] |
+ gettext-runtime | [] [] [] [] [] [] [] [] |
+ gettext-tools | [] [] [] [] [] [] [] |
+ gip | [] [] [] [] |
+ gliv | [] [] [] [] [] [] |
+ glunarclock | [] [] [] [] [] [] |
+ gmult | [] [] [] [] |
+ gnubiff | () [] |
+ gnucash | () [] |
+ gnuedu | |
+ gnulib | [] [] [] |
+ gnunet | |
+ gnunet-gtk | [] |
+ gnutls | [] [] |
+ gpe-aerial | [] [] [] [] [] [] [] |
+ gpe-beam | [] [] [] [] [] [] [] |
+ gpe-calendar | [] [] [] [] |
+ gpe-clock | [] [] [] [] [] [] [] [] |
+ gpe-conf | [] [] [] [] [] [] [] |
+ gpe-contacts | [] [] [] [] [] |
+ gpe-edit | [] [] [] [] [] [] [] [] [] |
+ gpe-filemanager | [] [] |
+ gpe-go | [] [] [] [] [] [] [] [] |
+ gpe-login | [] [] [] [] [] [] [] [] |
+ gpe-ownerinfo | [] [] [] [] [] [] [] [] |
+ gpe-package | [] [] |
+ gpe-sketchbook | [] [] [] [] [] [] [] [] |
+ gpe-su | [] [] [] [] [] [] [] [] |
+ gpe-taskmanager | [] [] [] [] [] [] [] [] |
+ gpe-timesheet | [] [] [] [] [] [] [] [] |
+ gpe-today | [] [] [] [] [] [] [] [] |
+ gpe-todo | [] [] [] [] |
+ gphoto2 | [] [] [] [] [] [] |
+ gprof | [] [] [] |
+ gpsdrive | [] [] |
+ gramadoir | [] [] |
+ grep | [] [] [] [] |
+ gretl | [] [] [] |
+ gsasl | [] [] [] |
+ gss | [] [] [] [] |
+ gst-plugins-bad | [] [] [] |
+ gst-plugins-base | [] [] |
+ gst-plugins-good | [] [] |
+ gst-plugins-ugly | [] [] [] |
+ gstreamer | [] [] [] [] |
+ gtick | [] |
+ gtkam | [] [] [] [] [] |
+ gtkorphan | [] |
+ gtkspell | [] [] [] [] [] [] [] [] |
+ gutenprint | [] |
+ hello | [] [] [] [] [] [] [] [] |
+ herrie | [] [] [] |
+ hylafax | |
+ idutils | [] [] [] [] [] |
+ indent | [] [] [] [] [] [] [] |
+ iso_15924 | |
+ iso_3166 | [] [] [] [] [] [] [] [] [] [] [] [] [] |
+ iso_3166_2 | |
+ iso_4217 | [] [] [] [] [] [] [] |
+ iso_639 | [] [] [] [] [] [] [] |
+ jpilot | |
+ jtag | [] |
+ jwhois | [] [] [] [] |
+ kbd | [] [] [] |
+ keytouch | [] |
+ keytouch-editor | [] |
+ keytouch-keyboa... | [] |
+ latrine | |
+ ld | [] |
+ leafpad | [] [] [] [] [] [] |
+ libc | [] [] [] [] |
+ libexif | [] [] |
+ libextractor | [] [] |
+ libgpewidget | [] [] [] [] [] [] [] [] |
+ libgpg-error | [] [] [] |
+ libgphoto2 | [] |
+ libgphoto2_port | [] [] [] |
+ libgsasl | [] [] [] [] |
+ libiconv | [] [] [] |
+ libidn | [] [] () |
+ lifelines | [] [] |
+ lilypond | |
+ lingoteach | [] |
+ lprng | [] |
+ lynx | [] [] [] |
+ m4 | [] [] [] [] [] |
+ mailfromd | [] |
+ mailutils | [] [] [] |
+ make | [] [] [] [] |
+ man-db | [] [] [] [] |
+ minicom | [] [] [] [] [] |
+ nano | [] [] [] [] |
+ opcodes | [] [] |
+ parted | [] |
+ pilot-qof | |
+ popt | [] [] [] [] |
+ psmisc | [] [] |
+ pwdutils | [] [] |
+ qof | [] [] |
+ radius | [] [] |
+ recode | [] [] [] [] [] [] [] |
+ rpm | [] [] [] [] |
+ screem | |
+ scrollkeeper | [] [] [] [] [] [] [] |
+ sed | [] [] [] [] [] [] [] [] [] |
+ shared-mime-info | [] [] [] [] [] [] |
+ sharutils | [] [] [] [] |
+ shishi | [] |
+ skencil | [] [] [] |
+ solfege | [] |
+ soundtracker | [] [] |
+ sp | |
+ system-tools-ba... | [] [] [] [] [] [] [] [] [] |
+ tar | [] [] [] [] |
+ texinfo | [] [] [] [] |
+ tin | () |
+ tuxpaint | [] [] [] [] [] [] |
+ unicode-han-tra... | |
+ unicode-transla... | |
+ util-linux | [] [] [] [] |
+ util-linux-ng | [] [] [] [] |
+ vorbis-tools | [] |
+ wastesedge | |
+ wdiff | [] [] [] [] [] [] [] |
+ wget | [] [] [] [] |
+ xchat | [] [] [] [] [] [] [] |
+ xkeyboard-config | [] [] [] |
+ xpad | [] [] [] |
+ +--------------------------------------------------+
+ or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv ta
+ 0 5 77 31 53 4 58 72 3 45 46 9 45 122 3
+
+ tg th tk tr uk ven vi wa xh zh_CN zh_HK zh_TW zu
+ +---------------------------------------------------+
+ Compendium | [] [] [] [] | 19
+ a2ps | [] [] [] | 19
+ aegis | [] | 1
+ ant-phone | [] [] | 6
+ anubis | [] [] [] | 11
+ ap-utils | () [] | 4
+ aspell | [] [] [] | 16
+ bash | [] | 6
+ bfd | | 2
+ bibshelf | [] | 7
+ binutils | [] [] [] [] | 9
+ bison | [] [] [] [] | 20
+ bison-runtime | [] [] [] [] | 18
+ bluez-pin | [] [] [] [] [] [] | 28
+ cflow | [] [] | 5
+ clisp | | 9
+ console-tools | [] [] | 5
+ coreutils | [] [] [] | 18
+ cpio | [] [] [] [] | 11
+ cpplib | [] [] [] [] [] | 12
+ cryptonit | [] | 6
+ dialog | [] [] [] | 9
+ diffutils | [] [] [] [] [] | 29
+ doodle | [] | 6
+ e2fsprogs | [] [] | 10
+ enscript | [] [] [] | 16
+ fetchmail | [] [] | 12
+ findutils | [] [] [] | 11
+ findutils_stable | [] [] [] [] | 18
+ flex | [] [] | 15
+ fslint | [] | 2
+ gas | [] | 3
+ gawk | [] [] [] | 16
+ gcal | [] | 5
+ gcc | [] [] [] | 7
+ gettext-examples | [] [] [] [] [] [] | 29
+ gettext-runtime | [] [] [] [] [] [] | 28
+ gettext-tools | [] [] [] [] [] | 20
+ gip | [] [] | 13
+ gliv | [] [] | 11
+ glunarclock | [] [] [] | 15
+ gmult | [] [] [] [] | 16
+ gnubiff | [] | 2
+ gnucash | () [] | 5
+ gnuedu | [] | 2
+ gnulib | [] | 10
+ gnunet | | 0
+ gnunet-gtk | [] [] | 3
+ gnutls | | 4
+ gpe-aerial | [] [] | 14
+ gpe-beam | [] [] | 14
+ gpe-calendar | [] [] | 7
+ gpe-clock | [] [] [] [] | 21
+ gpe-conf | [] [] [] | 16
+ gpe-contacts | [] [] | 10
+ gpe-edit | [] [] [] [] [] | 22
+ gpe-filemanager | [] [] | 7
+ gpe-go | [] [] [] [] | 19
+ gpe-login | [] [] [] [] [] | 21
+ gpe-ownerinfo | [] [] [] [] | 21
+ gpe-package | [] | 6
+ gpe-sketchbook | [] [] | 16
+ gpe-su | [] [] [] [] | 21
+ gpe-taskmanager | [] [] [] [] | 21
+ gpe-timesheet | [] [] [] [] | 18
+ gpe-today | [] [] [] [] [] | 21
+ gpe-todo | [] [] | 8
+ gphoto2 | [] [] [] [] | 21
+ gprof | [] [] | 13
+ gpsdrive | [] | 5
+ gramadoir | [] | 7
+ grep | [] | 12
+ gretl | | 6
+ gsasl | [] [] [] | 9
+ gss | [] | 7
+ gst-plugins-bad | [] [] [] | 13
+ gst-plugins-base | [] [] | 11
+ gst-plugins-good | [] [] [] [] [] | 16
+ gst-plugins-ugly | [] [] [] | 13
+ gstreamer | [] [] [] | 18
+ gtick | [] [] | 7
+ gtkam | [] | 16
+ gtkorphan | [] | 7
+ gtkspell | [] [] [] [] [] [] | 27
+ gutenprint | | 4
+ hello | [] [] [] [] [] | 38
+ herrie | [] [] | 8
+ hylafax | | 0
+ idutils | [] [] | 15
+ indent | [] [] [] [] [] | 28
+ iso_15924 | [] [] | 4
+ iso_3166 | [] [] [] [] [] [] [] [] [] | 54
+ iso_3166_2 | [] [] | 4
+ iso_4217 | [] [] [] [] [] | 24
+ iso_639 | [] [] [] [] [] | 26
+ jpilot | [] [] [] [] | 7
+ jtag | [] | 3
+ jwhois | [] [] [] | 13
+ kbd | [] [] [] | 13
+ keytouch | [] | 8
+ keytouch-editor | [] | 5
+ keytouch-keyboa... | [] | 5
+ latrine | [] [] | 5
+ ld | [] [] [] [] | 10
+ leafpad | [] [] [] [] [] | 24
+ libc | [] [] [] | 19
+ libexif | [] | 5
+ libextractor | [] | 5
+ libgpewidget | [] [] [] | 20
+ libgpg-error | [] | 6
+ libgphoto2 | [] [] | 9
+ libgphoto2_port | [] [] [] | 11
+ libgsasl | [] | 8
+ libiconv | [] [] | 11
+ libidn | [] [] | 11
+ lifelines | | 4
+ lilypond | [] | 6
+ lingoteach | [] | 6
+ lprng | [] | 2
+ lynx | [] [] [] | 15
+ m4 | [] [] [] | 18
+ mailfromd | [] [] | 3
+ mailutils | [] [] | 8
+ make | [] [] [] | 20
+ man-db | [] | 9
+ minicom | [] | 14
+ nano | [] [] [] | 20
+ opcodes | [] [] | 10
+ parted | [] [] [] | 11
+ pilot-qof | [] | 1
+ popt | [] [] [] [] | 18
+ psmisc | [] [] | 10
+ pwdutils | [] | 3
+ qof | [] | 4
+ radius | [] [] | 7
+ recode | [] [] [] | 25
+ rpm | [] [] [] [] | 13
+ screem | [] | 2
+ scrollkeeper | [] [] [] [] | 26
+ sed | [] [] [] [] | 23
+ shared-mime-info | [] [] [] | 29
+ sharutils | [] [] [] | 23
+ shishi | [] | 3
+ skencil | [] | 7
+ solfege | [] | 3
+ soundtracker | [] [] | 9
+ sp | [] | 3
+ system-tools-ba... | [] [] [] [] [] [] [] | 38
+ tar | [] [] [] | 17
+ texinfo | [] [] [] | 15
+ tin | | 1
+ tuxpaint | [] [] [] | 19
+ unicode-han-tra... | | 0
+ unicode-transla... | | 2
+ util-linux | [] [] [] | 20
+ util-linux-ng | [] [] [] | 20
+ vorbis-tools | [] [] | 4
+ wastesedge | | 1
+ wdiff | [] [] | 23
+ wget | [] [] [] | 20
+ xchat | [] [] [] [] | 29
+ xkeyboard-config | [] [] [] | 14
+ xpad | [] [] [] | 15
+ +---------------------------------------------------+
+ 76 teams tg th tk tr uk ven vi wa xh zh_CN zh_HK zh_TW zu
+ 163 domains 0 3 1 74 51 0 143 21 1 57 7 45 0 2036
+
+ Some counters in the preceding matrix are higher than the number of
+visible blocks let us expect. This is because a few extra PO files are
+used for implementing regional variants of languages, or language
+dialects.
+
+ For a PO file in the matrix above to be effective, the package to
+which it applies should also have been internationalized and
+distributed as such by its maintainer. There might be an observable
+lag between the mere existence a PO file and its wide availability in a
+distribution.
+
+ If November 2007 seems to be old, you may fetch a more recent copy
+of this `ABOUT-NLS' file on most GNU archive sites. The most
+up-to-date matrix with full percentage details can be found at
+`http://translationproject.org/extra/matrix.html'.
+
+1.6 Using `gettext' in new packages
+===================================
+
+If you are writing a freely available program and want to
+internationalize it you are welcome to use GNU `gettext' in your
+package. Of course you have to respect the GNU Library General Public
+License which covers the use of the GNU `gettext' library. This means
+in particular that even non-free programs can use `libintl' as a shared
+library, whereas only free software can use `libintl' as a static
+library or use modified versions of `libintl'.
+
+ Once the sources are changed appropriately and the setup can handle
+the use of `gettext' the only thing missing are the translations. The
+Free Translation Project is also available for packages which are not
+developed inside the GNU project. Therefore the information given above
+applies also for every other Free Software Project. Contact
+`coordinator@translationproject.org' to make the `.pot' files available
+to the translation teams.
+
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..4d918be
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,39 @@
+$Id: AUTHORS,v 1.14 2008/03/05 09:05:15 gray Exp $
+Texinfo authors.
+
+ Copyright (C) 2003, 2005, 2006, 2007, 2008 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.
+
+Karl Berry all files.
+Per Bothner makeinfo/xml.c, makeinfo/docbook.c updates.
+Torsten Bronger texinfo.dtd.
+Bob Chassell texinfo.tex, original texinfo.txi.
+Akim Demaille texi2dvi, util/* tests.
+Alper Ersoy makeinfo: enhancements in all files, especially
+ html-, xml-, and docbook-related.
+Brian Fox all makeinfo/* and info/* files, info-stnd.texi.
+Noah Friedman original texi2dvi.
+Oleg Katsitadze doc/*
+Dave Love original makeinfo/html.[ch].
+Karl Heinz Marbaise original makeinfo language support, most files.
+Philippe Martin original makeinfo xml/docbook output.
+Sergey Poznyakoff all files.
+Paul Rubin original makeinfo/multi.c.
+Andreas Schwab texinfo.tex, configure.ac, most makeinfo files.
+Richard Stallman original texinfo.tex, install-info.c,
+ texindex.c, texinfo.txi.
+Zack Weinberg texinfo.tex: @macro implementation.
+Ralf Wildenhues util/gendocs.sh, makeinfo/tests/*,
+ makeinfo/html.c, makeinfo/cmds.c, makeinfo/footnote.c,
+ doc/texinfo.txi,
+ Makefile.am, configure.ac.
+Eli Zaretskii all files.
+
+See http://translationproject.org/team/index.html for the
+translation teams for a given language LL.
+
+Many files included in the Texinfo distribution are copied from other
+locations, no author information is given for those. See util/srclist*.
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..9a2708d
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 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.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ 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, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 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/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..fc3d374
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,8317 @@
+2008-09-18 Karl Berry <karl@tug.org>
+
+ * Version 4.13.
+
+2008-09-13 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * info/window.c (line_map_init): Take an additional argument,
+ node.
+ (window_compute_line_map): Recompute the line map if the node
+ has changed.
+ * info/window.h (struct line_map_struct): New member `node'.
+
+2008-08-29 Karl Berry <karl@gnu.org>
+
+ * doc/info-stnd.texi: use @kbd for key sequences and @key only for
+ names of keys, as intended. Inspired by Eli, 28 Aug 2008 21:21:38.
+
+2008-08-28 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (main): convert_from_stream (stdin)
+ if an input filename is named "-". Suggestion from
+ Bruno Haible, 26 Aug 2008 01:05:28.
+
+2008-08-27 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (EXECUTE_STRING_MAX): bump to 32k.
+ Report from Patrice, 20 Aug 2008 14:28:30.
+ A real fix is beyond me right now, and seems unnecessary
+ for the future since we're moving to a different implementation.
+
+2008-08-16 Karl Berry <karl@tug.org>
+
+ * pretest 4.12.94.
+
+2008-08-15 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi (run_thumbpdf): needs $in_dir on the filename.
+ Report from: Christoph Spiel, 13 Aug 2008 08:27:16.
+
+2008-08-15 Ben Pfaff <blp@cs.stanford.edu> (tiny change)
+
+ * makeinfo/makeinfo.c (remember_brace_1): always xstrdup.
+ Avoids seg fault on input of {x}@y, e.g., makeinfo texinfo.tex.
+ Sent 14 Aug 2008 21:35:19.
+
+2008-08-14 Karl Berry <karl@gnu.org>
+
+ * info/info.c (info_short_help): mention Info manuals and the h
+ key within the program.
+
+2008-08-10 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi (absolute_filenames): preserve even non-directories
+ in the returned path, in case they contain metacharacters
+ meaningful to TeX, such as braces.
+ Bug report from Werner Lemberg, 10 Aug 2008 08:26:58.
+
+2008-07-27 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi (xref_files_save): null out TAR_OPTIONS.
+ From Jim Meyering.
+
+2008-07-27 Karl Berry <karl@tug.org>
+
+ * pretest 4.12.93.
+
+ * gnulib: import memmem.
+
+2008-07-07 Karl Berry <karl@gnu.org>
+
+ * install-info/tests/*-test: prefix the template with ii##.
+
+2008-07-06 Karl Berry <karl@tug.org>
+
+ * pretest 4.12.92.
+
+2008-07-05 Robert Kiesling <rkiesling@earthlink.net> (tiny change)
+
+ * makeinfo/node.c (cm_node): move <p> to after anchors, closer to
+ <div>.
+
+2008-07-05 Karl Berry <karl@gnu.org>
+
+ * install-info/tests/ii-0041-test, ii-0050-test: with template,
+ have to handle compressed output files differently, or
+ the temp files are left behind by distclean.
+
+ * install-info/tests/*-test: use mktemp XXXXXXXX for BSD.
+ Report from Unga, 29 Jun 2008 08:29:54.
+
+2008-07-04 Akim Demaille <akim@epita.fr>
+
+ texi2dvi: Fix -t.
+ * util/texi2dvi (run_tex): The code that installs a symlink was
+ installing the symlink directly to itself, instead of towards the
+ actual source file. I wonder how it worked. As a result -t was
+ not taken into account.
+ Fix the symlink creation.
+ * util/texi2dvi.test (one_run): Test -t support.
+
+2008-07-03 Karl Berry <karl@gnu.org>
+
+ * doc/Makefile.am (pdftexi2dvi.1): use change_envvars here too.
+
+2008-07-02 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi (generated_files_get): find .fls files too.
+ (from the -recorder option.)
+ Suggestion from Wybo Dekker.
+
+2008-07-01 Karl Berry <karl@gnu.org>
+
+ * doc/Makefile.am (change_envvars): include util_srcdir in PATH
+ so texi2pdf can find texi2dvi for making the man pages.
+ Report from Michael Haubenwallner, 01 Jul 2008 14:33:18.
+
+2008-06-28 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * info/info.c (long_option): New options
+ --show-malformed-multibytes and --no-show-malformed-multibytes
+ * info/man.c (find_man_formatter): If INFO_MAN_COMMAND is
+ specified, use its value as man command.
+ * info/window.c (show_malformed_multibyte_p): New variable.
+ (process_node_text): Ignore malformed multibyte characters unless
+ show_malformed_multibyte_p is set.
+ * info/window.h (show_malformed_multibyte_p): New extern.
+
+ * doc/info-stnd.texi (Invoking Info): Document new options.
+ * NEWS: Likewise.
+
+2008-06-18 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi (usage): More comments.
+ (version): exit 0.
+ Reported by Karl Berry.
+
+2008-06-16 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi (version): New function, to replace...
+ ($version): this.
+ (usage): Document --dvipdf.
+
+2008-06-16 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi: Sort functions.
+
+2008-06-16 Akim Demaille <akim@epita.fr>
+
+ texi2dvi: avoid "\n" in echos to please Bash 3.2.
+ It is virtually impossible to find a safe means to use
+ echo with \n in it. So use cat and here docs.
+ * util/texi2dvi ($usage): Remove, replaced by...
+ (usage): this function.
+
+2008-06-16 Akim Demaille <demaille@gostai.com>
+
+ Support -I dir1:dir2, as per the documentation.
+ Reported by Vincent Ordy.
+ * util/texi2dvi: (list_concat_dirs): New.
+ Currently mostly a copy of absolute_filenames, but the latter
+ is scheduled for removal.
+ Use list_concat_dirs for -I support.
+ (--I*): Remove, not documented anywhere, and too accepting.
+
+2008-06-15 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * autogen.sh: Fix quotation typo.
+ * gnulib/lib/configmake.h, gnulib/lib/stdbool_.h: Remove.
+
+2008-06-13 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Fix length calculation for strings containing ANSI escapes.
+ Bug reported by Benno Schulenberg.
+
+ * info/man.c (clean_manpage): Remove.
+ (get_manpage_contents): Remove the kludge introduced 2006-08-13.
+ * info/window.c (process_node_text): ANSI escapes have visible
+ length of 0.
+ (clean_manpage): Multibyte-safe implementation.
+ * info/window.h (clean_manpage): New prototype.
+
+2008-06-12 Yavor Doganov <yavor@gnu.org> (tiny change)
+
+ * util/gendocs_template:
+ 1. Link to the new FSF online store.
+ 2. /server/footer-min.html is no longer necessary and we should remove
+ it at some point. It would be easier if less articles include it.
+ 3. Bump copyright year.
+
+2008-06-12 Karl Berry <karl@tug.org>
+
+ * pretest 4.12.91.
+
+2008-06-11 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * info/session.c (point_backward_char): Skip columns until
+ previous point is reached.
+
+ * info/dir.c, info/display.c, info/dribble.c, info/echo-area.c
+ info/filesys.c, info/footnotes.c, info/gc.c, info/indices.c,
+ info/info-utils.c, info/info.c, info/infodoc.c, info/infokey.c,
+ info/infomap.c, info/m-x.c, info/makedoc.c, info/man.c,
+ info/nodemenu.c, info/nodes.c, info/pcterm.c, info/search.c,
+ info/session.c, info/terminal.c, info/tilde.c, info/variables.c,
+ info/window.c: Avoid useless type casts.
+
+2008-06-11 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Fix incremental regexp searches (bug reported by Bruno Haible).
+
+ * info/search.c (regexp_search): Take an additional argument,
+ pret. Return the final state of search binding if it is given.
+ * info/search.h (regexp_search): Update prototype.
+ * info/session.c (info_search_in_node_internal): New function.
+ (info_search_in_node): Rewrite as a wrapper over
+ info_search_in_node_internal.
+ (info_search_internal): Take an additional argument. Initialize
+ window->point from it if it is given.
+ Use info_search_in_node_internal.
+
+2008-06-10 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * info/session.c (_looking_at_newline, point_next_line)
+ (point_prev_line, point_forward_char, point_backward_char)
+ (point_skip_ws_forward, point_skip_ws_backward)
+ (point_forward_word, point_backward_word): New functions.
+ (info_end_of_line, info_forward_char, info_backward_char)
+ (info_forward_word, info_backward_word): Reimplement to work
+ correctly in multibytes locales.
+ * info/window.c (window_scan_line): New function.
+ (window_compute_line_map): Rewrite using window_scan_line.
+ (window_end_of_line): New function.
+ * info/window.h (LINE_MAP): Change type of map to long.
+ (window_end_of_line): New prototype.
+
+2008-06-10 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Fix cursor positioning in multibyte locales.
+
+ * info/display.c (process_node_text): Move to window.c
+ * info/display.h (process_node_text): Move to window.h
+ (handle_tag): New prototype.
+
+ * info/window.c (window_get_cursor_column): Rewrite using
+ window_point_to_column.
+ (window_chars_to_goal): Change signature.
+ (process_node_text): Move from display.c
+ (window_line_map_init, window_compute_line_map)
+ (window_point_to_column): New functions.
+ * info/window.h (LINE_MAP): New data type.
+ (WINDOW): New member line_map.
+ (window_chars_to_goal): Change prototype.
+ (window_line_map_init, window_compute_line_map)
+ (window_point_to_column): New prototypes.
+
+ * info/echo-area.c (ea_tab_insert, ea_kill_word)
+ (ea_backward_kill_w): Call window_line_map_init.
+ * info/session.c (move_to_new_line): Change call to
+ window_chars_to_goal.
+ (info_end_of_line, info_beginning_of_line): Use line map.
+
+2008-06-09 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * info/info-utils.c (printed_representation): Fix length
+ calculation.
+
+2008-06-03 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi (run_makeinfo): = not ==.
+ From Ralf W, 3 Jun 2008 21:12:30.
+
+2008-05-22 Karl Berry <karl@tug.org>
+
+ * pretest 4.12.90.
+
+ * install-info/tests/Makefile.am (EXTRA_DIST): missed ii-0051-test.
+
+2008-05-20 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (cm_image): need another byte for fullname.
+ Report from Patrice Dumas, 15 May 2008 00:40:03.
+
+2008-05-19 Duncan Murdoch <murdoch@stats.uwo.ca>
+
+ Added --internal-links option to print file of internal links:
+ * makeinfo/makeinfo.c (OPT_INTERNAL_LINKS, long_options, main, usage):
+ add command-line option.
+ (convert_from_loaded_file): write the file.
+ * makeinfo/html.c (internal_links_filename,
+ internal_links_stream, escaped_anchor_name): new globals and fn.
+ (add_escaped_anchor): call escaped_anchor_name.
+ * makeinfo/html.h: declare them.
+ * makeinfo/index.c (cm_printindex): write out indexed links.
+ * makeinfo/toc.c (toc_add_entry, contents_update_html): write out
+ TOC entries, use escaped_anchor_name rather than duplicating code.
+ * doc/texinfo.txi (Invoking makeinfo): document it.
+
+2008-05-18 Karl Berry <karl@gnu.org>
+
+ * install-info/install-info.c (split_entry): split at period-newline,
+ too. Report from Ulrich Mueller, 14 May 2008 06:59:35.
+
+2008-05-16 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (HTML Xref Command Expansion): add @leq,
+ @geq, @arrow, @textdegree Unicodes. Suggestion from
+ Patrice Dumas, 15 May 2008 01:02:37.
+
+2008-05-13 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * info/display.c (find_diff): New function.
+ (display_node_text): When computing differences between old and
+ new lines use character, not byte offsets.
+
+2008-05-12 Karl Berry <karl@gnu.org>
+
+ * install-info.c (split_entry, add_missing_basenames,
+ add_mission_descriptions, --name and --description parsing):
+ use ". " to delimit the description from the node name,
+ rather than just ".", since we want to support nodes and names
+ containing "config.status".
+ * doc/texinfo.txi (Menu Parts): mention need for ". ".
+ (Invoking install-info): mention bzip2 and lzma checks.
+
+2008-05-11 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi (usage): give -l input samples as latex and texinfo,
+ not LaTeX and Texinfo.
+ Report from Hilmar Preusse, 10 May 2008 15:03:23, Debian bug #472758.
+
+ * install-info/tests/0051, 52: new tests for periods in item names.
+ Bug report from Ulrich Mueller, 7 May 2008 01:56:38.
+
+2008-05-10 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Handle multibyte encodings correctly.
+
+ * info/display.c (ITER_SETBYTES,ITER_LIMIT): New defines.
+ (process_node_text): New function.
+ (display_node_text): New function.
+ (display_update_one_window): Correctly process multibyte
+ characters.
+ * info/display.h (process_node_text): New function prototype.
+ * info/info-utils.c (printed_representation): Rewrite to take into
+ account multibyte sequences.
+ * info/info-utils.h (printed_representation): Change prototype.
+ * info/info.h: Include string.h, mbiter.h and mbchar.h.
+ * info/window.c (calculate_line_starts ): Rewrite using
+ process_node_text to take into account multibyte characters.
+
+ Bootstrap from GNU gnulib 2008-04-23 06:09:44:
+
+ * gnulib/lib/Makefile.am: Import mbchar, mbiter and mbschr.
+ * gnulib/lib/sys_stat.in.h, gnulib/lib/wctype.in.h,
+ gnulib/lib/sys/stat.h, gnulib/m4/gnulib-cache.m4,
+ gnulib/m4/gnulib-comp.m4, gnulib/m4/sys_stat_h.m4,
+ gnulib/m4/wctype.m4: Updated files.
+
+2008-05-05 Karl Berry <karl@gnu.org>
+
+ * doc/info-stnd.texi (Stand-alone Info): rename node from What is Info?
+ for sake of xref in info.texi.
+ * doc/info.texi (Top): xref.
+
+2008-04-30 Thomas Thorberger <thor@erlm.siemens.de> (tiny change)
+
+ * install-info/install-info.c (split_entry): use valid pointer
+ entry, not ptr. bug-texinfo mail 30 Apr 2008 11:59:57.
+
+2008-04-25 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * info/session.c (info_search_internal): cast to `char *' in
+ order to avoid compiler warning.
+
+2008-04-23 Bruno Haible <bruno@clisp.org>
+
+ Allow "gendocs -o /some/absolute/dir".
+ * gendocs.sh (dotdot_outdir): New variable.
+
+2008-04-19 Karl Berry <karl@gnu.org>
+
+ * Version 4.12.
+
+2008-04-19 Per Øyvind Karlsen <peroyvind@mandriva.org> (tiny change)
+
+ * info/filesys.c (compress_suffices): decompress .lzma with unlzma.
+ * install-info/install-info.c: support lzma.
+
+2008-04-18 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\math): \let the Texinfo accent commands
+ (\" \' ... \dotaccent) to their plain TeX math equivalents
+ (\ddot \acute ... \dot), where possible.
+ Report from John Mandereau, 17 Apr 2008 17:53:28.
+
+2008-04-17 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi: allow more characters special to plain TeX
+ in the directory name in tidy mode (but not the base file name).
+
+ * util/texi2dvi: more quoting of file name args for the sake of
+ names containing whitespace. A spurious message still results.
+
+ * install-info/tests/defs.in: new file.
+ * configure.ac: generate install-info/tests/defs.
+ * install-info/tests/ii-*-test: source it.
+ * install-info/tests/Makefile.am: do not use export,
+ which is only supported by GNU make.
+
+2008-04-13 Juan Manuel Guerrero <juan.guerrero@gmx.de>
+
+ DJGPP specific issues.
+ * djgpp/config.sed: Fixes required to use configure scripts generated
+ by autoconf 2.62.
+
+2008-04-09 Karl Berry <karl@gnu.org>
+
+ * pretest 4.11.96.
+
+ * doc/texinfo.txi (geq leq): New node to document new commands
+ @geq{} and @leq{}, suggested by Arnold Robbins.
+ * doc/texinfo.tex (\geq, \leq): new macros.
+ * makeinfo/cmds.c (cm_geq, cm_leq): new fns.
+ (cm_minus): make static.
+ * makeinfo/cmds.h (cm_minus): remove decl.
+
+ * makeinfo/insertion.c (handle_verbatim): ignore rest of @verbatim
+ line, including the newline.
+ Report from Thien-Thi Nguyen, 01 Apr 2008 11:14:48.
+
+2008-04-09 Reinhold Kainhofer <reinhold@kainhofer.com> (tiny change)
+
+ * makeinfo/insertion.c (begin_insertion): do not indent via
+ whitespace for html, since we already do <blockquote>.
+ Reported 30 Mar 2008 00:56:56.
+
+2008-04-02 Jim Meyering <jim@meyering.net> (tiny change)
+
+ * doc/texinfo.tex: fix typos in comments.
+
+2008-03-31 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\dopdfimage): try .PDF too.
+ (\imagexxx): reduce space around vmode image to \medskip from \bigskip.
+ Start \noindent paragraph for vmode image so that @quotation etc.
+ indentation will be respected.
+ Report from Reinhold Kainhofer, 28 Mar 2008 17:33:05.
+
+2008-03-28 Karl Berry <karl@gnu.org>
+
+ * info/Makefile.am (funs.h): change target from all of
+ $(generated_sources) to avoid problems with parallel builds.
+ From Michael Haubenwallner, 20 Mar 2008 22:52:20.
+
+2008-03-26 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (search_forward): use const.
+ Also (from William Xu) fix typo in comment.
+ * makeinfo/makeinfo.h (search_forward): change decl.
+
+2008-03-25 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi (TEX): only unset it if it was nonempty and a
+ directory.
+
+2008-03-25 Akim Demaille <akim@epita.fr>
+
+ * doc/Makefile.am: Use util_srcdir (new var) where appropriate.
+ (man_MANS): Also install texi2pdf.1 and pdftexi2dvi.1.
+ (unset_envvars): New.
+ Use it.
+ * util/local.test: Check we don't use $().
+ Simplify sed usage: don't use \| which is not portable enough.
+ * util/Makefile.am: Re-enable tests, in maintainer mode.
+
+2008-03-23 Benno Schulenberg <bensberg@justemail.net> (tiny change)
+
+ * info/session.c (_scroll_backward): better cursor placement.
+
+2008-03-23 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi (TEX): unset if it refers to a directory; I think
+ the University of Utah installation does this.
+
+2008-03-22 Karl Berry <karl@gnu.org>
+
+ * info/session.c (info_move_to_xref): conditionalize "no xref"
+ message on cursor_movement_scrolls_p. Proposed by
+ Benno, 22 Mar 2008 15:17:49.
+
+2008-03-21 Karl Berry <karl@gnu.org>
+
+ * pretest 4.11.95.
+
+ * info/Makefile.am (funs.h): use this as the dependency
+
+2008-03-21 Karl Berry <karl@gnu.org>
+
+ * info/session.c (_scroll_forward): leave cursor on last line.
+ (_scroll_backward): use info_beginning_of_node for consistency.
+ Changes proposed by Benno Schulenberg, 21 Mar 2008 16:31:27.
+
+2008-03-20 Karl Berry <karl@gnu.org>
+
+ * info/info.c (main): avoid declaration after statement.
+
+2008-03-17 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\xrefX): avoid TeX expansions of _ etc.
+ in the info filename argument (#4).
+ Report from Ralf Wildenhues, 15 Mar 2008 11:23:38.
+
+2008-03-14 Karl Berry <karl@gnu.org>
+
+ * pretest 4.11.94.
+
+ * install-info/install-info.c: portability fixes.
+ (parse_dir_file): declare void, since it is.
+ (split_entry): Remove unused variable ostream.
+ (add_missing_basenames, add_missing_descriptions): Avoid
+ declarations after statements.
+ (main): Do not use // comments.
+ (format_entry): avoid using isblank, linking fails on osf-alpha,
+ others.
+ * util/texi2dvi: use `...` instead of $(...). Avoid
+ (...) as case labels.
+
+2008-03-12 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (exdent): typo in example.
+ Report from Jaakko Hollmen, 11 Mar 2008 19:25:01.
+
+2008-03-12 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * info/session.c (_scroll_backward): Avoid wrapping to the end of
+ page when a backward scrolling is requested on the top node.
+ Patch proposed by Benno Schulenberg.
+
+2008-03-07 Karl Berry <karl@gnu.org>
+
+ * pretest 4.11.93.
+
+ * info/infodoc.c (info_internal_help_text): reorder, regroup.
+ Suggestion from Benno Schulenberg, 06 Mar 2008 11:59:06.
+
+2008-03-07 Joseph Myers <joseph@codesourcery.com> (tiny change)
+
+ * doc/texinfo.tex (\includezzz): Use \turnoffactive before
+ expanding @value.
+
+2008-03-06 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * info/session.c (info_search_internal): Reword wrap-around
+ messages.
+ * configure.ac (AM_INIT_AUTOMAKE): Finally remove dist-bzip2.
+
+2008-03-05 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * util/gendocs.sh: Pass --node-files to texi2html only together
+ with the --split option.
+
+ * info/session.c (last_node_p): Remove unused variable.
+ (info_search_internal): Print a message if the search wraps over
+ the end or beginning of the document.
+
+ * configure.ac (AM_INIT_AUTOMAKE): Move all automake options here.
+ Add dist-bzip2 for completeness.
+ * Makefile.am (AUTOMAKE_OPTIONS): Remove in favor of
+ AM_INIT_AUTOMAKE.
+ * AUTHORS: Update the URL of Translation Project.
+
+2008-03-04 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * info/session.c (_scroll_backward): Place cursor at the end of
+ node if cursor_movement_scrolls_p is on.
+
+ * Makefile.am (AUTOMAKE_OPTIONS): Raise version requirement to
+ 1.10.1. This is needed for dist-lzma.
+
+ * system.h: Include <ctype.h>
+ * info/session.c (scroll_last_node_choices, scroll_last_node): New
+ variables.
+ (forward_move_node_structure): Special behavior when a scrolling
+ command is issued while on the last node.
+ * info/session.h (scroll_last_node_choices, scroll_last_node): New
+ variables.
+ (SLN_Stop,SLN_Scroll,SLN_Top): New defines.
+ * info/variables.c (info_variables): New variable
+ scroll-last-node.
+ * info/variables.h (scroll_last_node): New variable.
+ * doc/info-stnd.texi: Document scrolling behavior at the last node
+ and the scroll-last-node variable.
+ * NEWS: Document scrolling behavior at the last node.
+
+2008-03-02 Karl Berry <karl@gnu.org>
+
+ * configure.ac (AM_INIT_AUTOMAKE): dist-lzma instead of dist-bzip2.
+
+2008-03-01 Juan Manuel Guerrero <juan.guerrero@gmx.de>
+
+ DJGPP specific issues.
+ * system.h [O_BINARY]: Use HAVE_DRIVE in IS_ABSOLUTE.
+ * djgpp/config.sed: Fix regex pattern to handle version numbers that
+ looks like 4.NN.NN
+
+2008-02-29 Karl Berry <karl@gnu.org>
+
+ * pretest 4.11.92.
+
+2008-02-28 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\includezzz): \edef the filename in order
+ to expand @value constructs (include-value). This fix
+ from Joseph S. Myers, 1 Feb 2008 01:11:11.
+ Document that the \expandafter trickery is necessary in order to
+ read the file outside of a group (mac-incl).
+ This report from John Mandereau, 28 Feb 2008 22:12:34.
+
+ * info/infodoc.c (info_internal_help_text): more tweaks.
+ * info/infomap.c: move up/down to end, too.
+ Suggestions from Benno Schulenberg, 27 Feb 2008 23:44:17
+ and 28 Feb 2008 22:49:27.
+
+2008-02-28 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi (absolute): Add a missing "local".
+
+2008-02-28 Akim Demaille <akim@epita.fr>
+
+ Let texi2dvi keep the trailing //.
+ * bin/texi2dvi ($space, $tab): New.
+ ($IFS): Use them to be robust to zealous white space cleanups.
+ (absolute): Preserve the trailing slashes.
+ (tex_envvars): Add MPINPUTS, MFINPUTS, and TFMFONTS.
+
+2008-02-28 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi: Don't use "local foo=`cmd`", because in that case
+ failures of cmd, including with set -e, will go unnoticed. So
+ always first declare with local, then run the assignment.
+ (index_file_p): Adjust to be usable with index.sty.
+ * util/local.test: Make the test more robust.
+
+2008-02-27 Karl Berry <karl@gnu.org>
+
+ * pretest 4.11.91.
+
+ * info/infomap.c [!INFOKEY]: remove this whole block. It is too
+ confusing having two sets of key bindings.
+
+ * info/infodoc.c (info_internal_help_text): more tweaks.
+ Suggestions from Benno Schulenberg, 26 Feb 2008 00:34:22.
+
+2008-02-26 Brendan O'Dea <bod@debian.org> (tiny change)
+
+ * util/texi2dvi: slightly reformat usage message for help2man.
+ (sent by peb 26 Feb 2008 12:01:11)
+
+ * install-info/install-info.c (print_help): keep two spaces
+ between option name and description, or help2man can't do a good job.
+
+2008-02-26 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * info/doc.h, info/echo-area.c, info/echo-area.h,
+ info/footnotes.c, info/indices.c, info/info.c, info/info.h,
+ info/infodoc.c, info/infokey.c, info/infomap.c, info/m-x.c,
+ info/nodemenu.c, info/session.c, info/session.h,
+ info/variables.c, info/variables.h, info/window.c,
+ info/window.h:
+ declare constant strings as such and remove
+ many `(char *)' casts -- in particular for `_(...)'.
+ Avoid gcc warnings (for --disable-nls and maybe without).
+
+2008-02-25 Karl Berry <karl@gnu.org>
+
+ * autogen.sh: run autoconf before autoheader, then automake
+ (per autoreconf).
+
+2008-02-24 Karl Berry <karl@gnu.org>
+
+ * info/infomap.c (x): bind to delete_window.
+ * info/infodoc.c (info_internal_help_text): more rearrangements.
+ (create_internal_info_help_node: omit incorrect exiting suggestion
+ at end.
+ Suggestions from Benno Schulenberg, 24 Feb 2008 22:56:44.
+
+ * install-info/install-info.c (munge_old_style_debian_options):
+ avoid use of asprintf, just xmalloc ourselves.
+ In report from Juan Manuel Guerrero, 24 Feb 2008 22:06:35.
+
+ * install-info/install-info.c (spec_entry) <text_len>: declare
+ as size_t instead of int, to avoid warning.
+ In report from Juan Manuel Guerrero, 24 Feb 2008 22:06:35.
+
+2008-02-22 Karl Berry <karl@gnu.org>
+
+ * pretest 4.11.90.
+
+2008-02-22 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * configure.ac (--enable-multiplatform): also set libdir.
+ * util/defs.in (PATH): include @abs_builddir@.
+ * util/texi2dvi (usage): consistently escape \$HOME.
+
+2008-02-21 Karl Berry <karl@gnu.org>
+
+ * info/infodoc.c (info_internal_help_text): more simplifications.
+ Suggestions from Benno Schulenberg, 21 Feb 2008 23:35:38.
+
+ * install-info/tests/ii-0041-test,
+ * install-info/tests/ii-0041-test: ensure target dir file is rw.
+
+2008-02-19 Karl Berry <karl@gnu.org>
+
+ * info/infodoc.c (info_internal_help_text): rearrangements.
+ * info/session.c (cursor_movement_scrolls_p): 1 by default.
+ * info/window.c (window_scroll_step): 1 by default.
+ * info/infomap.c <key bindings>: h to info_get_help_window,
+ H to info_get_info_help_node,
+ PgUp to info_scroll_backward, PgDown to info_scroll_forward,
+ move q to after C-x C-c .
+ Suggestions from Benno Schulenberg, 04 Jan 2008 23:20:46.
+
+2008-02-17 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi (EGREP): need egrep early.
+
+ * util/texi2dvi: path_sep is : on djgpp too. From Eli Z.
+
+ * makeinfo/makeinfo.c: typos in comments.
+
+ * makeinfo/cmds.c (cm_direntry): call close_single_paragraph,
+ instead of add_char('\n'), or the INFO-DIR-SECTION lines from two
+ consecutive @dircategory's are munged together.
+ Bug report from Ralf Angeli, 16 Feb 2008 18:59:42.
+
+2008-02-16 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi: path_sep is : on mingw as well as cygwin.
+ Report from: FX Coudert, 16 Feb 2008 15:43:15.
+
+ * makeinfo/cmds.c (cm_cite): avoid double apostrophe in
+ Info output of, e.g., ... @cite{Foo}'s ...
+ Report from Bob Chassell.
+
+2008-02-15 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\tex): spurious space in redefinition of \top.
+
+ * makeinfo/cmds.c (handle_include): set in_fixed_width_font
+ for expanding the filename argument, so -- doesn't become -.
+ Bug report from Daniel Richard G., 13 Feb 2008 01:50:00.
+
+2008-02-11 Karl Berry <karl@gnu.org>
+
+ * info/session.c (incremental_search): if a regex search,
+ search every time through the loop, not only if the search
+ succeeded.
+ Bug report from Ralf Wildenhues, 8 Feb 2008 23:30:51.
+
+2008-02-10 Karl Berry <karl@gnu.org>
+
+ * info/session.c (show_isearch_prompt): Start with "Regexp" if
+ it's a regexp i-search.
+ Suggestion from Ralf Wildenhues, 8 Feb 2008 23:30:51.
+
+2008-02-04 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\includezzz): simply do the \input (instead of
+ trickily expanding it after the }) a la \verbatiminput; otherwise,
+ @value expansions are not done. The trickery just seems unnecessary.
+ Report from Joseph S. Myers, 1 Feb 2008 01:11:11.
+
+2008-02-01 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\ptextop): save plain tex \top (a math symbol).
+ (tex env): restore plain text \top.
+
+2008-01-31 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Click Sequences): new section to document new
+ commands @arrow, @clicksequence, @click, and @clickstyle.
+ * doc/texinfo.tex (\clicksequence, \click, \clickstyle): define them.
+ * makeinfo/cmds.h,
+ * makeinfo/cmds.c (cm_arrow, cm_click, cm_clicksequence,
+ cm_clickstyle): new fns.
+ * insertion.h,
+ * insertion.c (get_item_function): no longer static.
+ * xml.h,
+ * xml.c (CLICK, CLICKSEQUENCE): new elements.
+ * util/texinfo.dtd (Inline.misc): add click and clicksequence.
+ (rarr): new entity.
+
+ * makeinfo/xml.c (xml_insert_entity): only do XML checks if we are
+ actually outputting XML; this routine is also used for HTML output.
+
+ * makeinfo/makeinfo.c (convert_from_loaded_file): move
+ xml_begin_document to after we are sure the output file is open.
+
+2008-01-30 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi, doc/info-stnd.texi (Back-Cover Text): new
+ wording from rms.
+
+2008-01-24 Karl Berry <karl@gnu.org>
+
+ * info/session.c (info_move_to_xref): must use fixed-string
+ searches for these Info keywords that contain *.
+ Report from Ben Asselstine, 29 Dec 2007 11:21:40 (et al.).
+
+ * doc/info-stnd.texi (What is Info): that's C-x C-c to exit, not
+ C-x C-x. Report from Benno, 24 Jan 2008 00:40:04.
+
+2008-01-23 Karl Berry <karl@gnu.org>
+
+ * makeinfo/insertion.c (begin_insertion) <direntry>: ignore
+ whitespace beginning the first * line inside @direntry,
+ to work around the zsh manual.
+ Report from Norbert Preining, 14 Jan 2008 09:09:01.
+
+2008-01-21 Karl Berry <karl@gnu.org>
+
+ * info/info.c (main): silently switch to info-stnd if given
+ -O (--usage) info.
+ Suggestion from Benno, 19 Jan 2008 19:58:47.
+
+2008-01-20 Karl Berry <karl@gnu.org>
+
+ * install-info/install-info.c (print_help): split up big help string,
+ some rewording.
+
+2008-01-19 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi (run_tex): use verbose, not echo, so -q is respected.
+ Report from Kurt Hornik, 19 Jan 2008 11:16:27.
+
+2008-01-18 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Other Info Directories): mention starting at 0
+ and what-cursor-position when figuring column positions.
+
+2008-01-16 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi (move_to_dest): compare with filenames, rather
+ than cmp -s, since the output file might not actually change.
+ Report from Ralf Wildenhues, 15 Jan 2008 07:20:34.
+
+ * doc/texinfo.txi (Invoking makeinfo): --document-language default
+ is @documentlanguage, as of 4.11.
+
+ * doc/texinfo.txi (Makeinfo Pointer Creation): mention the
+ need for @detailmenu here, too.
+
+2008-01-14 Karl Berry <karl@gnu.org>
+
+ * NEWS: install-info NEWS details.
+
+2008-01-13 Bruno Haible <bruno@clisp.org>
+
+ * util/gendocs.sh (curdate): Execute 'date' command in the locale
+ specified by SETLANG.
+
+2008-01-12 Bruno Haible <bruno@clisp.org>
+
+ * doc/texinfo.txi (Cross Reference Parts): better description of arg2.
+ bug-texinfo mail of 12 Jan 2008 15:52:23 +0100.
+
+2008-01-02 Karl Berry <karl@gnu.org>
+
+ * info/info.c (info_short_help) [__MSDOS__]: puts -b string directly.
+ Suggestion from Benno.
+
+2008-01-02 Karl Berry <karl@tug.org>
+
+ * util/Makefile.am (TESTS): remove dvipdf.test, it is too
+ dependent on functional TeX installations. Not our place to test that.
+
+2008-01-02 Karl Berry <karl@tug.org>
+
+ * install-info/, install-info/tests/: new subdirectories.
+ * util/Makefile.am: move install-info stuff to its own dir, with tests.
+ * configure.ac,
+ * Makefile.am (SUBDIRS): take care of new dirs.
+ * doc/Makefile.am (install-info.1): new source location for man page.
+ * po/POTFILES.in: update source list.
+
+2008-01-02 Ben Asselstine <benasselstine@gmail.com>
+
+ * install-info/install-info.c: much work toward Debian compatibility.
+ (line_data): new member num_sections to add; change type of
+ add_entries_before.
+ (spec_entry): new members missing_name, missing_description,
+ missing_basename.
+ (longopts): new options --name, --menuentry, --description,
+ --no-indent, --keep-old, --maxwidth, --max-width,
+ --section-regex, --dry-run.
+ (remove_empty_sections, add_entries_into_all_matching_sections,
+ keep_old_flag, indent_flag,
+ order_new_sections_alphabetically_flag): new globals.
+ (print_help): list new options.
+ (output_dirfile): count sections added, and possibly sort them.
+ (parse_input): handle delete_flag.
+ (parse_dir_file): write the end of the last node.
+ (mark_entry_for_deletion, adjust_column, format_entry,
+ split_entry, reformat_new_entries, add_missing_basenames,
+ add_missing_names, add_missing_descriptions,
+ munge_old_style_debian_options): new fns.
+ (main): new variables calign, align, maxwidth,
+ entries_to_add_from_file; munge per debian if needed; handle new
+ options.
+ (compare_entries_text): use mbsncasecmp.
+ * doc/texinfo.txi (Invoking install-info): mention the new options.
+
+2008-01-01 Karl Berry <karl@gnu.org>
+
+ * info/info.c (info_short_help): break help string into smaller
+ pieces, to help translators.
+ Suggestion from Benno Schulenberg, 01 Jan 2008 12:22:31.
+
+2008-01-01 Ben Asselstine <benasselstine@gmail.com> (tiny change)
+
+ * doc/info-stnd.texi (Invoking Info): document this.
+ * info/info.c (long_options, short_options): use -k as an alias
+ for --apropos.
+ (main): recognize it.
+ (info_short_help): document it.
+ (APROPOS_OPTION): no longer needed.
+
+2007-12-23 gettextize <bug-gnu-gettext@gnu.org>
+
+ * configure.ac (AM_GNU_GETTEXT_VERSION): Bump to 0.17.
+
+2007-12-19 Norbert Preining <preining@logic.at> (tiny change)
+
+ * makeinfo/insertion.c (begin_insertion) <direntry>: use add_word
+ instead of insert_string, so that the "This is ..." line is
+ written before the START-INFO-DIR-ENTRY.
+
+2007-12-17 Karl Berry <karl@gnu.org>
+
+ * doc/info-stnd.texi (Searching Commands): Document the new regex
+ search, a little.
+ (@copying): Update Back-Cover Text.
+ * doc/info.texi (@copying): Update Back-Cover Text.
+
+2007-12-17 Stephane Chazelas <stephane_chazelas@yahoo.fr>
+
+ * info/infomap.c (R): new command info_toggle_regexp.
+ * info/session.c (use_regex): new static (true by default).
+ (info_toggle_regexp): new command.
+ * info/session.h (info_toggle_regexp): declare it.
+ * info/search.c (regexp_search): new fn.
+ * info/search.h (regexp_search): declare it.
+ Savannah bug 15572.
+
+2007-12-16 Karl Berry <karl@gnu.org>
+
+ * info/session.c: remove more status messages.
+ Report from Benno Schulenberg, 16 Dec 2007 12:24:12.
+
+2007-12-15 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\pdffontattr): only do the cmaps if this pdftex
+ primitive is defined, for the sake of those running ancient versions.
+
+2007-12-13 Karl Berry <karl@gnu.org>
+
+ * info/session.c: remove status report messages, said to be noise.
+ Report from Benno Schulenberg, 11 Dec 2007 00:19:57.
+
+2007-12-09 Benno Schulenberg <bensberg@justemail.net> (tiny change)
+
+ * makeinfo/makeinfo.c (usage): improve help message.
+ bug-texinfo mail of 02 Dec 2007 23:43:10 +0100.
+
+2007-12-09 Fabian Groffen <grobian@gentoo.org> (tiny change)
+
+ * info/makedoc.c (main): reorder calls following the Makefile
+ dependencies, for high-precision filesystems.
+ http://bugs.gentoo.org/show_bug.cgi?id=200662
+ bug-texinfo mail of 3 Dec 2007 17:59:13 +0100.
+
+2007-12-02 Karl Berry <karl@gnu.org>
+
+ * info/info.c (main): undo change of 2006-08-13 in this file,
+ so info can be easily tested in multibyte locales.
+
+ * all files: use the multibyte case comparison functions
+ mbscasecmp and mbsncasecmp from gnulib, instead of simply
+ strcasecmp and strncasecmp. (1) gnulib strcase is buggy,
+ declaring the str* functions in string.h instead of strings.h,
+ leading to build failure on AIX 4.3.3 (report from Gary E. Barnes,
+ 21 Nov 2007 12:37:12). (2) we want to support multibyte locales
+ better anyway.
+
+2007-11-30 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * doc/Makeinfo.am: Rename txi-no.tex to txi-nb.tex (see
+ 2007-10-31).
+
+2007-11-27 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (headings on off): clarify the meaning of
+ @headings on. Report from Dilyan Palauzov, 25 Nov 2007 17:07:09.
+
+2007-11-25 Stephane Chazelas <stephane_chazelas@yahoo.fr>
+
+ * info/indices.c (info_next_index_match): use the line number
+ specified in the index entry, if available.
+
+2007-11-23 Benno Schulenberg <bensberg@justemail.net> (tiny change)
+
+ * info/infodoc.c: keep help strings together for translation.
+
+2007-11-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * util/texi2dvi: Fix quoting for white space in file names.
+
+2007-11-21 Karl Berry <karl@gnu.org>
+
+ * makeinfo/lang.h (hz): #undef, since apparently it is defined on
+ AIX 4.3.3.
+ Report from: Gary E. Barnes, 21 Nov 2007 12:37:12.
+
+2007-11-16 Karl Berry <karl@gnu.org>
+
+ * info/info.c (info_error): use puts instead of fprintf if we
+ don't actually have any arguments. Else
+ info --file=".%x.%x." will try to print NULL.
+ Report from Cody Rester, 16 Nov 2007 08:59:48.
+
+2007-10-31 Karl Berry <karl@gnu.org>
+
+ * doc/txi-no.tex: rename to txi-nb.tex.
+ * po/no.po: remove.
+ * po/LINGUAS: remove no.
+
+2007-10-24 Karl Berry <karl@gnu.org>
+
+ * makeinfo/node.c (cm_node),
+ * makeinfo/cmds.c (cm_settitle): no need to call xml_begin_document.
+ * makeinfo/makeinfo.c (convert_from_loaded_file): call
+ xml_begin_document in docbook case too, else some frontmatter
+ can be lost.
+ Bug report from Sam Varshavchik, 14 Oct 2007 12:10:04, for binutils.
+
+ * makeinfo/insertion.c: formatting.
+
+ * makeinfo/xml.c (xml_begin_document): arg can be const;
+ use basename of @setfilename instead of "book-root".
+ (xml_push_current_element, xml_pop_current_element): use
+ warning fn for consistent formatting.
+
+ * util/dir-example: binutils update, etc.
+
+2007-10-24 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * util/gendocs.sh: New option --texi2html, to use texi2html for
+ creating HTML output.
+ Handle special conditional constructs in the template: %%IF
+ HTML_SECTION%% and %%IF HTML_CHAPTER%% (both closed with a
+ corresponding %%ENDIF) to conditionally enable parts of the output
+ depending on texi2html split outputs.
+ * util/gendocs_template: Conditionally enable section and chapter
+ split HTMLs.
+ * util/gendocs_template_min: Likewise.
+
+2007-10-19 Karl Berry <karl@gnu.org>
+
+ * info/display.c (display_update_one_window): don't try to display
+ a window unless both width and height are >0.
+ * window/window.c (window_new_screen_size): try to ensure that
+ no window width/height ever becomes negative.
+ Bug report and ideas from Vitezslav Crhonek, 18 Oct 2007 15:15:51,
+ as well as https://bugzilla.redhat.com/show_bug.cgi?id=243971.
+
+2007-10-13 Karl Berry <karl@gnu.org>
+
+ * makeinfo/cmds.c (cm_dircategory): use add_word instead of
+ insert_string so that the info file header ("This is ...") comes
+ after the INFO-DIR-SECTION magic.
+ Bug report from Katsumi Yamaoka, emacs-devel 10 Oct 2007 11:17:10.
+
+2007-10-08 Bruno Haible <bruno@clisp.org>
+
+ * makeinfo/lang.c (unicode_map): New variable.
+ (cm_search_iso_map): In case of UTF-8 encoding, return a Unicode code
+ point.
+ (add_encoded_char_from_code): New function.
+ (add_encoded_char, cm_accent_generic_no_headers): Use it.
+
+2007-10-03 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (math): @math{k_{75}} is allowed, despite bare
+ braces.
+
+2007-10-02 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (math): Make description more accurate.
+ Ideas by Patrice Dumas, 16 Sep 2007 12:02:46.
+
+2007-09-26 Karl Berry <karl@gnu.org>
+
+ * makeinfo/index.c (count_strn_chars): new fn.
+ (insert_index_output_line_no): call it.
+ (cm_printindex): call it.
+ This is to fix off-by-one width computation due to @tie{},
+ reported by Werner Lemberg, 16 Sep 2007 16:48:47.
+
+ * makeinfo/cmds.c,
+ * makeinfo/xref.c: #include "index.h", instead of explicit
+ extern printing_index.
+ * makeinfo/index.c (the_indices, index_element_compare): can be static.
+ * makeinfo/index.h: make order of decls match index.c.
+
+2007-09-25 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Six Parts): End segment should not have toc anymore.
+
+2007-09-24 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (convert_from_file): free `input_filename' leak.
+ Reported by Stephen Compall, 21 Sep 2007 20:25:54.
+
+2007-09-21 Stephen Compall <s11@member.fsf.org> (tiny change)
+
+ * makeinfo/makeinfo.c (convert_from_file): excise code testing
+ case in suffixes that doesn't arise.
+
+2007-09-21 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c,
+ * info/info.c,
+ * util/texindex.c,
+ * util/install-info.c (main): unify declaration on char *argv[].
+
+2007-09-20 Greg Schafer <gschafer@zip.com.au> (tiny change)
+
+ * util/dvipdf.test,
+ * util/texi2dvi.test (required): need tex, or the tests fail.
+
+2007-09-17 Karl Berry <karl@gnu.org>
+
+ * util/defs.in (TEXI2DVI_run): try "type" instead of "which".
+ Report from Michael Deutschmann, 13 Sep 2007 01:29:39.
+
+ * util/defs.in (optionset_get): use `...`, not $(...). Still too
+ newfangled. Report from Bert Deknuydt.
+
+2007-09-16 Thien-Thi Nguyen <ttn@gnuvola.org> (tiny change)
+
+ * doc/texinfo.tex (w): Do s/indenting manual/manual indenting/.
+
+2007-09-15 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.h,
+ * makeinfo/makeinfo.c,
+ * makeinfo/defun.c,
+ * makeinfo/html.c,
+ * makeinfo/node.c,
+ * makeinfo/toc.c,
+ * makeinfo/xref.c (__): rename to gdt, since HP-UX uses it in
+ <stdsyms.h>. (Report from Bert Deknuydt, 12 Sep 2007 12:17:34).
+
+2007-09-09 Karl Berry <karl@gnu.org>
+
+ * Version 4.11.
+
+2007-09-05 Karl Berry <karl@gnu.org>
+
+ * doc/info-stnd.texi (Variables): make an anchor for
+ scroll-behavior, and use it. Idea from Benno Schulenberg,
+ 04 Sep 2007 00:21:01.
+
+2007-09-03 Karl Berry <karl@gnu.org>
+
+ * pretest 4.9.92.
+
+ * doc/texinfo.tex (\baselinefactor): new macro, 1 by default.
+ (\setleading): use it, to allow for poor man's double spacing.
+ (\afourpaper, \letterpaper): use absolute dimension for height,
+ instead of a multiple of \baselineskip. (Otherwise things run off
+ the bottom when double-spacing.)
+
+2007-09-01 Juan Manuel Guerrero <juan.guerrero@gmx.de>
+
+ * djgpp/config.bat: change file names arguments and configure.orig
+ to args and configure.org.
+ Remove the command line that deletes co*.tmp files.
+
+2007-08-31 Karl Berry <karl@gnu.org>
+
+ * info/info.c (main) [LC_MESSAGES]: conditionalize setlocale on
+ LC_MESSAGES, since djgpp 2.04 doesn't have it.
+ Report from Juan Manuel Guerrero, 28 Aug 2007 21:38:18.
+ * info/man.c (get_manpage_contents) [LC_MESSAGES]: likewise.
+ * makeinfo/makeinfo.c (main): doc fix, likewise.
+
+2007-08-26 Karl Berry <karl@gnu.org>
+
+ * info/infodoc.c (info_internal_help_text): hardwire
+ menu-digits help string; bug report from Benno.
+
+2007-08-16 Karl Berry <karl@gnu.org>
+
+ * makeinfo/lang.c (iso8859_2_map): include known HTML entities,
+ from the 88592.txt file in the GNU enscription distribution.
+
+2007-08-04 Juan Manuel Guerrero <juan.guerrero@gmx.de>
+
+ * djgpp/config.bat: replace the string diffutil*.pot by
+ the correct one texinfo*.pot
+
+ * djgpp/config.sed: adjust for the use with autoconf 2.61
+
+ * djgpp/config.site: adjust for the use with autoconf 2.61
+
+2007-08-04 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * doc/info-stnd.texi: Document cursor-movement-scrolls variable.
+ Document different spellings of scroll-behaviour variable.
+ * info/info-utils.c (info_references_internal): Initialize
+ line_number.
+ * info/infodoc.c (info_internal_help_text): Update docstrings
+ for move-to-next-xref and move-to-prev-xref.
+ * info/session.c (forward_move_node_structure)
+ (backward_move_node_structure): Return int
+ (cursor_movement_scrolls_p): New variable.
+ (info_next_line,info_prev_line,info_forward_char,info_backward_char)
+ (info_forward_word,info_backward_word): Scroll through the
+ entire document if cursor_movement_scrolls_p is set.
+ (info_move_to_xref,info_move_to_prev_xref): Return int
+ * info/session.h (cursor_movement_scrolls_p): New variable
+ * info/variables.h: Likewise
+ * info/variables.c (scroll-behavior): Alias for scroll-behaviour
+ (cursor-movement-scrolls): New variable.
+
+2007-07-30 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\badparencount, \badbrackcount): make these
+ just warnings, not \errmessage's.
+
+2007-07-29 Karl Berry <karl@gnu.org>
+
+ * pretest 4.9.91.
+ * doc/texinfo.txi (Inserting Quotes): wording.
+
+ * util/Makefile.am (TESTS): remove local.test. It fails and I
+ would prefer not to replace local with a shell function anyway.
+
+ * util/texi2dvi.test: with -o output, do not expect input.dvi
+ to remain.
+
+2007-07-26 Karl Berry <karl@gnu.org>
+
+ * util/Makefile.am (pdftexi2dvi): copy texi2pdf, not texi2dvi.
+
+2007-07-24 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi (move_to_dest): really move the file,
+ don't just copy it, else automake tests fail.
+ From Michael Deutschmann, 23 Jul 2007 20:55:32.
+
+2007-07-23 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (license notice): punctuation changes to
+ match recommendation. From Paul Eggert.
+
+2007-07-23 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi: Update DVIPSHEADERS so that dvips finds its
+ special headers.
+ Don't rely on non-IFS splitting when using local.
+ Maybe we should just not use local at all.
+ Or never use it to assign at the same time: declare, then assign.
+ * util/local.test: Check that "local" is used properly with quotes.
+
+2007-07-23 Akim Demaille <akim@epita.fr>
+
+ Use hevea more like we use tex itself, no longer as a tool
+ that does everything magically.
+ * util/texi2dvi (run_hevea): Remove trailing spaces in the
+ output.
+ (run_tex_suite): Change to the working directory here, no longer
+ in...
+ (run_core_conversion): here, so that even when running hevea where
+ are in the working directory.
+ No longer call cd_orig, do it...
+ (run_tex_suite): here.
+ (run_hevea): Pass verbose flags to it when --debug.
+ (run_tex_suite): Since we now want to run the whole suite of tools,
+ including bibtex, with hevea, use run_core_conversion, not
+ run_tex.
+ (run_core_conversion): Now call run_tex.
+
+2007-07-15 Karl Berry <karl@gnu.org>
+
+ * doc/info-stnd.texi (@copying, GFDL): remove, since it's
+ not part of info.texi either.
+ (Invoking Info): mention customization here and elsewhere,
+ to make it a bit more prominent.
+
+2007-07-15 Oleg Katsitadze <olegkat@gmail.com>
+
+ * doc/texinfo.tex (\quotedblleft, \quotedblright, \quoteleft,
+ \quoteright): aliases for the quotation marks from the CM fonts.
+ (\guillemetleft, \guillemotleft, \guillemetright, \guillemotright,
+ \guilsinglleft, \guilsinglright, \quotedblbase, \quotesinglbase):
+ new macros to borrow quotation marks from the EC fonts. The
+ following font macros support these glyphs.
+ (\ecfont): new macro to switch to a EC font as close as possible
+ to the current style.
+ (\textecsize, \smallecsize, \smallerecsize, titleecsize, \chapecsize,
+ \sececsize, \ssececsize, \reducedecsize): new macros to store EC
+ font name sizes.
+ * makeinfo/cmds.c, makeinfo/cmds.h: added defs for the new
+ quotation marks.
+ * makeinfo/lang.c (cm_special_char): added guillemetleft,
+ guillemotleft, guillemetright, guillemotright.
+ * util/texinfo.dtd (lsquo, rsquo, sbquo, bdquo, laquo, raquo,
+ lsaquo, rsaquo): entities for the new quotation marks.
+ * doc/texinfo.txi (Inserting Quotation Marks): new section.
+ (General Syntactic Conventions): moved quotation mark syntax to
+ Inserting Quotation Marks.
+ (Preparing for TeX): added info on installation of EC and Euro fonts.
+
+2007-07-14 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (@copying, GNU Sample Texts),
+ * doc/info-stnd.texi (@copying): update Back-Cover Text.
+
+2007-07-12 Karl Berry <karl@gnu.org>
+
+ * makeinfo/lang.c (default_country_for_lang): strcasecmp returns 0
+ when we find en.
+
+2007-07-10 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.h (enable_encoding): default to 1.
+ * makeinfo/makeinfo.c (long_options): new option --disable-encoding
+ to set to zero.
+ (usage): document --disable-encoding.
+ * makeinfo/lang.c (add_encoded_char): don't enable 8-bit unless we
+ have a document encoding.
+ * doc/texinfo.txi (makeinfo Options, documentencoding): document this.
+
+2007-07-09 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\xrefX): use \putwordSection for external
+ cross-references, too.
+ Report from Ludovic C, 09 Jul 2007 18:09:13.
+
+2007-07-09 Oleg Katsitadze <olegkat@gmail.com>
+
+ * doc/texinfo.tex (\thissection): renamed to \lastsection.
+ (\thissectionname, \thissectionnum, \evenheadingmarks, \oddheadingmarks, \evenfootingmarks, \oddfootingmarks, \everyheadingmarks, \everyfootingmarks):
+ new macros.
+ (\thischapter, \thischaptername, \thischapternum, \thissection, \thissectionname, \thissectionnum):
+ defined these using marks.
+ (\chapoddpage): omit heading and footing on blank filler pages.
+ * doc/texinfo.txi (Page headings): documented
+ \thissection{,name,num} and \{even,odd,every}{head,foot}ingmarks.
+ * makeinfo/cmds.c (command_table): added
+ {even,odd,every}{head,foot}ingmarks.
+
+2007-07-08 Karl Berry <karl@gnu.org>
+
+ * makeinfo/node.c (validate_file): don't check for warning limit,
+ it was hit in gnulib.
+ * makeinfo/makeinfo.h (reference_warning_limit): remove.
+ * makeinfo/makeinfo.c (main): ignore the option (but leave it in
+ so any Makefiles or scripts that use it won't gratuitiously break).
+ * doc/texinfo.txi (Invoking makeinfo): remove documentation for
+ --reference-limit.
+
+2007-07-07 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (@copying): new Back-Cover Text.
+
+2007-07-06 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Other Info Directories): recommend columns 32
+ and 48. Suggestion from Antonio Diaz Diaz.
+
+2007-07-05 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\setnonasciicharscatcodenonglobal,
+ \setnonasciicharscatcode): no newline after #1, that counts as a space.
+ (\pagebody, \pagesizesyyy): likewise.
+
+2007-07-03 Oleg Katsitadze <olegkat@gmail.com>
+
+ * doc/texinfo.tex: use \setcolor for color changes instead of
+ \pdfsetcolor, to preserve color changes across page breaks. Use a
+ darker red (which comes out almost black in b&w print) for links
+ and urls.
+
+2007-07-02 Oleg Katsitadze <olegkat@gmail.com>
+
+ * doc/pdfcolor.tex: removed (merged with doc/texinfo.tex).
+ * doc/texinfo.tex: merged doc/pdfcolor.tex, omitting unused colors.
+ * doc/Makefile.am, doc/README, doc/texinfo.txi, util/srclist.txt:
+ removed any mention of pdfcolor.tex.
+
+ * doc/texinfo.tex (\chapmacro): avoid potential breakpoint at
+ interline glue between \pdfdest and the heading.
+ (\safewhatsit): typo.
+
+2007-07-01 Karl Berry <karl@gnu.org>
+
+ * pretest version 4.9.90.
+
+ * COPYING, all source files: GPLv3.
+
+ * makeinfo/makeinfo.c,
+ * info/info.c,
+ * info/infokey.c,
+ * util/install-info.c,
+ * util/texindex.c: update --version output.
+
+ * Makefile.am (EXTRA_DIST): remove config.rpath, it's in build-aux now.
+ * lib/Makefile.am (libtxi_A_SOURCES): system.h at top level now.
+
+ * util/texi2dvi (move_to_dest): still more tweaks to try avoid
+ complaints from cp and cmp.
+
+ * makeinfo/tests/copying.txi: test with nonempty copying text.
+ * makeinfo/insertion.c (cm_insert_copying): call output_head.
+
+2007-06-29 Karl Berry <karl@gnu.org>
+
+ * Version 4.9 (GPLv3, made from 4.8 branch).
+
+2007-06-29 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi (move_to_dest): do not cmp a directory.
+
+2007-06-27 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi (move_to_dest): do not copy a file onto itself,
+ GNU cp complains.
+
+2007-06-27 Oleg Katsitadze <olegkat@gmail.com>
+
+ * doc/texinfo.tex (\setnonasciicharscatcodenonglobal): new macro.
+ (\scanctxt): in case of non-ASCII encodings, un-activate 8-bit
+ chars to avoid their expansion. Report from John Mandereau,
+ 22 Jun 2007 17:26:09 +0200.
+
+2007-06-24 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\internalpagesizes): must reset \pdfhorigin and
+ \pdfvorigin after changing \pdfpageheight and \pdfpagewidth.
+
+2007-06-20 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\documentlanguagetrywithoutunderscore): new macro,
+ to try txi-de.tex if @documentlanguage de_DE.
+ (\documentlanguage): call it.
+
+ * lang.c (default_country_for_lang): just return country code, not
+ whole locale string.
+
+ * makeinfo.h (output_head_p): new global.
+ * makeinfo.c (info_output_head, output_head): new fns.
+ (add_char): call it. This is so we can translate the file header
+ ("produced by Makeinfo ...") in Info output as well as HTML.
+ * html.c,
+ * html.h,
+ * cmds.c: change usage of html_output_head_p to output_head_p, etc.
+
+2007-06-17 Karl Berry <karl@gnu.org>
+
+ * makeinfo/lang.c (default_country_for_lang): implement using the
+ same locales_with_principal_territory list as gettext's msginit.c.
+
+ * makeinfo/lang.c (language_table): update from current list,
+ write out update procedure for next time.
+ * makeinfo/lang.h (language_code_type): update enum.
+ * doc/texinfo.txi (documentlanguage): don't include the list of
+ language codes, change is too rapid.
+
+ * doc/texinfo.tex (\codequoteright, \codequoteleft): support
+ @set txicodequoteundirected and
+ @set txicodequotebacktick, respectively, as well as the non-txi names.
+ * doc/texinfo.txi (Inserting Quote Characters): new node.
+ * NEWS: mention both.
+
+2007-06-14 Karl Berry <karl@gnu.org>
+
+ * makeinfo/lang.c (cm_documentlanguage): add _CC part if necessary,
+ or split LL_CC if that's given. Set document_language so that
+ getdocumenttext strings will be translated.
+ * doc/texinfo.txi (documentlanguage):
+ * NEWS: mention this.
+
+ * util/gendocs_template: mention possibility of buying manuals
+
+2007-06-13 Karl Berry <karl@gnu.org>
+
+ * makeinfo/xml.c (xml_insert_element_with_attribute): close
+ menu_entry and menu_entry_comment elements before handling the
+ detailmenu element (either start or end).
+ From Thien-Thi Nguyen, 04 Jun 2007 01:18:37.
+
+2007-06-03 Per Bothner <per@bothner.com>
+
+ * xml.c (docbook_element_list): Map ANCHOR to "anchor".
+ * node.c (cm_anchor): Handle docbook.
+
+2007-05-22 Karl Berry <karl@gnu.org>
+
+ * util/gendocs_template{,_min}: missing period on source link.
+
+2007-05-21 Karl Berry <karl@gnu.org>
+
+ * makeinfo/multi.c (select_output_environment): C is not Perl.
+
+ * util/install-info.c (--test, --debug): new options,
+ via new variable chicken_flag and debug_flag,
+ and (minimal) implementation thereof.
+ (--silent): synonym for --quiet.
+ * doc/texinfo.txi (Invoking install-info): document them.
+
+2007-05-18 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Invoking install-info): document them.
+
+2007-05-18 Norbert Preining <preining@logic.at>
+
+ * util/install-info.c (longopts): new options --remove-exactly,
+ --section-regex.
+ (main): handle them.
+
+2007-05-17 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Image Syntax): findex entry should just be for
+ "-", not "@-". (Which fails due to \initial{\} in texinfo.fns,
+ but that's a different story.)
+
+2007-05-04 Karl Berry <karl@gnu.org>
+
+ * makeinfo/node.c (cm_anchor): ignore following whitespace,
+ including newlines. Reported by Kevin Ryde.
+ * doc/texinfo.txi (anchor): state this more clearly.
+
+ * doc/texinfo.tex (\tocreadfilename): allow override of
+ \jobname.toc for sake of 2-volume printed lispref.
+ (\finishentry): change test for no page number (and hence no
+ leaders) again, for "Volume N" in lispref.
+ (\smallbook): adjust margins to be more equal.
+
+2007-05-03 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\urlcolor, \linkcolor): define both as \BrickRed
+ by default.
+
+2007-04-29 Werner Koch <wk@g10code.com>
+
+ * makeinfo/html.c (process_css_file): Don't omit copying the i
+ of @import. (Reported on 27 Sep 06.)
+
+2007-04-29 Karl Berry <karl@gnu.org>
+
+ * system.h [__CYGWIN__]: #define STRIP_DOT_EXE 0 (since gunzip.exe
+ may no longer exist), and PIPE_USE_FORK as 1.
+ From Christopher Faylor, 28 Apr 2007 20:25:56.
+
+ * makeinfo/cmds.c (cm_strong): doc fix.
+
+ * makeinfo/makeinfo.h (paragraph_buffer_len): move decl here ...
+ * makeinfo/makeinfo.c (paragraph_buffer_len): from here.
+ * makeinfo/multi.c (select_output_environment): save and restore
+ paragraph_buffer_len. Otherwise, an exceptionally long multitable
+ entry (gcal.texi) might realloc output_paragraph, thus increasing
+ paragraph_buffer_len, and then we get back to the main text and
+ restore the old output_paragraph, we'll be out of sync. Yikes.
+ (Thank you to Electric Fence and valgrind.)
+
+2007-04-26 Oleg Katsitadze <olegkat@gmail.com>
+
+ * doc/texinfo.tex (cmapOT1, cmapOT1IT, cmapOT1TT): new definitions
+ for pdf so that searching and copying from pdf documents will find
+ text properly, e.g., the "fi" in "file". Report from
+ Frank K on tex-live.
+
+2007-04-26 Karl Berry <karl@gnu.org>
+
+ * util/gendocs_template: conform to new GNU style. From Yavor.
+ * util/gendocs_template_min: previous version, without SSI.
+
+2007-04-21 Karl Berry <karl@gnu.org>
+
+ * system.h (DMALLOC_FUNC_CHECK) [DMALLOC_DEBUG]: #define.
+
+2007-04-17 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi: findex set and clear.
+ From Kevin Ryde, 16 Apr 2007 11:15:00.
+
+2007-04-12 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi: improve @: usage and documentation throughout.
+
+2007-04-08 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (bs_escape_quote): new fn.
+ (cm_image) <Info output>: call it, to escape the alt string.
+ Also expand the alt string.
+ bug-texinfo mail from Kevin Ryde, 26 Mar 2007 07:06:14.
+
+ * doc/texinfo.tex (\printindex): set \plainfrenchspacing.
+
+2007-04-07 Oleg Katsitadze <olegkat@gmail.com>
+
+ * doc/texinfo.tex (\defunpenalty): new register.
+ (\startdefun): use it to avoid page breaks between a defun and a
+ single defunx -- only allow breaks between multiple defunx's.
+
+2007-04-03 Oleg Katsitadze <olegkat@gmail.com>
+
+ * doc/texinfo.tex (\whatsitskip, \whatsitpenalty): new registers.
+ (\safewhatsit): generalization of \dosubindsanitize. Change call.
+ (\pdfmkdest, \dosubind, \setref): call it. This avoids a page
+ break at an anchor (lispref/loading.texi/load-read-function).
+
+2007-04-02 Karl Berry <karl@gnu.org>
+
+ * util/gendocs_template: "bytes" is more accurate than "characters".
+ * util/gendocs.sh: force English settings; improve --help.
+ From Bruno.
+
+2007-03-31 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (init_paragraph): only free output_paragraph
+ if it is non-null.
+
+2007-03-31 Roland Levillain <roland@lrde.epita.fr>
+
+ * makeinfo/makeinfo.c (cm_image): Look for a JPEG image in the
+ include search path before giving up.
+ Fix inclusion of JPEG images (with non explicit extension)
+ not present in the current directory, but in the include search path.
+
+2007-03-28 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Menus): missing word "text".
+ From Matt Kraai, 27 Mar 2007 10:26:28 -0700.
+
+2007-03-18 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (cm_image): malloc enough space for the .txt
+ when given an extension.
+
+2007-03-17 Karl Berry <karl@gnu.org>
+
+ * util/dir-example: dmalloc, alignment.
+
+2007-03-13 Oleg Katsitadze <olegkat@gmail.com>
+
+ * doc/texinfo.tex (\enddoublecolumns): add \penalty0 so the
+ recent contributions won't be spuriously added to an index page.
+
+2007-02-26 Karl Berry <karl@gnu.org>
+
+ * info/info.c (info_short_example): example for dumping a whole
+ manual, suggested by Dan Jacobson, 21 Feb 2007 08:37:08.
+
+2007-02-24 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (The Top Node): no @insertcopying recommended,
+ per rms.
+
+2007-02-21 Karl Berry <karl@gnu.org>
+
+ * system.h: simplify system header inclusion, following current
+ practice; that is, copied from GNU Hello.
+
+ * makeinfo/test/no-headers (nulldev): just always use /dev/null.
+ Also from Brian.
+
+ * system.h (strcase.h) [!HAVE_STRCASECMP...]: remove this
+ inclusion entirely, apparently with gnulib string.h suffices.
+ Report from Brian Dessent, 31 Oct 2006 15:50:34.
+
+2007-02-21 Brian Dessent <brian@dessent.net> (tiny change)
+
+ * info/info.c,
+ * info/infokey.c,
+ * info/makedoc.c,
+ * util/texindex.c (program_name): declare as non-static, for
+ non-glibc, e.g., Cygwin. bug-texinfo mail from 31 Oct 2006 15:50:34.
+
+2007-02-14 Miloslav Trmac <mitr@redhat.com>
+
+ * makeinfo/makeinfo.c (getdocumenttext): Correctly save and
+ restore the current locale configuration.
+ bug-texinfo mail of 14 Feb 2007 16:28:37 +0100.
+
+2007-02-11 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (HTML Xref Link Basics): manual is metasyntactic.
+
+ * doc/texinfo.txi (documentencoding, documentlanguage):
+ mention the UTF-8 is (sort of) supported, and that these commands
+ should be given after @setfilename.
+
+ * doc/texinfo.tex (\pdfmkdest): \makevalueexpandable,
+ so simple @value in @node names can work.
+ Report from Jorge Barros de Abreu, 14 Jan 2007 08:24:57 (+ff).
+
+2007-02-10 gettextize <bug-gnu-gettext@gnu.org>
+
+ * gnulib/m4/gettext.m4: Upgrade to gettext-0.16.
+ * gnulib/m4/lib-link.m4: Upgrade to gettext-0.16.
+ * configure.ac (AM_GNU_GETTEXT_VERSION): Bump to 0.16.
+
+2007-02-07 Miloslav Trmac <mitr@redhat.com>
+
+ * configure.ac: Remove unnecessary wcwidth () test. Add missing
+ setlocale () test.
+ * makeinfo/makeinfo.c (string_width): Remove.
+ * makeinfo/makeinfo.h (string_width): Remove declaration.
+
+ * makeinfo/cmds.c (cm_center)
+ * makeinfo/index.c (insert_index_output_line_no, cm_printindex):
+ * makeinfo/makeinfo.c (do_flush_right_indentation)
+ * makeinfo/multi.c (output_multitable_row): Use mbswidth () and
+ mbsnwidth () instead of string_width ().
+
+2007-01-25 Karl Berry <karl@gnu.org>
+
+ * makeinfo/float.c (cm_listoffloats): always use the short caption
+ in the list of floats if it is provided. Report from
+ Jay Berkenbilt, 19 Jan 2007 11:58:00 -0500.
+
+2007-01-16 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi (insert_commands): Use fatal for errors.
+ (insert_commands): Actually, use "error", not "fatal".
+ White space changes.
+
+2007-01-16 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi (run_makeinfo): Instead of putting the whole
+ function in a "case", return if the language is not texinfo.
+
+2007-01-16 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi: White space changes.
+
+2007-01-08 Karl Berry <karl@gnu.org>
+
+ * util/texinfo.dtd (rArr): define, per Per.
+
+2007-01-07 Karl Berry <karl@gnu.org>
+
+ * makeinfo/cmds.c (cm_result): use rArr for html or docbook.
+
+ * makeinfo/lang.c (encoding_table): include UTF-8, just passing
+ through everything as-is.
+ (asis_map): rename us_ascii_map (and change US-ASCII entry).
+
+2007-01-03 Karl Berry <karl@gnu.org>
+
+ * makeinfo/xml.c (xml_id): oops, whitespace should be replaced
+ too. And probably more, but let's leave it at this for now.
+
+2007-01-02 Karl Berry <karl@gnu.org>
+
+ * makeinfo/xml.c (xml_id): do not use the SGML rules for id's,
+ which were very restrictive (no 8-bit chars). Instead, just pass
+ along what we are given, more or less, per current XML.
+
+2006-12-30 Karl Berry <karl@gnu.org>
+
+ * makeinfo/xml.c (xml_insert_element_with_attribute): remove the
+ warning again, the html-docdesc test triggers it for no apparent
+ reason, and I don't want to debug it now.
+
+ * doc/texinfo.tex (\DeclareUnicodeCharacter, et al.): new macros
+ to support @documentencoding UTF-8 (as well as Computer Modern
+ can). From Werner Lemberg.
+
+2006-12-28 Karl Berry <karl@gnu.org>
+
+ * makeinfo/xml.c (xml_insert_element_with_attribute): give a
+ warning if we need to ignore an insertion because the book hasn't
+ started. Can this ever happen with acceptable Texinfo documents?
+ I saw it in a document without @settitle but with @copying.
+ (xml_add_char): ensure that we have an element stack before
+ testing xml_current_element and failing the assertion.
+ (xml_pop_current_element): do not try to print the value of the
+ current element on underflow, there isn't one.
+
+2006-12-23 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\xrdef, \xrefX, \pdfmkdest): sanitize the node
+ name, so accents (either 8-bit chars or cmds) can be used.
+
+2006-12-22 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\setnormaldispenv, \setsmalldispenv): do
+ \endgraf before changing fonts, to get leading of previous
+ paragraph right when there is no blank line.
+ From John Gabriele, 21 Dec 2006 18:00:24.
+
+2006-12-11 Miloslav Trmac <mitr@redhat.com>
+
+ * configure.ac: Test wcwidth () availability.
+ * makeinfo/makeinfo.h (string_width, current_output_column): New
+ declarations.
+ (output_column): Remove. All users replaced by
+ current_output_column (), all modifications dropped.
+ * makeinfo/makeinfo.c (output_paragraph_start_column): New
+ variable.
+ (string_width, current_output_column): New functions.
+ (get_char_len): Remove.
+ (init_paragraph): Initialize output_paragraph_start_column.
+ (flush_output): Update output_paragraph_start_column.
+
+ * makeinfo/cmds.c (cm_center)
+ * makeinfo/index.c (insert_index_output_line_no, cm_printindex):
+ * makeinfo/makeinfo.c (do_flush_right_indentation)
+ * makeinfo/multi.c (output_multitable_row):
+ Don't assume number of columns == number of bytes.
+
+2006-12-11 Miloslav Trmac <mitr@redhat.com>
+
+ * makeinfo/makeinfo.h (NON_BREAKING_SPACE): New macro.
+ (control_character_bit, meta_character_bit, CTL, UNCTL, META)
+ (UNMETA): Remove.
+ * makeinfo/makeinfo.c (add_char, flush_output): Use
+ NON_BREAKING_SPACE instead of META (' ').
+ (get_char_len): NON_BREAKING_SPACE is only one column wide.
+
+2006-12-05 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (@documentencoding): mention that it is
+ (somewhat) supported in TeX now.
+
+2006-12-05 Paulo Sequeira <psequeira@gawab.com>
+
+ * doc/texinfo.tex (\documentencoding): real implementation.
+ (\setnonasciicharscatcode): new macro.
+ (\missingcharmsg): new macro.
+ (\latonechardefs, latninechardefs, \lattwochardefs): new macros.
+
+2006-11-24 Karl Berry <karl@gnu.org>
+
+ * Makefile.am (po-check): new utility target from coreutils.
+
+2006-11-08 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\dopdfimage): look for png, jpg/jpeg/JPG, and
+ as well as pdf images, since they are supported in pdftex with
+ no further ado.
+ * doc/texinfo.txi (Image Syntax): document it.
+
+2006-11-05 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (Image Syntax): don't mention GIF any more.
+
+2006-11-01 Miloslav Trmac <mitr@redhat.com>
+
+ * util/texindex.c (main): Remove off-line sort implementation.
+ (tempdir, tempbase, tempcount, last_deleted_tempcount)
+ keep_tempfiles): Remove variables.
+ (sort_offline, initbuffer, readline, merge_files, merge_direct)
+ (gettempname, maketempname, flush_tempfiles):
+ Remove functions.
+ (texindex_options): Remove --keep and --no-keep documentation.
+ (decode_command): Ignore --keep.
+ (writelines): Fix comment.
+
+2006-10-24 Karl Berry <karl@gnu.org> (tiny change)
+
+ * util/texindex.c (readline): do the reallocation (more) correctly.
+ From Miloslav Trmac.
+
+2006-10-10 Karl Berry <karl@gnu.org>
+
+ * TODO: would be nice if accent commands implicitly used
+ dotless i/j.
+
+2006-10-09 Miloslav Trmac <mitr@redhat.com> (tiny change)
+
+ * util/texindex.c (gettempname): new fn, split off from maketempname.
+ (maketempname): call it. We weren't deleting temp files.
+ (sort_offline): check result from maketempname.
+
+2006-10-06 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * makeinfo/tests/quote-args: Add missing $srcdir.
+
+2006-10-04 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\singlequotechar): rename to \codequoteright.
+ (\quoteexpand): rename to \rquoteexpand.
+ (\codequoteleft): new def, to look for @set codequotebacktick.
+ (\lquoteexpand, \quoteexpand): new defs.
+ (\lquoteChar, \rquoteChar, \dashChar, \underChar): new \chardef's.
+ (\code): must use new \...Char values, since now ` is active.
+
+2006-10-01 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi (run_bibtex): also run bibtex if "no .aux file" in
+ the .log, and "\bibdata" in the aux, for the first run of a btxmac
+ file. Report from Oleg Katsitadze.
+
+2006-09-30 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Inserting Braces): spurious ppp.
+
+2006-09-22 Stepan Kasal <kasal@ucw.cz>
+
+ * configure.ac: Add a comment explaining `env -i PATH=$PATH'.
+
+2006-09-13 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (code): spurious "in the printed manual", from
+ Bob C.
+
+2006-09-01 Eli Zaretskii <eliz@gnu.org>
+
+ * doc/texinfo.txi (Multitable Rows): Document the Info output of
+ @headitem.
+
+2006-08-26 Karl Berry <karl@gnu.org>
+
+ * makeinfo/cmds.c (command_table): new command @textdegree{}.
+ * makeinfo/lang.c (cm_special_char): handle textdegree.
+ * doc/texinfo.tex (\textdegree): define it.
+
+ * doc/texinfo.txi (Output Formats): update Beebe paper reference.
+ (Printed Books): update texinfo.tex reference.
+ Report from VAN VLIERBERGHE Stef, 22 Aug 2006 22:05:27 +0200.
+
+2006-08-23 Karl Berry <karl@gnu.org>
+
+ * doc/Makefile.am (man_rule_bin): use help2man -o, instead of
+ redirection, so that `missing' can infer the output filename.
+
+2006-08-13 Alexander E. Patrakov <patrakov@ums.usu.ru> (tiny change)
+
+ * info/man.c (get_manpage_contents), info/info.c (main):
+ Info apparently assumes equivalence of bytes and characters,
+ leading to (for example) translated man output in multibyte
+ locales being broken within a character. In lieu of a
+ real fix, if MB_CUR_MAX > 1, revert to C. bug-texinfo mail,
+ 07 Aug 2006 14:59:42 +0600.
+
+2006-08-12 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (error \box0): smaller font.
+
+2006-08-08 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Invoking Macros): all commas inside macro calls
+ are quoted, it seems. From Patrice.
+
+2006-07-25 Karl Berry <karl@gnu.org>
+
+ * configure.ac (AC_MINIX): remove, as it seems there is nowhere to
+ call it, and is it really necessary these days?
+
+ * doc/info-stnd.texi (What is Info?): suggest the Emacs Info
+ reader for the nicest display.
+
+2006-07-16 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\onepageout): hardwire a 24pt space before
+ \footlinebox, instead of 2\baselineskip. If the page break occurs
+ at a heading, for instance, \baselineskip might be larger, causing
+ the footer to jump.
+ (\oddfootingyyy): likewise (although doesn't really matter here).
+ Report from Werner Lemberg, 02 Jun 2006 07:44:36 +0200.
+
+ * doc/texinfo.txi: use @copyright{} in @copying, not (C).
+
+2006-07-15 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\code): make ' active.
+ (@lisp,@example): call \quoteexpand.
+ (\quoteexpand): new definition to make ' active.
+ (\singlequotechar): the active definition of '; if
+ the variable codequoteundirected is @set, use char"d from tt
+ instead of the regular directed quote.
+ This is all to make pasting of ' in examples work in more pdf
+ viewers, at least evince.
+ From: Han-Wen Nienhuys, 2 Jun 2006 01:22:44 +0000.
+
+2006-07-10 <Ralf.Wildenhues@gmx.de>
+
+ * makeinfo/html.c (insert_html_tag_with_attribute): Treat `samp'
+ special, to allow it to nest.
+ * makeinfo/cmds.c (cm_code): use insert_html_tag to add `samp'
+ instead of add_word, so that the roll-back of outer tags works
+ correctly. (This fixes @option inside of @emph causing badly
+ nested tags in the HTML output, see 8 Jun 2006 00:12:55 +0200 mail.
+ The general problem still remains.)
+ * makeinfo/tests/emph-option: New test.
+ * makeinfo/tests/emph-option.txi: New file.
+ * makeinfo/tests/Makefile.am: Adjust.
+
+2006-07-09 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (makeinfo Pointer Creation, Writing a Menu):
+ mention that accesskey is used in the HTML output.
+
+2006-07-09 <Ralf.Wildenhues@gmx.de>
+
+ * doc/texinfo.txi: Fix some typos.
+
+2006-07-04 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * makeinfo/macro.c (add_macro): Initialize def->argcount
+ (get_brace_args): Change argument type to enum quote_type.
+ (All callers updated.) Implement default argument quoting.
+ (expand_macro): Use def->argcount to control the number of passed
+ arguments.
+ (define_macro): Issue a warning if @allow-recursion or @quote-arg
+ is used.
+ * makeinfo/macro.h (MACRO_DEF): New member argcount
+ (enum quote_type): New data type.
+ (get_brace_args): Change argument type to enum quote_type
+ (ME_QUOTE_ARG): Remove the macro
+ * makeinfo/makeinfo.c (cm_ifeq): Update call to get_brace_args
+ * makeinfo/tests/Makefile.am (TESTS): New test quote-args
+ (EXTRA_DIST): New file quote-args.txi
+ * makeinfo/tests/quote-args: New test
+ * makeinfo/tests/quote-args.txi: New file
+ * doc/texinfo.txi: Document automatic argument quoting
+
+2006-07-03 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * doc/txi-pl.tex: Do not use \prefixing and \notprefixing. They
+ were defined in PLaTeX, but are no longer global. Use ISO-8859-1
+ instead.
+
+2006-06-27 Akim Demaille <akim@epita.fr>
+
+ * util/defs.in ($latex_paragraph): New.
+ * util/latex2html.test (input.tex): Make it big enough to trigger
+ the info file splitting.
+ * util/texi2dvi (move_to_dest): Accept several arguments.
+ (run_hevea): Use it to move the whole family.
+
+2006-06-27 Akim Demaille <akim@epita.fr>
+
+ Fix the clean invocations to hevea.
+ Note that this breaks document using images (to be fixed).
+ * util/latex2html.test (run_hevea_check): Extend to support
+ various build modes.
+ Test them.
+ Force the creation of aux files (something the previous test
+ failed to do...).
+ * util/defs.in (title): New.
+ * util/texi2dvi: Fix incorrect "error" invocations.
+ (run_hevea): Don't pass -o to hevea.
+ Move the result to the expected destination.
+ Don't pass -noiso.
+
+2006-06-26 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi (generated_files_get): Call uniq.
+
+2006-06-07 <Ralf.Wildenhues@gmx.de>
+
+ * Makefile.am (AUTOMAKE_OPTIONS): Require Automake 1.9, since
+ non-direct subdirs in SUBDIRS (gnulib/lib) is a 1.9 feature.
+
+2006-06-24 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (anchor): pxref Node Line Requirements since the
+ same name restrictions apply. Suggested by Eli.
+
+2006-06-21 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi (fatal): Rename as...
+ (error): this.
+ If the exit status is 0, don't exit.
+ (run): New.
+ Use it where appropriate.
+ (run_dvipdf): New.
+ Use it.
+
+2006-06-21 Akim Demaille <akim@epita.fr>
+
+ * util/Makefile.am, info/Makefile.am, makeinfo/Makefile.am,
+ * lib/Makefile.am (DEFS): Remove, included in...
+ (AM_CPPFLAGS): this.
+ Add -I $(top_srcdir) to find system.h.
+
+2006-06-19 Karl Berry <karl@gnu.org>
+
+ * system.h: move to top level.
+ * */Makefile.am (AM_CPPFLAGS): no longer need -I$(top_srcdir)/lib.
+
+ * makeinfo/makeinfo.c (getdocumenttext): replace with a modified
+ version of get_title from gettext, as suggested by Bruno Haible,
+ back on 2 Dec 2003.
+ * gnulib: import xsetenv module.
+
+ * doc/texinfo.tex (\indexdotfill): back to regular (non-italic)
+ periods, suggested by Werner Lemberg and others.
+
+2006-06-19 Akim Demaille <akim@epita.fr>
+
+ Support dvips and dvipdf for sake of pstricks, and to
+ spare the use tweaking TEXINPUTS.
+ * util/defs.in (optionset_get, assert_and_remove_files): New.
+ * util/texi2dvi (out_lang_tex, out_lang_ext): New.
+ Use them.
+ ($language): Rename as...
+ ($in_lang): this for consistency.
+ Support --dvipdf and --ps.
+ Not documented yet.
+ * util/dvipdf.test: New.
+ * util/Makefile.am (TESTS): Adjust.
+ * util/texi2dvi.tests (one_run): New.
+
+2006-06-18 Karl Berry <karl@gnu.org>
+
+ * gnulib: new subdirectory, managed by gnulib-tool.
+ * m4: delete entire subdirectory, now replaced by gnulib/m4.
+ * build-aux: new subdirectory.
+ * README.dev: doc.
+ * autogen.sh: aclocal needs -I gnulib/m4 now.
+ * Makefile.am, util/Makefile.am, lib/Makefile.am, info/Makefile.am,
+ makeinfo/Makefile.am (AM_CPPFLAGS, LDADD): use new gnulib dirs.
+ * lib/alloca.c, lib/getopt*, lib/gettext.h, lib/mem*, lib/str*,
+ etc.: delete, now using gnulib modules (as recorded in
+ gnulib/m4/gnulib-cache.m4)
+
+2006-06-08 Karl Berry <karl@gnu.org>
+
+ * po/Makevars (XGETTEXT_OPTIONS): add --keyword=__, so that the
+ gettext will mark the new __ strings (2006-05-29 change from
+ Norbert) for translation again.
+
+2006-06-07 <Ralf.Wildenhues@gmx.de>
+
+ * makeinfo/footnote.c (output_pending_notes): Use
+ add_html_block_elt instead of add_word for final part of
+ footnote, so no extra <p> is output.
+
+2006-06-05 Akim Demaille <akim@epita.fr>
+
+ * util/bibtex.test: Add it for real.
+
+2006-06-03 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi: always report tex command being used.
+
+2006-06-02 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi (--src-specials): new option,
+ requested by Charlie Zender.
+
+2006-06-01 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\thischapternum): new macro for
+ headings/footings, requested by Werner.
+ * NEWS, doc/texinfo.txi (Command List, Custom Headings): document it.
+
+2006-06-01 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * makeinfo/html.c (html_output_head): Insert external CSS
+ reference if css_ref is set.
+ (fix_filename): Attempt to transliterate the name before falling
+ back to numeric symbol representation.
+ * makeinfo/lang.c (iso8859_2_map): Add transliterations
+ (koi8_map): New map for koi8-u and koi8-r encodings.
+ (encoding_table): Add koi8-u and koi8-r
+ (cm_search_iso_map_char,lang_transliterate_char): New functions.
+ * makeinfo/lang.h (encoding_code_type): Add KOI8_R, KOI8_U
+ (struct iso_map_type): New member `translit'.
+ (lang_transliterate_char): New function prototype.
+ * makeinfo/makeinfo.c: New options --css-ref and
+ --transliterate-file-names.
+ * makeinfo/makeinfo.h (css_ref, transliterate_file_names): New
+ variables.
+ (URL_SAFE_CHAR): Bugfix: Make sure argument is in isalnum() domain.
+
+ * doc/texinfo.txi: Document new options.
+
+2006-05-30 <Ralf.Wildenhues@gmx.de>
+
+ * configure.ac (sigblock): Fix underquoted macro usage.
+
+2006-05-30 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi (aux_file_p): Rename the second occurrence as...
+ (bibaux_file_p): this.
+ (run_bibtex): Use it.
+ (options processing, $usage): Support --dvi for symmetry and to
+ ease systematic tests.
+ * util/bibtex.test: New.
+
+2006-05-30 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi: Add support for latex to text and info using
+ hevea.
+ Don't document it yet, as it's preliminary and on some regards
+ incomplete. It is usable though.
+ (IFS): Use a more robust definition, taken from Autoconf.
+ (bibaux_file_p): New, extracted from...
+ (run_html): Generalize and rename as...
+ (run_hevea): this.
+ (run_core_conversion): Adjust.
+ (option processing): Accept --text and --info.
+ * configure.ac: Check for TEX and HEVEA.
+ * util/defs.in: No longer create a texi file by default.
+ Handle hevea requests.
+ (create_input_tex, create_input_texi): New.
+ (assert_files, list_files): Rework to use diff instead of test.
+ And sort both lists of files before comparing them.
+ * util/latex2html.test: New.
+ * util/Makefile.am (TESTS): Update.
+
+2006-05-29 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.h (getdocumenttext, __): new definitions for
+ strings translated according to the document language, instead of
+ the interface language.
+ * makeinfo/makeinfo.c (getdocumenttext): new fn.
+ (usage): new option --document-language to specify.
+ * makeinfo/lang.h (document_language): new declaration.
+ * makeinfo/lang.c (document_language): define.
+ * makeinfo/defun.c, makeinfo/html.c, makeinfo/node.c,
+ makeinfo/toc.c, makeinfo/xref.c: use __ instead of _ for document
+ strings.
+ * doc/texinfo.txi (makeinfo options): minimal documentation.
+ From Norbert Preining, 10 Mar 2006 02:22:19 +0100.
+ Debian bugs 113988 and 355367.
+
+2006-05-28 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\indexdummies): \let\endinput=\empty, to
+ avoid premature end of processing when an index entry is generated
+ from a macro.
+ Report from Graham Percival to help-texinfo, 22 May 2006 12:03:12.
+
+ * doc/texinfo.tex (\dots): use width of three period characters if
+ that is wider than 1.5em. Report from Steve Peter.
+
+ * system.h [__CYGWIN__] (NULL_DEVICE): define as /dev/null.
+ From Ralf W.
+
+2006-05-27 Karl Berry <karl@gnu.org>
+
+ * texi2dvi (IFS): initialize, since otherwise when we save/restore
+ it may end up being set-but-empty, which may disable splitting.
+ Report from Ralf W.
+
+2006-05-20 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi (run_makeinfo): use $TEX instead of hardwiring
+ tex, to maybe avoid running into some
+ misconfigured TeX installations, resulting in
+ ---! /var/lib/texmf/web2c/etex.fmt was written by pdfetex
+ (Fatal format file error; I'm stymied)
+ Original report from Ralf Wildenhues, 12 May 2006 11:19:13 +0200.
+
+2006-05-18 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * util/gendocs.sh: quoting, url fixes.
+
+2006-05-08 Karl Berry <karl@gnu.org>
+
+ * autogen.sh: new name for bootstrap, and improve msg. From Bruno
+ via hello.
+
+2006-05-07 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\dopdfimage): width and height args might have
+ whitespace. Report from Bob Chassell.
+
+2006-05-05 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\definetextfonsizexi, \definetextfonsizex): new cmds.
+ (\fonttextsize): new user-level command @fonttextsize to change
+ text font size. (To be used for the next Emacs edition.)
+ * makeinfo/cmds.c (cm_fonttextsize): new fn.
+ (command_table): include it.
+ * NEWS, doc/texinfo.txi (Fonts): document it.
+
+2006-05-04 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Reporting Bugs): wording to match hello.
+
+2006-04-26 Karl Berry <karl@gnu.org>
+
+ * doc/Makefile.am (TXI_XLATE): add txi-ru.tex and txi-uk.tex,
+ from Sergey Poznyakoff.
+ * doc/txi-ru.tex, doc/txi-uk.tex: new files.
+
+2006-04-13 Karl Berry <karl@gnu.org>
+
+ * makeinfo/insertion.c (end_insertion): kill_self_indent(-1) to
+ remove all indentation. From Brian Gough, 11 Apr 2006 16:42:29 +0100.
+
+2006-04-11 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (GNU Sample Texts): GFDL is version 1.2 now.
+ Report from Claudio.
+
+2006-03-28 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (HTML Xref Command Expansion): use U+2605 for
+ @point{} and U+22A3 for @print{}. From Patrice.
+
+2006-03-25 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (copying): warn not to indent lines within the
+ @copying.
+
+2006-03-24 Karl Berry <karl@gnu.org>
+
+ * makeinfo/html.c (escape_string): do not free the old string,
+ that is dangerous, only the caller should do it.
+ (add_link): escape the title string.
+ Report from Ralf Wildenhues, 17 Mar 2006 05:08:11 +0100.
+
+2006-03-21 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\parseargusing, \finishparsearg): Use \argtorun
+ instead of \next.
+ (\argcheckspacesY): Change the wording of the comment about \next.
+ (\braceorline, \braceorlinexxx): Do not suppose that \next is
+ preserved during the run of \parsearg, anyway.
+
+2006-03-14 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (section, subsection, unnumberedsubsec,
+ subsubsection): make it clear that @section can be used within
+ any chapter unit.
+ Report from: Hynek Hanke, 11 Mar 2006 20:44:34 +0100.
+
+ * doc/texinfo.tex (\imagexxx): do not center the image by default.
+ The manual says we don't do that, and Lilypond needs
+ left-justification.
+ From: Han-Wen Nienhuys, 9 Mar 2006 21:08:26 +0000.
+
+2006-03-13 Miloslav Trmac <mitr@redhat.com> (tiny changes)
+
+ * info/Makefile.am (infokey_LDADD): don't link with curses.
+
+ * makeinfo/sectioning.c: cast arguments to substring, to placate
+ current gcc.
+
+2006-03-13 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi: reindent --help message.
+
+2006-03-07 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Writing a Node): show example of specifying
+ some pointers but not others.
+
+2006-02-28 Akim Demaille <akim@epita.fr>
+
+ Be robust to spaces in directory names.
+ * util/texi2dvi (absolute): Be robust to non directories.
+ (run_tex): Quote in_input properly.
+ (compile): Quote args of eval properly.
+
+2006-02-25 Karl Berry <karl@gnu.org>
+
+ * info/nodes.c (info_get_node_of_file_buffer): try to avoid
+ running man Top, which returns the top(1) man page on Debian.
+
+2006-02-14 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * util/texi2dvi: New options --translate-file and --recode-from.
+
+2006-02-13 Karl Berry <karl@gnu.org>
+
+ * makeinfo/cmds.c (cm_enddots): output three dots, not four, for
+ consistency with texinfo.tex.
+
+ * doc/texinfo.tex (\doignore): move \obeylines here.
+ (\dodoignore): from here. (just putting catcode changes together.)
+ (\doignoretextyyy): revert to previous code, no ##2^^M;
+ that caused blank lines in verbatim envs inside failing conditionals.
+ (\enddoignore): ignore any text after the @end #1 here, instead.
+ Bug report from Bob Wilson, 5 Oct 2005 21:22:33 -0700,
+ amended fix from Stepan, 13 Feb 2006 21:57:07 +0100.
+
+ * info/nodes.c (info_get_node): don't try man Top and man top and
+ man TOP. Debian bug 234848.
+
+2006-02-11 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (write_trailer): new fn.
+ (convert_from_loaded_file) <finished>: call it *after* the
+ tag table has been written, else Emacs likely won't seeit.
+ Report from: Juri Linkov, 11 Feb 2006 03:11:33 +0200.
+
+2006-02-10 Karl Berry <karl@gnu.org>
+
+ * util/texinfo.dtd (menucomment): more inclusive.
+ (enumerate): allow indexes.
+ From Torsten.
+
+2006-02-06 Karl Berry <karl@gnu.org>
+
+ * util/texinfo.dtd: apparently we cannot have -- in an XML
+ comment. Kludge.
+
+2006-02-05 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi (run_makeinfo): eval $makeinfo, for gettext
+ 0.14.5's complex $MAKEINFO definition.
+
+2006-01-30 Karl Berry <karl@gnu.org>
+
+ * util/texinfo.dtd: many additions and fixes from
+ Torsten Bronger.
+
+2006-01-27 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\sectionheading): \nobreak before the \vbox
+ with the heading.
+ Report from: Norbert Preining, 2 Nov 2005 10:07:57 +0100,
+ Debian bug 276000.
+
+2006-01-25 Karl Berry <karl@gnu.org>
+
+ * makeinfo/lang.c (cm_accent_generic_no_headers): do nothing
+ if end == 0 (accent command in @menu with --no-headers).
+ Report from Akim Demaille, 23 Jan 2006 16:41:38 +0100.
+
+2006-01-18 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (key): more examples.
+
+2006-01-18 Akim Demaille <akim@epita.fr>
+
+ Sometimes the temporary directory remains.
+ Reported by Wybo Dekker.
+ * util/defs.in (assert_files): New.
+ * util/texi2dvi.test: Use it.
+ Extend to check the local builds.
+ * util/texi2dvi (aux_file_p, index_file_p, xref_file_p): Check
+ that the file exists.
+ (generated_files_get): Simplify according to these changes.
+ (remove, cleanup): New.
+ Use the latter in the cleaning trap.
+ (mostly_clean): Use them.
+
+2006-01-17 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi (generated_files_get): Skip nonexistent files
+ earlier.
+
+2006-01-15 Karl Berry <karl@gnu.org>
+
+ * info/infodoc.c (info_internal_help_text): combine messages
+ which are single sentences into one string.
+ Report from Clytie Siddall, via
+ http://sourceforge.net/tracker/index.php?func=detail&aid=1406541&group_id=40033&atid=426818.
+
+ * po/POTFILES.in: add missing makeinfo/xref.c, makeinfo/float.c.
+ Report from Torsten.
+
+2006-01-09 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi: set -e.
+ Stop using the idiom "test && action" in favor of "if test; then
+ action; fi".
+ (xref_files_save): Use tar instead of cp.
+ (run_makeinfo): Fix a "local" use.
+
+2006-01-08 Loic Minier <lool@dooz.org> (tiny change)
+
+ * info/display.c (display_update_one_window): systematize
+ check as to whether `entry' is non-null before referring to it.
+ Still some segfaults when resizing the window rapidly.
+
+2006-01-08 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\normalturnoffactive): restore setting of
+ active \ to \normalbackslash.
+ (\onepageout): restore call to \normalturnoffactive.
+ Otherwise, if a page break happens at the wrong time, the active
+ \ will result in writing an actual \ character,
+ instead of {\tt \backslashcurfont }.
+ Report from Kurt.Hornik@wu-wien.ac.at, 6 Jan 2006 14:38:38 +0100.
+ [test idxback-exts]
+
+2005-12-26 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (node, Node Names): pxref Node Line Requirements,
+ about restrictions on characters in node names.
+
+2005-12-25 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\pdfurl): make @/ a no-op.
+ Report from Kurt Hornik, 23 Dec 2005 13:17:56 +0100.
+
+ * util/texi2dvi (no_file_line_error): new control,
+ with option --no-line-error to set it. Wybo Dekker's mk program
+ wants to parse TeX's original error messages.
+ (run_tex): obey it.
+
+2005-12-22 Akim Demaille <akim@epita.fr>
+
+ Implement --mostly-clean, improve the detection of aux files.
+ * util/texi2dvi ($action): New.
+ (--mostly-clean): New.
+ (cd_orig): New.
+ (generated_files_get, aux_file_p, index_file_p, xref_files_p):
+ New.
+ (get_index_files): Remove, replaced by the previous functions.
+ (get_xref_files): Rename as...
+ (xref_files_get): this.
+ (run_index): Use generated_files_get.
+ (clean): Rename as...
+ (mostly_clean): this.
+ Strengthen.
+ ($t2ddir): Try to have a `local' absolute file name, not a fully
+ absolute one to avoid very very long file names.
+ * util/texi2dvi.test: Exercise --mostly-clean.
+
+2005-12-20 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (key): DELETE, not DEL, per rms.
+
+2005-12-19 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi (run_conversion): Rename as...
+ (run_core_conversion): this.
+ (compile): New.
+ This is the former main program.
+ (clean): New.
+ Use it.
+ (language): Compute it in the main loop.
+
+2005-11-18 Akim Demaille <akim@epita.fr>
+
+ Factor the handling of list of directories.
+ * util/texi2dvi (list_append, list_prefix, list_infix)
+ (list_dir_to_abs, absolute): New.
+ Use them.
+ ($miincludes, $txincludes): Remove, replaced by...
+ ($includes): this one.
+ (func_dirname): Don't use fd6 that might not be set up yet.
+ (run_to_html): Use $includes.
+
+2005-11-13 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Top Node Example): missing @end iffnottex.
+ (The Top Node): @end ifnottex, not ifnottext.
+ From Steve Peter.
+
+2005-11-10 Akim Demaille <akim@epita.fr>
+
+ Make the naming conventions more consistent and shorter.
+ * util/texi2dvi (oformat): Rename as...
+ (out_lang): this.
+ (filename_input, filename_src, filename_xtr, filename_rcd,
+ filename_noext, filename_dir, filename_dir_abs): Rename as...
+ (in_input, in_src, in_xtr, in_rcd, in_noext, in_dir, in_dir_abs)
+ this.
+ (in_base, out_name, out_dir, out_dir_abs, out_base, out_noext): New.
+ (output_base_name): New.
+ (move_to_dest): Use it.
+ (run_tex): Catch invalid calls.
+ Be robust to inclusion in subdirs.
+ (run_bibtex): Simplify when this is not a LaTeX file.
+ (run_tex_suite): cycle is local.
+ (input_file_name_decode): New, extracted from the main loop.
+ Some variables are now local.
+
+ Use the output file name as root for the t2d directory name.
+ * util/texi2dvi (t2ddir): Use $out_noext, no $in_noext.
+ * util/texi2dvi.test: Adjust.
+
+ Be robust to inclusion in subdirs.
+ * util/texi2dvi (run_tex): Look for \include of files in subdirs.
+ (run_bibtex): Citations might be in another aux file.
+
+ Support html.
+ * util/texi2dvi (run_to_html): New.
+ (run_conversion): New, extracted from the main loop.
+ Support --html.
+
+
+2005-11-10 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Def Cmd Template): mismatched example and output.
+ Report from: Steve Peter, 09 Nov 2005 12:46:02 -0500.
+
+2005-10-23 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi (insert_commands): missing $ in case statement;
+ from report by Simon Josefsson.
+
+2005-10-09 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\doignoretext): ignore characters after
+ ignored conditionals, e.g., @end ifset. Otherwise the newline
+ following results in a blank line being output in verbatim
+ environments.
+ From: Bob Wilson, 5 Oct 2005 21:22:33 -0700.
+
+2005-10-05 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi.test: Make sure --build=clean passes.
+ * util/texi2dvi: Fix the handling of --build.
+
+2005-10-05 Karl Berry <karl@gnu.org>
+
+ * util/texindex.c (maketempname): use mode 0600.
+
+2005-10-02 Karl Berry <karl@gnu.org>
+
+ * util/texindex.c (maketempname): avoid race condition.
+ (concat): now take three args, so rename to concat3.
+ Debian bug 328365.
+
+2005-09-30 Karl Berry <karl@gnu.org>
+
+ * configure.ac: reenable utils/defs generation, now that we have
+ the files below.
+
+2005-09-29 Akim Demaille <akim@epita.fr>
+
+ * doc/texinfo.txi: Document pdftexi2dvi.
+ * doc/Makefile.am (common_texi2dvi_deps): New.
+ Handle texi2pdf and pdftexi2dvi.
+ * util/texi2dvi: Stop supporting shortened long options, as it's
+ causing troubles. Short options are here anyway.
+ (local): Provide a default implementation if not supported by the
+ shell.
+ (findprog): Use return.
+ (get_xref_files): Rename as...
+ (xref_files_get): this.
+ (xref_files_changed, xref_files_save): New.
+ (run_tex_suite): New.
+ (move_to_dest): Use `local'.
+ ($textra_cmd): Compute it in...
+ (insert_commands): here.
+
+ * tests/defs.in, tests/texi2dvi.test, tests/local.test: New.
+ * configure.ac, tests/Makefile.am: Adjust.
+
+2005-09-22 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi ($build_dir): New.
+ (--build-dir): New.
+ ($usage): Adjust.
+ ($line_error): New.
+ AUC-TeX wants regular TeX error messages, so don't require
+ GNU style error message when under AUC-TeX.
+ ($filename_dir_abs): New.
+ ($t2ddir): When the build-dir is specified, make sure to avoid
+ collisions between files with equal names, but in different
+ directories.
+ ($command_line_filename): Decode possible TeX commands.
+ * util/Makefile.am (pdftexi2dvi): New.
+
+2005-09-20 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi: Be sure to return to the current directory even
+ after obeying --clean.
+
+2005-09-17 Sergey Poznyakoff <gray@Mirddin.farlep.net> (tiny change)
+
+ * makeinfo/cmds.c (handle_include): don't expand @verbatiminclude,
+ so that texi2dvi will pass it through to texinfo.tex. Otherwise
+ the dvi/pdf output is wrong.
+
+2005-09-05 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex: Fix typo in a comment.
+
+2005-09-05 Karl Berry <karl@gnu.org> (tiny change)
+
+ * util/texi2dvi: look for btxmac.tex's "Undefined citation" message.
+ Then texi2dvi works with (e)plain, too, by setting LATEX=tex.
+ Report from Oleg Katsitadze.
+
+2005-08-31 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi: Fix white space issues.
+ Quote uses of directory and file names.
+ Don't expect "export var=val" to work (e.g., SunOS 5.9): do it in
+ two steps.
+ ($tex_help): Compute it where needed (run_tex), in particular so
+ that $tex is defined when used.
+ (func_dirname): New.
+ ($quiet, $verb): Now regular true/false variables.
+ (verbose): Adjust.
+ (run_tex): When we introduced white space by making absolute file
+ names, circumvent TeX's phobia of space in file names by
+ introducing a symbolic link.
+ (filename_dir): Keep it relative when not $tidy.
+
+2005-08-30 Karl Berry <karl@gnu.org>
+
+ * makeinfo/xref.c (cm_xref): if the following wrong char is ),
+ suggest @pxref. Suggested by Kevin Ryde, 30 Aug 2005 09:23:39 +1000.
+
+2005-08-17 Predrag Rakic <pec@uns.ns.ac.yu>
+
+ * doc/txi-sr.tex: Serbian translation.
+
+2005-08-15 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\normalturnoffactive): Now contains the body of
+ \turnoffactive. Don't explicitly restore the original value of active \
+ ---just let it be.
+ (\turnoffactive): Can now be redefined as \normalturnoffactive
+ \otherbackslash.
+ (\atdummies): All calls were followed by \turnoffactive; remove that
+ and add \otherbackslash to the definition, since it already calls
+ \normalturnoffactive indirectly.
+ (\xrefX): One of the calls of \refx missed the second parameter;
+ fix that.
+ (\commondummiesnofonts): No need to make ~ other for the definition;
+ it contains only \~ now.
+ (\backChar, \plusChar, \underChar): Nuke.
+ (\colonChar, \commaChar, \dotChar, \exclamChar, \questChar, \semiChar):
+ Move just before the definition of ...
+ (\plainfrenchspacing): ... since it's the only place where it's used.
+ (\activebackslash): Remove both definitions; the first one was shadowed
+ by the second one; and the second one can easily be eliminated; it
+ was used only on one place.
+ (\backslashlparen): No need for this; \realbackslash( is enough.
+ (\backslashrparen): Likewise.
+
+2005-08-14 Per Bothner <per@bothner.com>
+
+ * makeinfo/index.c (cm_printindex): Don't defer index if docbook,
+ since we don't need it and it prevents output to a pipe.
+
+ * makeinfo/insertion.h (default_item_function): New declaration.
+ * makeinfo/insertion.c (default_item_function): New variable.
+ (begin_insertion): Use default_item_function for @bullet default.
+ (pop_insertion): Check if item_function is default_item_function.
+ * makeinfo/xml.c (xml_begin_table): Don't emit mark attribute
+ if the item_function was implied.
+
+2005-08-13 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\writetocentry, ...): restore calls to
+ \turnoffactive after \atdummies removed in the July 1 change (v.194).
+ \turnoffactive and \normalturnoffactive are not the same -- we need
+ actual backslash characters in the pdf destinations and .aux and
+ index files, not expansions. (I'm not sure we ever need
+ \normalturnoffactive, actually.)
+
+2005-08-12 Karl Berry <karl@gnu.org>
+
+ * doc/info.texi: merge changes from Emacs, by Juri.
+
+2005-08-06 Per Bothner <per@bothner.com>
+
+ * makeinfo/index.c (cm_printindex): Don't xml_insert_indexentry if
+ docbook, since we'll let the doxbook processor generate the index.
+ * makeinfo/xml.h (xml_sort_index, xml_insert_indexentry): Remove.
+ * makeinfo/xml.c (xml_begin_index): Don't actually do any formatting.
+ (xml_end_index): Don't do anything except close <index>.
+ (xml_insert_indexentry): Remove no-longer-used function.
+
+ * makeinfo/xml.c (element docbook_element_list): The docbook <index>
+ element should *not* be contained_in_para.
+
+ * makeinfo/xml.c (xml_begin_document): Add id attribute to top-level
+ book if emitting docbook.
+
+2005-08-05 Stepan Kasal <kasal@ucw.cz>
+
+ * configure.ac: (auto)update.
+ * info/Makefile.am, makeinfo/Makefile.am, utils/Makefile.am: s/INCLUDES/AM_CPPFLAGS/
+ * lib/Makefile.am (INCLUDES): Remove.
+
+2005-08-05 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\Efloat): Revert the previous change, ...
+ (\commondummiesnofonts): ... instead, add the three commands here.
+
+2005-08-04 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\Efloat): make \xref, \pxref, \ref no-ops.
+ Report from: Aaron S. Hawley, 3 Aug 2005 19:46:40 -0400.
+ (But what about all the other commands, don't we need to no-op
+ everything?)
+
+2005-07-31 Per Bothner <per@bothner.com>
+
+ * makeinfo/cmds.c (cm_code): For html output use lsquo and rsquot
+ entities around @samp.
+
+2005-07-10 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\texinfoversion): Update.
+
+2005-07-05 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (verbatim): mention @verbatim inside
+ @smallformat, now that it works.
+
+2005-07-04 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\commondummies): Remove \unsepspaces, it's already
+ called by \normalturnoffactive. Move \normalturnoffactive near the
+ end of the macro.
+
+2005-07-01 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex: Remove all occurences of \normalturnoffactive or
+ \turnoffactive attached to \indexdummies or \atdummies, since they
+ are redundant; \indexdummies and \atdummies both call \commondummies,
+ which calls \normalturnoffactive, which calls \turnoffactive.
+ (\indexdummies, \atdummies): Move the definitions of \definedummy* ...
+ (\commondummies): ... here; they now take a control sequence as their
+ parameter; all callers fixed.
+ (\indexnofonts): Fixed the definitions of \definedummy* macros.
+ (\indexdummies): Define \escapechar = `\\ ...
+ (\onepageout): ... thus remove it from here.
+ (\macrolist): Now has the form of \definedummyword\macro1... It also
+ gathers user-defined aliases, so there is ...
+ (\addtomacrolist): ... a new macro ...
+ (\macroxxx, \aliasyyy): ... caled from these two.
+ (\unmacro, \unmacrodo): Adapted to the new form of \macrolist.
+ (\turnoffmacros, \emptyusermacros): Removed, mere \macrolist is enough
+ now.
+
+2005-07-01 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\nonarrowing): Update the description.
+ (\cartouche): Set \nonarrowing to "t", not \comment.
+ (\nonfillstart, \quotation): Reset \nonarrowing.
+
+2005-06-30 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\setupverbatim): Use \nonarrowing to declare that
+ we don't want to narrow the environment.
+
+2005-06-24 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi: Move the computation of $makeinfo to...
+ (run_makeinfo): here.
+
+ * util/texi2dvi (tex, bibtex, texindex): Move their computation to...
+ (run_tex, run_bibtex, run_texindex): here, to clarify.
+ (move_to_dest): New.
+ (run_tex): Use it to copy the result back.
+ Don't bother exporting the log.
+
+2005-06-10 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\., \!, \?): include \space after setting
+ \spacefactor, else all space disappears.
+ Report from Jim Meyering, 09 Jun 2005 23:03:22 +0200.
+
+2005-06-10 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi (run_tex): Updating the output is also needed when
+ -o is used, not just when $tidy.
+
+2005-06-09 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi: Support --tidy, a new build mode which lets all the
+ compilations happen in a local directory. This is
+ similar to using --clean, but the files are preserved. The
+ benefits are:
+ - the output is updated when each tex compilation is completed:
+ - to allow interactive viewing
+ - to preserve the previous output is the compilation fails
+ - if the compilation fails, the previous state is preserved.
+ - a fixed set of files to clean in this end (this directory)
+ - complete independence between DVI and PDF compilations.
+
+ (comment_iftex_sed, uncomment_iftex_sed): No
+ longer external files, but simple strings named...
+ (comment_iftex, uncomment_iftex): like this.
+ (utildir): Remove.
+
+ Make the structure clearer by introducing auxiliary functions.
+ * util/texi2dvi (run_bibtex, run_index, insert_commands)
+ (run_recode, run_thumpdf): New.
+ Extracted from the main loop.
+
+ Simplify some variable handling.
+ * util/texi2dvi (clean, debug): Now true/false Booleans.
+ Adjust dependencies.
+
+ Introduce a cycle counter.
+ * util/texi2dvi (cycle): New, to inform the user about the number
+ of compilation cycles. That's also a nice tool to help debugging:
+ look for "cycle" in the trace to go from cycle to cycle.
+
+ Introduce the work dir, and use it.
+ * util/texi2dvi (ensure_dir, workdir): New.
+ (tmpdir_src, tmpdir_xtr, tmpdir_rcd, tmpdir_bak): Replace with...
+ (work_src, work_xtr, work_rcd, work_bak): these.
+ Adjust dependencies.
+ (filename_src, filename_xtr, filename_rcd, filename_bak): these.
+ (run_tex): Update the output.
+ Remove this task from the core of the loop.
+ (get_xref_files): Simplify by considering all the files around,
+ instead of try to select only those that correspond to a given
+ pattern.
+ Also, there's no reason to build the string result and then echo
+ it, just directly echo all the components.
+ (get_index_files): New.
+ (build_mode): New.
+ Adjust all dependencies (tex_help, command line parsing, clean,
+ tidy).
+
+2005-06-05 Karl Berry <karl@gnu.org> (tiny change)
+
+ * doc/texinfo.txi: typos from Christian von Schultz,
+ 5 Jun 2005 16:45:48 +0200.
+
+2005-06-03 Karl Berry <karl@gnu.org>
+
+ * info/man.c (get_manpage_contents): pass -a to man if no explicit
+ section is found. Suggestion from lacall@micron.com on
+ help-texinfo, 1 Jun 2005 16:44:20 -0600.
+
+2005-05-28 gettextize <bug-gnu-gettext@gnu.org>
+
+ * configure.ac (AM_GNU_GETTEXT_VERSION): Bump to 0.14.5.
+
+2005-05-25 Stepan Kasal <kasal@ucw.cz>
+
+ * util/texi2dvi (findprog): Rewrite the test for an executable
+ again, per suggestion of Eric Blake. Restore IFS earlier.
+
+2005-05-24 Stepan Kasal <kasal@ucw.cz>
+
+ * util/texi2dvi (findprog): Rewrite the test for an executable and
+ the explanation above it.
+
+2005-05-20 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.texi (\allowcodebreaks, \kbdinputstyle): use \txiarg
+ instead of \arg; \arg already has a meaning in plain TeX (the
+ complex math function "arg").
+ Report from: Brian Gough, 19 May 2005 19:48:57 +0100.
+
+2005-05-19 Stepan Kasal <kasal@ucw.cz>
+
+ * configure.ac (AM_GNU_GETTEXT): The comment should not recommend
+ calling gettextize with --intl.
+
+2005-05-13 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (First Node): ok for (dir) to be the prev node,
+ and fix missing example.
+ From from Christian von Schultz, 13 May 2005 10:37:26 +0200.
+
+2005-05-10 Matthias Kilian <kili@outback.escape.de>
+
+ * makeinfo/cmds.c, makeinfo/defun.c, makeinfo/insertion.c,
+ makeinfo/lang.c, makeinfo/macro.c, makeinfo/multi.c,
+ makeinfo/node.c, makeinfo/xml.c: More bounds checking.
+
+2005-05-09 Andreas Vögele <voegelas@gmx.net> (tiny change)
+
+ * makeinfo/multi.c (output_multitable_row): don't look past
+ beginning of cell memory. bug-texinfo mail,
+ 1 May 2005 10:00:33 +0200.
+
+2005-05-09 Christian von Schultz <admcvs@Skolwebben.tibro.se> (tiny change)
+
+ * doc/texinfo.txi (Emacs chapter): wrong key bindings for
+ narrow-to-page, up-list, and texinfo-insert-braces.
+ bug-texinfo mail, 9 May 2005 10:01:06 +0200.
+
+2005-04-29 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi: remove ls(1) and rcsintro(1) references at rms'
+ request. No (n) in GNU.
+
+2005-04-24 Karl Berry <karl@gnu.org>
+
+ * configure.ac (AM_GNU_GETTEXT): switch to [external], since this
+ seems the most popular method nowadays.
+ (AC_CONFIG_FILES): remove intl/Makefile, also m4/Makefile.
+ * Makefile.am (SUBDIRS): remove intl and m4.
+ * intl/*: remove.
+ * m4/Makefile.am: no longer needed.
+ * lib/system.h (locale.h): unconditionally include, else syntax
+ error from system locale.h.
+
+ * gettext 0.14.4.
+
+2005-04-22 Per Bothner <per@bothner.com>
+
+ * makeinfo/xml.c (docbook_element_list): Map EMAILADDARESS to "email".
+ * makeinfo/xref.c (cm_email): For docbook, if there is no name,
+ use <email> tag, rather than <ulink>. If there is a name, we must use
+ <ulink>, but we need to explicitly escape expansion of addr.
+
+2005-04-22 Per Bothner <per@bothner.com>
+
+ * makeinfo/xml.c (docbook_element_list, xml_begin_defterm): Improved
+ docbook translation of definition commands: Use <synopsis> for the
+ summary line, and don't include it (only the body) in a <blockquote>.
+ Wrap the whole definition in an <informalfigure>.
+
+2005-04-21 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi: also accept .drv and .dtx as LaTeX.
+ Suggestion from Wybo Dekker.
+
+2005-04-18 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\smallerbook): new (test) definition for 6x9,
+ which is what lulu.com (print-on-demand) accepts.
+
+2005-04-05 Matthias Kilian <kili@outback.escape.de> (tiny changes)
+
+ * makeinfo/html.c (rollback_empty_tag): be sure to avoid negative
+ array indexing.
+ * makeinfo/multi.c (env): make static.
+ * makeinfo/tests/cond, html-extrali, include-value: use grep -c,
+ instead of piping to wc -l, since that avoids the output files
+ being treated as binary on BSD.
+
+2005-04-04 Stepan Kasal <kasal@ucw.cz>
+
+ * makeinfo/makeinfo.c (usage): Add indentation to the examples and
+ fix the indentation of the --footnote-style option, so that
+ help2man can recognize these; also some cosmetic indentation fixes.
+ * doc/Makefile.am (makeinfo.1): Add a sed command to postprocess
+ the generated manpage.
+ * doc/makefile.1: Refresh.
+ Thanks to Jim Razmus for the bug report.
+
+2005-04-04 Torsten Bronger <bronger@physik.rwth-aachen.de> (tiny changes)
+
+ * doc/texinfo.txi: Fix several typos.
+
+2005-04-04 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/Makefile.am: Fix my previous patch, so that the rules work; and
+ don't modify $PATH, it's simpler to give help2man the full pathname.
+
+2005-03-31 Per Bothner <per@bothner.com>
+
+ * makeinfo/makeinfo.c (maybe_escaped_expansion): Don't start a new
+ para during string expansion.
+
+ * makeinfo/xml.c (xml_element_dummy): Dummy variable so that enum
+ names get emitted in debug symbols, which helps debugging.
+
+2005-03-31 ezra peisach <epeisach@med-xtal.bu.edu> (tiny change)
+
+ (bug-texinfo mail 30 Mar 2005 16:40:24 -0500.)
+ * defun.h (get_base_type): now takes an enum insertion_type.
+ defun.c (get_base_type): use enum instead of int internally.
+ (defun_internal): takes enum insertion_type instead of int and use
+ enum internally.
+ (cm_defun): ditto.
+ * insertion.c (do_enumeration, end_insertion, cm_end): ditto.
+
+2005-03-27 Karl Berry <karl@gnu.org>
+
+ * util/texinfo.dtd: remove -- and ^L from inside comments, since
+ apparently XML cannot handle them.
+ Report from Torsten, bronger@physik.rwth-aachen.de.
+
+ * configure.ac (AC_INIT): quote address.
+ (AC_PREREQ): move to after AC_INIT, per current recommendation.
+
+2005-03-25 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/Makefile.am: help2man should use the native binaries in the
+ build tree, not the one found on $PATH; thanks to Thomas Schwinge
+ for reporting the problem.
+ The rules also make sure the binaries are up-to-date, and generate
+ the man pages in the source tree, not build tree.
+ There is no need to depend on MAINTAINER_MODE, because help2man is
+ handled by the `missing' script.
+ (INSTALL_INFO): Comment out; it's not used.
+ * Makefile.am (distcleancheck_listfiles): Removed this variable, it
+ doesn't seem to be needed.
+ * configure.ac (AC_INIT): Add our bug report address.
+
+2005-03-21 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (allowcodebreaks): new node.
+ * makeinfo/cmds.c: define @allowcodebreaks (as a no-op).
+ * doc/texinfo.tex (\allowcodebreaks): new macro.
+ (\code): use it.
+ (\realunder, \keywordtrue, \keywordfalse, \ifallowcodebreaks):
+ helpers.
+
+2005-03-15 gettextize <bug-gnu-gettext@gnu.org>
+
+ * configure.ac (AM_GNU_GETTEXT_VERSION): Bump to 0.14.3.
+
+2005-03-12 gettextize <bug-gnu-gettext@gnu.org>
+
+ * configure.ac (AM_GNU_GETTEXT_VERSION): Bump to 0.14.2.
+
+2005-03-12 Karl Berry <karl@gnu.org>
+
+ * process_css_file: fclose the file when we're through with it,
+ to avoid fd leaks.
+ From: Matthias Kilian <kili@outback.escape.de>,
+ 11 Mar 2005 19:42:27 +0100.
+
+2005-03-08 Keith Marshall <keith.d.marshall@ntlworld.com>
+
+ * makeinfo/tests/no-headers: ($nulldev): new variable.
+ set it to `/dev/null' normally, but to `nul' on Win32,
+ so Cygwin doesn't fail this test, in `make check'.
+
+2005-03-08 Karl Berry <karl@gnu.org>
+
+ * info/filesys.h (DEFAULT_INFOPATH): make . first in the path,
+ instead of last. That way info -f foo/bar finds foo/bar.info.
+ From: Bruno Haible <bruno@clisp.org>, 8 Mar 2005 13:45:28 +0100.
+
+2005-03-07 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi: Fix -o when -c is not passed.
+ Don't make thumbpdf failures fatal.
+
+2005-03-05 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (General Index): Rename from Concept Index.
+
+2005-02-28 Stepan Kasal <kasal@ucw.cz>
+
+ * util/texi2dvi: When running bibtex, improve quoting and again,
+ we can save a process by not running ls. (Thanks, Akim.)
+
+2005-02-24 Stepan Kasal <kasal@ucw.cz>
+
+ * util/texi2dvi (get_xref_files): No need to use ls, save a process.
+
+2005-02-22 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi (absolute_filenames): Skip nonexistent directories.
+ Factor its invocations for TeX envvars.
+ (fd6): Document and use more extensively.
+ (get_xref_files): Accept bu[0-9]#.aux files from the bibunits
+ package.
+ Also adjust the bibtex invocation.
+
+2005-02-19 Karl Berry <karl@gnu.org>
+
+ The main user-visible change of all this is to make
+ section names with \ characters work in pdf outlines. As a side
+ effect, .toc files now use @ instead of \ for the escape char.
+ * doc/texinfo.tex (\backChar, \plusChar): new \chardef's.
+ (\activebackslash): debugging macro.
+ (\activebackslashdouble): new macro.
+ (\HyPsdSubst): replace tokens.
+ (\HyReturnAfterFi): helper.
+ (\backslashparens): new macro, change () to \( and \) resp.
+ (\backslashlparen, \backslashrparen): new macros.
+ (\pdfmkdest): double backslashes, backslashparens, and @ for escape.
+ (\dopdfoutline): similarly.
+ (\pdfmakeoutlines): \readdatafile on the .toc the first time,
+ instead of straight \input.
+ (\makelinks, \picknum, \pn, \ppn, \ppnn, \pdfmklink): rm.
+ (\writetocentry): now we use @ for escape in the .toc instead of \.
+ (\activecatcodes, \readtocfile): new macros.
+ (\startcontents): don't swap \ and @ catcodes from Texinfo.
+ (\setref, \dofloat): no need to call \otherbackslash.
+ (\xrefX): no need to call \otherbackslash, also double backslashes
+ and backslash parens for pdf output.
+ (\readauxfile): generalize and rename to \readdatafile.
+ (\doublebackslash): new macro.
+
+ * util/texi2dvi: do not have -o (used by Autoconf/make) imply
+ --clean. That results in TeX always running at least twice, since
+ the aux files are stuck (and removed) in the temp directory for clean.
+
+2005-02-18 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi: call absolute_filenames on BIBINPUTS and
+ BSTINPUTS, too. te, 17 Feb 2005 20:10:23 +0100.
+
+2005-02-13 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (frenchspacing): new code.
+ * makeinfo/cmds.c (command_table): add frenchspacing.
+ (cm_frenchspacing): new fn.
+ * util/texinfo.dtd (frenchspacing): new element.
+ (option.cmds): new entity; use in Inline.phrase, I guess.
+ * makeinfo/xml.h (xml_element): add FRENCHSPACING.
+ * makeinfo/xml.c (docbook_element_list, texinfoml_element_list): same.
+ * doc/texinfo.tex (\frenchspacing): new macro for new command.
+ (\onword, \offword): args to that command.
+ (\plainfrenchspacing, \plainnonfrenchspacing): the commands which
+ really do the work; change calls.
+ (\endofsentencespacefactor): set in \plain...frenchspacing to 3000
+ or 1000 as appropriate.
+ (\., \!, \?): use here, instead of hardwiring 3000.
+
+2005-02-10 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi (findprog): also check for foo.exe, for Cygwin.
+
+2005-02-10 Karl Berry <karl@gnu.org>
+
+ * info/dir.c (dir_file_list_entry_type): use dev_t and ino_t
+ instead of unsigned long. (Breaks on cygwin.) David Hunter
+ bug-texinfo mail, 08 Feb 2005 23:05:37 -0500. Paul Eggert says
+ these types should were present in 7th Edition and consequently
+ should be portable to any Unixish system.
+
+2005-02-09 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi (report): New. Use it.
+ (fatal): Take the exit status as argument.
+ Use report.
+ (run_tex): New function to factor the two tex invocations.
+ Move the handling of tex arguments in here to improve locallity.
+ Enforce the batch mode by branching /dev/null to its stdin.
+
+2005-02-05 Per Bothner <per@bothner.com>
+
+ * makeinfo/xml.c (docbook_element_list): Add two missing entries.
+
+ * makeinfo/xml.c (xml_begin_document): Check for mismatch between
+ enum xml_element and texinfoml_element_list/docbook_element_list.
+
+ bug-texinfo-mail, 05 Feb 2005 00:13:44 -0800.
+
+2005-02-05 Per Bothner <per@bothner.com>
+
+ * makeinfo/xref.c (cm_uref): Ulink urls in Docbook need to be
+ html-escaped. bug-texinfo mail, 05 Feb 2005 00:57:55 -0800.
+
+2005-01-30 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\chapmacro) <Ynothingkeyword>: failed to
+ \gdef\thischapter inside the group, resulting in "Chapter 1:"
+ appearing in the headline of an @unnumbered.
+ help-texinfo bug report from: <tdovera@libero.it>,
+ 27 Jan 2005 11:45:31 +0100.
+
+2005-01-28 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi <verbose>: rename variable to verb, since
+ functions and variables apparently cannot have the same
+ name on Digital UNIX 4.0E, AIX 3.2.5 (325102), ULTRIX V4.5.
+ (and related releases, presumably).
+ <pgm>: simplify sed expression to avoid \| operator, which does
+ not work on above platforms (and also be more correct).
+ <RUNNING_KSH>: switch to ksh under Ultrix.
+ All of this stuff reported by Bernhard Simon <simon@zid.tuwien.ac.at>
+ and te.
+
+2005-01-25 Karl Berry <karl@gnu.org>
+
+ * doc/Makefile (texmf_dvips, texmf_pdftex_misc): new paths to
+ match teTeX. tex-k mail from peb, 25 Jan 2005 15:45:37 +0100.
+
+2005-01-23 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi (findprog): split $PATH at $path_sep, not spaces.
+ (path_sep): don't let ComSpec fool us under cygwin.
+ Report from: Eric Blake <ebb9@byu.net>, 19 Jan 2005 05:36:26 -0700.
+
+ * doc/texinfo.txi (euro): mention the font we use for the Euro
+ symbol and where to get it. help-texinfo report from:
+ christoph.sobotka@utanet.at, 19 Jan 2005 21:29:20 +0100.
+
+ * doc/info-stnd.texi (Top): per rms, don't use @insertcopying here.
+ * doc/texinfo.txi (Top): Likewise. Also, remove recommendations
+ to use it.
+
+2005-01-20 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi: Have a consistent function declaration style.
+ (verbose, absolute_filenames): New functions.
+ Use them.
+ Report TEXINPUTS and INDEXSTYLE when verbose.
+
+2005-01-20 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.5, doc/info.5: define and use .EX/.EE instead of
+ .RS/RE, to placate esr.
+
+ * util/texi2dvi (findprog): make sure test -x isn't returning true
+ for a directory. From Stepan and others, 20 Jan 2005 12:35:08 +0100.
+
+2005-01-16 Torsten Bronger <bronger@physik.rwth-aachen.de> (tiny change)
+
+ * makeinfo/insertion.c (handle_verbatim_environment): do HTML
+ conversions, to make ]]> work.
+ * makeinfo/xml.c (xml_add_char): also escape >.
+
+2005-01-16 Torsten Bronger <bronger@physik.rwth-aachen.de> (tiny change)
+
+ * makeinfo/cmds.c (cm_tie): use &nbsp; for HTML, &#xa0; for
+ XML/Docbook.
+
+2005-01-15 Karl Berry <karl@gnu.org>
+
+ * makeinfo/xref.c (cm_xref): output *note for @ref, instead of
+ *Note. @ref is always used in the middle of a sentence.
+ * doc/texinfo.txi (pxref): rewrite, since now it can be used at
+ the ends of sentences.
+ (ref): likewise rewrite.
+
+2005-01-11 Karl Berry <karl@gnu.org>
+
+ * util/gendocs.sh: eval $cmd instead of just $cmd, so allow for
+ embedded quotes.
+ From: Sergey Poznyakoff <gray@Mirddin.farlep.net>,
+ 11 Jan 2005 16:16:32 +0200.
+
+2004-12-31 Karl Berry <karl@gnu.org>
+
+ * Version 4.8.
+
+2004-12-21 Karl Berry <karl@gnu.org>
+
+ * pretest version 4.7.94.
+
+ * makeinfo/xref.c: doc fix.
+
+2004-12-20 Karl Berry <karl@gnu.org>
+
+ * makeinfo/html.c (cm_node) <html>: need old-style names in the normal
+ (not no_headers) html case, too, of course.
+ (add_html_names): canon_white the new name, too.
+
+2004-12-19 Karl Berry <karl@gnu.org>
+
+ * pretest version 4.7.93.
+
+ * automake 1.9.4.
+
+ * makeinfo/xml.c (try_docbook_image): new fn.
+ (xml_insert_docbook_image): call it, trying additional formats
+ pdf, svg, etc.
+ * makeinfo/makeinfo.c (cm_image): check for gif too.
+ http://www.gnu.org/philosophy/gif.html says:
+ "we can and will include support for displaying GIF files in GNU
+ software." Leaving it undocumented, though.
+ Based on patch from Jens Elkner, 18 Dec 2004 01:56:28 +0100.
+
+2004-12-19 Torsten Bronger <bronger@physik.rwth-aachen.de>
+
+ * util/texinfo.dtd: define most entities, add <neos>.
+
+2004-12-17 Juan M. Guerrero <st001906@hrz1.hrz.tu-darmstadt.de>
+
+ * djgpp/config.bat: remove files like coXXXXXX.tmp created
+ in the top_srcdir by the gl_FUNC_MKSTEMP test.
+
+2004-12-15 Karl Berry <karl@gnu.org>
+
+ * pretest version 4.7.92.
+
+ * util/texinfo.dtd: merge with makeinfo/texinfo.dtd.
+ * makeinfo/texinfo.dtd, makeinfo/texinfo.xsl: remove.
+
+2004-12-15 Stepan Kasal <kasal@ucw.cz>
+
+ * Makefile.am (EXTRA_DIST): Removed po/Makevars.template, sorry.
+
+2004-12-15 Juan M. Guerrero <st001906@hrz1.hrz.tu-darmstadt.de>
+
+ * djgpp/config.sed: adjust for new autoconf.
+ * makeinfo/node.c (enumerate_filename): make dos_file_names const
+ instead of static, since it may involve a fn call to pathconf.
+
+2004-12-15 Karl Berry <karl@gnu.org>
+
+ * Makefile.am (EXTRA_DIST): include ChangeLog.46, README.dev,
+ and po/Makevars.template. From Stepan.
+
+2004-12-14 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (inforef): try to explain possible uses more
+ thoroughly.
+ From: Luc Teirlinck, 13 Dec 2004 21:45:58 -0600.
+
+ * doc/texinfo.txi (pxref): more explanation.
+ * doc/info-stnd.texi (Basic Windows): put pxref in parens.
+ help-texinfo mail from adl, 13 Dec 2004 17:07:50 +0100.
+
+2004-12-13 Andreas Schwab <schwab@suse.de>
+
+ * info/echo-area.c (DECLARE_INFO_COMMAND): Add intermediate cast
+ to avoid warning.
+ * info/infokey.c (compile): Likewise.
+ * info/session.c (forward_move_node_structure): Likewise.
+ (DECLARE_INFO_COMMAND): Likewise.
+
+ * makeinfo/makeinfo.c (init_paragraph): Don't use free_and_clear
+ to avoid strict aliasing issue.
+
+ * makeinfo/cmds.c (cm_center): Avoid strict aliasing issue.
+
+2004-12-13 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (HTML Cross-reference Command Expansion): add
+ @euro{} -> U+20AC. texinfo-pretest mail from Patrice,
+ 12 Dec 2004 23:49:50 +0100.
+
+2004-12-12 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (makeinfo options): don't be so suggestive about
+ skipping xref validation.
+ emacs-devel mail from: Luc Teirlinck, 12 Dec 2004 13:02:11 -0600.
+
+2004-12-08 Karl Berry <karl@gnu.org>
+
+ * pretest version 4.7.91.
+
+ * info/echo-area.c, info/infokey.c, info/session.c: omit useless
+ casts to intptr_t, since we're just casting to (void *) next.
+ intptr_t is not defined with gcc 3.04 on Tru64 Unix V5.1
+ (This whole vararg stuff needs to be redone correctly.)
+ Report from: Svend Tollak Munkejord (via te)
+ 8 Dec 2004 17:15:17 +0100.
+
+ * doc/texinfo.txi (ref): rewrite last two redundant paragraphs.
+
+2004-12-07 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Macro Details): document @c kludge in macro
+ definitions to work around some newline problems. (From Werner.)
+
+2004-12-05 Karl Berry <karl@gnu.org>
+
+ * makeinfo/html.c (add_escaped_anchor_name): prefix g_t if the
+ nodename begins with a nonletter. Ugh.
+ * doc/texinfo.txi (HTML Xref Node Name Expansion): document this.
+ http://ff0.org/pipermail/texinfo-pretest/2004-December/000210.html
+
+ * doc/texinfo.txi (HTML Xref 8-bit Character Expansion): define
+ behavior for Unicode code points above 0xfff.
+
+ * makeinfo/makeinfo.c (reader_loop): <wbr> didn't make it into
+ HTML 4, remove it. Sigh.
+ texinfo-pretest mail from wl, 05 Dec 2004 23:39:05 +0100.
+
+2004-12-02 Karl Berry <karl@gnu.org>
+
+ * configure.ac (install-warnings): simplify default case. From te.
+
+2004-12-01 Karl Berry <karl@gnu.org>
+
+ * pretest version 4.7.90.
+
+ * util/texi2dvi (recode): new option, off by default.
+ Unconditionally calling recode seems problematic, when there
+ hasn't been a release for years and its Texinfo support is less than
+ perfect.
+
+2004-11-30 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Quotations and Examples): @quotation does not
+ reduce interparagraph spacing.
+
+ * makeinfo/node.c (cm_node) <html>: do not bother calling
+ add_html_nodes in the split case, the filename is wrong.
+
+2004-11-29 Karl Berry <karl@gnu.org>
+
+ Support for writing <a name="..."> using the old-style node name
+ to HTML name conversion, to keep the gcc folks happy.
+ * makeinfo/node.c (add_html_names): new routine, factoring out
+ common code (plus new code) from cm_node.
+ (cm_node) <html>: call it.
+ * makeinfo/makeinfo.h (OLD_HTML_SAFE, OLD_URL_SAFE_CHAR):
+ (re)define these.
+ * makeinfo/html.c (add_escaped_anchor_name): take new argument to
+ optionally output the old-style conversion.
+ (add_anchor_name): change call.
+ * index.c: change calls.
+ * makeinfo/html.h (add_escaped_anchor_name): change decl.
+
+2004-11-26 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (reader_loop): allow <wbr> after &mdash;
+
+2004-11-25 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Fonts): document new command @sansserif.
+ * doc/texinfo.tex (\sansserif): new command.
+ * makeinfo/cmds.h (cm_sansserif): new cmd.
+ * makeinfo/cmds.c (cm_sansserif): new cmd.
+ (command_table): add it.
+ * makeinfo/texinfo.dtd (Inline.fonts): add it; also slanted.
+ * makeinfo/xml.h (SANSSERIF, SLANTED): define these new elements.
+ * makeinfo/xml.c (texinfoml_element_list): add them.
+ From: Frank Küster, 21 Oct 2004 23:27:33 +0200, Debian bug#277754.
+
+ * doc/texinfo.txi (Quotations and Examples, end titlepage): state
+ that there must be only one space between the @end and its
+ argument. Report from: christoph.sobotka, 26 Oct 2004 22:04:03 +0200.
+
+2004-11-22 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (euro): new node, documenting new command,
+ @euro{}, for the Euro currency symbol.
+ * doc/texinfo.tex (\euro): new command, along with \eurofont to
+ support it. The following extra font support is also related to
+ supporting @euro{}:
+ (\bfstylename): define this.
+ (\textnominalsize .. \ssecnominalsize): new macros.
+ (\textfonts .. \ssecfonts): define \curfontsize.
+ * makeinfo/cmds.c (command_table): add euro.
+ * makeinfo/lang.c (cm_special_char): handle euro.
+ (iso8859_15_map): new global.
+
+2004-11-18 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\ptexnewwrite): Save \newwrite.
+ (\newwrite): Call it.
+
+2004-11-17 Karl Berry <karl@gnu.org>
+
+ * configure.ac (install-warnings): new --enable option, requested
+ by te.
+
+2004-11-11 Karl Berry <karl@gnu.org>
+
+ * texinfo.dtd (metainformation): add documentdescription.
+ (documentdescription): define.
+ * xml.h (DOCUMENTDESCRIPTION): new value for xml_element.
+ * xml.c (texinfoml_element_list): define documentdescription.
+ (docbook_element_list): likewise, but don't know how to handle it.
+ * cmds.c (cm_documentdescription): insert opening xml tag.
+ * insertion.c (end_insertion): insert closing xml tag.
+
+ * makeinfo/makeinfo.c (insert_string): declare const char * arg.
+ * makeinfo/makeinfo.h: likewise.
+ Report from: Vincent Lefevre, 20 Oct 2004 15:40:39 +0200,
+ noting a spurious </para> after </dircategory>.
+
+2004-11-08 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\pdfmakeoutlines): in the first run through the
+ toc, define \thischapnum...\thissubsecnum as 0, rather than \empty.
+ This is so \expnumber doesn't end up trying to expand
+ \csname sec\empty\endcsname, i.e., \sec, which is the secant function.
+ Report from: Oliver Beck, help-texinfo, 8 Nov 2004 08:05:55 +0100.
+
+2004-11-07 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (main) [LC_MESSAGES]: #ifdef the setlocale
+ using LC_MESSAGES. From te, 6 Nov 2004 23:36:10 +0100.
+
+2004-11-06 Karl Berry <karl@gnu.org>
+
+ * lib/Makefile.am (libtxi_a_SOURCES): add strdup.h.
+ Report from: Thomas Esser <te@dbs.uni-hannover.de>,
+ 6 Nov 2004 18:11:51 +0100.
+
+2004-11-01 Karl Berry <karl@gnu.org>
+
+ * makeinfo/xref.c (cm_xref): don't include the external file name
+ in the HTML output, since it's pretty traditional not to
+ distinguish internal and external links in HTML, and it disturbs
+ the flow of reading.
+ From: Han-Wen Nienhuys <hanwen@xs4all.nl>, 31 Oct 2004 00:13:36 +0200.
+ (For lilypond.)
+
+2004-10-31 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\setmultitablespacing): just let \multistrut be
+ the same as \strut. Its previous computation was wrong.
+ See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100.
+
+2004-10-22 Stepan Kasal <kasal@ucw.cz>
+
+ * info/Makefile.am (generated_sources): Add dependencies defining
+ a total order on the files, to prevent race conditions with
+ parallel make.
+ Move the code about generated sources to the end of the file.
+
+2004-10-20 Stepan Kasal <kasal@ucw.cz>
+
+ * info/Makefile.am (doc.c, key.c, funs.h): Don't distribute them.
+ of these three files.
+ (ginfo_SOURCES, nodist_ginfo_SOURCES): Move files.
+ (infokey_SOURCES, nodist_infokey_SOURCES): Likewise.
+ (DISTCLEANFILES): Include generated_sources.
+
+2004-10-20 Stepan Kasal <kasal@ucw.cz>
+
+ BUILT_SOURCES is a special variable for a hack to supplement
+ the automatic dependency tracking; we need it for funs.h only.
+ See the explanation in the automake manual.
+
+ * info/Makefile.am (BUILT_SOURCES): All occurences replaced by ...
+ (generated_sources): ... this new variable.
+ (BUILT_SOURCES): set to ``funs.h''.
+
+2004-10-20 Stepan Kasal <kasal@ucw.cz>
+
+ * info/Makefile.am (ginfo_SOURCES): replace $(BUILT_SOURCES)
+ with ``doc.c funs.h''; this reflects the true situation.
+ (infokey_SOURCES): Add funs.h.
+
+2004-10-20 Stepan Kasal <kasal@ucw.cz>
+
+ * info/Makefile.am (EXTRA_DIST): No need to mention the generated
+ sources here, they are in ginfo_SOURCES or infokey_SOURCES.
+
+2004-10-19 Stepan Kasal <kasal@ucw.cz>
+
+ * configure.ac: When cross compiling, we have to remove
+ ./config.status, not "$native_tools"/config.status.
+ Replace ``echo'' with AC_MSG_NOTICE. Quote the variable
+ values passed to ``env.''
+
+2004-10-17 Karl Berry <karl@gnu.org>
+
+ * makeinfo/node.c (cm_node): don't output <br> after the
+ navigation line, it's apparently just extra space.
+
+ * configure.ac: Clean environment for native configure.
+ From: Mark Fortescue <mark@mtfhpc.demon.co.uk>,
+ 17 Oct 2004 19:09:53 +0100.
+
+2004-10-11 Stepan Kasal <kasal@ucw.cz>
+
+ * configure.ac: Add a short explanation about cross compile.
+
+2004-10-08 Karl Berry <karl@gnu.org>
+
+ * info/Makefile.am (generated_sources): remove. Found by Stepan.
+
+2004-10-08 Stepan Kasal <kasal@ucw.cz>
+
+ Support cross compiling. Based on research by Mark Fortescue.
+ Maciej W. Rozycki pointed out this issue previously.
+
+ * configure.ac: If cross compiling, run second configure script
+ in a subdirectory ${native_tools}. New automake conditional
+ TOOLS_ONLY is set inside that subdirectory.
+ * Makefile.am (SUBDIRS): Add $(native_tools); restrict the
+ SUBDIRS to minimum, if we are inside the $(native_toos) dir.
+ (distclean-local): Remove directory $(native_tools).
+ * doc/Makefile.am: If necessary, use makeinfo and install-info
+ from $(native_tools).
+ * info/Makefile.am: Similarily with the ``makedoc'' program.
+
+2004-10-07 Stepan Kasal <kasal@ucw.cz>
+
+ @table command doesn't work inside environment @display.
+ There is no point in trying to fix it: just give up with a cry.
+
+ * doc/texinfo.tex (\table, \ftable, \vtable): Instead of calling
+ \tablex directly, call ...
+ (\tablecheck): ... this new macro which checks for active newline;
+ if it's found, it reports an error and uses \doignore to recover.
+ * doc/texinfo.txi (display): mention this.
+
+2004-10-06 Karl Berry <karl@gnu.org>
+
+ * doc/*.texi: more consistent use of dashes.
+ From Stepan and Benno Schulenberg <benno@nietvergeten.nl>.
+
+2004-10-04 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (cm_value): increment and restore
+ input_text_offset before execute_string on the value,
+ so cm_xref doesn't complain about missing punctuation.
+ From: Sergey Poznyakoff <gray@Mirddin.farlep.net>,
+ 04 Oct 2004 15:04:33 +0300.
+
+2004-10-01 Karl Berry <karl@gnu.org>
+
+ * lib/Makefile.am (libtxi_a_SOURCES): add getopt_.h.
+
+ * configure.ac: bump version to 4.7.90, although we're not really
+ pretesting yet. (I need a distribution to check an
+ automake issue.)
+
+2004-09-14 Karl Berry <karl@gnu.org>
+
+ * util/srclist.txt (getopt.h): renamed to getopt_.h.
+ * lib/getopt_.h: new file.
+ * lib/getopt.h: just include getopt.h.
+
+2004-09-09 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Image Syntax): mention @noindent, @center.
+
+2004-09-06 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\Efloat): Take care to run \scantokens on
+ \thisshortcaption before writing the lof line to auxfile.
+ Otherwise, when a newline appears in the argument to
+ @shortcaption, a literal ^^M is written to the aux file.
+ Report from Patrice, 1 Aug 2004 15:54:44 +0200.
+
+2004-09-01 Karl Berry <karl@gnu.org>
+
+ * util/gendocs.sh: show commands, allow / in description.
+
+2004-08-30 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (maybe_escaped_expansion): new routine, like
+ expansion but does HTML escapes.
+ * makeinfo/makeinfo.h (maybe_escaped_expansion): declare.
+ * makeinfo/index.c (cm_printindex): call it.
+ This is @cindex Kahrs, J@"urgen does not get
+ gawk.texi:23425: Unknown command `&quot;urgen'.
+ (in gawk 3.1.4).
+ Report from: Stepan Kasal <kasal@ucw.cz>, 24 Aug 2004 12:36:34 +0200.
+
+2004-08-29 Karl Berry <karl@gnu.org>
+
+ * makeinfo/node.c (split_file): do not search for output file
+ along the path when calling find_and_load (can cause seg
+ fault when cross-compiling).
+ From: Martin Husemann <martin@duskware.de>, 29 Aug 2004 08:40:33 +0200.
+ http://www.netbsd.org/cgi-bin/query-pr-single.pl?number=26791
+
+2004-08-27 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Macro details): more warnings about macro usage.
+ Report from: Stepan Kasal <kasal@ucw.cz>, 24 Aug 2004 09:29:35 +0200.
+
+ * doc/texinfo.tex (\Efloat): \vskip\parskip after printing the
+ caption; previous \printedsomething code to do this had become
+ obsolete. Reported by Stepan.
+
+ * doc/texinfo.txi (caption shortcaption): show an example for
+ @shortcaption, and remark that weird commands like @c and @verb
+ are not allowed. Suggested by Stepan.
+
+2004-08-27 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\initial): when breaking the column before the
+ initial, allow for some space at the bottom of the column, so
+ the baselineskip is preserved (more or less).
+ Don't give negative penalty, it encouradges creating of underfull
+ columns with stretched baselineskip.
+ At the end, the \nobreak should be before \vskip, not after it.
+
+2004-08-26 Stepan Kasal <kasal@ucw.cz>
+
+ * util/texi2dvi: fix the sed script searching for @documentencoding;
+ Double-quote some instances of "$filename_???"
+
+2004-08-26 Akim Demaille <akim@epita.fr>
+
+ Let DVI and PDF files honor the document encoding in TeX.
+
+ * util/texi2dvi ($language): Be sure to set its value.
+ (get_xref_files): Turn this external shell script into a function.
+ (filename_rcd, $tmpdir_rcd): New.
+ If the file is in Texinfo, and has @documentencoding, and recode
+ is available, then run it.
+
+2004-08-25 Akim Demaille <akim@epita.fr>
+
+ * util/Makefile.am (texinfo.cat): Fix for srcdir != builddir.
+
+2004-08-25 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi: @ is also ok for the first character of xref_files.
+
+2004-08-20 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\tablez): accidentally removed assignments
+ enabling @item and @itemx within @table.
+
+2004-08-19 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\multitable): \def\item to \crcr, instead of
+ \let, to avoid errors with a nested @itemize inside
+ @multitable.
+ Report from: Pierre-Luc Veilleux <plv@centretiv.com>,
+ 18 Aug 2004 13:26:00 -0400.
+
+2004-08-19 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\scanmacro): Make backslash active, not other,
+ as this is the default when processing texinfo files.
+ Otherwise, a \ inside @copying will eventually print as ``.
+
+2004-08-18 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\scantxt): " is another active char to be
+ sanitized.
+
+2004-08-18 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (exampleindent): document that the default is
+ different in TeX.
+ From: Simon Josefsson <jas@extundo.com>, 18 Aug 2004 13:44:32 +0200.
+
+2004-08-14 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\cslet): equivalent-or-better, and shorter,
+ version from dak, 12 Aug 2004 19:17:27 +0200.
+
+ * doc/texinfo.txi (makeinfo options): use --no-number-sections
+ with non-hierarchical manuals.
+
+2004-08-13 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi: check for -file-line-error, since -style is no
+ longer part of the name.
+
+2004-08-07 Karl Berry <karl@gnu.org>
+
+ * info/echo-area.c (inform_in_echo_area): avoid buffer overrun.
+ Report from: Roman Werpachowski <rwerp@gazeta.pl>,
+ 7 Aug 2004 01:18:32 +0200.
+
+ * info/echo-area.h (inform_in_echo_area): declare arg as const,
+ while we're at it.
+
+2004-08-02 Karl Berry <karl@gnu.org>
+
+ * makeinfo/cmds.c (cm_acronym_or_abbr): use strchr, not index.
+ Report from: Prof Brian Ripley <ripley@stats.ox.ac.uk>,
+ 2 Aug 2004 12:47:36 +0100 (BST)
+
+2004-07-31 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi,
+ * doc/texinfo.tex,
+ * makeinfo/cmds.c, cmds.h, xml.c, xml.h,
+ * util/texinfo.dtd: new command @abbr, suggested by Paul Eggert,
+ who also sent the original documentation.
+
+2004-07-30 Karl Berry <karl@gnu.org>
+
+ * info/infomap.c (initialize_vi_like_keymaps): bind j to
+ info_next_line and k to info_prev_line. From Eli.
+
+2004-07-30 Maciej W. Rozycki <macro@linux-mips.org>
+
+ * info/filesys.c (extract_colon_unit): Clean up handling of the
+ end of string.
+
+2004-07-27 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (verb): explicitly warn that @verb cannot be
+ used in xref contexts.
+
+2004-07-27 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\float): The parameters for @float are
+ separated by commas; allow a space after each of the commas.
+
+ The TeX code for @caption, @shortcaption and @copying now uses
+ a similar mechanism to macro definitions. In detail:
+
+ * doc/texinfo.tex (\macrobodyctxt, \macroargctxt): Generalize, ...
+ (\scanctxt, \scanargctxt): ... and introduce new variants.
+ (\scanexp): New macro--expand the parameter and call \scantokens.
+ (\copying, \docopying, \insertcopying): Use \scanargctxt and
+ \scanexp--this simplifies things a lot.
+ (\caption, \shortcaption): Redefine, using \scanargctxt via ...
+ (\docaption, \defcaption): ... these new macros.
+ (\appendtomacro): Simplify code, using \expandafter.
+
+2004-07-26 Karl Berry <karl@gnu.org>
+
+ Avoid using the path for output files, since this led to problems
+ when incompatible files created by previous versions were found.
+ * makeinfo/files.c (find_and_load): introduce second parameter
+ use_path, set to 0 from the call in handle_delayed_writes,
+ 1 in all cases.
+ * makeinfo/files.h: change decl.
+ * makeinfo/cmds.c, makeinfo.c, node.c: change calls.
+ From: Thomas Klausner <wiz@danbala.ifoer.tuwien.ac.at>,
+ 14 Jul 2004 00:31:54 +0200.
+
+2004-07-25 Werner Lemberg <wl@gnu.org>
+
+ Rename @s to @slanted.
+
+ * doc/texinfo.tex (\s): Replace with...
+ (\slanted): This.
+ * doc/texinfo.txi: Updated.
+
+ * makeinfo/cmds.c (command_table): Add @slanted, not @s.
+ (cm_s): Replace with...
+ (cm_slanted): This.
+ * makeinfo/cmds.h: Add cm_slanted, not cm_s..
+
+ * NEWS: Updated.
+
+2004-07-24 Karl Berry <karl@gnu.org>
+
+ * info/echo-area.c (ea_possible_completions),
+ * info/session.c (forward_move_node_structure),
+ * info/infokey.c (compile): cast to intptr_t to avoid cast to
+ pointer from integer of different size.
+ From Havard Eidnes <he@netbsd.org>, 14 Jul 2004 20:38:59 +0200.
+
+2004-07-19 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (main): with XML, instead of directly calling
+ handle_variable_internal for -D and -U command line flags, hold the
+ variable declarations until output document is started.
+ (convert_from_loaded_file): handle variables provided with -D and -U
+ flags here, just before entering the reader_loop.
+ (Otherwise, -D/-U with --xml cause a segfault.)
+
+2004-07-15 Werner Lemberg <wl@gnu.org>
+
+ * doc/texinfo.tex (\s): New command to typeset text with a slanted
+ font.
+ * doc/texinfo.txi: Document @s.
+
+ * makeinfo/cmds.c (command_table): Add @s.
+ (cm_s): New function. Currently the same as cm_i -- it probably
+ has to be adapted to Docbook and XML.
+ * makeinfo/cmds.h: Add prototype for cm_s.
+
+ * NEWS: Document new command @s.
+
+2004-07-15 Werner Lemberg <wl@gnu.org>
+
+ * doc/texinfo.tex (\TeX): Adjust \spacefactor to make it act like a
+ lowercase letter, not like a period.
+
+2004-07-12 Karl Berry <karl@gnu.org>
+
+ * texinfo/texinfo.txi (Useful Highlighting): Include
+ cross-references to each of the commands. Suggestion from
+ Wolfgang Pausch, 12 Jul 2004 08:26:28 +0200.
+
+ * texinfo/texinfo.txi (Invoking makeinfo),
+ * makeinfo/makeinfo.c: mention that --if-noFORMAT also processes
+ @ifnotFORMAT blocks.
+ Suggestion from Stepan.
+
+2004-07-11 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (discard_until): leave input_text_offset at
+ the end of input_text if not found, not at one past the
+ end of input_text. (Had erroneously put that in the block
+ only if an error was given.) The result was a null byte
+ after macro expansions. Report from Werner,
+ 10 Jul 2004 15:36:40 +0200.
+
+ * makeinfo/node.c (split_file): fwrite Local Variables trailer so
+ it actually gets into the output of the top-level info
+ file; don't just insert_string.
+ Report from: Werner LEMBERG, 11 Jul 2004 08:58:13 +0200.
+
+2004-07-10 Karl Berry <karl@gnu.org>
+
+ * util/texi2pdf: new script.
+ * util/Makefile.am: install it.
+ * doc/texinfo.txi: document it.
+
+2004-07-05 Karl Berry <karl@gnu.org>
+
+ * makeinfo/xref.c (cm_email, cm_uref, et al.):
+ * makeinfo/xml.c (xml_insert_indexentry, xml_insert_indexterm):
+ * makeinfo/sectioning.c (sectioning_underscore):
+ * makeinfo/makeinfo.c (cm_listoffloats): use %s, don't pass string to
+ execute_string. Report from Christian Schenk.
+
+2004-07-02 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makinfo.c (execute_string): don't worry about
+ mismatched multiline commands if executing_macro.
+
+2004-06-27 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex: Various doc fixes.
+ (\dosubindsanitize): propagate the same penalty
+ >10000, don't just use \nobreak.
+ (\sectionheading): insert a final penalty of
+ 10001, not 10000. This causes \aboveenvbreak to
+ insert \parskip glue, cancelling the
+ \vskip-\parskip done here. Otherwise, when (e.g.)
+ @section is followed immediately by @example, the
+ example can be shrunk up above the section title.
+
+2004-06-14 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\commondummies, \indexnofonts): dummy-up @comma.
+ Report from Arnold.
+
+2004-06-06 Karl Berry <karl@gnu.org>
+
+ * makeinfo/index.c (index_add_arg): ensure all elements are always
+ initialized, including output_file, section, and section_name.
+ (cm_printindex): don't pass index->output_file to
+ add_html_block_elt_args if it is null. Also do
+ not pass spurious extra index_name argument.
+
+ * makeinfo/makeinfo.c (add_char): don't call html_output_head if
+ only_macro_expansion (e.g., a macro call in the
+ Top menu). From: Yuri D'Elia <wavexx@yuv.info>,
+ 05 Jun 2004 21:11:00 +0200.
+
+2004-06-03 Karl Berry <karl@gnu.org>
+
+ * info/session.c (info_menu_digit): use menu, rather than entry, to
+ avoid seg fault on "0" (the last item),
+ since menu has already been checked.
+ From: Malcolm Rowe <malcolm-gnu@farside.org.uk>,
+ 02 Jun 2004 21:32:37 +0100.
+
+2004-05-17 Karl Berry <karl@gnu.org>
+
+ * util/gendocs.sh, gendocs_template: use package.format.tar.gz
+ consistently. Before, -, _, and . were all used.
+
+2004-05-16 Karl Berry <karl@gnu.org>
+
+ * lib/Makefile.am (libtxi_a_SOURCES): include strcase.h.
+ From: "Gerrit P. Haase" <gp@familiehaase.de>,
+ 15 May 2004 21:50:52 +0200.
+
+ * util/gendocs.sh: force HTML output name, otherwise Emacs fails
+ with its "@setfilename ../...".
+
+2004-05-04 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi (TEX): don't use the value when it ends in
+ "latex"; TEX is also used by mpost. Report from
+ Yvon.Henel@wanadoo.fr.
+
+2004-04-29 Karl Berry <karl@gnu.org>
+
+ * doc.texinfo.txi (Invoking makeinfo): mention --plaintext.
+ From Akim.
+
+ * doc/texinfo.tex (\emptyusermacros): can use \asis.
+ (\identity): remove.
+
+2004-04-29 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\commondummiesnofonts, \indexnofonts): In order
+ to correctly transform words like `Dvo\v{r}\'{a}k' to `Dvorak'
+ for index sorting, one has to define all accent control sequences
+ as @asis. (Current code would produce `Dvor{a}k'.)
+
+2004-04-29 Jan Nieuwenhuizen <janneke@gnu.org>
+
+ * makeinfo/makeinfo.c (remember_error): Try cm_bye not more than
+ twice. Fixes `Too many errors! Gave up.' looping.
+
+2004-04-26 Karl Berry <karl@gnu.org>
+
+ * lib/system.h (STRCASEEQ, STRNCASEEQ): new #defines for
+ convenience.
+ * makeinfo/cmds.c (cm_strong): actually change the output to avoid a
+ spurious xref. Suggestion from Jan Nieuwenhuizen
+ <janneke@gnu.org>, 26 Apr 2004 00:04:04 +0200, emacs-devel.
+
+ * automake 1.8.4.
+
+2004-04-24 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\emptyusermacros, \identity): new macros.
+ (\indexdummiesnofonts): call it.
+ This is to semi-support macro calls in the arg to @deffn.
+ Report from: Akim Demaille <akim@epita.fr>, 20 Apr 2004 17:48:28 +0200.
+
+2004-04-21 Karl Berry <karl@gnu.org>
+
+ * configure.ac (gl_FUNC_MKSTEMP): rename from UTILS_FUNC_MKSTEMP,
+ per new gnulib code.
+
+2004-04-20 Karl Berry <karl@gnu.org>
+
+ * makeinfo/tests/copying: force POSIX language setting.
+
+2004-04-19 Karl Berry <karl@gnu.org>
+
+ * makeinfo/cmds.c (cm_code): use <samp> for commands other than
+ @code, so we get typewriter output; and add `...'
+ for @samp.
+ Report from: John Blevin <blevin@lucent.com>,
+ 16 Apr 2004 11:40:01 -0400.
+
+ * makeinfo/html.c (html_output_head) [CSS_FONT_ROMAN,
+ CSS_FONT_SMALL_CAPS]: prettify.
+
+2004-04-18 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\Orb): define if undefined.
+ Report from Laurent Siebenmann.
+
+ * util/dir-example: diff updates.
+
+2004-04-13 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex: remove trailing blanks. suggestion from Jim.
+
+2004-04-12 Paul Eggert <eggert@twinsun.com>
+
+ * doc/Makefile.am (info.1, infokey.1, install-info.1,
+ makeinfo.1, texi2dvi.1, texindex.1): Don't use $< in ordinary
+ rules; it's not portable.
+ * util/Makefile.am (texinfo.cat): Likewise.
+
+2004-04-12 Karl Berry <karl@gnu.org>
+
+ * bootstrap: update from berlios.
+
+2004-04-11 Karl Berry <karl@gnu.org>
+
+ * Version 4.7.
+
+2004-04-09 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (execute_string): do not free the temporary copy
+ of input_filename until we're definitely done with
+ it. It is used in line_error, etc.
+
+ * INSTALL: mention texinfo.tex install step.
+
+ * util/Makefile.am (texinfo.cat): new name instead of just
+ `catalog'. rename files.
+ * util/Makefile.am (EXTRA_DIST): texinfo-cat.in now, not
+ catalog.in.
+
+2004-04-09 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (begin_insertion): after @copying, do not
+ discard until a newline if we are looking at one.
+ (end_insertion): decrement input line number after @end copying.
+
+2004-04-08 Karl Berry <karl@gnu.org>
+
+ * util/Makefile.am: doc fix, as automake.diff is no longer needed.
+
+2004-04-07 Karl Berry <karl@gnu.org>
+
+ * pretest version 4.6.95.
+
+ * doc/texinfo.tex (\dodonode): new macro to remove trailing comma.
+ (\donode): call it, after removing space-comma.
+
+ * doc/texinfo.txi (indicateurl): new name for url.
+ (uref): url is now a synonym for uref.
+ * doc/texinfo.tex (\url, \indicateurl): implement.
+ * makeinfo/cmds.c (cm_indicate_url): rename from cm_url.
+ (command_table): make "url" a synonym for "uref".
+ * makeinfo/cmds.h (cm_indicate_url): declare it.
+
+2004-04-06 Karl Berry <karl@gnu.org>
+
+ * makeinfo/sectioning.c (insert_and_underscore): use `...' quote
+ instead of "..." in error message.
+ * info/*.c: likewise.
+
+2004-04-07 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_colon): check if the character we are erasing
+ from the output belongs to an XML tag.
+
+2004-04-07 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (cm_author): use author element in XML output
+ for attribution.
+
+2004-04-06 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (convert_from_loaded_file): do not call
+ write_tag_table if the output filename is "-".
+
+2004-04-06 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (end_insertion): <pre> blocks implicitly ends
+ the previous paragraph, so avoid </p> after the end tag.
+
+ * makeinfo/footnote.c (output_pending_notes): made Footnotes anchor
+ non translatable, and changed it to "texinfo-footnotes-in-document" to
+ lessen the chance of getting in the way of another Footnotes anchor.
+
+2004-04-04 Jim Meyering <jim@meyering.net>
+
+ * info/nodes.c (info_load_file_internal): Don't free lowered_name
+ until *after* using fullpath, since they may be one and the same.
+
+2004-04-03 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Image Syntax): had missing @'s in cookies.
+
+ * makeinfo/cmds.c (cm_w): insert a comment at the end of @w, so that
+ @w{$}Log$ doesn't end up as <dollar>Log<dollar>.
+ Report from rms.
+ * doc/texinfo.txi (GNU Sample Texts, w): mention this.
+
+2004-04-02 Karl Berry <karl@gnu.org>
+
+ * configure.ac: pretest version 4.6.94.
+
+ * doc/texinfo.txi (Node Line Requirements): discuss whitespace.
+
+ * doc/texinfo.tex (\node, \donode): remove trailing
+ spaces (before the first comma) in the @node line.
+
+2004-03-29 Karl Berry <karl@gnu.org>
+
+ * util/install-info.c (menu_line_lessp, menu_line_equal): move to
+ before all uses.
+
+2004-03-27 Karl Berry <karl@gnu.org>
+
+ * info/signals.c (initialize_info_signal_handler) [SA_NOCLDSTOP]:
+ use instead of HAVE_SIGACTION, since Solaris 2.7+
+ with Sun CC don't have sa_handler, sa_flags, sa_mask.
+
+ * info/session.c (search_string_index): remove unused variable.
+ * info/terminal.c (term_mo): remove unused variable.
+ * info/display.c (display_clear_display): remove unused variable
+ display_line.
+ * util/install-info.c (infilelen_sans_info): remove unused
+ variable.
+
+ * doc/texinfo.txi: mistakenly had * name: node: in menu items instead
+ of * name: node.
+
+ * util/install-info.c (menu_item_equal): must declare ret at beginning
+ of function. From Werner.
+
+2004-03-27 Jim Meyering <jim@meyering.net>
+
+ * info/info-utils.c (info_parse_node): Don't read beyond end
+ of buffer when looking for ``(line ...)'' in a menu item.
+
+2004-03-27 Andreas Schwab <schwab@suse.de>
+
+ * util/install-info.c (menu_item_equal): Don't scan past
+ term_char.
+
+2004-03-26 Karl Berry <karl@gnu.org>
+
+ * pretest version 4.6.93.
+
+ * util/install-info.c (menu_item_equal): compare basenames,
+ so lilypond/ subdir will match. Bug report from Werner,
+ 21 Mar 2004 08:31:10 +0100.
+
+ * configure.ac (AC_CHECK_DECLS): skip strncasecmp again.
+ * lib/system.h (strcase.h): change conditional to
+ !HAVE_STRNCASECMP || !HAVE_STRCASECMP. Extra
+ !HAVE_DECL seems superfluous.
+
+ * lib/system.h: include <unistd.h> last, following Autoconf's
+ ac_includes_default.
+
+2004-03-25 Karl Berry <karl@gnu.org>
+
+ All these changes are because strncasecmp is only declared in
+ <strings.h> on IBM AIX 4.2. (Report from Nelson Beebe.)
+
+ * configure.ac (AC_CHECK_DECLS): add memchr; no need to check for
+ strcasecmp.(gl_STRCASE): call this ...
+ (AC_REPLACE_FUNCS): ... replacing checks for
+ strcasecmp and strncasecmp here.
+ * lib/system.h (memchr) [!HAVE_DECL_MEMCHR]: add conditional
+ declaration.
+ (strcase.h) [!HAVE_DECL_STRNCASE]: add conditional include.
+ (strings.h) [HAVE_STRINGS_H]: include if
+ available, even if <string.h> is also available.
+ * info/session.c (strncasecmp) [M_XENIX]: remove this conditional
+ declaration, since we haven't been testing for M_XENIX in many
+ years.
+ * m4/Makefile.am (EXTRA_DIST): add strcase.m4.
+ * util/srclist.txt (lib/strcase.h, m4/strcase.m4): add, updating
+ from gnulib.
+
+2004-03-24 Karl Berry <karl@gnu.org>
+
+ * makeinfo/index.c:
+ * makeinfo/float.c: avoid use of snprintf, which is not available on
+ all platforms. Bug report by Nelson and Vin Shelton (22mar03).
+
+ * automake 1.8.3.
+
+2004-03-23 Karl Berry <karl@gnu.org>
+
+ * doc/info-stnd.texi (Searching Commands): typo from jesper.
+
+2004-03-21 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\indexnofonts): \definedummyletter needs to
+ define the control letters to be empty, without
+ taking any argument; most control letters, such as
+ @:, don't take arguments, and it won't hurt to
+ just always ignore them for index sorting.
+ Report from Arnold.
+
+ * info/doc.h (InfoFunction): cast NULL to VFunction *, to
+ prevent pgcc from complaining. From Nelson.
+
+2004-03-20 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Structuring Command Types): be even more explicit
+ about @unnumbered vs. @heading.
+
+ * makeinfo/html.c (insert_html_tag_with_attributes): use the same
+ parameter names (start_or_end and tag) in both stdc and !stdc
+ cases. Report from Nelson.
+
+ * info/m-x.c (info_execute_command): don't dereference
+ InfoFunction(command) as a function call if it's NULL. Report
+ from Nelson, pgcc-5.1-3 complains.
+
+2004-03-19 Karl Berry <karl@gnu.org>
+
+ * info/signals.h [!SA_NOCLDSTOP]: borrow test from coreutils'
+ sort.c, to avoid using sigset_t when it's not
+ defined (apparently).
+
+ * makeinfo/html.c (escape_string): escape ", too, for @image's
+ alttext among others.
+ * makeinfo/html.h: doc fix.
+ * doc/texinfo.txi (Image Syntax): making empty alt text, do
+ escaping.
+
+ * util/dir-example: reorder.
+
+ * doc/texinfo.txi (title subtitle author): using them outside
+ @titlepage is an error, they're not actually "ignored".
+ * makeinfo/insertion.c (cm_author): one mdash suffices.
+
+2004-03-19 Jim Meyering <jim@meyering.net>
+
+ * makeinfo/makeinfo.c (add_char): Use memmove, rather than strncpy,
+ since source and destination strings overlap.
+
+ * makeinfo/float.c (add_new_float): Avoid buffer overrun when
+ appending `.' to a chapter number.
+
+2004-03-18 Karl Berry <karl@gnu.org>
+
+ * pretest version 4.6.92.
+
+2004-03-18 Andreas Schwab <schwab@suse.de>
+
+ * lib/xmalloc.c: Include "system.h" instead of declaring malloc
+ and realloc ourselves.
+ (xmalloc): Change type of size parameter to size_t.
+ (xrealloc): Likewise.
+
+ * lib/system.h (xmalloc, xrealloc): Change type of size parameter
+ to size_t.
+
+2004-03-18 Karl Berry <karl@gnu.org>
+
+ * makeinfo/xref.c (cm_xref): ignore any directory part or extension
+ in html case, warn if nothing left.
+ * doc/texinfo.txi (HTML Xref Link Basics): ignore directory part in
+ @xref cmd.
+
+ * lib/getopt.h (__GNUC_PREREQ) [! __GNUC_PREREQ]: change
+ conditional to the actual symbol, instead of just
+ __GNUC, else --disable-nls compilation fails under
+ SunOS 5.8 with gcc 3.2.3 (at least).
+ Report from Vin Shelton, 15 Mar 2004 08:51:14 -0500.
+
+ * util/texindex.c: add some const declarations.
+ * util/install-info.c: add some const declarations.
+ (by no means all)
+
+ * doc/texinfo.txi (HTML Xref *): new nodes.
+
+2004-03-15 Karl Berry <karl@gnu.org>
+
+ * makeinfo/xref.c (cm_xref): need ../ in reference to foreign html
+ manual, if splitting.
+
+2004-03-14 Jim Meyering <jim@meyering.net>
+
+ * makeinfo/index.c (insert_index_output_line_no): Ensure that `i'
+ is larger than zero before (not after) using `i-1' as an array index.
+
+ * makeinfo/cmds.c (cm_acronym): Don't write description[-1]
+ when description is the empty string.
+
+ * makeinfo/makeinfo.c (insert): Avoid buffer under-run when
+ output_paragraph_offset is zero.
+ (canon_white): Rewrite not to use strcpy (was used with
+ overlapping source and destination)
+
+2004-03-14 Andreas Schwab <schwab@suse.de>
+
+ * info/session.c: Fix buffer overflows.
+
+2004-03-14 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xref.c (cm_xref): print the fifth arg (or fourth if it's
+ not available), in parens for the visible text of the HTML link.
+
+2004-03-14 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/tests/node-expand.txi:
+ * makeinfo/tests/node-whitespace.txi: added titles to @top.
+
+2004-03-14 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/sectioning.c (sectioning_underscore): check if title is
+ pointing to NULL before calling strlen (happens when there is no
+ @settitle before @top.)
+
+2004-03-14 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/sectioning.c (sectioning_underscore): warn if both @top and
+ @settitle are empty.
+ (sectioning_html, insert_and_underscore): use @settitle argument if
+ @top is empty.
+ (insert_and_underscore): removed with_char argument from function
+ declaration.
+
+ * makeinfo/sectioning.h: insert_and_underscore proto update.
+
+2004-03-13 Karl Berry <karl@gnu.org>
+
+ * pretest version 4.6.91.
+
+ * info/*.[ch]: copyright dates, and final ugly casts.
+
+ * doc/texinfo.txi (Generating HTML): make its own chapter, since we
+ have lots to say about xrefs now.
+
+ * doc/texinfo.txi (Refilling Paragraphs): @ignore this, just
+ describe @refill better in the summary.
+ (Obtaining TeX): make a section of Hardcopy,
+ instead of its own appendix.
+ (Command Syntax): subnode of @@-Command List.
+ This reduction in the number of appendices will hopefully make the
+ manual less overwhelming.
+
+2004-03-13 Alper Ersoy <dirt@gtk.org>
+
+ * info/dir.c:
+ * info/display.c:
+ * info/display.h:
+ * info/doc.h:
+ * info/dribble.c:
+ * info/dribble.h:
+ * info/echo-area.c:
+ * info/echo-area.h:
+ * info/filesys.c:
+ * info/filesys.h:
+ * info/footnotes.c:
+ * info/footnotes.h:
+ * info/gc.c:
+ * info/gc.h:
+ * info/indices.c:
+ * info/indices.h:
+ * info/info-utils.c:
+ * info/info-utils.h:
+ * info/info.c:
+ * info/info.h:
+ * info/infodoc.c:
+ * info/infokey.c:
+ * info/infomap.c:
+ * info/infomap.h:
+ * info/m-x.c:
+ * info/makedoc.c:
+ * info/man.c:
+ * info/man.h:
+ * info/nodemenu.c:
+ * info/nodes.c:
+ * info/nodes.h:
+ * info/search.c:
+ * info/search.h:
+ * info/session.c:
+ * info/session.h:
+ * info/signals.c:
+ * info/terminal.c:
+ * info/terminal.h:
+ * info/tilde.c:
+ * info/tilde.h:
+ * info/variables.c:
+ * info/variables.h:
+ * info/window.c:
+ * info/window.h:
+ * lib/system.h: protoized.
+
+2004-03-12 Karl Berry <karl@gnu.org>
+
+ * makeinfo/sectioning.c (sectioning_underscore): don't segfault when
+ generating xml if @top arg was empty. Report from Pat.
+
+2004-03-11 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\pdfoutput): check also for \relax and 0, not
+ just \undefined, in case pdftex is being run in dvi mode.
+ Reported by Thomas Esser.
+
+ * lib/Makefile.am (libtxi_a_SOURCES): add getopt_int.h.
+
+2004-03-11 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/html.c (add_escaped_anchor_name): removed unnecessary
+ ampersand check.
+ (fix_filename): removed size calculation and memory reallocation for
+ filename as it is already PATH_MAX bytes. Added a check so we don't
+ cross PATH_MAX boundary while expanding not-isalnum to hex values.
+
+ * makeinfo/toc.c (toc_add_entry): generate links following html cross
+ refs proposal from Patrice Dumas.
+
+2004-03-11 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.h: changed URL_SAFE_CHAR to isalnum.
+
+ * makeinfo/html.c (add_escaped_anchor_name, add_anchor_name)
+ (fix_filename): generate links following html cross refs proposal
+ from Patrice Dumas.
+
+ * makeinfo/xref.c (cm_xref): tweaked references to external manuals,
+ to better follow html cross refs proposal.
+
+2004-03-08 Karl Berry <karl@gnu.org>
+
+ * pretest version 4.6.90.
+
+ * makeinfo/Makefile.am (makeinfo_SOURCES): include multi.h.
+ * makeinfo/cmds.c (cm_verb): avoid spurious warning.
+
+2004-03-06 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/lang.c (cm_special_char): call add_encoded_char for Info
+ output too.
+
+2004-03-01 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_minus): use minus entity for HTML too.
+
+2004-03-01 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (reader_loop): disable multiple dashes and
+ quotes entity substitution for HTML and XML, if escape_html is not
+ true.
+
+2004-03-01 Alper Ersoy <dirt@gtk.org>
+
+ * util/texinfo.dtd: added math element and updated footnote.
+
+2004-03-01 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.c (xml_insert_footnote): start <para> if not already
+ started.
+
+2004-03-01 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/index.c (index_add_arg): make entry node name 'Footnotes'
+ if the output format is non-split HTML, and we are handling footnotes.
+
+ * makeinfo/footnote.c (output_pending_notes): added anchor at the
+ start of footnotes block for the non-split HTML output, so @printindex
+ can refer to that point as the nodename.
+
+2004-03-01 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/defun.c (defun_internal): use var element for HTML, instead
+ of i.
+
+2004-03-01 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (cm_image): reset filling_enable to its previous
+ state after getting the cookie done.
+
+2004-03-01 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (cm_image): insert magic cookie only if there's
+ a bitmap file (if all we have is a text file, skip the cookie.)
+
+2004-02-29 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/node.c (cm_node): moved node order handling to ...
+ (remember_node): here.
+
+2004-02-29 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/multi.c (draw_horizontal_separator): insert a space before
+ the newline so it looks different than @subsection's.
+
+2004-02-29 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (insert): do not strip trailing whitespace in
+ multitables.
+
+2004-02-29 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (execute_string): removed XML tag balance
+ checks.
+
+2004-02-28 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (begin_insertion, end_insertion): for rawxml,
+ rawhtml and rawdocbook blocks, change the state of escaping depending
+ on raw_output_block in order to avoid problems when these blocks are
+ used within a @rmacro.
+
+2004-02-28 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (end_insertion): for quotation use
+ default_indentation_increment.
+
+2004-02-28 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (info_trailer): call current_document_encoding
+ here too.
+
+2004-02-28 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/lang.h: new variable unknown_encoding.
+
+ * makeinfo/lang.c (cm_documentencoding): save and use the encoding
+ argument even if it's unknown.
+
+ * makeingo/html.c (html_output_head): call current_document_encoding
+ instead of checking document_encoding_code.
+
+2004-02-28 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/float.c (cm_listoffloats): simplified entry generation.
+
+2004-02-28 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/files.h: new members node_order and index_order in
+ DELAYED_WRITE struct.
+
+ * makeinfo/files.c (register_delayed_write): save current node and
+ index order.
+ (handle_delayed_writes): update tag_table positions and index line
+ numbers by comparing orders, not line numbers they are defined.
+
+ * makeinfo/index.c: made index_counter not static and ...
+ * makeinfo/index.h: extern.
+
+ * makeinfo/node.h: new member order in TAG_ENTRY struct.
+
+ * makeinfo/node.c (cm_node): keep the order of the node entry.
+
+2004-02-27 Karl Berry <karl@gnu.org>
+
+ * util/gendocs.sh: generate ASCII in static file, not stdout, so
+ toc/index can get written.
+
+ * util/gendocs_template: XHTML version from
+ http://www.gnu.org/boilerplate.html, via John Darrington
+ <john@cellform.com.au>, 9 Jan 2004 07:24:27 +0800.
+
+2004-02-27 Jan Nieuwenhuizen <janneke@gnu.org>
+
+ * doc/texinfo.txi (Image Syntax): Update.
+
+ * makeinfo/makeinfo.c (cm_image): Only insert a period between the
+ image's NAME and EXTENSION as a second guess, to retain backward
+ compatibility.
+
+2004-02-27 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.c (xml_insert_element_with_attribute): if we are
+ closing either TABLEITEM, ITEM or DEFINITIONITEM during string
+ execution, update relevant state.
+
+2004-02-27 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (execute_string): moved state updates below
+ insertion and element stack checks, so any code executed in those
+ checks will be aware of executing_string.
+
+2004-02-27 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.c (xml_insert_docbook_image): for Docbook, if paragraph
+ is open, use inlinemediaobject instead of mediaobject in an
+ informalfigure.
+ (xml_insert_element_with_attribute): indent after informalfigure.
+
+2004-02-27 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.c:
+ * makeinfo/xml.h: new element INLINEIMAGE.
+
+ * makeinfo/makeinfo.c (cm_image): for XML, use INLINEIMAGE or IMAGE
+ depending on paragraph state.
+
+2004-02-27 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (cm_image): for Info, enclose text image in
+ brackets if @image is used inline (ie. paragraph is open).
+
+2004-02-27 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_noindent_cmd, cm_indent): start paragraph for
+ Info too.
+
+2004-02-27 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (cm_image): for HTML, if paragraph is not open,
+ enclose image in a <div> block.
+
+2004-02-27 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_noindent_cmd, cm_indent): insert <p> for HTML.
+
+2004-02-26 Alper Ersoy <dirt@gtk.org>
+
+ * util/texinfo.dtd: moved verbatim to &block;.
+
+2004-02-25 Stepan Kasal <kasal@ucw.cz>
+
+ A first step towards general cleanup of sectioning macros:
+ * doc/texinfo.tex (\genhead): A generalized version of ...
+ (\numhead, \apphead, unnmhead): ... these, which uses ...
+ (\chapheadtype, \unmlevel, \maxseclevel): ... these "variables".
+
+2004-02-25 Karl Berry <karl@gnu.org>
+
+ * makeinfo/index.c (cm_printindex): insert cookie in Info output
+ for benefit of Info readers.
+
+2004-02-26 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (end_insertion): removed obsolete Docbook
+ indentation work-around.
+
+2004-02-25 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (cm_author): new function.
+ (cm_titlepage_cmds): removed @author parts.
+
+ * makeinfo/cmds.c: made @author call cm_author.
+
+2004-02-24 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi: avoid duplicate index entries within the same
+ node (from Alper): syncodeindex, lines 9627 and 9633 TEXINPUTS,
+ lines 14157 and 14202 texinfo-format-buffer 15131 and 15159
+ texinfo-format-region 15130 and 15149
+
+2004-02-24 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.h: new variable example_indentation_increment.
+
+ * makeinfo/cmds.c (set_default_indentation_increment): renamed to
+ set_example_indentation_increment.
+ (cm_exampleindent): call set_example_indentation_increment.
+
+ * makeinfo/insertion.c (begin_insertion, end_insertion): @example,
+ @display and the like now rely on example_indentation_increment.
+
+2004-02-24 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (begin_insertion, end_insertion): @float should
+ not play with indentation.
+
+2004-02-24 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/float.c (cm_listoffloats): check if we are crossing the
+ caption boundaries looking for a space to break at.
+
+2004-02-24 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c: TEXINFO_OUTPUT -> TEXINFO_OUTPUT_FORMAT,
+ after discussion with tar maintainer.
+
+2004-02-20 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\infochapter, \infosection, etc.): these stubs
+ of sectioning commands nuked.
+
+2004-02-24 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\centerchap): Fixed to work again,
+ don't open group.
+ (\centerparameters): New macro.
+ (\centerchfplain): Nuked.
+
+ The following continues with prosecution of @setchapterstyle{open}:
+ * doc/texinfo.tex (\chfplain): renamed to \chapmacro.
+ (\CHAPFplain): Nuked.
+ (\setchapterstyle): Moved next to its deprecated friends.
+
+2004-02-24 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\dofloat): start a paragraph.
+
+2004-02-24 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (cm_caption): check if the innermost
+ environment is @float.
+
+2004-02-24 Alper Ersoy <dirt@gtk.org>
+
+ * info/session.c (info_menu_digit): if the menu entry has a line
+ number, go to that line.
+
+2004-02-24 Alper Ersoy <dirt@gtk.org>
+
+ * info/info.c (main): make sure dir file is not listed for option
+ --where.
+
+2004-02-24 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.c (xml_insert_element_with_attribute, xml_add_char)
+ (xml_begin_table, xml_end_table, xml_begin_table_item)
+ (xml_continue_table_item): separated ITEM and TABLEITEM states to
+ handle @table environments better.
+
+2004-02-24 Alper Ersoy <dirt@gtk.org>
+
+ * util/texinfo.dtd: added float and friends, updated tableitem and
+ Inline.reference.
+
+2004-02-23 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Structuring Command Types): slightly more info
+ about headings. Fix other references, too.
+
+ * Makefile.am (EXTRA_DIST): explicitly list every file in djgpp,
+ so that the CVS directory is not included in the dist.tar.gz.
+
+2004-02-23 Arnold D. Robbins <arnold@skeeve.com>
+
+ * makeinfo/cmds.c (cm_code): For @samp, using single quotes instead of
+ double quotes, to match TeX output more closely.
+
+2004-02-23 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/index.h: new output_file and entry_number members in
+ index_elt struct.
+
+ * makeinfo/index.c (index_add_arg, cm_printindex): rewrote hyperlink
+ generation for HTML to avoid duplicate anchors, and to work with
+ splitting enabled.
+
+2004-02-20 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/float.c (cm_listoffloats): create HTML hyperlinks with
+ add_word instead of using @ref to avoid problems with commas in
+ captions.
+
+2004-02-20 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/node.c (cm_node): remove whitespace before the node
+ separator sequence.
+
+2004-02-20 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/sectioning.c (handle_enum_increment): do not increment
+ counters for ENUM_SECT_NO heading commands (ie. @unnumbered,
+ @majorheading, etc.)
+
+2004-02-20 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/multi.c (multitable_item): unset hsep if item command is
+ not @headitem.
+
+2004-02-19 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex: More hyphenation exceptions.
+ (\author, \quotation): implement @author inside
+ @quotation, for attribution purposes.
+
+2004-02-19 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_exampleindent): fixed paragraph handling after
+ @exampleindent lines.
+
+2004-02-19 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/index.c (index_add_arg): create an anchor where @index is
+ used in HTML documents.
+ (cm_printindex): make index text an hyperlink to the created anchor.
+
+2004-02-19 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (begin_insertion): skip empty lines following
+ @table, @ftable, @vtable and @itemize lines.
+
+2004-02-18 Karl Berry <karl@gnu.org>
+
+ * lib/substring.c,
+ * lib/xexit.c,
+ * lib/xmalloc.c,
+ * lib/system.h: ANSI-fy. (Other lib files come from gnulib.)
+
+ * doc/texinfo.txi (Definition Commands): describe the argument/@var
+ situation more accurately.
+
+ * doc/texinfo.txi (Definition Commands): explicitly document the
+ implicit index entry creation in all cases.
+
+ * doc/texinfo.txi (Printing Indices & Menus, Indices, Predefined
+ Indices): remove redundancies, make different
+ purposes clear, etc.
+
+2004-02-18 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.h:
+ * makeinfo/xml.c (xml_get_assoc_for_id, xml_associate_title_with_id):
+ removed these functions.
+
+ * makeinfo/xref.c (cm_xref): do not call xml_get_assoc_for_id.
+
+ * makeinfo/sectioning.c (sectioning_underscore): added xreflabel
+ attribute to @unnumbered for Docbook.
+
+2004-02-18 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xref.c (cm_xref): for Docbook, use lowercase ``see'' when
+ printing index.
+
+2004-02-18 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.c (xml_insert_indexentry): removed ``see'' from index
+ entries as cm_xref takes care of it.
+
+2004-02-17 Karl Berry <karl@gnu.org>
+
+ * doc/info.texi (Help-Int): mention the new line number feature.
+ * doc/texinfo.txi (Indices): plural correction.
+ * doc/info-stnd.texi (Invoking Info): matche typo.
+ (Searching Commands): grammar.
+ * info/session.c (info_menu_or_ref_item): need to subtract 1 from
+ the actual line number to get to the right place,
+ don't really know why.
+
+ * makeinfo/makeinfo.c, info/info.c, util/texindex.c,
+ utils/install-info.c, util/texi2dvi: update copyright year to
+ 2004, and do not mark copyright line for translation, since
+ international law says to always use the English word "copyright".
+
+2004-02-17 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (end_insertion): use add_html_block_elt instead
+ of add_word for </pre> ending @example and the like.
+ * makeinfo/float.c (cm_listoffloats): use add_html_block_elt for <li>.
+
+2004-02-17 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (begin_insertion): do not expand @copying for
+ HTML and Info too.
+ (cm_insert_copying): expand copying_text for all formats here.
+
+ * makeinfo/html.c (html_output_head): use text_expansion for copying
+ text.
+
+2004-02-17 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (float): mention @multitable and @image
+ as typical contents. From Arnold.
+
+2004-02-17 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.c (xml_insert_element_with_attribute): removed check
+ to see if current element contains para before calling xml_start_para,
+ as that check is performed in xml_start_para too.
+
+2004-02-17 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (end_insertion): indent float caption.
+
+2004-02-17 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (begin_insertion): for XML and Docbook, do not
+ expand @copying text. Instead of calling @anchor, use <float
+ name="floatlabel"> for XML.
+ (cm_copying): removed ugly copying_text manipulation for Docbook.
+ Warn if there is no @copying before @insertcopying.
+
+ * makeinfo/xml.c: made floats contain para.
+ (xml_start_para): check if current element can contain para.
+ (xml_add_char): removed @copying checks.
+
+2004-02-17 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (end_insertion): if the output format is XML,
+ do not call close_insertion_paragraph after @end menu.
+
+2004-02-17 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.c (xml_insert_element_with_attribute): indentation
+ fixes for @multitable.
+
+2004-02-17 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/multi.c (do_multitable): remove trailing newline when the
+ output format is Docbook or XML, as output_paragraph becomes unusable
+ later for xml_indent during select_output_environment.
+
+2004-02-16 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_bye): do not call flush_output as text appended
+ by convert_from_loaded_file may need to play with output_paragraph.
+
+2004-02-16 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.c (xml_end_document): insert newline after </texinfo>
+ only if indentation is disabled (otherwise xml_indent takes care of
+ the newline.)
+ (xml_insert_indexentry): disable warnings when executing implicit
+ @xref commands for Docbook, otherwise makeinfo will warn about
+ missing punctuation.
+
+2004-02-16 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (begin_insertion): eat one newline after
+ @xml/@docbook blocks for proper indentation.
+
+2004-02-16 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_center): fixed line wrapping after the @center
+ command.
+
+2004-02-15 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.c (xml_begin_document): disabled warnings around the
+ implicit register_delayed_write("@documentencoding") call.
+
+2004-02-15 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (begin_insertion, end_insertion): when handling
+ @xml, @html and @docbook blocks, do not touch para elements, and keep
+ whitespace as-is.
+
+2004-02-15 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.h: made xml_keep_space extern.
+
+2004-02-15 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_noindent_cmd, cm_indent): implicitly start
+ para element for Docbook and XML.
+
+2004-02-15 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\hyphenation): add more hyphenation exceptions,
+ gleaned from the log in TUGboat.
+ * doc/info-stnd.texi: document new option --where.
+ * info/info.c (main): in print_where_p case, ensure we don't try
+ to print NULL.
+
+2004-02-14 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\addtokens): had two identical definitions,
+ remove one.
+ (\maketoks): no space token after |ENDTOKS|,
+ although I guess it hasn't mattered.
+ (\entry): make clear what is the argument to
+ \pdfgettoks and what is output.
+ (\appendtomacro): use our own token registers,
+ for safety.
+ (\listoffloatsdoentry): fully expand the page
+ number, and don't expand the lof text.
+
+2004-02-14 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_strong):
+ * makeinfo/xml.c (xml_begin_index): cast output_paragraph to char, to
+ avoid warnings with -pedantic.
+
+2004-02-13 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c:
+ * makeinfo/cmds.h:
+ * makeinfo/defun.c:
+ * makeinfo/defun.h:
+ * makeinfo/files.c:
+ * makeinfo/files.h:
+ * makeinfo/float.c:
+ * makeinfo/float.h:
+ * makeinfo/footnote.c:
+ * makeinfo/footnote.h:
+ * makeinfo/html.c:
+ * makeinfo/html.h:
+ * makeinfo/index.c:
+ * makeinfo/index.h:
+ * makeinfo/insertion.c:
+ * makeinfo/insertion.h:
+ * makeinfo/lang.c:
+ * makeinfo/lang.h:
+ * makeinfo/macro.c:
+ * makeinfo/macro.h:
+ * makeinfo/makeinfo.c:
+ * makeinfo/makeinfo.h:
+ * makeinfo/multi.c:
+ * makeinfo/node.c:
+ * makeinfo/node.h:
+ * makeinfo/sectioning.c:
+ * makeinfo/sectioning.h:
+ * makeinfo/toc.c:
+ * makeinfo/toc.h:
+ * makeinfo/xml.c:
+ * makeinfo/xml.h:
+ * makeinfo/xref.c:
+ * makeinfo/xref.h: protoized functions.
+
+2004-02-13 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/multi.h: new file.
+
+2004-02-13 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\caption): make \long.
+ * doc/texinfo.txi (Nodes): mention that changing node names is bad.
+ (caption shortcaption, listoffloats): write these, finishing the
+ first cut at @float documentation.
+
+2004-02-12 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_verb): end @verb only if delimiter is followed
+ by a closing brace.
+
+2004-02-12 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/lang.c (cm_accent_generic): warn if accented character is
+ whitespace.
+
+2004-02-12 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertionc. (end_insertion): decrement current_indent
+ only if the output format is Info.
+
+2004-02-12 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (end_insertion): adjusted caption styles for
+ label and type conditions.
+ (begin_insertion, end_insertion): indent first paragraphs inside
+ @float, even if first paragraph in a chapter. Increment/decrement
+ current_indent.
+
+2004-02-12 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/tests/defxcond: look for `--' instead of `-'.
+
+2004-02-12 Karl Berry <karl@gnu.org>
+
+ * makeinfo/float.c (cm_listoffloats): change warning wording.
+
+2004-02-11 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\dofloat): initialize caption macros here, not
+ globally.
+ (\Efloat): rewrite for more consistent caption
+ line, matching documentation.
+ (\appendtomacro): new macro.
+ (\currentparindent): this \newdimen was not used; removed.
+ * doc/texinfo.txi (float): continue documenting.
+
+ * makeinfo/files.c (register_delayed_write): change wording of msgs.
+
+2004-02-10 Karl Berry <karl@gnu.org>
+
+ * makeinfo/defun.c: --- (which gets reduced to --)
+ instead of -- (which gets reduced to -).
+ Report from Akim Demaille <akim@epita.fr>, 09 Feb 2004 18:06:29 +0100.
+
+2004-02-09 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\pickupwholefraction): allow the fraction to be
+ an integer without a decimal point, like `1'. Report from: Dumas
+ Patrice <dumas@centre-cired.fr>, 9 Feb 2004 16:46:30 +0100.
+ * makeinfo/multi.c (setup_multitable_parameters): compute width
+ and pass it, for clarity.
+
+2004-02-07 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (cm_insert_copying): insert double newlines
+ instead of one in non XML outputs.
+
+2004-02-07 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_code): do not decrement in_fixed_width_font as
+ it gets decremented elsewhere.
+
+2004-02-07 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (next_nonwhitespace_character): also check
+ global input_text since filestack does not contain it.
+
+2004-02-07 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (next_nonwhitespace_character): go through the
+ whole filestack looking for the next character.
+
+2004-02-06 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\indexnofonts): define \bullet .. \result, so
+ they can be used in @?index commands.
+ Report from: Akim Demaille <akim@epita.fr>, 06 Feb 2004 13:34:15 +0100.
+
+2004-02-05 Karl Berry <karl@gnu.org>
+
+ * makeinfo/xref.c (add_xref_punctuation): if we insert anything,
+ make it a period.
+ (cm_xref): include command name in error message.
+ * doc/texinfo.txi (ref): mention generating a period, if needed.
+ Too many complaints when we made a warning for @ref not followed
+ by period or comma.
+
+2004-02-05 Alper Ersoy <dirt@gtk.org>
+
+ * info/info-utils.c (info_parse_node): look for ``(line '' instead of
+ skipping any non-digit characters.
+
+2004-02-05 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/index.c (insert_index_output_line_no): made ``(line NNN)'' not
+ translatable for Info output.
+
+2004-02-03 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (flush_output): increment node_line_number too.
+
+ * makeinfo/makeinfo.h: new variable node_line_number to hold the last
+ output line number the current node.
+
+ * makeinfo/nodes.c (cm_node): reset node_line_number just before the
+ node start cookie.
+
+ * makeinfo/files.h: new node member in DELAYED_WRITE struct.
+ * makeinfo/files.c (register_delayed_write): save current node name if
+ there's one.
+ (handle_delayed_writes): adjust line numbers in indices only if the
+ output is plaintext, or the index entry appears in the changed node.
+
+ * makeinfo/index.c (index_add_arg, cm_printindex): use
+ node_line_number instead of output_line_number if the output is an
+ Info file.
+
+2004-02-03 Alper Ersoy <dirt@gtk.org>
+
+ * info/info-utils.h: new line_number member in REFERENCE struct.
+
+ * info/info-utils.c (info_parse_node): parse (line ...) strings
+ from menu items.
+ (info_references_internal): save parsed line number in the entry.
+
+ * info/session.c (info_menu_of_ref_item): if selected entry has a line
+ number associated with it, jump to that line after updating window.
+
+2004-02-02 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.c (add_xref_punctuation): new function that inserts
+ necessary punctuation after @ref and @pxref commands.
+ (cm_xref): call add_xref_punctuation when multiple parameters are
+ given, make use of next_nonwhitespace_character function in the END
+ case.
+ (cm_ref): do not call cm_xref in the END case.
+
+2004-02-02 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (next_nonwhitespace_character): new function.
+
+2004-02-02 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_code): call xml_start_para instead of tweaking
+ in_fixed_width_font, and use entities rather than quotes.
+
+2004-02-02 Arnold D. Robbins <arnold@skeeve.com>
+
+ * makeinfo/cmds.c (cm_TeX, cm_LaTeX): Add docbook support.
+ (cm_code): Add opening and closing single quotes for @samp in the
+ Docbook output.
+ * makeinfo/xml.c (xml_begin_document): Add `tex' and `latex' entities.
+ * makeinfo/xref.c (cm_xref): Add `See' and `see' strings for docbook
+ and xml.
+
+2004-01-31 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (main): fixed ``--option: makeinfo'' messages.
+
+2004-01-31 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_TeX, cm_LaTeX): really ignore the arguments as
+ the warning suggests.
+
+2004-01-31 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_TeX, cm_LaTeX): warn if there are any arguments.
+
+2004-01-31 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/files.c (pop_path_from_include_path): do not mock with
+ include_files_path address directly, as it confuses realloc.
+
+2004-01-31 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (main, usage): new --output-indent option.
+
+2004-01-31 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.c (xml_add_char): break long lines in paragraphs
+ when the output format is Docbook.
+
+2004-01-31 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/files.c (prepend_to_include_path, append_to_include_path)
+ (pop_path_from_include_path): new functions to manipulate
+ include_files_path.
+
+ * makeinfo/makeinfo.c (convert_from_file): prepend the loaded file's
+ path to include_files_path in order to make relative include files to
+ be found, then remove afterwards.
+ (main): make use of new functions for -I and -P options.
+
+2004-01-30 Alper Ersoy <dirt@gtk.org>
+
+ * util/texinfo.dtd: added exdent element.
+
+2004-01-29 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (convert_from_loaded_file): call
+ xml_begin_document after opening the output stream for writing.
+
+ * makeinfo/files.c (register_delayed_write): use delayed_command
+ instead of command in messages as it may differ from the actual
+ command name. Check the usability of current_output_filename.
+
+2004-01-28 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (HTML Splitting): describe when two nodes are
+ written to one output file.
+
+ * doc/texinfo.tex (\TeX): \edef using original \TeX definition.
+
+2004-01-28 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/defun.c (process_defun_args, defun_internal):
+ * makeinfo/insertion.c (begin_insertion, end_insertion): execute XML
+ only blocks for Docbook also.
+
+ * makeinfo/xml.c: added Docbook elements for definition commands.
+ (xml_begin_def_term): for Docbook, generate an Info-like @defun line.
+ (xml_insert_element_with_attribute): do not indent DEFINITION and
+ DEFINITIONTERM when the output is Docbook.
+
+2004-01-25 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.c: changed majorheading and the like with bridgehead
+ for Docbook.
+
+ * makeinfo/sectioning.c (sectioning_underscore): do not start sections
+ with @majorheading and the like, only insert title.
+
+2004-01-25 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.c:
+ * makeinfo/xml.h: new element EXDENT.
+
+ * makeinfo/cmds.c (cm_comment): save the paragraph state.
+ (cm_exdent): use EXDENT element for XML, LINEANNOTATION for Docbook.
+
+ * makeinfo/html.c (html_output_head):
+ * makeinfo/xml.c (xml_begin_document): erase output_paragraph.
+
+ * makeinfo/insertion.c (begin_insertion): canonize whitespace around
+ copying text.
+ (cm_insert_copying): comment fixes. Do not append newline if the
+ output is Docbook.
+
+ * makeinfo/makeinfo.c (close_paragraph): return if Docbook too.
+
+ * makeinfo/sectioning.c (sectioning_underscore): removed newline from
+ the end of titles.
+
+ * makeinfo/lang.c (cm_documentencoding): insert encoding attribute
+ into XML and Docbook prologs when handling delayed writes.
+
+ * makeinfo/xml.c (xml_begin_document): register a delayed write for
+ @documentencoding when writing the prolog.
+ (xml_end_para): removed docbook checks.
+ (xml_insert_element_with_attribute): skip indentation if
+ xml_keep_space is true, indent after table element. When the output
+ is Docbook, do not insert xml:space attribute, and do not remove from
+ the end of group element and keep_space blocks.
+ (xml_add_char): join lines in a paragraph for Docbook too.
+
+2004-01-24 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/multi.c (out_char): simple use add_char for XML and Docbook
+ outputs too.
+
+ * makeinfo/makeinfo.c (close_paragraph): just return when the output
+ format is XML.
+
+ * makeinfo/makeinfo.h: new variable xml_indendation_increment.
+
+ * makeinfo/cmds.c (cm_comment): insert a newline before the comment,
+ if there is not already one.
+ (cm_noindent_cmd): skip whitespace after the command.
+
+ * makeinfo/xml.c:
+ * makeinfo/xml.h: new element DETAILMENU.
+
+ * makeinfo/xml.c: menuentry and menucomment should not contain para.
+ (xml_indent, xml_indent_end_para): use xml_indentation_increment
+ value, and indent only if it is a positive number.
+ (xml_start_para): apply indentation for XML output too.
+ (xml_end_para): add newline if xml_indentation_increment is positive.
+ (xml_insert_element_with_attribute): major indentation fixes.
+ (xml_start_menu_entry): skip whitespace at the start of menu comments.
+ (xml_add_char): fixed paragraph detection in menus, and added a check
+ to detect multiple whitespaces after newline in menu comments. Do not
+ return when inside multitable to avoid concatenation of two lines
+ without a space char in between.
+
+ * makeinfo/insertion.c (cm_insert_copying, cm_lisp, cm_smalllisp)
+ (cm_format, cm_smallformat, cm_display, cm_smalldisplay, cm_example)
+ (cm_smallexample): do not insert newline when the output is XML.
+ (end_insertion): ditto for the above mentioned block commands and
+ @group. Do not increment in_fixed_font for XML output.
+ (begin_insertion, end_insertion): enclose @detailmenu in a detailmenu
+ element.
+
+ * util/texinfo.dtd: added detailmenu, and fixed menucomment and
+ tableitem definitions.
+
+2004-01-23 Alper Ersoy <dirt@gtk.org>
+
+ * util/Makefile.am: substituted catalog in EXTRA_DIST with catalog.in,
+ and added catalog to CLEANFILES.
+
+2004-01-23 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/files.h: new input_filename member in delayed_write struct.
+
+ * makeinfo/files.c (register_delayed_write): added input_filename to
+ saved variables, and adjusted line_number saving.
+ (handle_delayed_writes): set input_filename and line_number for
+ correct warning and error messages.
+
+2004-01-23 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/float.c (cm_listoffloats):
+ * makeinfo/index.c (cm_printindex): decrement line_number only if
+ not handling delayed writes.
+
+ * makeinfo/float.c (float_type_exists): check if float has a label.
+
+2004-01-23 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (main): updated copyright year in --version text.
+
+2004-01-23 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/tests/Makefile.am: commented top2.texi to fix distcheck.
+
+2004-01-23 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.c (xml_begin_document): use PUBLIC id for TexinfoML
+ instead of SYSTEM.
+
+2004-01-23 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/Makefile.am: removed texinfo.dtd and texinfo.xsl and ...
+
+ * util/Makefile.am: added here.
+
+2004-01-23 Alper Ersoy <dirt@gtk.org>
+
+ * utils/catalog.in: catalog file for texinfo.dtd.
+
+2004-01-23 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/texinfo.dtd:
+ * makeinfo/texinfo.xsl: moved to ...
+
+ * utils/texinfo.dtd:
+ * utils/texinfo.xsl: here.
+
+2004-01-23 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/texinfo.dtd: added ordm and ordf entities and dmn element.
+ updated indexterm location in tables.
+
+2004-01-22 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\dofloat): handle empty float type and empty
+ float label separately, matching makeinfo behavior.
+ * doc/texinfo.txi (Floats): new section, not yet fully written.
+ (Special Displays): new chapter to hold it.
+ (Footnotes, Images): move these sections to the new chapter.
+ (@@-Command Summary): list new commands.
+ * NEWS: mention new commands here too.
+
+2004-01-21 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.c (xml_begin_index): move data to a temporary location
+ for delayed use and insert back when handling delayed writes.
+
+ * makeinfo/index.c (cm_printindex): call xml_begin_index when not
+ handling delayed writes too.
+
+2004-01-19 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex: doc fix.
+
+2004-01-18 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\commondummies): dummify @tie and remaining
+ @<char> commands.
+ (\tocindent): reduce to 15pt to match \defaultparindent.
+ (\setref): use XR as control sequence prefix
+ instead of just X; seems nicer. Change calls.
+
+ Finish implementing @listoffloats:
+ (\xrdef): keep lists of each float type.
+ (\dofloat): save the floattype in the aux file.
+ (\Efloat): write the lof text to the aux file.
+ (\iffloat, \doiffloat, \listoffloats,
+ \listoffloatsdo, \listoffloatsentry): new macros.
+ * bootstrap: autoheader should come after aclocal, I think.
+
+2004-01-17 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\doitemize): rename from \itemizey.
+ (\itemizeitem): do not set \parskip=0 if the last
+ thing was a \nobreak (e.g., from \sectionheading).
+ Report from: Jesper Harder <harder@ifa.au.dk>,
+ 17 Jan 2004 22:03:51 +0100.
+
+ * doc/texinfo.txi (email): no angle brackets in TeX output.
+ Report from: Jesper Harder <harder@ifa.au.dk>,
+ 17 Jan 2004 21:03:21 +0100.
+
+2004-01-17 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/float.c (cm_listoffloats): Prefixed captions with
+ float_type. For HTML, used an <ul> block.
+
+2004-01-17 Alper Ersoy <dirt@gtk.org>
+
+ * info/info.c (main, info_short_help): new option -w, --where,
+ --location that prints the physical location of Info file.
+
+2004-01-17 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/defun.c (defun_internal):
+ * makeinfo/insertion.c (end_insertion): enclose paragraphs in @def
+ blocks in a blockquote element for indentation in the HTML output.
+
+2004-01-17 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/html.c (insert_html_tag_with_attribute): new function.
+ (insert_html_tag): only call insert_html_tag_with_attribute with
+ NULL attribute string and return.
+ (push_tag, pop_tag): keep the element attributes in stack too.
+ (html_output_head): fixed span.roman in the default CSS.
+
+ * makeinfo/html.h: new attribs member in hstack struct.
+
+ * makeinfo/cmds.c (cm_dmn, cm_code, cm_sc, cm_r): use
+ insert_html_tag_with_attribute for setting element class.
+
+2004-01-15 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\readauxfile): \ must have catcode other to
+ handle \ in node/section names.
+
+2004-01-16 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/toc.c (cm_contents): fixed Docbook element stack underflow.
+
+ * makeinfo/xml.c (xml_insert_indexterm): set xml_dont_touch_items_defs
+ for only XML output.
+
+2004-01-14 Simon Josefsson <jas@extundo.com>
+
+ * util/gendocs.sh: new option --html.
+
+2004-01-14 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/html.c (rollback_empty_tag): rewrote to also identify empty
+ elements with attributes.
+ (insert_html_tag): increment and decrement in_html_elt.
+
+ * makeinfo/index.c (index_add_arg): do not call flush_output for xml
+ and html outputs as they do not need an accurate output line number
+ tracking, and flush_output makes rollback_empty tag useless.
+
+2004-01-13 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_code): increment and decrement in_html_elt when
+ inserting the class attribute to avoid space char being replaced with
+ entities.
+ (cm_r, cm_dmn): use insert_string instead of add_word for the class
+ attribute.
+
+2004-01-13 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_r): changed add_word_args with insert_html_tag,
+ and changed inline style with a class attribute.
+
+ * makeinfo/html.c (insert_html_tag): when the current element is the
+ same with the last in the stack, do not return if it's span.
+ (html_output_head): new CSS class roman (for @r.)
+
+2004-01-13 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/node.c (cm_node): reset output_position when closing the
+ current HTML output file.
+
+ * makeinfo/files.c (handle_delayed_writes): fixed position updating of
+ the next writes.
+
+2004-01-13 Karl Berry <karl@gnu.org>
+
+ * makeinfo/files.c (register_delayed_write): reword warning, and
+ only warn if writing to stdout, not /dev/null.
+
+2004-01-13 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/node.c (glean_node_from_menu): removed unnecessary
+ line_number incrementation.
+
+2004-01-13 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/float.c (cm_listoffloats):
+ * makeinfo/index.c (cm_printindex): decrement line_number just after
+ get_rest_of_line to make messages refer to the correct line,
+ re-increment it just before returning.
+
+2004-01-13 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/node.c (cm_node): fixed prev, next, up nodes defaulting
+ code to not make use of @menus after @bye.
+
+2004-01-13 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/index.c (cm_printindex): handle @printindex immediately
+ if the output format is Docbook, rather than waiting for delayed
+ writes.
+
+2004-01-13 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/float.c (cm_listoffloats): insert xml elements also for
+ docbook.
+
+2004-01-13 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/float.c (float_type_exists): new function that checks if a
+ specific type of @float is previously used.
+ (cm_listoffloats): warn if requested float_type is unknown.
+
+2004-01-12 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/files.c (register_delayed_write): warn if delayed write is
+ requested when the output file is not seekable.
+
+2004-01-10 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Using Include Files): mention the possibility
+ of no nodes in an include file. From Bob.
+
+2004-01-10 Simon Josefsson <jas@extundo.com>
+
+ * makeinfo/node.c (cm_node): Only print ",\n" at correct places.
+
+2004-01-10 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/html.c (html_output_head): use insert_string instead of
+ add_word for css inclusion to avoid reformatting.
+
+2004-01-09 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.c:
+ * makeinfo/xml.h: new variable xml_dont_touch_items_defs.
+
+ * makeinfo/cmds.c (cm_comment, cm_sp):
+ * makeinfo/xml.c (xml_insert_indexterm): set and unset
+ xml_dont_touch_items_defs.
+
+ * makeinfo/xml.c (xml_insert_element_with_attribute)
+ (xml_add_char): do not do anything about @deffnx and @itemx commands
+ if xml_dont_touch_items_defs is non-zero.
+
+2004-01-09 Alper Ersoy <dirt@gtk.org>
+
+ * info/Makefile.am: define INFODIR2 that points to $datadir/info.
+
+ * info/info.c (main): prepend INFODIR2 to infopath, if defined and if
+ not the same with INFODIR.
+
+2004-01-08 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/index.c (cm_printindex): adapted to delayed writing,
+ decreased the space between the columns of plaintext output.
+
+ * makeinfo/float.c (cm_listoffloats): disabled menu header checks,
+ synced column_width with @printindex.
+
+2004-01-08 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/index.c: moved INDEX_ELT and INDEX_ALIST typedefs to ...
+
+ * makeinfo/index.h: here
+
+ * makeinfo/files.h:
+ * makeinfo/files.c (register_delayed_write): save line number in input
+ document that the calling command is in.
+ (handle_delayed_writes): adjust byte offsets in tag table and output
+ line numbers in all of the indices,
+
+ * makeinfo/makeinfo.c (convert_from_loaded_file): when finished, write
+ the tag table after handling delayed writes.
+
+ * makeinfo/node.c (write_tag_table): accept a filename argument, and
+ open the file in append mode.
+
+2004-01-08 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/float.c (add_new_float):
+ * makeinfo/float.h: save the line number @float command used.
+
+2004-01-08 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/toc.c (cm_contents): moved the call to html_output_head
+ to ...
+
+ * makeinfo/files.c (register_delayed_write): here.
+
+2004-01-08 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/float.c (cm_listoffloats): adapted for delayed writing,
+ and slightly fixed formatting with no_headers.
+
+2004-01-08 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c: use cm_contents for @shortcontents
+ and @summarycontents too.
+
+ * makeinfo/files.c (register_delayed_write)
+ (handle_delayed_writes): new functions.
+
+ * makeinfo/files.h: new delayed_write struct and
+ handling_delayed_writes variable.
+
+ * makeinfo/makeinfo.c (insert): use whitespace macro instead of
+ testing characters manually.
+ (convert_from_loaded_file): call handle_delayed_writes when finished.
+
+ * makeinfo/toc.c (contents_update_html, contents_update_info)
+ (shortcontents_update_html, shortcontents_update_info): changed file
+ read/writes with insert and insert_string.
+ (rewrite_top, contents_update, shortcontents_update)
+ (toc_update, cm_shortcontents): removed functions.
+ (cm_contents): for HTML and Info, only call register_delayed_write if
+ handling_delayed_writes is not true. Call contents_update_html and
+ other variants according to output format and command name.
+
+ * makeinfo/toc.h: removed obsolete variables and functions.
+
+2004-01-08 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/index.c (index_add_arg): keep line number of the index
+ entry where it appears in the output.
+ (insert_index_output_line_no): new function.
+ (cm_printindex): call insert_index_output_line_no for info and
+ plaintext outputs.
+
+2004-01-08 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.h: new variable output_line_number.
+
+ * makeinfo/makeinfo.c (flush_output): keep number of lines in the
+ flushed data, in output_line_number variable.
+
+2004-01-07 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/float.c (cm_listoffloats): when there is no caption, do not
+ insert space between the float number and the colon.
+
+2004-01-07 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/float.c (cm_listoffloats): use shorttitle only if it's
+ defined.
+
+2004-01-07 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c: new command @shortcaption.
+
+ * makeinfo/xml.c:
+ * makeinfo/xml.h: new element SHORTCAPTION.
+
+ * makeinfo/insertion.c (cm_caption): insert CAPTION or SHORTCAPTION
+ according to command.
+ (begin_insertion): read @shortcaption too. Fixed XML floatpos
+ contents.
+
+ * makeinfo/float.h: added shorttitle and position to the float_elt
+ struct.
+
+ * makeinfo/float.c (add_new_float): accept a shorttitle argument.
+ (current_float_shorttitle, current_float_position): new functions.
+ (cm_listoffloats): if title is too long to fit into a line, try
+ shorttitle.
+
+2004-01-07 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/float.h: new variable node_has_listoffloats.
+
+ * makeinfo/float.c (cm_listoffloats): insert menu header string only
+ if node_has_listoffloats is not true.
+
+ * makeinfo/node.c (cm_node): reset node_has_listoffloats.
+
+2004-01-06 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (begin_insertion): fixed a thinko in @float
+ arguments parsing code, regarding string termination; changed manual
+ input text skipping with skip_whitespace_and_newlines for proper
+ line_number handling; and changed magic number 10 with sizeof for
+ improved readability.
+
+ * makeinfo/float.c (cm_listoffloats): end paragraph before the menu
+ header. Use add_html_block_elt to insert <div> element.
+
+2004-01-06 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/crossrefs.c:
+ * makeinfo/crossrefs.h: moved to ...
+
+ * makeinfo/xref.c:
+ * makeinfo/xref.h: new files.
+
+ * makeinfo/Makefile.am:
+ * makeinfo/cmds.c:
+ * makeinfo/footnote.c:
+ * makeinfo/html.c:
+ * makeinfo/makeinfo.c:
+ * makeinfo/node.c:
+ * makeinfo/node.h:
+ * makeinfo/sectioning.c:
+ * makeinfo/toc.c: adjusted for new names.
+
+2004-01-06 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c:
+ * makeinfo/makeinfo.h: moved cross referencing commands to ...
+
+ * makeinfo/crossrefs.c:
+ * makeinfo/crossrefs.h: new files.
+
+ * makeinfo/cmds.c:
+ * makeinfo/footnote.c:
+ * makeinfo/html.c:
+ * makeinfo/makeinfo.c:
+ * makeinfo/node.c:
+ * makeinfo/sectioning.c:
+ * makeinfo/toc.c: added crossrefs.h to includes.
+
+ * makeinfo/Makefile.am: added new files crossrefs.c and crossrefs.h
+
+2004-01-06 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/node.c (cm_node): removed ``Node: <nodename>'' from the
+ node headers.
+
+2004-01-06 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (begin_insertion): keep line_number the same
+ before and after get_until, so messages issued inside full_expansion
+ have correct line numbers.
+
+2004-01-06 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (handle_menu_entry):
+ * makeinfo/node.c (glean_node_from_menu): adjust line_number.
+
+2004-01-05 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\rawbackslashxx): rename to \backslashcurfont,
+ to keep reducing the number of `xx's here.
+
+ * doc/texinfo.tex (\setref): call \atdummies, not \indexnofonts; we
+ need to keep the user's commands.
+ (\dofloat): call \indexnofonts and \turnoffactive
+ to support commands and special characters in the
+ float type name.
+
+ * doc/texinfo.txi (firstparindent): shorten name so it doesn't
+ break in the toc.
+
+2004-01-05 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/html.c (html_output_head): new CSS entry span.sc for
+ small-caps font variant.
+
+ * makeinfo/cmds.c (cm_sc): use span with class attribute sc, instead
+ of small.
+
+2004-01-04 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\commondummies, \indexnofonts): Merge the
+ common part of these two to ...
+ (\commondummiesnofonts): ... a new macro.
+ (\indexdummylatex, \indexdummytex, \indexdummydots): Nuke,
+ the time saved is not worth the hassle.
+
+2004-01-04 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\makedispenv): Determine the size of the fonts
+ according to the value of SETdispenvsize, using ...
+ (\setnormaldispenv, \setsmalldispenv, \SETdispenvsize, \smallword):
+ (\nosmallword): ... these new macros.
+ (\flushleft): No longer defined via \makedispenv.
+
+2004-01-03 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\TeX): new macro, copying plain but make a
+ period following end a sentence. Idea from LaTeX.
+
+2004-01-02 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/node.c (clean_old_split_files): new function.
+ (split_file): moved filename generation code to a ...
+ (enumerate_filename): new function.
+
+ * makeinfo/makeinfo.c (convert_from_loaded_file): call
+ clean_old_split_files before calling split_file.
+
+2004-01-02 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (create_html_directory): new function.
+ (insert_toplevel_subdirectory): moved common if blocks to
+ create_html_directory. Adjusted checks to reuse existing
+ directories, and remove existing <output>.html files, when
+ falling back to suffices.
+
+2004-01-02 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_code): for HTML, use span for @command, @env,
+ @file, @option and @samp, and insert command name as class attribute.
+
+2003-12-31 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (add_char, handle_menu_entry): end <ul> block
+ before inserting <p>, and restart afterwards.
+
+2003-12-31 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (handle_menu_entry): for HTML, append colon only
+ if there is a description following the menu item.
+
+2003-12-31 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (usage): removed short forms of output options.
+
+2003-12-30 Alper Ersoy <dirt@gtk.org>
+
+ * cmds.c (cm_comment): do not output comments before HTML header is
+ written.
+
+2003-12-30 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (main): new option --plaintext.
+ (usage): added short forms of --html, --xml, --docbook and --plaintext
+ to the help text.
+
+2003-12-30 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/multi.c (multitable_item): removed thead and tbody from
+ HTML tables. Added hsep after @headitem for Info.
+ (multitable_item, multitable_tab): for HTML, use th instead of td for
+ @headitem rows.
+
+ * makeinfo/xml.c (xml_begin_multitable): moved Docbook TGROUP code to
+ a ...
+ (xml_begin_multitable_group): new function.
+ (xml_end_multitable_row): restart TGROUP on @headitem.
+ (xml_end_multitable): warn if @headitem is the last item in
+ multitable, and output format is Docbook. Joined common code between
+ XML and Docbook.
+
+2003-12-30 Arnold D. Robbins <arnold@skeeve.com>
+
+ * makeinfo/cmds.c (cm_strong): Use <emphasis role="bold"> for docbook.
+
+2003-12-30 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/float.c (cm_listoffloats): substituted fixed numbers with
+ the sizeof operator where possible, and commented code where not, to
+ improve code readability.
+
+2003-12-30 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (cm_image): do not escape backslash and double
+ quote characters in plaintext output.
+
+2003-12-30 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (cm_image): do not write magic cookie when
+ output format is plaintext.
+
+2003-12-30 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (add_char): added forgotten html check to
+ in_html_block_level_elt if block.
+
+2003-12-30 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.c:
+ * makeinfo/xml.h: added new element alttext (IMAGEALTTEXT),
+ as a child of image.
+
+ * makeinfo/makeinfo.c (cm_image): moved alttext attribute to the new
+ alttext child in XML output, to keep markup intact. Moved filename
+ CDATA to name attribute.
+
+ * makeinfo/texinfo.dtd: updated image element.
+
+2003-12-30 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (cm_image): use HTML entities in alt attribute.
+
+2003-12-28 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (cm_item): do not call close_single_paragraph
+ and use rollback_empty_tag for empty <dd> removal.
+
+2003-12-28 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/html.c (rollback_empty_tag): new function.
+ (insert_html_tag): try rollback_empty_tag before closing both
+ tag and old_tag.
+
+2003-12-28 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_sp): for HTML use <pre>.
+
+ * makeinfo/defun.c (defun_internal): do not close paragraph when
+ outputting HTML to avoid empty <p> elements.
+ (process_defun_args): joined duplicate if/else blocks.
+
+ * makeinfo/html.c (insert_html_tag): removed redundant paragraph
+ starting code.
+
+ * makeinfo/insertion.c (begin_insertion): keep state of the first <dt>
+ child of a <dl> in the new html_deflist_has_term variable for ...
+ (cm_item): cleaner <br> insertion checks. Fixed non-functional empty
+ <dd> rollback code.
+
+ * makeinfo/makeinfo.c (add_html_block_elt, add_html_block_elt_args):
+ new functions for inserting block level elements that must not be
+ preceded by a <p> element.
+ (add_char): insert <p> only if in_html_block_level_elt is not true.
+
+ * makeinfo/cmds.c (cm_comment, cm_center):
+ * makeinfo/footnote.c (output_pending_notes):
+ * makeinfo/html.c (html_output_head):
+ * makeinfo/index.c (cm_printindex):
+ * makeinfo/insertion.c (enum_html, begin_insertion, end_insertion)
+ (handle_verbatim_environment, cm_item):
+ * makeinfo/makeinfo.c (handle_menu_entry):
+ * makeinfo/multi.c (do_multitable):
+ * makeinfo/node.c (cm_node):
+ * makeinfo/sectioning.c (sectioning_html): use add_html_block_elt and
+ add_html_block_elt_args instead of add_word and add_word_args
+ respectively, when inserting <ul>, <div>, <h?> and the like.
+
+2003-12-25 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Def Cmd Continuation Lines): new node.
+ * NEWS: mention this new feature.
+
+2003-12-25 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (end_insertion): inhibit paragraph indentation
+ for more cases after example, display and the like environments.
+
+ * makeinfo/xml.c (xml_start_para, xml_end_para): made <para> and
+ </para> indentation more newline-aware.
+
+2003-12-25 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (end_insertion, cm_example, cm_smallexample)
+ (cm_lisp, cm_smalllisp, cm_format, cm_smallformat, cm_display)
+ (cm_smalldisplay): unified whitespaces inside these elements
+ in XML and Docbook output (always one newline at the beginning
+ and one at the end).
+
+2003-12-25 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/lang.c (cm_accent_generic_no_headers): do not issue
+ warnings when substituting non-ASCII accents with punctuation.
+
+2003-12-24 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (cm_xref): rparen is not allowed after all,
+ confirmed by experimentation (thanks to Luc).
+ * doc/texinfo.txi (ref): remove it from doc.
+
+2003-12-23 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (convert_from_loaded_file): when finished, do
+ not indent body and html closing tags, and do not use comment tags if
+ there is no trailing information.
+
+2003-12-23 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_acronym):
+ * makeinfo/cmds.h: save second arguments of acronym in acronyms_stack
+ and reuse them as title attributes of acronym element of HTML output,
+ when there is only one argument given.
+
+2003-12-23 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (cm_image): use text_expansion for alt
+ attribute of images.
+
+2003-12-23 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/sectioning.c (sectioning_html): do not insert "%s "
+ unconditionally for title enumerations, which causes unnecessary
+ blanks for @unnumbered and @top.
+
+2003-12-23 Arnold D. Robbins <arnold@skeeve.com>
+
+ * float.h (FLOAT_ELT): New member: `title_used'. Avoids reuse of
+ title inside nested floats.
+ (current_float_used_title, current_float_set_title_used): declared.
+
+ * float.c (add_new_float): Init `new->title_used' to zero.
+ (current_float_used_title, current_float_set_title_used): new
+ functions.
+
+ * xml.c (xml_begin_docbook_float): Make use of new functions to
+ avoid omitting title, tag, id if have already done so inside
+ nested float.
+
+2003-12-22 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (cm_xref): warn if character after @ref does
+ not produce a valid Info ref.
+ (cm_ref): call cm_xref in both START and END cases.
+ * doc/texinfo.txi (ref): make the second example being a "wrong"
+ one explicit (report from Luc), and mention the warning.
+
+2003-12-21 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\comma): new command.
+ * makeinfo/cmds.c (cm_comma): new fn.
+ (command_table): use it for @comma.
+ * doc/texinfo.txi (Atsign Braces Comma): Rename node.
+ (Inserting a Comma): new node.
+ (@@-Command Summary): include it here.
+
+2003-12-20 gettextize <bug-gnu-gettext@gnu.org>
+
+ * configure.ac (AM_GNU_GETTEXT_VERSION): Bump to 0.13.1.
+
+2003-12-19 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\ordf, \ordm): use \lllsize instead of \lsize.
+ Advice from Steve Peter.
+
+ * doc/texinfo.txi (Printing Indices & Menus): typo, @@index ->
+ @@vindex. From Luc.
+
+2003-12-19 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_acronym): read and make use of second argument
+ like texinfo.tex does.
+
+ * makeinfo/xml.c:
+ * makeinfo/xml.h:
+ * makeinfo/texinfo.dtd: new elements acronymword and acronymdesc.
+
+2003-12-19 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (begin_insertion): insert float element for
+ docbook too.
+
+2003-12-18 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi, doc/info-stnd.texi: fix incorrect cross-manual
+ xrefs. From: Juri Linkov <juri@jurta.org>, 18 Dec 2003 05:01:07 +0200.
+
+2003-12-18 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (insert): rollback unnecessary whitespace before
+ newline characters.
+
+2003-12-17 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\ordf, \ordm): new macros.
+ (\commondummies): include them.
+ (\indexnofonts): here too.
+ * makeinfo/makeinfo.c (command_table): add them.
+ * makeinfo/lang.c (cm_special_char): first cut at handling them.
+ * doc/texinfo.txi (Inserting Accents): document them.
+
+2003-12-16 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/defun.c (process_defun_args): use execute_string instead
+ of add_word so accent commands are honored.
+
+2003-12-16 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.c (xml_begin_document): output xml process instruction
+ also in the Docbook prolog.
+
+2003-12-16 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (dots): document enddots spacing.
+
+2003-12-16 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\dots): Use \hfil instead of \hss and only
+ the stretch factor in explicit skips; I don't suppose the dots
+ will overlap.
+ (\enddots): Merged with \dots.
+
+2003-12-16 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (cm_image): quote the src= arg in the Info
+ case, since apparently that's what Jan implemented. Report from:
+ Torsten Bronger <bronger@physik.rwth-aachen.de>, 16 Dec 2003
+ 12:55:30 +0100.
+
+ * util/dir-example: wdiff tools.
+
+2003-12-15 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\dofloat): Move \startsavinginserts before
+ the begin of the vtop; it's still local---within the group
+ open by \float.
+ (\dofloat, \Efloat): Fix indentation.
+
+2003-12-15 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\innerdef, \innernewcount): Nuked.
+ (\getfloatno): New macro, to establish the right float count.
+
+2003-12-15 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\innernewbox): Nuked, the call expanded.
+
+2003-12-14 Karl Berry <karl@gnu.org>
+
+ * makeinfo/tests/*: unset TEXINFO_OUTPUT where necessary.
+
+2003-12-13 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Smallcaps, acronym): Compare and contrast these
+ a bit more fully.
+ * doc/texinfo.tex (\setfontstyle): just \def the string; since we
+ are \edef'd, we can't make ourselves a control sequence.
+ (\selectfonts): new macro.
+ (\doacronym): print acronym in smaller size, and \unsepspaces for
+ if we're called inside @display.
+ (\registeredsymbol): we can use \lllsize here too.
+
+ * configure.ac: gettext 0.13 (many generated files updated).
+
+ * Makefile.am (AUTOMAKE_OPTIONS): 1.8.
+
+ * makeinfo/makeinfo.c: give warning if TEXINFO_OUTPUT value is
+ unrecognized.
+ * doc/texinfo.txi (makeinfo options): document TEXINFO_OUTPUT.
+
+ * doc/texinfo.txi (tex): document @LaTeX.
+
+ * doc/texinfo.tex (\loggingall): reduce \errorcontextlines for
+ sake of infinite loops.
+ (\setfontstyle): \def better than \edef?
+ (\commondummies): LaTeX is a new dummy.
+ (\indexdummies): likewise.
+ (\indexdummylatex): sorted the obvious way.
+
+ * doc/texinfo.tex (\LaTeX): New macro for new command.
+ (\setfontstyle): new macro to remember current font style.
+ (\rm,\it,\sl,\bf,\tt,\sf,\ttsl): call it; all but
+ the last two are new too.
+ (\ssecsc): use correct magnification, we do for everything else.
+ (\reducedrm..\reducedsy): new fonts.
+ (\reducedfonts): new macro.
+ (\textfonts..\smallerfonts): set \lsize and \lllsize macros.
+
+2003-12-13 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (main): changed TEXINFO_XML_OUTPUT to
+ TEXINFO_OUTPUT. It now specifies the default output format.
+
+2003-12-13 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/defun.c (defun_internal): implemented basic line
+ continuation.
+
+2003-12-13 Karl Berry <karl@gnu.org>
+
+ * CVSROOT/loginfo: put filename/version number in mail subject.
+
+ * util/srclist.txt (help2man): remove, we require cvs-builders to
+ have this installed now (or accept `missing's replacement),
+ along with the rest of the dev tools.
+
+2003-12-13 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/defun.c (defun_internal):
+ * makeinfo/insertion.c (end_insertion): do not use tables for HTML
+ @deffns.
+
+2003-12-13 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (begin_insertion): strip whitespace from @float
+ arguments.
+
+ * makeinfo/sectioning.c: last_section_title and last_section_number
+ now default to empty strings.
+
+2003-12-13 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_LaTeX): new function for @LaTeX{}.
+
+ * makeinfo/texinfo.dtd: new latex entity.
+
+2003-12-13 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.h:
+ * makeinfo/xml.c: new element DIMENSION.
+
+ * makeinfo/cmds.c (cm_dmn): new function for @dmn.
+
+2003-12-13 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (main): if TEXINFO_XML_OUTPUT envvar is set,
+ default to XML output.
+
+2003-12-13 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (main): enabling one output format effectively
+ disables others.
+
+2003-12-13 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/lang.h:
+ * makeinfo/lang.c (current_document_encoding): new function.
+
+ * makeinfo/xml.c (xml_begin_document): specify encoding in the XML
+ prolog if different from no_encoding.
+
+2003-12-13 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.c:
+ * makeinfo/texinfo.dtd: moved documentlanguage out of para.
+
+2003-12-13 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/float.c (add_new_float): now expects position argument too.
+
+ * makeinfo/insertion.c (begin_insertion): read arguments from @float
+ line, do not look for @anchor.
+ (end_insertion): changed info caption style.
+ (cm_caption): use is_in_insertion_of_type instead of
+ current_insertion_type.
+
+ * makeinfo/xml.h:
+ * makeinfo/xml.c: new element floatpos.
+ (xml_begin_enumerate): check actual supplied value, not first digit.
+ Also special case for GPL's silly `@enumerate 0'. From Aharon Robbins
+ <arnold@skeeve.com> Tue, 9 Dec 2003 12:38:04 +0200.
+
+2003-12-12 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (ifnotdocbook,ifnotxml): define these @-commands.
+ Report from Arnold.
+
+ * doc/texinfo.tex (\setfilename): make the \openout\auxfile be
+ \immediate, again.
+
+2003-12-09 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\envparseargdef): New macro, a combination
+ of \envdef and \parseargdef.
+ (\enumerate, \float): Use it.
+
+2003-12-09 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\float, \Efloat, \caption, \shortcaption):
+ (\listoffloats): Adapt to the new environment definition framework.
+
+2003-12-09 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\setref, \xrefX): Make the ``\indexnofonts''
+ setups in these two consistent.
+
+2003-12-09 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\innernewbox): New macro, non-outer \newbox.
+ (\newsaveinsX): Use it.
+
+2003-12-09 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex: after test for epsf.tex, \closein 1, even if the
+ file wasn't there.
+ (\summarycontents, \tryauxfile): Similarily, \closein 1 even if eof.
+ (\startcontents, \contents, \summarycontents): fix indentation.
+
+2003-12-09 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\pdfmakeoutlines): Fix a typo, need
+ \def\thisubsecnum not \let.
+
+2003-12-08 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\makedefun): Add `\def\deffnheader' or the like
+ at the end; all calls of this macro changed.
+
+2003-12-08 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\normaldefunargs): Renamed to ...
+ (\defunargs): ... this; all callers changed.
+ (\ampdefunargs): Nuked, the only call expanded.
+
+2003-12-08 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\setfilename): Simplify the code for conditional
+ \input of texinfo.cnf.
+ (\contents): Call \pdfmakeoutlines only if .toc exists.
+ (\pdfmakeoutlines): Thus .toc must exist, no need to check again.
+ (\documentlanguage): Simplify, fix indentation.
+
+2003-12-08 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\center): Separate the horizontal and vetical...
+ (\centerH, \centerV): ... versions; account for \leftskip in \centerV.
+
+2003-12-08 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\group, \Egroup): Don't call \offinterlineskip;
+ to fix the line spacing after the group, propagate \prevdepth.
+ (Else, @exdent inside @group gets the wrong spacing.)
+
+2003-12-08 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\acronym): Check for second parameter, ...
+ (\doacronym): using this new function; remove smallcaps.
+
+2003-12-08 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\pdfmakeoutlines): Make the counting macros
+ robust, so that they won't break on incorrectly nested sections.
+ (For instance, in the bzip2 manual.)
+
+2003-12-08 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\author): If appears inside a @quotation
+ environment, interpret it as an affiliation; otherwise it has to
+ appear directly inside @titlepage.
+
+2003-12-08 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\argremovec, \argcheckspaces): Add support for
+ continued lines to \parsearg, while ...
+ (\domakedefun, \printdefunline): ... removing it from @defun's ...
+ (\parsedefunline): ... and thus nuking this.
+ (\startdefunx): Replaced by ...
+ (\dodefunx): ... this; it reuses the code of the respective @defun.
+
+2003-12-08 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\defparsearg): Rename to ...
+ (\parseargdef): ... this; all uses changed.
+
+2003-12-08 Stepan Kasal <kasal@ucw.cz>
+
+ New 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 be used also elsewhere 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 enviroments; they don't open a group.
+ (The implementation of @end takes care not to call \endgroup in this
+ special case.)
+
+ * doc/texinfo.tex: All environment definitions, true conditionals and
+ @ifset, @ifclear, changed.
+
+ Another issue:
+ @set and @value allowed - and _ in variable names, but @clear, @ifset
+ and @ifclear were not ready to accept such variables.
+
+ * doc/texinfo.tex (@set, @clear, @ifset, @ifclear): Call
+ \makevalueexpandable.
+
+2003-12-08 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\multitable): Move \everytab={} and the check
+ for saved inserts to \everycr; thus \item is \crcr again.
+ (\Emultitable): Call \setpercentfalse only after the last \crcr.
+
+2003-12-08 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\readauxfile): Read it, unconditinally;
+ don't open the aux file for writing.
+ (\tryauxfile): A new wrapper around \readauxfile, which checks
+ whether the file exists.
+ (\setfilename): Call \tryauxfile, then open the aux file for writing.
+
+2003-12-08 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\readauxfile): Don't hide serious problems by
+ setting the catcode of backslash to other.
+
+2003-12-08 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\setref): Call \indexnofonts to get nicer names
+ of reference identifiers expanded in \edef.
+
+2003-12-08 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\scanmacro): Add \spaceisspace, in case we are
+ in an environment with active spaces; without this, \eatspaces
+ didn't work.
+
+2003-12-08 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\scanmacro): Define only one version, using ...
+ (\scantokens): ... which is a primitive of e-TeX; under ordinary
+ TeX, define a replacement.
+
+2003-12-08 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\spaceisspace): A macro which resets space's
+ catcode to its normal value; use where appropriate.
+
+2003-12-08 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi: use etex/pdfetex if available.
+ (findprog): new helper fn.
+ * NEWS (texi2dvi): mention this.
+ * doc/texinfo.txi (Format with texi2dvi): use @TeX{} instead of
+ @code{tex}, since we don't literally run `tex' any more.
+
+ * info/session.c (info_select_reference_this_line): don't crash if
+ we have no window->line_starts, as it is after
+ set-screen-height to less than 5.
+ Report from: Christian Biere <christianbiere@gmx.de>,
+ 8 Dec 2003 19:12:08 +0100.
+
+ * doc/texinfo.tex (\comma): new command.
+
+ * bootstrap: make need for --enable-maintainer-mode more explicit.
+
+ * doc/texinfo.tex (\xrefX): otherify everything before getting the
+ -title \csname, so that _'s (et al.) are allowed.
+
+2003-12-07 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\xrefX): handle float case.
+ (\parsefloat): take additional optional arg for xref label.
+ (\dofloat): call \setref to define the float in
+ the aux file.
+ (\Yfloat): new macro for \setref.
+ (\floatmagic): new macro for \xrefX and \dofloat
+ to communicate.
+
+2003-12-03 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Not Ending a Sentence): mention special
+ entities output for @: in Docbook and XML.
+
+2003-12-02 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_punct): new function to handle @., @! and @?
+ commands.
+ (cm_comment): crunch multiple dashes to a single dash for XML
+ validity.
+
+ * makeinfo/texinfo.dtd: new entities: period, eosperiod, quest,
+ eosquest, excl, eosexcl.
+
+2003-12-02 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (begin_insertion): look for a newline before
+ @anchor and @caption commands in floatenv.
+
+2003-12-2 Arnold Robbins <arnold@skeeve.com>
+
+ * makeinfo/insertion.c (end_insertion): Change tests for docbook
+ and insertion to check current insertion type instead of if deep
+ inside a float insertion.
+ (cm_example, cm_smallexample, cm_lisp, cm_smalllisp, cm_cartouche)
+ (cm_caption): Same.
+
+ * xml.h (FLOATCARTOUCHE): New constant.
+ * xml.c (texinfoxml_element_list, docbook_element_list): Add "sidebar"
+ for FLOATCARTOUCHE. For docbook, map @display, @smalldisplay to
+ "literallayout".
+ (replacement_elements): Add entry for CARTOUCHE -> FLOATCARTOUCHE.
+ (xml_begin_docbook_float): Special case for CARTOUCHE, sidebars don't
+ have labels.
+
+2003-12-01 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\float, \listoffloats): new macros for new
+ @-commands -- skeletal implementation only now.
+
+ From: Aharon Robbins <arnold@skeeve.com>, 1 Dec 2003 17:43:12 +0200:
+ * makeinfo/float.h (current_float_type): declare.
+ * makeinfo/cmds.c (cm_colon): new fn.
+ (command_table): use it for @:.
+
+2003-11-29 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (@turnoffactive): include @unsepspaces, so
+ spaces in anchor names don't expand in the .aux file. From
+ Stepan.
+
+2003-11-28 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Abstract Objects): class names are no longer
+ printed in rm by default.
+ * doc/texinfo.tex (\cite): redefine to always use \sl, never \ttsl.
+ * doc/texinfo.tex (\ttslanted): new macro.
+ (\normaldefunargs): use it for @var; go back to
+ \sl by default.
+
+ * doc/texinfo.txi: document @deftypecv.
+
+2003-11-28 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_comment): do not perform expansion.
+
+2003-11-28 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_r): also set font-weight to normal in HTML.
+
+2003-11-28 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_comment): new function to output comments in
+ HTML, XML and Docbook outputs.
+
+2003-11-28 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/index.c: new section and section_name properties in
+ index_elt struct.
+
+ * makeinfo/index.c (index_add_arg): save current section number and
+ title for plain text output.
+ (cm_printindex): simplified printing with no_headers output.
+
+2003-11-28 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/float.h: new section and section_name properties in
+ float_elt struct.
+
+ * makeinfo/float.c (add_new_float): save current section number and
+ title for plain text output.
+ (cm_listoffloats): list floats with no_headers too, following
+ printindex @example.
+
+2003-11-28 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/sectioning.h:
+ * makeinfo/sectioning.c (current_sectioning_number)
+ (current_sectioning_title): new functions.
+
+ * makeinfo/sectioning.c (get_sectioning_number): moved space char at
+ the end of numbers to ...
+ (insert_and_underscore, sectioning_html): here.
+ (get_sectioning_number, insert_and_underscore): keep track of the last
+ number/title to be used by @float, @cindex like commands that need to
+ know in which section they are used.
+
+2003-11-27 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_math): new function that encloses @math
+ statements in a math element in XML.
+
+ * makeinfo/xml.c:
+ * makeinfo/xml.h: new element math.
+
+2003-11-27 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/float.c (cm_listoffloats): made the layout in Info output
+ the same with indices.
+
+2003-11-25 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/float.c (cm_listoffloats): generate a menu for Info, with
+ automatically shortened captions.
+
+2003-11-25 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_acronym): use acronym element for HTML.
+ Report from: Torsten Bronger <bronger@physik.rwth-aachen.de>
+ Tue, 25 Nov 2003 10:30:52 +0100.
+
+2003-11-25 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/sectioning.c (cm_appendix): reset numbers only when
+ changing enum_marker.
+
+2003-11-25 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/index.c (cm_printindex): made Appendix matching locale
+ aware.
+
+2003-11-24 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/index.c (cm_printindex): also catch Appendix and A.1 kind
+ of numbers with --no-headers Info output.
+
+2003-11-24 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (cm_example):
+ * makeinfo/xml.c (xml_insert_docbook_image, xml_begin_multitable):
+ moved common floatenv handling to ...
+ (xml_begin_docbook_float): here.
+
+ * makeinfo/insertion.c (end_insertion, cm_smallexample, cm_lisp)
+ (cm_smalllisp): insert FLOATEXAMPLE for Docbook if inside @float.
+
+2003-11-24 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (is_in_insertion_of_type): don't return the
+ level, as it is not useful.
+ (begin_insertion): instead of is_in_insertion_of_type, use
+ float_active.
+
+ * makeinfo/insertion.c (cm_example):
+ * makeinfo/xml.c (xml_insert_docbook_image, xml_begin_multitable):
+ insert empty label for @floats with no @anchor.
+
+2003-11-24 Karl Berry <karl@gnu.org>
+
+ * doc/Makefile.am (EXTRA_DIST): remove no-longer-defined
+ noinst_SCRIPTS.
+
+2003-11-24 Akim Demaille <akim@epita.fr>
+
+ * configure.ac (HELP2MAN): Look for it.
+ * doc/help2man: Remove.
+ * doc/Makefile.am (HELP2MAN, noinst_SCRIPT): Remove.
+ (common_mandeps): Don't depend on HELP2MAN which can be a complex
+ command such as "missing --run help2man.
+
+2003-11-24 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex: doc/\global fixes.
+
+2003-11-24 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c: new command @listoffloats.
+
+ * makeinfo/float.c (count_floats_of_type_in_chapter): only count
+ floats with @anchors.
+ (cm_listoffloats): new function.
+
+ * makeinfo/insertion.c (end_insertion): do not prepend float type and
+ number if no @anchors.
+
+2003-11-24 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.c:
+ * makeinfo/xml.h: new element listoffloats.
+
+2003-11-24 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.h: number sections by default.
+
+2003-11-24 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (cm_xref): if a reference is being made to a
+ float with only one parameter, use the float number in HTML, and
+ prepend it to the link in Info outputs.
+
+2003-11-24 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/float.h:
+ * makeinfo/float.c (get_float_ref): new function to retrieve a float's
+ number by its id.
+
+2003-11-24 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (end_insertion): indent the first paragraph
+ after @float.
+
+2003-11-24 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c: new commands @float and @caption.
+
+ * makeinfo/insertion.h: new environment floatenv.
+
+ * makeinfo/insertion.c (cm_float, cm_caption): new functions.
+ (begin_insertion, end_insertion): handle floatenv.
+
+ * makeinfo/xml.c:
+ * makeinfo/xml.h: new elements float, floattype, caption, floattable,
+ floatfigure, floatexample.
+
+ * makeinfo/insertion.c (cm_example):
+ * makeinfo/xml.c (xml_insert_docbook_image, xml_begin_multitable):
+ insert label and id attributes, title element for docbook if used
+ inside @float.
+
+ * makeinfo/xml.c: replacements for multitable and informalfigure.
+ (xml_insert_element_with_attribute): special-cased float element for
+ docbook to make it appear in element stack and thus enable element
+ replacements inside floatenv.
+
+2003-11-24 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/float.c:
+ * makeinfo/float.h: new files for float environment functions.
+
+ * makeinfo/Makefile.am: added new files to makeinfo_SOURCES.
+
+2003-11-24 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (cm_xref): xstrdup the result from
+ xml_get_assoc_for_id, as it gets freed later.
+
+ * makeinfo/xml.c (xml_get_assoc_for_id, xml_associate_title_with_id):
+ reimplemented unnumbered_labels handling.
+ (xml_insert_docbook_image): Docbook expects format attribute values to
+ be uppercase.
+
+2003-11-23 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex: doc fix for multitable.
+ * util/gendocs.sh: docbook support, from Simon Josefsson.
+
+ * doc/texinfo.tex (\defttsl): new font.
+ (\df): set ttsl too.
+ (\deffngeneral,\deftypefngeneral,\deftypecvgeneral,
+ \deftypheader): call \ampdefunargs or \normaldefunargs.
+ (\normaldefunargs): new macro, typesetting defun
+ args in ttsl (instead of sl).
+ (\ampdefunargs): treat & specially and then call \normaldefunargs.
+ (\defname): typeset defun name in tt (instead of bf).
+
+ * doc/texinfo.tex: uniformly comment out eol with {% at macro
+ starts.
+
+2003-11-23 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (is_in_insertion_of_type): return the level
+ where the insertion is found.
+
+ * makeinfo/makeinfo.c (search_forward_until_pos): new function that
+ sets search_forward boundary.
+ (text_expansion): also reset docbook.
+
+ * makeinfo/sectioning.h:
+ * makeinfo/sectioning.c (current_chapter_number): new function that
+ returns top level chapter numbers.
+ (handle_enum_increment): always do the incrementation. but return
+ strings conditionally.
+
+ * makeinfo/xml.c: changed screen element's contained_in_para to 0 for
+ Docbook. @lisp/@smalllisp create programlisting.
+ (xml_insert_quotation): reimplemented quotation_stack handling.
+
+2003-11-22 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\tocentry): same as \entry, no second 1pt of
+ stretch. And a couple doc fixes.
+
+ * doc/texinfo.txi (Conventions): finally, get rid of @vskip
+ -@baselineskip kludge, we handle index entries after @item's now.
+
+2003-11-22 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.txi: use new @quotation feature.
+
+ * texinfo.tex (\putwordDeftypevar, \putwordDeftypefun): Remove.
+ * txi-cs.tex, txi-de.tex, txi-en.tex, txi-es.tex, txi-fr.tex,
+ txi-it.tex. txi-nl.tex, txi-no.tex, txi-pl.tex, txi-pt.tex,
+ txi-tr.tex: The same.
+ [texinfo-20031120-deftype-del.patch]
+
+ * doc/texinfo.tex (\verbatim,\Everbatim): remove one extra level
+ of grouping; move two lines of code ...
+ (\setupverbatim): ... here.
+ (\doverbatiminclude): just call the new \setupverbatim.
+ (\setupverbatiminclude): remove.
+ [texinfo-20031121-verbatim2.patch]
+
+ * doc/texinfo.tex (\math): no need for \mathcode, and we actually
+ can use $ not \implicitmath.
+ [texinfo-20031121-math.patch]
+
+ * doc/texinfo.tex (\zeroskipmacro): new macro, so we can
+ check for true zero skip.
+ (\dosubindsanitize): use it.
+ [texinfo-20031120-zeroskip.patch]
+
+ * doc/texinfo.tex (\doignore): scan in verbatim mode. Without this,
+ if the last line of ignored text ended with ``@'', the ``@end ifxxx''
+ tag was missed.
+ (\dodoignore): use \_STOP_ instead of \ST@P.
+ [texinfo-20031120-ignore-at.patch]
+
+ * doc/texinfo.tex (\defparsearg): new macro, to simplify places
+ where the user macro just calls \parsearg. Use it in many places.
+ [texinfo-20031121-defparsearg.patch]
+
+ * doc/texinfo.tex (\begin): remove, this is undocumented
+ and unused.
+ [texinfo-20031121-begin.patch]
+
+ * doc/texinfo.tex (\title,\subtitle,\author,...): move to outer
+ level (was inside \titlepage), it's more readable than nested
+ definitions.
+ [texinfo-20031116-titlepage1.patch]
+
+ * doc/texinfo.tex (\evenheadingxxx,\oddfootingyyy): might as well
+ use \ and avoid changing catcode of @.
+ [texinfo-20031116-catofat.patch]
+
+ * doc/texinfo.tex (\set): use new macros: \parseargusing and
+ \makecsname.
+ [texinfo-20031116-set.patch]
+
+ * doc/texinfo.tex (\cartouche): avoid \par if we are already in
+ vertical mode, in case it has an effect, eg. in an @example;
+ avoid extra space from the @cartouche line itself.
+ (\Ecartouche): force vertical mode, so that the \kern has the desired
+ effect.
+ [texinfo-20031120-cart.patch]
+
+ * doc/texinfo.tex (\ptexfootnote,\ptexinsert): save orig definitions.
+ (\startsavinginserts): new macro (with relatives), call from
+ \cartouche, \group, \table.
+ [texinfo-20031118-saveins.patch]
+
+ * doc/texinfo.tex (\table, \ftable, \vtable, \tablex, \tabley,
+ \tablez): Cleaned up indentation, etc.
+ (\kitem, \kitemx, \xitem, \xtemx, \description): Removed; they
+ didn't look as if they would work in their present state, anyway.
+ [texinfo-20031114-table.patch]
+
+ * doc/texinfo.tex (\filenamecatcodes): new macro.
+ (\include,\verbatiminclude): use it, with new \parseargusing.
+ (\pushthisfilestack,etc.): implement our own stack of filenames
+ instead of reading the @include argument in a group.
+ [texinfo-20031109-include.patch]
+
+ * doc/texinfo.tex (\indexbreaks): remove, and remove call.
+ (\entry): read arguments on the fly, to avoid fixing catcodes.
+ [texinfo-20031121-indexbreaks.patch]
+
+ * doc/texinfo.tex (\makevalueexpandable): new macro.
+ Change occurrences of \let\value=\expandablevalue to use it,
+ to reduce code duplication.
+ [texinfo-20031121-value.patch]
+
+ * doc/texinfo.tex (\parsedefunlineX,\defunchkspace,defunchktab,
+ \defunloop,\defunchkfinish,\replaceeols): New macros.
+ (\parsedefunline): start them off. This is to support continuations
+ lines for @defun headers.
+ [texinfo-20031108-defun-cont.patch]
+
+ * doc/texinfo.tex (\defun and all related commands):
+ rewrite to use \parsearg and uniform command generation.
+ (\makecsname): New macro, to be used within \edef's only.
+ [texinfo-20031120-defun.patch]
+
+ * doc/texinfo.tex (=, \equalChar): remove active definition of =
+ and hacks that printed = in \tt sometimes. We want to print
+ everything in \tt anyway, ultimately.
+ [texinfo-20031120-defun-pres3.patch]
+
+ * doc/texinfo.tex (\defopheader,\defcvarheader,defivarheader):
+ use \code for the class name.
+ [texinfo-defun-pres2.patch]
+
+ * doc/texinfo.tex (\parsearg): Reset the catcode of space before
+ we scan the argument; so we don't have to worry about
+ obeyed spaces before and after the argument.
+ (\parseargx, \parseargy): Nuke, it was wrong anyway--\obeyedspace,
+ which is a macro, was compared with \temp which could have been let
+ to an obeyed space, but it couldn't be a macro.
+ (\removeactivespaces,\removeactivespacesX,\removeactivespacesY): Nuke.
+ (\argremovespace): If the argument scanned by \parsearg ends with
+ a space, remove it.
+ [texinfo-20031108-parsearg-space.patch]
+
+ * doc/texinfo.tex: use \other, for clarity and efficiency;
+ use `\^^M instead of raw number 13.
+ [texinfo-20031108-other.patch]
+
+ * doc/texinfo.tex (\doverbatim): \xdef and \gobble, to avoid
+ the active space between `\end' and `verbatim'.
+ [texinfo-20031120-verbatim.patch]
+
+ * doc/texinfo.tex (\quotationlabel): new macro to print label,
+ with a \bf space.
+ (\quotation): change call so \parsearg is at the end.
+ [texinfo-20031118-quot.patch]
+
+2003-11-21 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (cm_xref): removed the warning about
+ @xrefs to @unnumbered sections, as there are many situations where
+ there is no way to fix them.
+
+ * makeinfo/insertion.c: removed lingering titlepage_cmd_present
+ declaration.
+
+2003-11-21 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_titlepage, cm_titlepage_cmds): moved to ...
+ * makeinfo/insertion.c: here.
+
+ * makeinfo/cmds.h (titlepage_cmd_present): moved to ...
+ * makeinfo/makeinfo.h: here.
+
+ * makeinfo/insertion.c (is_in_insertion_of_type): new function to
+ query insertion_stack to see if we are inside a given insertion type.
+
+ * makeinfo/makeinfo.h:
+ * makeinfo/insertion.c (begin_insertion, end_insertion):
+ * makeinfo/xml.c (xml_add_char):
+ * makeinfo/xml.h: removed xml_in_copying and inside_titlepage_cmd
+ global variables in favor of the new query function.
+
+2003-11-21 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (discard_until, execute_string): reworded
+ multiline related error messages.
+ (discard_until): rollback input_text_offset only if not dealing with a
+ multiline error, otherwise the same block gets in the way repeatedly.
+
+2003-11-21 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.h:
+ * makeinfo/xml.c (xml_get_assoc_for_id, xml_associate_title_with_id):
+ new functions.
+ (xml_insert_indexentry): call execute_string(xref) instead of creating
+ references directly.
+
+ * makeinfo/makeinfo.c (cm_xref): check to see if xref is being made to
+ an @unnumbered, and only one argument is given. issue a warning, use
+ @unnumbered's title as the third argument.
+
+ * makeinfo/sectioning.c (sectioning_underscore): keep track of
+ unnumbered sections, and their node names.
+
+2003-11-21 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/sectioning.c (sectioning_underscore): for Docbook, always
+ provide label attribute for chapter and unnumbered.
+ (handle_enum_increment): simplified enumeration constraints, and
+ changed to follow TeX way. Moved marker handling to ...
+ (cm_chapter, cm_unnumbered, cm_appendix): here.
+ (cm_appendix): restart numbering.
+
+2003-11-21 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.h:
+ * makeinfo/insertion.c: new rawdocbook and rawxml insertion types to
+ provide better block names in error messages (instead of "rawhtml" for
+ everything.)
+ (current_item_function, insertion_type_pname, find_type_from_name)
+ (begin_insertion, end_insertion, discard_insertions, cm_docbook)
+ (cm_xml, cm_item): honor new types.
+
+2003-11-21 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (cm_image): issue only a warning instead of an
+ error when .txt file is unreadable, to better comply with the manual.
+
+2003-11-21 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/sectioning.c (sectioning_underscore): insert label="" only
+ when the output format is Docbook.
+
+2003-11-21 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (cm_end): get rest of the line before returning
+ in case of error, so the parameter to @end does not get leaked into
+ the output document.
+
+ * makeinfo/makeinfo.c (discard_until): when the expected string is not
+ found, check to see if we are looking for @end, and if so issue a more
+ descriptive error message.
+ (execute_string): keep track of insertion stack to catch multiline
+ commands where they are not allowed.
+ Report from: Dumas Patrice <dumas@centre-cired.fr>, Wed, 18 Jun 2003
+ 09:41:56 +0200.
+
+2003-11-21 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/multi.c (multitable_item): start <tbody> immediately if
+ this a regular @item, and first in the table
+
+2003-11-19 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/footnote.c (output_pending_notes): always output footnotes
+ with in_fixed_width_font = 0, so entity substitutions can take place.
+
+2003-11-19 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/footnote.c (cm_footnote, output_pending_notes): provide
+ back link from footnote marker.
+
+2003-11-19 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (cm_insert_copying): remove blockquote from
+ copying_text when inside bookinfo and the output format is Docbook.
+
+2003-11-19 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (cm_value): return immediately instead of
+ just suppressing bogus warnings.
+
+2003-11-19 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (cm_value): do not issue bogus warnings about
+ undefined values when @value is used inside a @menu environment, and
+ the output format is Docbook.
+
+2003-11-19 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/sectioning.c (sectioning_underscore): use @settitle value
+ if @top parameter is empty.
+
+2003-11-19 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.c (xml_begin_index): make sure we are removing the
+ label attribute and not something else.
+
+2003-11-19 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/sectioning.c (get_sectioning_number): do not append space
+ with Docbook.
+ (sectioning_underscore): insert label attribute to make
+ distinction between chapter and unnumbered in Docbook.
+ (handle_enum_increment): also increment for Docbook.
+
+ * makeinfo/xml.c (xml_begin_index): remove label attribute from index
+ element.
+
+2003-11-18 Karl Berry <karl@gnu.org>
+
+ * cmds.c (command_table): new commands @deftypecv, @deftypecvx.
+ * defun.c, insertion.[ch], xml.c: implement them.
+
+2003-11-18 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (execute_string): better para handling in case
+ of nested executions.
+
+2003-11-18 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Multi-column Tables): include cmd name in
+ section name.
+ (Multitable Rows): use @headitem in example.
+
+2003-11-17 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.c (xml_begin_document): upgraded docbook DTD to Docbook
+ XML 4.2.
+
+ * makeinfo/makeinfo.c (cm_xref):
+ * makeinfo/xml.c (xml_insert_docbook_image, xml_insert_indexentry)
+ (xml_begin_multitable): close previously open-tag-only elements.
+
+2003-11-17 Karl Berry <karl@gnu.org>
+
+ * bootstrap: honor environment variables.
+
+2003-11-17 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (execute_string): end paragraphs if
+ executing @copying text with xml.
+
+ * makeinfo/xml.c: disallow nested quotations, legalnotice in abstract,
+ and samp in var with Docbook.
+
+2003-11-17 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/insertion.c (begin_insertion): keep @copying state.
+ use legalnotice instead of abstract for @copying.
+ (cm_insert_copying): removed redundant work arounds.
+
+ * makeinfo/makeinfo.c (execute_string): try to keep tags balanced with
+ Docbook and xml.
+
+ * makeinfo/xml.c
+ (xml_current_stack_index, xml_end_current_element): new functions.
+ (xml_add_char): enclose @copying text in a quotation element with
+ Docbook.
+
+2003-11-17 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_settitle): do not automatically start bookinfo
+ element after settitle.
+
+2003-11-17 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.c (xml_synindex): new function to keep track of index
+ redirections.
+ (xml_insert_indexterm): added a check to see if any index
+ redirections are made.
+
+ * makeinfo/index.c (cm_synindex): let xml_synindex() handle xml part.
+
+2003-11-17 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (cm_uref):
+ * makeinfo/xml.c: use ulink for @uref with Docbook.
+
+2003-11-16 Karl Berry <karl@gnu.org>
+
+ * util/install-info.c: protoize.
+ * util/texindex.c: protoize.
+ * util/dir-example (protoize,unprotoize): add.
+
+ * doc/texinfo.tex (\everytab): new \toks.
+ (\headitem): use it to typeset in bold.
+ (\item): reset it.
+
+2003-11-15 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (quotation): document it.
+ * doc/texinfo.tex (\quotation): accept optional argument.
+ (\doquotation): new macro to test for and typeset it.
+
+ * doc/texinfo.txi (Multitable Rows): document @headitem.
+
+ * doc/texinfo.tex (\headitem): error by default, redefine inside
+ @multitable (= \dotable). New command suggested by Arnold.
+
+2003-11-15 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi (fatal): New function. Use it.
+ (txiversion): Be robust to broken texinfo.tex.
+
+ * doc/texinfo.txi (example): mention use of @r for annotations.
+
+2003-11-15 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c: new command @headitem.
+
+ * makeinfo/insertion.c (cm_headitem): new function.
+
+ * makeinfo/insertion.h: new variables to keep head item state.
+
+ * makeinfo/multi.c (multitable_item, end_multitable):
+ * makeinfo/xml.c (xml_end_multitable_row, xml_end_multitable):
+ insert thead element if @headitem is used.
+
+ * makeinfo/xml.h: new element THEAD.
+
+ * makeinfo/texinfo.dtd: updated multitable structure.
+
+ * NEWS: announced @headitem.
+
+2003-11-14 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (cm_xref): make use of third and fifth arguments
+ of @xref with Docbook.
+
+ * makeinfo/xml.c: use Docbook citetitle for @cite.
+
+2003-11-13 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex: doc fixes.
+
+ * configure.ac, NEWS: autoconf 2.59.
+
+2003-11-13 Akim Demaille <akim@epita.fr>
+
+ * configure.ac: Use AC_CHECK_DECLS, not txi_CHECK_DECLS.
+ Also use # instead of dnl for comments.
+ * acinclude.m4: Remove.
+
+2003-11-14 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_noindent): output continued paragraphs with
+ docbook and xml only when @noindent command is used.
+ (cm_noindent_cmd): new function. Patch from Arnold Robbins
+ <arnold@skeeve.com>, 13 Nov 2003 15:43:02 +0200.
+
+2003-11-11 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_i, cm_b, cm_r): do not use lineannotation if we
+ are printing indices.
+
+ * makeinfo/insertion.c (cm_insert_copying): removed unnecessary xml
+ fix.
+
+ * makeinfo/texinfo.dtd: added OElig and oelig entities.
+
+2003-11-11 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_sp): disabled parameter expansion.
+
+2003-11-10 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c:
+ * makeinfo/insertion.c (cm_html): do not process @xml blocks.
+ (cm_xml): new function to process @xml.
+
+ * makeinfo/xml.c (xml_start_para, xml_end_para): skip para handling in
+ footnote.
+ (xml_insert_footnote): keep state in xml_in_footnote variable.
+
+ * makeinfo/texinfo.dtd: updated settitle definition.
+
+2003-11-10 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Output Formats): rewrite to fix underfull
+ boxes.
+
+2003-11-10 Alper Ersoy <dirt@gtk.org>
+
+ * doc/texinfo.tex (\commondummies): added registeredsymbol.
+
+2003-11-09 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/makeinfo.c (main): fixed a segfault with --html
+ --no-header.
+
+2003-11-09 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/html.c (html_output_head): output node name in title first.
+
+2003-11-09 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.c:
+ * makeinfo/xml.h: new Docbook elements for quotation: tip, note,
+ important, warning, caution.
+
+ * makeinfo/xml.c: better font tags for Docbook.
+ (xml_insert_quotation): new function that is aware of specialized
+ Docbook elements for quotation.
+ (xml_insert_entity): use add_char() instead of insert() for correct
+ paragraph handling.
+
+ * makeinfo/insertion.c (begin_insertion, end_insertion): use
+ xml_insert_quotation() for quotations.
+ (cm_quotation): removed quotation element insertion.
+ (cm_insert_copying): also work around xml tags.
+
+ * makeinfo/cmds.c (cm_b): really use bold with Docbook.
+
+ * NEWS: @quotation changes.
+
+2003-11-08 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (registeredsymbol): new node.
+
+ * doc/Makefile.am (HELP2MAN): invoke explicitly from $(srcdir), in
+ case . is not in PATH.
+
+ * configure.ac (AC_CONFIG_HEADERS): apparent AM_CONFIG_HEADERS is
+ obsolete now, and we get to use AC_CONFIG_HEADERS again.
+
+ * doc/texinfo.txi (Fonts): mention <lineannotation> feature in
+ Docbook feature.
+
+ * doc/texinfo.txi (itemx): warn not to use blank lines between
+ @itemx's.
+
+2003-11-08 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c (cm_i, cm_b, cm_r): for Docbook, use <lineannotation>
+ in @example-like environments.
+ (cm_r): For HTML use <span> to make sure we always get roman text.
+
+ * makeinfo/xml.c:
+ * makeinfo/xml.h: new docbook element <lineannotation>. Added also to
+ replace_elements to avoid nesting.
+
+2003-11-08 Alper Ersoy <dirt@gtk.org>
+
+ * doc/texinfo.txi (Custom Headings): removed a newline that broke
+ Docbook output.
+
+ * NEWS:
+ * makeinfo/cmds.c: new command @registeredsymbol
+
+ * makeinfo/cmds.c (cm_registeredsymbol): new function.
+ (cm_code): fixed in_fixed_width_font adjustment for XML and Docbook
+ outputs.
+ (cm_noindent, cm_indent): set xml_no_indent as well.
+
+ * makeinfo/makeinfo.c (reader_loop): use entities for double quotes
+ and dashes in HTML, XML and Docbook outputs.
+
+ * makeinfo/multi.c (setup_multitable_parameters): convert
+ @columnfractions to integer percentages (original code from Arnold
+ Robbins <arnold@skeeve.com>.)
+ (multitable_item, cm_tab): add width attribute to <td> element if
+ @columnfractions is used.
+
+ * makeinfo/texinfo.dtd: added an optional role attribute to para
+ element (used for @noindent.) New attributes ldquo, rdquo, ndash,
+ mdash, registered.
+
+ * makeinfo/xml.c: replaced repeated command element with more
+ appropriate Docbook elements in docbook_element_list.
+ (xml_start_para, xml_end_para): new functions to centralize paragraph
+ handling.
+
+ * makeinfo/xml.h: new variable xml_no_indent.
+
+2003-11-07 Karl Berry <karl@gnu.org>
+
+ * bootstrap: run the various auto* tools we need instead of
+ autoreconf, which copies in older versions of files.
+
+ * doc/Makefile.am (texinfo): remove the special rule, it seems to
+ be fixed.
+
+ * Makefile.am (AUTOMAKE_OPTIONS): bump to 1.7.8.
+ * doc/version.texi, doc/version-stnd.texi: cvs add these again,
+ because with AM_MAINTAINER_MODE they are not created
+ (unless --enable-maintainer-mode is given).
+
+ * doc/Makefile.am (*.1) [MAINTAINER_MODE]: use this conditional
+ instead of TEXINFO_MAINT, now that we have it.
+ * configure.ac (TEXINFO_MAINT): no longer needed, since we call
+ AM_MAINTAINER_MODE.
+
+2003-11-06 Karl Berry <karl@gnu.org>
+
+ * bootstrap: ok, restore --force since it doesn't help Alper
+ anyway.
+
+ * AUTHORS: Silly syntax.
+ * bootstrap: no --force, everything is considered obsolete then
+ (thanks Alper).
+
+2003-11-06 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/html.c (html_output_head): add <link> elements pointing to
+ top, up, next, prev nodes when splitting output, and to top when not
+ splitting. Also provide a link to Texinfo homepage.
+ (add_link): use nodename as title attribute.
+
+2003-11-05 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/html.c (html_output_head): append node name to title if
+ splitting. Escape special chars in title.
+
+ * makeinfo/node.c (cm_node): removed <link> elements from HTML node
+ navigation <div> as they are only allowed in <head>.
+
+2003-11-05 Alper Ersoy <dirt@gtk.org>
+
+ * doc/texinfo.txi (Installing Dir Entries): fixed @uref for Free
+ Software Directory.
+ (Command List): Escaped @/.
+
+ * info/display.c (handle_tag, handle_tag_start, handle_tag_end): new
+ functions.
+ (display_update_one_window): ignore the text between magic
+ tags/cookies.
+
+ * makeinfo/cmds.c (cm_dots, cm_enddots): use insert_string() for HTML
+ to avoid escaping.
+ (cm_bullet): use entity name (bull) instead of number (149).
+
+ * makeinfo/index.c (cm_printindex): escape expanded_index.
+
+ * makeinfo/lang.c (cm_accent_generic_html): handle @dotless{i}
+ correctly.
+ (cm_special_char): use entity names for @OE (OElig) and @oe (oelig)
+ instead of numbers.
+
+ * makeinfo/node.c (cm_node): escape node names in HTML output.
+
+ * makeinfo/xml.c (xml_id): check to see if the character is allowed.
+
+ * makeinfo/tests/accent-text.txi: new @dotless{j} lines.
+
+ * makeinfo/tests/accent: look for &acute;j instead of &acute;i.
+
+ * TODO: removed item about @dotless in HTML output.
+
+2003-11-04 Karl Berry <karl@gnu.org>
+
+ * util/Makefile.am (EXTRA_DIST): spurious space after trailing
+ backslash.
+
+ * configure.ac (AC_PREREQ): 2.58.
+
+2003-11-03 Karl Berry <karl@gnu.org>
+
+ * util/Makefile.am (EXTRA_DIST): add gdoc.
+
+2003-11-02 Karl Berry <karl@gnu.org>
+
+ * util/gendocs.sh: doc fix.
+
+ * doc/texinfo.txi (Using Texinfo): merge most details into ...
+ (Output Formats): ... this section.
+
+ * util/dir-example (VM): add.
+
+2003-11-01 Alper Ersoy <dirt@gtk.org>
+
+ * doc/texinfo.txi (Conditional Commands): Docbook text should
+ really use @ifdocbook.
+
+ * info/info.c (raw_escapes_p): 1 by default.
+ (long_options): new option no-raw-escapes.
+ * doc/info-stnd.texi (Invoking Info): document it.
+
+2003-10-31 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/xml.c:
+ * makeinfo/xml.h:
+ * makeinfo/insertion.c (handle_verbatim_environment): use
+ <![[CDATA...]]> for @verbatim in docbook output too.
+
+2003-10-31 Karl Berry <karl@gnu.org>
+
+ * TODO: image scaling in html needed.
+ * makeinfo/cmds.c (cm_strong): only give the warning if we're
+ actually producing Info output.
+
+ * makeinfo/cmds.c (cm_strong): reword message and check for only
+ *Note:, not *Note:*. From: Kevin Ryde <user42@zip.com.au>, 31 Oct
+ 2003 06:19:05 +1000.
+
+2003-10-29 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Def Cmd Template): shorten.
+ * makeinfo/makeinfo.c: help message.
+ * doc/texinfo.tex: version update.
+ * makeinfo/texinfo.dtd: update copyright.
+
+2003-10-28 Alper Ersoy <dirt@gtk.org>
+
+ * makeinfo/cmds.c: output correct elements for @command,
+ @env, @file, @option and @samp commands, and also handle
+ @titlepage in xml output. New commands: @docbook,
+ @ifdocbook and @ifnotdocbook for conditional docbook output.
+
+ * makeinfo/defun.c (args_from_string): allow comma to be
+ recognized as a separate token to help XML side of things.
+ (process_defun_args): let xml.c handle xml output.
+
+ * makeinfo/insertion.c: handle @verbatim properly when
+ outputting xml. This means: surround data with a <verbatim>
+ block, use <![[CDATA ... ]]> and disable escaping.
+ Recognize @titlepage, @docbook, @ifdocbook and
+ @ifnotdocbook.
+ (cm_insert_copying): do not trust the consistency of
+ copying_text, because full_expansion doesn't let open
+ docbook elements to be closed.
+ (cm_item): generate correct index entries in xml output.
+
+ * makeinfo/insertion.h: new insertion types: ifdocbook,
+ ifnotdocbook, titlepage.
+
+ * makeinfo/lang.c: notify language changes with
+ @documentlanguage in xml output, using <documentlanguage
+ xml:lang=".." /> elements.
+
+ * makeinfo/makeinfo.c: trailing encoding settings in html
+ output are commented. Do not append any encoding settings
+ to xml and docbook outputs. Set process_docbook variable
+ for @docbook, etc. and updated --help about it.
+ (set):
+ (clear): Output @set and @clear in xml so it's possible to
+ pass variables to further processors.
+
+ * makeinfo/makeinfo.h: process_docbook and
+ inside_titlepage_cmd (to check validity of @author, @title,
+ @subtitle, etc.)
+
+ * makeinfo/sectioning.c: heading-only commands (@chaphading,
+ etc.) do not start/end sections in xml output. They are now
+ equivalents of the title element.
+
+ * makeinfo/toc.c: @contents and @shortcontents now appear in
+ the output.
+
+ * makeinfo/xml.c: changed element_list typedefs to also note
+ whether an element is filled. Prefilled elements get
+ xml:space="preserve" attribute. Added xml prolog. Root element
+ in xml output gets the document language like it does in
+ docbook, but with xml:lang. Removed indentation for xml
+ output. Also lines in paragraphs are joined.
+ (xml_process_defun_args):
+ (xml_begin_definition):
+ (xml_end_definition):
+ (xml_begin_def_term):
+ (xml_end_def_term): functions to handle @def environments.
+
+ * makeinfo/xml.h: new elements in xml_element enum:
+ TITLEPAGE, AUTHOR, BOOKTITLE, BOOKSUBTITLE, COMMAND_TAG,
+ ENV, FILE_TAG, OPTION, SAMP, CONTENTS, SHORTCONTENTS,
+ DOCUMENTLANGUAGE, VERBATIM, SETVALUE, CLEARVALUE, DEF*.
+ (Suffices of COMMAND_TAG and FILE_TAG are to avoid variable
+ name clashes.)
+
+ * makeinfo/texinfo.dtd: updated to reflect changes.
+
+ * doc/texinfo.tex: skip @docbook and @ifdocbook.
+
+2003-10-28 Karl Berry <karl@gnu.org>
+
+ * util/gendocs.sh: new -o option to specify output directory.
+
+2003-10-27 Karl Berry <karl@gnu.org>
+
+ * lib/system.h (LC_MESSAGES): no longer needed according to
+ Bruno, libintl.h defines it.
+ Message of 16 Jul 2003 18:17:23 +0200.
+
+2003-10-27 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\defname): be sure to declare the space
+ we get from \rightskip in the first line.
+ (\parsebodycommon): Be careful not to issue \medbreak after
+ \penalty 2000.
+ (\defxbodycommon): The penalty changed from 2000 to 3000;
+ it should be higher that the one in \parsebodycommon.
+ -- added "@c vim:sw=2:" near the end, for my comfort.
+
+2003-10-27 Stepan Kasal <kasal@ucw.cz>
+
+ More cleanup of active chars in @defxx arguments:
+
+ * doc/texinfo.tex (\opnr, \clnr): Reimplemented, ...
+ (\oprm, \clrm, \opnested, \ampnr): ... nuking these, and using ...
+ (\parenfont, \infirstlevel, \bfafterword): ... 3 new macros, ...
+ (\ifampseen): ... and a new \if.
+ (\brackcount): New count, to count also square braces, ...
+ (\lbrb, \rbrb): ... here.
+ (\checkparencounts): Macros to check whether both counts get back
+ to 0; ...
+ (\badparencount, \badbrackcount): ... if not, issue an error
+ message and reset the respective count.
+ (\deftypefnheaderx): Don't call \normalparens, it has no effect.
+ (\defvarargs): Call \boldbrax instead of \normalparens.
+ (\normalparens): Nuked.
+
+2003-10-26 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * info/session.c (info_menu_or_ref_item): If point is before all
+ the cross-references, use the first one as the default, instead of
+ setting which to -1 and crashing. (Patch originally sent 2000-10-09.)
+ Debian bug 74278, reported from: Josip Rodin <joy@cibalia.gkvk.hr>,
+ 7 Oct 2000 19:44:24 +0200.
+
+2003-10-26 Karl Berry <karl@gnu.org>
+
+ * configure.ac (AM_MAINTAINER_MODE): enable, to avoid lossage
+ when Texinfo sources are imported into other
+ repositories (NetBSD, TeX Live).
+ Most recently suggested by Thomas Klausner
+ <wiz@danbala.ifoer.tuwien.ac.at>, 9 Sep 2003 14:57:09 +0200.
+
+ * makeinfo/node.c (validate_file): ensure tem1 && tem2 before
+ running STREQ. Report from: Akim Demaille <akim@epita.fr>,
+ 13 Oct 2003 10:43:10 +0200.
+
+ * doc/Makefile.am (infokey.1): new target.
+ (man_MANS): include infokey.1.
+ Noticed this in Debian diff.
+
+ * util/texi2dvi: check for tex up front; inspired by Debian diff.
+
+ * TODO: makeinfo -E should do simple macro expansion, not
+ validity checking (even syntax, for @tex processing).
+
+ From: Stepan Kasal <kasal@ucw.cz>, 24 Oct 2003 19:10:02 +0200.
+ Start at making makeinfo -E behave more like a macro preprocessor,
+ avoiding consistency checks.
+ * makeinfo/insertion.c (cm_menu,cm_detailmenu): avoid checks if
+ macro_expansion_output_stream.
+ * makeinfo/makeinfo.c (main): set validating=0 if
+ macro_expansion_output_stream.
+
+ * util/texi2dvi (comment_iftex_sed): don't think we need to
+ comment out @ifhtml sections here, makeinfo will not expand them
+ by default.
+
+2003-10-25 Karl Berry <karl@gnu.org>
+
+ * info/info.c: --raw-escapes affects Info files, not just man
+ pages.
+
+ * doc/texinfo.tex: novalis doesn't like my clarification, so make
+ it a special exception instead.
+
+2003-10-24 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\defname): Cleanup of this macro.
+ (\boldbraxnoamp): Nuked, it's equivalent to \boldbrax;
+ the caller changed.
+ Other minor cleanups around active paretheses.
+ (\defunargs): After reporting the "Unbalanced paretheses" error,
+ reset the count.
+
+2003-10-24 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (makeinfo advantages): mention that plain text
+ --no-headers does --enable-encoding.
+
+2003-10-23 Karl Berry <karl@gnu.org>
+
+ * makeinfo/macro.c (define_macro): write the macro definition
+ itself to the output stream, to give texinfo.tex a chance at it.
+ Report from: Akim Demaille <akim@epita.fr>, 22 Oct 2003 17:15:34
+ +0200.
+
+ * doc/texinfo.tex (\readauxfile): make the \openout\auxfile be
+ \immediate, to avoid spurious terminal output from the
+ \immediate's in \setref.
+
+2003-10-23 Stepan Kasal <kasal@ucw.cz>
+
+ Rewrite \parsearg:
+ * doc/texinfo.tex (\parsearg, \parseargusing): \parseargusing is
+ a new macro which works just like good old \parsearg but takes
+ one more parameter which contains code to be performed within
+ a group just before we slurp the rest of the line---typically,
+ some catcode chages go here.
+ (\parseargx): Insert an \empty token before the arg to be read,
+ to prevent loosing of braces. (Thus @end{foo} no longer works.)
+ (\parseargline, \argremovecomment, \argremovec): Change the way
+ comments are stripped; do not use \toks0.
+ (\removeactivespaces): is now called directly from \parsearg (via
+ \parseargusing and \argremovec), and stripps only the trainling
+ active spaces, doesn't perform expansion.
+ (\finishparsearg): New macro, finishes \parsearg by nuking the
+ added \empty token.
+ (\end, \endxxx): Don't call \removeactivespaces, don't use \toks0;
+ because of efficiency, move the error handling to ...
+ (\badenderror): ... a new macro.
+ (\doverbatim): ``\end{verbatim}'' changed to ``\end verbatim.''
+
+ Cleanup of various details with active spaces.
+ (\parseargx): Do the \futurelet and move the rest ...
+ (\parseargy): ... to a new macro;
+ (\parseargusing): caller changed;
+ (\parseargdiscardspace): the other caller nuked.
+ (\obeyedspace, \sepspaces, \unsepspaces): Move near to \parsearg.
+ (\obeyedspace): Is now a macro containing the active space.
+ (\unsepspaces): No longer makes spaces active.
+ (\ignoreactivespaces): Nuked, it's only appearance in ...
+ (\aliasxxx): ... replaced by direct code.
+
+2003-10-23 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex: comments at top.
+
+ * AUTHORS: add kama. (kama's address is now khmarbaise@gmx.de.)
+
+2003-10-21 Karl Berry <karl@gnu.org>
+
+ * util/gendocs.sh: revision of mohit's original.
+ * util/Makefile.am (EXTRA_DIST): add gendocs.sh and
+ gendocs_template.
+
+2003-10-20 Karl Berry <karl@gnu.org>
+
+ * makeinfo/cmds.c (handle_include): only close_paragraph if
+ !insertion_stack, else we get extra blank lines when
+ used inside @example.
+ * makeinfo/insertion.c (handle_verbatim_include): likewise, plus
+ move the indentation around.
+ Report from: Brian Gough <bjg@network-theory.co.uk>,
+ 20 Oct 2003 14:36:49 +0100.
+
+ * makeinfo/makeinfo.c (close_paragraph): formatting changes to
+ minimize lines.
+
+ * makeinfo/insertion.c (end_insertion): for html output in the
+ example/etc. case, kill_self_indent to get rid of
+ leading whitespace.
+ Report from: Brian Gough <bjg@network-theory.co.uk>,
+ 20 Oct 2003 14:36:49 +0100.
+
+2003-10-16 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\shortcontbf): cmb10 scaled \magstep1, not cmb12,
+ since cmb12 is not a standard font.
+ Report from: Staszek Wawrykiewicz <staw@gust.org.pl>,
+ 16 Oct 2003 06:44:40 +0200.
+
+2003-10-14 Karl Berry <karl@gnu.org>
+
+ * lib/xstrdup.c: put old version back, we're not ready for gnulib
+ xmalloc yet.
+
+ * makeinfo/insertion.c: undo xml_no_para change, it causes more
+ problems than it solves, according to Alper (Ersoy, <dirt@gtk.org>).
+
+2003-10-12 Karl Berry <karl@gnu.org>
+
+ * makeinfo/insertion.c (begin_insertion,end_insertion): in rawhtml
+ case (also used for rawxml), increment and decrement xml_no_para.
+
+ * makeinfo/lang.c (cm_documentencoding): force the normal (info)
+ expansion when reading the arg, even when parsing xml/html/docbook.
+ Report from: Kevin Ryde <user42@zip.com.au>,
+ 13 Oct 2003 10:02:23 +1000.
+
+2003-10-09 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\chapterzzz,...,\unnumberedsubsubseczzz): make
+ section number settings \global. Otherwise, when chapters are
+ @included, they are ineffective and every chapter is numbered 1.
+ For instance, the Emacs and Elisp manuals. Thanks to Stepan for
+ analysis.
+
+ * doc/texinfo.tex: add arch-tag for miles.
+
+2003-10-08 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\onepageout): At the beginning of \shipout, call
+ \pdfdest directly, not via \pdfmkdest.
+ (\pdfmkdest): Call also \atdummies before \pdfdest.
+ (\donoderef): Remove the unsuccessful attempt to expand \lastnode
+ before passing it to \setref (it only expanded `{' twice);
+ things would screw up if \lastnode was expanded too much.
+ (\setref): Rewritten, don't call \atdummies, don't expand
+ \thissection.
+ (\dosetq, \internalsetq, \Ypagenumber, \Ytitle): Nuked.
+ (\chfplain): Remove referrence to \Ytitle from a comment.
+
+2003-10-08 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex: spurious space and comment (from Stepan).
+
+ * NEWS: automake 1.7.8.
+ * util/dir-example: include netpbm.
+
+2003-10-07 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\defbf, shortcontbf): use \bfshape instead of
+ \bxshape, so we use cmb consistently instead of cmbx.
+
+ * doc/texinfo.txi: more index entries for em/en dashes, fix
+ capitalizations of cindex entries.
+
+2003-10-07 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\defname): Don't use \ifempty.
+ (\ifempty): Nuke.
+
+2003-10-06 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\dosubind, \doind): Cleanup, move code ...
+ (\dosubindwrite, \dosubindsanitize): ... to new macros,
+ (\emptymacro): and nuke this one.
+
+ * doc/texinfo.tex (\Ypagenumber): Add `\noexpand,' so that ...
+ (\dosetq): ... doesn't have to redefine \folio. Move \iflinks ...
+ (\setref): ... here.
+
+2003-10-06 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\setdeffont): remove; this used DEF instead of
+ def, and thus had no effect for some years, so
+ clearly no one has been using it. Noticed by Stepan.
+
+2003-10-04 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi: document hyphen -> dash suppression in literal
+ contexts, and verbatim commands not working inside other commands.
+ Report from: Luc Teirlinck <teirllm@dms.auburn.edu>, 2 Oct 2003
+ 22:45:14 -0500,
+
+ * doc/texinfo.tex (\commondummies,\indexnofonts): no-op @verb; I
+ doubt this is sufficient to make @verb work in index entries etc.,
+ but it's a start. Analysis from: Andreas Schwab <schwab@suse.de>,
+ 02 Oct 2003 18:54:40 +0200.
+
+2003-09-28 Karl Berry <karl@gnu.org>
+
+ * TODO: add item for conversion of non-texinfo manuals.
+
+2003-09-26 Karl Berry <karl@gnu.org>
+
+ * CVSROOT/loginfo: back to log_accum.
+
+ * doc/texinfo.tex (\parsebodycommon): increase \penalty between
+ headers to 2000 from 0.
+ (\defxbodycommon): check for 10002, not 1000. We don't want to
+ allow a page break after a section heading. Hmm, but it seems
+ this should never be called next after a section heading?
+
+2003-09-25 Karl Berry <karl@gnu.org>
+
+ * makeinfo/cmds.c (cm_strong): warn if argument is exactly
+ "Note:", since that conflicts with Info usage. Suggestion from
+ rms.
+
+2003-09-24 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\dosubind): must propagate penalty after all,
+ because we insert a non-discardable item (the whatsit), which
+ makes following glue a breakpoint. Now I understand (maybe).
+ (\sectionheading): must end with \nobreak after
+ all, purely to make \lastpenalty 10000 so future code can check
+ that and avoid breaks.
+ (\parsebodycommon): such as this code; don't do a
+ \medbreak if lastpenalty >=10000.
+
+ * doc/texinfo.tex (\tocindent): decrease to 2pc.
+ (\{app,unn}sub{sub,}secentry): redefine so that they
+ indent properly.
+
+2003-09-23 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\dosubind): remove my misbegotten idea of
+ propagating the penalty; all that did was increase the chance of a
+ valid breakpoint. Bug report from: Werner LEMBERG <wl@gnu.org>,
+ 23 Sep 2003 15:47:31 +0200.
+ (\numhead,\apphead,\unnmhead): avoid spurious
+ blank spaces, for cleanliness.
+
+ * CVSROOT/loginfo: syncmail instead of external log_accum.
+ * doc/texinfo.tex (\sectionheading): remove extraneous \nobreak,
+ found by Stepan (of course).
+
+2003-09-22 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\sectionheading): the space below a section
+ heading should have fixed size; \nobreak after a \vskip is
+ redundant.
+
+2003-09-21 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\sectionheading): make space below be half of
+ space above, and don't add \parskip to space above. Suggestion
+ from Han-Wen Nienhuys <hanwen@cs.uu.nl>, implementation ideas from
+ Stepan Kasal <kasal@math.cas.cz>, 16 Sep 2003 11:30:43 +0200.
+
+2003-09-21 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\dosuppressfirstparagraphindent): change the
+ redefinition of \indent and \noindent and factor out common
+ parts of all redefinitions to ...
+ (\restorefirstparagraphindent): ... a new macro.
+
+2003-09-20 Karl Berry <karl@gnu.org>
+
+ * makeinfo/macro.c (cm_alias): do not expand when calling
+ get_until_in_line, since xml/docbook expansion is empty.
+ Report from: Richard Kreuter <kreuter@anduril.rutgers.edu>,
+ 17 Sep 2003 17:59:58 -0400.
+
+ * info/signals.c: Clear the screen when exiting from a SIGQUIT.
+ From: Wojciech Polak <polak@gnu.org>, 19 Sep 2003 10:27:28 +0200.
+
+2003-09-16 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\sectionheading): there is no need to insert
+ \nobreak before a kern which is not followed by
+ a glue. Such a kern is not a permissible breakpoint.
+
+2003-09-16 Simon Law <sfllaw@uwaterloo.ca>
+
+ * doc/texinfo.tex (\dosuppressfirstparagraph): Gobble \noindent
+ if it occurs in the first paragraph.
+ (\ptexnoindent): for saving/restoring \noindent in @tex.
+ (\footnote): Neutralise the effect of @noindent within a footnote.
+
+2003-09-16 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex: Changes to make pdf references go to the correct
+ place on the page. This is most easily testable
+ at high magnifications (I used 400% and 800%).
+ (\output): put \the\pageno pdfdest at very
+ beginning of \shipout.(\dopdfoutline): new macro.
+ (\pdfmakeoutlines): recompute all section numbers.
+ (\unnumberedno): \newcount.
+ (\chapterzzz,\appendixzzz,\unnumberedzzz,
+ ..., \unnumberedsubsubseczzz): abstract common
+ elements, keep track of numbering for everything.
+ (\doheading,\dosubheading,\dosubsubheading): call
+ \sectionheading directly instead of \plain*secheading.
+ (\chfplain, \sectionheading): take additional section type
+ argument; call \writetocentry and \donoderef.
+ (\unnchfopen): mention this is deprecated.
+ (\writetocentry): handle "omit" case, and
+ \global\pdfmakepagedesttrue.
+ (\startcontents, \summarycontents): sectioning
+ commands take an extra arg.
+ (\dosub*secentry): take extra arg with section
+ number; change callers.
+ (\pdfcatalog): move this call to the opening PDF
+ commands, for clarity.
+ (\unnumbnoderef): no longer needed, collapsed into
+ \donoderef.(\Yomitfromtoc): new xref constant.
+ (\Ynumbered,\Yappendix): renamed from
+ \Ysectionnumberedandtype and
+ \Yappendixletterandtype, for clarity.
+
+ * doc/texinfo.txi (cartouche): omit invalid @group.
+
+ * makeinfo/node.c (cm_node): restore accesskey= on the <link>s.
+ From hanwen.
+
+2003-09-15 Karl Berry <karl@gnu.org>
+
+ * util/dir-example: add guile-tut.
+
+ * info/session.c (info_follow_menus): take the first best_guess
+ rather than the last.
+ From: Rob Browning <rlb@defaultvalue.org>,
+ 15 Sep 2003 01:26:17 -0500.
+
+2003-09-13 Karl Berry <karl@gnu.org>
+
+ * automake 1.7.7.
+
+ * makeinfo/insertion.c (begin_insertion): start cartouche html output
+ with <p>. @cartouche can't be used meaningfully
+ within a paragraph.
+ Report from: Simon Josefsson <jas@extundo.com>,
+ 11 Sep 2003 19:25:20 +0200.
+
+2003-09-12 Karl Berry <karl@gnu.org>
+
+ * makeinfo/tests/html-manuals: include -I../../doc for case when
+ version-stnd.texi is in build tree.
+ From: ezra peisach <epeisach@med-xtal.bu.edu>,
+ 12 Sep 2003 13:53:32 -0400.
+
+2003-09-11 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Cartouche): document that @cartouche needs to
+ be outside the @example for HTML output to work. This
+ is painful to fix in the current makeinfo.
+ Report from: Simon Josefsson <jas@extundo.com>,
+ 11 Sep 2003 15:21:44 +0200.
+
+2003-09-10 Karl Berry <karl@gnu.org>
+
+ * makeinfo/sectioning.c (section_alist): add entry for centerchap,
+ so at least makeinfo does not bomb out. (No centering is actually
+ done.) From: Denys Duchier <duchier@ps.uni-sb.de>, 10 Sep 2003
+ 21:35:24 +0200.
+
+ * lib/system.h: __CYGWIN__ in comments, too.
+
+2003-09-09 Karl Berry <karl@gnu.org>
+
+ * bootstrap: --include=m4. From Werner.
+
+2003-09-08 Karl Berry <karl@gnu.org>
+
+ * lib/system.h: make that __CYGWIN__, not __unix__. From Eli.
+ * lib/system.h (DEFAULT_TMPDIR,PATH_SEP) [O_BINARY && !__unix__]:
+ new case for cygwin, from: Thomas Klausner
+ <wiz@danbala.ifoer.tuwien.ac.at>, 8 Sep 2003 13:43:29 +0200
+ (for cross-building netbsd).
+
+2003-09-04 Karl Berry <karl@gnu.org>
+
+ * texinfo.txi (Conventions): say more about quotations and dashes,
+ based on a report to help-texinfo from
+ David.Billinghurst@riotinto.com, 18 Jul 2003 16:07:00 +1000.
+
+ * NEWS: mention @tex/@iftex are executed in a group.
+
+2003-09-03 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Macro Details): mention some makeinfo
+ limitations too, from recent bug reports by Patrice Dumas
+ <dumas@centre-cired.fr> and (16 Jul 2003 17:21:56 +0200) Jesper
+ Harder <harder@ifa.au.dk>.
+ * makeinfo/macro.c (define_macro): "end rmacro" is 10 chars long.
+
+2003-08-29 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * makeinfo/lang.c (encoding_table): Downcase coding system
+ names, since Emacs does not recognize the uppercase names.
+
+ * makeinfo/lang.h: doc fixes.
+
+2003-08-28 Karl Berry <karl@gnu.org>
+
+ * bootstrap: new file (cvs only).
+ * README.dev: mention it.
+ Report from hanwen@cs.uu.nl, sample script from
+ Akim Demaille <akim@epita.fr>.
+ * aclocal.m4: remove from cvs repository.
+
+2003-08-26 Karl Berry <karl@gnu.org>
+
+ * makeinfo/node.c (cm_node): add <LINK> tags. This will produce a
+ navigation bar in Mozilla 1.4 (and perhaps earlier). Original
+ code from Han-Wen Nienhuys <hanwen@cs.uu.nl>.
+
+2003-08-23 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi: Run tex --help in $tmpdir, to avoid leaving
+ texput.log for old TeX versions. Report from Patrick Welche
+ <prlw1@newn.cam.ac.uk>, patch from Akim.
+
+2003-08-20 Karl Berry <karl@gnu.org>
+
+ * makeinfo/defun.c (cm_defun): skip @ifset/@ifclear insertions
+ when looking for the @defun going with this @defunx. Report from:
+ Akim Demaille <akim@epita.fr>, 14 Aug 2003 12:10:37 +0200.
+
+ * makeinfo/insertion.c (cm_end): rewrite error message for
+ clarity.
+
+2003-08-13 Karl Berry <karl@gnu.org>
+
+ * info/indices.c (info_index_apropos): correct typo, whoses ->
+ whose. From: Jesper Harder <harder@ifa.au.dk>, 13 Aug 2003
+ 14:49:26 +0200.
+
+2003-08-11 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex: excise spurious spaces, etc.
+
+2003-08-09 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi: don't use @ifinfo/@heading construct to replace
+ @section any more, the XML output is wrong.
+
+ * doc/texinfo.tex (\pdfmakeoutlines): doc fixes, and use \def once
+ instead of \let twice.
+
+ * doc/texinfo.txi: rewrite @ifinfo text sections to take better
+ account of HTML. Suggestion from: Dumas Patrice
+ <dumas@centre-cired.fr>, 8 Aug 2003 17:19:22 +0200.
+
+2003-08-07 Derek Price <derek@ximbiot.com>
+
+ * makeinfo/insertion.c (cm_direntry): Skip @direntry in --no-headers
+ mode.
+
+2003-08-05 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Beginning a File, title, titlefont): more
+ clarifications. Suggestions from Patrice.
+
+ * doc/texinfo.txi (emph & strong): inconsistent source & example.
+ From Jesper Harder.
+
+2003-08-04 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (titlefont): discuss html output a bit.
+ Suggestion from Patrice.
+
+2003-07-31 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (\doignorecount): no need to initialize.
+ (\doignoreyyy): doc fix.
+ From Stepan.
+
+2003-07-29 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\doignorecount): No need to initialize the
+ count while reading texinfo.tex.
+ (\doignoreyyy): Tiny comment change.
+
+2003-07-28 Karl Berry <karl@gnu.org>
+
+ * makeinfo/html.c (process_css_file): @c (for @charset) should
+ also put us into import_state.
+
+ * doc/texinfo.txi (Conditional Nesting): new section; also change
+ other conditional sections slightly.
+
+ * doc/texinfo.tex (\doignoretext, \doignoretextyyy): Only look for
+ conditionals at the beginning of a line, to avoid problems with a
+ commented conditional. Fix from: Stepan Kasal
+ <kasal@math.cas.cz>, 28 Jul 2003 02:50:41 +0200.
+
+2003-07-27 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\doignore): Rewritten to handle nesting.
+ (\ignoremorecommands, \obstexwarn, \ifwarnedobs): No longer needed.
+ (\nestedignore): No longer needed.
+ (\readauxfile): Remove reference to \warnedobstrue.
+
+2003-07-27 Karl Berry <karl@gnu.org>
+
+ * util/dir-example: lowercase automake.
+
+2003-07-26 Karl Berry <karl@gnu.org>
+
+ * makeinfo/html.c (process_css_file): in null_state, only consider
+ @i to be the start of an @import, since @media can get misparsed.
+ Report from: Dumas Patrice <dumas@centre-cired.fr>, 22 Jul 2003
+ 12:13:29 +0200.
+
+2003-07-25 <karl@gnu.org>
+
+ * doc/texinfo.txi (Raise/lower sections): mention difficulties with
+ node pointer creation and top nodes.
+ Report from: Dumas Patrice <dumas@centre-cired.fr>,
+ 22 Jul 2003 13:08:24 +0200.
+
+2003-07-24 <karl@gnu.org>
+
+ * makeinfo/sectioning.c (what_section): take additional SECNAME
+ argument; change callers.
+ * makeinfo/sectioning.h (what_section): remove redundant decl.
+ * makeinfo/node.c (cm_node): change what_section call here, too.
+ Report from: Dumas Patrice <dumas@centre-cired.fr>,
+ 22 Jul 2003 13:09:19 +0200.
+
+ * doc/texinfo.tex (\doheading,\dosubheading,\dosubsubheading):
+ rationalize names.
+ (\heading,\subheading,\subsubheading): change
+ calls. (yesterday's patch called the undefined
+ \subsecheadingyyy, etc.)
+
+2003-07-23 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/texinfo.tex (\heading, \subheading, \subsubheading): Call
+ \suppressfirstparagraphindent after setting the heading.
+ (\headingyyy, \subheadingyyy, \subsubheadingyyy): New macros.
+ (\chapheadingzzz): Call \suppressfirstparagraphindent at the end
+ and move \chapbreak ...
+ (\chapheading): ... here.
+ (\majorheading): Do a modified \chapbreak, then call \chapheadingzzz.
+ (\majorheadingzzz): Deleted.
+
+2003-07-16 <karl@gnu.org>
+
+ * doc/texinfo.txi (makeinfo Pointer Creation): must pxref Menus,
+ since Menu Location is not a valid xref point for
+ TeX, because of the special @heading stuff.
+
+ * makeinfo/insertion.c (begin_insertion): lack of */ caused
+ display: and smalldisplay: cases to be ignored.
+
+ * lib/system.h (LC_MESSAGES) [!defined (HAVE_LC_MESSAGES) &&
+ !defined (LC_MESSAGES)]: change conditional. Report from
+ Christian Krackowizer <ckrackowiz@std.schuler-ag.com>, 16 Jul 2003
+ 14:40:30 +0200.
+
+2003-07-14 <karl@gnu.org>
+
+ * util/install-info.c (ensure_dirfile_exists): replace literal ^_ with
+ \x1f. Report from Trond Endrestøl
+ <trond@ramstind.gtf.ol.no>, 14 Jul 2003 13:31:29 +0200.
+
+ * makeinfo/sectioning.c (sectioning_html): forgot to change closing </hN>
+ to match opening <hN> (that is, maximum h3).
+ Report from: Jesper Harder <harder@ifa.au.dk>,
+ 14 Jul 2003 15:04:04 +0200.
+
+2003-07-03 <karl@gnu.org>
+
+ * doc/info.texi: copy from Emacs (with revisions by Luc).
+
+2003-07-02 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi: Add thumbpdf support.
+ Use FD 6 instead of /dev/null so that when --debugging, the output
+ from auxiliary tools can be observed.
+
+2003-07-02 <karl@gnu.org>
+
+ * doc/texinfo.txi (kbd): document actual makeinfo behavior.
+
+2003-07-01 <karl@gnu.org>
+
+ * doc/texinfo.txi (Menus): require that menus come at the end of the
+ node, since Info readers can't determine the end
+ of a menu.
+ Report from: Luc Teirlinck <teirllm@dms.auburn.edu>,
+ 29 Jun 2003 21:33:19 -0500.
+
+ * makeinfo/insertion.c (begin_insertion): do not increment
+ in_fixed_width_font for @display or @format; this
+ incorrectly caused quotes to be omitted in @kbd
+ output in those environments.
+ Report from: Luc Teirlinck <teirllm@dms.auburn.edu>,
+ 26 Jun 2003 21:59:48 -0500.
+
+2003-06-24 <karl@gnu.org>
+
+ * doc/texinfo.txi (tex): misplaced period.
+ From: Jesper Harder <harder@ifa.au.dk>.
+ (GNU Sample Texts): don't end the $Id index entries with a :.
+ Report from: Luc Teirlinck <teirllm@dms.auburn.edu>.
+
+2003-06-20 <karl@gnu.org>
+
+ * makeinfo/defun.c (process_defun_args): only insert the HTML
+ start/end tags if we're actually generating html.
+ Report from: Shawn Betts <sabetts@sfu.ca>, 12 Jun 2003
+ 16:48:50 -0700.
+
+ * TODO: support translated manuals, from polak@gnu.org.
+
+ * doc/texinfo.txi: Edit Options node no longer exists in the Emacs
+ manual. From: Luc Teirlinck <teirllm@dms.auburn.edu>.
+
+2003-06-18 <karl@gnu.org>
+
+ * config.{guess,sub}, install-sh, lib/xalloc.h: update from gnulib.
+
+2003-06-10 <karl@gnu.org>
+
+ * version 4.6.
+
+
+Copyright 2003, 2004, 2005, 2006, 2007, 2008 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.
diff --git a/ChangeLog.46 b/ChangeLog.46
new file mode 100644
index 0000000..c495abf
--- /dev/null
+++ b/ChangeLog.46
@@ -0,0 +1,12516 @@
+2003-06-10 <karl@gnu.org>
+
+ * version 4.6.
+
+2003-06-04 <karl@gnu.org>
+
+ * config.sub: update from gnulib.
+
+2003-06-03 <karl@gnu.org>
+
+ * mkinstalldirs: update from gnulib.
+
+2003-06-02 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi (tex_envvars): New.
+ Use it to forward -I directories to BIBINPUTS and BSTINPUTS, in
+ addition of INDEXSTYLE and TEXINPUTS.
+
+2003-06-02 <karl@gnu.org>
+
+ * makeinfo/html.c (html_output_head): don't output the <link>, to
+ avoid having mozilla put up a document navigation bar when
+ we don't have anything else to support it yet. Report from:
+ Per Bothner.
+ * makeinfo/makeinfo.c: no need to declare add_link or
+ add_escaped_anchor_name, since they are not used.
+
+ * doc/texinfo.txi (Contents): recommend @contents at the beginning
+ more strongly. Suggestions from Kevin Ryde.
+
+2003-06-01 <karl@gnu.org>
+
+ * makeinfo/macro.c (apply): make \\ expand to \ even if the macro
+ has no arguments. Report from: Jesper Harder <harder@ifa.au.dk>,
+ 31 May 2003 02:56:20 +0200.
+
+2003-05-31 <karl@gnu.org>
+
+ * util/dir-example (C++ libraries): new category, suggested by Bruno.
+
+2003-05-29 <karl@gnu.org>
+
+ * configure.ac: pretest version 4.5.93.
+
+2003-05-29 gettextize <bug-gnu-gettext@gnu.org>
+
+ * configure.ac (AM_GNU_GETTEXT_VERSION): Bump to 0.12.1.
+
+2003-05-26 <karl@gnu.org>
+
+ * util/texi2dvi: spurious \ in tex_args assignment.
+
+ * doc/texinfo.txi (Contents): trim excess words.
+
+2003-05-25 <karl@gnu.org>
+
+ * util/texi2dvi: extra quotes for the tex_args assignment in
+ --batch mode.
+
+2003-05-19 <karl@gnu.org>
+
+ * lib/xexit.c: translate fflush error messages, add newlines
+ (report from Jim Meyering).
+ * util/{texindex.c,install-info.c},
+ * makeinfo/makeinfo.c,
+ * info/info.c: use xexit again, with redundant return to avoid
+ warnings.
+
+2003-05-18 <karl@gnu.org>
+
+ * lib/xexit.c (xexit): fputs not fprintf, so we get newline;
+ translate the messages, too. Report from Jim Meyering.
+
+ * util/dir-example: move gcc/automake entries.
+
+ * pretest version 4.5.92.
+
+ * update to automake 1.7.5.
+
+ * makeinfo/html.c (append_char): forgot to increment length, duh.
+ Report from: "Torsten Bronger" <bronger@physik.rwth-aachen.de>,
+ 18 May 2003 14:36:23 +0200.
+
+2003-05-17 <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (defining_copying): new fn.
+ (add_char): call it, when testing if we should
+ call html_output_head.
+ Report from: Torsten Bronger <bronger@physik.rwth-aachen.de>,
+ 17 May 2003 22:10:42 +0200.
+
+ * configure.ac: pretest version 4.5.91.
+
+2003-05-16 <karl@gnu.org>
+
+ * makeinfo/index.c (sort_index): don't deref NULL. Report from Jan.
+
+2003-05-13 <karl@gnu.org>
+
+ * makeinfo/html.c (append_char): appease sgi compiler.
+ * makeinfo/html.c (insert_html_tag): remove spurious arg to pop_tag,
+ From: ezra peisach <epeisach@med-xtal.bu.edu>, 13
+ May 2003 12:13:40 -0400.
+
+ Fix a few GCC warnings, reported by Jim Meyering:
+
+ * info/nodes.c: parenthesize assignment used as truth value.
+ * info/nodemenu.c (format_node_info): strcpy instead of sprintf,
+ since there's no format.
+ * makeinfo/makeinfo.c (isolate_nodename): remove spurious decl.
+ * makeinfo/xml.c (xml_insert_indexterm): declare as void.
+ * info/key.c: initialize with 0,0 at end.
+ * info/infokey.c (main): return instead of xexit, and remove
+ unused variable.
+ * makeinfo/html.c (init_buffer): forgot to return buf.
+ * info/info.c (remember_info_program_name): remove spurious
+ declaration.
+
+ * makeinfo/sectioning.c,
+ * info/infomap.c: remove unused variables.
+
+ * makeinfo/makeinfo.c (insert_toplevel_subdirectory),
+ * info/man.c,
+ * info/infodoc.c (info_find_or_create_help_window): parenthesize
+ && within ||.
+ * info/display.c (display_update_one_window): initialize rep to
+ NULL, parenthesize && within ||.
+
+ * util/install-info.c,
+ * info/info.c (main),
+ * info/makedoc.c (main): return instead of xexit.
+
+2003-05-13 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi (get_xref_files): Pass --file-line-error-style
+ to TeX when supported.
+
+2003-05-12 <karl@gnu.org>
+
+ * configure.ac: pretest version 4.5.90.
+
+ * Makefile.am (EXTRA_DIST): add onceonly.m4.
+
+ * makeinfo/tests/accentenc: must discard stderr since we expect
+ two errors in this case.
+
+ * makeinfo/makeinfo.c (main): new option --css-include.
+ (usage): add to --help message.
+ * makeinfo/makeinfo.h (css_include): new global.
+ * makeinfo/html.c (append_char, process_css_file): new fns
+ implementing it.
+ (html_output_head): call it.
+ * doc/texinfo.txi (HTML CSS): new node describing it.
+ Also split up the Generating HTML node into subnodes.
+
+ * config.{guess,sub}: update from gnulib.
+
+2003-05-10 <karl@gnu.org>
+
+ * makeinfo/index.c (sort_index): allocate the sorted index in new
+ memory, and set the original index to that, to avoid problems with
+ @printindex being called twice on the same index.
+ (cm_printindex): do not free the returned index.
+ Report from: Dumas Patrice <dumas@centre-cired.fr>, 9 May 2003
+ 15:12:21 +0200.
+
+2003-05-09 <karl@gnu.org>
+
+ * makeinfo/defun.c (cm_defun): issue error message without extra
+ x's. Report from: Dumas Patrice <dumas@centre-cired.fr>, 9 May
+ 2003 17:24:25 +0200.
+
+2003-05-07 Akim Demaille <akim@epita.fr>
+
+ * util/texi2dvi (textra_cmd): New.
+ (textra): Escape escapes from sed's evaluation.
+ Use them to support additional TeX/LaTeX commands.
+ Support --command as a synonym for --texinfo.
+
+2003-05-06 <karl@gnu.org>
+
+ * util/dir-example: finish getting rid of GNU packages.
+
+2003-05-04 <karl@gnu.org>
+
+ * doc/texinfo.tex (\itemizey): if no arg to @itemize, default to
+ @bullet. Fix from: Stepan Kasal <kasal@math.cas.cz> 2 May 2003
+ 09:32:11 +0200, report from: Jesper Harder <harder@ifa.au.dk>.
+
+2003-04-30 <karl@gnu.org>
+
+ * makeinfo/.gdbinit: no colon on local variables.
+
+ * doc/texinfo.txi (documentencoding): Document new Info output feature.
+ makeinfo/lang.h (encoding_type): rename `ecname' member to `encname'.
+ makeinfo/html.c, lang.c: change usage.
+ makeinfo/lang.c (cm_documentencoding): fix typo in warning.
+ makeinfo/makeinfo.h (SPLIT_SIZE_THRESHOLD): remove.
+ (info_trailer): declare.
+ makeinfo/makeinfo.c (info_trailer): new fn to generate Local
+ Variables: section if --enable-encoding and
+ @documentencoding are given.
+ (convert_from_loaded_file): call it.
+ * makeinfo/node.c (split_file): write trailer into each split
+ file. Also, simply split files if file size is less than
+ --split-size, removing SPLIT_SIZE_THRESHOLD.
+
+ * doc/texinfo.tex: remove trailing whitespace.
+
+2003-04-29 <karl@gnu.org>
+
+ * makeinfo/node.c (cm_anchor): normalize_node_name so that an
+ anchor named "TOP" or "top" or whatever is not allowed. Report
+ from: Dumas Patrice <dumas@centre-cired.fr>, 29 Apr 2003 18:56:51
+ +0200.
+
+2003-04-28 <karl@gnu.org>
+
+ * makeinfo/makeinfo.c: whitespace cleanup.
+
+ * doc/texinfo.tex (\doprintindex): don't \kern-\parindent, it makes
+ the first index entry stick out to the left.
+ Report from: Jesper Harder <harder@ifa.au.dk>,
+ 28 Apr 2003 03:10:36 +0200.
+
+ From Akim Demaille <akim@epita.fr>:
+ * makeinfo/makeinfo.c (cm_value): Warn for undefined flags.
+
+2003-04-27 <karl@gnu.org>
+
+ * doc/texinfo.tex (\footnote, \smartitalicx): use \ptexslash
+ for italic correction instead of \/, since we've redefined \/ now.
+ Report from: Jesper Harder <harder@ifa.au.dk>, 27 Apr 2003
+ 23:30:29 +0200.
+
+ * util/dir-example (mailutils): more from Wojciech Polak.
+ (autoconf): align/edit/sort entries.
+
+2003-04-26 <karl@gnu.org>
+
+ * doc/texinfo.txi (Image Syntax): second and following @image args
+ optional. Report from: Max Techter <mtechter@gmx.de>, 26 Apr 2003
+ 15:50:02 +0200.
+
+ * util/dir-example (anubis): request from Wojciech Polak.
+
+2003-04-25 <karl@gnu.org>
+
+ * makeinfo/defun.c (defun_internal): whitespace needed in docbook
+ output for deftype*. From: José Fonseca
+ <j_r_fonseca@yahoo.co.uk>, 25 Apr 2003 13:07:13 +0100.
+
+2003-04-21 <karl@gnu.org>
+
+ * doc/texinfo.tex (\dofirstparagraphindent): forgot to rename the
+ \...word's.
+ (\suppressfirstparagraphindent): forgot to rename
+ to \dosuppress... Reported by Simon.
+
+2003-04-20 <karl@gnu.org>
+
+ * Installed changes from Simon for suppressing indentation on the
+ first paragraph after section headings, and for new @indent command:
+
+ 2003-04-12 Simon Law <sfllaw@engmail.uwaterloo.ca>
+ * doc/texinfo.tex (\firstparagraphindent): implement suppression
+ of the indentation of the first paragraph.
+ (\dofirstparagraphindent): for parsing arguments.
+ (\suppressfirstparagraphindent): suppress, or don't suppress.
+ (\dosuppressfirstparagraphindent): the actual gobbling of indentation.
+ (\footnote): Compensate for the hanging-indent side-effect.
+ (\numhead, \apphead, \unnmhead): call \dosuppress...
+ * makeinfo/cmds.c (command_table): add "firstparagraphindent"
+ (as cm_firstparagraphindent)
+ (set_firstparagraphindent, cm_firstparagraphindent): implement
+ @firstparagraphindent parsing of options.
+ * makeinfo/makeinfo.h: declare "do_first_par_indent".
+ * makeinfo/sectioning.c (sectioning_underscore): suppress
+ indentation if requested.
+ * doc/texinfo.txi: document it.
+
+ * doc/texinfo.tex (\indent): override \indent primitive to
+ clear \everypar.
+ (\ptexindent): for saving/restoring \indent in @tex.
+ (\footnote): Neutralise the effect of @indent
+ within a footnote.
+ * makeinfo/cmds.c (command_table): add "indent" (as cm_indent).
+ (cm_indent): un-inhibit_paragraph_indentation.
+ * doc/texinfo.txi: document it.
+
+ * doc/texinfo.txi (Conventions): remove spurious extra vertical space
+ from bulleted itemize which starts with a quote.
+
+ * makeinfo/cmds.c (command_table): fix @novalidate definition.
+
+
+ * Installed changes from Jan for @image support in Info format:
+
+ 2003-04-14 Jan Nieuwenhuizen <janneke@gnu.org>
+ * info/display.c (display_update_one_window): Skip new style
+ image tag/cookie.
+
+ 2003-04-09 Jan Nieuwenhuizen <janneke@gnu.org>
+ * makeinfo/makeinfo.c (cm_image): Write ^@^H[image ...^@^H] tag.
+
+
+ * makeinfo/html.c (html_output_head): use <style> to get the
+ regular roman font instead of typewriter for @format and @display;
+ likewise to reduce the font size for @small*. Suggestion from:
+ "Torsten Bronger" <bronger@physik.rwth-aachen.de>, 20 Apr 2003
+ 11:03:59 +0200.
+
+2003-04-18 <karl@gnu.org>
+
+ * configure.ac (ncurses/termcap.h): move test to after termlib's
+ definition, of course. Reported by Norton Allen
+ <allen@huarp.harvard.edu>, 18 Apr 2003 13:31:35 -0400.
+
+ * configure.ac: remove comma from comment in AC_TRY_LINK program,
+ to avoid spurious misinterpretation as an argument delimiter.
+
+2003-04-08 <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (usage): avoid double blank line.
+
+2003-04-05 <karl@gnu.org>
+
+ * Makefile.am (all of them): use $(VAR) instead of @VAR@, since
+ automake now emits definitions for all substituted variables.
+
+ * makeinfo/makeinfo.h (DEFAULT_SPLIT_SIZE): increase to 300,000.
+ (SPLIT_SIZE_THRESHOLD): increase to 500,000.
+ Implicit suggestion via Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>.
+
+2003-04-04 <karl@gnu.org>
+
+ * util/texi2dvi (replace_empty): new variable to do the empty path
+ element detection; don't hardwire path separator as :.
+
+2003-04-02 <karl@gnu.org>
+
+ * doc/txi-pl.tex: new file, from polak@gnu.org.
+ * doc/Makefile.am (TXI_XLATE): add it.
+
+2003-04-01 <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (main): correct wording of html/no-headers/split
+ error message, and don't complain if output is to stdout.
+
+ * makeinfo/insertion.c (end_insertion): for @end menu html output,
+ don't output </ul> if no_headers. Report from: Jesper
+ Harder <harder@ifa.au.dk>, 01 Apr 2003 00:00:37 +0200.
+
+ * info/infomap.c (fetch_user_maps): don't complain if .info
+ doesn't exist.
+
+2003-03-31 <karl@gnu.org>
+
+ * makeinfo/lang.c (iso8859_2_map): new encoding map.
+ (encoding_table): enable it.
+
+ * info/pcterm.c (pc_up_line): use MAX instead of max (no longer
+ defined). Reported by Richard Dawes.
+
+ * doc/texinfo.txi (documentencoding): mention that all processors
+ recognize the command.
+
+2003-03-30 <karl@gnu.org>
+
+ * makeinfo/lang.c (cm_special_character): incorrectly added html
+ sequences for @oe and @OE even in info output.
+
+2003-03-25 <karl@gnu.org>
+
+ * util/srclist.txt (COPYING): get from gnulib/doc, not gnulib.
+
+2003-03-24 <karl@gnu.org>
+
+ * TODO: need to write real definition of Info format.
+
+ * makeinfo/node.c (cm_node): use &nbsp; instead of ` ', to avoid
+ line breaks.
+
+2003-03-22 <karl@gnu.org>
+
+ * makeinfo/node.c (cm_node): output a space after the Node: and
+ similar headers, since Bob wants one.
+
+ * info/pcterm.c (MIN,MAX): moved to system.h.
+ * info/session.c (MIN): moved to system.h.
+ * makeinfo/sectioning.c (MIN): move to system.h.
+ * lib/system.h (MIN,MAX): define here.
+
+ * makeinfo/sectioning.c (sectioning_html): don't go smaller than <h3>.
+ Reported by Bob.
+ (MIN): new macro.
+
+ * info/session.c (MIN) [MIN]: #undef first if already #define'd.
+
+ * doc/texinfo.tex (\nodexxx): use a control sequence instead of
+ brackets to parse the parts of @node. Otherwise node names with
+ brackets cause spurious output. Reported by Bob.
+ (\xrefprintnodename): separate this out from
+ \xrefX, for easier redefining by Bob.
+
+2003-03-18 <karl@gnu.org>
+
+ * makeinfo/insertion.c (cm_item): ensure we don't go off the end
+ of the string when using strncmp. From: Peter N Lewis
+ <peter@stairways.com.au>, 13 Mar 2003 16:08:27 +0800.
+
+ * doc/texinfo.txi (Raw Formatter Commands): mention using \gdef
+ within @tex, not \def.
+
+2003-03-12 <karl@gnu.org>
+
+ * doc/texinfo.txi (Preparing for TeX): mention extra colons.
+
+2003-03-07 <karl@gnu.org>
+
+ * doc/texinfo.tex (\/): new command to allow a line break.
+ (\ptexslash): for saving/restoring primitive \/ in @tex.
+ * makeinfo/cmds.c (command_table): add "/" (as cm_no_op).
+ * makeinfo/makeinfo.c (self_delimiting): add /.
+ * doc/texinfo.txi (Line Breaks, Command Summary): document it.
+ Suggestion from wl.
+
+ * doc/texinfo.tex (\hyphenation): time-stamp.
+
+2003-03-06 <karl@gnu.org>
+
+ * info/session.c (nearest_xref): new fn.
+ (info_menu_or_ref_item): call it when we are
+ searching for xrefs, instead of just looking on
+ the current line.
+ * info/info-utils.c (info_copy_reference): new fn.
+ * info/info-utils.h (info_copy_reference): declare.
+ Bug report from: rich@phekda.freeserve.co.uk,
+ 04 Mar 2003 17:51:47 +0000.
+
+ * */.gdbinit: set env MALLOC_CHECK_.
+
+ 2003-03-06 Ralph Schleicher <rs@nunatak.allgaeu.org>
+ * makeinfo/files.h (get_file_info_in_path): Declare function.
+ * makeinfo/files.c (get_file_info_in_path): Remove static keyword.
+ * makeinfo/makeinfo.c (cm_image): Lookup image file name in the
+ search path for include files.
+
+2003-03-05 <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (insert_toplevel_subdirectory): always make
+ subdirectory for html. Before, if the current directory happened
+ to be named `foo' and the @setfilename was foo.info, we would
+ write the split html files into the current directory. Reported
+ by rich@phekda.freeserve.co.uk, 01 Mar 2003 12:03:13 +0000.
+
+ * makeinfo/files.c (filename_part): simplify assignment.
+
+2003-02-24 <karl@gnu.org>
+
+ * makeinfo/insertion.c (get_item_function): check for @item in
+ argument to @itemize. Report from: Dumas Patrice
+ <dumas@centre-cired.fr>, 24 Feb 2003 13:13:52 +0100.
+
+ * makeinfo/makeinfo.c (remember_brace): say `braces' instead of
+ `{...}', since often we don't actually expect text inside the
+ braces.
+
+2003-02-21 <karl@gnu.org>
+
+ * aclocal.m4: automake 1.7.3.
+
+2003-02-19 <karl@gnu.org>
+
+ * doc/info-stnd.texi: omit all node pointers.
+
+2003-02-18 <karl@gnu.org>
+
+ * util/texindex.c (maketempname): use already-set `tempdir' instead
+ of half-redoing the logic.
+ (concat): only need two args, not three; change callers.
+ (perror_with_name): really call perror, putting
+ the name first a la gcc.
+ (pfatal_with_name): call perror_with_name.
+
+ * util/texi2dvi (get_xref_files): a file whose first line is
+ \input texinfo is not an index file. Report from: Anton Ertl
+ <anton@a0.complang.tuwien.ac.at>, 18 Feb 2003 14:41:47 +0100.
+
+2003-02-16 <karl@gnu.org>
+
+ * makeinfo/index.c (init_indices): don't try to free indexes that
+ undefindex already freed. Report from: Arkadiusz
+ Miskiewicz <misiek@pld.ORG.PL>,
+ 15 Feb 2003 13:22:49 +0100.
+
+ * configure.ac (curses): forgot to quote arg to AC_TRY_LINK.
+ From vojta and te, 16 Feb 2003 01:37:09 +0100.
+
+2003-02-13 <karl@gnu.org>
+
+ * makeinfo/insertion.c (begin_insertion): for html cartouche
+ output, add class="cartouche". Suggestion from Stephen.
+
+2003-02-11 <karl@gnu.org>
+
+ * Installed patch:
+ 2003-02-10 Peter Breitenlohner <peb@mppmu.mpg.de>
+ * info/indices.c, info/info.c, info/info.h, info/nodemenu.c,
+ info/session.c, info/window.c, makeinfo/defun.c, makeinfo/html.c,
+ makeinfo/index.c, makeinfo/insertion.c, makeinfo/makeinfo.c,
+ makeinfo/makeinfo.h, makeinfo/node.c: declare all constant
+ strings as such in order to avoid lots of gcc warnings (for
+ --disable-nls and maybe without that as well).
+
+ * doc/texinfo.tex (\registeredsymbol): new command for Arnold.
+
+ * util/dir-example: dc to basics.
+
+ * doc/texinfo.txi (Defining Macros): document new requirements on
+ macro names. Report from: Alper Ersoy
+ <dirt@gtk.org>, 11 Feb 2003 05:11:35 +0200.
+
+2003-02-07 <karl@gnu.org>
+
+ * makeinfo/insertion.c (begin_insertion): output a table with a border
+ for @cartouche.
+ (end_insertion): end the table.
+ From: Joshua N Pritikin <vishnu@pobox.com>,
+ 7 Feb 2003 21:59:49 +0530.
+
+2003-02-05 <karl@gnu.org>
+
+ * info/info.c (short_options): add h.
+ (main): treat -h same as --help.
+ From: rwhron@earthlink.net, 31 Aug 2002 19:56:57 -0400.
+
+ * info/session.c (show_isearch_prompt): compute length of
+ translated "Failing ", don't assume 20 is enough.
+ (It's 21 bytes in UTF-8 Russian.)
+ Report from: varg@thsun1.jinr.ru,
+ 25 Jul 2002 15:26:42 +0400.
+
+ * info/display.c (display_update_one_window): don't derefence null
+ `entry' (if the screen is very small).
+ From: Danny Yoo <dyoo@hkn.eecs.berkeley.edu>,
+ 8 Jul 2002 15:21:14 -0700.
+
+ * doc/.cvsignore: ignore *.info and texput.log.
+
+2003-02-04 <karl@gnu.org>
+
+ * Version 4.5 (that info bug was a killer).
+
+ * configure.ac (AC_CHECK_HEADERS): test for sys/stream.h.
+ (sys/ptem.h): write separate test since it needs
+ sys/stream.h on Solaris. From: Lars Hecking
+ <lhecking@nmrc.ucc.ie>, 4 Feb 2003 19:47:54 +0000.
+
+ * doc/texinfo.txi: comment about using @example instead of
+ @verbatim due to automake doesn't apply any more.
+
+2003-02-03 <karl@gnu.org>
+
+ * doc/texinfo.tex (\verbatiminclude): use \other instead of 12.
+
+2003-02-02 <karl@gnu.org>
+
+ * doc/texinfo.tex (\cartouche): explicit \par, as @cartouche does
+ not work inside a paragraph.
+ Bug report from: Stephen Gildea <gildea@intouchsys.com>,
+ 15 Oct 1999 09:25:31 EDT.
+
+2003-02-01 <karl@gnu.org>
+
+ * util/fix-info-dir, util/gen-dir-node, util/install-info-html,
+ util/tex3patch, util/txitextest: test && test instead of test -a, etc.
+ From: Paul Eggert <eggert@twinsun.com>,
+ 31 Jan 2003 22:59:35 -0800.
+
+2003-01-31 <karl@gnu.org>
+
+ * doc/texinfo.tex (\groupbox): \newbox.
+ (\vfilllimit): new \def.
+ (\group): insert an explicit \page if the group is
+ big, and doesn't fit on the current page.
+ Otherwise, the previous page gets stretched unreasonably.
+ From: Werner LEMBERG <wl@gnu.org>,
+ 31 Jan 2003 19:19:33 +0100.
+
+ * doc/texinfo.tex (\defargscommonending): insert \penalty10002.
+ (\parsebodycommon): check for \penalty10002 to
+ allow a breakpoint between @def's, not 10000.
+
+ * doc/texinfo.tex (\defargscommonending): new macro.
+ (\defunargs, etc.): call it, instead of repeating code.
+ (No functional change.)
+
+ * info/filesys.c (extract_colon_unit): return last colon unit
+ before claiming we're done. Report from: Alexandre Duret-Lutz
+ <duret_g@lrde.epita.fr>, 31 Jan 2003 18:18:22 +0100.
+
+ * Version 4.4.
+
+2003-01-30 <karl@gnu.org>
+
+ * doc/texinfo.tex (\dosubind): need full expansion of the index
+ sort string.
+
+ * doc/texinfo.tex (\startcontents,\contents,\shortcontents):
+ assignments to \pageno must be \global; otherwise
+ if it's run inside a group, as in
+ @ifnothtml
+ @contents
+ @end ifnothtml
+ the rest of the pages in the document get roman numerals.
+ Reported by rlp.
+
+ * doc/texinfo.tex (\dosubind): need space between entry and
+ subentry in printed output. Bug report from: Robin Lee Powell
+ <rlpowell@digitalkingdom.org>, 30 Jan 2003 15:13:48 -0800.
+ (\defophead, \defcvarhead, \defivarheader): show
+ method name in \code.
+
+ * doc/texinfo.tex (\dosubind): need to \vskip-\skip0, not
+ -\lastskip, since \lastskip gets cleared by the \nobreak. Bug
+ report from: Werner LEMBERG <wl@gnu.org>, 29 Jan 2003 09:18:16
+ +0100.
+
+2003-01-29 <karl@gnu.org>
+
+ * info/signals.c (initialize_info_signal_handler): initialize the
+ sigaction struct here, not statically, since we can't rely on the
+ ordering of the elements; it's different on IRIX and FreeBSD, at
+ least. Patch from: ezra peisach <epeisach@med-xtal.bu.edu>, 28
+ Jan 2003 13:09:18 -0500 (EST).
+
+2003-01-28 <karl@gnu.org>
+
+ * util/dir-example: bring emacs section up to date.
+
+2003-01-27 <karl@gnu.org>
+
+ * configure.ac: pretest version 4.3d.
+
+ More changes to use @ fully in the .aux file, otherwise something
+ as simple as:
+ @node foo
+ @section @code{foo}
+ was broken.
+ * doc/texinfo.tex (\setref): call \atdummies.
+ (\atdummies): new macro, based on \indexdummies.
+ (\commondummies): separate out common redefinitions.
+ (\lbraceatcmd,\rbraceatcmd): @{ and @}, as strings.
+
+ * configure.ac (AC_CHECK_FUNCS): add sigaction.
+ * info/signals.c (set_termsig) [HAVE_SIGACTION]: second arg to
+ sigaction is a pointer, not a struct.
+
+ From: AIDA Shinra <aida-s@jcom.home.ne.jp>, 25 Jan 2003 18:53:19 +0900:
+ * info/signals.c (mask_termsig,set_termsig,restore_termsig): new fns.
+ (initialize_info_signal_handler): use sigaction if we have it.
+ (info_signal_proc): reread window size in case it has changed
+ while we were suspended.
+
+ Mon Jan 27 08:09:07 CET 2003 Stepan Kasal <kasal@math.cas.cz>
+ * doc/texinfo.tex (\acuteaccent): the workaround is no longer needed.
+ (\xrefX): \normalturnoffactive changed to \turnoffactive, since
+ we \otherbackslash right afterwards anyway.
+
+2003-01-24 <karl@gnu.org>
+
+ * doc/texinfo.tex: These changes allow ' in node and anchor names:
+ (\internalsetq): use @ instead of ' as the escape
+ character for .aux files.
+ (\xrdef): don't need to play games with \ now.
+ (\readauxfile): don't set catcode' to 0, and do
+ set catcode@ to 0.
+
+ These changes allow \ in node and anchor names
+ (this worked once, but we broke it somewhere along the line):
+ (\setref, \xrefX, \dosetq, \refx): call \otherbackslash.
+ (\otherbackslash): new macro to make an active
+ backslash expand to a literal `\' character with
+ catcode other.
+
+
+ * configure.ac: pretest version 4.3c.
+
+ * doc/texinfo.tex (\smallenvironments): remove, and change callers.
+ (\small...x): rename to just \small...
+ (\smallexamplefonts): set to \smallfonts, not
+ \smallerfonts, at least until people complain again.
+
+ The effect of these changes is to make the
+ @small... commands print in a smaller font (9pt)
+ for all formats, not just @smallbook and @afivepaper.
+
+
+ * info/filesys.c (extract_colon_unit): rewrite so that an empty
+ unit does not stop us from processing the rest. Report from:
+ Werner LEMBERG <wl@gnu.org>, 24 Jan 2003 07:01:09 +0100.
+
+
+ Date: Mon, 02 Dec 2002 01:06:37 +0900
+ From: AIDA Shinra <aida-s@jcom.home.ne.jp>
+
+ * "info infokey" says key bindings in .info take precedence over
+ the default mapping, but this is not true. Only bindings to
+ undefined keys take effects.
+ * Binding to "invalid" action results crash.
+ * No code to disable prefix keys. Some users might want to bind
+ escape or C-x to a non-prefix key, but this does not allowed.
+ ... It always allows '^h' in incremental
+ search. Some terminals map 'backspace' to '^h' by default.
+
+ These are the changes:
+ * info/session.c (incremental_search): check for Control('h') as
+ well as DEL.
+ * info/infomap.c (find_function_keyseq, add_function_keyseq,
+ remove_function_keyseq): new fns.
+ (keymap_copy_keymap, keymap_discard_keymap): take
+ rootmap arg.
+
+Wed Jan 22 14:25:39 CET 2003 Stepan Kasal <kasal@math.cas.cz>
+
+ * doc/texinfo.tex (\footnotezzz): the very beginning was moved
+ to \startfootins;
+ (\startfootins): new macro;
+ (\multitable, \dotable): redefine \startfootins to get footnotes
+ saved, use \crcrwithfootnotes;
+ (\crcrwithfootnotes): check for postponed footnotes each time a row
+ of a multitable is finished;
+ (\tab): no longer defined globally, just \let to & inside
+ @multitable.
+
+2003-01-22 <karl@gnu.org>
+
+ * doc/texinfo.tex: doc fix.
+ * doc/texinfo.tex (\dofootnote): rename from \footnotezzz.
+
+ Wed Jan 22 14:23:51 CET 2003 Stepan Kasal <kasal@math.cas.cz>
+ * doc/texinfo.tex (\cartouche, \footnotezzz): removed \long, it
+ has no effect for macros without a parameter;
+ (\fo@t, \f@@t, \f@t, \@foot): removed, local \def has no effect.
+
+2003-01-21 <karl@gnu.org>
+
+ * doc/texinfo.txi (Output Formats): new section.
+
+2003-01-19 <karl@gnu.org>
+
+ * configure.ac: pretest version 4.3b.
+
+ * makeinfo/tests/include-value: need -I $srcdir.
+
+ * util/texindex.c:
+ * util/install-info.c:
+ * info/infokey.c:
+ * info/info.c:
+ * makeinfo/makeinfo.c:
+ * util/texi2dvi: 2003.
+
+2003-01-18 <karl@gnu.org>
+
+ * makeinfo/node.c: add `(perhaps incorrect sectioning?)' to some of
+ the error messages. Unfortunately we can't easily
+ determine when the error stems from actual
+ mistyped node pointers, and when from incorrect
+ menus causing the implicit pointer creation to fail.
+
+2003-01-17 <karl@gnu.org>
+
+ Thu Jan 16 10:28:32 CET 2003 Stepan Kasal <kasal@math.cas.cz>
+ * doc/texinfo.tex (\refx): Set locally \indexdummies before expanding
+ the \csname, in case there are macros; foreign accents, for example.
+ Bug report from Dumas Patrice <dumas@centre-cired.fr>.
+
+ * makeinfo/makeinfo.c (COMMAND_CHAR): new macro, and exclude ^ and
+ _ from command names.
+ (read_token): call it.
+
+ * makeinfo/makeinfo.h (command_char): move to makeinfo.c, since
+ it's only used in one place.
+
+2003-01-16 <karl@gnu.org>
+
+ * TODO: @else
+
+2003-01-12 <karl@gnu.org>
+
+ * doc/texinfo.tex (\dounmacro): simplify method for removing from
+ macro list. From Stepan. (Also rename from \unmacroxxx.)
+ (\unmacrodo): new macro, called with new method.
+
+ * doc/texinfo.tex (\dotChar, questChar, exclamChar, colonChar,
+ semiChar, commaChar, underChar): names for catcode chars, defined using
+ \chardef. From Stepan.
+
+ * doc/texinfo.tex (\conditionalsucceed): back to the easy
+ definition, since @set is global now. From Stepan.
+
+ * doc/texinfo.tex (\doifclear,\doifset): use \let\next instead of
+ \expandafter, so that we'll succeed on no
+ conditional text. From Stepan.
+ Also rename from \ifclearxxx and \ifsetxxx.
+
+ * doc/texinfo.tex (\expandablevalue): give a \message if the
+ variable is not set. Based on patch from Stepan.
+
+ * doc/texinfo.tex (\setuptable): insert an actual \space after
+ \unskip. From Stepan.
+
+ * doc/texinfo.tex (\kbdinputstyle): give error if unknown argument,
+ and call the macro to set the default. From Stepan.
+
+ * doc/texinfo.tex: typo from Stepan.
+
+ * doc/texinfo.tex (\docenter): rename from \centerzzz and do \hfil
+ instead of using plain's \centerline and \hss. Also force line
+ breaks before and after in horizontal mode.
+ Based on patch from Stepan, 11 Apr 2000 19:44:31 +0200.
+
+ * doc/texinfo.tex: use \other and \active consistently.
+ From: Stepan Kasal <kasal@suse.cz>, 11 Apr 2000 19:44:31 +0200.
+
+ * makeinfo/cmds.c (handle_include): call text_expansion on the
+ filename, so @value constructs are expanded.
+
+ * doc/texinfo.txi (verbatiminclude, Using Include Files): mention
+ @value expansion.
+ Also, update samples to be copyright 2003.
+
+ * doc/texinfo.tex (\doverbatiminclude, \verbatimzzz): expand
+ @value(but nothing else).
+ Bug from: Alper Ersoy <aersoy@tfz.net>,
+ 6 Jan 2003 13:14:28 +0200.
+
+2003-01-11 <karl@gnu.org>
+
+ * doc/texinfo.tex (\definedummyword): new macro.
+ (\indexdummies): call it, instead of defining each
+ command separately; many trailing spaces had been omitted.
+ Alternate implementation of a patch from: Stepan
+ Kasal <kasal@math.cas.cz>, 10 Jan 2003 22:42:05 +0100.
+
+ * doc/texinfo.tex (\acuteaccent): new defn.
+ (\indexdummies): use it instead of \' in the aux file.
+ Variation of a patch from: Stepan Kasal <kasal@math.cas.cz>,
+ 10 Jan 2003 21:28:40 +0100.
+
+ * doc/texinfo.tex: doc fix.
+
+2003-01-10 <karl@gnu.org>
+
+ * doc/texinfo.tex (\indexnofonts, \indexdummies): handle more
+ accent commands.
+ (\indexdummyfont): not needed, use \asis instead.
+
+ * doc/texinfo.tex (\indexdummies,\indexnofonts): indent, no other
+ changes.
+
+ * doc/texinfo.tex (\chapter .. \subsubsection): indent the
+ definitions; no other change.
+
+ * doc/texinfo.txi (Macro details): no multiple-line args is
+ another limitation.
+
+ Fri Jan 10 07:12:23 CET 2003 Stepan Kasal <kasal@math.cas.cz>
+ * texinfo.tex (\writetocentry): The
+ common work on building the line for \write\tocfile was
+ moved into the macro itself and thus all callers has been changed.
+
+2003-01-09 <karl@gnu.org>
+
+ * info/session.c (incremental_search): don't interpret the
+ `function' element as an InfoCommand when it's really a Keymap.
+ This caused arrow keys to be inserted literally under Solaris, but
+ not GNU/Linux. Bug report from: Jeremy Lin
+ <jjlin@OCF.Berkeley.EDU>, 5 Jan 2003 01:59:29 -0800.
+
+ * info/infomap.c: add comment about strange pointer cast.
+
+2003-01-08 <karl@gnu.org>
+
+ * doc/texinfo.tex (\ignoremorecommands): define \Edef... and
+ \def...x for all @def... commands, and use \empty
+ instead of \relax. Bug report from Paul Eggert
+ <eggert@twinsun.com>, 7 Jan 2003 22:29:07 -0800.
+
+2003-01-06 <karl@gnu.org>
+
+ * doc/texinfo.txi (table): mention @option as a useful indicating
+ command, and need for blank lines before and
+ after. Suggestion from: Kevin Ryde
+ <user42@zip.com.au>, 03 Jan 2003 10:02:55 +1000.
+
+2003-01-05 <karl@gnu.org>
+
+ * util/texi2dvi: make egrep a variable (EGREP). Suggestion from:
+ Kurt Hornik <hornik@ci.tuwien.ac.at>.
+ Also, replace fgrep with grep.
+
+ * doc/Makefile.am (TXI_XLATE): include txi-tr.tex from Alper Ersoy
+ <dirt@gtk.org>.
+
+2003-01-02 <karl@gnu.org>
+
+ * makeinfo/insertion.c (end_insertion): in table case, call
+ close_insertion_paragraph. Bug report from: Kevin
+ Ryde <user42@zip.com.au>, 03 Jan 2003 08:09:54 +1000.
+
+ * doc/texinfo.tex: remove spurious CTRL-G.
+
+ * util/srclist.txt: more m4 files from gnulib now.
+
+2003-01-01 <karl@gnu.org>
+
+ * doc/texinfo.tex (\_): more space afterwards, so __ comes out
+ better. Noticed in the gcc manual.
+
+2002-12-31 <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (usage): omit all the help message when something
+ goes wrong in argument parsing, as intended.
+
+2002-12-26 <karl@gnu.org>
+
+ * doc/texinfo.tex (\insertcopying): ignore @c, @comment, and
+ @ignore...@end ignore as best we can. Report from
+ "Joseph S. Myers" <jsm28@cam.ac.uk>, 24 Dec 2002
+ 18:08:10 +0000 (GMT), for the gcc manual, which
+ uses these constructs for automatic man page generation.
+
+2002-12-23 <karl@gnu.org>
+
+ * doc/texinfo.txi (example): note that Texinfo commands are
+ expanded, plus other changes. Suggestion from Nelson Beebe.
+
+2002-12-20 <karl@gnu.org>
+
+ * config.guess: update from prep.
+
+2002-12-17 <karl@gnu.org>
+
+ * makeinfo/texinfo.dtd (indexterm): index not INDEX.
+ (node): only any block, not just para|menu.
+ * makeinfo/xml.c (texinfoml_element_list): format and like can
+ contain para.
+ From: Alper Ersoy <aersoy@tfz.net>.
+
+2002-12-14 <karl@gnu.org>
+
+ * doc/texinfo.txi (makeinfo in Emacs): does not prompt for
+ filename.
+ From: Kevin Ryde <user42@zip.com.au>.
+
+2002-12-13 <karl@gnu.org>
+
+ * doc/texinfo.txi: short sample needs @top (from jas), gnu sample
+ can use @verbatim (automake fix).
+
+2002-12-11 <karl@gnu.org>
+
+ * doc/texinfo.txi: typos.
+
+2002-12-07 <karl@gnu.org>
+
+ * makeinfo/xml.c: use lowercase, allow more chars in id's. From:
+ Jaime Davila <jdavila@engr.uconn.edu>, 6 Dec 2002 11:00:25 -0500.
+
+2002-12-05 <karl@gnu.org>
+
+ * util/dir-example: alphabetize make.
+
+ * NEWS: change texinfo.tex url.
+
+ * doc/texinfo.tex (\obstexwarn): fix url's to TeX.README and
+ texinfo.tex.
+
+2002-12-02 <karl@gnu.org>
+
+ * doc/texinfo.txi (Line Breaks): fixes.
+
+2002-12-01 <karl@gnu.org>
+
+ * configure.ac: pretest version 4.3a.
+
+2002-11-30 <karl@gnu.org>
+
+ * doc/Makefile.am (texinfo): restore rule since this won't quite
+ be fixed until automake 1.7.2 or later.
+
+2002-11-29 19:19 feloy
+
+ * makeinfo/xml.c: Fix the <para>&lt; bug in XML, reported by K.
+ Ryde
+
+2002-11-29 <karl@gnu.org>
+
+ * lib/strdup.c: gnulib update.
+
+2002-11-29 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/Makefile.am (.texi.info, texinfo): Remove. Automake 1.7+
+ no longer output info files in the source tree.
+
+2002-11-26 <karl@gnu.org>
+
+ * makeinfo/insertion.c (cm_insertion_copying): flush_output, so that
+ output_position gets updated, which in turn makes
+ the tag table positions reflect the copying text.
+ Report from: "W. L. Estes" <wlestes@uncg.edu>, 15
+ Nov 2002 15:57:04 -0500.
+
+ * makeinfo/index.c (init_indices): undefindex after we know
+ name_index_alist[i] is not null.
+ From: "Ronald F. Guilmette" <rfg@monkeys.com>, 26 Nov 2002
+ 01:08:04 -0800.
+
+ * doc/Makefile.am (texinfo): depend on version
+ files. Report from: Kevin Ryde
+ <user42@zip.com.au>, 27 Nov 2002 07:52:57 +1000.
+
+2002-11-25 <karl@gnu.org>
+
+ * makeinfo/cmds.c (cm_verb): use <tt> not <pre>, as this is an
+ inline construct. Also, decrement
+ in_fixed_width_font, else the next paragraph does
+ not get a <p>.
+ Report from: Torsten Bronger <bronger@physik.rwth-aachen.de>
+ 26 Nov 2002 00:37:35 +0100.
+
+ * doc/texinfo.tex (\dospecials): must include all other characters
+ that we set active, namely <>|_", or they got
+ mysteriously lost as the first character on a
+ verbatim line.
+ Report from: Torsten Bronger <bronger@physik.rwth-aachen.de>
+ 25 Nov 2002 18:26:12 +0100.
+
+ (\doverbatim): ignore everything up to the first
+ ^^M, to avoid an extra blank line in the output.
+
+ * lib/getopt*, strdup.c, tempname.c: update from gnulib (bruno
+ changes + gpl).
+
+2002-11-24 <karl@gnu.org>
+
+ * doc/texinfo.txi (Multiple Spaces): xref tie rather w for
+ unbreakable spaces.
+
+2002-11-22 <karl@gnu.org>
+
+ * doc/texinfo.txi: editorial changes from Max's editor.
+
+2002-11-21 <karl@gnu.org>
+
+ * doc/texinfo.txi (Conventions): add item for blank lines as
+ paragraph separator. Report from: Maxim Masiutin
+ <max@ritlabs.com>, 21 Nov 2002 00:03:07 +0200.
+
+2002-11-19 <karl@gnu.org>
+
+ * util/install-info.c (ensure_dirfile_exists): don't translate the `*
+ Menu' keyword. Report from: Ingo Krabbe
+ <i.krabbe@dokom.net>, 19 Nov 2002 09:24:45 +0100.
+
+2002-11-18 <karl@gnu.org>
+
+ * po/.cvsignore: exclude *.gmo instead of listing each individually.
+ From: Frédéric L. W. Meunier <0@pervalidus.net>,
+ 15 Nov 2002 20:16:09 -0200 (BRST).
+
+ * configure.ac (--enable-multiplatform): new option for teTeX and
+ TeX Live. From te.
+
+2002-11-14 <karl@gnu.org>
+
+ * configure.ac, util/texi2dvi, NEWS: release version 4.3.
+
+ * util/texi2dvi, mkinstalldirs: use `for var<newline>do"' instead
+ of `for var; do', for Solaris.
+
+ * doc/texinfo.txi (math): emphasize that makeinfo does not interpret
+ the arg.
+
+ * config.{guess,sub}: update from prep.
+
+2002-11-13 <karl@gnu.org>
+
+ * configure.ac: pretest version 4.2f.
+
+ * makeinfo/xml.c (INDEX_SEP): define as a string that will never
+ appear, so that we don't try to break index terms
+ at commas. Idea from: Stepan Kasal
+ <kasal@math.cas.cz>, problem reported by José
+ Fonseca <j_r_fonseca@yahoo.co.uk>.
+
+2002-11-12 <karl@gnu.org>
+
+ * makeinfo/makeinfo.c: make sure command is non-null, for sake of bogus
+ input (\def\x{}). Report from
+ Neil.Turton@broadcom.com, debian bug#168689.
+
+ * makeinfo/Makefile.am (makeinfo_SOURCES): remove docbook.[ch],
+ per feloy the docbook stuff is in xml.[ch] now.
+
+2002-11-12 19:48 feloy
+
+ * makeinfo/: lang.c, makeinfo.c: (docbook) Entities for accented
+ characters are written correctly
+
+2002-11-12 19:34 feloy
+
+ * makeinfo/xml.c: (docbook) Do not expand @set contents
+
+2002-11-11 18:14 feloy
+
+ * makeinfo/xml.c: Better <bookinfo> support
+
+2002-11-11 13:37 feloy
+
+ * makeinfo/: cmds.c, insertion.c, xml.c, xml.h: Better use of
+ <bookinfo> and <abstract> with docbook output
+
+2002-11-11 01:57 feloy
+
+ * makeinfo/: defun.c, xml.c, xml.h: Removed all references to
+ docbook.[ch] which was the old sources for docbook output, replaced
+ by xml.[ch]
+
+2002-11-10 23:31 feloy
+
+ * makeinfo/: insertion.c, xml.c, xml.h: Some bugfixes in docbook
+ output
+
+2002-11-09 18:47 feloy
+
+ * makeinfo/insertion.c: In Docbook, Copying paragraph is not
+ inserted at @copying/@end copying point.
+
+2002-11-08 21:01 feloy
+
+ * makeinfo/xml.c: take care of indexterm at beginning of table
+
+2002-11-08 20:52 feloy
+
+ * makeinfo/xml.c: Text before first @item in @table is inserted as
+ the <title> of <variablelist>
+
+2002-11-08 20:24 feloy
+
+ * makeinfo/xml.c: subsubheading is simplesect and not sect3
+
+2002-11-08 19:13 feloy
+
+ * makeinfo/: makeinfo.c, xml.c, xml.h: makeinfo/xml.c (xml_id):
+ Added more forbidden characters makeinfo/{xml.c,xml.h,makeinfo.c}:
+ Defined xml_in_xref_token variable
+
+2002-11-07 <karl@gnu.org>
+
+ * makeinfo/sectioning.c: doc.
+ * makeinfo/sectioning.c: revert last change, it breaks gcc.
+
+ * makeinfo/xml.c (xml-add_char): don't insert BOOKINFO and ABSTRACT
+ if executing_string. From Jos? Fonseca.
+
+ * configure.ac: pretest version 4.2e.
+
+ From: José Fonseca <j_r_fonseca@yahoo.co.uk>,
+ 7 Nov 2002 00:31:28 +0000.
+ * makeinfo/index.c (cm_printindex): in docbook case, pass the
+ unexpanded index term.
+ * makeinfo/xml.c (xml_insert_indexterm): execute_string instead of
+ insert_string.
+ (Otherwise, <>& are not escaped in the docbook index output.)
+
+ * util/dir-example: sed.
+
+ * makeinfo/lang.c: copyright.
+ * makeinfo/lang.h: copyright.
+
+2002-11-07 Stephen Gildea
+
+ * makeinfo/sectioning.c (sectioning_html): have A tag enclose
+ section name rather than preceding it.
+
+ * makeinfo/toc.c (contents_update_html): put name attribute into
+ existing A tag rather than making a separate tag for it.
+
+2002-11-07 Stephen Gildea
+
+ * makeinfo/lang.c: support @documentencoding US-ASCII:
+ Put NULL at end of map tables so they can be of varying lengths.
+ (us_ascii_map): new iso_map_type table.
+ (encoding_table): add US_ASCII.
+ (cm_search_iso_map): don't assume all maps are the same length.
+ (cm_documentencoding): don't assume ISO_8859_1 is first table entry.
+ * makeinfo/lang.h (encoding_code_type): add US_ASCII.
+
+2002-11-05 <karl@gnu.org>
+
+ * doc/info-stnd.texi: untabify.
+ * doc/info-stnd.texi: document that.
+ * info/footnotes.c (auto_footnotes_p): turn off by default.
+
+ * info/infodoc.c (info_internal_help_text): had
+ scroll-{forward,backward} twice instead of {next,prev}-line.
+ * info/infodoc.c: untabify.
+
+ * util/texi2dvi: untabify.
+ * doc/texinfo.tex: untabify.
+ * util/texindex.c: untabify.
+ * util/install-info.c: untabify.
+ * makeinfo/makeinfo.c: indentation fix.
+ * makeinfo/cmds.c: doc fix.
+
+2002-11-04 <karl@gnu.org>
+
+ * configure.ac: pretest version 4.2d.
+ * doc/fdl.texi: better line break to avoid overfull hbox.
+
+2002-11-04 Stephen Gildea
+
+ * makeinfo/{footnote.c,cmds.c,html.c,index.c,insertion.c,
+ makeinfo.c,node.c,toc.c,sectioning.c}: add a class attribute
+ to tags generated in special circumstances that wouldn't be
+ obvious to a user agent.
+
+ Quote all attribute values (for XHTML).
+
+2002-11-04 <karl@gnu.org>
+
+ * doc/texinfo.txi (File End): grammar.
+
+ These changes from gildea:
+ * makeinfo/cmds.c (cm_titlepage): new fn, and use it for @titlepage.
+
+ * makeinfo/cmds.h (titlepage_cmd_present): new global.
+ * makeinfo/html.c (html_output_head): check titlepage_cmd_present
+ before outputting the <h1>.
+
+ * makeinfo/html.c (html_output_head): put a class on the <h1> from
+ settitle.
+
+ * makeinfo/cmds.c (cm_titlefont): put the class directly on the h1
+ rather than a separate <span> element.
+
+2002-10-31 <karl@gnu.org>
+
+ * doc/texinfo.tex (\mathactive): new fn.
+ (\math): call it, to change definitions of active characters.
+ (\ptex{gtr,hat,less,plus}): save original characters.
+ Report from wl.
+
+ * doc/texinfo.tex (\itemzzz): \penalty10001 instead of 10000
+ before the putative \parskip.
+ (\aboveenvbreak): insert \parskip if penalty!=10000,
+ rather than <10000. Otherwise, @item some long item label /
+ @example has too little spacing.
+ Report from: Werner LEMBERG <wl@gnu.org>,
+ 26 Apr 2002 08:37:41 +0200 (CEST).
+
+ * makeinfo/makeinfo.c (executing_macro): new static.
+ (read_command): set it, if we execute a macro.
+ (add_char): if it is set, call html_output_head.
+ This is so if a macro expansion is first in the document body, the
+ html head gets written before the macro body.
+ Report from: Stephen Gildea <gildea@stop.mail-abuse.org>,
+ 10 Jul 2002 13:35:13 -0400.
+
+ * makeinfo/html.c (html_title_written),
+ * makeinfo/html.h (html_title_written): make available.
+ * makeinfo/cmds.c (cm_titlefont): set html_title_written for html
+ output.
+
+ * util/texindex.c: texindex.c (need_initials, first_initial): New
+ globals.
+ (main): Clear them for each index.
+ (parsefile): Set need_initials when there is more than one
+ initial in this index.
+ (indexify): Do not emit \initial commands unless need_initials
+ is set. Use toupper.
+
+ From: Zack Weinberg <zack@codesourcery.com>
+ Date: Tue, 26 Mar 2002 17:20:06 -0800
+
+ * lib/system.h: doc fix from gildea.
+
+2002-10-30 <karl@gnu.org>
+
+ (Following reported by Bob Wilson.)
+
+ * doc/texinfo.tex (\sectionheading): add either
+ \normalbaselineskip or \parskip after the heading, whichever is
+ larger, instead of hardwiring 10pt.
+
+ * doc/texinfo.tex (\defxbodycommon): new defn, including a
+ potential breakpoint if we have multiple consecutive @def...x commands.
+ (\def*parsebody): use it.
+
+ * doc/texinfo.tex (\singlespace): remove, since we fixed the
+ regular line spacing a long time ago to not be double-spaced.
+ In @smallbook mode, it ironically caused excessive line spacing.
+ (\nonfillstart, \quotation): don't call it.
+
+ * doc/texinfo.tex (\smartslanted, \smartitalic): use \ttsl if in
+ typewriter.
+ From: Bob Wilson <bwilson@tensilica.com>.
+
+ * doc/texinfo.tex (\defmethparsebody): pass \empty to \smallsplit
+ to keep a brace-delimited argument to @deffn from having the braces
+ stripped.
+ (Report from: Han-Wen Nienhuys <hanwen@cs.uu.nl>.)
+
+2002-10-28 <karl@gnu.org>
+
+ * doc/texinfo.tex (\loggingall): rewrite to minimize log file
+ output (ideas from Frank Mittelbach's trace.sty) and explicitly
+ show the etex changes.
+
+ * configure.ac: pretest version 4.2c.
+
+ * NEWS: mention Werner's fixes.
+
+2002-10-27 Werner Lemberg <wl@gnu.org>
+
+ * makeinfo/html.c (insert_html_tag): Fix handling of nested,
+ identical tags.
+
+2002-10-27 <karl@gnu.org>
+
+ * configure.ac (AM_INIT_AUTOMAKE): add dist-bzip2 option.
+
+2002-10-26 <karl@gnu.org>
+
+ * 2002-10-24 Werner Lemberg <wl@gnu.org>
+ Fix html font tags, i.e., make the output similar to
+ texinfo.tex. The main idea is to avoid nested font tags.
+
+ * makeinfo/html.c (push_tag, pop_tag): New functions.
+ (insert_html_tag): Use them.
+ Don't emit more than a single font attribute.
+
+ * makeinfo/html.h (HSTACK): New structure.
+
+ * makeinfo/defun.c: Include cmds.h and html.h.
+ (process_defun_args): Don't apply <i>...</i> to parentheses
+ and brackets.
+ (defun_internal): Use insert_html_tag for emitting font tags.
+
+ * makeinfo/cmds.c (cm_url): Use insert_html_tag for emitting
+ font tag.
+ (cm_r): Simplify.
+
+2002-10-25 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * util/texi2dvi: Preserve empty components when expansing
+ TEXINPUTS and INDEXSTYLE.
+
+2002-10-24 <karl@gnu.org>
+
+ * doc/info-stnd.texi: missing period.
+
+ * m4/{check-decl.m4,mkstemp.m4,prereq.m4}: new files from gnulib.
+ * lib/mkstemp.c, lib/tempname.c: likewise.
+ * aclocal.m4, configure.ac: support for mkstemp instead of mktemp.
+ * util/texindex.c: use mkstemp instead of mktemp.
+
+ 2002-10-24 Alexandre Duret-Lutz <adl@gnu.org>
+ * util/texi2dvi: Turn relative entries $TEXINPUTS and $INDEXSTYLE
+ into absolute paths. (Allows --clean to work with relative dirs
+ in TEXINPUTS, etc.)
+
+ * doc/texinfo.tex: update \texinfoversion timestamp.
+
+2002-10-22 <karl@gnu.org>
+
+ 2002-10-16 Werner Lemberg <wl@gnu.org>
+
+ * texinfo.tex (\appendixbox): New macro to compute a
+ fixed-width box for the appendix entry in the TOC.
+ (\appendixzzz, \appendixentry): Use it.
+
+ (\shortconttt): New font.
+ (\summarycontents): Use it to set the font size of the \tt
+ font properly.
+
+ (\authortt): New macro.
+ (\authorfont): Use it to provide a proper font size for
+ @email used within @author.
+
+2002-10-21 <karl@gnu.org>
+
+ * automake 1.7.1.
+
+2002-10-18 <karl@gnu.org>
+
+ * doc/texinfo.tex (\defname): get rid of the unused
+ \deftypemargin; typeset the function type word flush right, in
+ brackets. Partially suggested by bob.
+
+2002-10-16 <karl@gnu.org>
+
+ * makeinfo/html.c: Just > after all on <meta> and <link> to
+ appease HTML 4.01 (and break XHTML). From Janis.
+
+2002-10-15 <karl@gnu.org>
+
+ * configure.ac: pretest version 4.2b.
+
+ * makeinfo/cmds.c (cm_dots, cm_enddots): don't use small if
+ in_fixed_width_fonts; this violates the html specs, which don't
+ want you to change fonts within <pre>. (Argh.)
+ Report from: Janis Johnson <janis187@us.ibm.com>,
+ 14 Oct 2002 15:59:16 -0700.
+
+2002-10-14 Alexandre Duret-Lutz <adl@gnu.org>
+ * util/texi2dvi (common, txincludes): Fix definitions so that
+ an empty $txincludes doesn't result in a empty path element
+ in TEXINPUTS.
+
+2002-10-14 <karl@gnu.org>
+
+ * info/infokey.c: copyright 2002 not 02.
+ * makeinfo/lang.c: copyright 2001 not 01.
+
+ * makeinfo/insertion.c (begin_insertion): for enumerate, set
+ in_paragraph=0 as we do for itemize.
+ Otherwise a </p> gets inserted at the next @item, which is wrong.
+
+ Report from: Janis Johnson <janis187@us.ibm.com>, 14 Oct 2002
+ 12:35:30 -0700.
+
+2002-10-13 <karl@gnu.org>
+
+ * util/install-info.c (longopts): make --infodir a synonym for
+ --info-dir, for some compatibility with the Debian install-info.
+ Reported by Bob Chassell, Yves Codet <ycodet@club-internet.fr>,
+ and many others.
+
+ * doc/texinfo.txi (makeinfo advantages): document various options
+ that have crept in to the source. (Werner Lemberg noted that
+ --iftex and companions were missing.)
+
+2002-10-10 <karl@gnu.org>
+
+ * makeinfo/cmds.c (cm_tie): new fn for new cmd @tie{}.
+ * doc/texinfo.txi: document it.
+
+2002-10-09 <karl@gnu.org>
+
+ * doc/texinfo.txi: recommend free software directory categories
+ (suggestion from rms),
+ more info about @noindent (fut_nis@d3.dion.ne.jp and ryk@dspwiz.com),
+ version specification (spectorhome@rcn.com).
+
+ * makeinfo/{cmds,footnote,html,insertion,makeinfo,multi,node}.c:
+ use <br /> instead of plain <br>, for the sake of XHTML. Likewise
+ with <hr /> and <meta />, and quote all <meta> values.
+ Suggestion (and assurance of compatibility) from
+ Janis Johnson <janis187@us.ibm.com>
+ and Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+ (the gcc web page maintainers).
+
+ * util/infosrch: new contrib script.
+ * util/Makefile.am (EXTRA_DIST): add infosrch.
+
+2002-10-04 <karl@gnu.org>
+
+ * configure.ac: pretest version 4.2a.
+
+ * TODO: more info on dir categories.
+
+2002-10-02 <karl@gnu.org>
+
+ * doc/.cvsignore: ignore tex output files.
+
+ * util/dir-example: remove unused categories, etc.
+
+2002-10-01 <karl@gnu.org>
+
+ * doc/texinfo.tex (\xml,\ifxml): more \doignore's.
+ (\copying,\insertcopying): new implementation to save the uninterpreted
+ tokens instead of typesetting a box, so that the page size, fonts,
+ etc., don't have to be defined before @copying is run.
+
+ These changes from Werner Lemberg <wl@gnu.org>:
+ (\internalpagesizes): take two new arguments for the physical paper
+ height and width.
+ (\smallbook,\afourpaper,\afivepaper,\letterpaper,\afourwide,
+ \pagesizes): pass them.
+
+2002-09-30 <karl@gnu.org>
+
+ * util/texi2dvi: doc fixes.
+
+ * README: mention autoreconf.
+
+2002-09-29 <karl@gnu.org>
+
+ * doc/texinfo.tex (\pdfmakeoutlines): call \turnoffactive to handle all special characters
+ except \{}.
+ (\normalturnoffactive): call \turnoffactive instead of repeating all the
+ redefinitions.
+
+ * doc/texinfo.tex (\afourpaper, \afourlatex, \afourwide): new
+ formatting values.
+ From: Eric.Belpaire@equant.com, 30 Aug 2002 19:03:30 +0200.
+
+ * aclocal.m4: $Id now omitted.
+
+ * doc/texinfo.txi: document @xml and @ifxml.
+
+ * makeinfo/makeinfo.c (usage): mention the new options.
+ * info/Makefile.am (BUILT_SOURCES): define this unconditionally,
+ no more TEXINFO_MAINT. We handle it in the top-level
+ Makefile.am by defining distcleancheck_listfiles.
+
+ * acinclude.m4: can't have $Id, then it gets propagated to
+ aclocal.m4.
+
+ From: Philippe Martin <feloy@free.fr>, 11 Aug 2002 20:17:44 +0200.
+ * makeinfo/cmds.c: new commands @ifnotxml, @ifxml, @xml.
+ * insertion.c: likewise.
+ (cm_ifxml, cm_ifnotxml): new functions.
+ * insertion.h: likewise.
+ * makeinfo.c: new options --ifxml, --no-ifxml.
+ (cm_image): better xml output.
+ * makeinfo.h (process_xml): new global.
+ * xml.c: call xml_close_sections.
+
+2002-09-28 <karl@gnu.org>
+
+ * makeinfo/insertion.c (begin_insertion): only do <pre>, not
+ <br><pre>; suggestion from Werner.
+
+ * info/infodoc.c: document the bug regarding where_is_rep_index,
+ but don't fix it since it's in the [!INFOKEY] code.
+
+ 2002-05-18 Eli Zaretskii <eliz@is.elta.co.il>
+ These changes make @example be indented in HTML output, and make
+ @exdent work inside an @example in HTML.
+
+ * makeinfo/insertion.c (begin_insertion) <example>: Insert spaces
+ after <pre> to produce indentation of the first line in HTML mode.
+
+ * makeinfo/makeinfo.c (indent): Do indent even in HTML mode.
+
+ These patches from: Thierry Vignaud <tvignaud@mandrakesoft.com>,
+ 24 Apr 2002 20:52:37 +0200.
+
+ * makeinfo/insertion.c: doc fix.
+
+ * info/infomap.c: had h and l functions reversed in vi mode.
+
+ * util/install-info.c: bzip2 support.
+
+ * util/texi2dvi: don't allow whitespace as one of the ?'s around
+ the o in foo.?o?, that could lead to misparsing.
+
+2002-09-27 <karl@gnu.org>
+
+ * doc/Makefile.am (*.1): call the binary, not the source file.
+
+ * util/texindex.c (sort_in_core): int not off_t.
+ (main): cast argument to sort_in_core to int.
+ (sort_offline): nfiles parameter is not actually passed (or used);
+ need to pass &tempfiles[i] to sort_in_core.
+ From: Christopher League <league@contrapunctus.net>,
+ 26 Apr 2002 22:45:45 -0400.
+
+ * doc/texinfo.tex (\unnumb...entry): make analogous to \...entry
+ (except when actually outputting the text, of course), so pdf
+ bookmarks can go to the right level.
+ From: Christopher League <league@contrapunctus.net>,
+ 25 Apr 2002 15:29:24 -0400.
+
+ * install-sh: update from gnulib.
+
+ * makeinfo/insertion.c (handle_verbatim_environment): need to
+ quote & and <.
+ From: Philippe Martin <feloy@free.fr>, 18 Aug 2002 15:39:10 +0200.
+
+ 2002-06-04 Eli Zaretskii <eliz@is.elta.co.il>
+ * makeinfo/cmds.c (cm_exdent): Call start_paragraph to restore
+ previous indentation of text. (exponent.tex test.)
+
+ 2002-05-11 Eli Zaretskii <eliz@is.elta.co.il>
+ * makeinfo/node.c (remember_node): If the argument FNAME is NULL,
+ as it happens for "Top", use the basename of current_output_filename.
+
+2002-09-26 <karl@gnu.org>
+
+ * lib/system.h [MIKTEX]: include gnu-miktex.h, define S_ISDIR.
+ [! MIKTEX]: declare substring.
+ From: Stephen Gildea <gildea@stop.mail-abuse.org>,
+ 08 May 2002 18:12:58 -0400.
+
+ * doc/texinfo.tex: spurious \let when setting \mainmagstep.
+ From: Stephen Gildea <gildea@stop.mail-abuse.org>,
+ 08 May 2002 08:38:39 -0400.
+
+ * doc/texinfo.txi: copyright symbol: use @code{@copyright@{@}},
+ with the braces in the @code.
+ From: Paul Eggert <eggert@twinsun.com>, 1 Apr 2002 11:37:52 -0800.
+
+ * info/infodoc.c (replace_in_documentation): always allocate at
+ least one byte for replen, otherwise things crash when MALLOC_CHECK_=2.
+ From: "Andreas Herrmann" <AHERRMAN@de.ibm.com>.
+
+ * lib/Makefile.am (libtxi_a_SOURCES): include xalloc.h.
+
+ * doc/Makefile.am (EXTRA_DIST): skip macro.texi and userdoc.texi now.
+ (common_mandeps): new var.
+ (*.1): use that, and depend on the source files with the version strings
+ instead of the binaries. Suggestion from Alexandre.
+
+ * util/Makefile.am (bin_PROGRAMS, ginstall_info_SOURCES,
+ transform): build as ginstall-info, to avoid clashing with the
+ install-info target inserted by Automake. (Suggestion from Akim.)
+
+ * Makefile.am (distcleancheck_listfiles): new definition so
+ distcheck doesn't complain about our generated files in info/,
+ which are conditionalized on TEXINFO_MAINT.
+
+ * lib/gettext.h: update from gettext 0.11.5.
+
+2002-09-24 <karl@gnu.org>
+
+ * util/srclist.txt: m4 files from aclocal rather than gnulib.
+
+ * Makefile.am, util/Makefile.am, dir-example: move dir-example to util.
+
+2002-09-23 <karl@gnu.org>
+
+ * INSTALL.generic: update from autoconf 2.54.
+
+2002-09-20 gettextize <bug-gnu-gettext@gnu.org>
+
+ * configure.ac (AM_GNU_GETTEXT_VERSION): Bump to 0.11.5.
+
+2002-09-12 <karl@gnu.org>
+
+ * util/srclist.txt: INSTALL to INSTALL.generic.
+
+2002-08-04 <karl@gnu.org>
+
+ * doc/texinfo.5:
+ * lib/system.h:
+ * doc/texinfo.tex:
+ * doc/info-fr.texi:
+ * configure.ac: non-copyright notice.
+ * doc/info-fr.texi:
+ * doc/info-stnd.texi:
+ * doc/texinfo.txi: copyright years should be written out in full.
+
+2002-07-23 <karl@gnu.org>
+
+ * doc/texinfo.txi: verbatim license sample per rms and chassell.
+
+2002-07-19 <karl@gnu.org>
+
+ * doc/texinfo.txi:
+
+2002-06-05 <karl@gnu.org>
+
+ * doc/Makefile.am (TXI_XLATE): txi-it.tex from Paolo Bonzini
+ <bonzini@gnu.org>.
+
+2002-06-04 <karl@gnu.org>
+
+ * doc/texinfo.tex (\defparsebodycommon): do \penalty0 if the last
+ item was a \nobreak, since that means we have two function headers
+ in a row. Report from: Brian Gough <bjg@network-theory.co.uk>.
+
+ (\defparsebody,...): use \defparsebodycommon instead of repeating code.
+
+2002-05-09 <karl@gnu.org>
+
+ * doc/texinfo.5: lowercase NAME to `texinfo' for Solaris man.
+ From gildea.
+
+2002-04-29 <karl@gnu.org>
+
+ * doc/texinfo.txi: mention it.
+ * util/texi2dvi: allow -E as well as -e.
+
+2002-04-10 <karl@gnu.org>
+
+ * doc/texinfo.txi:
+
+2002-04-01 <karl@gnu.org>
+
+ * configure.ac: version 4.2.
+ * util/texi2dvi: 4.2
+
+ * makeinfo/toc.c: doc fix.
+ * util/install-info-html:
+ * makeinfo/texinfo.xsl: Fixes From: Ville Skyttä
+ <ville.skytta@iki.fi>.
+
+ * makeinfo/insertion.c (begin_insertion): (copying case) omit
+ cm_insert_copying if no_headers.
+ Bug report from Stephen Gildea.
+
+2002-03-28 <karl@gnu.org>
+
+ * configure.ac: pretest 4.1d.
+
+ * doc/texinfo.txi:
+ * makeinfo/cmds.c: ignore headings commands. From Stephen Gildea.
+
+ * doc/texinfo.txi: @ifplaintext
+
+2002-03-26 <karl@gnu.org>
+
+ * doc/texinfo.tex (\ifplaintext,\ifnotplaintext): new output
+ format conditional.
+
+ * makeinfo/cmds.c (cm_settitle):
+ * makeinfo/node.c (cm_node): need to pass output filename arg to
+ * xml_begin_document.
+
+ * makeinfo/cmds.c (cm_sp): need close_single_paragraph instead of
+ close_paragraph to avoid an extra blank line. Bug report from Stephen Gildea.
+
+ * doc/texinfo.tex (\doignore): can't do c kludge for
+ documentdescription. Bug report from Stephen Gildea.
+
+ * doc/texinfo.txi: missing t in documentdescription example, from
+ Stephen Gildea.
+
+2002-03-24 <karl@gnu.org>
+
+ * doc/texinfo.txi: invar sec
+
+2002-03-23 <karl@gnu.org>
+
+ * configure.ac: pretest 4.1c.
+
+2002-03-23 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * info/search.c (skip_non_whitespace): Don't go beyond the
+ terminating null character.
+
+ * info/filesys.c (filesys_read_info_file)
+ (filesys_read_compressed): Null-terminate the contents of the file
+ we've read, so it could be used as a C string.
+
+2002-03-23 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/makeinfo.c (insert_toplevel_subdirectory): Fix
+ computation of output_filename's length, to avoid overrunning
+ malloc'ed buffer. If mkdir returns with EEXIST, assume we can use
+ an existing directory only if the existing file is indeed a
+ directory. On MS-DOS, allow for EACCES in addition to EEXIST.
+ <max_name_len>: Remove this variable.
+
+ * makeinfo/makeinfo.c (expansion): Protect execute_string from too
+ long strings.
+ (EXECUTE_STRING_MAX): New macro.
+ (execute_string): Use EXECUTE_STRING_MAX, not 4000.
+
+2002-03-23 <karl@gnu.org>
+
+ * doc/texinfo.txi:
+ * makeinfo/insertion.h:
+ * makeinfo/texinfo.dtd:
+ * makeinfo/xml.h:
+ * makeinfo/xml.c:
+ * makeinfo/makeinfo.h:
+ * makeinfo/insertion.c:
+ * makeinfo/html.c:
+ * makeinfo/cmds.c:
+ * doc/info-stnd.texi: @permissions -> @copying.
+ * doc/texinfo.tex: permissions -> copying.
+
+2002-03-22 <karl@gnu.org>
+
+ * configure.ac: pretest 4.1b.
+
+ * info/Makefile.am (BUILT_SOURCES): conditionalize on
+ TEXINFO_MAINT, to appease distcheck.
+
+ * From: Matthew Woodcraft <mattheww@chiark.greenend.org.uk>:
+ * makeinfo/makeinfo.h (next_menu_item_number): New global.
+ * makeinfo/insertion.c (begin_insertion): Initialise it.
+ * makeinfo/makeinfo.c (handle_menu_entry): Emit accesskey attribute
+ in html output, according to next_menu_item_number.
+ * makeinfo/node.c (cm_node): Emit accesskey attributes in html output.
+
+ * doc/texinfo.txi: GNU texts.
+
+ * doc/info-stnd.texi: @syncodeindex, not @synindex.
+
+2002-03-21 <karl@gnu.org>
+
+ * doc/texinfo.txi: @permissions.
+
+2002-03-20 <karl@gnu.org>
+
+ * doc/texinfo.txi: document --no-headers a bit better.
+ * makeinfo/makeinfo.c: better description of --no-headers,
+ suggested by Stephen Gildea.
+
+ * makeinfo/makeinfo.c (insert_toplevel_subdirectory): use
+ command-line specified output name unchanged.
+
+ * makeinfo/makeinfo.c (full_expansion): new routine, separated
+ from expansion, that does not tamper with the formatting parameters.
+ * makeinfo/insertion.c: copying -> permissions.
+ (cm_insert_permissions): insert rather than add.
+ * makeinfo/texinfo.dtd:
+ * makeinfo/xml.h:
+ * makeinfo/xml.c:
+ * makeinfo/cmds.c: copying -> permissions.
+ * makeinfo/makeinfo.h: copying -> permissions.
+ (full_expansion): declare.
+
+ * doc/texinfo.txi: @copying -> @permissions, @include fdl.texi.
+ * doc/info-stnd.texi: @copying -> @permissions, always include the FDL.
+
+ * makeinfo/html.c (html_output_head): copying -> permissions, use
+ insert_string.
+ * makeinfo/insertion.h: copying -> permissions.
+ * doc/texinfo.tex: \copying -> \permissions.
+
+ * doc/Makefile.am (EXTRA_DIST): include fdl.texi.
+
+2002-03-19 <karl@gnu.org>
+
+ * makeinfo/insertion.c (cm_insert_copying): use insert_string in
+ the xml case, sigh.
+
+ * doc/info-stnd.texi: copying
+
+ * dir-example: info standalone.
+
+ * makeinfo/html.c: copyright_text -> copying_text.
+ * makeinfo/texinfo.dtd:
+ * makeinfo/insertion.c:
+ * makeinfo/insertion.h:
+ * makeinfo/makeinfo.h:
+ * makeinfo/xml.c:
+ * makeinfo/xml.h:
+ * makeinfo/cmds.c: copyrighttext -> copying.
+ * doc/info-stnd.texi: copyrighttext -> copying.
+ * doc/texinfo.tex (\copying, \insertcopying): rename from
+ copyrighttext per rms.
+
+ * makeinfo/index.c (index_add_arg): don't emit warning for index
+ entries containing : after all.
+
+ * info/infokey.c: remove non-ansi trailing commas from last items
+ of enums. From: Albert Chin-A-Young <china@thewrittenword.com>.
+
+2002-03-18 <karl@gnu.org>
+
+ * doc/info-stnd.texi: @include after @setfilename.
+ * doc/texinfo.txi: @insertcopyrighttext, @settitle GNU ...
+
+ * doc/texinfo.txi: mention @setfilename and source filename
+ exceptions at the top.
+
+ * makeinfo/defun.c (scan_group_in_string): handle escaped @{ and @}.
+ Bug report from Werner Lemberg.
+
+ * doc/info-stnd.texi: add version number to title a la Texinfo.
+ * doc/info-stnd.texi: file -> manual.
+ * doc/info-stnd.texi: use @copyrighttext.
+
+ * makeinfo/insertion.c (begin_insertion, end_insertion):
+ copyrighttext case.
+ * makeinfo/makeinfo.h (copyright_text): declare/define.
+ * makeinfo/html.c (html_output_head): output copyrighttext.
+ * makeinfo/texinfo.dtd: Add copyrighttext.
+ * makeinfo/xml.h (xml_element): add COPYRIGHTTEXT.
+ * makeinfo/xml.c (texinfoml_element_list, docbook_element_list):
+ copyrighttext case.
+
+2002-03-17 <karl@gnu.org>
+
+ * makeinfo/insertion.h (insertion_type): include copyrighttext.
+ * makeinfo/cmds.c (command_table): new command copyrighttext.
+
+ * doc/texinfo.tex (\copyrighttext, \insertcopyrighttext): new
+ Texinfo commands to handle the copyright and permission text cleanly.
+ (\dblarrowbox,\longdblarrowbox,\pushcharbox,\equivbox,\bullbox):
+ remove these definitions that have not been used for ages.
+
+ * configure.ac: call AC_CANONICAL_BUILD before the termcap
+ checking. Bug report from Eli.
+
+2002-03-16 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/node.c (cm_anchor): When recording the anchor position,
+ account for output_paragraph_offset, since the current paragraph
+ might not be closed yet (happens inside a menu, for example).
+
+ * djgpp/config.sed: Tweak to adapt to the new Automake/Autoconf.
+
+ * djgpp/README: Update.
+
+2002-03-15 <karl@gnu.org>
+
+ * dir-example: GNU organization.
+
+2002-03-14 <karl@gnu.org>
+
+ * makeinfo/cmds.c (cm_titlepage): do not declare nonexistent
+ function.
+
+2002-03-14 <karl@gnu.org>
+
+ * doc/texinfo.txi: don't say specifically html 3.2, since <html
+ lang=...> is not 3.2.
+ Bug reprt from: Matthew Woodcraft <mattheww@chiark.greenend.org.uk>.
+
+2002-03-13 <karl@gnu.org>
+
+ * doc/texinfo.tex (\writetocentry): set \pdfmakepagedesttrue here.
+ (\Etitlepage): instead of here. In case the document has no
+ @titlepage. Bug report from Stephen Gildea.
+
+ * util/texi2dvi: be verbose after the definition of cmd, not
+ before. From Andreas Schwab.
+
+2002-03-12 <karl@gnu.org>
+
+ * pretest 4.1a.
+ * doc/info-stnd.texi: update to FDL.
+
+2002-03-11 <karl@gnu.org>
+
+ * util/texi2dvi:
+ * util/texindex.c:
+ * util/install-info.c:
+ * makeinfo/makeinfo.c:
+ * info/infokey.c:
+ * info/info.c: home page and help message.
+
+ * doc/texinfo.txi (math): document @\ (aka \\) for literal \.
+ regularize index entries.
+ * makeinfo/cmds.c (command_table): \\ -> insert_self.
+
+ * doc/texinfo.tex (\mathbackslash): new definition.
+ (\math): handle \\ too.
+ (\codeunder): handle @code{\} in mmode.
+
+ * makeinfo/html.c: make home page be gnu's.
+
+ * doc/texinfo.txi (Conventions): rewrite description of quotes so
+ as to work in all formats; there was no output for HTML.
+ Report from: David Merrill <david@lupercalia.net>.
+
+2002-03-10 <karl@gnu.org>
+
+ * doc/texinfo.txi (Texinfo Copying Conditions): mention this
+ manual's license specifically.
+
+2002-03-09 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * info/indices.c (add_index_to_index_nodenames): Fix an off-by-one
+ error when computing the number of the last index entry.
+
+2002-03-08 <karl@gnu.org>
+
+ * doc/texinfo.tex: Rewrite unnumbered toc handling to keep track
+ of their sequence, so they can be handled correctly in
+ the PDF toc (= bookmarks).
+ From: Werner LEMBERG <wl@gnu.org>.
+
+ * configure.ac: AC_MSG_WARN if can't find a term library. From:
+ Marc.Herbert@ens-lyon.fr.
+
+ * info/info.c: alphabetize.
+ * info/info.c: include short option names.
+
+2002-03-08 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * info/display.c (display_update_one_window): Dynamically reallocate
+ printed_line[] as needed. When under -R, ignore ANSI escapes for
+ the purposes of line wrap display. Clear the line to EOL if it
+ used escape sequences. Reallocate entry->text if the new
+ printed_line is longer than screenwidth.
+
+ * info/window.c (string_width): Don't count ANSI escape sequences
+ in string width, when under -R..
+ (calculate_line_starts): Don't count ANSI escape sequences in line
+ width, when under -R.
+ (window_get_cursor_column, window_chars_to_goal): When under -R,
+ ANSI escapes don't affect the horizontal position.
+
+ * info/info-utils.c (printed_representation): If -R is in effect,
+ treat ESC as a normal character.
+
+2002-03-08 <karl@gnu.org>
+
+ * util/Makefile.am:
+ * info/Makefile.am:
+ * makeinfo/Makefile.am:
+ * lib/Makefile.am: doc fix.
+
+ * doc/Makefile.am (install-tex): prefix the install directories
+ with $(DESTDIR), because that is what automake does for all
+ generated install rules. The file pdfcolor.tex should be
+ installed as such (and not as epsf.tex).
+ From: Peter Breitenlohner <peb@mppmu.mpg.de>.
+
+ * configure.ac (AC_INIT): now pass [GNU Texinfo].
+ (AM_INIT_AUTOMAKE): now no args, for automake 1.6.
+
+2002-03-05 <karl@gnu.org>
+
+ * doc/texinfo.txi: history
+
+2002-03-04 <karl@gnu.org>
+
+ * configure.ac: version 4.1.
+ * util/texi2dvi: version.
+
+ * doc/texinfo.txi: @settitle is used in html output (from Eli),
+ various underfull hbox fixes.
+
+2002-03-02 <karl@gnu.org>
+
+ * configure.ac: pretest 4.0k
+
+ * info/info.c: declare add_file_to_directory to avoid warning.
+
+ * doc/info-stnd.texi: info standalone so as not to collide with
+ `standards' in dir.
+
+2002-03-01 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/insertion.c (end_insertion): Insert the /td and /tr
+ directives in lower case. From Per Bothner <per@bothner.com>.
+
+ * makeinfo/macro.c (cm_alias): Ignore whitespace around the alias
+ name, like the manual promises.
+
+ * doc/texinfo.txi (Invoking Macros, Macro Details): Document that
+ commas in macro arguments don't work in TeX. Advise texi2dvi -e
+ when macros don't work with TeX.
+
+ * doc/texinfo.txi (Node Line Requirements): Add restrictions about
+ parens and some punctuation characters in node names.
+ (Def Cmd Template): Document that macros are not expanded.
+
+ The following two changes allow to say "info foo" if there's an
+ Info file `foo' somewhere along INFOPATH.
+
+ * info/info.c (add_file_directory_to_path): New function, code
+ moved from `main'.
+ (main): Use add_file_directory_to_path.
+
+ * info/session.c (info_follow_menus): If the first menu entry
+ couldn't be found as an item in DIR's menu, try it as a file name.
+
+ 2001-06-19 Mark Montague <markmont@umich.edu>
+
+ * info/filesys.c: Fix for sparc64 (offsets should be "long"s).
+
+ * info/session.c: Fix typos in function calls.
+
+ 2001-08-23 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/footnote.c (cm_footnote): Don't allow footnotes inside
+ footnotes.
+ (output_pending_notes): Increment already_outputting_pending_notes
+ in the HTML case as well, to protect execute_string from
+ recursively entering output_pending_notes.
+
+2002-03-01 <karl@gnu.org>
+
+ * doc/texinfo.tex: fix mismatched $'s for sake of emacs font-lock.
+ From: Stephen Gildea <gildea@stop.mail-abuse.org>.
+
+2002-02-27 <karl@gnu.org>
+
+ * configure.ac: pretest 4.0j.
+
+ * info/infodoc.c: 1scroll-forward typo.
+
+2002-02-26 <karl@gnu.org>
+
+ * lib/system.h [! ENABLE_NLS]: let's not go const.
+
+2002-02-26 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * djgpp/config.sed: Add tweaking of file names in "install-info"
+ and "uninstall-info" targets.
+
+ * doc/inf-stnd.texi (Custom Key Bindings, Invoking infokey):
+ Add footnotes about DOS file names.
+
+ * info/infokey.c (main) [__MSDOS__]: If HOME is not defined,
+ default to the current directory.
+
+2002-02-26 <karl@gnu.org>
+
+ * lib/system.h (LC_MESSAGES) [! LC_MESSAGES]: need this after all.
+
+2002-02-25 <karl@gnu.org>
+
+ * doc/info-stnd.texi: contents at top, avoid overfull hbox.
+ * lib/Makefile.am (libtxi_a_sources): include gettext.h.
+
+ * lib/system.h (LC_MESSAGES): don't need conditional, Bruno says
+ that locale.h or libintl.h does so.
+
+ * configure.ac: pretest 4.0i.
+
+ * dir-example: infokey.
+ * doc/info-stnd.texi: invoking infokey.
+ * info/infokey.c (short_help): reorganize slightly.
+
+ * lib/system.h: use "gettext.h" instead of <libintl.h> per gettext
+ 0.11 recommendation.
+
+2002-02-25 gettextize <bug-gnu-gettext@gnu.org>
+
+ * Makefile.am (SUBDIRS): Add intl.
+ * configure.ac (AC_CONFIG_FILES): Add intl/Makefile.
+
+2002-02-25 <karl@gnu.org>
+
+ * util/Makefile.am (LDADD):
+ * makeinfo/Makefile.am (LDADD):
+ * info/Makefile.am (LDADD): @LIBINTL@ per gettextize.
+
+ * configure.ac: gettextize changes.
+ * Makefile.am: gettextize changes.
+
+2002-02-25 gettextize <bug-gnu-gettext@gnu.org>
+
+ * Makefile.am (SUBDIRS): Add m4.
+ (SUBDIRS): Remove intl.
+ (ACLOCAL_AMFLAGS): New variable.
+ (EXTRA_DIST): Add config.rpath.
+ * configure.ac (AC_CONFIG_FILES): Add m4/Makefile.
+ (AC_CONFIG_FILES): Remove intl/Makefile.
+
+2002-02-23 <karl@gnu.org>
+
+ * pretest 4.0h.
+
+ * 2002-02-23 Eli Zaretskii <eliz@is.elta.co.il>
+ * doc/info-stnd.texi (Invoking Info): Add a reference to the
+ description of index-apropos and index-search. Document the
+ --raw-escapes option.
+ (Searching Commands): Describe index-search and index-apropos.
+
+ * info/man.c (clean_manpage): If raw_escapes_p is not set, remove
+ ANSI escape sequences from the man page.
+
+ * info/info.h: Declare raw_escapes_p.
+
+ * info/info.c: <raw_escapes_p>: New variable.
+ New option --raw-escapes or -R.
+ (main): Handle it.
+ (info_short_help): Document it.
+ (main): Honor --output together with --usage, by dumping the node
+ we found to the named file.
+
+ 2002-02-23 Eli Zaretskii <eliz@is.elta.co.il>
+ * makeinfo/html.c (nodename_to_filename): Call
+ nodename_to_filename_1 with the last argument 1, not 0.
+
+ * makeinfo/toc.c (shortcontents_update_html)
+ (contents_update_html): Don't omit the entry for the Top node.
+
+ * 2002-01-30 Eli Zaretskii <eliz@is.elta.co.il>
+ * makeinfo/node.c (cm_node): Don't condition splitting on
+ top_node_seen being non-zero. If current_node is NULL, use the
+ current output file name to get at the file name for the previous
+ node. Don't compute a new file name for a node if we didn't close
+ the current file.
+
+ 2002-02-01 Eli Zaretskii <eliz@is.elta.co.il>
+ * makeinfo/node.c (cm_node): Call html_output_head whenever we
+ create a new split-HTML file.
+
+ * makeinfo/html.c (html_output_head): Make html_title static.
+ Compute it only once, and don't free it. Output the <h1> title
+ header only once per run.
+
+ 2002-02-02 Eli Zaretskii <eliz@is.elta.co.il>
+ * makeinfo/toc.c (contents_update_html): Fix the condition for
+ omitting duplicate TOC entries. Fix comparison with the TOC entry
+ for "Top".
+
+2002-02-14 <karl@gnu.org>
+
+ * doc/Makefile.am (DISTCLEANFILES): use this variable instead of
+ the distclean-aminfo target, which apparently is no longer used.
+
+ * pretest 4.0g.
+
+ * doc/texinfo.tex (\appendixentry): new macro for typesetting
+ appendix toc entries.
+ (\appendixzzz, \summarycontents, \pdfoutlines): use it, instead of
+ usurping \chapentry. This allows the bookmarks in the pdf output
+ to come out right. Report from: Kurt Hornik
+ <Kurt.Hornik@ci.tuwien.ac.at>.
+
+2002-02-13 <karl@gnu.org>
+
+ * configure.ac: ALL_LINGUAS is deprecated as of gettext 0.11.
+ * doc/texinfo.tex (\image): remove spurious \loggingall.
+
+ * doc/texinfo.txi: @math now implies @tex.
+ * doc/texinfo.tex (\math): imply @tex.
+
+2002-02-11 <karl@gnu.org>
+
+ * makeinfo/insertion.c (handle_verbatim_environment): save and
+ restore filling_enabled and inhibit_paragraph_indentation. Bug
+ report from: Alexandre Duret-Lutz <duret_g@lrde.epita.fr>.
+
+ * makeinfo/makeinfo.c (reader_loop): don't worry about bare braces
+ inside @math.
+
+2002-02-08 <karl@gnu.org>
+
+ * info/infodoc.c: keep underlines with the text they refer to, for
+ translation purposes.
+ Pointed out by Christian Rose <menthos@menthos.com>, 20 nov 2001.
+
+ * doc/info.texi: recommend setting INFOPATH.
+
+ * doc/Makefile.am (install-tex): need $(srcdir) for install.
+ From: istry <istry@mail.ru>.
+
+ * doc/texinfo.tex: replace $$$ delimiter with $.$, for sake of
+ font-lock in Emacs 21.1. Suggestion from: Stephen Gildea
+ <gildea@stop.mail-abuse.org>.
+
+ 2002-01-26 Eli Zaretskii <eliz@is.elta.co.il>
+ * info/infomap.c (default_emacs_like_info_keys)
+ (default_emacs_like_ea_keys, default_vi_like_info_keys)
+ (default_vi_like_ea_keys): Fix default keybindings to be
+ consistent with non-INFOKEY branch. Add bindings for Home, End,
+ and Delete keys.
+
+ 2002-01-23 Eli Zaretskii <eliz@is.elta.co.il>
+ * makeinfo/toc.h <TOC_ENTRY_ELT>: New member html_file.
+
+ * makeinfo/toc.c (toc_add_entry): Compute and set the html_file
+ member.
+ (shortcontents_update_html): Produce the toc_* links correctly,
+ without duplicating the link text. Fix comparison with "Top".
+ Handle the case when there's @shortcontents, but no @contents.
+ (contents_update_html): Fix the way toc_* anchors are produced
+ from toc_entry_alist[i]->name: take only the node name from the
+ string in toc_entry_alist[i]->name. Fix comparison with "Top".
+
+ * makeinfo/sectioning.c (sectioning_html): Take the toc_anchor
+ substring before closing the anchor with </a>. Fix the closing
+ </hN> tag--add 2 to level, not 1. Use sizeof instead of a magic
+ value of 9.
+
+ * makeinfo/cmds.c: Make @summarycontents call cm_shortcontents, as
+ promised by the docs.
+
+ 2002-01-19 Eli Zaretskii <eliz@is.elta.co.il>
+ * djgpp/config.sed: Fix a problem with AC_CONFIG_LINKS that
+ prevented building from a directory on another drive.
+
+ * djgpp/config.bat: Fix problems with long --srcdir diectory names.
+
+ * djgpp/README: Update.
+
+2002-01-31 <karl@gnu.org>
+
+ * doc/texinfo.txi: mention dvips
+
+2002-01-28 <karl@gnu.org>
+
+ * configure.ac (ALL_LINGUAS): add hr.
+
+2002-01-22 <karl@gnu.org>
+
+ * makeinfo/defun.c (defun.c): only warn about ( immediately
+ following a defun name, since the groff manual needs other
+ characters there where whitespace is incorrect.
+ Reported by Werner Lemberg <wl@gnu.org>.
+
+ * doc/info-stnd.texi: alphabetize variable list.
+
+ * doc/texinfo.txi: no :'s in index entries, index @page/@group
+ some more.
+
+ * makeinfo/index.c (index_add_arg): warn if index entry contains a
+ colon. From: Kenneth Lorber <keni@his.com>.
+
+2002-01-21 <karl@gnu.org>
+
+ * makeinfo/insertion.c: </pre not /<pre, reported by Mike
+ Benefield <mike@duckbrain.com>.
+
+2002-01-18 <karl@gnu.org>
+
+ * configure.ac: pretest 4.0f.
+
+ * util/texindex.c:
+ * util/install-info.c:
+ * makeinfo/makeinfo.c:
+ * info/info.c: it's 2002.
+
+ * info/session.c: pass right args to info_scroll_half_screen_up.
+ From Eli.
+
+2002-01-18 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/multi.c (multitable_item): Always return a value.
+
+ * util/install-info.c (xmalloc, xrealloc, pfatal_with_name)
+ (open_possibly_compressed_file, parse_input): Call `fatal' with 3
+ arguments, to avoid compiler warnings.
+ (main): Call `fatal', `error', and `warning' with the right number
+ of arguments.
+
+ * makeinfo/makeinfo.c (main): Remove extraneous first arg of
+ usage().
+
+ * info/window.c (build_message_node): Supply a 4th argument to
+ build_message_buffer.
+
+
+2002-01-18 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/sectioning.c (sectioning_html): End the anchor properly
+ with a </a>.
+
+ * info/session.c (info_menu_or_ref_item): If we didn't find a
+ cross-reference on this line, try the one before.
+
+ * info/infomap.c (fetch_user_maps): Provide two different
+ translations for ``file too small'' and ``file too big'' error.
+
+ * info/info.c (info_short_help): Print the --speech-friendly
+ option together with the other options, not at the end of the help
+ screen.
+
+2002-01-18 Andreas Schwab <schwab@suse.de>
+
+ * makeinfo/html.c (escape_string): When string is empty don't read
+ past end of it.
+
+2002-01-17 <karl@gnu.org>
+
+ * doc/info-stnd.texi: overfull box in table.
+
+2002-01-16 <karl@gnu.org>
+
+ * configure.ac: pretest 4.0e.
+
+ * doc/info.texi: update from emacs.
+
+2002-01-03 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/makeinfo.c (file_line_error): New function.
+
+ * makeinfo/insertion.c (discard_insertions): Call file_line_error
+ instead of changing global variables.
+
+ * makeinfo/sectioning.c (cm_top): Ditto.
+
+ * makeinfo/node.c (validate_file): Ditto.
+
+ * makeinfo/makeinfo.c (discard_braces, handle_variable_internal):
+ Ditto.
+
+ * makeinfo/macro.c (define_macro): Ditto.
+
+ 2001-12-31 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/node.h (TAG_ENTRY): New struct member html_fname.
+
+ * makeinfo/node.c (find_node_by_fname): New function.
+ (remember_node): Accept an additional argument FNAME, the node's
+ file name, and record it in the list of nodes; callers changed.
+ (cm_node): Call find_node_by_fname to see if this node's file name
+ clashes with another node or anchor. If it clashes with another
+ node, append the new node to the same file instead of erasing the
+ other node. If it clashes with an anchor, print an error message
+ and overwrite the anchor's file.
+ (cm_anchor): If this anchor's file name clashes with another
+ anchor or node, print an error message and ignore the anchor.
+
+ * makeinfo/files.c (normalize_filename): New function.
+
+ * makeinfo/files.h <normalize_filename>: Add declaration.
+
+ * makeinfo/html.c (nodename_to_filename_1): Call
+ normalize_filename before returning the file name to the caller.
+ Disable the code which adds #Nodified-filename to the file name we
+ produce.
+
+ * makeinfo/makeinfo.c (add_char): Don't replace whitespace with
+ &nbsp; if we are producing an HTML directive.
+ (add_html_elt): New function.
+ (cm_xref, cm_inforef, cm_uref, cm_email, cm_image): Use
+ add_html_elt instead of add_word, where appropriate.
+
+ * makeinfo/html.c (add_link): Ditto.
+
+ * makeinfo/footnote.c (cm_footnote): Ditto.
+
+ * makeinfo/defun.c (defun_internal): Ditto.
+
+ 2001-12-27 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/node.c (cm_node): Don't omit links to (DIR) from the
+ navigation bar, add_anchor_name will DTRT now.
+
+ * makeinfo/makeinfo.c (cm_xref): Produce a split-HTML file name
+ from arg1, the node name, not from arg3 or arg2, which are the
+ reference name. Use arg2 or arg3 for the text to be displayed as
+ a link between ">" and "</a>". Use add_anchor_name instead of
+ add_nodename_to_filename.
+ (cm_inforef): Use add_anchor_name instead of
+ add_nodename_to_filename. Handle the case of a missing second
+ argument in @inforef.
+
+ * makeinfo/html.c (add_anchor_name): Always add # and the anchor
+ name, even if we are splitting. If the node is "(dir)", treat it
+ as if it were "dir".
+ (nodename_to_filename_1): Don't append #Top for the Top node.
+ (add_link): Don't punt if nodename is "(dir)". Output "</a>"
+ after the link.
+
+ 2001-12-25 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/makeinfo.c (cm_xref, cm_inforef): Output the target
+ file name via add_nodename_to_filename.
+
+ 2001-12-20 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/html.c (nodename_to_filename_1): Make references to Top
+ to refer to index.html#Top.
+ (add_nodename_to_filename): Accept additional argument HREF;
+ callers changed.
+
+ * makeinfo/toc.c (rewrite_top): If the filename to rewrite is
+ stdout or the null device, do nothing.
+
+ * makeinfo/makeinfo.c (insert_toplevel_subdirectory): Use
+ FILENAME_CMP instead of strcmp. Search for a period forward, not
+ backward. Make index_name[] a static const array, and its len
+ computed at compile time.
+ (convert_from_loaded_file): If output_filename is the null device,
+ turn off HTML splitting.
+ (cm_xref): Use add_anchor_name, rather than add_escaped_anchor_name,
+ in the 5-argument case in HTML mode.
+ (cm_inforef): Fix external references in HTML mode.
+
+ * makeinfo/node.c (cm_node): Use FILENAME_CMP instead of strcmp.
+ Don't open a new file if the new node's name is empty. Take the
+ directory part of split-HTML files from current_output_filename,
+ not from toplevel_output_filename (the latter doesn't include the
+ manual's subdirectory part).
+
+ * makeinfo/html.c (nodename_to_filename_1): Use FILENAME_CMPN
+ instead of strncmp. Support *.inf files in references.
+
+2001-12-11 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * djgpp/config.bat, djgpp/config.sed, djgpp/config.site: Update
+ for Texinfo 4.0d.
+
+ * makeinfo/makeinfo.c (insert_toplevel_subdirectory): Use IS_SLASH
+ instead of literal `/'.
+ (convert_from_loaded_file): Flush the output stream before
+ creating the TOC.
+
+
+2002-01-14 <karl@gnu.org>
+
+ * info/info.c: translate --speech-friendly (from Eli).
+ * makeinfo/index.c: formatting.
+
+ 2001-12-24 Eli Zaretskii <eliz@is.elta.co.il>
+ * info/infomap.c (initialize_info_keymaps): Bind the user-defined
+ keys on top of the default ones, not the other way around.
+
+2002-01-11 <karl@gnu.org>
+
+ * info/info.c: can't do #ifdef inside of printf any more.
+ From: Tyler <tyler@zerodivide.cx>
+
+ * configure.ac (ALL_LINGUAS): add he, from Eli.
+
+2002-01-09 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * info/window.c (calculate_line_starts): Cast node->contents[i] to
+ unsigned char.
+
+2002-01-04 <karl@gnu.org>
+
+ * doc/texinfo.tex (\footnotezzz): \noindent=\relax.
+
+2002-01-03 <karl@gnu.org>
+
+ * doc/texinfo.tex (\imagexxx): handle pdf and dvi cases the same.
+ (\dopdfimage): need \immediate to avoid seg fault when including the
+ same image twice.
+ Bug reports from Alexandre Duret-Lutz <duret_g@lrde.epita.fr>.
+
+2001-12-31 <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (cm_image): check *ext_arg as well as
+ ext_arg when computing length of fullname.
+
+ * makeinfo/defun.c: docbook changes.
+ * makeinfo/docbook.c (docbook_punctuation): remove deprecated
+ default: at end of statement.
+
+ * makeinfo/docbook.c: initial.
+ * makeinfo/docbook.h: initial.
+ * makeinfo/Makefile.am (makeinfo_SOURCES): add docbook.[ch].
+ * makeinfo/makeinfo.c (add_char): use &nbsp; in docbook case.
+
+ * doc/texinfo.tex (\footnotezzz): use \everypar={\hang} instead of
+ just \hang in case a footnote extends for multiple paragraphs.
+
+2001-12-18 <karl@gnu.org>
+
+ * info/Makefile.am (BUILT_SOURCES): include $(EXEEXT) on makedoc
+ dependency since automake doesn't do it.
+
+ 2001-12-11 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * djgpp/config.bat, djgpp/config.sed, djgpp/config.site: Update
+ for Texinfo 4.0d.
+
+ * info/infomap.c (fetch_user_maps): Initialize `filename' to NULL
+ and don't try to call `open' if `filename' is NULL.
+ [__MSDOS__]: Try the current directory if neither $INFOKEY nor
+ $HOME are defined.
+
+ * makeinfo/makeinfo.c (insert_toplevel_subdirectory): Use IS_SLASH
+ instead of literal `/'.
+ (convert_from_loaded_file): Flush the output stream before
+ creating the TOC.
+
+ 2001-12-10 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * info/infokey.c (main): Use FOPEN_WBIN instead of "w".
+
+ * info/infokey.h (INFOKEY_SRCFILE, INFOKEY_FILE) [__MSDOS__]:
+ Special definitions for MS-DOS.
+
+ 2001-12-09 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * lib/system.h: Condition inclusion of libintl.h on ENABLE_NLS.
+ (gettext, bindtextdomain, textdomain) [!ENABLE_NLS]: Provide
+ trivial definitions for when NLS is not used.
+ (LC_MESSAGES) [!ENABLE_NLS]: Define if undefined by locale.h.
+
+2001-12-18 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * info/infomap.c (decode_keys): Change the return type to int;
+ callers changed. Return zero if some of the special keys in SRC
+ are not defined by the terminal; return non-zero otherwise.
+ (section_to_keymaps): If decode_keys returns zero, don't bind the
+ key sequence.
+
+2001-12-18 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/xml.c (xml_insert_element_with_attribute)
+ (xml_insert_element): Rename the argument `element' to `elt'.
+
+ * info/infokey.c (compile): Use \033 instead of (non-standard) \e.
+
+2001-12-17 <karl@gnu.org>
+
+ 2001-12-16 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * info/pcterm.c (pc_initialize_terminal) [INFOKEY]: Store term_kh,
+ term_ke, term_ki, and term_kx sequences.
+ (DJGPP_keytab): Map Home, End, and Insert to escape sequences, not
+ to C-a, C-e, etc.
+
+ * info/infomap.c (default_emacs_like_info_keys)
+ (default_emacs_like_ea_keys, default_vi_like_info_keys)
+ (default_vi_like_ea_keys): Add the leading suppress-default flag,
+ to be consistent with the table which comes from a file.
+
+ * info/session.c (info_do_lowercase_version): Add a doc string.
+
+ * info/infodoc.c (describe_key) [INFOKEY]: If keystroke is bound
+ to do-lowercase-version, but its lower-case variant is undefined,
+ say that keystroke is also undefined.
+
+
+2001-12-12 <karl@gnu.org>
+
+ * makeinfo/files.c (find_and_load): remove conditionals on
+ VMS|O_BINARY, always just read as many bytes as we can.
+
+ 2001-12-11 Eli Zaretskii <eliz@is.elta.co.il>
+ * new files for djgpp/.
+
+ 2001-09-09 Eli Zaretskii <eliz@is.elta.co.il>
+ * info/echo-area.c (build_completions): Look for a candidate
+ completion which matches user's request including the letter-case,
+ use that as the value of LCD_completion.
+
+ 2001-12-06 Eli Zaretskii <eliz@is.elta.co.il>
+ * info/echo-area.c (build_completions): When looking for the best
+ completion candidate, only compare as much characters as the user
+ typed.
+
+
+2001-12-04 <karl@gnu.org>
+
+ * doc/texinfo.tex (\pdfmkpgn): remove trailing @ in link names
+ again. Also from Kurt.
+
+ * doc/texinfo.tex (\image): need five commas to ignore additional
+ optional args to @image. From Kurt.Hornik@ci.tuwien.ac.at.
+
+ * doc/texinfo.tex (\afourlatex): reset \globaldefs=0 explicitly.
+ From Trond Endrestøl <trond@ramstind.gtf.ol.no>.
+
+2001-12-01 <karl@gnu.org>
+
+ * makeinfo/files.c (find_and_load): remove O_BINARY from open
+ call, this messes up under Windows. From eli.
+
+2001-11-20 <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (cm_image): reword error messages.
+
+2001-11-19 <karl@gnu.org>
+
+ * Pretest 4.0d.
+ * doc/texinfo.txi: index ragged right/left.
+
+ * info/window.c (build_message_buffer): handle %1$s as used in
+ ja.po. From Fumitoshi UKAI <ukai@debian.or.jp>.
+
+ * configure.ac (ALL_LINGUAS): add sv.
+
+2001-11-16 <karl@gnu.org>
+
+ * Makefile.am (EXTRA_DIST): add COPYING.DOC.
+
+ 1999-10-30 Andrew Bettison <andrewb@zip.com.au>
+
+ All these changes are to implement user-configurable key mapping
+ using the new 'infokey' program. For the time being, the new
+ code is conditional on [INFOKEY] and the old code is still there
+ in case we want to revert.
+
+ * info/session.c (incremental_search): test for printable chars
+ _before_ isearch command keys -- makes a difference if the
+ isearch commands are bound to printable chars.
+
+ * info/doc.h,
+ * info/infodoc.c,
+ * info/infomap.c,
+ * info/m-x.c,
+ * info/session.c: New typedef InfoCommand, plus a bunch of
+ supporting macros, to abstract a "command" away from being a
+ function pointer.
+
+ * info/doc.h (pretty_keyseq),
+ * info/infodoc.c (pretty_keyseq),
+ * info/session.c (pretty_keyseq): Moved definition from
+ session.c into infodoc.c, and rewrote to recognise special
+ terminal sequences (PgUp, PgDn, etc.).
+
+ * info/infodoc.c (create_internal_info_help_node,
+ replace_in_documentation, info_where_is),
+ * info/m-x.c (info_execute_command): Cleaned up references to
+ hardwired keystrokes.
+
+ * info/infodoc.c (replace_in_documentation):
+ Extended the \\[foo] syntax to recognise \\%-X.Y[foo], which
+ causes the replacement text to be inserted using sprintf("%-X.Ys").
+
+ * info/session.c (_scroll_forward, _scroll_backward,
+ scroll_forward_page_only, scroll_backward_page_only,
+ scroll_forward_page_only_set_window,
+ scroll_backward_page_only_set_window): New functions, eliminating
+ need for SPC and DEL hack.
+
+ * info/session.c (scroll_forward, scroll_backward,
+ scroll_forward_set_window, scroll_backward_set_window): Call
+ _scroll_forward and _scroll_backward to do all the work.
+
+ * info/infomap.c (initialize_info_keymaps)[!INFOKEY]: set 'v'
+ and Control('v') key bindings to info_scroll_backward_page_only
+ and info_scroll_forward_page_only respectively.
+
+ * info/Makefile.am (bin_PROGRAMS): Added new executable `infokey'.
+ (infokey_SOURCES): Defined.
+ (EXTRA_DIST): Added `sample_infokey'.
+ (BUILT_SOURCES): Added `key.c'.
+
+ * info/infokey.h,
+ * info/infokey.c: Created, for new program `infokey' which
+ creates a $HOME/.info file by compiling a text source file with
+ syntax very similar to that used by `lesskey' in less 3.4.0.
+
+ * info/makedoc.c: Generate new file `key.c' defining an array to
+ map command names to codes.
+
+ * info/key.h: Created, to define contents of new `key.c' now
+ created by makedoc.
+
+ * info/info.h (INFOKEY): Define, to enable all following changes.
+ (set_variable_to_value)[INFOKEY]: Declare new function.
+
+ * info/makedoc.c [INFOKEY]: Write '#define A_' numeric command
+ code definitions into `funs.h' to support new key binding system.
+
+ * info/session.c (info_dispatch_on_key, info_numeric_arg_digit_loop)
+ [INFOKEY],
+ * info/infomap.c [INFOKEY],
+ * info/infodoc.c (function_documentation, function_name,
+ describe_key, pretty_keyname, pretty_keyseq_internal,
+ where_is_internal)[INFOKEY],
+ * info/terminal.h (term_kh, term_ke, term_kx, term_ki)[INFOKEY],
+ * info/terminal.c (term_kh, term_ke, term_kx, term_ki,
+ terminal_initialize_terminal)[INFOKEY],
+ * info/variables.c (set_variable_to_value)[INFOKEY],
+ * info/sample_infokey: Added infokey functionality, copied more
+ or less wholesale from 'lesskey' in GNU Less 3.4.0. Added a new
+ typedef struct FUNCTION_KEYSEQ, and a new element `keys' to
+ typedef struct FUNCTION_DOC, to give the user some control over
+ the keystrokes that appear in the documentation node generated
+ by get-help-window, and to improve efficiency a little.
+
+ * info/infodoc.c (info_internal_help_text,
+ create_internal_info_help_node)[INFOKEY]: Rewrote all code that
+ assumes fixed keystrokes, replacing %10s sequences with \\%10[foo]
+ sequences instead.
+
+ * doc/info-stnd.texi: Documented above changes.
+
+2001-09-19 <karl@gnu.org>
+
+ * makeinfo/cmds.c: </ not /<, duh :). From janneke.
+
+2001-09-12 <karl@gnu.org>
+
+ * configure.ac (AC_SYS_POSIX_TERMIOS, AC_HEADER_TIOCGWINSZ): use
+ these new autoconf macros instead of the old automake ones.
+
+ * info/terminal.c: remove unconditional include of sys/ioctl.h.
+ * info/termdep.h: <sys/ioctl.h> [GWINSZ_IN_SYS_IOCTL]: include outside of HAVE_TERMIOS_H,
+ per autoconf manual.
+
+ * doc/Makefile.am (install-info-am): remove override of automake's
+ target, instead enable looking in . for info files within automake.
+
+ * doc/info-stnd.texi: include separate version-stnd.texi
+ * configure.ac: autoconf 2.52, and rename to configure.ac.
+
+2001-09-11 <karl@gnu.org>
+
+ * doc/texinfo.txi: recommend against using - and _ in @set names,
+ * and rearrange that section.
+
+ * info/infodoc.c (replace_in_documentation): free fun_name to fix
+ memory leak.
+ From: "Art Haas" <ahaas@neosoft.com>, Sat, 4 Aug 2001 08:34:31 -0500.
+
+ * makeinfo/lang.c: encoding support for info output from kama.
+ * makeinfo/lang.h: encoding support for info output from kama.
+
+ * makeinfo/html.c: include document encoding code unless
+ no_encoding.
+ * makeinfo/insertion.c (cm_direntry): don't call begin_insertion
+ if ignoring.
+ (cm_documentdescription): moved here, and likewise.
+ (begin_insertion): don't need output format conditionals here.
+
+ * makeinfo/cmds.c (cm_documentdescription): move to insertion.c.
+ * makeinfo/makeinfo.h (enable_encoding): new global.
+ * makeinfo/makeinfo.c: new option --enable-encoding, rearrange help.
+
+ Sun Oct 31 18:44:24 UTC 1999 Karl Heinz Marbaise <kama@hippo.fido.de>
+
+ - lang.{c,h}:
+ o added translation map between HTML markups and 8-Bit
+ (ISO-8859-1 codes; supplemental is Unicode for the future).
+ o added cm_search_iso_map:
+ search for characters based on HTML markup names for
+ translation 8-Bit code.
+ o recognizing of @documentencoding improved.
+ now we can recognize things like ISO-8859-{1...15}
+
+ - makeinfo.{c,h}:
+ o added two command line switches.
+ + info-encoding to activate the encoding for info output
+ which is correctly shown by info. Default is NOT to
+ encode the output to be compatible with earlier versions.
+ + no-encoding to suppress encoding e.g. while producing
+ ASCII output (--no-headers) results in that you get
+ "A for &Auml; as before.
+ o help output changed to document the switches.
+
+ - html.c:
+ charset encoding in html based on @documentencoding.
+
+
+2001-07-31 <karl@gnu.org>
+
+ * doc/texinfo.txi: mention pdfcolor.tex.
+ * doc/texinfo.tex: doc.
+ * doc/Makefile.am (install-tex): install pdfcolor.tex too.
+ * doc/pdfcolor.tex: new file, since Kurt.Hornik@ci.tuwien.ac.at
+ reports that not all pdftex installations include it.
+
+2001-07-25 <karl@gnu.org>
+
+ * doc/texinfo.tex (\Etitlepage): need \HEADINGSon before the
+ \...aftertitlepage checks to get page numbers. Report from
+ 3diff@gnu.org.
+
+2001-07-06 <karl@gnu.org>
+
+ * doc/texinfo.txi: mention http://docbook2X.sourceforge.net/.
+
+2001-06-29 <karl@gnu.org>
+
+ * makeinfo/makeinfo.c: make output to stdout imply --no-split for
+ HTML, too.
+
+ * makeinfo/html.c (html_output_head): use documentdescription if set.
+ * makeinfo/insertion.h (insertion_type): new case documentdescription.
+ * makeinfo/insertion.c (begin_insertion, end_insertion,
+ insertion_type_names): new case for documentdescription.
+ * makeinfo/cmds.c (cm_documentdescription): new fn.
+ * makeinfo/makeinfo.h (document_description): new global.
+ * doc/texinfo.txi: @documentdescription.
+ @documentdescription implementation from patches by Will Estes.
+
+2001-06-26 <karl@gnu.org>
+
+ * doc/texinfo.txi: documentdescription
+ * doc/texinfo.tex: Ignore @documentdescription ... @end
+ documentdescription.
+
+ * doc/texinfo.txi: document sequential punctuation in @footnote is
+ normal, suggested by rms.
+
+2001-06-21 <karl@gnu.org>
+
+ * doc/texinfo.tex (\textfonts): call \setleading here, so that we can
+ switch font sizes back and forth inside @tex with \globaldefs=1
+ and not lose the leading.
+
+ * doc/texinfo.txi: allow @smallbook to run without overfull or
+ underfull boxes.
+
+2001-06-19 <karl@gnu.org>
+
+ * doc/texinfo.tex (\imagexxx): ignore new optional args to @image.
+
+ * makeinfo/html.c (html_output_head): include <h1>title</h1> at
+ beginning of document.
+ * makeinfo/sectioning.c (cm_top): don't include explicit links in
+ HTML output, the regular code for @node will do it.
+ (sectioning_html): use <h2> for chapter instead of <h1>, etc.
+ * makeinfo/node.c (cm_node): do not include code to output the
+ HTML <head>, we do that elsewhere now.
+
+ 1999-11-26 W. L. Estes <will@fumblers.org>
+ * makeinfo/insertion.c (begin_insertion): add an explicit <br>
+ before beginning a <pre> block. for flushleft and flushright, use
+ <div> tag with an align attribute set.
+ * makeinfo/insertion.c (end_insertion): for flushleft and
+ flushright, end the </div> block.
+
+ * makeinfo/makeinfo.c (cm_image): new variable, alt_arg now allows
+ user-supplied alt attribute value and
+ ext_arg allows user-supplied extension for image files.
+
+ * makeinfo/toc.c (contents_update_html): add anchors at chapter
+ level entries
+ (shortcontents_update_html): hrefs in shortcontents point to the
+ above anchors in the detailed contents
+
+ * doc/texinfo.txi: document changes to @image and the new behavior
+ of shortcontents entries
+
+2001-06-14 <karl@gnu.org>
+
+ * makeinfo/node.c: no need for size_t.
+
+2001-06-13 <karl@gnu.org>
+
+ * texinfo.tex (\pdfmkdest): \normalturnoffactive, so refs and
+ defs match.
+ (\xrefX): pdf link defs no longer use @, so link refs shouldn't use @
+ either. (All xrefs in pdf were failing.)
+ (\mkpgn): remove redundant second definition.
+
+ * texinfo.tex (\smallerfonts): new font size.
+ (\smallexample, et al.): use it, in all cases, not just @smallbook.
+
+ 1999-11-30 Andreas Schwab <schwab@suse.de>
+ * doc/texinfo.tex (\xrefX): Turn off active characters when writing
+ out the link name for pdf.
+
+2001-06-13 <karl@gnu.org>
+
+ * doc/texinfo.txi: document that @smallexample is smaller in all
+ page formats now.
+
+2001-06-11 <karl@gnu.org>
+
+ * 4.0c.
+ * util/Makefile.am: Don't need automake patch any more, with
+ automake 1.4p4.
+
+ * configure.in (AC_FUNC_SETVBUF_REVERSED): only needed on
+ pre-sysvr3 systems that nobody has anymore? Or so Russ Allbery
+ informs me ...
+
+2001-06-08 <karl@gnu.org>
+
+ * makeinfo/Makefile.am (EXTRA_DIST): include texinfo.{dtd,xsl}.
+
+ * util/Makefile.am: automake-1.4p3 now.
+
+2001-06-07 <karl@gnu.org>
+
+ * util/texi2dvi: comment out conditional text, from Werner LEMBERG
+ <wl@gnu.org>.
+
+ 2001-06-02 Eli Zaretskii <eliz@is.elta.co.il>
+ * info/echo-area.c (info_read_completing_internal): If there are
+ no completions, say that instead of "Not complete".
+
+ * configure.in (ALL_LINGUAS): add da
+
+ * makeinfo/Makefile.am (pkgdata_DATA): include texinfo.xsl.
+
+ * configure.in: update for autoconf 2.50.
+
+2001-06-04 <karl@gnu.org>
+
+ * util/Makefile.am (EXTRA_DIST): automake-14p2.patch now.
+ * util/automake-14p2.patch: rename from 14p1.
+
+2001-05-22 <karl@gnu.org>
+
+ * changes from feloy for lowercase xml names, etc.
+
+2001-05-21 <karl@gnu.org>
+
+ * util/Makefile.am (EXTRA_DIST): add automake-14p1.patch.
+ * makeinfo/Makefile.am (pkgdata_DATA): define to install
+ texinfo.dtd.
+
+ 2001-05-17 Eli Zaretskii <eliz@is.elta.co.il>
+ * makeinfo/makeinfo.c (cm_xref, cm_inforef): Don't allow empty
+ first arguments in cross references.
+
+ * makeinfo/makeinfo.c: redo --help, basic patch from ke@suse.de.
+
+2001-05-03 <karl@gnu.org>
+
+ * doc/info.texi: move help-cross to be subnode of cross-refs,
+ instead dangling out in space.
+ * doc/info.texi: update from eli
+
+2001-05-02 <karl@gnu.org>
+
+ * makeinfo/xml.c (xml_push_current_element): need to select the
+ `name' member.
+
+2001-05-01 <karl@gnu.org>
+
+ * configure.in: 4.0b
+
+ * doc/info.texi (Help-Cross): subsection of Cross-refs.
+
+ * lib/system.h (va_alist, etc.): moved from makeinfo.c.
+ * makeinfo/makeinfo.c (va_alist, etc.): move to system.h
+
+ * makeinfo/xml.[ch]: new files from Philippe Martin <feloy@free.fr>.
+ * pretty much all files also modified for XML/DocBook output.
+ * doc/texinfo.txi: minimally mention --xml and --docbook.
+ * makeinfo/xml.c: convert to K&R until we can do ansi2knr.
+
+ * util/texindex.c,
+ * util/install-info.c,
+ * info/info.c: it's 2001.
+
+2001-04-15 <karl@gnu.org>
+
+ * doc/info.texi: major update from eli.
+
+2001-04-13 <karl@gnu.org>
+
+ 1999-10-16 Eli Zaretskii <eliz@is.elta.co.il>
+ * makeinfo/node.c (cm_node): Don't generate cross-references to
+ "(DIR)".
+ * makeinfo/html.c (add_link): Likewise.
+
+ 1999-10-16 Eli Zaretskii <eliz@is.elta.co.il>
+ * makeinfo/makeinfo.c (insert): Don't call html_output_head here.
+ (add_char): Call html_output_head here...
+ * makeinfo/cmds.c (cm_sp): ...and here...
+ * makeinfo/toc.c (cm_contents, cm_shortcontents): ...and here...
+ * makeinfo/node.c (cm_anchor): ...and here.
+
+ * makeinfo/html.c (html_output_head): `free' html_title if
+ expanded. Make <head> and <body> stand out.
+
+2001-04-12 <karl@gnu.org>
+
+ 1999-12-26 Eli Zaretskii <eliz@is.elta.co.il>
+ * makeinfo/defun.c (defun_internal): Use execute_string instead
+ add_word_args to expand defined_name, type_name and category (in
+ HTML mode).
+
+2001-03-29 <karl@gnu.org>
+
+ * Makefile.am: simple license.
+
+2001-02-27 <karl@gnu.org>
+
+ 1999-12-17 Yoshiki Hayashi <t90553@mail.ecc.u-tokyo.ac.jp>
+ * info/terminal.h, info/terminal.c (term_kh, term_ke, term_kD):
+ New variables to hold Home, End, Delete key sequences.
+ * info/infomap.c (initialize_emacs_like_keymaps,
+ initialize_vi_like_keymaps): Set them.
+
+ * makeinfo/makeinfo.h,
+ * makeinfo/makeinfo.c: --split-size option from Yoshiki:
+ 1999-12-09 Yoshiki Hayashi <t90553@mail.ecc.u-tokyo.ac.jp>
+ * makeinfo/makeinfo.h (split_size): New option.
+ * makeinfo/makeinfo.c (long_options): Add split_size.
+ (usage): Ditto. Suggested by Richard Y. Kim.
+
+ * util/texi2dvi: -o support from Akim.
+
+2001-02-02 <karl@gnu.org>
+
+ * dir-example: don't need zsh twice.
+
+ From: Nishio Futoshi <fut_nis@d3.dion.ne.jp>, 02 Apr 2000.
+ * doc/texinfo.txi: capitalization fixes.
+ * doc/info.texi: up pointer fixes.
+ * doc/texinfo.txi: installing an info file.
+
+ * makeinfo/makeinfo.c: --output is for split html, not non-split.
+ From: Karl Eichwalder <keichwa@gmx.net>
+
+2001-01-12 <karl@gnu.org>
+
+ 1999-10-15 Eli Zaretskii <eliz@is.elta.co.il>
+ * makeinfo/cmds.c (cm_sc): Don't print the warning about
+ all-uppercase argument in menus under --no-headers.
+
+ * makeinfo/files.c: pass O_BINARY flag to open, suggested by bfox.
+
+2001-01-11 <karl@gnu.org>
+
+ * info/terminal.c [HAVE_TERMIOS_H && TCOON]: tcflow TCOOFF/TCCON
+ to resume output if user presses CTRL-S at the beginning of
+ things.
+ [HAVE_TERMIO_H && TCXONC]: ditto.
+ From Kevin Ryde <user42@zip.com.au>, 16jun2000;
+ cf. emacs/src/sysdep.c.
+
+2001-01-08 <karl@gnu.org>
+
+ * makeinfo/cmds.c: afivepaper, afourwide, afourlatex.
+ * doc/texinfo.txi: afivepaper
+
+2001-01-05 <karl@gnu.org>
+
+ * doc/info.texi: typo from: Martin Buchholz <martin@xemacs.org>.
+ * doc/info.texi: typo fixes from meyering.
+
+2001-01-02 <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (remember_brace_1): don't assume command is
+ non-null, an (erroneous) input line like \hbox to7in{ passes in a
+ null.
+
+ * makeinfo/toc.c: fix from jan
+ * makeinfo/html.c: fix from jan for top-level references.
+
+2000-12-22 <karl@gnu.org>
+
+ * makeinfo/makeinfo.c: --help changes.
+ * doc/texinfo.txi: -o means the directory name for HTML output.
+
+2000-12-21 <karl@gnu.org>
+
+ * doc/texinfo.txi: switch to fdl
+
+ * makeinfo/html.c: doc fix.
+ * makeinfo/insertion.c: no space after _ I guess.
+ * makeinfo/cmds.c: no space after _ I guess.
+
+ * makeinfo/html.c (nodename_to_filename_1): fix up external
+ * top-node references.
+
+2000-12-20 <karl@gnu.org>
+
+* HTML table patch from Jan:
+ 2000-12-19 Jan Nieuwenhuizen <janneke@gnu.org>
+
+ * makeinfo/multi.c (multitable_item),
+ (cm_tab): close html table columns. Also, align cell contents to
+ top, which is probably the most sensible thing to do for text.
+
+
+2000-12-19 <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (insert_toplevel_subdirectory): try
+ name.html if just name doesn't work.
+
+ * doc/texinfo.txi: document html output in .html directory
+ sometimes.
+
+ * util/Makefile.am (EXTRA_DIST): add install-info-html.
+
+ * util/texindex.c: 2000
+ * util/install-info.c: 2000
+ * info/info.c: 2000
+ * configure.in: 4.0a
+
+ * lib/system.h: include limits.h
+
+ * Applied HTML splitting changes from Jan:
+ 2000-11-10 Jan Nieuwenhuizen <janneke@gnu.org>
+
+ * makeinfo: removed code for numbered split HTML output, removed
+ SPLIT_JCN conditional.
+
+ 2000-11-09 Jan Nieuwenhuizen <janneke@gnu.org>
+
+ * makeinfo/html.c: prepared nodifying filename functions for
+ linking not non-spit HTML documents, by adding ``#anchor'' to
+ external refernces.
+
+ * doc/texinfo.txi (Installing HTML info): updated doco for --html
+ option, added node Installing HTML info.
+
+ * util/install-info-html.in: new script. The bare minimum
+ required for generating HTML index.
+
+ * lib/system.h: compilation fix.
+
+ 2000-11-08 Jan Nieuwenhuizen <janneke@gnu.org>
+
+ * makeinfo/makeinfo.c (convert_from_loaded_file): [SPLIT_JCN]:
+ overloaded already way too hairy function with logic to put split
+ html output into subdirectory with basename of toplevel output
+ file.
+
+ * makeinfo/html.c (fix_filename): new function.
+
+ 2000-11-07 Jan Nieuwenhuizen <janneke@gnu.org>
+
+ * toc.c (toc_add_entry):
+ (contents_update_html):
+ (shortcontents_update_html): [SPLIT_JCN]: use hrefs for nodename based
+ html files.
+
+ * node.c (cm_node): [SPLIT_JCN]: create html filename based on
+ nodename (instead of a numbered node<num>.html filename).
+
+ * makeinfo/makeinfo.c (main): [SPLIT_JCN]: enable splitting of
+ html output.
+
+ * makeinfo/html.c
+ (add_url_name,add_nodename_to_filename,nodename_to_filename): new
+ functions.
+
+2000-12-15 <karl@gnu.org>
+
+ * configure.in (AC_CHECK_HEADERS): add limits.h explicitly.
+
+2000-11-10 <karl@gnu.org>
+
+ * dir-example: update
+ * info/nodes.c: doc fixes, etc.
+
+ * incorporated verbatim patch from janneke:
+ 2000-04-14 <janneke@gnu.org>
+
+ * applied texinfo-3.12s.jcn4 patch
+
+ 1999-09-02 <janneke@gnu.org>
+
+ * makeinfo/cmds.c,
+ * makeinfo/insertion.c: @verbatiminclude file
+ * doc/texinfo.tex: @verbatiminclude file
+ * doc/texinfo.txi: @vebatiminclude file doco
+ * NEWS: added @verbatiminclude to Language section
+
+ 1999-09-01 <janneke@gnu.org>
+
+ * makeinfo/makeinfo.c: bf: @exdent (urg6.texi) -- Rolled into 4.0
+ * NEWS: added verb* to Language section
+ * doc/texinfo.txi: @verb, @verbatim doco
+ * doc/texinfo.tex: tricky tex-fix for @verb{<char>..<char>}
+ * doc/texinfo.tex: real tab expansion for @verbatim mode
+ * doc/texinfo.tex: proper start of environment, no indentation
+
+ 1999-08-31 <janneke@gnu.org>
+
+ * makeinfo/cmds.c:
+ * makeinfo/insertion.{c,h},
+ * makeinfo/makeinfo.{c,h}: redo of @verbatim, @verb{<char>..<char>}
+ * doc/texinfo.tex: fixed @verb{<char>..<char>}
+
+ 1999-08-30 Jan Nieuwenhuizen <janneke@gnu.org>
+
+ * makeinfo/cmds.c,
+ * makeinfo/insertion.{c,h},
+ * makeinfo/makeinfo.{c,h}: added @verbatim (and preliminary @verb)
+ support
+ * doc/texinfo.tex: added @verbatim (and preliminary @verb) support
+
+ 1999-08-24 Jan Nieuwenhuizen <janneke@gnu.org>
+
+ * bf: empty node: makeinfo/node.c:cm_node () -- Rolled into 4.0
+
+
+2000-10-18 <karl@gnu.org>
+
+ * doc/info.texi: eli update
+
+2000-09-22 <karl@gnu.org>
+
+ * makeinfo/defun.c: warn if non-whitespace follows @defun'd name
+ (suggestion from Akim).
+
+ Installed some patches:
+
+ 2000-08-04 Paul Eggert <eggert@twinsun.com>
+ * makeinfo/multi.c (find_template_width):
+ Don't access before start of *PARAMS.
+
+ 2000-08-21 Eli Zaretskii <eliz@is.elta.co.il>
+ * info/filesys.c (info_file_in_path): Reject FILENAME if it is
+ empty, or ".", or "..".
+
+ 2000-08-23 Eli Zaretskii <eliz@is.elta.co.il>
+ * info/session.c (info_menu_or_ref_item): If the user have chosen
+ menu item or xref that's identical to defentry's label, use
+ defentry instead of looking for its label. Otherwise, select the
+ entry whose position is the closest to the window's point, in
+ case there's more than a single entry with that label.
+
+2000-09-12 <karl@gnu.org>
+
+ * doc/texinfo.txi: it's 2000 now.
+ * doc/texinfo.txi: document the only real (and rare) reason for not using implicit pointer
+ creation.
+
+2000-09-06 <karl@gnu.org>
+
+ * configure.in: test all termcap variables for existence. From
+ andy@rz.uni-karlsruhe.de.
+
+ * configure.in (ALL_LINGUAS): include ja.
+ * lib/system.h [HAVE_IO_H]: make #include <io.h> conditional for
+ BeOS. Reported by Dan Moore, dan@moore.cx.
+ * configure.in (AC_CHECK_HEADERS): add io.h.
+
+2000-06-05 <karl@gnu.org>
+
+ * doc/texinfo.txi: forgot to escape {}.
+
+2000-05-30 <karl@gnu.org>
+
+ * info/filesys.c (is_dir_name): check all info suffixes as well as
+ the compression suffixes. Fixes segmentation fault on a dir.info
+ file ending after the * Menu.
+
+2000-05-28 <karl@gnu.org>
+
+ * doc/texinfo.txi: Forgot {arg} in @rmacro example. From Olaf B.
+
+2000-05-27 <karl@gnu.org>
+
+ * doc/txi-cs.tex: update from: Stepan Kasal <kasal@suse.cz>.
+
+ * doc/Makefile.am (install-data-local): reformat warning per
+ François to hopefully make it more noticeable.
+
+ 2000-02-08 Eli Zaretskii <eliz@is.elta.co.il>
+ * info/session.c (incremental_search): Don't retain RET when
+ exiting isearch. Suggested by Hrvoje Niksic <hniksic@iskon.hr>.
+
+2000-05-22 <karl@gnu.org>
+
+ * doc/texinfo.txi: pageparams -> pagesizes
+
+2000-05-18 <karl@gnu.org>
+
+ * makeinfo/lang.c (cm_accent_tilde): need N in list.
+ From: kama@hippo.fido.de (Karl Heinz Marbaise)
+
+ * makeinfo/files.c (find_and_load): read only the number of bytes
+ available in the buffer. Also, remove one-byte-at-a-time reading
+ in the WIN32 case.
+ From: "J. David Bryan" <dbryan@bcpl.net>
+
+ * info/man.c: use eli's patch after all, we re-increment j at the
+ top of the loop.
+
+2000-05-16 <karl@gnu.org>
+
+ * info/man.c (clean_manpage): don't write before the beginning of
+ newpage.
+ (based on patch from Eli).
+
+2000-02-03 <karl@gnu.org>
+
+ * doc/texinfo.txi: remove spurious space. from kaja.
+
+1999-10-12 Karl Berry <karl@gnu.org>
+
+ * doc/Makefile.am (install-tex): install all txi-?? files.
+
+1999-10-01 W. L. Estes <will@fumblers.org>
+
+ * makeinfo/cmds.c: dont treat @center as separate paragraph,
+ use div element to output center
+
+1999-09-29 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * djgpp/README: Say `dir-example', not DIR.
+
+ * lib/system.h (DEFAULT_INFOPATH) [__DJGPP__]: Define.
+
+1999-09-28 Karl Berry <karl@gnu.org>
+
+ * configure.in,
+ util/texi2dvi: version 4.0.
+ * doc/texinfo.txi: New isbn.
+
+1999-09-24 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi: Fixes from Oleg.
+
+1999-09-20 Karl Berry <karl@gnu.org>
+
+ * makeinfo/node.c: Don't write region at an anchor.
+ From: Thomas Esken <esken@nmlab.informatik.fh-dortmund.de>
+
+ * info/terminal.c: Only set dumb terminal if tgetent returns < 0,
+ not 0.
+ For HP-UP 11.
+ From jeff.hull@state.co.us.
+
+ * makeinfo/footnote.c: Don't translate the `Footnotes' string
+ according to LANG, it should be according to
+ @documentlanguage, which isn't implemented yet.
+ From: Jan Nieuwenhuizen <janneke@gnu.org>
+
+ * doc/texinfo.txi: @end direntry from kama.
+
+1999-09-19 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi: \ninett is now \smalltt.
+
+ * doc/texinfo.txi: arnold changes
+
+ 1999-09-03 Akim Demaille <akim@epita.fr>
+ * texi2dvi (getopt): batch has to be assigned `eval', not `echo'.
+ (bibtex): Launch BibTeX also when the LOG file complains that
+ there are no BBL file.
+
+ * doc/texinfo.txi: Document that @anchor ignores spaces.
+
+ * makeinfo/cmds.c (cm_shyph): remove, &shy; is not supported in
+ browsers.
+ From: Thomas Esken <esken@nmlab.informatik.fh-dortmund.de>
+
+ * makeinfo/makeinfo.c: Don't crash if current_indent = 0.
+ From: Jan Nieuwenhuizen <janneke@gnu.org>
+
+ * makeinfo/makeinfo.c: Avoid blank lines between @menu entries.
+ * configure.in: 3.12t
+
+ 1999-08-31 Eli Zaretskii <eliz@is.elta.co.il>
+ * info/info.c (info_short_help): Document --apropos.
+
+1999-09-18 Karl Berry <karl@gnu.org>
+
+ * makeinfo/html.c (html_output_head): use text for <title>, not
+ html markup. From François.
+ * makeinfo/makeinfo.c (text_expansion): new routine.
+ * makeinfo/cmds.c (cm_settitle): don't expand the title here,
+ we'll do it later.
+
+ * makeinfo/makeinfo.h (text_expansion): declare.
+
+ * info/indices.c,
+ * info/infodoc.c,
+ * info/session.c,
+ * info/footnotes.c: translate errors.
+ * info/info.h: Use `' instead of "" in errors.
+
+1999-09-06 Karl Berry <karl@gnu.org>
+
+ +1999-08-24 Jan Nieuwenhuizen <janneke@gnu.org>
+ * makeinfo/node.c:cm_node: don't compare current_node when null.
+
+ 1999-08-23 W. L. Estes <will@fumblers.org>
+ * makeinfo/node.c (cm_node): write <a name=> tags even
+ ifusing --no-headers
+
+ * configure.in: ospeedlib -> trylib
+ From: Andreas Schwab <schwab@suse.de>
+
+ * makeinfo/makeinfo.c (read_command): add explicit 0 to return if
+ enclosure command. From: Andreas Jaeger <aj@arthur.rhein-neckar.de>.
+
+1999-08-19 Karl Berry <karl@gnu.org>
+
+ * configure.in: add missing quotes, logic in new termcap library
+ check.
+
+1999-08-17 Karl Berry <karl@gnu.org>
+
+ * makeinfo/multi.c,
+ * makeinfo/sectioning.c,
+ * makeinfo/node.c,
+ * makeinfo/macro.c: omit unused vars
+ * info/session.c (info_goto_invocation_node): omit unused decl.
+
+ * configure.in: Check for extra termlib variable necessary on
+ HP-UX 9.
+ From: Olaf Bachmann <obachman@mathematik.uni-kl.de>
+
+ 1999-08-16 Andreas Schwab <schwab@suse.de>
+ * info/terminal.c (terminal_initialize_terminal): Try tcgetattr
+ and cfgetospeed in preference to TIOCGETP.
+ (original_tchars, original_ltchars): Define them only if needed.
+
+1999-08-16 Karl Berry <karl@gnu.org>
+
+ * info/infodoc.c (create_internal_info_help_node): rename arg.
+ (info_find_or_create_help_window): avoid deref of null eligible.
+
+ * info/terminal.c (TIOCGETP, TIOCGETC, TIOCGLTC) [alpha && linux]:
+ #undef. Useless stubs are present.
+
+1999-08-15 Karl Berry <karl@gnu.org>
+
+ * info/nodes.c: Remove reference to nonexistent RFC for Info
+ files.
+
+1999-08-11 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * info/nodes.c (info_find_file_internal): If the file's contents
+ were gc'ed since last time it was loaded, reload the file.
+
+Wed Aug 11 06:42:47 1999 Karl Berry <karl@gnu.org>
+
+ * doc/Makefile.am (EXTRA_DIST): add txi-pt.tex from Lalo.
+
+Mon Aug 9 16:28:18 1999 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi: Support preloaded texinfo.tex, from Stephen.
+
+ * makeinfo/makeinfo.c (add_char): restore ugly check for first
+ character being <.
+
+ * makeinfo/cmds.c (cm_kbd): Increment in_fixed_width_font for
+ html.
+
+ * doc/texinfo.txi: effect not affect
+
+ * makeinfo/makeinfo.c: Rearrange help.
+
+ * makeinfo/toc.c: Cast %* arguments to (int) to placate gcc
+ -Wformat.
+
+Fri Aug 6 13:03:14 1999 Karl Berry <karl@gnu.org>
+
+ * util/install-info.c: Hardwire the File: dir, Node: top part of
+ the skeleton dir file.
+ Report from: Stanislav Brabec <utx@k332.feld.cvut.cz>
+
+ * info/Makefile.am (BUILT_SOURCES): rm -f $(BUILT_SOURCES), a
+ kludge.
+
+ 1999-07-28 Karl Eichwalder <ke@gnu.franken.de>
+
+ * makeinfo/makeinfo.c: Fix help string (-o).
+
+ 1999-07-30 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/makeinfo.c (cm_uref, cm_email): Don't collapse -- and
+ `` in the URL part of the reference.
+
+ 1999-08-03 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * util/install-info.c (main): For entries given on command line,
+ set entry_sections and entry_sections_tail members to NULL, and
+ set text_len member to the entry length. After processing the
+ Info file, update the entry_sections pointers of all entries that
+ came from the command line.
+
+ * util/texindex.c (sort_offline, sort_in_core): use off_t rather
+ than long.
+ Found on FreedBSD 2.2.8 by "Trond Endrestol" <endrestol@hotmail.com>.
+
+Mon Jul 19 17:16:46 1999 Karl Berry <karl@gnu.org>
+
+ * configure.in: 3.12n
+
+ * makeinfo/makeinfo.c (add_char): Don't insert <p> if we're in
+ @html.
+
+ * makeinfo/html.c (add_escaped_anchor_name),
+ * makeinfo/toc.c (toc_add_entry): use URL_SAFE_CHAR.
+ * makeinfo/makeinfo.h (HTML_SAFE, URL_SAFE_CHAR): new macros.
+
+Sun Jul 18 14:47:40 1999 Karl Berry <karl@gnu.org>
+
+ * dir-example: Add bzip2.
+
+ * configure.in: 3.12m.
+
+ * doc/texinfo.txi (@afourlatex,@afourwide): add to command list.
+
+1999-07-17 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/makeinfo.c (cm_xref): Don't collapse `` and -- while
+ expanding node names. Generate a terminating period for
+ @pxref, when it has more than a single argument.
+
+ * makeinfo/index.c (cm_printindex): Don't collapse `` and -- while
+ expanding node names.
+
+Sat Jul 17 16:33:45 1999 Karl Berry <karl@gnu.org>
+
+ * 3.12l.
+
+ * doc/texinfo.txi: @alias, @definfoenclose, etc.
+
+ * util/texindex.c (indexify): error message instead of abort(2)
+ when no page number.
+
+Fri Jul 16 18:00:26 1999 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi: Overfull boxes, help2man, etc.
+
+ * util/Makefile.am (EXTRA_DIST): texi-outline.gawk is really
+ outline.gawk, add fixref.gawk and prepinfo.awk and
+ texi-docstring-magic.el.
+
+Thu Jul 15 18:57:54 1999 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi: .fmt, etc.
+ * doc/texinfo.txi: More macro docs, etc.
+
+Wed Jul 14 19:58:47 1999 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi: Give good quote.
+
+ * util/Makefile.am (EXTRA_DIST): add texi-outline.gawk.
+
+ From: kama@hippo.fido.de (Karl Heinz Marbaise)
+ * makeinfo/toc.c (contents_update_html): go back to start level.
+ * doc/texinfo.txi: deftypeop
+
+ From: "Kaveh R. Ghazi" <ghazi@caip.rutgers.edu>
+ * makeinfo/toc.c (toc_add_entry): don't assume sprintf return type
+ is int.
+ * makeinfo/sectioning.c (insert_and_underscore): declare more
+ unsigned char *.
+ * makeinfo/macro.h (itext_info, itext_size): remove declarations,
+ they're defined static.
+ * makeinfo/makeinfo.c: Split up help string even more.
+
+Tue Jul 13 17:16:18 1999 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi: Document @rmacro.
+ * makeinfo/macro.c (cm_rmacro): new command to do @allow-recursion
+ by default.
+ (define_macro): split off from cm_macro.
+
+ * makeinfo/macro.h (cm_rmacro): declare.
+ * makeinfo/macro.h (delete_macro): do not need to export.
+ * makeinfo/cmds.c (rmacro): new command.
+
+ * makeinfo/html.c,
+ * makeinfo/toc.c,
+ * makeinfo/lang.c,
+ * makeinfo/makeinfo.c: Use strchr instead of member.
+
+Mon Jul 12 08:01:19 1999 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi: document this.
+ * makeinfo/macro.c (apply): warn if \ in macro body is not
+ followed by a parameter name or \, instead of silently
+ accepting it, for compatibility with TeX.
+
+ * makeinfo/macro.c: Doc fix.
+
+Sun Jul 11 12:49:50 1999 Karl Berry <karl@gnu.org>
+
+ * makeinfo/macro.c (cm_macro): do @quote-arg implicitly if single
+ argument to macro.
+ * doc/texinfo.txi: Document this.
+
+ * doc/texinfo.txi (Smallcaps): Document makeinfo warning if arg is
+ all uppercase.
+ * makeinfo/cmds.c (cm_sc): warn if arg is all upper (suggested by
+ Jim Meyering).
+
+ * makeinfo/cmds.c (cm_var): warn if argument contains any of ,[]()
+ which are unlikely to be allowable in real variable names.
+ Suggested by rms.
+
+ * makeinfo/makeinfo.h (member): remove weird masking macro.
+
+ * doc/texinfo.txi: Probably ok to indent @example.
+
+ * configure.in: 3.12k.
+
+ * makeinfo/html.c (add_escaped_anchor_name): Cast to unsigned char
+ for 8-bit chars. From Yoshiki.
+
+ * makeinfo/makeinfo.c: complain -> warn for sake of <80 chars.
+
+1999-07-09 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/multi.c (multitable_item): Quote the value of align=
+ property.
+
+ * makeinfo/defun.c (defun_internal): Ditto.
+
+ * makeinfo/cmds.c (cm_center): Ditto.
+
+ * makeinfo/toc.c (toc_add_entry): New argument ANCHOR; all callers
+ changed. In HTML mode, expand NODE_NAME, or use ANCHOR, if
+ non-NULL, and save it together with the TOC name in the name
+ member of the TOC entry.
+ (toc_add_entry, toc_find_section_of_node): Add a warning in a
+ comment that the NODE argument must be unexpanded.
+ (contents_update_html): Terminate the TOC entry with </a>.
+
+ * makeinfo/sectioning.c (sectioning_html): If the sectioning
+ command is outside any node, generate explicit anchor and pass it
+ to toc_add_entry.
+
+ * makeinfo/node.c (expand_node_name): Now external instead of
+ static.
+ (cm_node): Output expanded node name in the navigation bar.
+
+ * makeinfo/node.h: Declare expand_node_name.
+
+ * makeinfo/index.c (cm_printindex): Produce valid HTML links, even
+ if index->node is NULL or empty. Fix format of index under
+ --no-headers.
+
+Fri Jul 9 18:09:28 1999 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi: Pair @end html properly. From Olaf B.
+
+ * doc/Makefile.am (EXTRA_DIST): add txi-nl.tex from Marcel van der Boom
+ <marcel@virtualprojects.org>.
+
+ * doc/txi-en.tex: Doc fix.
+
+Wed Jul 7 16:07:44 1999 Karl Berry <karl@gnu.org>
+
+ * doc/Makefile.am: Doc fix.
+
+ * configure.in (txi_CHECK_DECLS): call this new macro (in
+ acinclude.m4).
+ * acinclude.m4: new file.
+
+Tue Jul 6 19:12:37 1999 Karl Berry <karl@gnu.org>
+
+ * makeinfo/insertion.h,
+ * makeinfo/insertion.c,
+ * makeinfo/cmds.c,
+ * makeinfo/defun.c: new command @deftypeop.
+ Suggestion from: booth@us.ibm.com.
+
+1999-07-05 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/makeinfo.c (cm_value): Don't convert quotes and dashes
+ in the argument of @value, since @set doesn't.
+
+Mon Jul 5 16:43:23 1999 Karl Berry <karl@gnu.org>
+
+ * makeinfo/insertion.c (get_item_function): return "@ " rather
+ than "@". (command_needs_braces): new fn.
+ (cm_item): handle @itemize markers that don't take braces.
+ Bug reported by Stephen, prototype fix from Yoshiki.
+
+ * doc/texinfo.txi (Contents): @contents ignored at beginning when
+ outputting to stdout.
+ Installed this.
+>1999-05-02 Eli Zaretskii <eliz@is.elta.co.il>
+> * makeinfo/toc.c (cm_contents, cm_shortcontents): If writing to
+> stdout, output the contents and short contents immediately, and
+> assign NULL to contents_filename and shortcontents_filename, so
+> that toc_update won't try to rewrite stdout.
+
+
+ * makeinfo/sectioning.c (sectioning_html): declare starting_pos
+ and ending_pos as unsigned char * since they're based on
+ output_paragraph.
+
+ * makeinfo/insertion.c: Cast output_paragraph to char * for sake
+ of strncmp prototype (on IRIX 4).
+ From: "Kaveh R. Ghazi" <ghazi@caip.rutgers.edu>
+
+
+ * info/man.c (get_manpage_contents): restore previous (default)
+ SIGCHLD handler so the pclose when gunzipping info files
+ doesn't fail with `No child processes' (because
+ reap_children reaped it).
+ From: Josip Rodin <jrodin@public.srce.hr>
+ njs@uclink4.berkeley.edu, 38063-forwarded@bugs.debian.org
+
+Fri Jul 2 14:26:22 1999 Karl Berry <karl@gnu.org>
+
+ From gildea:
+ * info/terminal.c (TIOCGETC) [M_XENIX && TIOCGETC]: #undef.
+ * info/session.c (strncasecmp) [M_XENIX]: declare.
+
+Thu Jul 1 19:25:12 1999 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (cm_value): erroneous capitalization in
+ error message.
+
+ * makeinfo/insertion.c (end_insertion): @end html should turn html
+ escaping back on. From esr.
+
+ * makeinfo/makeinfo.c (cm_pxref): No period needed to terminate
+ cross-reference.
+
+Sun Jun 13 16:12:41 1999 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi: Remove some more node links.
+
+Sat May 1 16:01:36 1999 Karl Berry <karl@gnu.org>
+
+ * info/info.c: Single space for option indent to match others.
+
+ * makeinfo/makeinfo.c,
+ * util/texindex.c,
+ * util/install-info.c: Must indent option list for help2man.
+
+ * info/infodoc.c [HELP_NODE_GETS_REGENERATED]: set to true.
+ (info_internal_help_text): put moving cmds first so they know how to go
+ forward in the help window.
+ (create_internal_info_help_node): can't always quit help with C-x 0.
+ (info_find_or_create_help_window): pass !one_window_p.
+
+1999-04-29 Yoshiki Hayashi <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+ * makeinfo/makeinfo.c (cm_xref): Don't collapse --- to -- etc.,
+ in references.
+
+Mon Apr 26 16:41:55 1999 Karl Berry <karl@gnu.org>
+
+ * makeinfo/node.c (validate): arrange to translate the reference type.
+ Report from Sergio.
+
+ * makeinfo/makeinfo.c (validate): should not be declared here.
+
+ * makeinfo/index.c (cm_printindex): <ul compact> is not
+ translatable. From Yoshiki.
+
+ * doc/Makefile.am (EXTRA_DIST): include new txi-es.tex from Adrian
+ Perez Jorge <alu1415@csi.ull.es>. And new txi-en.tex.
+
+Sun Apr 25 16:08:27 1999 Karl Berry <karl@gnu.org>
+
+ * makeinfo/cmds.c (cm_settitle): don't output html head here.
+
+ * makeinfo/makeinfo.c: Move html routines to html.c.
+ * makeinfo/Makefile.am (makeinfo_SOURCES): add html.[ch].
+ * makeinfo/html.[ch]: new files.
+
+ * makeinfo/makeinfo.c: Restore -- in --output line. From Sergio.
+
+1999-04-23 Yoshiki Hayashi <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+ * makeinfo/cmds.c (cm_center): Recover the previous state when
+ called with --html.
+
+1999-04-24 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/cmds.c (cm_bye): Flush the output, in case some command
+ produced it immediately before @bye.
+
+ * makeinfo/toc.h (TOC_ENTRY_ELT): New member: containing_node.
+
+ * makeinfo/toc.c (lots_of_stars): New variable.
+ (toc_add_entry): Add a new parameter node_name; all callers
+ changed. Record the name of the node containing the section.
+ (toc_find_section_of_node): New function.
+ (toc_free): Free the new containing_node member.
+ (contents_update_info, shortcontents_update_info): Underline the
+ title with stars. Output two empty lines after the TOC.
+ (contents_update): Fix off-by-one error in writing the rest of the
+ file after updating the TOC.
+
+ * makeinfo/index.c (cm_printindex): Save and restore line_number
+ and input_filename. Don't output the "* Menu" header when
+ --no-headers is in effect. Make the fake node name for index
+ entries that are outside any node be more explanatory, and emit an
+ error for such index entries. Under --no-headers, output a
+ reference to the section name, as returned by a call to
+ toc_find_section_of_node, instead of a node name.
+
+1999-04-24 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/index.c (struct index_elt): Add a new member
+ entry_text.
+ (free_index, make_index_entries_unique): Free the entry_text
+ member.
+ (index_add_arg): Don't HTML-escape the index entry here.
+ (index_add_arg): Initialize the entry member to NULL. Put the
+ entry text into the entry_text member.
+ (sort_index): Expand the index entries as if in non-HTML mode.
+ Put the expansion into the entry member of struct index_elt.
+ (cm_printindex): Allocate the line[] array in Info mode only.
+ In HTML mode, escape and expand the original index entry text,
+ don't use the results of expansion inside sort_index.
+
+ * makeinfo/cmds.c (cm_r): Undo the effect of @code while printing
+ one of the "code"-style indices in HTML mode.
+
+1999-04-23 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * info/infomap.c (initialize_vi_like_keymaps): Bind DEL in echo
+ area to ea_rubout, except for __MSDOS__.
+
+ * doc/info-stnd.texi (Node Commands): Document that `I' only
+ produces its effect for programs documented in the current Info
+ file. Tell them to invoke `I' from DIR if it doesn't work from
+ current place.
+
+Thu Apr 22 09:59:02 1999 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c,
+ * info/info.c: Rewrite help string a little more.
+
+ * doc/info-stnd.texi: Change chapter name to match node name,
+ * other changes.
+
+ * makeinfo/cmds.c (cm_bye): call discard_braces.
+
+ * makeinfo/cmds.c (cm_settitle): output more meta and link tags.
+
+ * configure.in (ALL_LINGUAS): add eo.
+
+ * util/install-info.c [STRIP_DOT_EXE]: #if not #ifdef
+
+Wed Apr 21 19:40:51 1999 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c: Doc fix.
+
+ * makeinfo/sectioning.c (insert_and_underscore): do not output
+ html anchor here.
+ * makeinfo/node.c (cm_node): do anchor at node name not sectioning
+ title.
+
+ * makeinfo/node.c: Newlines on node lines.
+
+Tue Apr 20 13:02:46 1999 Karl Berry <karl@gnu.org>
+
+ * info/man.c (get_manpage_contents): freopen stdin and stderr to
+ /dev/null rather than closing them. http://bugs.debian.org/14787
+
+Mon Apr 19 14:12:09 1999 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi: Document possibility of `titlepage' stuff for
+ plain text output using @ifinfo.
+ Report from: Kurt Hornik <Kurt.Hornik@ci.tuwien.ac.at>.
+
+ * makeinfo/cmds.c: Screw that.
+ * doc/texinfo.txi: Fix up frontmatter a bit.
+
+ * dir-example: Spaces not tabs.
+ * dir-example (R FAQ): add.
+
+ * makeinfo/makeinfo.c: Lowercase makeinfo in first line.
+
+ * doc/info.texi (The node reached...): is a @subsection not a
+ @subsub.
+
+ * doc/texinfo.txi: Document option rename.
+ * makeinfo/makeinfo.c: Rename option to commands-in-node-names.
+
+ * makeinfo/index.h (index_compare_fn): declare.
+ * makeinfo/index.c (index_element_compare): call through new
+ variable index_compare_fn, and set it to strcoll if
+ @documentlanguage was used and LANG != en.
+ #include lang.h.
+
+Sat Apr 17 14:46:47 1999 Karl Berry <karl@gnu.org>
+
+ * makeinfo/insertion.c (current_item_function, cm_item): rewrite
+ to skip all conditionals.
+ (cm_item): use current_item_function rather than current_insertion_type
+ to check what to use for @item, so @ifset etc. can be used around
+ @items.
+ Report from: "W. L. Estes" <wlestes@br20920.uncg.edu>.
+
+ * makeinfo/makeinfo.c (current_insertion_type): no need to
+ declare.
+
+ * makeinfo/makeinfo.c: Add examples to help message.
+
+ * util/texindex.c (usage): Rearrange --help, avoid extra newline.
+
+ * info/info.c: Sort --help in the usual place.
+
+ * makeinfo/makeinfo.c: Reindent help message, rename
+ --expensive-validation to --commands-in-nodes.
+
+Fri Apr 16 17:53:48 1999 Karl Berry <karl@gnu.org>
+
+ * makeinfo/cmds.c (cm_ignore_arg): new routine.
+ (cm_ignore_line_no_op): remove, can use cm_ignore_line.
+
+Tue Apr 13 16:45:39 1999 Karl Berry <karl@gnu.org>
+
+ * doc/info-stnd.texi: Frontmatter changes.
+
+ * doc/info.texi: Remove advanced remark in first node.
+
+ * doc/texinfo.txi: Texinfo.tex does macros now. From Eli.
+
+ * doc/texinfo.txi: Document @w{ } to produce an unbreakable space.
+
+ * util/texi2dvi: Update from Akim, avoid Solaris ucb echo weirdness.
+
+ * info/infodoc.c: Parenthesize function calls, don't depend on
+ gettext being there. Report from: Doug Semler
+ <doug@seaspace.com>.
+
+1999-04-12 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * info/infomap.c (initialize_vi_like_keymaps): Initialize the echo
+ are keymap *before* it is filled up with keys.
+
+1999-04-10 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/macro.c (execute_macro): Reset the line number to where
+ the macro argumenst begin, before executing its expansion.
+
+ * makeinfo/makeinfo.c (cm_xref): Expand the name of arguments
+ before writing them in HTML mode.
+ (handle_menu_entry): Expand the name of the gleaned node before
+ writing it in HTML mode.
+
+ * makeinfo/sectioning.c (sectioning_html): Expand the name of the
+ current node when producing the <a name=... anchor.
+
+ * makeinfo/node.c (cm_node): Expand the name of node and its links
+ before outputting them in HTML mode.
+
+ * makeinfo/index.c (cm_printindex): Expand node names to which the
+ index points.
+
+ * makeinfo/footnote.c (cm_footnote): Call execute_string instead
+ of add_word_args, since current_node needs to be expanded. Expand
+ the name of the Footnotes node before calling
+ remember_node_reference.
+
+ * makeinfo/tests/node-expand.txi: New test, for testing how node
+ names are expanded in @node, @menu, cross-references, and
+ indices.
+
+ * makeinfo/makeinfo.c (add_char): If we output <p>, adjust the
+ affected brace positions by 3, so cm_xxx functions get what they
+ expect in START and END.
+ (insert_html_tag): Likewise.
+
+ * makeinfo/cmds.c (cm_sc): Remove the kludge that looks for the
+ beginning of <small>, it is no longer needed.
+
+ * makeinfo/macro.c (cm_definfoenclose): Don't stop at the first
+ blank after the second comma: the blank may belong to the second
+ delimiter.
+
+ * makeinfo/tests/htmlpara.txi: New test, for the commands affected
+ by the <p> output at paragraph beginning.
+
+ * makeinfo/makeinfo.h (expensive_validation): New option.
+
+ * makeinfo/makeinfo.c (long_options): Add expensive_validation.
+ (usage): Likewise.
+
+ * makeinfo/node.c (find_node): If NAME isn't found verbatim, try
+ expanding it and every node name in tag table, before comparing
+ them, but only if expensive_validation is non-zero.
+ (find_node_reference): Likewise.
+ (cm_node): Don't expand node name and its links here.
+ (validate_file): If direct comparisons fail, try expanding the
+ comparees before giving up, unless expensive_validation is zero.
+ Switch the order of NODE and UP in error message about a lacking
+ menu item.
+
+1999-04-07 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/index.c (cm_printindex): Don't output "Menu" header.
+
+ * makeinfo/node.c (get_node_token): Collapse whitespace in node
+ names.
+ (glean_node_from_menu, expand_node_name): Likewise.
+
+ * info/infomap.c (initialize_vi_like_keymaps): Bind all the 256
+ keys to ea_insert, like the Emacs-like case does.
+
+ * doc/info-stnd.texi (Invoking Info): Document support for files
+ compessed with bzip2, and the --vi-keys option.
+ (Many places): Document key bindings under --vi-keys.
+
+1999-04-06 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * info/session.c (info_last_node, info_first_node): With a numeric
+ argument, go to ARGth node counting from the beginning. Skip
+ anchor tags when looking for the target node--the last tag can be
+ an anchor, for example.
+ (last_search_direction, last_search_case_sensitive): New
+ variables.
+ (last_search_for_string): Remove variable.
+ (info_search_internal): Always move point by one notch before
+ beginning the search, to avoid complications in repeated search
+ commands. When looking for the next node tag, skip any anchor
+ tags.
+ (info_search_1): Accept a 5th argument ASK_FOR_STRING, and only
+ prompt for search string if it's non-zero. All callers changed.
+ Look for the COUNTth occurence of the string.
+ (info_search, info_search_backward, info_search_case_sensitively):
+ Set last_search_direction and last_search_case_sensitive.
+ (info_search_next, info_search_previous): New commands, repeat
+ last search in the same or reverse direction without prompting the
+ user for the string.
+
+ * info/infomap.c (initialize_emacs_like_keymaps): Bind `C-x n' to
+ info_search_next and `C-x N' to info_search_previous.
+ (initialize_vi_like_keymaps): Bind `n' to info_search_next and `N'
+ to info_search_previous.
+
+1999-04-04 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/makeinfo.c (get_rest_of_line): Don't expand non-macros,
+ so that macro-expanded output will still have them.
+
+1999-04-03 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/node.c (cm_node): Expand the node name and its links
+ completely before using them, so that they could use e.g. @value{}
+ etc.
+
+ * makeinfo/makeinfo.c (replace_with_expansion): Don't
+ remember_itext if we are executing_string.
+
+ * makeinfo/sectioning.c (sectioning_html): Remove #ifdef
+ HAVE_MACROS. Don't call me_execute_string if already
+ executing_string.
+
+ * makeinfo/toc.c (toc_add_entry): Expand macros in TOCNAME right
+ here, since the macro can be later redefined.
+ (contents_update_html, contents_update_info,
+ shortcontents_update_html, shortcontents_update_info): Use stdio
+ functions for output instead of add_word etc.
+ (rewrite_top, contents_update, shortcontents_update, toc_update):
+ New functions, replace the TOC placebo with the actual TOC.
+ (cm_contents): Output a placebo instead of writing the TOC.
+ (cm_shortcontents): Output a placebo instead of writing the short
+ TOC.
+
+ * makeinfo/makeinfo.c (convert_from_loaded_file): Call toc_update
+ if appropriate.
+
+ * makeinfo/sectioning.c (cm_top): Don't output the HTML header
+ here, since the Top node might be preceeded by other commands,
+ like @contents.
+
+ * makeinfo/cmds.c (cm_settitle): Output the HTML header here.
+
+ * makeinfo/node.c (set_current_output_filename): New function,
+ saves the name of the actual file we are now writing, including in
+ the case of split-HTML output.
+ (cm_node): Call it to record the name of output file.
+
+ * makeinfo/footnote.c (free_pending_notes): Re-initialize
+ current_footnote_number to 1.
+
+ * makeinfo/index.c (index_add_arg): Remove redundant xstrdup.
+ (cm_printindex): Don't free index->entry: it is freed in
+ free_index, if, e.g., there's more than one file to convert.
+
+ * makeinfo/makeinfo.c (init_internals): Call toc_free.
+
+Mon Apr 5 16:53:33 1999 Karl Berry <karl@gnu.org>
+
+ * doc/Makefile.am: Texmf_{texinfo,dvips}: dirs not files. From
+ Kurt Hornik.
+
+Wed Mar 31 13:50:09 1999 Karl Berry <karl@gnu.org>
+
+ * Pretest 3.12h.
+
+ * makeinfo/node.c (last_node_p): new fn.
+ (split_file): call it, instead of assuming no more entries means
+ no more nodes. (Loses with anchors.)
+ Report from: "Oleg S. Tihonov" <ost@benetnash.ffke-campus.mipt.ru>.
+
+ * makeinfo/index.c (sort_index): whether an entry is @code or not
+ depends on the element, not the index, because of synindex.
+
+ * doc/Makefile.am (install-tex): Must use $(TEXMF), do
+ $(mkinstalldirs) on tex dirs.
+ From: Nathan Sidwell <nathan@acm.org>.
+
+ * doc/texinfo.txi: Document need for blank line before @image if
+ you want space.
+
+ * Install changes from Eli:
+
+ 1999-03-09 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * info/infodoc.c (info_internal_help_text): Remove hard-wired key
+ names, use %-10s instead.
+ (info_help_keys_text): New variable, holds two variants of keys
+ that invoke basic commands, indexed by vi_keys_p.
+ (create_internal_info_help_node): Use info_help_keys_text[].
+
+ * info/window.c (build_message_buffer): Support more general
+ format strings, like %-10.15s, %+4d etc.
+
+ * info/infomap.c (initialize_vi_like_keymaps): Bind ESC-h, ESC-t,
+ C-x LFD and C-x RET.
+
+ 1999-03-08 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * util/install-info.c (output_dirfile): Sort the entries and
+ output them in alphabetic order. Output each entry only in those
+ sections where it belongs.
+ (parse_input): New function, code moved from main. Process
+ sections and entries in a single loop, and record with each entry
+ the list of sections where that entry belongs. Record each entry
+ separately, not all of them together as a single block.
+ (parse_dir_file): New function, code moved from main.
+ (main): Move code to parse_input and parse_dir_file. Put the new
+ entries only into sections where they belong.
+ (compare_entries_text): New function, called when sorting new
+ entries.
+
+ * info/infomap.c (initialize_vi_like_keymaps): New function. Bind
+ keys a-la Less, including new functions from session.c below.
+ (initialize_emacs_like_keymaps): New function, with the guts of
+ initialize_info_keymaps.
+
+ * info/session.c (info_scroll_forward, info_scroll_backward): If
+ default_window_size is non-negative, use it as the default number
+ of lines to scroll.
+ (info_scroll_forward_set_window, info_scroll_backward_set_window,
+ info_down_line, info_up_line, info_scroll_half_screen_down,
+ info_scroll_half_screen_up, info_search_backward): New functions,
+ for Less-like look and feel.
+
+Tue Mar 30 16:44:53 UTC 1999 Karl Heinz Marbaise <kama@hippo.fido.de>
+
+ * doc/txi-de.tex:
+ - added additional putwordin
+ * doc/texinfo.txi:
+ - changed defivar into deftypeivar
+ * makeinfo/sectioning.c:
+ - changed output of anchors based on problems with ie.
+ * makeinfo/defun.c:
+ - output in HTML mode changed to be on previous state.
+ * makeinfo/insertion.c:
+ - fixed up HTML output for deftypeivar.
+
+1999-03-30 Akim Demaille <demaille@inf.enst.fr>
+
+ * texi2dvi ($tmpdir): Avoid security holes.
+
+Fri Mar 26 17:06:55 1999 Karl Berry <karl@gnu.org>
+
+ * makeinfo/cmds.c (cm_exdent): rewrite to preserve blank lines.
+ Bug from: "Oleg S. Tihonov" <ost@benetnash.ffke-campus.mipt.ru>.
+
+ * makeinfo/cmds.c (cm_exdent): arg is in `roman'.
+
+Thu Mar 25 16:21:27 1999 Karl Berry <karl@gnu.org>
+
+ * makeinfo/insertion.c,
+ * makeinfo/defun.c,
+ * makeinfo/insertion.h (insertion_type): add deftypeivar.
+ * makeinfo/defun.h (cm_defun): declare here.
+ * makeinfo/cmds.c (defun.h): include.
+ * doc/texinfo.txi (deftypeivar[x]): new commands.
+ * makeinfo/cmds.c (deftypeivar[x]): new commands.
+
+ * makeinfo/cmds.c (cm_exdent): save, set and restore
+ in_fixed_width_font.
+
+ * doc/texinfo.txi (uref): rewrite.
+
+ * info/info.c (info_short_help): more spaces for new help2man.
+
+ * makeinfo/node.c (cm_node): output node name in html, change
+ navbar punctuation.
+
+ * doc/texinfo.5: Fix URL.
+
+ * Finally installed this:
+ 1998-05-01 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+ * makeinfo/makeinfo.c (convert_from_loaded_file): When the file
+ contains no @setfilename then always look for \input (not
+ \include) in the first line and skip that. Don't skip the first
+ line if no \input was found.
+
+1999-03-24 Akim Demaille <demaille@inf.enst.fr>
+
+ * configure.in (AC_HEADER_STAT): Added.
+ * util/texindex.c (main): Check infiles are not directories.
+
+1999-03-24 Akim Demaille <demaille@inf.enst.fr>
+
+ * texi2dvi (index_files): Don't use `!' to run sed -e "s!foo$!!"
+ since the shell will interpret `$!'.
+
+Tue Mar 23 16:41:08 1999 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (uref): rewrite to make HTML output read more
+ nicely. From Tim S.
+
+ * info/info.c (info_short_help): include examples.
+
+ * makeinfo/makeinfo.c (close_paragraph_with_lines): move earlier
+ so can be static.
+
+ * makeinfo/sectioning.c,
+ * makeinfo/node.c,
+ * makeinfo/makeinfo.h,
+ * makeinfo/makeinfo.c,
+ * makeinfo/macro.c,
+ * makeinfo/insertion.c,
+ * makeinfo/cmds.c,
+ * makeinfo/files.c,
+ * makeinfo/footnote.c (size_of_input_text): rename to
+ input_text_length.
+
+ * makeinfo/makeinfo.c (cm_xref): make wrong-char-following a warning.
+ (replace_with_expansion): remove bogus conditional that was duplicated
+ unconditionally.
+ From: Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>
+
+Mon Mar 22 14:39:59 1999 Karl Berry <karl@gnu.org>
+
+ * doc/Makefile.am (install-tex): parenthesize.
+
+ * Makefile.am (dist-hook): remove, it uses hard links so we chmod
+ all our sources.
+
+ * makeinfo/toc.c,
+ * makeinfo/defun.c,
+ * makeinfo/sectioning.c: Use _, not N_.
+
+ * info/Makefile.am (ginfo_SOURCES): include $(BUILT_SOURCES)
+ explicitly.
+
+ * makeinfo/lang.c,
+ * makeinfo/lang.h: ISO-639 updates.
+
+ * makeinfo/cmds.c: exampleindent changes.
+
+ * info/info.c (info_short_help): reformat somewhat, and don't say
+ info info options any more.
+
+ * doc/info-stnd.texi (Invoking): make description format somewhat
+ more standard.
+
+ * info/infomap.c (Initialize_info_keymaps): do ea_insert bindings
+ first so subsequent bindings (e.g., for ESC) override.
+
+Sun Mar 21 17:31:00 1999 Karl Berry <karl@gnu.org>
+
+ * makeinfo/multi.c (output_multitable_row): remove unnecessary
+ trailing whitespace from output, output blank row for blank @item.
+
+ * doc/texinfo.txi: Remove extra @item in language multitable.
+
+Sat Mar 20 12:30:25 1999 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi: Update language table from ISO 639:
+ http://www.iro.umontreal.ca/contrib/po/iso-639. From kama.
+
+ * doc/texinfo.txi (exampleindent): document.
+
+ * doc/texinfo.txi (Creating an Info File): use this for the node name.
+
+ * doc/info.texi: Make Texinfo references consistent, etc.
+
+1999-03-18 Yoshiki Hayashi <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+ * makeinfo/makeinfo.c (set_default_indentation_increment): new
+ routine.
+ * makeinfo/insertion.c (cm_exampleindent): new routine.
+ Call set_default_indentation_increment.
+
+Mon Mar 15 17:06:15 1999 Karl Berry <karl@gnu.org>
+
+ * info/Makefile.am (ginfo_SOURCES): Remove doc.c and funs.h in
+ hopes they then won't be distributed. Report from Andreas.
+
+ * makeinfo/cmds.c (cm_sp): close paragraph and disable filling to
+ produce blank lines in info.
+ Report from: Michael Vanier <mvanier@bbb.caltech.edu>.
+
+ * doc/texinfo.txi: Attempt to get Edition info on one line.
+
+ * makeinfo/makeinfo.h (cr_or_whitespace): use whitespace and check
+ for \r. (skip_whitespace_and_newlines, command_char): use it.
+ Report from bonzini@gnu.org.
+
+ * makeinfo/cmds.c (cm_center): save and restore filling_enabled,
+ so @center can be used inside an @example. Bug from kama.
+
+1999-03-13 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/footnote.c (cm_footnote): In separate footnote style,
+ generate a reference to "foo-Footnote-NN" for each footnote.
+ (output_pending_notes): In separate footnote style, generate an
+ anchor "foo-Footnote-NN" for each footnote, so that the link in
+ the parent node would lead directly to the footnote.
+
+ * info/footnotes.c (make_footnotes_node): Recognize the new
+ "foo-Footnote-NN" style of footnote references.
+
+1999-03-09 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
+
+ * configure.in (AC_OUTPUT): Remove command to create po/Makefile,
+ already done by AM_GNU_GETTEXT.
+
+Tue Mar 9 17:48:46 1999 Karl Berry <karl@gnu.org>
+
+ * Makefile.am (dist-hook): make distribution directory writable.
+
+ * Installed these changes:
+
+ 1999-03-04 Akim Demaille <demaille@inf.enst.fr>
+
+ * texi2dvi (bibtex): Allow several runs of bibtex, this can be
+ used if bibentries reference other bibentries. Moreover, looking
+ for `Citation' in the LOG should be enough to avoid uneless runs.
+
+ Sun Mar 7 15:15:00 1999 UTC Karl Heinz Marbaise <kama@hippo.fido.de>
+
+ * makeinfo/sectioning.{c,h}:
+ - using defines instead of literals.
+ - cleaned up some stylistic matters like Karl Berry
+ suggested. Handling of things like:
+ @unnumbered ..
+ @section ...
+ now it works correct.
+
+ * makeinfo/toc.{c,h}
+ - addTocEntry, freeToc changed into toc_add_entry
+ toc_free. stylistics changed.
+
+ * makeinfo/iso2cht.pl,iso-639: script, table from the web.
+ - perl script converting the iso-639 table from the web
+ into the appropiate files (isoenum.h, isotab.c and
+ iso.texi) which can be inserted directly into
+ lang.c, lang.h and texinfo.txi.
+
+Tue Mar 9 17:47:59 1999 Karl Berry <karl@gnu.org>
+
+ * configure.in: Bump to 3.12g.
+
+Sun Mar 7 07:01:19 1999 Karl Berry <karl@gnu.org>
+
+ * info/infomap.c: Don't do isprint, just bind everything.
+
+Fri Mar 5 14:31:42 1999 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi,
+ * makeinfo/makeinfo.c: Document that --no-headers writes to stdout
+ by default.
+
+ * doc/texinfo.txi: @setchapternewpage doesn't change
+ \bindingoffset, just headers. Recommend not including it in the
+ manual source at all.
+
+ * makeinfo/node.c (write_tag_table_internal): set
+ in_fixed_width_font while constructing this so --- doesn't
+ collapse to --, etc. Bug report from Sergio.
+
+ * dir-example: Add a2ps stuff.
+
+ * info/session.c: Allow any character in search string.
+
+ * info/infodoc.c (describe_key): don't assume non-latin1
+ characters are undefined.
+
+ * info/infomap.c (initialize_info_keymaps): make all characters
+ insertable by default in echo area. From Eli.
+
+ * Installed these changes:
+
+ Wed Feb 23 22:00:00 1999 Karl Heinz Marbaise <kama@hippo.fido.de>
+
+ * makeinfo/sectioning.{c,h}:
+ - added to hold complete handling of sectioning
+ a little step towards modularization ;-)
+
+ * makeinfo/cmds.c:
+ - sectioning_alist moved to sectioning.c and
+ added information about enumerated chapter,
+ section ..., appendix or not. Everything
+ which has any relationship with sectioning
+ moved to sectioning.{c,h} I hope I have found
+ all.
+
+ * makeinfo/toc.{c,h}:
+ - added for complete handling of "table of contents"
+ "short contents". Better ASCII only support
+ (--no-headers) so no Text "Menu" is printed.
+ May be we can do more.
+
+ * makeinfo/makeinfo.{c,h}:
+ - added new command line switch --number to enumerate
+ chapter, sections etc.
+
+ * doc/texinfo.txi:
+ - --number option documented.
+
+ 1999-02-28 Yoshiki Hayashi <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+ * makeinfo/insertion.c (in_paragraph): New variable.
+ (cm_item): Add </p> only if <p> is open.
+ * makeinfo/makeinfo.c (handle_menu_entry): Ditto.
+
+ * makeinfo/insertion.c (begin_insertion),
+ * makeinfo/makeinfo.c (handle_menu_entry): If commentary
+ precedes first menu item, put them outside of <ul>.
+ Put <p> and </p> correctly.
+
+ 1999-02-27 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * info/info.c (info_short_help): Document --show-options and
+ --usage.
+
+ 1999-02-26 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * info/makedoc.c (main) [STRIP_DOT_EXE]: Strip the .exe suffix, so
+ that doc.c says "./makedoc.c", not "./makedoc.exe.c".
+
+ * info/info.c (goto_invocation_p): New variable.
+ (long_options): New options --show-options and its alias --usage.
+ (main): Don't update the display until we find the first node to
+ be displayed, to avoid flushing incorrect display. If user wants
+ to see the command-line options node right away, display whatever
+ info_intuit_options_node finds.
+
+ * info/session.c (info_intuit_options_node): New function, uses
+ heuristics to find the node which describes program's invocation.
+ (info_goto_invocation_node): New command, asks for a program's
+ name and displays the invocation node of that program.
+ (entry_in_menu): New function, fuzzily looks for a menu entry in a
+ node's menu.
+ (program_name_from_file_name): New function, suggests a program
+ name given a name of its Info file.
+ (info_search_in_node): Accept an additional argument: a flag to
+ search case-sensitively; all callers changed. If case-sensitive
+ search is required, don't turn on the case-fold flag in the search
+ binding.
+ (info_search_internal): Accept an additional argument: a flag to
+ search case-sensitively; all callers changed. Share the last
+ search string between normal and case-sensitive search commands.
+ (info_search_1): New function, with the guts that previously
+ belonged to info_search. If the search is case-sensitive,
+ mentions that in the prompt for the search string. If the search
+ string includes upper-case characters, searches case-sensitively.
+ (info_search): Calls info_search_1 with zero case-sensitivity
+ flag.
+ (info_search_case_sensitively): New command, calls info_search_1
+ with non-zero case-sensitivity flag.
+ (incremental_search): If the search
+ string includes upper-case characters, searches case-sensitively.
+
+ * info/search.c (search_backward): Fix bug in case-sensitive
+ search.
+
+ * info/infomap.c (initialize_info_keymaps): `-' in info window map
+ produces negative arguments. `S' invokes case-sensitive search.
+ `O' and `I' invoke goto-invocation.
+
+ * doc/info-stnd.texi (Invoking Info): Document --show-options.
+ (Node Commands): Document `O', goto-invocation.
+ (Searching Commands): Document `S' and the case-sensitive search
+ when the search string includes upper-case letters. Document `/'
+ as a synonym for `s'.
+ (Miscellaneous Commands): Document `M--' and `-'.
+
+ 1999-02-25 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * info/info.c (main): Under --index-search, search indices *after*
+ following menus, so that we don't look for an index in DIR.
+
+
+Wed Mar 3 17:20:07 1999 Karl Berry <karl@gnu.org>
+
+ * makeinfo/cmds.c: Do not output <small> in info mode.
+ From: Eli Zaretskii <eliz@is.elta.co.il>.
+
+ * makeinfo/insertion.c (enum_html): Remove unused var temp.
+ From: Yoshiki Hayashi <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+ * info/infodoc.c: Avoid translation of blank lines.
+
+ * info/tilde.c,
+ * info/man.c,
+ * makeinfo/index.c (index_add_arg): avoid use of alloca.
+
+ * info/echo-area.c: Don't pause for an additional 75 microseconds.
+ Noted by Eli.
+
+ * configure.in: Bump to 3.12f.
+
+ * doc/texinfo.txi: findex enddots. From Eli.
+
+1999-03-01 Yoshiki Hayashi <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+ * makeinfo/makeinfo.c (insert_html_tag): Add <p> when
+ paragraph is not opened.
+ (sectioning_html): Call close_paragraph so that paragraph
+ will be started.
+
+1999-02-26 Akim Demaille <demaille@inf.enst.fr>
+
+ * texi2dvi (get_xref_files): Take $filename_noext as $1.
+ (get_xref_files): Look for $1.idx only, not *.idx.
+ (get_xref_files): Look for $1.cb files (\usepackage{changebar}).
+ * texi2dvi: Look for rerun requests in LOG files in addition to
+ xref files comparison.
+ (bibtex): Remove useless `./' (already added in
+ command_line_filename).
+ (filename_dir): Smarter sed expression that handles file names
+ with no directory part.
+ (txiversion): Removed useless () (`` already guarantee a subshell).
+
+1999-02-25 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
+
+ * makeinfo/multi.c (find_template_width): Fix operator precedence.
+
+Tue Feb 23 10:35:53 1999 Karl Berry <karl@gnu.org>
+
+ * dir-example: ccmode not cc-mode. From hds.
+
+Mon Feb 22 07:34:00 1999 Karl Berry <karl@gnu.org>
+
+ * makeinfo/lang.c,
+ * doc/texinfo.txi: Fix kazakhkh typo.
+
+1999-02-21 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * djgpp/config.sed: Add pcterm.c to terminal.o dependencies.
+
+1999-02-21 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
+
+ * makeinfo/lang.c (cm_accent_generic): Emit the accent character
+ only once, after the argument.
+
+Sun Feb 21 16:36:14 1999 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (handle_menu_entry): new routine.
+ (reader_loop): call it, allowing for comments in menus.
+
+ * makeinfo/node.c: Rearrange functions to make static, etc.
+
+ * doc/Makefile.am (EXTRA_DIST, install-tex): Add txi-cs and txi-no.
+
+1999-02-20 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * util/install-info.c (open_possibly_compressed_file): Output
+ explicit message about empty input files.
+ (insert_entry_here): Insert multiple entries in alphabetical order.
+
+Fri Feb 19 09:13:28 1999 Karl Berry <karl@gnu.org>
+
+ * makeinfo/insertion.c (enum_html): new routine.
+ (begin_insertion): call it.
+ Based on code from: Yoshiki Hayashi <g740685@komaba.ecc.u-tokyo.ac.jp>.
+
+ * lib/xexit.c (EXIT_FAILURE) [!defined EXIT_SUCCESS && VMS]: weird
+ long value.
+ From: Lars Hecking <lhecking@nmrc.ucc.ie>
+
+Thu Feb 18 16:42:10 1999 Karl Berry <karl@gnu.org>
+
+ * makeinfo/node.h (remember_node_reference): decl.
+ * makeinfo/makeinfo.c (find_unused_reference): dump unused decl.
+
+1999-02-18 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/cmds.c (cm_dots, cm_enddots): Don't produce &#133; for
+ HTML, as too many browsers don't support it; use "..." in a
+ smaller font (with <small>).
+ (cm_top): Output the lang= attribute inside <html>.
+
+ * makeinfo/node.c (cm_node): Output the lang= attribute inside
+ <html>.
+
+ * makeinfo/footnote.c (output_pending_notes): Generate <ol>
+ instead of <dl compact>. Make the text of each footnote start a
+ new paragraph.
+
+1999-02-17 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/insertion.c (cm_item): Remove <dd> when immediately
+ followed by a <dt>. Add a <br> before every <dt>, except if we
+ are converting @itemx, or in the first item after <dl>.
+ (begin_insertion): Use <dl> for tables, to make it look closer to
+ the Info output. Don't output a newline after a <pre>.
+
+1999-02-17 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/makeinfo.c (handle_variable): Don't backup input
+ pointer if we hit the end of text (usually, inside
+ execute_string).
+ * makeinfo/insertion.c (get_item_function): Likewise.
+
+Wed Feb 17 15:09:06 1999 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi: Better indexing of space entries.
+
+ * makeinfo/multi.c (find_template_width): new routine to really
+ parse @multitable {...} templates.
+ (setup_multitable_parameters): call it.
+ Bug report from: Sergio Pokrovskij <pok@nbsp.nsk.su>.
+
+ * lib/system.h (substring): declare.
+
+ * lib/Makefile.am (libtxi_a_SOURCES): add substring.c.
+
+ * makeinfo/defun.c: Move substring to lib.
+
+ * util/texindex.c (tempcopy): no longer used.
+ (maketempname): make static.
+
+ * Installed these changes:
+
+1999-02-13 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/cmds.c (cm_acronym): New function, makes @acronym
+ produce a smaller font size in HTML mode.
+ (cm_sc): Produce smaller font size in HTML mode.
+
+ * makeinfo/footnote.c (cm_footnote): In HTML output, make the
+ footnote number be a superscript; remove [] around the link.
+
+ * makeinfo/cmds.c (cm_var_sc): Separated into two functions:
+ cm_var and cm_sc, since @var and @sc have different effects in
+ HTML output.
+
+ * makeinfo/makeinfo.c (cm_xref, cm_inforef): Don't put "[]" around
+ HTML links.
+
+ * info/pcterm.c (DJGPP_keytab): Add translation for Alt-PgUp and
+ Alt-PgDn, to support the new M-prior key.
+
+Wed Feb 17 11:50:46 1999 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi: Don't mention texi2roff so prominently.
+
+ * makeinfo/makeinfo.c: Pass enclose_expand to remember_brace
+ rather than enclose_command. From Eli.
+
+ * makeinfo/macro.c (cm_alias, cm_definfoenclose): Expand macros in
+ first call to get_until_in_line. From Eli.
+
+ * info/makedoc.c,
+ * info/session.c,
+ * info/man.c,
+ * info/tilde.c,
+ * info/info.c,
+ * makeinfo/files.c,
+ * makeinfo/multi.c,
+ * makeinfo/node.c,
+ * makeinfo/makeinfo.c: Use xexit.
+ * makeinfo/makeinfo.h (NO_ERROR, FATAL, SYNTAX): remove.
+
+ * info/terminal.c: Avoid sleep unless on sun-cmd terminal.
+
+ * lib/xexit.c (EXIT_FAILURE) [!EXIT_FAILURE]: #define to 1 to fix
+ Sony NEWS-OS 4.0C lossage. From Akim.
+
+ * info/infodoc.c: Translate where is doc string, underline lines
+ in help.
+ From: Trond Endrestol <trond@agamemnon.gtf.ol.no>
+
+ * makeinfo/cmds.c (cm_dots, cm_enddots): go back to ... and ....,
+ &#133; apparently doesn't work widely enough.
+
+Tue Feb 16 07:37:54 1999 Karl Berry <karl@gnu.org>
+
+ * configure.in (ALL_LINGUAS): add de_AT.
+
+ * util/texi2dvi: Redirect cd output to /dev/null when determining
+ txiversion.
+
+Mon Feb 15 13:43:37 1999 Karl Berry <karl@gnu.org>
+
+ * util/install-info.c,
+ * util/texindex.c: Call xexit instead of exit.
+
+ * lib/system.h (xexit): Declare.
+
+ * lib/Makefile.am (libtxi_a_SOURCES): Add xexit.c.
+
+ * doc/texinfo.txi: Document that @documentencoding is used in the
+ HTML output.
+
+ * makeinfo/cmds.c (cm_top): use document_encoding if set.
+ (command_table): call cm_documentencoding instead of no-op.
+ * makeinfo/lang.c (document_encoding, cm_documentencoding): define.
+ * makeinfo/lang.h (document_encoding, cm_documentencoding): declare.
+
+ * makeinfo/insertion.c: Restore </p> before <li>.
+
+ * util/texi2dvi: If texinfo.tex version is too low for macros, use
+ makeinfo.
+
+ * makeinfo/cmds.c (cm_center): save and restore value of
+ indented_fill, otherwise @center within an @enumerate (say)
+ also closes the indentation.
+ Bug from: Sergio Pokrovskij <pok@nbsp.nsk.su>.
+
+Sun Feb 14 15:25:02 1999 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c: Doc fix.
+
+ * doc/texinfo.txi: Be enthusiastic if people want to implement
+ more output formats, but use makeinfo to do the job.
+
+ * makeinfo/index.c (index_element_compare): Use strcoll if it's
+ available.
+ * configure.in: Call AC_FUNC_STRCOLL.
+ * makeinfo/makeinfo.c (main): Use LC_CTYPE and LC_COLLATE
+ categories. Suggestion from Oleg.
+
+ * lib/system.h (setlocale) [!HAVE_SETLOCALE]: #define away.
+ Suggestion from Akim.
+
+ * doc/texinfo.txi: Document @paragraphindent working in TeX now.
+
+ * doc/texinfo.txi,
+ * makeinfo/lang.c,
+ * makeinfo/lang.h (language_code_type): abbrev changes from Oleg.
+
+ * makeinfo/cmds.c,
+ * makeinfo/node.c: Only translate `Next:', `Previous:', and `Up:',
+ not the whole href. From Eli.
+
+ * doc/texinfo.txi: Document that only unsplit html output is
+ supported in this release.
+
+Sat Feb 13 17:55:30 1999 Karl Berry <karl@gnu.org>
+
+ * configure.in: Check for termlib before termcap for sake of
+ Solaris (judging from less-332 configure.in) and maybe
+ HP-UX 11.
+
+ * doc/texinfo.txi (Footnote commands): incoherency reported by Aharon.
+ Language vs country fixes from Oleg.
+
+1999-02-13 Karl Eichwalder <ke@gnu.franken.de>
+
+ * makeinfo/node.c (cm_node): Tag navigation links as translatable.
+ * makeinfo/cmds.c (cm_top): Ditto.
+
+Wed Feb 10 22:00:00 1999 Karl Heinz Marbaise <kama@hippo.fido.de>
+
+ * makeinfo/defun.h:
+ - new because we need get_base_type-function
+ accessible in insertion.c
+
+ * makeinfo/defun.c:
+ - complete HTML handling of the @def... things.
+
+ * makeinfo/Makefile.am:
+ - defun.h added as part of makeinfo.
+
+ * makeinfo/makeinfo.c:
+ - define looking_at moved into header-file, because
+ we need it in defun.c
+
+ * makeinfo/insertion.c:
+ - some minor changes made to support the @def...
+ things in HTML.
+
+ * makeinfo/lang.c: (cm_accent_generic)
+ - bug fixed. Using umlaut (accent ...)
+ would produce &A only if an umlaut follows
+ an empty line.
+ - bug fixed. Because things like &tilde; &grave;
+ and &circ; do not exist as standalone characters
+ in HTML.
+ - cm_special_char now produce correct HTML for
+ @O{} and @o{}.
+ - warning using _("Text") instead "Text" (gettext).
+
+ * makeinfo/cmds.c:
+ - @url fixed. Display the given Text.
+
+ * doc/texinfo.txi:
+ - corrected the references for @uref, because
+ they were given as "url" instead of "uref".
+ @uref has three arguments, so show them in
+ command list.
+
+Wed Feb 10 17:27:58 1999 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi: Rewrite for overfull box.
+
+Tue Feb 9 19:03:16 1999 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi: Document more HTML output stuff. Based on esr
+ changes.
+ * makeinfo/macro.c,
+ * makeinfo/macro.h,
+ * makeinfo/makeinfo.c: Do alias and definfoenclose expansion.
+ From esr.
+
+Mon Feb 8 14:41:07 1999 Karl Berry <karl@gnu.org>
+
+ * makeinfo/cmds.c: New commands @alias and @definfoenclose.
+ From: "Eric S. Raymond" <esr@snark.thyrsus.com>.
+
+ * doc/texinfo.txi: Document @documentlanguage and
+ @documentencoding.
+
+ * makeinfo/cmds.c: Move accent support to lang.c.
+
+ * makeinfo/makeinfo.c (add_char): add &nbsp; rather than an 8-bit
+ char for html.
+
+ * makeinfo/Makefile.am (makeinfo_SOURCES): add lang.[ch].
+
+ * doc/texinfo.txi: Be even more emphatic that @url is not
+ typically what you want.
+ * doc/texinfo.txi: Document that macro calls must use empty
+ braces.
+
+ * info/session.c: Do not translate node pointers. From Karl E.
+
+ * makeinfo/cmds.c (cm_dfn): Use <dfn>. Suggestion from Eli.
+
+Sun Feb 7 07:00:08 1999 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c: Make --html imply --no-split.
+
+ * makeinfo/cmds.c (cm_top): don't core dump if the top node has no
+ next.
+
+ * makeinfo/makeinfo.c (replace_with_expansion): compare length
+ after expansion with length of full input text before
+ expansion, not just the length of the expanded text.
+ Bug (contents2) reported by kama.
+
+ * info/infodoc.c (create_internal_info_help_node): gettext calls
+ to help msg strings. From Ulrich.
+
+Fri Feb 5 17:35:13 1999 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi: set makeinfo= for latex case.
+
+ * doc/texinfo.txi (@deftp summary): ref Data Types node that
+ actually describes it. From kama.
+
+Thu Feb 4 07:39:10 1999 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c: Take it back. Emacs info needs that text
+ before the CTRL-_.
+ * makeinfo/makeinfo.c: Don't bother to output the header (This is
+ -, produced ...) to stdout.
+
+ * doc/texinfo.txi (Other Info Directories): Mention that dir files
+ must be named dir.
+
+ * makeinfo/makeinfo.c (cm_uref): implement optional third
+ argument.
+ * doc/texinfo.txi (uref): document it.
+ Suggestion from: Charles Karney <karney@pppl.gov>
+
+ * doc/Makefile.am (info_TEXINFOS): put texinfo.txi first so
+ UPDATED reflects its modtime, rather than info-stnd's.
+
+ * makeinfo/files.c (full_pathname) [!WIN32]: #endif in wrong place.
+ From: Yoshiki Hayashi <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+ * makeinfo/cmds.c (cm_url): Remove URL: from output. It's ugly.
+
+Wed Feb 3 16:05:03 1999 Karl Berry <karl@gnu.org>
+
+ * info/infodoc.c: Doc fix, zero not oh.
+
+ * makeinfo/makeinfo.c (add_char): don't ignore if
+ only_macro_expansion, even in no_headers case.
+ Otherwise menu items don't get remembered and defaulting
+ doesn't work. Macros suck!
+
+ * util/texi2dvi (common): include orig_pwd.
+ (language): reguess for each file if not explicitly set.
+
+Tue Feb 2 16:22:32 1999 Karl Berry <karl@gnu.org>
+
+ * configure.in: Bump to 3.12d now.
+
+Mon Feb 1 14:46:45 1999 Karl Berry <karl@gnu.org>
+
+ * makeinfo/insertion.c (cm_item): For itemize and enumerate, do
+ </p> before the <li> for html. Bug from Eli.
+
+ * makeinfo/index.c: Installed change in index.c:
+ Mon Dec 28 12:50:14 1998 Matthew Fredette <fredette@mit.edu>
+ * makeinfo.c (index_add_arg): Use xstrdup on input_filename
+ when saving it in the new index entry.
+
+ * util/texi2dvi: cd / before cd $orig_pwd in case of DOS drive
+ change.
+
+Sun Jan 31 16:39:01 1999 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi: Used sed to expand only the @{if,}tex parts of
+ the source since makeinfo's conditional options aren't ready yet
+ (from Akim).
+ Also use ${1+"$@"} for Digital Unix "$@" expansion bug (from Noah).
+
+ * util/install-info.c: Doc fix from Eli.
+
+ * doc/texinfo.txi: Oops, said we looked for .png twice.
+
+Sat Jan 30 17:18:14 1999 Karl Berry <karl@gnu.org>
+
+ * info/session.c (forward_move_node_structure): remove tangled
+ code to merely print words instead of numbers; too hard to translate.
+
+ * info/session.c: Missing _'s for more i18n. From Trond.
+
+ * doc/Makefile.am (EXTRA_DIST): Include txi-no.tex from Trond.
+
+Sun Jan 24 09:28:12 1999 Karl Berry <karl@gnu.org>
+
+ * Makefile.am (EXTRA_DIST): Use djgpp by itself instead of listing
+ each file separately (new feature in automake 1.4).
+
+ * makeinfo/insertion.c (begin_insertion): for quotation, always
+ increment current_indent even if html output, why not.
+ (Otherwise must not decrement current_indent in end_insertion.)
+
+ * doc/texinfo.txi: More overfull box fixes.
+
+ * makeinfo/insertion.c: Add some assertions and the beginnings of
+ handling @tex.
+
+ * doc/texinfo.txi: Fix overfull boxes, but tables of contents at
+ the front.
+
+ * util/texi2dvi: Can't pass --no-ifinfo --iftex to makeinfo yet,
+ it's not ready.
+
+Sat Jan 23 10:22:16 1999 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi: Pass --no-ifinfo --iftex to makeinfo.
+
+Fri Jan 22 19:09:49 1999 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi: Include version.texi before @settitle so
+ @value{VERSION} gets expanded in the html title. From kama.
+
+ * These patches from Tim Singletary <talon@clark.net>.
+ * makeinfo/makeinfo.c: Simplify and improve html menus.
+ * makeinfo/insertion.c (begin_insertion): simplify html menu case
+ and set had_menu_commentary.
+ * makeinfo/insertion.h (had_menu_commentary): declare new global.
+ * makeinfo/node.h (glean_node_from_menu): declare.
+ * makeinfo/node.c (glean_node_from_menu): new arg to specify what
+ type of reference to remember as.
+
+ Date: Sun, 29 Nov 1998 09:21:01 -0500 (EST)
+ From: Tim Singletary <tsingle@talon.clark.net>
+ To: texinfo-pretest@tug.org
+ Subject: explanation of previous patches
+
+ > These diffs introduce some non-trivial changes into very
+ > sensitive parts of makeinfo, and it is hard to judge them without
+ > knowing what exactly do they solve.
+
+ At a high level, these patches fix (or at least significantly improve)
+ the html conversion of menus. Specifically, they fix bugs in the
+ conversion of menu commentary and detailmenu entries.
+
+ The menu commentary fixes require some justification: The unpatched
+ makeinfo attempts, with many bugs, to place menu commentary outside
+ the <menu> by adding </ul> and <ul> tags. While I understand the
+ motivation for this, that there might be browsers that don't support
+ <p> within <menu>, I'm not aware of any such browser and don't see any
+ compelling reason to continue the </ul> kludge.
+
+ Certainly
+ <menu>
+ <li>First paragraph.
+ <p>Second paragraph.
+ <li>Second item.
+ </menu>
+ is valid html!
+
+ Anyway, here's what my patches do:
+
+ 1) Deleted the `<h4>Menu</h4>' at the beginning of each menu. Using
+ `<h4>' is wrong since menus don't usually come after an `h3'
+ header. `<b>' looks the same on most browsers, but my opinion is
+ that there's no need for any header at all!
+
+ 2) Deleted the `<li>' kludge at the begining of each menu. It's no
+ longer needed since I'm deleting the </ul> kludge.
+
+ 3) Replace `in_menu_para', declared static in makeinfo.c:add_char()
+ with `had_menu_commentary', declared globally. Modified
+ insertion.c:begin_insertion() to initialize had_menu_commentary to
+ 1 when beginning a menu. Now there's enough state information for
+ menu commentary to be processed within <menu> ... </menu>; the
+ commentary can be seperated from the rest of the menu by bracketing
+ it between <p>'s.
+
+ Note that the first patch had a bug initializing
+ had_menu_commentary; the second patch fixes this bug.
+
+ 4) Changed the semantics of the argument to
+ node.c:glean_node_from_menu(). Previously, glean_node_from_menu()
+ only called remember_node_reference() when the argument was
+ non-zero. But add_char() didn't call `glean_node_from_menu(1)'
+ when processing detailmenu entries. In other words, detailmenu
+ entries didn't get registered as references, which lead to the html
+ conversion of detailmenu entries not producing proper hrefs!
+
+ The new semantics are that glean_node_from_menu always calls
+ remember_node_reference(), but calls it with `menu_reference' when
+ the first arg to glean_node_from_menu() is 1 and with
+ `followed_reference' otherwise. Now, detailmenu entries get
+ registered as `followed_reference' (normal menu entries still get
+ registered as `menu_reference') and the html conversion produces
+ proper hrefs.
+
+ 5) The above changes made it possible to streamline the section of
+ add_char() that deals with html menu text.
+
+ 6) In an otherwise unrelated change, rewrote a section of
+ glean_node_from_menu to no longer use `goto save_node;'.
+
+
+Thu Jan 21 12:55:42 1999 Karl Berry <karl@gnu.org>
+
+ * doc/info-stnd.texi: OK, let's try restoring the @include
+ version.texi with the new automake.
+
+ * makeinfo/cmds.c: Improve HTML @pounds, @bullet, etc.
+
+ * doc/Makefile.am (install-tex): new target.
+ (EXTRA_DIST): Include txi-??.tex.
+ txi-de.tex: new file from kama.
+
+ * Makefile.am (AUTOMAKE_OPTIONS): Bump to 1.4.
+ (install-tex): new target.
+
+ * util/texi2dvi: Restore "$@" for explicitness in main loop.
+
+ * doc/Makefile.am (*.1) [TEXINFO_MAINT]: Conditionalize.
+
+ * configure.in (AC_PREREQ): Bump to 2.13.
+ (TEXINFO_MAINT): Define this AM_CONDITIONAL.
+
+ * doc/texinfo.txi: Document that the HTML output name is derived
+ from @setfilename.
+
+ * makeinfo/makeinfo.c (convert_from_loaded_file): Use @setfilename
+ for basename of html output.
+
+ * doc/texinfo.txi (url): Use example.org for the example.
+
+ * makeinfo/cmds.c (cm_url): @url should not produce a link, sorry
+ to say.
+
+Wed Jan 20 16:31:55 1999 Karl Berry <karl@gnu.org>
+
+ * util/texindex.c,
+ * util/install-info.c,
+ * makeinfo/makeinfo.c,
+ * info/info.c: It's 1999.
+
+ * doc/info.texi (Advanced info commands): Fix typos from Gildea.
+
+ * makeinfo/makeinfo.c (end_of_sentence_p): don't check negative
+ array offset.
+ From: Enrico Scholz <enrico.scholz@wirtschaft.tu-chemnitz.de>
+
+Sun Jan 17 16:42:16 1999 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi: Restore --batch, handle changing escape character
+ more cleanly. From Akim (as always).
+
+Thu Jan 14 16:47:41 1999 Karl Berry <karl@gnu.org>
+
+ * configure.in (ALL_LINGUAS): Add no.
+ From: Trond Endrestol <trond@agamemnon.gtf.ol.no>
+
+ * util/texi2dvi: Doc fix from Akim and do not always exit 1 from trap.
+ And it's 1999.
+
+ * doc/texinfo.txi (image): Document imagename.pdf.
+
+ * Apply this change from Eli:
+
+ 1998-11-20 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/makeinfo.h (meta_char_pos): New variable.
+ * makeinfo/makeinfo.c (init_paragraph): Initialize it.
+ (add_char): Use META to create a non-breakable space character.
+ (add_meta_char): New function.
+ (end_of_sentence_p): Don't handle characters at meta_char_pos as
+ normal sentence enders.
+ (flush_output): Only unMETA the non-breaking space character.
+ Reset meta_char_pos to zero.
+ (do_flush_right_indentation): Call adjust_braces_following.
+ (indent): Likewise.
+ (cm_value): Save and restore the value of meta_char_pos.
+ (expansion): Likewise.
+ * makeinfo/macro.c (me_execute_string_keep_state): Save and
+ restore the value of meta_char_pos.
+ * makeinfo/node.c (cm_node): Save and restore the value of
+ meta_char_pos.
+ * makeinfo/cmds.c (cm_accent): Make the dot we add due to
+ @dotaccent be a meta-character.
+ (cm_code, cm_dfn): Call add_meta_char to insert the closing
+ quote.
+ (cm_cite): Call add_char instead of add_word.
+
+Thu Jan 7 18:04:26 1999 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi: Handle pdf files more cleanly. From Akim.
+
+Wed Jan 6 17:49:11 1999 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (cm_image): Check for .png also.
+
+Sun Dec 20 07:54:47 1998 Karl Berry <karl@gnu.org>
+
+ * util/texi2dvi: Add --pdf.
+
+ * util/texi2dvi: New option -@ to use @input and @nonstopmode, in
+ case texinfo is preloaded.
+ From: Khimenko Victor <khim@sch57.msk.ru>
+ Date: Sun, 20 Dec 1998 02:04:12 +0300 (EET)
+
+Sat Dec 19 17:37:37 1998 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi (Multitable Column Widths): leading zero ok for
+ @columnfractions.
+
+ * util/texi2dvi: New version from Akim, plus --quiet is like
+ --batch, etc.
+
+Fri Dec 18 17:22:44 1998 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi: Document that the Texinfo source can't be
+ arbitrarily ordered (for print) even if all pointers are supplied.
+
+ * makeinfo/insertion.c (end_insertion): In itemize case,
+ close_insertion_paragraph so @end itemize cause a line break.
+ Report from: Sergei Pokrovsky <pok@nbsp.nsk.su>
+ Date: Sun, 22 Nov 1998 19:45:21 +0700 (GMT)
+
+Tue Dec 15 16:21:51 1998 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi: More fixes from Oleg.
+
+ * configure.in: Bump version to 3.12c for next pretest.
+
+ * util/install-info.c (open_possibly_compressed_file)
+ [STRIP_DOT_EXE]: logic for compression_program assignment
+ was reversed.
+ From: wlestes@wlestes.uncg.edu
+
+Sat Dec 12 18:02:48 1998 Karl Berry <karl@gnu.org>
+
+ * Merged these changes from Andreas:
+
+1998-12-06 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
+
+ * makeinfo/node.c (cm_node): When searching for @menu don't
+ require a space after it.
+
+1998-12-06 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
+
+ * makeinfo/cmds.c (cm_top): free top_name only after done using it.
+
+Sat Dec 12 15:40:13 1998 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi: Various typos and fixes from Oleg.
+
+ * doc/texinfo.txi: Move @node's outside of @ifinfo for the sake of
+ HTML processing.
+
+ * doc/texinfo.txi (titlepage): @pxref was not in parens. From Oleg.
+
+Sun Dec 6 16:49:09 1998 Karl Berry <karl@gnu.org>
+
+ * dir-example: Amd is now am-utils.
+
+ * doc/Makefile.am: Reinstate help2man invocations for development.
+
+ * doc/texinfo.txi: Document @set...contentsaftertitlepage (from kama).
+ Fix incorrect sense for @image and Hungariam typo (from Oleg).
+
+ * lib/system.h: #include libintl.h here instead of acconfig.h, so
+ the system include files have a chance to #define NULL
+ before it does.
+ * acconfig.h: Remove libintl.h and #defines from here.
+ From: "Philippe De Muyter" <phdm@macqel.be>
+ Date: Fri, 4 Dec 1998 00:56:25 +0100 (CET)
+
+ * info/signals.c: Start #ifdef's in column one for cc on sysv68
+ (m68k-motorola-sysv).
+ From: "Philippe De Muyter" <phdm@macqel.be>
+ Date: Fri, 4 Dec 1998 00:56:25 +0100 (CET)
+
+ * info/filesys.c (is_dir_name): use strcpy instead of automatic
+ array initialization.
+ From: "Philippe De Muyter" <phdm@macqel.be>
+ Date: Fri, 4 Dec 1998 00:56:25 +0100 (CET)
+
+ * configure.in (ALL_LINGUAS): add ru.
+
+Fri Dec 4 08:12:11 1998 Karl Berry <karl@gnu.org>
+
+ * info/infodoc.c: Gettextize the help buffer string.
+
+Sun Nov 29 17:12:35 1998 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi: Use @ifnottex rather than @ifinfo for @top.
+ (makeinfo top): document this.
+
+ * doc/info-stnd.texi,
+ * doc/info.texi: Use @ifnottex rather than @ifinfo for @top.
+
+ * makeinfo/insertion.c (cm_menu): Implicitly insert @top command
+ so we can construct the node tree as usual when we see @menu
+ before @node. Probably this is when the input uses
+ @ifinfo instead of @ifnottex, as virtually all existing
+ manuals do.
+
+ * makeinfo/insertion.c (discard_insertions): Let any conditional
+ cross node boundary. (So the @top node can be wrapped
+ in @ifnottex, for example.)
+
+ * Installed these:
+
+1998-11-21 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/makeinfo.c (expansion): Save and restore
+ last_inserted_character and last_char_was_newline.
+
+ * makeinfo/cmds.c (cm_dircategory): Kill any indentation before
+ INFO-DIR-SECTION. install-info relies on this.
+
+1998-11-20 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/multi.c (struct env): Add meta_char_pos member.
+ (select_output_environment): Save and restore meta_char_pos.
+ (out_char): Output characters by switching environment to #0 and
+ calling insert. Call flush_output when a newline is output.
+ (output_multitable_row): Update the current environment's
+ output_paragraph_offset as well, after removing trailing
+ whitespace. Fix typo in loop index.
+ (do_multitable): Call close_single_paragraph.
+ (end_multitable): Call close_insertion_paragraph. Don't output
+ an extra newline.
+
+1998-11-20 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/makeinfo.h (meta_char_pos): New variable.
+ * makeinfo/makeinfo.c (init_paragraph): Initialize it.
+ (add_char): Use META to create a non-breakable space character.
+ (add_meta_char): New function.
+ (end_of_sentence_p): Don't handle characters at meta_char_pos as
+ normal sentence enders.
+ (flush_output): Only unMETA the non-breaking space character.
+ Reset meta_char_pos to zero.
+ (do_flush_right_indentation): Call adjust_braces_following.
+ (indent): Likewise.
+ (cm_value): Save and restore the value of meta_char_pos.
+ (expansion): Likewise.
+ * makeinfo/macro.c (me_execute_string_keep_state): Save and
+ restore the value of meta_char_pos.
+ * makeinfo/node.c (cm_node): Save and restore the value of
+ meta_char_pos.
+ * makeinfo/cmds.c (cm_accent): Make the dot we add due to
+ @dotaccent be a meta-character.
+ (cm_code, cm_dfn): Call add_meta_char to insert the closing
+ quote.
+ (cm_cite): Call add_char instead of add_word.
+
+Sun Nov 29 16:30:06 1998 Karl Berry <karl@gnu.org>
+
+ * info/info.h,
+ * info/footnotes.h (FOOTNOTE_LABEL),
+ * info/indices.c (APROPOS_NONE): Use N_ rather than _.
+
+ * info/infodoc.c (create_internal_info_help_node,
+ function_documentation): Do not translate the empty string.
+ Date: Fri, 25 Sep 1998 15:09:42 +0400
+ From: "Oleg S. Tihonov" <tihonov@ffke-campus.mipt.ru>
+
+ * doc/info-stnd.texi: Mention PRIOR as another alias for
+ PREVIOUS/PageUp.
+
+ * doc/texinfo.txi: @emph produces _emph_ not *emph*. Spurious
+ junk before makeinfo bison example.
+ From: tihonov@ffke-campus.mipt.ru.
+
+1998-11-16 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/defun.c (defun_internal): Don't expand the arguments to
+ @defun and its ilk.
+
+ * makeinfo/makeinfo.c (expansion): Copy the name of the currently-
+ executing command and restore it after expansion.
+
+Sun Nov 15 17:40:51 1998 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c: Rearrange usage, allow -v for verbose, only
+ output `Making' line when verbose.
+ * makeinfo/makeinfo.h (process_html, process_info, process_tex):
+ declare.
+ * makeinfo/cmds.c: Use conditional commands.
+ * makeinfo/insertion.c (find_type_from_name): Handle rawhtml and
+ rawtex.
+ (conditional commands): Allow individual switching on and off.
+
+ * makeinfo/insertion.h: Declare conditionals.
+
+1998-11-14 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/insertion.c (begin_insertion, end_insertion): Use <pre>
+ to convert @display and @smalldisplay into HTML.
+
+ * makeinfo/cmds.c (cm_asterisk): Don't insert an extra newline in
+ HTML mode, since input includes a newline right after the @*.
+ (cm_sp): Output "<br><p>\n" as many times as the argument says.
+ (cm_url): Don't include "<a href=" in the anchor text in HTML
+ output.
+
+ * makeinfo/makeinfo.c (cm_pxref): Don't add a period after @pxref
+ if in HTML mode.
+ (get_rest_of_line): Accept an additional argument EXPAND, and
+ expand the rest of line if it's non-zero. All callers changed.
+ (close_paragraph): When in HTML mode, honor the formatting of the
+ source paragraphs by generating "<p>" for every closed paragraph;
+ follow it by as many "<p>"'s as paragraph_spacing specifies.
+
+Sat Nov 14 17:38:27 1998 Karl Berry <karl@gnu.org>
+
+ * makeinfo/insertion.c: Use <ul compact> instead of deprecated <menu>.
+ Omit extra <li> after the menu beginning.
+
+ * makeinfo/index.c: Use <ul compact> instead of deprecated <menu>.
+
+Thu Nov 12 16:33:09 1998 Karl Berry <karl@gnu.org>
+
+ * Makefile.am (EXTRA_DIST): add djgpp/config.sed.
+
+ * info/terminal.c: #include <sys/ioctl.h> to define TIOCGWINSZ
+ under LynxOS. From: Marius Groeger <mag@sysgo.de>.
+
+1998-11-06 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
+
+ * makeinfo/insertion.c (begin_insertion): Correctly handle
+ ifnottex and ifnothtml.
+ (end_insertion): Likewise.
+
+Sun Nov 8 17:30:23 1998 Karl Berry <karl@gnu.org>
+
+ * makeinfo/index.c,
+ * makeinfo/insertion.c: Menu is special to Info.
+ * makeinfo/node.c: Top is a special name, don't translate it.
+ * info/session.c (info_top_node): Top is a special name, don't
+ translate it.
+ From: "Oleg S. Tihonov" <tihonov@ffke-campus.mipt.ru>.
+
+Fri Nov 6 17:18:43 1998 Karl Berry <karl@gnu.org>
+
+ * configure.in: Version 3.12b.
+
+ * util/texi2dvi: Fixes from Eli and Christoph Martin.
+
+ Mon Oct 5 13:58:53 1998 Dave Glowacki <dglo@ssec.wisc.edu>
+ * util/install-info.c: Fix off-by-one error in findlines()
+
+ * util/texindex.c (usage): avoid trigraph until Ulrich fixes
+ po2tbl.sed.in. From Paul Eggert.
+
+1998-11-03 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/makeinfo.c (cm_xref): Don't bypass the test that an
+ xref ends with a period or a comma if the reference has a single
+ argument.
+
+1998-10-31 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/insertion.c (end_insertion): Don't decrement
+ in_fixed_width_font when leaving a menu, the previous value is
+ restored by pop_insertion.
+
+ * makeinfo/makeinfo.c (add_char): Don't increment output_column
+ twice when a newline is inserted into the output.
+
+ * doc/texinfo.txi (emph & strong): Document the use of underscores
+ for @emph in the Info output.
+
+1998-10-30 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * djgpp/config.bat: Make sure intl/po2tblsed.in exists before we
+ begin the configure boogie.
+ * djgpp/config.sed: Sed script, to be run by config.bat.
+
+ * doc/info-stnd.texi (Node Commands): Document the new G command.
+
+ * info/session.c (info_follow_menus): Step over a possible leading
+ space in a menu entry in menus[].
+ (split_list_of_nodenames): Renamed from split_words. Split the
+ string on commas, not on spaces, since a menu entry can have
+ embedded whitespace. Get past the null byte after inserting it.
+ (info_menu_sequence): Don't crash if there's no DIR node; try
+ using Top of the current Info file, and if that doesn't work
+ either, throw an error.
+
+ * util/texi2dvi: Use $path_sep in TEXINPUTS. Don't include any
+ dots in $tmpdir, 8+3 filesystems won't like that.
+
+ * makeinfo/makeinfo.c (reader_loop): Expand any macros in a menu
+ entry when creating a <menu> item for HTML. Fix an off-by-one
+ error in counting input lines.
+
+ * makeinfo/files.c (expand_filename): Don't treat .foo/bar as
+ absolute file name.
+
+ * makeinfo/makeinfo.c (add_char): Use strncpy instead of memcpy,
+ since the buffers overlap. If the line being refilled includes
+ nothing but the indentation and the word being added, do NOT add
+ an extra newline.
+
+ * util/install-info.c (strip_info_suffix, menu_item_equal,
+ open_possibly_compressed_file) [__MSDOS__]: Allow .inz and .igz as
+ suffuxes for compressed files.
+ (open_possibly_compressed_file): Return an indication whether we
+ opened a file or a pipe. Use FOPEN_RBIN from system.h.
+ [STRIP_DOT_EXE]: Use gzip.exe with an explicit .exe extension.
+ [O_BINARY]: If the file is not compressed, switch its stream to
+ text mode.
+ (readfile): Close the file or the pipe.
+ (output_dirfile): Call pclose to actually run the compressor.
+
+Thu Nov 5 08:33:06 1998 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi: effect -> affect
+ From: Eric Hanchrow <offby1@blarg.net>
+
+Tue Nov 3 14:26:59 1998 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c (cm_image): Allocate enough space for the
+ zero byte.
+
+ * doc/texinfo.txi: Document epsf.tex standard location.
+
+Tue Oct 27 10:45:47 1998 Karl Berry <karl@gnu.org>
+
+ * Makefile.am (TEXINFO_TEX): add definition.
+
+ * doc/info-stnd.texi: Avoid unnecessary overfull boxes from
+ examples.
+
+ * doc/Makefile.am (install-data-local): missing ".
+
+ * doc/Makefile.am: Don't try to run help2man in distribution.
+
+Mon Oct 26 13:43:53 1998 Karl Berry <karl@gnu.org>
+
+ * configure.in (TEXMF): lose this whole block. It is too painful
+ to maintain with the different tex installations out there.
+
+ * util/Makefile.am (EXTRA_DIST): update-info renamed to
+ fix-info-dir.
+
+ * makeinfo/footnote.h: Doc fix.
+
+ * makeinfo/multi.c: #include "insertion.h"
+ * makeinfo/cmds.c: #include "node.h"
+ * makeinfo/makeinfo.h,
+ * makeinfo/makeinfo.c: Move globals, functions for insertions and
+ nodes.
+ * makeinfo/defun.c: #include "insertion.h"
+ * makeinfo/Makefile.am: Add insertion.[ch], node.[ch].
+ * node.[ch], insertion.[ch]: New files.
+
+ * makeinfo/makeinfo.c,
+ * makeinfo/makeinfo.h: Move globals for cmds.h.
+ * makeinfo/index.h: Include cmds.h.
+ * makeinfo/Makefile.am (makeinfo_SOURCES): Add cmds.h, cmds.c.
+ * cmds.c, cmds.h: New files.
+
+Sat Oct 24 17:28:14 1998 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c,
+ * makeinfo/makeinfo.h: Globals for files.c.
+ * makeinfo/Makefile.am (makeinfo_SOURCES): add files.[ch].
+
+Tue Oct 20 17:03:10 1998 Karl Berry <karl@gnu.org>
+
+ * makeinfo/Makefile.am (makeinfo_SOURCES): add macro.c and
+ macro.h.
+ * makeinfo/makeinfo.c: Move macro code to macro.h and macro.c.
+ * makeinfo/makeinfo.h: Move macro stuff to macro.h, expose global
+ last_char_was_newline for macro.c.
+ * makeinfo/index.c,
+ * makeinfo/footnote.c: #include macro.h.
+
+Wed Oct 7 16:24:07 1998 Karl Berry <karl@gnu.org>
+
+ * doc/info-stnd.texi: For now don't include version.texi due to
+ automake error.
+
+ * makeinfo/index.h: #include makeinfo.h for sake of COMMAND type.
+ * makeinfo/index.c: No need to include makeinfo.h, index.h does
+ now.
+
+ * makeinfo/makeinfo.c: Move footnote code to footnote.c.
+ * makeinfo/makeinfo.h: Globals for footnote.c.
+ * makeinfo/Makefile.am (makeinfo_SOURCES): add footnote.[ch].
+
+ * makeinfo/makeinfo.c: Move defun code to defun.c, necessary
+ global to makeinfo.h.
+ * makeinfo/makeinfo.h (default_indentation_increment): move here
+ for defun.c.
+ * makeinfo/Makefile.am (makeinfo_SOURCES): add defun.c.
+
+ * Makefile.am: Doc fix.
+
+ * configure.in (AC_OUTPUT): generate makeinfo/tests/Makefile.
+
+ * makeinfo/makeinfo.c,
+ * makeinfo/makeinfo.h,
+ * makeinfo/Makefile.am (makeinfo_SOURCES): add index.[ch].
+
+Fri Oct 2 17:42:26 1998 Karl Berry <karl@gnu.org>
+
+ * lib/system.h (STREQ): new macro.
+
+Thu Oct 1 09:26:57 1998 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.txi: Delete spare copy since out of date,
+ add makeinfo html to menu,
+ detailmenu doesn't take braces in summary.
+
+Wed Sep 30 14:38:21 1998 Karl Berry <karl@gnu.org>
+
+ * makeinfo/makeinfo.c: Remove != NULL comparisons,
+ xmalloc/xrealloc casts, assignments in if statements.
+
+Wed Sep 30 14:16:01 1998 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c: Remove NULL casts and parentheses in return
+ statements.
+
+ * makeinfo/makeinfo.c (add_link): Don't add a link if the node is null.
+ (reader_loop): don't glean_node_from_menu if detailmenu, even if html.
+ Various formatting changes.
+
+ * doc/help2man: Always exit successfully.
+
+ * makeinfo/Makefile.am (SUBDIRS): add.
+ (makeinfo_SOURCES): no more html.h.
+
+Fri Sep 11 18:47:15 1998 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c: Fiddle with html output.
+
+1998-09-07 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/makeinfo.c (maybe_update_execution_strings): Only
+ reallocate TEXT if the existing storage is too small, otherwise
+ leave TEXT alone.
+ (replace_with_expansion): Call maybe_update_execution_strings to
+ reallocate input_text if we are executing_string, since storage
+ for execution_string is assumed to be large enough to hold every
+ possible string.
+ (me_execute_string): xstrdup the argument, so callees could freely
+ relocate it as needed.
+
+1998-09-06 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/makeinfo.c (replace_with_expansion): Don't remember
+ macro-expansion pointers if we are executing_string.
+
+1998-09-05 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * info/filesys.c (info_suffixes): Put the empty suffix last in the
+ list, so that `foo.info' is found before `foo', if both exist.
+
+1998-09-05 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/makeinfo.c (maybe_update_execution_strings): New
+ function, updates an entry in execution_strings[] array after
+ input_text is relocated by replace_with_expansion.
+ (replace_with_expansion): Call it.
+
+1998-09-04 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/makeinfo.c (expand_macro): If a macro is called with
+ too many arguments, return NULL and print the line number where
+ the call begins.
+ (execute_macro): If expand_macro returns NULL, return
+ immediately.
+
+Sun Sep 6 19:11:28 1998 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c,
+ * makeinfo/makeinfo.h,
+ * makeinfo/multi.c: Html output. Specifically, these changes:
+
+ Fri Jul 4 22:58:29 1997 Dave Love <d.love@dl.ac.uk>
+
+ * doc/makeinfo.texi: Document HTML output.
+
+ * makeinfo/makeinfo.c: Wrap strings in _() in bits changed for
+ HTML.
+ (cm_image): Generate <img> for HTML.
+
+ Sun Jun 22 22:50:07 1997 Dave Love <d.love@dl.ac.uk>
+
+ * makeinfo/makeinfo.c (NAMED_NODE_ANCHORS): New define.
+ (title, outstanding_node, node_number, node_node_references,
+ escape_html, ifinfo_as_html): New variables.
+ (tentry.number, node_ref.number, fn.number): New fields.
+ (CommandTable): Various additions and alterations for HTML.
+ (long_options): Add html and no-info-as-html.
+ (main): Extra code for HTML.
+ (usage): Add HTML stuff.
+ (expand_filename): Deal with .html.
+ (escape_string): New procedure.
+ (convert_from_loaded_file): Extra code for HTML.
+ (init_internals): Call free_node_references, initialize
+ node_number.
+ (reader_loop): Process menu items for HTML hyperlinks. Escape
+ HTML special characters.
+ (add_char): Code for line breaks and paragraph insertions in
+ HTML.
+ (flush_output): Don't UNMETA for HTML.
+ (indent): Do nothing for HTML.
+ (current_item_function): Case for ifhtml.
+ (begin_insertion): Deal with HTML in various cases.
+ (insert_html_tag): new procedure.
+ (cm_asterisk, cm_copyright, cm_accent, cm_code, cm_kbd,
+ cm_angle_brackets, cm_var, cm_defn, cm_var, cm_emph, cm_string,
+ cm_cite, cm_top, cm_xref, cm_inforef, cm_uref, cm_direntry,
+ cm_ifinfo, cm_item, process_defun_args, defun_internal, cm_sp,
+ cm_dircategory, cm_center, cm_result, cm_expansion, cm_error,
+ cm_exdent, index_add_arg, make_index_entries_unique,
+ cm_printindex, cm_footnote, output_pending_notes,
+ me_execute_string): Code for HTML.
+ (cm_shyph): New procedure.
+ (cm_special_char): Add start, end args. Code for HTML.
+ (cm_email, cm_url, cm_i, cm_b, cm_r): New procedures.
+ (sectioning_html): New procedure.
+ (sectioning_underscore): Use it.
+ (add_link): New procedure.
+ (remember_node): Add number field and update node_number. Note
+ next, etc. nodes for HTML.
+ (add_escaped_anchor_name, add_anchor_name): New procedures.
+ (cm_node): New code for HTML. Move some other code to more
+ useful place.
+ (remember_node_reference): Add number field and update
+ node_number.
+ (remember_node_node_reference, free_node_node_references,
+ number_of_node): New procedures.
+ (cm_ifhtml, cm_html): New procedures.
+ (expansion): Take care of HTML escaping.
+ (cm_settitle): New procedure.
+ (remember_note): Set number field.
+
+ Declare various procedures in advance.
+
+ * doc/texinfo.txi: Makeinfo --html documentation from Dave Love.
+ Typo fixes from: Paul DuBois <dubois@primate.wisc.edu>.
+
+Thu Sep 3 11:11:01 1998 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/Makefile.am (makeinfo_SOURCES): add html.[ch].
+
+1998-08-28 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/makeinfo.c (cm_uref, cm_email): Use get_xref_token to
+ gather arguments.
+ (get_xref_token): Keep track of input line number when expanding
+ xref arguments.
+
+Tue Aug 25 14:36:44 1998 Karl Berry <karl@cs.umb.edu>
+
+ * util/texi2dvi: Exit the script if TeX exits with bad status.
+
+1998-08-16 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * info/indices.c (info_index_apropos): In the *Apropos*
+ menu, print the label first, then the Info file name and
+ the node name. Make the Info file name part of the menu
+ entry, so that all entries are distinct.
+ (apropos_in_all_indices): Scan each Info file only once, thus
+ avoiding multiple identical entries in the *Apropos* menu.
+ Free xstrdup'ed buffer, to avoid leaking memory.
+
+Thu Aug 13 12:54:58 1998 Karl Berry <karl@cs.umb.edu>
+
+ * configure.in: Set version to 3.12a.
+
+ * Makefile.am (AUTOMAKE_OPTIONS): bump required version to 1.3,
+ add readme-alpha option.
+
+ * util/texindex.c (program_name),
+ * util/install-info.c (progname),
+ * info/info.c (program_name),
+ * makeinfo/makeinfo.c (progname): hardwire per coding standards.
+ * doc/help2man: Remove ginfo special case.
+
+Tue Aug 11 17:41:15 1998 Karl Berry <karl@cs.umb.edu>
+
+ * util/gen-dir-node: New version from drk@sgi.com.
+
+Mon Aug 10 13:55:37 1998 Karl Berry <karl@cs.umb.edu>
+
+ * dir-example: Add entries from Linux.
+
+ * info/info-utils.c (get_window_of_node): New fn.
+ * info/info-utils.h (get_window_of_node): New fn.
+ * (strchr,...) [!HAVE_STRCHR]: remove these #defines.
+ * info/infodoc.c (info_find_or_create_help_window): Call
+ get_window_of_node instead of get_internal_info_window.
+ This is so pressing ? repeatedly will always get to the same Help
+ window instead of popping up new ones.
+ From: "Brian J. Fox" <bfox@prospero.datawave.net>
+
+ * info/signals.c: Ignore SIGWINCH if we're in the midst of it.
+ We might get a whole lot of them. Noticed on Afterstep.
+ From: "Brian J. Fox" <bfox@prospero.datawave.net>
+
+1998-07-25 Bruno Haible <bruno@linuix.math.u-bordeaux.fr>
+
+ * install-info.c (findlines): Allocate room for one more line,
+ to avoid crash if dir file has exactly 512 lines.
+
+Tue Aug 4 07:14:35 1998 Karl Berry <karl@cs.umb.edu>
+
+ * info/info.c: Improve help message.
+
+ * dir-example: Add mtools.
+
+Fri Jul 31 13:29:52 1998 Karl Berry <karl@cs.umb.edu>
+
+ * doc/help2man: Various hacks for texinfo.
+
+ * doc/texinfo.txi: Make dir entries more consistent.
+
+ * doc/Makefile.am: Generate man pages with help2man.
+
+ * util/texi2dvi,
+ * util/install-info.c,
+ * makeinfo/makeinfo.c,
+ * util/texindex.c: Improve help message.
+
+ * doc/info.5: Initial.
+ * doc/texinfo.5: Section 5.
+
+Thu Jul 30 17:31:42 1998 Karl Berry <karl@cs.umb.edu>
+
+ * doc/info-stnd.texi,
+ * doc/texinfo.txi: Use Automake-standard VERSION and UPDATED.
+
+Wed Jul 29 17:34:41 1998 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.txi: Describe macro limitations a bit more.
+
+ * dir-example: Correct makeinfo link.
+
+Tue Jul 28 16:44:06 1998 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (remember_brace_1): xstrdup command, since
+ we free it later.
+
+Mon Jul 27 16:27:30 1998 Karl Berry <karl@cs.umb.edu>
+
+ * info/session.c (node_printed_rep): New fn.
+ Change calls.
+
+ * info/session.c (info_set_node_of_window): Simplify by taking new
+ argument to say whether to call
+ set_remembered_pagetop_and_point. Change calls.
+ * info/indices.c: Change call.
+
+ * info/info.c: Rewrite initial menu-sequence following stuff as a
+ function in session.c, and call it.
+
+ * info/infomap.c: Define `G' as info_menu_sequence.
+ * info/session.h (info_menu_sequence, info_follow_menus): declare
+ new fns.
+ * info/session.c (info_follow_menus, split_words,
+ * info_menu_sequence): New functions for new command.
+
+Thu Jul 23 16:44:42 1998 Karl Berry <karl@cs.umb.edu>
+
+ * info/session.c (info_scroll_other_window_backward): new command.
+ * info/infomap.c (initialize_info_keymaps): bind M-DEL and M-prior to
+ scroll-other-window-backward.
+ Report from: Vladimir Alexiev <vladimir@cs.ualberta.ca>
+ Date: Tue, 2 Dec 1997 14:54:30 -0700
+
+ * info/info-utils.c (printed_representation): If ISO_Latin_p, show
+ characters as-is. Don't assume iscntrl(x) returns false
+ for meta characters.
+ Report from: Francois Pinard <pinard@iro.umontreal.ca>
+ Date: 15 Jan 1998 17:48:51 -0500
+
+ * info/pcterm.c (pc_initialize_terminal): now no need to set it
+ here.
+ * info/info-utils.c (ISO_Latin_p): set to 1 by default.
+
+ * doc/info-stnd.texi: Document SPC, add goto-node anchor.
+
+Wed Jul 22 18:58:38 1998 Karl Berry <karl@cs.umb.edu>
+
+ * info/window.c (message_buffer_to_node),
+ * info/session.c (kill_node),
+ * info/nodes.c (info_get_node_of_file_buffer,
+ info_node_of_file_buffer_tags),
+ * info/man.c (manpage_node_of_file_buffer),
+ * info/footnotes.c (make_footnotes_node): set display_pos member
+ in new node.
+
+Tue Jul 21 14:04:52 1998 Karl Berry <karl@cs.umb.edu>
+
+ (all of this is to make SPC/DEL not move outside the current
+ document, i.e., not up through dir)
+ * info/info-utils.h (info_label_was_found): Move from here.
+ * (info_prev_label_of_node): Don't use it any more.
+ * info/session.c (INFO_LABEL_WAS_FOUND): Move to here, add test
+ for filename not dir.
+ (forward_move_node_structure): Change calls, notice if no more nodes.
+ (backward_move_node_structure): Check for moving outside current
+ document to dir.
+ * info/filesys.c (compression_suffixes): Add bz2 for bunzip2.
+ (is_dir_name): New fn.
+ * info/filesys.h: Declare it.
+ * info/nodes.c (info_get_node, info_find_file_internal): Use it.
+
+ * makeinfo/makeinfo.c: Set in_fixed_width_font to avoid munging
+ node names.
+
+Sat Jul 18 17:14:10 1998 Karl Berry <karl@cs.umb.edu>
+
+ * info/man.c (reap_children): Call wait (NULL), since we don't
+ actually use the return status for anything. NEXTSTEP 3.3
+ doesn't like an int * even though that is the POSIX
+ specification.
+ Date: Fri, 22 Aug 1997 13:55:42 +0200
+ From: "Felix H. Gatzemeier" <fxg@imib.rwth-aachen.de>
+ Via: Thomas Esser <te@informatik.uni-hannover.de>
+
+ * info/session.c (kill_node): Restore point when we go back.
+
+Thu Jul 16 18:54:04 1998 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (BRACE_ELEMENT): Add `command' to the save
+ stack.
+ (MAYBE_BRACE_ARGS): New possibility, somewhat like TeX's
+ next-token-as-argument.
+ (command_table): Use cm_accent and MAYBE_BRACE_ARGS for all accents.
+ (read_command): Implement MAYBE_BRACE_ARGS.
+ (init_brace_stack): save current command.
+ (pop_and_call_brace): restore current command.
+ (cm_accent): move almost all accent characters to after the argument.
+ Suggested by Fran,cois.
+
+ * info/info.c (version_string): Remove defn.
+ Change call for --version option.
+ * info/session.c (display_startup_message_and_start): Just use
+ VERSION.
+ * info/info.h (version_string): Remove decl.
+
+Tue Jul 14 16:46:58 1998 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.h: Doc fix.
+
+ * makeinfo/makeinfo.c (validate_file): Don't complain about
+ unreferenced anchors.
+
+ * doc/texinfo.txi: Document @anchor.
+
+Sun Jul 12 14:14:50 1998 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (remember_node): Only set `current_node' if
+ this is not an anchor.
+
+ * info/nodes.c (get_tags_of_indirect_tags_table): Don't set
+ nodelen to -1 when fixing up the subfile entries, it might be 0
+ from an anchor.
+
+ * info/nodes.c (find_node_of_anchor): Offset display_pos for
+ anchor tags by the amount that node references are off by (- 1).
+
+Sat Jul 11 17:37:18 1998 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (cm_anchor): Add output_column for anchors
+ embedded in a line.
+
+Fri Jul 10 16:28:21 1998 Karl Berry <karl@cs.umb.edu>
+
+ * info/session.c (info_menu_or_ref_item): Don't search for the
+ xref text if it's an anchor.
+ * info/nodes.h (N_FromAnchor): New NODE flag.
+ * info/nodes.c (find_node_of_anchor): New fn.
+ (info_node_of_file_buffer_tags): Handle anchor case.
+
+Wed Jul 8 17:48:59 1998 Karl Berry <karl@cs.umb.edu>
+
+ * info/window.c (window_set_node_of_window): Set window->point to
+ node->display_pos.
+ Remove unneeded casts.
+
+Tue Jul 7 08:06:14 1998 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (add_word_args) [!VA_SPRINTF]: Use buffer,
+ not the undeclared temp_string.
+ From: Tobias Naehring <naehring@eeetw3.et.tu-dresden.de>
+ To: egcs-bugs@cygnus.com
+ Date: Mon, 6 Jul 98 13:51:55 +0200
+
+Mon Jul 6 17:43:25 1998 Karl Berry <karl@cs.umb.edu>
+
+ * info/nodes.h (NODE): Add display_pos member.
+
+Sun Jul 5 08:17:43 1998 Karl Berry <karl@cs.umb.edu>
+
+ * info/nodes.h (INFO_REF_LABEL): Define.
+
+ * util/texi2dvi: Rationalize use of `index' vs. more general
+ `xref'.
+
+Thu Jul 2 18:53:43 1998 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c: Don't translate -Footnotes, it's a magic
+ cookie. From Eli.
+
+Wed Jul 1 08:42:41 1998 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.txi (url): Missing word `command'.
+
+Tue Jun 30 10:35:48 1998 Karl Berry <karl@cs.umb.edu>
+
+ * info/info.c: Missing \n in try --help msg.
+
+ * makeinfo/makeinfo.c (cm_anchor): New fn for new cmd.
+ (TAG_FLAG_ANCHOR): New flag for tag entries.
+ (write_tag_table_internal): Handle anchor case.
+ (TAG_FLAG_{{PREV,NEXT,UP}_ERROR,NO_WARN,IS_TOP}): Add TAG_FLAG_ prefix
+ for clarity, change uses.
+
+ * doc/texinfo.txi: Remove warning about footnotes with @item, that
+ works now.
+
+Mon Jun 29 10:17:50 1998 Karl Berry <karl@cs.umb.edu>
+
+ * configure.in (AM_CONFIG_HEADER): Use second argument to be 8.3
+ compliant.
+ * config.h.in: Rename to config.in.
+
+ * info/Makefile.am (EXTRA_DIST),
+ * info/terminal.c [__MSDOS__]: Change #include to pcterm.c and
+ rename file.
+
+Sun Jun 28 14:29:27 1998 Karl Berry <karl@cs.umb.edu>
+
+ * info/Makefile.am (EXTRA_DIST): Add pc_term.c.
+
+ * makeinfo/makeinfo.c (HAVE_MACROS): Remove this conditional, we
+ always want macros now.
+
+ * info/indices.c: Copyright.
+
+1998-06-26 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * makeinfo/makeinfo.c: (only_macro_expansion): New variable,
+ suppresses all expansions except macros.
+ (replace_with_expansion): New function, replaces a portion of
+ input text with its expansion. Avoids moving the text around if
+ we are positive it will expand into itself. If the length of the
+ expanded text is the same as the length of the original text, just
+ replaces the original text without moving the rest. Resyncs the
+ remembered text pointers with the realloc'ed input_text, when it
+ is realloc'ed.
+ (reader_loop): When only_macro_expansion is non-zero, only handle
+ macros, but leave the rest of input intact.
+ (read_command): Now returns an int, zero means no known command or
+ macro is found after the prefix character; all callers changed.
+ Support operation under non-zero only_macro_expansion.
+ (cm_node): Expand only the macros in the @node line. Allocate and
+ generate the macro-expanded @node line in one swell whoop.
+ (glean_node_from_menu): Expand macros in menu entries.
+ (get_xref_token): A new argument EXPAND, when non-zero, means
+ expand macros in the entire brace-delimited argument before
+ looking for the next comma; all callers changed.
+ (expansion): Save and restore additional state variables important
+ for output generation machinery. Disable indentation and filling
+ during the recursive expansion, so that the output buffer offset
+ is not invalidated by filling.
+ (me_execute_string_keep_state): New function, calls
+ me_execute_string, but saves and restores state variables
+ important for output generation, so that -E doesn't change the
+ generated Info output.
+ (index_add_arg, cm_footnote): Call me_execute_string_keep_state.
+ (expand_macro): New function, returns the macro expansion as a
+ malloc'ed string.
+ (execute_macro): Call expand_macro.
+ (me_execute_string): Avoid memory leak by freeing input_filename.
+ (get_until_in_braces, replace_with_expansion, add_char,
+ cm_footnote, cm_macro, cm_unmacro, get_brace_args,
+ extract_colon_unit): Use the faster memcpy/memmove instead of
+ strncpy.
+
+Sat Jun 27 14:18:54 1998 Karl Berry <karl@cs.umb.edu>
+
+ * doc/info.texi: Use @subsubsection instead of
+ @unnumberedsubsubsection, since it's in a numbered chapter.
+
+ * Started installation of following DOS patches from Eli.
+>1998-05-16 Eli Zaretskii <eliz@is.elta.co.il>
+>
+> * info/session.c (info_goto_node): Don't show the nodes of the
+> current Info file twice in *Completions*.
+> * info/echo-area.c (ea_possible_completions): Actually pass the
+> number of completions to printf_to_message_buffer.
+>
+> * info/man.c (manpage_node_of_file_buffer): xstrdup the nodename
+> member of manpage nodes, since the tags are freed and recomputed
+> when a new man page is added to *manpages* file_buffer.
+> (get_manpage_node): Recompute info_windows[]->nodes[] for all
+> windows showing the man pages after nodes[]->contents are
+> invalidated by reallocation of file_buffer->contents.
+>
+>1998-05-15 Eli Zaretskii <eliz@is.elta.co.il>
+>
+> * lib/system.h (DEFAULT_INFO_PRINT_COMMAND) [__MSDOS__]: Define to
+> ">PRN".
+> * info/session.c (print_node): Support ">printer" in
+> INFO_PRINT_COMMAND, to mean write to the named file/device insead
+> of piping to it as a program.
+> (kill_node): Compare window in addition to the nodename, when
+> looking for the node to kill.
+>
+>1998-05-09 Eli Zaretskii <eliz@is.elta.co.il>
+>
+> * lib/system.h (SET_SCREEN_SIZE_HELPER) [__MSDOS__]: Define a new
+> macro.
+> * info/m-x.c (set_screen_height): Use SET_SCREEN_SIZE_HELPER, if
+> defined. If the screen size did'n change, redisplay the previous
+> screen contents.
+>
+> * info/infomap.c (initialize_info_keymaps) [__MSDOS__]: Bind DEL
+> to ea_delete in the echo-area keymap.
+> * info/session.c (incremental_search): If the key is
+> isearch_terminate_search_key, but buffered input is pending, don't
+> gobble the ESC key.
+>
+> * info/info.c (main): Switch the order thet terminal_prep_terminal
+> and terminal_clear_screen are called, to make it consistent with
+> what initialize_info_session does when called with non-zero second
+> argument. Call terminal_unprep_terminal last, after moving the
+> cursor to the bottom of the screen. If user_filename is of the
+> form "d:foo", add "d:." to the INFOPATH, not "d:".
+>
+> * info/signals.c (initialize_info_signal_handler): Save old
+> SIGUSR1 handler.
+> (info_signal_handler): Handle SIGUSR1.
+>
+> * info/indices.c (info_apropos): Print the results to stdout.
+>
+>1998-05-02 Eli Zaretskii <eliz@is.elta.co.il>
+>
+> * makeinfo/makeinfo.c (ALSO_NULL_DEVICE): New macro, for alternate
+> null device name.
+>
+> * info/man.c (get_manpage_contents): Redirect stderr of the man
+> page formatter to the null device.
+> (executable_file_in_path): Use IS_SLASH.
+>
+> * info/session.c (info_gather_typeahead) [__DJGPP__]: Call
+> pc_term_chars_avail to get the number of pending characters.
+>
+> * info/filesys.c (convert_eols): New function, converts DOS-style
+> EOLs to a single Newline.
+> (filesys_read_info_file, filesys_read_compressed): Call it.
+> (filesys_read_compressed) [STRIP_DOT_EXE]: Use explicit .exe
+> suffix.
+> (filesys_read_compressed): Check return status of `pclose'.
+>
+>1998-05-01 Eli Zaretskii <eliz@is.elta.co.il>
+>
+> * info/filesys.c (filesys_read_info_file): Add additional
+> parameter: is_compressed. All callers changed.
+>
+> * makeinfo/makeinfo.c (convert_from_loaded_file): Compare file
+> names with FILENAME_CMP. Use NULL_DEVICE.
+> (cm_node): Compare file names with FILENAME_CMP.
+> * info/tilde.c (tilde_find_suffix, tilde_expand_word): Use
+> IS_SLASH.
+>
+> * info/pc_term.c: New file, handles the PC terminal on MS-DOS and
+> MS-Windows.
+> * info/terminal.c [__MSDOS__]: Include pc_term.c.
+> * info/Makefile.in (ginfo_SOURCES): Add pc_term.c
+> Add pc_term.c to dependencies of terminal.o.
+>
+> * info/session.c (info_get_input_char): Reassign tty after EOF
+> from a non-stdin input stream.
+>
+>1998-04-30 Eli Zaretskii <eliz@is.elta.co.il>
+>
+> * info/session.c (info_set_input_from_file): Use binary input.
+> (info_gc_file_buffers): Compare file names with FILENAME_CMP.
+> * info/search.c (skip_whitespace_and_newlines): Use
+> whitespace_or_newline macro instead of reinventing the wheel.
+> * info/nodes.c (info_find_file_internal): Use IS_ABSOLUTE and
+> FILENAME_CMP.
+> (info_load_file_internal): Call filename_non_directory to find out
+> where the basename begins.
+> (get_tags_of_indirect_tags_table): Call filename_non_directory.
+> containing_dir of "d:foo" is "d:.", not "d:".
+> (forget_info_file): Compare file names with FILENAME_CMP.
+> * info/nodemenu.c (get_visited_nodes): Use FILENAME_CMP to find
+> duplicate lines.
+>
+> * lib/system.h (PIPE_USE_FORK): New macro.
+> * info/man.c (get_manpage_contents): Use it to determine whether
+> to call pipe/fork/exec or popen/pclose to run the man page
+> formatter.
+> (executable_file_in_path): Search for the file with several known
+> extensions such as .exe, where appropriate.
+>
+> * lib/system.h (NULL_DEVICE): A new macro.
+> * info/makedoc.c (main): Use it.
+> (maybe_dump_tags): Switch output strem to binary mode when
+> appropriate.
+> (process_one_file): Update file_size after reading the file.
+>
+> * info/infodoc.c: Add TAB, RET, and `i' to the list of important
+> commands in info_internal_help_text.
+>
+> * info/info.c (main): Support the --speech-friendly option. Use
+> PATH_SEP to separate directories.
+> (info_short_help) [__MSDOS__]: Mention the --speech-friendly
+> option.
+>
+> * info/info-utils.c (filename_non_directory): Use HAVE_DRIVE and
+> IS_SLASH.
+> * info/indices.c (do_info_index_search, index_entry_exists): Use
+> FILENAME_CMP to compare file names.
+> * info/filesys.c: Add ".inf" to the list of known extensions.
+> Look for .z before .Z, for the sake of case-insensitive
+> filesystems. Add DOS-specific extensions to work around 8+3
+> namespace restrictions.
+> (info_absolute_file): New function.
+> (info_find_fullpath): Call it for candidates which are absolute
+> file names. Use IS_SLASH and IS_ABSOLUTE.
+> (info_file_in_path): Use IS_SLASH.
+> (extract_colon_unit, info_add_path): Use PATH_SEP instead of ":".
+> (lookup_info_filename): Compare file names with FILENAME_CMP.
+> (filesys_read_info_file): Read Info files in binary mode.
+> (filesys_decompressor_for_file): Read Info files in binary mode.
+> Compare file names with FILENAME_CMP. On MS-DOS, allow files
+> whose names end with a `z' be decompressed with gunzip.
+> * info/dribble.c (open_dribble_file): Open dribble file in
+> FOPEN_WBIN mode.
+> * info/dir.c (maybe_build_dir_node): Use IS_SLASH.
+> * util/texindex.c (maketempname): Put the numeric suffix after the
+> dot, to salvage 3 more characters on 8+3 filesystems.
+>
+>1998-04-29 Eli Zaretskii <eliz@is.elta.co.il>
+>
+> * util/texindex.c (main): Use IS_SLASH to find the basename of
+> argv[0]. Lose the .exe suffix, if any.
+> (decode_command): Look at $TEMP and $TMP in addition to $TMPDIR.
+> Use DEFAULT_TMPDIR.
+> * util/texi2dvi: Use either `:' or `;' as directory separator in
+> TEXINPUTS, computed at run time. Save previous versions of index
+> files in a separate backup directory.
+> * util/install-info.c (main): Support backslashes in file names by
+> using IS_SLASH. Avoid recomputing length of infile_basename
+> unnecessarily. Use FILENAME_CMP for comparing file names
+> case-insensitively, where appropriate. Allow foo.inf as well as
+> foo.info to be an Info file name.
+> * lib/system.h (PATH_SEP, STRIP_DOT_EXE, FILENAME_CMPN,
+> DEFAULT_TMPDIR): New macros.
+>
+>1998-04-25 Eli Zaretskii <eliz@is.elta.co.il>
+>
+> * lib/system.h (O_BINARY, SET_BINARY, FOPEN_RBIN, FOPEN_WBIN,
+> IS_SLASH, HAVE_DRIVE, IS_ABSOLUTE, FILENAME_CMP, PATH_SEP,
+> HAVE_LONG_FILENAMES): New macros.
+> * makeinfo/makeinfo.c (find_and_load): Use O_BINARY to decide when
+> read returning a value different from what st_size says is not an
+> error. Realloc the buffer after we've read the file.
+> (skip_directory_part): New function, skips leading directory in a
+> way that works on DOSISH systems.
+> (filename_non_directory, pathname_part): Call it.
+> (filename_part): Call filename_non_directory.
+> (expand_filename, full_pathname): Use IS_ABSOLUTE and IS_SLASH.
+> (convert_from_file): Check .txi extension first.
+> (split_file): Support splitting output files on 8+3 filesystems.
+> (main, extract_colon_unit): Use PATH_SEP instead of ':'.
+> (get_file_info_in_path): Use IS_ABSOLUTE and IS_SLASH.
+
+
+ * doc/texinfo.txi: Changes from Eli for MS-DOS stuff.
+ * doc/info-stnd.texi: Fixes from Eli: he documented all the
+ missing keys and command-line options, corrected
+ inaccuracies (probably left-overs from previous versions),
+ and added some clarifications where I thought the manual
+ was not clear enough.
+ * Makefile.am (EXTRA_DIST): Add djgpp files.
+
+ * makeinfo/makeinfo.c: New no-op commands @setcontentsaftertitlepage
+ and @setshortcontentsaftertitlepage.
+ * doc/texinfo.txi: Document the new @set{,short}contentsaftertitlepage
+ commands and the possibility of putting @contents and
+ @shortcontents after @end titlepage.
+
+ * util/texi2dvi: Check that the toc file has not changed (as well
+ as .aux and .??).
+
+Thu Jun 25 16:58:46 1998 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.txi: Document new commands @env, @command, @option.
+
+ * makeinfo/makeinfo.c (option, command, env): New markup commands, same
+ as @code in info.
+
+Wed Jun 24 15:39:38 1998 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c: New no-op command @acronym.
+
+ * doc/texinfo.txi: Document new command @acronym.
+
+ * util/install-info.c (strip_info_suffix, menu_item_equal): New fns.
+ (main): Call them instead of doing the filename test inline; all the
+ .info variations are too confusing to write out twice.
+
+Tue Jun 23 18:01:40 1998 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.txi: Fix some overfull boxes.
+
+Mon Jun 22 19:22:17 1998 Karl Berry <karl@north>
+
+ * configure.in: Remove AC_LINK_FILES call, that was an old gettext
+ thing, no longer necessary, and causes problems with Autoconf.
+
+Sun Jun 14 07:00:15 1998 Karl Berry <karl@cs.umb.edu>
+
+ * util/texi2dvi: Indent options so help2man will work. From Akim.
+
+Sat Jun 13 10:45:25 1998 Karl Berry <karl@cs.umb.edu>
+
+ * configure.in (ALL_LINGUAS): Add nl.
+
+ * util/texi2dvi: Avoid tabs.
+
+Wed Jun 10 17:38:21 1998 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (gen_defindex): Use xmalloc instead of alloca.
+ This was our only use of alloca, so also remove all the #if junk
+ at the beginning to define it.
+
+ * makeinfo/makeinfo.c: Fix grammar in multiply-defined-node error
+ message.
+
+Tue Jun 9 17:53:54 1998 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.txi: Document new commands @smallformat,
+ @smalldisplay.
+
+ * makeinfo/makeinfo.c: New commands @smalldisplay and @smallformat.
+ Suggestion from: Eli Zaretskii <eliz@is.elta.co.il>.
+
+ * makeinfo/makeinfo.h (insertion_type, insertion_type_names):
+ Declare smalldisplay and smallformat.
+
+Mon Jun 8 07:57:52 1998 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.txi: Document possibility of combining @titlefont
+ and @title. From Eli.
+
+ * util/texi2dvi: Set verbose to : instead of false by default.
+
+ * util/texi2dvi: Missing \\ for sed with -t text. From Akim.
+
+Sun Jun 7 13:02:13 1998 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.txi: Document @pagesizes and texidvi -t.
+
+ * makeinfo/makeinfo.c: Define no-op @pagesizes and @afourpaper.
+ (major_version, minor_version): Remove these globals, just use the
+ Texinfo package version.
+ (print_version_info): Ditto.
+
+Fri Jun 5 17:54:16 1998 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.txi: Change texi2dvi documentation a bit.
+
+ * util/texi2dvi: Handle --option=argument style of specifying
+ arguments.
+
+Sat May 30 14:01:37 1998 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.txi: More.
+
+ * util/install-info.c (open_possibly_compressed_file): Finish
+ implementation.
+
+ * doc/texinfo.txi: Document install-info compression support.
+
+Fri May 29 08:01:43 1998 Karl Berry <karl@cs.umb.edu>
+
+ * util/install-info.c (open_possibly_compressed_file): Initial
+ implementation.
+
+ * util/install-info.c (output_dirfile): Attempt to write dir.gz if
+ that's what we read.
+ (readfile): Pass back the actual opened filename, too.
+
+ * info/indices.c: Check in Eli's patch.
+
+Thu May 28 17:09:45 1998 Karl Berry <karl@cs.umb.edu>
+
+ * util/install-info.c (readfile): Set up to handle compressed
+ input (and output) files. Change callers.
+ Rearrange function order to avoid forward declarations.
+
+ * configure.in: Remove check for libz, we'll fork gzip instead.
+
+Tue May 26 18:01:13 1998 Karl Berry <karl@cs.umb.edu>
+
+ * util/install-info.c (print_help): Missing \n\ in help string.
+
+ * makeinfo/makeinfo.c (POST_SENTENCE): Rename from post_sentence.
+ Change calls.
+ (flush_output): Strip 8th bit if post_sentence char as well as space.
+ (cm_code, etc.): Change add_char calls for post_sentence chars to set
+ 8th bit.
+
+1998-05-23 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * info/indices.c (info_next_index_match): Call
+ info_set_node_of_window to display the node, so that footnotes are
+ displayed as well.
+
+Thu May 21 11:05:50 1998 Karl Berry <karl@cs.umb.edu>
+
+ * util/install-info.c (output_dirfile): New function, extracted
+ from the end of main.
+
+ * makeinfo/makeinfo.c (begin_insertion): Ignore @group in all the
+ example-like environments, not just @example. Otherwise the first
+ line in the environment is not indented correctly. Reported by rms.
+
+Wed May 20 17:44:38 1998 Karl Berry <karl@cs.umb.edu>
+
+ * util/install-info.c: Doc fixes.
+
+ * util/install-info.c: Handle XEmacs-style dir entries:
+ * FILENAME::PROGRAM DESCRIPTION.
+ Date: Wed, 13 May 1998 13:58:28 +0900
+ From: KIRIYAMA Kazuhiko <kiri@kiri.toba-cmt.ac.jp>
+
+ Also, do not set something_deleted on continuation lines; they are only
+ deleted if the entry was deleted.
+
+Tue May 19 17:22:50 1998 Karl Berry <karl@cs.umb.edu>
+
+ * util/install-info.c: Do not read the dir file if we are only
+ deleting -- it might not exist, and we don't actually need it.
+ From: David Kaelbling <drk@sgi.com>
+ Date: Tue, 12 May 1998 11:05:26 -0400
+
+ * util/gen-dir-node:
+ From: David Kaelbling <drk@sgi.com>
+ Date: Tue, 12 May 1998 16:05:16 -0400 -
+ - The "dir" moobler header is slightly different from the default
+ dir file.
+ - If all files in ${infofiles} appear in the skeleton the last one
+ is processed twice.
+ - INFO-DIR-SECTION data is ignored.
+ - Don't generate entries for directories.
+
+Sat May 16 17:16:56 1998 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (cm_novalidate): New fn for new command
+ @novalidate, like --no-validate.
+
+Thu May 14 18:02:31 1998 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.txi: Document the @novalidate command.
+
+Wed May 13 17:47:20 1998 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.txi: Document limitation on @set/@value names in
+ index commands.
+
+Fri May 1 14:12:15 1998 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.txi (Command List): @deftypevar out of order.
+
+ * configure.in (ALL_LINGUAS): Add cs.
+
+Tue Apr 28 09:33:41 1998 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (strcasecmp): This is in lib now.
+
+1998-04-26 Richard Stallman <rms@psilocin.gnu.org>
+
+ * util/install-info.c (print_help): Doc clarifications.
+
+Sun Apr 19 15:55:10 1998 Karl Berry <karl@cs.umb.edu>
+
+ * lib/system.h (strcasecmp, strncasecmp) [!HAVE_STR[N]CASECMP]:
+ Declare these.
+
+ * info/search.h (str[n]casecmp): Remove decl from here.
+
+ * configure.in (AC_REPLACE_FUNCS): Check for strcasecmp and
+ strncasecmp here.
+ (AC_CHECK_FUNCS): Instead of just strcasecmp here.
+
+ * configure.in (texconfig): Use TEXMFMAIN in preference to TEXMF
+ for post-0.4 teTeX.
+
+Wed Apr 15 17:20:31 1998 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.txi (Reporting Bugs): New section.
+ Suggestion from: Andrew Shapira <shapiraa@cs.rpi.edu>
+ Date: Mon, 4 Aug 1997 19:06:06 -0400 (EDT)
+
+ * info/infomap.c: Define / to be info_search.
+ Suggestion from: Egil Kvaleberg <egil@kvaleberg.no>
+ Date: Fri, 1 Aug 1997 08:16:45 +0200 (MET DST)
+
+ * doc/texinfo.txi (uref): Document reason for not using <URL: format.
+ Also use ftp.gnu.org instead of ftp.gnu.ai.mit.edu throughout.
+
+Tue Apr 14 10:43:39 1998 Karl Berry <karl@cs.umb.edu>
+
+ 1998-04-05 Karl Eichwalder <ke@suse.de>
+ * makeinfo/makeinfo.c (begin_insertion): No need to
+ gettext; it's a keyword. From carl-friedriech.spilcke-liss@ensae.fr.
+ (cm_printindex): ditto.
+
+ * util/texi2dvi: Always remove the $tmp_dir's.
+ From: Dean Gaudet <dgaudet@arctic.org>
+ Date: Tue, 14 Apr 1998 00:55:36 -0700 (PDT)
+
+Mon Apr 13 18:02:57 1998 Karl Berry <karl@cs.umb.edu>
+
+ * configure.in: Include
+ AM_SYS_POSIX_TERMIOS
+ AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL
+ to avoid window resizing being ignored under glibc2 systems,
+ e.g., Red Hat Linux 5.0. Actually any system where the ioctls are not
+ defined in <termios.h>.
+ See also http://www-gnats.gnu.org:8080/cgi-bin/wwwgnats.pl/full/206.
+ * acconfig.h (GWINSZ_IN_SYS_IOCTL): New #undef for autoheader.
+ * info/termdep.h [GWINSZ_IN_SYSIOCTL]: #include <sys/ioctl> if
+ this is defined.
+ From: Mark Jefferys <mjeffery@cse.ogi.edu>
+ Date: Thu, 9 Apr 1998 12:38:27 -0700 (PDT)
+
+Fri Apr 3 01:18:22 1998 Philippe De Muyter <phdm@macqel.be>
+
+ * info/info.c (main): Use 0, not NULL, as ? : alternative.
+
+Tue Mar 3 13:29:17 1998 Karl Berry <karl@cs.umb.edu>
+
+ * configure.in: Version 3.12.
+
+ * po/de.po: New version.
+
+ * po/POTFILES.in: Do not include doc.c; that gets built at
+ runtime, thus causing texinfo.pot to try to get rebuilt. Besides,
+ it doesn't have any translatable strings.
+
+Sun Mar 1 10:38:47 1998 Karl Berry <karl@cs.umb.edu>
+
+ * util/install-info.c: No need for i18n on version message. From
+ ke@suse.de.
+
+Fri Feb 27 16:06:23 1998 Karl Berry <karl@cs.umb.edu>
+
+ * configure.in: Run texconfig conf instead of confall.
+
+ * doc/Makefile.am (INSTALL_INFO): New variable.
+ (install-info-am): Use install-info from our distribution.
+
+ * info/info.c (info_minor_version): Increment.
+ * (info_patch_level),
+ * info/info.h (info_patch_level): Remove.
+
+ * info/info.c (program_name): Move decl.
+
+ * util/install-info.c (ensure_dirfile_exists): Use commas and \t
+ instead of an explicit tab, which make dist expands.
+
+ * doc/texinfo.txi: @prep.ai.mit.edu -> @gnu.org.
+
+ * info/info.c: Make help messages consistent with others.
+
+ * util/install-info.c (print_help): Format consistently.
+
+ (readfile): Support gzipped files via libz.
+ From: Elliot Lee <sopwith@redhat.com>
+ Date: Mon, 1 Sep 1997 23:37:14 -0400 (EDT)
+
+Thu Feb 26 16:13:14 1998 Karl Berry <karl@cs.umb.edu>
+
+ * info/echo-area.c: Whoops, _ might not start with parens.
+
+ * configure.in: Check for libz.
+ Do not output emacs/Makefile.
+
+ * Makefile.am (AUTOMAKE_OPTIONS): Set to 1.2f.
+
+ * util/texi2dvi: Always remove temporary directories. (From Akim.)
+ Formatting changes.
+
+Wed Feb 25 15:26:26 1998 Karl Berry <karl@cs.umb.edu>
+
+ * util/texi2dvi: New options --batch, --clean.
+ From: Akim Demaille <demaille@inf.enst.fr>
+ Date: 15 Aug 1997 18:05:33 +0200
+ * doc/texinfo.txi (Format with texi2dvi): Mention --help.
+
+ Applied this:
+1997-08-09 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * makeinfo/makeinfo.c (me_executing_string): New variable.
+ (me_execute_string): Use it instead of executing_string.
+ (popfile): Check for me_executing_string as well as
+ executing_string.
+ (get_until_in_line): Likewise.
+ (insert_and_underscore): Do not write any expansion output if
+ executing a string.
+ (cm_node, cm_include, index_add_arg, cm_footnote, execute_macro,
+ cm_macro, cm_unmacro): Likewise.
+ (cm_footnote): Include the footnote marker in the expansion
+ output.
+ (append_to_expansion_output): Do nothing if the input_text wasn't
+ a remembered text.
+ (defun_internal): Make the index entry even if expanding macros.
+ (expansion): Don't reset macro_expansion_output_stream around call
+ to execute_string.
+ (apply): Fix typo.
+
+Tue Feb 24 17:33:44 1998 Karl Berry <karl@cs.umb.edu>
+
+ 1997-11-10 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+ * makeinfo/makeinfo.c (get_until_in_line): Don't use xstrdup on
+ the unterminated input_text.
+
+ * makeinfo/makeinfo.c: Don't assume all \'s in macro bodies are
+ arguments.
+ From: Mathias.Herberts@irisa.fr (Mathias Herberts)
+ Date: Tue, 6 Jan 1998 18:54:26 +0100
+
+ * configure.in: Check for sigblock in libc before libbsd.
+ * From: hjl@lucon.org (H.J. Lu)
+ * Date: Fri, 23 Jan 1998 21:50:25 -0800 (PST)
+
+Mon Feb 23 16:26:31 1998 Karl Berry <karl@cs.umb.edu>
+
+ * info/window.c (character_width): If ISO_Latin_p is set, make
+ printable_limit 255, not 160. ISO Latin 1 uses
+ essentially all of the 256 characters.
+ Reported by: Marius Groeger <mag@sysgo.de>
+ Date: Wed, 17 Dec 1997 16:05:27 +0100
+
+ * info/info.c: Improve help message.
+
+Sun Feb 22 17:38:32 1998 Karl Berry <karl@cs.umb.edu>
+
+ * Makefile.am (SUBDIRS): Remove emacs; we'll just distribute the
+ Elisp files with Emacs.
+
+ * doc/Makefile.am (info_TEXINFOS, texinfo): Rename manual to
+ texinfo.txi to avoid DOS filename clash with texinfo.tex.
+
+ * info/tilde.c: Copy slightly updated alloca stuff from makeinfo.
+
+ * util/texindex.c (main): Declare as returning int to placate
+ warnings.
+
+ * info/Makefile.am: Uncomment BUILT_SOURCES stuff and add missing _.
+ From: "Joel N. Weber II" <devnull@gnu.org>
+ Date: Fri, 30 Jan 1998 17:21:38 -1000
+
+ * util/texindex.c,
+ * util/install-info.c,
+ * makeinfo/makeinfo.c,
+ * info/info.c: Change help address to @gnu.org.
+
+ 1998-01-22 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+ * makeinfo/makeinfo.c (usage): Fix order of arguments to help
+ format string.
+
+ * makeinfo/makeinfo.c (cm_top): Error message wording.
+
+ * doc/texinfo.texi (Functions in Typed Languages): Remove
+ duplicate description of @deftypemethod.
+ From: KHMarbaise@p69.ks.fido.de (Karl Heinz Marbaise)
+ Date: Wed, 07 Jan 1998 11:11:50 +0100
+
+ * info/session.c (info_get_input_char) [EINTR]: Keep reading if we
+ get EINTR.
+ From: Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+ Date: 22 Dec 1997 10:32:53 +0100
+
+Sat Feb 21 17:41:26 1998 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (find_and_load): Malloc enough room for the
+ null as well as the newline.
+ From: "John W. Eaton" <jwe@bevo.che.wisc.edu>
+ Date: Tue, 30 Sep 1997 21:12:01 -0500
+
+ * util/texindex.c (--version),
+ * makeinfo/makeinfo.c (cm_today),
+ * makeinfo/makeinfo.c (print_version_info): Version strings etc. do not
+ need translation.
+ From: Karl Eichwalder <ke@suse.de>
+ Date: 13 Sep 1997 16:20:02 +0200
+
+ * info/echo-area.c: Rewrite pluralization to be translatable.
+ From: Karl Eichwalder <ke@suse.de>
+ Date: 13 Sep 1997 16:20:02 +0200
+
+ * util/texindex.c,
+ * info/info.c,
+ * makeinfo/makeinfo.c,
+ * util/install-info.c: --version: Give year as argument to printf,
+ to reduce the number of translations needed.
+ From: Ulrich Drepper <drepper@ipd.info.uni-karlsruhe.de>
+ Date: 02 Sep 1997 18:01:26 +0200
+
+ * util/texindex.c: Remove the fnctl.h and sys/file.h conditional #includes, they are
+ already in lib/system.h.
+ From: "Philippe De Muyter" <phdm@macqel.be>
+ Date: Thu, 21 Aug 1997 20:16:49 +0200 (MET DST)
+
+ * info/terminal.c (terminal_begin_using_terminal,
+ terminal_end_using_terminal): #ifdef SIGWINCH settings for
+ m68k-motorola-sysv.
+ From: "Philippe De Muyter" <phdm@macqel.be>
+ Date: Thu, 21 Aug 1997 20:16:49 +0200 (MET DST)
+
+ * info/filesys.c (info_suffixes): Add /index as a possibility for
+ subdirectories.
+ From: Matthew Wilcox <willy@odie.barnet.ac.uk>
+ Date: Wed, 6 Aug 1997 15:55:16 +0100 (BST)
+
+ * configure.in: Redirect texconfig input from /dev/null to avoid
+ stoppage.
+ From: Thomas Esser <te@informatik.uni-hannover.de>
+ Date: Mon, 4 Aug 1997 18:15:49 +0200
+
+ * makeinfo/makeinfo.c (find_and_load): Null-terminate the input text.
+ From: Kenneth Stailey <kstailey@disclosure.com>.
+
+ * info/Makefile.am (INCLUDES): Add -I.. -I$(srcdir).
+
+Fri Aug 22 16:24:59 1997 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.texi: Adjust ISBN, edition number for print run.
+
+Mon Aug 4 16:12:42 1997 Karl Berry <karl@cs.umb.edu>
+
+ * info/info.c (main) [INFODIR]: Add this to infopath, if set.
+ * info/Makefile.am (DEFS): New define, include -DINFODIR.
+ From: Larry Schwimmer <rosebud@cyclone.Stanford.EDU>.
+
+ * util/install-info.c (ensure_dirfile_exists): Use tabs instead of
+ spaces on the File: dir line.
+ Bug from: Dave Love <d.love@dl.ac.uk>.
+
+Sat Aug 2 12:43:57 1997 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (cm_value, cm_email, cm_uref): Have to cast
+ from unsigned char * to char * or IRIX cc complains.
+ From: "Kaveh R. Ghazi" <ghazi@caip.rutgers.edu>.
+
+Fri Aug 1 14:05:10 1997 Karl Berry <karl@cs.umb.edu>
+
+ * Makefile.am (EXTRA_DIST): Remove README-alpha.
+ From: "ir. Mark M._Kettenis" <kettenis@phys.uva.nl>.
+
+1997-07-31 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * configure.in: Use AC_CHECK_HEADERS, not AC_CHECK_HEADER.
+
+Thu Jul 31 11:57:46 1997 Karl Berry <karl@cs.umb.edu>
+
+ * Version 3.11.
+
+ * info/man.c (reap_children): Declare status as int, not unsigned,
+ since that's what POSIX says the arg to wait should be.
+
+ * makeinfo/makeinfo.c (cm_uref, cm_email): Rewrite to do macro
+ expansion in the arguments.
+
+ * makeinfo/makeinfo.c (main): setlocale LC_MESSAGES and LC_TIME,
+ instead of LC_ALL.
+ From: Akim Demaille <demaille@inf.enst.fr>.
+
+ * makeinfo/makeinfo.c (cm_today): Let the %d %s %d be translated,
+ so other languages can change the order of day/month/year.
+ From: Akim Demaille <demaille@inf.enst.fr>.
+
+ * info/infomap.c: Doc fix.
+
+ * lib/system.h [!O_RDONLY]: Prefer <fcntl.h> to <sys/fcntl.h>.
+
+ * configure.in (AC_CHECK_HEADERS): Check for fcntl.h.
+
+ * doc/Makefile.am (install-data-local): Suggest tex/generic/dvips
+ for epsf.tex.
+ From: Tim Mooney <mooney@dogbert.cc.ndsu.NoDak.edu>.
+
+ * configure.in (TEXMF): Move check to block with other program
+ checks.
+
+Wed Jul 30 11:20:37 1997 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (defun_internal): Allow extra text after
+ most @def... commands, for tzname[2] in libc.texinfo.
+
+ * info/info.c: Include indices.h.
+ * configure.in (AC_CHECK_HEADERS): Test for sys/wait.h, info/man.c
+ uses it.
+ From: Erick Branderhorst <Erick.Branderhorst@asml.nl>.
+
+Tue Jul 29 15:55:19 1997 Karl Berry <karl@cs.umb.edu>
+
+ * configure.in: Version 3.9j.
+
+ * info/terminal.c (output_character_function): Return int (the
+ arg), not void.
+
+ * info/infomap.c: Don't define term_kP as 'v', since that's undefined.
+ From: Tom Hageman <tom@basil.icce.rug.nl>.
+
+ * makeinfo/makeinfo.c: Parameterize some messages to avoid
+ duplicate translations.
+
+ * info/terminal.c: Only try to declare ospeed, PC, tputs, etc. if
+ we don't have <ncurses.h/termcap.h> or <termcap.h>.
+
+ * makeinfo/makeinfo.c (cm_email): New function, like cm_uref.
+
+Sun Jul 27 17:09:20 1997 Karl Berry <karl@cs.umb.edu>
+
+ * configure.in: Only check for <ncurses/termcap.h> if we're using
+ -lncurses.
+ From: Bo Johansson <bo.johansson@mbox2.swipnet.se>.
+
+ * info/dir.c (new_dir_file_p): Avoid automatic struct
+ initialization, SunOS 4 etc. cc can't handle it.
+ From: "Kaveh R. Ghazi" <ghazi@caip.rutgers.edu>.
+
+Sat Jul 26 15:08:13 1997 Karl Berry <karl@cs.umb.edu>
+
+ * Version 3.9i.
+
+ * configure.in: Check for termcap.h and ncurses/termcap.h.
+ From: bo.johansson@mbox2.swipnet.se.
+
+Fri Jul 25 14:09:05 1997 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.texi: Document new second optional arg to email.
+
+ * info/infodoc.c: Document CTRL-x 0 as the way to get out of help.
+
+ * info/dir.c (maybe_build_dir_node): Really check for the same dir
+ file twice, not just by name.
+ (new_dir_file_p): New function.
+
+ * util/install-info.c: Tell them about --help in doc strings.
+
+Thu Jul 24 14:25:44 1997 Karl Berry <karl@cs.umb.edu>
+
+ * util/texindex.c (memory_error): Move to avoid incorrect implicit
+ decl.
+
+ * makeinfo/makeinfo.c,
+ * makeinfo/multi.c,
+ * util/install-info.c,
+ * util/texindex.c,
+ * info/tilde.c,
+ * info/man.c,
+ * info/gc.c,
+ * info/session.c (info_replace_key_to_typeahead): Remove unused
+ function,
+ * info/nodemenu.c,
+ * info/man.c,
+ * info/m-x.c,
+ * info/footnotes.c
+ * info/info.c
+ * info/indices.c,
+ * info/filesys.c: Parenthesize to avoid -Wall warnings
+ remove unused variables,
+ make return types explicit,
+ printf type corrections.
+
+ * lib/system.h: <ctype.h>: Include this.
+ * util/texindex.c,
+ * makeinfo/makeinfo.c,
+ * info/echo-area.c,
+ * info/display.c: ctype.h: Included in system.h now.
+
+ * info/echo-area.c: Parenthesize to avoid -Wall warnings.
+ (ctype.h): #include for isprint.
+ (echo_area_stack_depth): Remove unused function.
+ * info/display.c: Parenthesize to avoid -Wall warnings.
+ (ctype.h): #include for isprint.
+ * info/dir.c: Parenthesize to avoid -Wall warnings.
+ (build_dir_node_internal): Remove declaration of nonexistent function.
+ From: Erick Branderhorst <Erick.Branderhorst@asml.nl>.
+
+ * configure.in (TEXMF): Call texconfig to discover the default value,
+ for the sake of the warning in doc/Makefile.
+ From: Tim Mooney <mooney@dogbert.cc.ndsu.NoDak.edu>.
+
+ * doc/Makefile.am (TEXMF): New variable.
+ (install-data-local): Use it in warning.
+ From: Tim Mooney <mooney@dogbert.cc.ndsu.NoDak.edu>.
+
+ * info/session.c (initialize_info_session): Only call
+ terminal_prep_terminal if clear_screen is true. Otherwise, failed
+ --index-searches prep the terminal but do not unprep it.
+ From: William Edward Webber <wew@yallara.cs.rmit.EDU.AU>.
+
+ * info/nodemenu.c: Doc fix.
+
+Mon Jul 21 17:11:09 1997 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.texi: Comment out @smallbook and @set smallbook so
+ people at other sites can print it the way they want.
+ From: Thomas Walter <walter@pctc.chemie.uni-erlangen.de>
+
+Sun Jul 20 07:52:25 1997 Karl Berry <karl@cs.umb.edu>
+
+ * configure.in: 3.9h.
+
+ * doc/Makefile.am (install-info-am, distclean-aminfo): New targets
+ to avoid assuming info files are in srcdir.
+
+ * lib/system.h (xstrdup): Returns char *, not void *.
+
+ * doc/Makefile.am (.texi.info),
+ * doc/Makefile.am (texinfo): Don't run in $(srcdir).
+
+ * util/install-info.c (main): Remove unnecessary decl of strrchr.
+
+ * info/tilde.c: Include info.h (for config.h) before alloca stuff.
+
+ * makeinfo/makeinfo.c (validate_file): Rename `valid' to `valid_p'
+ to avoid conflict with SunOS 4 header files.
+ From: "Kaveh R. Ghazi" <ghazi@caip.rutgers.edu>.
+
+ * info/session.c (initialize_info_session): Call
+ terminal_prep_terminal here (before calling terminal_clear_screen).
+ (info_session): Instead of here.
+ From: William Edward Webber <wew@yallara.cs.rmit.EDU.AU>.
+
+ * Makefile.am (EXTRA_DIST): Add README-alpha.
+
+Sat Jul 19 13:50:27 1997 Karl Berry <karl@cs.umb.edu>
+
+ * info/terminal.c: Use `keypad transmit' sequence if it's defined:
+ (term_keypad_on, term_keypad_off): New statics.
+ (terminal_begin_using_terminal): If term_keypad_on, send it.
+ (terminal_end_using_terminal): If term_keypad_off, send it.
+ (terminal_initialize_terminal): Look up ks and ke termcap strings.
+ From: William Edward Webber <wew@yallara.cs.rmit.EDU.AU>.
+
+ * info/infomap.c (initialize_info_keymaps): Initialize hardwired
+ cases for arrow keys a la readline. Found by John Eaton,
+ jwe@bevo.che.wisc.edu.
+
+ * makeinfo/makeinfo.c (output_pending_notes): Remove footnote
+ macro expansion code I #if 0'd out some time ago. And doc fixes.
+
+ * Applied this patch:
+
+Sat Jul 19 16:29:01 1997 Karl Eichwalder <ke@suse.de>
+
+ * info/info.c (main): setlocale, bindtextdomain, and textdomain.
+
+Fri Jul 18 10:02:18 1997 Karl Berry <karl@cs.umb.edu>
+
+ * doc/Makefile.am (install-data-local),
+ * emacs/Makefile.am (install-data-local): Give subdir in warning.
+
+ * configure.in: Version 3.9f.
+
+ * doc/texinfo.texi: Correct \^ to @^.
+ From Andreas S.
+
+ * Merged these changes:
+
+1997-07-17 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * info/display.c (display_cursor_at_point): Flush ouput.
+
+1997-07-17 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * info/session.c (remember_window_and_node): Don't crash when the
+ current window has no current node.
+
+1997-07-17 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * util/texindex.c (usage): Translate the doc strings.
+ * makeinfo/makeinfo.c (cm_today): Translate the month names.
+ * info/variables.c (describe_variable): Translate the doc strings.
+ * info/nodes.h: Don't translate the strings defining the info format.
+
+1997-07-17 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * makeinfo/makeinfo.c (get_item_function): Remove superfluous call
+ to canon_white after get_rest_of_line.
+ (cm_end): Likewise.
+ (handle_variable): Likewise.
+ (cm_item): Likewise.
+ (cm_unmacro): Likewise.
+
+1997-07-17 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * info/nodemenu.c (list_visited_nodes): Don't clear the internal
+ flag, this and other functions depend on it. Don't insist on
+ displaying the menu below the current window.
+
+1997-07-17 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * makeinfo/makeinfo.c (cm_uref): Fix memory leaks.
+ (cm_inforef): Likewise. Handle empty cross reference name.
+
+1997-07-17 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * info/echo-area.c (ea_possible_completions): Check that the
+ current window can actually be split.
+
+Thu Jul 17 17:19:34 1997 Karl Berry <karl@cs.umb.edu>
+
+
+ * emacs/Makefile.am (*clean-lisp): Define, as Automake didn't.
+ From: Kenneth Stailey <kstailey@disclosure.com>.
+
+ * doc/Makefile.am: Do not distribute info.1.
+ * makeinfo/macros: Do not distribute this directory, it's merged
+ into the main documentation.
+ * doc/makeinfo.texi: Don't distribute this either, it's in the
+ main manual.
+
+ * util/install-info.c: Use \n\ for multiline string constant.
+ From: Tim Mooney <mooney@dogbert.cc.ndsu.NoDak.edu>.
+
+Wed Jul 16 15:29:50 1997 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.texi: @set must be after @setfilename, I guess.
+ Noted by Erick Branderhorst.
+
+ * Applied this change:
+
+Tue Nov 12 22:20:22 1996 John Eaton <jwe@bevo.che.wisc.edu>
+
+ * makeinfo.c (INDEX_ALIST): Use two indices, read_index and
+ write_index, instead of just one.
+ (find_index_offset): If a match is found, return index to the
+ current INDEX_ALIST struct, not the index pointing to the list of
+ index entries.
+ (translate_index): Return read_index from the matching
+ INDEX_ALIST.
+ (undefindex): Delete the list of index elements pointed to by
+ read_index from the INDEX_ALIST that matches name.
+ (defindex): Initialize read_index and write_index.
+ (index_add_arg): Add entries to the list pointed to by write_index
+ from the INDEX_ALIST matching name.
+ (index_append): Delete unused function.
+ (cm_synindex): Don't merge indcies, just make the write_index for
+ redirectee the same as the write_index for redirector.
+
+Tue Jul 15 09:32:04 1997 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.texi: Bump edition number for 2.24.
+
+ * util/Makefile.am (localedir): Define.
+
+ * info/window.h: Rename __window__ to window_struct.
+
+ * info/window.h,
+ * info/variables.h,
+ * info/search.h,
+ * info/man.h,
+ * info/info-utils.h,
+ * info/gc.h,
+ * info/footnotes.h,
+ * info/filesys.h,
+ * info/echo-area.h,
+ * info/display.h: Avoid leading _ in #define for #include protection.
+
+ * makeinfo/makeinfo.c: Version 1.68.
+ * info/info.c: Version 2.17.
+
+ * Most all files: Untabify.
+
+ * doc/Makefile.am (texinfo): Add explicit target.
+
+ * emacs/Makefile.am (noinst_LISP): Remove the obsolete
+ detexinfo.el (makeinfo --no-headers is better) and
+ texnfo-tex.el (now handled by TeX modes in general).
+
+Mon Jul 14 15:21:03 1997 Karl Berry <karl@cs.umb.edu>
+
+ * util/texi2dvi: Update RCS file from 3.9 distribution.
+
+ * util/Makefile.am (EXTRA_DIST): Add update-info, from
+ rhawes@dmapub.dma.org
+
+Sun Jul 13 17:05:03 1997 Karl Berry <karl@cs.umb.edu>
+
+ * info/signals.c: Use RETSIGTYPE instead of hardwiring void.
+ From: "Jeffery L. JT Vogt" <lfm@atw.earthreach.com>.
+
+ * info/session.c (info_history_node): Rewrite as
+ info_kill_node (current_node).
+ (kill_node, read_nodename_to_kill): New functions from info_kill_node.
+ (info_kill_node): Now this just calls them.
+
+Fri Jul 11 11:56:58 1997 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.texi: Fix `Conditionals' xref.
+
+Thu Jul 10 17:58:12 1997 Karl Berry <karl@cs.umb.edu>
+
+ * doc/info.texi: Don't say SPC clears ? screen.
+
+Sun Jul 6 16:26:41 1997 Karl Berry <karl@cs.umb.edu>
+
+ * doc/info-stnd.texi: Document --index-search.
+
+ * info/tilde.c,
+ * info/session.c: Remove redundant getenv decl.
+
+ * Installed following change:
+Tue Nov 12 14:44:00 1996 John W. Eaton <jwe@bevo.che.wisc.edu>
+
+ * info/info.c (main): Handle new option, --index-search STRING.
+ (index_search_p, index_search_string): New static variables, used
+ to handle --index-search option.
+
+ * info/session.c (initialize_info_session): New arg,
+ clear_screen. Change all callers.
+
+ * info/indices.h (do_info_index_search, index_intry_exists):
+ Provide declarations here.
+
+ * info/indices.c (do_info_index_search): New function, extracted
+ from info_index_search.
+ (info_index_search): Simply call do_info_index_search() with
+ search_string set to NULL.
+ (index_entry_exists): New function.
+
+Sat Jul 5 17:17:14 1997 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.texi: Document @kbdinputstyle.
+
+ * makeinfo/makeinfo.c (kbdinputstyle): New command.
+ (cm_no_op_line_arg): New function.
+
+ * info/termdep.h (HAVE_TERMIOS_H) [NeXT]: #undef.
+ From: Gregor Hoffleit <flight@mathi.uni-heidelberg.de> et al.
+
+Fri Jul 4 14:18:08 1997 Karl Berry <karl@cs.umb.edu>
+
+ * info/Makefile.am (EXTRA_DIST),
+ * util/Makefile.am (EXTRA_DIST),
+ * makeinfo/Makefile.am (EXTRA_DIST),
+ * lib/Makefile.am (EXTRA_DIST): Include README.
+
+ * doc/texinfo.texi (makeinfo options): Document --paragraph-indent
+ values more completely.
+ * makeinfo/makeinfo.c (set_paragraph_indent): Allow translated
+ asis or none, improve doc.
+ From ke.
+
+ * doc/Makefile.am (dist-info): New empty target so that we do not
+ distribute info files.
+ From Erick Branderhorst.
+
+ * doc/texinfo.texi (Invoking install-info): Document that the dir
+ file is created now if need be.
+ * Makefile.am (EXTRA_DIST): No longer need dir.
+ * util/install-info.c (ensure_dirfile_exists): New routine.
+ (main): Call it before trying to open dirfile for reading.
+
+ * doc/texinfo.texi: Document install-info --delete a little better.
+ * util/install-info.c: Set something_deleted when we delete a
+ normal line.
+ Bug from: Denis Kosygin <dkosygin@math.Princeton.EDU>.
+
+ * util/install-info.c: If no info dir entry, give warning and exit 0.
+
+Wed Jul 2 06:35:17 1997 Karl Berry <karl@cs.umb.edu>
+
+ * configure.in (ALL_LINGUAS): Add fr.
+
+ * makeinfo/makeinfo.h (insertion_type, insertion_type_names): Add
+ ifnot... entries. Alphabetize.
+
+Tue Jul 1 17:21:54 1997 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (sort_index): Set defining_line and
+ input_filename so errors in index entries are reported at
+ the correct location. From rms.
+
+ * makeinfo/makeinfo.c (cm_ifnothtml, etc.): Routines for new
+ commands.
+
+Sun Jun 29 09:44:01 1997 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.texi: Document new @ifnot... commands, etc.
+ * doc/texinfo.texi: Document @image, etc.
+
+Thu Jun 26 17:57:37 1997 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (cm_image): New routine for new command @image.
+ (cm_end): Move to better place, doesn't need its own page.
+ Doc fixes.
+
+Mon Jun 23 16:54:03 1997 Karl Berry <karl@cs.umb.edu>
+
+ * Makefile.am (SUBDIRS): Do intl first.
+
+ * doc/Makefile.am (EXTRA_DIST): Include epsf.tex.
+ (install-data-local): Suggest possible installation directory.
+ * epsf.tex: New file.
+
+Wed Jun 18 17:51:52 1997 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.texi: Document texinfo.cnf.
+
+Sun Jun 15 14:37:58 1997 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.texi (Command List): Various commands missing or
+ erroneous.
+ From: Karl_Heinz_Marbaise@p69.ks.fido.de.
+
+ * makeinfo/makeinfo.c: Oops, failed to break out of loop.
+
+ * util/texindex.c: Use <getopt.h> not "getopt.h".
+
+ * All source files: Merge gettext changes from Karl E.;
+ his ChangeLog entries below.
+
+Sat Jun 14 17:04:28 1997 Karl Berry <karl@cs.umb.edu>
+
+ * Makefile.am,
+ * makeinfo/Makefile.am: Doc fix.
+ * util/Makefile.am (EXTRA_DIST): Add texi2dvi. From Karl E.
+
+Fri Jun 13 17:39:34 1997 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c [WIN32]: Handle read bogosity and c:\
+ absolute paths.
+ From: Eric Hanchrow <erich@MICROSOFT.com>.
+
+ * configure.in (AC_CHECK_HEADERS): Check for pwd.h.
+ * info/tilde.c (pwd.h): Move #include to system.h.
+
+ * makeinfo/makeinfo.c (main): New option -P to prepend to search path.
+ From: Kenneth Stailey <kstailey@cvs.openbsd.org>.
+
+ * doc/texinfo.texi (Invoking makeinfo),
+ * doc/makeinfo.texi: Mention -P.
+
+Thu Jun 12 16:25:40 1997 Karl Berry <karl@cs.umb.edu>
+
+ * info/signals.h (SIGCHLD): #define as SIGCLD if undefined, for sysV68.
+ From: "Philippe De Muyter" <phdm%labauto1@ulb.ac.be>.
+
+ * util/install-info.c (O_RDONLY): Remove this stuff, it's in system.h.
+ (main): Handle existing entry in dir file having .info extension.
+ From: "Bradley C. Kuszmaul" <bradley@GRANITE.SYSTEMSX.CS.YALE.EDU>.
+
+ * makeinfo/makeinfo.c (get_char_len): Don't count 8-bit characters
+ as two chars in the output.
+ From: Sung-Hyun Nam <namsh@amuna.rms.lgic.co.kr>.
+
+Wed Jun 11 16:36:51 1997 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.texi (Other Info Directories): Document new trailing
+ : in INFOPATH feature.
+
+ * info/info.c (main): Have trailing : in INFOPATH expand to the
+ default path.
+
+Fri Jun 6 13:22:02 1997 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.texi (uref): New node for new command.
+
+Thu Jun 5 18:13:48 1997 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (cm_uref): New function to accept optional
+ second argument. Call it in command table.
+
+Sat Jun 14 10:54:16 1997 Karl Eichwalder <ke@suse.de>
+
+ * mkinstalldirs: Update from automake-1.1p.
+
+ * configure.in: Touch po/ChangeLog (gettext needs it).
+
+Thu Jun 12 08:37:52 1997 Karl Eichwalder <ke@ke.Central.DE>
+
+ * util/texindex.c: Include system.h, remove config.h.
+
+ * po/POTFILES.in: Fill it.
+
+ * makeinfo/multi.c: Include system.h.
+
+ * info/Makefile.am:
+ * makeinfo/Makefile.am:
+ * util/Makefile.am:
+ (localedir): Set.
+ (INCLUDES): Add intl/ and LOCALEDIR.
+ (LDADD): Add @INTLLIBS@.
+
+ * makeinfo/makeinfo.c (main):
+ * util/texindex.c (main):
+ * util/install-info.c (main):
+ setlocale, bindtextdomain, and textdomain.
+
+ * lib/system.h: Include locale.h and libintl.h.
+
+ * acconfig.h: Include libintl.h.
+ (_, N_): Define.
+ Add ENABLE_NLS, HAVE_CATGETS, HAVE_GETTEXT, HAVE_LC_MESSAGES,
+ HAVE_STPCPY for libintl.
+ Add @TOP@ and @BOTTOM@.
+
+ * configure.in (AM_GNU_GETTEXT): Add.
+ (AC_OUTPUT): Process Makefiles in intl/ and po/.
+ (ALL_LINGUAS): Available languages.
+
+ * Makefile.am (AUTOMAKE_OPTIONS): Now use 1.1p.
+
+Wed Jun 11 17:05:37 1997 Karl Eichwalder <ke@ke.Central.DE>
+
+ * Makefile.am (SUBDIRS): Add intl/ and po/ for NLS.
+
+ * run `gettextize -c' to get the i18n skeleton.
+
+Wed Jun 4 17:51:08 1997 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (uref): New command, another alias for @code
+ for now.
+
+Wed Jun 4 02:02:33 1997 Miles Bader <miles@gnu.ai.mit.edu>
+
+ * doc/texinfo.texi (email): { and } need @ escapes.
+
+Sun Jun 1 16:34:12 1997 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.texi (itemx): @itemx should always follow @item.
+
+ * makeinfo/makeinfo.c (cm_item): Insert blank line if two
+ consecutive @item's.
+ From: Karl Eichwalder <ke@ke.central.de>.
+ Also various doc fixes.
+
+Tue May 27 17:20:44 1997 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.texi (various): Document @deftypemethod.
+ (email): @ should have been @@ in the example.
+ From: Mate Wierdl <mw@wierdlmpc.msci.memphis.edu>
+
+Mon May 26 16:56:26 1997 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/multi.c (setup_multitable_parameters): Avoid use of %n
+ for sake of m68k-hp-bsd.
+ From: Derek L Davies <ddavies@world.std.com>.
+
+ * info/terminal.c (terminal_begin_using_terminal,
+ terminal_end_using_terminal): Call fflush and sleep to handle
+ cmdtool/shelltool with scrollbars. Also ignore
+ SIGWINCH so we do not prematurely exit. Move call.
+ (terminal_prep_terminal): Disable LNEXT (CTRL-V).
+ From: strube@physik3.gwdg.de (Hans Werner Strube).
+
+ * configure.in (AC_TYPE_SIGNAL): Check this.
+
+Sun May 25 16:49:58 1997 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (discard_insertions): Take arg saying
+ whether ifinfo/ifset/etc. are ok.
+ (convert_from_loaded_file): At `finished', call discard_insertions.
+ (handle_variable_internal): Complain if we reach eof before the
+ @end for a false condition.
+ From: HERBERT@boevm4.vnet.ibm.com.
+
+ * info/Makefile.am (ginfo_SOURCES): Add doc.h.
+ * lib/Makefile.am (libtxi_a_SOURCES): Add system.h.
+
+Sat May 24 18:08:27 1997 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c: Check that we have macro_expansion_filename
+ before using strcmp.
+
+Thu May 22 17:59:46 1997 Karl Berry <karl@cs.umb.edu>
+
+ * doc/makeinfo.texi: Minimally document --force.
+
+ * makeinfo/makeinfo.c (--force): New option.
+ (-E): Allow stdout via `-'.
+ (convert_from_loaded_file): Unlink output files if errors and !force.
+
+Tue May 20 17:48:42 1997 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c: Change all strdup calls to xstrdup.
+ (xmalloc, xrealloc, memory_error): Remove these functions, they're
+ in lib.
+ (set_paragraph_indent, cm_paragraph_indent): Move to misc page.
+ (cm_footnote): Expand macros in the arg for the macro expansion output.
+
+Fri May 16 17:26:59 1997 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (cm_macro): Allocate an empty body if the
+ macro was empty.
+ (cm_unmacro): Allocate one more byte for the null.
+ From: Robert Hoehne <robert.hoehne@Mathematik.TU-Chemnitz.DE>.
+
+Sun May 11 17:51:21 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * makeinfo/makeinfo.c (cm_printindex): Fix calculation of the
+ length of an index line.
+
+Sun May 11 14:47:42 1997 Tom Tromey <tromey@cygnus.com>
+
+ * makeinfo/makeinfo.c (main): Don't unconditionally run usage when
+ -e specified.
+
+Sun May 11 17:47:42 1997 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (init_indices): Free the source for an @synindex.
+ (undefindex): Do not go further if the target was already freed.
+ (free_index): Do not free the node names, as init_tags already did.
+ (cm_synindex, index_add_arg): Improve error message.
+ (program_index, function_index, etc.): Remove these unused #defines.
+
+Tue May 6 17:53:37 1997 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (init_internals): Do not free current_node,
+ it already is, at least when multiple input files are specified.
+ From: Karl Eichwalder <ke@ke.central.de>.
+
+Mon May 5 16:14:39 1997 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.texi: Mention both alignment and non-alignment of
+ continuation description lines in menus (Arnold).
+
+Sun Apr 27 16:12:44 1997 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (apply): Handle body being `\string'.
+ Also, avoid dereferencing a null pointer when a macro has no named
+ parameters.
+ From: Eli Zaretskii <eliz@is.elta.co.il>.
+
+ * makeinfo/makeinfo.c: Wording changes/fixes in warnings.
+
+ * info/session.c (info_get_input_char): Do not mix stdio with raw I/O.
+ From: Egil Kvaleberg <egilk@sn.no>.
+
+ From Tom Hageman <tom@basil.icce.rug.nl>. These changes make
+ arrow keys work:
+ * info/infomap.c: Add arrow key bindings.
+ (keymap_bind_keyseq): New support function.
+ (initialize_info_keymaps): Use it.
+ (term_ku,term_kd,term_kl,term_kr): Remove explicit declarations;
+ use #include "terminal.h" instead.
+ * info/session.c (initialize_info_session): Unbuffer stdin.
+ (info_get_another_input_char): Fix bug in `ready' logic.
+ * info/terminal.h,
+ * info/terminal.c (term_kP, term_kN): New variables to hold
+ PageUp, PageDown key sequences.
+ (terminal_initialize_terminal): Set them.
+
+ * util/texindex.c (main),
+ * util/install-info.c (main),
+ * makeinfo/makeinfo.c (print_version_info),
+ * info/info.c (main): Use PACKAGE and VERSION from Automake for
+ printing version number.
+
+Sat Apr 26 19:19:46 1997 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (get_until_in_line): Do not expand if
+ executing_string.
+ Also, free temporary strings.
+ Also, untabify entire file.
+
+ * doc/texinfo.texi: Many corrections from Arnold.
+
+Thu Apr 24 16:31:09 1997 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/multi.c (draw_horizontal_separator): Account for indent
+ here also. From Ulrich.
+
+Wed Apr 23 15:15:34 1997 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (cm_today): Use time_t instead of long;
+ everyone else does.
+ (LOCALTIME_CAST): Remove kludge, we'll always use time_t now.
+
+ * info/Makefile.am (ginfo_SOURCES): Remove general.h, that got
+ merged into system.h.
+
+Mon Apr 21 17:13:25 1997 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/multi.c (output_multitable_row): Account for
+ column_indent, both the global one and for each column.
+ (setup_multitable_parameters): Account for column_indent in the table
+ width in the columnfrac case, but don't bother with the template
+ case for now.
+
+Sun Apr 20 16:32:00 1997 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (output_stream): Remove redundant
+ definition; it's in makeinfo.h,
+ and a vaxstation-ultrix4.3 fails to link because of the two defns.
+ From: Anders Olofsson <anders@kid025.ericsson.se>.
+
+ * makeinfo/makeinfo.c (expansion): Inhibit appending to the macro
+ expansion stream.
+ (get_until_in_line): Possibly expand the text.
+ Change caller in get_node_token to do the expansion,
+ all other calls to remain the same.
+
+ * makeinfo/makeinfo.c (cm_node): No need to call strlen to check
+ for the empty string.
+
+ * doc/texinfo.texi: Restore missing @c for initial comment.
+
+Fri Apr 18 17:41:36 1997 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.texi: Mention that .info is unnecessary in the info
+ file name argument of an xref.
+
+ * doc/texinfo.texi: Mention texi2dvi -t instead of embedding
+ @smallbook or @afourpaper in the document source.
+
+Sun Apr 13 15:19:08 1997 Karl Berry <karl@cs.umb.edu>
+
+ * lib/system.h (_GNU_SOURCE): #define.
+
+Mon Apr 7 16:30:11 1997 Karl Berry <karl@cs.umb.edu>
+
+ * doc/info.texi,
+ * doc/info-stnd.texi,
+ * doc/texinfo.texi: Do not make (dir) the previous ptr from the top node,
+ and tell people not to do that in the manual.
+ From: rmedina@kanojo.ivic.ve (Rodrigo Medina),
+ confirmed by rms.
+
+Fri Apr 4 16:30:33 1997 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c: Move error page to top to avoid
+ prototypes, and do add prototypes for add_word_args and execute_string,
+ so we can use <stdarg.h>.
+
+ * info/makedoc.c,
+ * info/nodemenu.c: Use %ld instead of %d for file offsets.
+ * makeinfo/makeinfo.c (delete_macro): Decrement macro_list_len.
+ (get_macro_args): Decrement line number if see \n.
+ * utils/texindex.c (indexify): Use fputs instead of fprintf
+ for constant string.
+ From: Eli Zaretskii <eliz@is.elta.co.il>.
+
+Thu Apr 3 17:40:52 1997 Karl Berry <karl@cs.umb.edu>
+
+ * configure.in (AC_CHECK_HEADERS): No need to check for vararg.h
+ here, AC_FUNC_VPRINTF does it.
+ (AC_CHECK_FUNCS): Likewise for vsprintf and vfprintf.
+ * makeinfo/makeinfo.c (add_word_args, execute_string): Rewrite
+ like the error functions.
+
+Wed Apr 2 17:46:28 1997 Karl Berry <karl@cs.umb.edu>
+
+ * configure.in: Add AC_FUNC_VPRINTF.
+ * makeinfo/makeinfo.c (error, line_error, warning): Rewrite a la
+ error.c from the *utils to use <stdarg.h> if available.
+
+Tue Apr 1 11:48:40 1997 Karl Berry <karl@cs.umb.edu>
+
+ * doc/texinfo.texi: Tabs are a bad idea.
+
+ * doc/userdoc.texi,
+ * doc/info.texi: Untabify.
+
+Sun Mar 30 17:36:47 1997 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (end_of_sentence_p): New function.
+ (add_char): Call it, instead of simply sentence_ender.
+ (post_sentence): New macro.
+ Also, remove some #include's now in system.h.
+ * lib/system.h [VMS]: #include <perror.h>, from makeinfo.
+
+Thu Mar 27 17:41:03 1997 Karl Berry <karl@cs.umb.edu>
+
+ * info/search.c (skip_node_characters): Do not arbitrarily
+ strip trailing period from end of node name; this is valid.
+
+Mon Mar 24 16:44:42 1997 Karl Berry <karl@cs.umb.edu>
+
+ * configure.in (AC_OUTPUT): Don't need to create stamp-h here,
+ tromey says AM_CONFIG_HEADER will do it.
+
+ * info/Makefile.am, util/Makefile.am, makeinfo/Makefile.am (INCLUDES):
+ Don't need -I.. (for config.h) or -I$(srcdir), says tromey.
+ Automake includes those already.
+
+Fri Mar 14 15:05:17 1997 Karl Berry <karl@cs.umb.edu>
+
+ * info/Makefile.am: Build as ginfo, install as info,
+ to avoid conflict with the standard info target.
+
+ * lib/system.h: New file.
+ * makeinfo/makeinfo.c (strerror): Remove declaration,
+ include system.h, remove other redundant #if stuff.
+ * info/general.h: Include system.h instead of doing common stuff.
+ * util/install-info.c (my_strerror): Remove this, use strerror,
+ include system.h.
+
+ * info/terminal.c (terminal_prep_terminal): Only use OCRNL and
+ ONLCR if they are defined. Reported by many people.
+
+ * Installed:
+
+ Sun Dec 1 19:23:54 1996 Karl Eichwalder <ke@ke.Central.DE>
+
+ * configure.in (TERMLIBS): Add ncurses.
+
+Thu Mar 13 13:59:45 1997 Karl Berry <karl@cs.umb.edu>
+
+ * lib/Makefile.am (libtxi_a_SOURCES): Add xstrdup.c.
+ * info/*.c: Use xstrdup instead of strdup everywhere.
+
+ * info/tilde.c: Do not include clib.h, move stdlib.h include to
+ * info/general.h: here.
+
+ * configure.in (AC_CONFIG_HEADER): Use this,
+ to avoid hugely long compile line with all the -D's.
+ * info/general.h: Include <config.h>.
+
+ * emacs/Makefile.am (install, install-data): Do @echo
+ to tell the user to compile/install the elisp manually.
+
+ * configure.in (AC_REPLACE_FUNCS): Move strerror check to here.
+ (AC_CHECK_FUNCS): From here.
+
+ * lib/strerror.c: New file, from enscript (et al.) distribution.
+
+Tue Mar 11 16:36:25 1997 Karl Berry <karl@cs.umb.edu>
+
+ * info/Makefile.am (info_SOURCES): Add doc.c, dribble.c, infodoc.c.
+ (LDADD): Add @TERMLIBS@.
+
+ * info/info.h: HANDLE_MAN_PAGES, NAMED_FUNCTIONS: Define these.
+
+ * info/filesys.h: Spurious ! when DEFAULT_INFOPATH is not defined.
+
+ * configure.in (AC_OUTPUT): Do lib first and doc last.
+
+ * info/echo-area.c,
+ * info/echo-area.h,
+ * info/info.h: Rename echo_area to echo-area.
+
+Mon Mar 10 17:59:05 1997 Karl Berry <karl@cs.umb.edu>
+
+ * */Makefile.am: Write Makefile.am files for Automake.
+ * doc: New subdirectory, move all manuals and texinfo.tex there.
+ * AUTHORS, THANKS, config.guess, config.sub, mkinstalldirs: New files,
+ required by Automake.
+ * lib/xmalloc.c: Move from info/.
+
+Fri Oct 4 07:49:49 1996 Karl Berry <karl@cs.umb.edu>
+
+ * Version 3.9.
+
+ * Makefile.in (install): Say to install texinfo.tex manually.
+
+ * util/texi2dvi,
+ * util/texindex.c,
+ * makeinfo/makeinfo.c,
+ * info/info.c: Include only the current year in the copyright message.
+
+ * util/texi2dvi: Exit successfully.
+ From: Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>.
+
+Thu Oct 3 12:58:32 1996 Karl Berry <karl@cs.umb.edu>
+
+ * Rename install.sh to the preferred install-sh.
+
+ * Makefile.in (VERSION),
+ * util/texi2dvi,
+ * util/texindex.c,
+ * util/install-info.c,
+ * makeinfo/makeinfo.c (minor_version, print_version_info),
+ * info/info.c: Update version number.
+
+ * util/texi2dvi: Only show diff if verbose.
+
+ * util/install-info.c (main): Check for a missing dir file as well
+ as a missing info files.
+ (main): At start of a node, completely initialize the newly-malloced
+ node structure.
+
+ * texinfo.texi: Fix incorrect uses of @key,
+ insert missing newline in Installing Dir Entries' @menu item,
+ document install-info invocation.
+
+ * Makefile.in (DISTFILES): Do not put .gdbinit's in distribution.
+ (dist): Use || instead of && (and invert sense) so make doesn't think
+ the command failed.
+ (dist): Exclude more junk.
+
+ * makeinfo/makeinfo.c (cm_xref): Back out patch from Tom T., since
+ we generate a good-enough error message that is suppressible
+ without it.
+
+ * util/gen-dir-node: The recommended name for the top-level info
+ file is dir, not dir.info.
+
+ * util/install-info.c (main): At `Mark the end of the Top node',
+ make sure the node name is non-NULL before comparing it. From
+ lvirden@cas.org.
+
+ * configure.in (AC_REPLACE_FUNCS): Use this for memcpy, memmove,
+ and strdup.
+ (AC_CHECK_FUNCS): Instead of this.
+ Because both bcopy and memmove are missing on the 3b2, as reported by
+ Gaylen Miller <gaylen@proaxis.com>, hence we must provide our own.
+ * libtxi/Makefile.in (LIBOBJS): New variable.
+ (OBJS): Include it.
+ * libtxi/memcpy.c, libtxi/memmove.c, libtxi/strdup.c: New files,
+ taken from fileutils 3.13.
+ * makeinfo/makeinfo.c,
+ * info/clib.c (strdup): Move to libtxi.
+
+Wed Oct 2 18:23:30 1996 Karl Berry <karl@cs.umb.edu>
+
+ * info/info-utils.h (memcpy) [!HAVE_MEMCPY],
+ * info/termdep.h (memcpy) [!HAVE_MEMCPY],
+ * makeinfo/makeinfo.c (memmove) [!HAVE_MEMMOVE]: Remove this
+ #ifdef, as we now include it in libtxi if missing.
+
+Tue Oct 1 17:41:52 1996 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/Makefile.in (install),
+ * info/Makefile.in (install),
+ * Makefile.in (install): Use new option name --info-dir instead of
+ --infodir.
+
+ * makeinfo/multi.c (out_char): New fn. Replace all calls to
+ putc/fprintf with calls to this.
+
+ * util/install-info.c: Rename --infodir to info-dir.
+
+Mon Sep 30 10:07:21 1996 Karl Berry <karl@cs.umb.edu>
+
+ * Version 3.8.
+
+ * texinfo.tex: Untabify.
+
+ * texinfo.tex (\ptexl, \ptexL): Do not save, we have our own
+ commands now.
+ (\onepageout): Reformat for readability, and call \indexdummies
+ to avoid expansion of Texinfo commands (e.g., accents) in \write's.
+ (\,, \dotaccent, \ringaccent, \tieaccent, \ubaraccent, udotaccent,
+ \questiondown, \exclamdown, \dotless): New macros.
+ (\l): Let plain TeX definition remain, instead of switching
+ to ``lisp'' font.
+ (\multitable): Ensure space between the columns,
+ insert struts to make interline spacing constant,
+ use real strut instead of a box containing `Xy'.
+ (\indexdummies): Do not define \rm, \char, but
+ do define \@, \{, \}, \dotless, and \,. And \t should generate
+ \t, not \r.
+ (\indexnofonts): Define \, and \dotless as \indexdummyfont,
+ and let \@ be @.
+ (\doind): Reformat for readability, and use temp control sequence
+ names that actually make sense.
+ (\doublecolumnout, \pagesofar, \enddoublecolumns): Restore
+ Knuth's original code to avoid spurious overfull vbox messages.
+ (No boxes are actually overfull).
+ (\shortcontents): Do not allow hyphenations.
+ (\dochapentry, \tocentry): Make glue above and below flexible, to allow
+ better page breaks.
+ (\tex): Reset \, to its plain TeX meaning,
+ and do not reset \l.
+
+ * COPYING: Update for new FSF address (from gcc dist).
+
+ * libtxi/Makefile.in: Various simplifications.
+
+Sun Sep 29 12:58:44 1996 Karl Berry <karl@cs.umb.edu>
+
+ * util/texi2dvi: Use $progname instead of $0 for --version.
+
+ * util/install-info.c (xmalloc, xrealloc): Declare malloc and
+ realloc as returning void *,
+ to avoid ptr/int problems on Digital Unix.
+
+ * info/tilde.c (tilde_expand_word): Declare getenv as returning char *,
+ to avoid warning on Digital Unix.
+
+ * makeinfo/multi.c (multitable_active): Declare extern here to
+ avoid ld warning on rs6000.
+
+ * util/texindex.c (usage): Avoid ??' trigraph.
+
+ * util/install-info.c: Include <sys/fcntl.h> or <fnctl.h>,
+ according to HAVE_SYS_FCNTL_H,
+ and only include <sys/file.h> if HAVE_SYS_FILE_H.
+ (readlines): Oops, had NULL's and 0's reversed for ptr/int members.
+
+ * info/terminal.c (terminal_goto_xy): Remove spurious extra ;.
+
+ * util/install-info.c: Untabify. (input_sections): Initialize.
+ (find_lines): Initialize the terminating element of the array.
+ (print_help): Document --infodir.
+ (main): Compare the basename of infile sans .info to the dir entry,
+ not infile itself.
+ * util/Makefile.in (clean): Remove the install-info binary.
+
+ * info/Makefile.in (distclean): Remove *.info* files.
+
+ * Makefile.in (install),
+ * info/Makefile.in (install),
+ * makeinfo/Makefile.in (install): Use --infodir instead of --info-file.
+
+ * info/info.c,
+ * makeinfo/makeinfo.c: Avoid newlines in string constants for the
+ sake of SunOS cc.
+
+ * makeinfo/multi.c: Do not assume ANSI C.
+
+ * info/info.texi: Oops, need @end vtable for a @vtable.
+
+Sat Sep 28 16:31:28 1996 Karl Berry <karl@cs.umb.edu>
+
+ * Makefile.in (texinfo): Do not depend on sub-all, as then
+ makeinfo is always run. Instead, depend on texinfo.texi.
+
+ * makeinfo/Makefile.in (info, dvi): New targets.
+ makeinfo.info, makeinfo.dvi: Do not depend on macro.texi for now.
+
+ * info/Makefile.in (install): Must call install-info twice.
+
+ * info/info-stnd.texi,
+ * info/info.texi,
+ * makeinfo/makeinfo.texi: Include direntry.
+
+ * emacs/Makefile.in: Use && after cd, etc.
+
+ * texinfo.texi: Kludges so makeinfo -E will not create spurious
+ differences. Add new direntries.
+
+ * util/install-info.c,
+ * util/texindex.c,
+ * makeinfo/makeinfo.c,
+ * info/info.c: Standardize --version output.
+
+ * makeinfo/makeinfo.c (defun_internal): Don't insert index command
+ if expanding macros.
+ (cm_footnotestyle): Don't change the footnote style if it was set
+ on the command line.
+
+ * util/texi2dvi: Recompute original index files each time through loop.
+ Make indentation uniform.
+ Use same basename for the temp input files.
+ Standardize --version output.
+
+ * info/Makefile.in (install),
+ * makeinfo/Makefile.in (install): Insert $(POST_INSTALL).
+
+Fri Sep 27 13:27:30 1996 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.texi (Format with texi2dvi): Rewrite now that the script
+ runs in a loop.
+
+ * info/Makefile.in (MAKEINFO): Simplify to ../makeinfo/makeinfo.
+
+Fri Sep 27 00:26:03 1996 Miles Bader <miles@gnu.ai.mit.edu>
+
+ * info/terminal.c [HAVE_TERMIOS_H] (terminal_prep_terminal,
+ terminal_unprep_terminal): Add code for termios.
+ [HAVE_TERMIOS_H] (original_termios, ttybuff): New variables.
+ * info/termdep.h: [HAVE_TERMIOS_H]: Add include of <termios.h>.
+ * configure.in: Add check for <termios.h>.
+
+Thu Sep 26 10:46:34 1996 Karl Berry <karl@cs.umb.edu>
+
+ * emacs/texnfo-upd.el,
+ * emacs/texinfo.el,
+ * emacs/texinfmt.el: Update from bob for new Texinfo commands, etc.
+
+ * emacs/info.el, emacs/informat.el, emacs/makeinfo.el,
+ emacs/texnfo-tex.el: Update from Emacs 19.34 dist.
+
+ * emacs/elisp-comp: Use TMPDIR if set.
+
+ * util/Makefile.in (libdir): Remove.
+
+ * makeinfo/Makefile.in (install),
+ * Makefile.in (install),
+ * info/Makefile.in (install): Run install-info.
+ (libdir): Remove.
+
+ * texinfo.texi: Various fixes as I make this go through TeX.
+
+ * util/install-info.c: Quote newlines in help message.
+
+ * util/texi2dvi (texi2dvi): Run TeX until the aux/index files
+ stabilize, instead of just twice. From: David Shaw
+ <daves@gsms01.alcatel.com.au>.
+
+Tue Sep 24 14:43:03 1996 Karl Berry <karl@cs.umb.edu>
+
+ * dir: Blank dir file for installation on new systems.
+
+Mon Sep 23 12:18:43 1996 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (args_from_string): Do not back up at a };
+ that leads to an infinite loop.
+
+Sat Sep 21 17:48:04 1996 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (cm_xref): Do not seg fault if outside of
+ any node. From: Tom Tromey <tromey@creche.cygnus.com>.
+ (cm_ctrl): Make obsolete.
+
+Tue Sep 17 13:30:08 1996 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\inforef): Move to more appropriate place.
+ (\pounds): Remove spurious extra $.
+ (\email): Typeset argument in angle brackets.
+ (\macro): Use \doignore for robustness, instead of just letting TeX
+ parse the argument.
+ (\unmacro): Define.
+
+Sat Sep 14 16:17:35 1996 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.texi: Document multitables, new ISBN number.
+
+Wed Sep 11 18:01:24 1996 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/multi.c (struct env): Remove unused output_position
+ field; this needs to be global.
+ (setup_multitable_parameters): Implement template-defined multitables.
+ (output_multitable_row): Remove trailing whitespace.
+
+ * makeinfo/makeinfo.c (_READ_BUFFER_GROWTH, struct _defines):
+ Remove leading underscore for POSIX/ANSI pedants.
+ (init_conversion): Initialize output_position here.
+ (init_paragraph): Instead of here, where it loses with the
+ multitable calls, eventually resulting in negative counts to the
+ write call when the output file is split.
+
+ * texinfo.texi: First cut at macro documentation.
+ Change accent doc to use tables.
+ Remove whitespace experiments, they are now the default.
+
+Mon Sep 9 14:16:24 1996 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c: Use putc instead of fprintf where possible.
+ (cm_accent): Put _ from @ubaraccent after argument.
+
+ * util/texindex.c (strerror) [!strerror]: Conditionalize
+ declaration.
+
+Sat Sep 7 14:13:24 1996 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (commandTable): Obsolete @setchapterstyle.
+
+Thu Sep 5 15:45:11 1996 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (convert_from_loaded_file): Oops, fix
+ wording of initial output comment.
+
+ * makeinfo/makeinfo.c (cm_angle_brackets): Rename from cm_key.
+ (commandTable): @email should produce angle brackets.
+ @key: Change name.
+
+Tue Sep 3 14:52:17 1996 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\hsize): Decrease.
+ (\hoffset): Increase.
+ (\setleading): Decrease dramatically.
+ This change affects 8.5x11 format only.
+
+ * texinfo.texi: Document accent commands.
+
+Mon Sep 2 11:10:49 1996 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (commandTable): Deprecate @ichapter and
+ @titlespec.
+ Move all the deprecated @i<section> commands to the end of the list.
+
+ * texinfo.texi: Document @pounds{} and @centerchap{}.
+
+ * texinfo.tex (\centerchfplain): Rewrite to use \chfplain, and to
+ actually center.
+ (\unnchfplain): Just call \chfplain.
+ (\chfplain): Rewrite to be generally callable.
+ (\centerparametersmaybe): Hook, a no-op except with @centerchap.
+
+Sun Sep 1 15:01:49 1996 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.texi: Document @<whitespace>, rearrange spacing section.
+
+ * makeinfo.c (commandTable): Make @. @? @! insert themselves,
+ not be sentence-non-enders. They are sentence *enders*. Also,
+ make @\t and @\n insert a normal space character, not themselves.
+ Also, define @hyphenation.
+ (insert_space): New function.
+ (cm_ignore_sentence_ender): Remove this.
+ (flush_output): Check only for META-SPC, not META-<sentence-ender>.
+
+Fri Aug 30 18:55:30 1996 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.texi: Document @- and @hyphenation{}.
+ Miscellanous fixes.
+
+ * makeinfo/makeinfo.c (commandTable): Define @- as cm_no_op, since
+ makeinfo doesn't do hyphenation.
+
+Thu Aug 29 13:05:38 1996 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\key): Do not uppercase the argument; key names
+ can be mixed case, e.g., `Control'.
+
+ * makeinfo/makeinfo.c: @infotop, @infounnumbered,
+ @infounnumberedsec, @infounnumberedsubsec,
+ @infounnumberedsubsubsec, @infoappendix, @infoappendixsec,
+ @infoappendixsubsec, @infoappendixsubsubsec, @infochapter,
+ @infosection, @infosubsection, @infosubsubsection:
+ Remove these long-since obsolete commands.
+ @iappendix, @iappendixsection, @iappendixsec, @iappendixsubsec,
+ @iappendixsubsubsec, @ichapter, @isection, @isubsection,
+ @isubsubsection, @iunnumbered, @iunnumberedsec, @iunnumberedsubsec,
+ @iunnumberedsubsubsec:
+ Deprecate these.
+ @infoinclude:
+ Obsolete this.
+ @,: Have to take an argument, since have to do @,{c} not c@,; can't
+ feasibly implement the latter in TeX.
+
+ * makeinfo/makeinfo.c: Rename @d to @udotaccent, since this is
+ relatively infrequently used.
+
+Tue Aug 27 14:58:56 1996 Karl Berry <karl@cs.umb.edu>
+
+ * info/info.c (print_short_help),
+ * util/install-info.c (print_help),
+ * util/texi2dvi,
+ * makeinfo/makeinfo.c (usage) Include bug reporting address.
+
+Mon Aug 26 15:27:17 1996 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (commandTable): Remove @input, @medbreak,
+ @smallbreak, @overfullrule, @br.
+
+Sun Aug 25 17:25:48 1996 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (commandTable): Unify commands that perform
+ the same operation, such as cm_file, cm_samp, cm_email,
+ etc., which all do cm_code.
+
+ * texinfo.texi: Document @ifhtml ... @end ifhtml. Change
+ `PlainTeX' to `plain TeX'.
+
+Fri Aug 23 16:03:16 1996 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\pounds): New Texinfo command @pounds{}.
+ (\parskip): New smaller value.
+ (\chapheadingskip, \secheadingskip, \subsecheadingskip): New smaller
+ values, both for 8.5x11 and @smallbook formats. From Bob.
+
+ * makeinfo/makeinfo.c (cm_special_char): @pounds{} prints a #.
+ (commandTable): Add new command @pounds.
+
+Tue Aug 20 13:47:20 1996 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (CommandTable): Restore "!", accidentally
+ removed previously.
+
+ * texinfo.tex (\key): Typeset a lozenge around the argument (from
+ gildea@intouchsys.com).
+ * makeinfo/makeinfo.c (cm_key): Surround arg with <...> to match
+ new lozenge style in TeX.
+
+Wed Aug 14 16:59:23 1996 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.texi: Propagate change from rms.
+
+Tue Aug 13 11:33:27 1996 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.texi: Propagate change from rms.
+
+ * texinfo.texi: Document other @headings options.
+
+Sun Aug 11 13:19:42 1996 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (cm_accent, cm_special_char, cm_dotless):
+ New functions.
+ (CommandTable): Add new commands for all of plain.tex's
+ accents and non-English characters.
+
+Fri Aug 9 14:12:07 1996 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (convert_from_loaded_file): Say we're making
+ ``text'' file if no_headers. Also, use `input_filename' instead
+ of just `name' for clarity.
+ (suffixes): Check for no suffix last, i.e., prefer `foo.texi' as an
+ input file to `foo'. (The latter is probably a binary.)
+
+Mon Aug 5 13:52:39 1996 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\heading, \subheading, \subsubheading): Can no
+ longer call the nonexistent \*secheadingi series. Instead, call
+ \plain*secheading.
+ (\plainsubsecheading, \plainsubsubsecheading): New macros, by analogy
+ with \plainsecheading.
+ (\unnumberedsubseczzz, \unnumberedsubsubseczzz): Call them.
+
+Sun Aug 4 16:46:10 1996 Karl Berry <karl@cs.umb.edu>
+
+ * makeinfo/makeinfo.c (flush_output): Mask out eighth bit, that we
+ turned on in non-sentence enders.
+
+Sat Aug 3 14:03:10 1996 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\HEADINGSdouble, \HEADINGSsingle,
+ HEADINGSdoubleafter, \HEADINGSsingleafter, \CHAPPAGoff,
+ \CHAPPAGon, \CHAPPAGodd): Set \contentsalignmacro, analogous to
+ \pagealignmacro.
+ (\startcontents): Call \contentsalignmacro instead of \pagealignmacro.
+
+Mon Jul 29 14:44:33 1996 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\indexfonts): Make leading be 12pt. Otherwise, it's
+ too crammed.
+ (\smalllispx): Remove \setleading{10pt}. That was too small.
+ (\doprintindex): Do not call \tex ... \Etex. Index files are Texinfo
+ source, not TeX source, except for using \ instead of @ as the
+ escape character (for now).
+
+Sun Jul 28 13:37:05 1996 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (paragraphindent): Move to more reasonable place in
+ the source file.
+ (chapfonts, secfonts, subsecfonts, indexfonts): Call \setleading.
+ (\chfplain, \secheading, \plainsecheading, \subsecheading,
+ \subsubheading): Rewrite to properly \hangindent the title.
+ (\sectionheading): New generic macro to print section titles.
+
+ * texinfo.texi: Update the `Obtaining TeX' node.
+
+Fri Jul 26 14:11:48 1996 Karl Berry <karl@cs.umb.edu>
+
+ * util/texi2dvi: Do macro expansion with makeinfo before running TeX.
+ Various expansion safety measures added for test; avoid use of -o.
+
+ * makeinfo/makeinfo.c (usage): More usage message tweaks.
+
+Fri Jul 26 11:55:37 1996 Karl Berry <karl@laurie>
+
+ * util/texi2dvi: Format usage message to conform to the other *utils.
+
+Thu Jul 25 17:05:47 1996 Karl Berry <karl@cs.umb.edu>
+
+ * emacs/Makefile.in: Do not compile the Elisp by default. We
+ don't install it, so it confuses people to compile it.
+
+Sun Jul 21 07:20:09 1996 Karl Berry <karl@cs.umb.edu>
+
+ * util/Makefile.in (install-info): Dependency should be
+ install-info.o, not install-info. Also, update copyright years.
+
+ * makeinfo/makeinfo.c (cm_printindex): Don't call execute_string
+ to print index entries, we've already done the expansion now.
+
+ * makeinfo/makeinfo.h: Add copyright. Finish merge of rms changes.
+ * makeinfo/makeinfo.c: Finish merge, add my expansion changes again.
+ * makeinfo/multi.c: Add copyright message.
+
+Fri Jul 19 10:35:22 1996 Karl Berry <karl@cs.umb.edu>
+
+ * info/info.c: Update copyright date.
+
+ * info/info.texi,
+ * util/install-info.c,
+ * emacs/Makefile.in,
+ * emacs/texnfo-tex.el,
+ * emacs/Makefile.in: Change FSF address.
+
+ * Merged changes from bfox -- below, plus multitable changes, plus
+ lots more.
+
+ Sun Apr 14 08:49:50 1996 Brian J. Fox <bfox@nirvana.samsara.com>
+
+ * makeinfo/makeinfo.c (remember_node_reference): Numerous commands
+ call remember_node_reference. If a node has not yet been defined,
+ use the empty string as the current node for those cases.
+
+ Mon Feb 12 17:35:38 1996 Brian J. Fox <bfox@nirvana.samsara.com>
+
+ * makeinfo/makeinfo.c (push_node_filename): Clean up calls to
+ xmalloc and xrealloc. Only have to call xrealloc.
+
+ Fri Jan 26 08:00:38 1996 Brian J. Fox <bfox@nirvana.samsara.com>
+
+ * info/session.c (info_input_buffer_space_available): Fix typo
+ which forced the limitation of the sizeof (int) instead of sizeof
+ (buffer).
+
+ * Makefile.in (PACKVER): now at 3.8. Add TERMIOS support to
+ Info. Minor bugs fixed in Makeinfo.
+
+Sat Jul 13 11:58:57 1996 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.texi (ftable vtable): Mention example.
+
+Sun Jun 30 14:59:51 1996 Karl Berry <karl@goldman.gnu.ai.mit.edu>
+
+ * makeinfo/makeinfo.c (cm_email): New function for new @email command.
+ * texinfo.texi (email): New node documenting it.
+
+Wed Apr 17 18:07:34 1996 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * makeinfo/makeinfo.c (cm_kbd): Do nothing if in @example or @code.
+ (struct brace_element): New field in_fixed_with_font.
+ (remember_brace_1): Save in_fixed_with_font.
+ (pop_and_call_brace): Restore in_fixed_with_font.
+ (cm_code): Don't decrement in_fixed_with_font at end of construct.
+ (struct istack_elt): New field in_fixed_with_font.
+ (push_insertion, pop_insertion): Save and restore in_fixed_with_font.
+ (end_insertion): Don't decrement in_fixed_with_font here.
+ (not_fixed_width): New function.
+ (cm_sc, cm_var, cm_italic, cm_roman, cm_titlefont):
+ Use not_fixed_width.
+
+Sat Apr 13 23:22:05 1996 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * util/install-info.c (main): Fatal error if no input file spec'd.
+ Look for START-INFO-DIR-ENTRY, not BEGIN-INFO-DIR-ENTRY.
+
+Thu Apr 11 18:21:50 1996 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * makeinfo/makeinfo.c (cm_enddots): New function.
+ (self_delimiting): Accept -, ^ and ".
+ (CommandTable): Add commands -, ^, ", enddots, centerchap.
+
+Sun Mar 24 12:18:32 1996 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * makeinfo/makeinfo.c (enum insertion_type): Add `direntry'.
+ (insertion_type_names): Add "direntry".
+ (cm_dircategory): New function.
+ (cm_direntry): New function.
+ (CommandTable): Add "dircategory" and "direntry".
+ (insert_string): New function.
+ (end_insertion): Handle direntry.
+ (begin_insertion): Handle direntry.
+
+Sun Mar 24 11:10:05 1996 Karl Berry <karl@spiff.gnu.ai.mit.edu>
+
+ * makeinfo/makeinfo.c (cm_url): New function for new @url command.
+
+Fri Feb 23 21:14:40 1996 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * info/Makefile.in (install, uninstall): Use manprefix.
+
+Fri Feb 23 19:50:18 1996 Richard Stallman <rms@whiz-bang.gnu.ai.mit.edu>
+
+ * util/Makefile.in (install-info, install-info.o): New targets.
+ (all): Depend on install-info.
+ (install, uninstall): Operate on install-info.
+
+ * install-info.c: New file.
+
+Wed Jan 3 10:01:45 1996 Brian J. Fox <bfox@nirvana.datawave.net>
+
+ * makeinfo/makeinfo.c (make_index_entries_unique): Be a little bit
+ stricter about what makes two index entries identical.
+
+Fri Dec 29 13:00:24 1995 Brian J. Fox <bfox@wizard.datawave.net>
+
+ * makeinfo/makeinfo.c (Whole File): Add @detailmenu for allowing
+ detailed menu listings to appear while still defaulting nodes.
+
+Wed Dec 27 13:54:30 1995 Brian Fox <bfox@albert.gnu.ai.mit.edu>
+
+ * makeinfo/makeinfo.c (cm_code): Always notice that we are in
+ fixed_width_font, even if other formatting changes are not to take
+ place.
+
+Sat Dec 23 11:48:43 1995 Brian J. Fox <bfox@wizard.datawave.net>
+
+ * info/man.c: (clean_manpage) Remove ^L's from page.
+
+ * makeinfo/makeinfo.c (get_brace_args): Change some memcpy's to
+ memmoves.
+
+ * info/info.c (main): Prefer caseless matches over partial
+ matches.
+
+ * Makefile.in (All Subdir Targets): Change suggested by Debian
+ people which allows errors in recursive makes to kill the
+ top-level make.
+
+ * makeinfo/Makefile.in (makeinfo.dvi): New target.
+
+ * info/info.c (main): Print version of containing texinfo package.
+
+ * makeinfo/makeinfo.c (flush_output): Don't strip high-bit from
+ sentence_enders.
+ Print the version number of the containing texinfo package.
+
+ * info/man.c (locate_manpage_xref): Count the 0th entry.
+
+ * makeinfo/makeinfo.c (cm_menu): If a menu is seen before a node
+ has been defined, warn, and create the node `Top'.
+
+Wed Jun 21 03:19:39 1995 Brian Fox <bfox@albert.gnu.ai.mit.edu>
+
+ * makeinfo/makeinfo.c (cm_infoinclude): Clean up after printing
+ error if the file couldn't be included.
+ (discard_braces): Print errors only for those unmatched open
+ braces that belong to a texinfo command.
+
+ * */Makefile.in: Use @CFLAGS@ and @LDFLAGS@.
+
+ * makeinfo/makeinfo.c: End `node_search_string' and friends with a
+ terminating null character.
+
+Wed Jun 21 01:23:49 1995 Jim Meyering (meyering@comco.com)
+
+ * makeinfo/makeinfo.c: Close comment after #endif.
+
+Tue Jun 20 04:58:26 1995 Brian Fox <bfox@albert.gnu.ai.mit.edu>
+
+ * emacs/Makefile.in (install): Fix typo: "fle" -> "file".
+
+ * Makefile.in (VERSION): Bump to 3.6
+
+ * info/clib.c: Include general.h for `info_toupper' and friends.
+
+ * info/clib.h: strncmp and strncascmp return an int. What kind of
+ drugs was I on?
+
+Mon Jun 19 23:34:47 1995 Brian Fox <bfox@albert.gnu.ai.mit.edu>
+
+ * makeinfo/makeinfo.c (make_index_entries_unique): Copy the last
+ index entry.
+
+Mon Jun 19 21:55:49 1995 Noah Friedman <friedman@prep.ai.mit.edu>
+
+ * util/texi2dvi (--version): New option.
+ Cosmetic changes.
+
+Mon Jun 19 16:06:40 1995 Brian Fox <bfox@albert.gnu.ai.mit.edu>
+
+ * makeinfo/makeinfo.c (cm_macro): Fix typo. `x != y' is not the
+ same as `x |= y'.
+
+ * info/Makefile.in (exec_prefix): Use @exec_prefix@ not $(prefix).
+ * makeinfo/Makefile.in (exec_prefix): Use @exec_prefix@ not $(prefix).
+ * util/Makefile.in (exec_prefix): Use @exec_prefix@ not $(prefix).
+ * libtxi/Makefile.in (exec_prefix): Use @exec_prefix@ not $(prefix).
+
+ * emacs/Makefile.in (uninstall): New target.
+ (install): Use the definition of $(lispdir), don't dynamically
+ find it. Use INSTALL_DATA not cp.
+ (exec_prefix): use @exec_prefix@ not $(prefix).
+
+ * makeinfo/makeinfo.c (apply): If there isn't an actual argument
+ for a named argument, default it to "".
+
+ * Makefile.in (VERSION): Now at 3.5.
+ (texinfo): Make ./makeinfo/makeinfo depend on sub-all for parallel
+ makes.
+
+ * emacs/Makefile.in (ELISP_OBJS): Explictly declare .el and .elc
+ in the SUFFIXES list.
+
+ * makeinfo/makeinfo.c (cm_today): Special case for losing alpha.
+ * (minor_version): Increase to 63.
+
+ * info/info.c (version_string): Now at 2.14.
+ * info/tilde.c: Declare getenv to return (char *).
+ * info/window.c (build_message_buffer): Jump through hoops to keep
+ DEC Alpha's happy.
+
+ * info/xmalloc.c: Declare malloc and realloc as (void *) returning
+ functions.
+
+Sun Jun 18 12:47:21 1995 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * emacs/detexinfo.el (detexinfo-line-cmds-without-arg):
+ Handle ifhtml.
+
+Fri Jun 16 13:48:14 1995 Brian Fox <bfox@albert.gnu.ai.mit.edu>
+
+ * util/texindex.c: Update TEXINDEX_VERSION_STRING for texinfo 3.4
+
+ * (All *.c *.h *.in): Change FSF old address to new.
+ * texinfo.texi (Obtaining TeX): Change FSF old address to new
+ address. Change Old phone numbers to new phone numbers.
+
+ * Makefile.in (VERSION): Change to 3.4.
+
+Thu Jun 15 22:49:07 1995 Robert J. Chassell <bob@hill.gnu.ai.mit.edu>
+
+ * texinfo.texi, emacs/=development/cover.texi: update
+ Texinfo distribution package version number
+
+Thu Jun 15 09:23:02 1995 Brian J. Fox <bfox@wizard.datawave.net>
+
+ * info/info.c: (minor_version): Set to 13.
+
+ * info/clib.c,h: New files gather together replacement functions
+ for those POSIX-style C library functions that are not present on
+ the target system.
+
+ * info/Makefile.in (SRCS): Add clib.c and clib.h. makedoc now
+ needs clib.o to build on systems missing various string.h stuff.
+
+ * info/variables.c (whole file): Call strdup, not savestring.
+ * info/tilde.c (whole file): Call strdup, not savestring.
+ * info/search.c (whole file): Call strdup, not savestring.
+ * info/nodes.c (whole file): Call strdup, not savestring.
+ * info/nodemenu.c (whole file): Call strdup, not savestring.
+ * info/man.c (whole file): Call strdup, not savestring.
+ * info/makedoc.c (whole file): Call strdup, not savestring.
+ * info/m-x.c (whole file): Call strdup, not savestring.
+ * info/info.c (whole file): Call strdup, not savestring.
+ * info/indices.c (whole file): Call strdup, not savestring.
+ * info/echo_area.c (whole file): Call strdup, not savestring.
+ * info/session.c (whole file): Call strdup, not savestring.
+ * info/filesys.c (whole file): Call strdup, not savestring.
+
+ * makeinfo/makeinfo.c (minor_version): Change to 1.62.
+ * makeinfo/makeinfo.c (get_execution_string): Initialize `i' to 0
+ in case there are no execution_strings.
+
+Wed Jun 14 17:48:06 1995 Brian J. Fox <bfox@wizard.datawave.net>
+
+ * texinfo.texi: include "texinfo.tex", not "texinfo".
+ * info/session.c (forget_window_and_nodes): Place a sequence point
+ in between "info_windows[i] = info_windows[++i];" as per various
+ compiler experts.
+
+ * makeinfo/makeinfo.c (strdup): Create this function if the system
+ doesn't have it.
+ (discard_insertions): Use the insertion's filename, not the
+ current input file.
+ (push_insertion): Remember the current input file with each
+ insertion.
+ (pop_insertion): Free storage used by remembered input file.
+
+ * makeinfo/makeinfo.c (whole file): Use `strdup' instead of
+ `savestring'.
+ * configure.in: Check for `strdup'.
+
+Wed Jun 14 15:58:51 1995 Brian Fox <bfox@albert.gnu.ai.mit.edu>
+
+ * libtxi/Makefile.in (prefix): Use @prefix@, not /usr/local/
+
+Wed Jun 14 10:50:57 1995 Brian J. Fox <bfox@wizard.datawave.net>
+
+ * Makefile.in (DISTFILES): Don't include *.elc files in the list
+ of files to distribute.
+ (installdirs): Include `emacs' in the list of sub-dirs with
+ Makefile.in's.
+
+ * emacs/elisp-comp: Shell script which batch compiles the *.el files.
+ * emacs/Makefile.in: New file contains targets to build the elc files.
+ * configure.in: Add `emacs/Makefile' to the list of created makefiles.
+ * makeinfo/makeinfo.c (whole file): Give every function a return
+ type. All cm_xxx functions are now void. Add declarations for
+ functions to top of file.
+
+Mon Jun 12 12:00:57 1995 Brian J. Fox <bfox@wizard.datawave.net>
+
+ * info/man.c (reference_section_starters): Add versions of "SEE
+ ALSO" and "RELATED INFORMATION" with tabs instead of spaces as
+ well.
+
+ * util/texindex.c: Back out changes for OFF_T. Explicity coerce
+ the result of lseek to a long, and use longs everywhere.
+
+ * texinfo.texi: Change "@end shorttitlepage" to "@end titlepage".
+ * makeinfo/makeinfo.c: Make @shorttitlepage ignore the rest of the
+ line.
+
+ * util/texindex.c (strrchr): Create if not present.
+ Test for HAVE_STRCHR and HAVE_STRING_H.
+ (main): Make PROGRAM_NAME be just the last path componenet of argv[0].
+ (decode_command): Rewrite.
+ (usage): Rewrite. Now texindex handles --version.
+
+ * makeinfo/makeinfo.c (make_index_entries_unique): Rewrite from
+ scratch.
+
+ * Don't distribute created info files with texinfo. After all,
+ the user will have the tools necessary to create them, yes?
+
+ * Makefile.in (distclean): Remove *.log
+
+ * info/man.c (read_from_fd): Change timeout value for select to 15
+ seconds. Some systems (e.g., albert.ai.mit.edu) actually need
+ more than 10 seconds to format a man page.
+
+ * info/tilde.c: Fix typo in declaration for
+ `tilde_expansion_failure_hook'.
+
+Wed Jun 7 13:36:53 1995 Brian Fox <bfox@albert.gnu.ai.mit.edu>
+
+ * info/tilde.h: Change type of tilde_expansion_failure_hook to
+ a pointer to a function returning a (char *).
+ * info/tilde.c: Change type of tilde_expansion_failure_hook to a
+ pointer to function returning a (char *).
+
+ * makeinfo/makeinfo.c (get_execution_string): Don't use `i' in the
+ latter assignment, use `execution_strings_index' instead.
+
+ * info/man.c (read_from_fd): Change logic to avoid using FIONREAD.
+
+ * info/xmalloc.c (xrealloc): Use (void *), not (caddr_t *).
+ * info/xmalloc.c (xmalloc): Use (void *), not (caddr_t *).
+
+ * Makefile.in (DISTFILES): Don't find RCS no "=" directories.
+
+ * util/Makefile.in (prefix): Use @prefix@ as the value.
+ * info/Makefile.in (prefix): Use @prefix@ as the value.
+ * makeinfo/Makefile.in (prefix): Use @prefix@ as the value.
+
+Wed Jun 7 12:29:28 1995 Robert J. Chassell <bob@hill.gnu.ai.mit.edu>
+
+ * texinfo.texi: Correct minor typos.
+
+ * emacs/texinfmt.el: Don't require @shorttitlepage to be inside
+ of @iftex ... @end iftex
+
+Mon May 8 18:33:52 1995 Brian J. Fox <bfox@wizard.datawave.net>
+
+ * info/nodes.c: #include "man.h" if HANDLE_MAN_PAGES.
+ (info_get_node_of_file_buffer): If the file buffer is one
+ associated with manpages, call the manpage node finding
+ function instead.
+ (info_find_file_internal): If the file buffer is one associated
+ with manpages, avoid doing any file I/O.
+ (info_reload_file_buffer_contents): Ditto.
+ (info_find_file_internal): Call create_manpage_file_buffer instead
+ of info_load_file_internal.
+
+ * info/info.c: #include "man.h" if HANDLE_MAN_PAGES.
+ (main): If the initial node cannot be found, perhaps find it as a
+ manpage.
+ * info/info-utils.c: #include "man.h" if HANDLE_MAN_PAGES.
+ (info_xrefs_of_node): If handling man pages, and this is a manpage
+ node, use xrefs_of_manpage.
+
+ * info/session.c (info_set_input_from_file): Only fclose (stream)
+ if it is non-null and not stdin.
+ #include "man.h" if HANDLE_MAN_PAGES.
+ (info_menu_or_ref_item): If handling man pages, and this is a
+ manpage node, get the xrefs from manpage_xrefs_in_binding.
+ (info_man): Compile in for M-x man if handling man pages.
+ (info_move_to_xref): If handling man pages, and the current node
+ is a manpage node, use locate_manpage_xref to get xrefs.
+
+Thu May 4 08:55:23 1995 Brian J. Fox <bfox@wizard.datawave.net>
+
+ * info/info.c (main): If the output device is not a terminal, and
+ no output filename has been specified, make user_output_filename
+ be "-", so that the info is written to stdout, and turn on the
+ dumping of subnodes.
+
+Thu Apr 13 18:05:06 1995 Daniel Hagerty <hag@churchy.gnu.ai.mit.edu>
+
+ * texinfo.texi: Fixed @end titlepage/@end shorttitlepage
+
+Sat Apr 8 12:51:49 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * makeinfo/makeinfo.c [! HAVE_STRERROR] (strerror): New function,
+ snarfed from ../info/filesys.c.
+ (cm_infoinclude): Use strerror instead of sys_errlist.
+
+Tue Apr 4 18:44:00 1995 Brian J. Fox <bfox@wizard.datawave.net>
+
+ * util/texindex.c (sort_offline): Change TOTAL to be an off_t.
+ * util/texindex.c (sort_in_core): Change TOTAL to be an off_t.
+ * util/texindex.c (MAX_IN_CORE_SORT): Cast to off_t.
+
+Sun Apr 2 16:20:13 1995 Brian J. Fox <bfox@wizard.datawave.net>
+
+ * info/Makefile.in: Define DEFAULT_INFOPATH in case we are
+ compiling in the current directory.
+ * info/Makefile.in (info.o): Add filesys.h because of DEFAULT_INFOPATH.
+ * info/(search.c,h, nodes.c info-utils.c) Use strcasecmp and
+ strncasecmp instead of stricmp and strnicmp. Define strcasecmp
+ and strncasecmp in search.c if !HAVE_STRCASECMP.
+ * info/search.c: If HAVE_STRING_H include it.
+ * info/nodes.c: If HAVE_STRING_H include it.
+ * info/info-utils.c: If HAVE_STRING_H include it.
+ * info/info.h: If HAVE_STRING_H include it.
+ * configure.in (AC_HAVE_FUNCS): Check for strcasecmp.
+ * makeinfo/makeinfo.c (strcasecmp): Define if !HAVE_STRCASECMP.
+ * makeinfo/makeinfo.c (entire file): Use `strcasecmp' instead of
+ `stricmp'.
+ * makeinfo/makeinfo.c (cm_ifeq): New command takes three args.
+ Compares first two, executes remainder if the first two are
+ string-wise eq.
+ * makeinfo/makeinfo.c (ifhtml): Add to command list. Shouldn't be
+ used, but it is by people who don't want to hack macros.
+
+Sat Apr 1 09:20:14 1995 Brian J. Fox <bfox@wizard.datawave.net>
+
+ * makeinfo/makeinfo.c (begin_insertion): Fix reversed arguments to
+ line_error.
+
+ * info/info-stnd.texi: Use "end" footnote style instead of "separate".
+
+ * info/Makefile.in: Change "rm -f" to $(RM).
+
+ * info/general.h: Define zero_mem in terms of memset if we have
+ it, else in terms of bzero if we have that, else as inline code.
+
+ * info/NEWS: Updated to reflect changes in 2.11.
+
+Fri Mar 31 22:38:31 1995 Brian J. Fox <bfox@wizard.datawave.net>
+
+ * Makefile (DISTFILES): Don't include *.a, *orig, nor *.e
+ files.
+ (DISTFILES):
+
+Sat Mar 4 12:16:29 1995 Brian J. Fox <bfox@wizard.datawave.net>
+
+ * Makefile.in: Use @prefix@ instead of hardwired `/usr/local'.
+ Clean up makefile rules which make in subdirs.
+ (ALL_SUBDIRS): Add makeinfo/macros to list of subdirectories.
+
+ * configure.in (AC_CHECK_FUNCS): Add `bcopy' to list of things to
+ check for.
+
+Fri Mar 3 13:54:10 1995 Robert J. Chassell <bob@hill.gnu.ai.mit.edu>
+
+ * texinfo.texi: Minor changes for incremental new edition 2.20.
+
+Fri Mar 3 19:01:36 1995 Brian J. Fox <bfox@wizard.datawave.net>
+
+ * filesys.c (filesys_read_info_file): Local variable ST_SIZE is a
+ long which has the value of finfo->st_size casted to it.
+ * nodes.c (whole file): Similar changes.
+
+ These changes and the following for makedoc.c were required for
+ proper operation on HPm68k NetBSD.
+
+Mon Feb 27 15:16:27 1995 Brian J. Fox <bfox@wizard.datawave.net>
+
+ * makedoc.c (process_one_file): Local variable FILE_SIZE is a long
+ which has the value of finfo.st_size casted to it.
+
+
+Fri Mar 3 18:58:38 1995 Brian J. Fox <bfox@wizard.datawave.net>
+
+ * makeinfo.c (find_and_load): Cast fileinfo.st_size to a long for
+ internal use. This makes things work on NetBSD.
+
+
+Fri Mar 3 13:54:10 1995 Robert J. Chassell <bob@hill.gnu.ai.mit.edu>
+
+ * texinfo.texi: Minor changes for incremental new edition 2.20.
+
+Fri Mar 3 09:41:39 1995 Brian J. Fox <bfox@wizard.datawave.net>
+
+ * configure.in (TERMLIBS): Use AC_CHECK_LIB instead of
+ AC_HAVE_LIBRARY.
+
+Mon Jan 9 16:55:31 1995 Brian Fox <bfox@churchy.gnu.ai.mit.edu>
+
+ * Makefile.in (DISTFILES): Add the directory EMACS-BACKUPS to the
+ list of things to avoid distributing.
+
+Tue Nov 29 17:48:37 1994 David J. MacKenzie <djm@duality.gnu.ai.mit.edu>
+
+ * configure.in: Check for off_t.
+ * util/texindex.c (main): Use it.
+
+Fri Nov 11 14:46:28 1994 David J. MacKenzie <djm@duality.gnu.ai.mit.edu>
+
+ * configure.in: Update for Autoconf v2.
+
+Thu Oct 13 02:17:38 1994 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * emacs/detexinfo.el (detexinfo): Handle @!, @?, @^, @".
+
+Mon Aug 1 03:26:13 1994 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * texindex.c: Move the memset define down past string.h include.
+
+Tue Jun 28 14:21:43 1994 David J. MacKenzie (djm@churchy.gnu.ai.mit.edu)
+
+ * makeinfo/makeinfo.c: Add --help option.
+ (usage): Take args for stream and error code.
+ Change callers.
+ (print_version_info): Write to stdout, not stderr.
+
+Wed May 18 18:55:24 1994 Brian J. Fox (bfox@ai.mit.edu)
+
+ * info/session.c (forget_window_and_nodes): Negate test for
+ internal_info_node_p. We only want to free the text if it is
+ not an internal node.
+
+Thu Mar 10 03:07:18 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texindex.c (memset): Fix invalid parm name (was 0).
+
+Thu Feb 10 12:56:52 1994 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * makeinfo/makeinfo.c (current_item_function): Don't loop if elt
+ is NULL.
+
+Wed Feb 9 12:21:09 1994 Brian J. Fox (bfox@ai.mit.edu)
+
+ * makeinfo/makeinfo.c (minor_version): Release now at 1.60.
+
+ * makeinfo/makeinfo.c (expand_filename): Additional fixes. Now
+ when called with NULL filename, makes an output filename from the
+ input filename.
+ (convert_from_loaded_file): If REQUIRE_SETFILENAME is #defined (no
+ longer the default case) then error if no @setfilename was found
+ in the file. If REQUIRE_SETFILENAME is not #defined, the input
+ file starts either at the first line, or at the second line if the
+ first line contains the text "\input", and the output filename is
+ the input file name without directory and with ".info" replacing
+ any extension found.
+ (convert_from_loaded_file): Fixed bug in search for first
+ occurence of "@setfilename".
+
+Tue Feb 8 14:16:58 1994 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * configure.in: Check for sys/file.h.
+ info/dir.c, info/filesys.c, info/makedoc.c, info/nodes.c,
+ info/session.c, info/termdep.h, makeinfo/makeinfo.c
+ [HAVE_SYS_FILE_H]: Include <sys/file.h>.
+
+ * makeinfo/makeinfo.c (convert_from_loaded_file): Print
+ real_output_filename instead of output_filename, so user knows
+ exactly where output file is going.
+
+ Fri Jun 11 14:34:30 1993 Ian Lance Taylor (ian@cygnus.com)
+ * configure.in: Check for sigprocmask and sigsetmask.
+ * info/signals.h (HAVE_SIGSETMASK): Don't define.
+ (HAVE_SIGPROCMASK): Use instead of _POSIX_VERSION.
+ (BLOCK_SIGNAL, UNBLOCK_SIGNAL): If neither HAVE_SIGPROCMASK nor
+ HAVE_SIGSETMASK is defined, define these to do nothing.
+ * info/signals.c (sigprocmask): Don't compile if HAVE_SIGSETMASK
+ is not defined.
+
+ * info/terminal.c (terminal_prep_terminal): Don't clobber VINTR
+ and VQUIT in conditionals.
+
+Mon Feb 7 18:10:22 1994 Brian J. Fox (bfox@ai.mit.edu)
+
+ * makeinfo/makeinfo.c (full_pathname): Correct to really return
+ the full pathname of the input argument. Now makeinfo
+ /foo/bar.texi, where /foo/bar.texi contains "@setfilename
+ bar.info", correctly leaves the output file in "./bar.info".
+ Note that "@setfilename ../bar.info" still works; this is already
+ an absolute pathname.
+
+Sat Feb 5 13:04:05 1994 Brian J. Fox (bfox@ai.mit.edu)
+
+ * makeinfo/makeinfo.c: Version 1.59 released.
+
+ * makeinfo/makeinfo.c (whole file): Large number of changes allow
+ the "-E filename" option to be used to write a macro expanded
+ output file. On a file which contains no @include's and no
+ @macro's, the output file is identical to the input file.
+
+ * makeinfo/makeinfo.c (declarations): Remove cm_tex (). It is
+ never used since it is implemented with `command_name_condition'.
+
+ * makeinfo/makeinfo.c (add_char): Shift braces following the
+ current break point if we have deleted any characters.
+ (adjust_braces_following): New function adjusts all of the markers
+ in the brace stack which follow HERE by AMOUNT. This fixes a bug
+ where (for example) @var{} immediately following a line break
+ which is the end of a sentence modified the output incorrectly.
+
+Wed Feb 2 14:14:03 1994 Brian J. Fox (bfox@ai.mit.edu)
+
+ * makeinfo: Version 1.58.
+
+ * makeinfo/makeinfo.c (cm_node): Add extra hair to allow
+ backtracking through execution strings. Add extra hair to allow
+ the first node seen after a @top node is seen to adjust the
+ sectioning level of the @top node and associated menus.
+ Fix a few typos.
+ Add facility for macros to invoke the original definition. This
+ works by not allowing a single macro to recurse. Mutual recursion
+ is also disallowed with this plan.
+
+ * makeinfo/macros: New directory contains shippable macros.
+ * makeinfo/macros/simpledoc.texi: Macros which simplify the most
+ common uses of TeXinfo. See the example file.
+ Macros are now a reasonable way to get people started using
+ TeXinfo.
+
+Mon Jan 31 12:54:36 1994 Brian J. Fox (bfox@ai.mit.edu)
+
+ * makeinfo/makeinfo.c (minor_version): Increase to 57.
+
+ * makeinfo/makeinfo.c (cm_node): Call execute_string on the node,
+ next, prev, and up pointers.
+ (reader_loop): Change logic for `@bye'. No longer required at the
+ ends of executed strings.
+ (execute_string): Do not append `@bye' to the string to execute.
+
+ * makeinfo/makeinfo.c (whole file): Use COMMAND_PREFIX instead of
+ hardcoding `@' character in strings and searches.
+
+ * makeinfo/makeinfo.c (read_command): If HAVE_MACROS is defined,
+ then recognize and execute macros here.
+ (CommandTable): Add "macro" and "unmacro" to table if HAVE_MACROS
+ is defined.
+
+ * makeinfo/makeinfo.c (cm_macro, cm_unmacro, execute_macro)
+ makeinfo/makeinfo.c (get_macro_args, find_macro, add_macro)
+ makeinfo/makeinfo.c (delete_macro, array_len, apply):
+ New functions implement macro facility if HAVE_MACROS is
+ defined.
+
+ * makeinfo/macro.texi (new file): Examples of using the new macro
+ facility.
+
+Mon Jan 31 10:24:52 1994 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * makeinfo/makeinfo.c (executing_string): Restore global
+ declaration.
+
+Mon Jan 24 23:48:26 1994 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * texinfo.texi: Various typo fixes from Bob Chassell
+ <bob@gnu.ai.mit.edu>.
+
+Thu Jan 6 13:34:21 1994 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * texinfo.texi: Turned on smallbook format and @set smallbook.
+
+Wed Dec 15 20:08:43 1993 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * info/filesys.h (DEFAULT_INFOPATH): Added /usr/local/info,
+ /opt/gnu/info, /usr/share/info, and /usr/local/share/info.
+
+Tue Dec 14 19:10:20 1993 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * libtxi/Makefile.in (ALLOCA): Define from configure.
+
+Fri Dec 10 04:33:12 1993 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * util/texi2dvi: Put under RCS control.
+
+Sun Dec 26 11:55:46 1993 Brian J. Fox (bfox@ai.mit.edu)
+
+ * info/session.c (info_numeric_digit_arg_loop): Fix doc string.
+
+ * info/infodoc.c (create_internal_info_help_node): Print out list
+ of functions which have to keystroke equivalent if we support
+ NAMED_FUNCTIONS.
+
+ * info/filesys.c (compress_suffixes): Add ".gz" for "gunzip" to
+ alist.
+
+ * info/footnotes.c (make_footnotes_node): If refs[i] doesn't have
+ a nodename, then it couldn't be a reference to a footnote.
+
+ * info/nodemenu.c (get_visited_nodes): Handle the case where
+ filter_func has left no possible buffers to select.
+
+Sat Dec 25 10:35:56 1993 Brian J. Fox (bfox@ai.mit.edu)
+
+ * info/infodoc.c (create_internal_info_help_node): Conditionalize
+ generation of the help node based on the #define
+ HELP_NODE_GETS_REGENERATED. When this is not set (the default)
+ the help node is generated exactly once, and is not gc'able.
+ Otherwise, a new node is always created for the help window, and
+ the old node gets garbage collected by the gc system.
+ (info_find_or_create_help_window): Conditionalize window node
+ selected based on the #define HELP_NODE_GETS_REGENERATED.
+
+ * info/dir.c (add_menu_to_file_buffer): Place exactly one blank
+ line between directory entries.
+
+ * info/info.c (version_string): Update minor version to "11".
+
+ * info/info.h: Update comment to "2.11".
+
+ * info/dir.c (maybe_build_dir_node): Only add the contents of a
+ new file if it is not identical to the file of the DIR buffer.
+
+ * info/nodes.c (info_get_node): Call `maybe_build_dir_node' on
+ "dir" as well as "localdir" to mimic emacs-19.22 "dir" merging
+ behaviour.
+
+Fri Dec 3 13:41:44 1993 Brian J. Fox (bfox@ai.mit.edu)
+
+ * info/info-utils.c (canonicalize_whitespace): Suppress whitespace
+ found at the start of STRING.
+
+Sat Nov 20 14:00:50 1993 Brian J. Fox (bfox@hippie)
+
+ * info/indices.c (DECLARE_INFO_COMMAND): Fix typo in assignment to
+ `old_offset' (= instead of ==).
+
+Tue Nov 2 12:22:40 1993 Brian J. Fox (bfox@ai.mit.edu)
+
+ * makeinfo/makeinfo.c (make_index_entries_unique): New function
+ makes a sorted array have all unique entries by appending numbers
+ to the ends of strings.
+ (sort_index): Call `make_index_entries_unique'.
+
+Mon Sep 20 12:04:05 1993 Brian J. Fox (bfox@ai.mit.edu)
+
+ * makeinfo/makeinfo.c (get_execution_string): New Function returns
+ a pointer to an EXECUTION_STRING structure.
+ (execute_string): No longer uses a static string; call
+ `get_execution_string' instead in order to get a free buffer for
+ consing.
+
+Sun May 23 07:00:20 1993 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * Texinfo 3.1 released.
+
+Sat May 22 18:21:27 1993 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * info/info.c (info_patch_level): Increment constant to 1.
+
+ * info/Makefile.in (DEFAULT_INFOPATH): Default definition deleted.
+ Makefile.in: Put it here instead.
+ * Makefile.in (MDEFINES): Add DEFAULT_INFOPATH.
+
+ * configure.in: check for vfprintf and vsprintf.
+
+ * makeinfo/makeinfo.c: Version 1.55.
+
+ * makeinfo/makeinfo.c (add_word_args, execute_string) [HAVE_VARARGS_H]:
+ Don't use this definition unless HAVE_VSPRINTF is also defined.
+ (error, line_error, warning) [HAVE_VARARGS_H]: Don't use this
+ definition unless HAVE_VFPRINTF is also defined.
+ Remove indentation of all cpp directives, except for #pragma.
+
+Fri May 21 14:34:24 1993 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * texinfo.texi: Rename to texi.texi.
+ Change @setfilenname and START-INFO-DIR-ENTRY to `texi.info'.
+
+ * Makefile.in (MDEFINES): Pass LDFLAGS to sub-makes.
+ (realclean): Delete `configure'.
+ Changed all references to texinfo.info to texi.info
+
+ * configure.in: Add AC_PROG_RANLIB, and AC_CONST.
+ Check for `rindex' function.
+ Check for varargs.h.
+ Clean up symbol names for header files so a single AC_HAVE_HEADERS
+ can be used.
+ (AC_INIT): Use texi.texi instead of makeinfo/makeinfo.c
+
+ * info/info-utils.h: Copy definitions of bcopy, index, and rindex
+ (with appropriate #ifdef wrappers) from termdep.h. These are
+ included by a mutually exclusive set of files.
+
+ * info/termdep.h [HAVE_SYS_PTEM]: Use HAVE_SYS_PTEM_H instead.
+
+ * info/terminal.c, info/termdep.h [HAVE_TERMIO]: Use HAVE_TERMIO_H
+ instead.
+
+ * info/makedoc.c, info/filesys.c [!O_RDONLY]: Include fcntl.h or
+ sys/fnctl.h, depending on whether HAVE_SYS_FCNTL_H is set.
+
+ * info/termdep.h: Remove all indentation in #-exprs.
+ Remove old assumptions about bcopy, index, and rindex.
+ [HAVE_BCOPY]: Define bcopy.
+ [HAVE_RINDEX]: Define index and rindex.
+
+ * info/nodes.c (info_get_node): Don't call stricmp if nodename is
+ NULL. Remove indentation in #-exprs.
+
+ * info/echo_area.c (echo_area_stack_depth): Declare static.
+
+ * info/Makefile.in (DEFAULT_INFOPATH): Make separate Makefile
+ variable so it can be overridden more easily by the user. Add `.'
+ to beginning of path.
+ (clean): Delete core.* (386bsd core files).
+ (MAKEDOC): Variable removed. Refer to `makedoc' explicitly.
+ (funs.h): Add `:' commands after if, to avoid spurious nonzero
+ exit statuses.
+
+ * info/userdoc.texi: Improved comments explaining its purpose.
+
+ * makeinfo/makeinfo.c [HAVE_VARARGS_H]: Include varargs.h.
+ (error, line_error, warning, add_word_args,
+ execute_string)[HAVE_VARARGS_H]: New versions that
+ use varargs. From bfox.
+
+ * makeinfo/Makefile.in (clean): Delete core.* (386bsd core files).
+
+ * util/Makefile.in (clean): Remove core.* (386bsd core files).
+
+ * libtxi/Makefile.in: Remove all references to $(common).
+ (RANLIB): New variable, set from autoconf.
+ (libtxi.a): Use $(RANLIB) instead of `ranlib' in target rules.
+ (clean): Delete core.* (386bsd core files).
+
+Tue May 18 12:08:24 1993 Robert J. Chassell (bob at grackle.stockbridge.ma.us)
+
+ * emacs/texinfmt.el (texinfo-format-refill): Do not fill a section
+ title line with the asterisks, hyphens, etc. that underline
+ it in any circumstance.
+
+Sun May 16 13:53:43 1993 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * util/mkinstalldirs: handle relative pathnames.
+
+Fri May 14 20:18:49 1993 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * util/mkinstalldirs: initialize IFS if unset.
+
+Tue May 11 06:33:14 1993 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * makeinfo/makeinfo.c (cm_item): don't dereference item_func if NULL.
+
+Mon May 10 14:50:31 1993 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * Texinfo 3.0 released.
+
+ * Makefile.in (ALLOCA): Provide for substitution.
+
+Mon May 10 10:12:53 1993 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * emacs/texinfmt.el (texinfmt-version): Updated year.
+
+Fri Apr 16 04:48:03 1993 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * makeinfo/makeinfo.c: Version 1.54 from bfox.
+
+ * util/fixfonts: Replace instances of `[..]' with `test'.
+ Use more portable `test' arguments: `z$foo = z' instead of `! $foo'.
+ Robustify quoting in eval assignments.
+ (textfmdir, texpkdir, texgfdir): Don't override definition from
+ environment, if any.
+ Trap EXIT, SIGHUP, SIGINT, SIGQUIT, SIGTERM to delete temp files
+ instead of trying to remove them explicitly before calling exit.
+ When changing cwd, do so in subshell, in case various tex*dir
+ variables are relative.
+ Don't use `head', `dirname', or `basename'. These don't behave
+ consistently and/or don't even exist on some systems. They can
+ all be emulated with `sed' anyway.
+ (tempfile2_line1): New variable. Use it instead of running
+ process to extract first line out of tempfile2 multiple times.
+ Eliminate some gratuitous uses of $tempfile2, such as in for loops.
+
+Fri Mar 26 23:25:13 1993 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * texinfo.texi: @setfilename texinfo.info.
+
+ * makeinfo/makeinfo.c (reader_loop, end_insertion): Fix typos in
+ comments.
+ (handle_variable_internal): Handle the case that there further
+ menu text after a false ifset/ifclear.
+
+ * util/texi2dvi: Version 0.4
+ Replace all instances of `[ ... ]' with `test'.
+ Updated bug-reporting address.
+
+Thu Mar 25 12:31:30 1993 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * info/Makefile.in (install): Install info.1 man page.
+ (uninstall): Remove installed info.1 man page.
+
+ * info/infoman.texi: Standalone manual renamed to info-stnd.texi.
+ Makefile.in: Targets updated appropriately.
+
+ * info/Makefile.in (LDEFS): New variable. Use it for info-local
+ macros, since DEFS will be inherited from parent make and any
+ local definitions will get clobbered.
+
+ * info/RELEASE: Renamed to info/NEWS.
+
+ * README: New file.
+
+ * Makefile.in (topclean): New target.
+
+ * Getting-started: Renamed to INTRODUCTION. Former name is too
+ long (over 14 chars).
+
+ * New-features: Renamed to NEWS.
+
+ * Makefile.in (MDEFINES): Set it.
+
+ * Makefile.in (dist): Use --gzip option to tar to make sure
+ resulting file is compressed with gzip. Change tar file
+ extension from `.Z' to `.z'.
+
+ * Makefile.in (DISTFILES): Filter out any file or directory names
+ starting with `='.
+
+ * fixfonts: Moved to util/fixfonts.
+
+ * RELEASE: Deleted.
+
+ * makeinfo/Makefile.in (VPATH): Use $(srcdir), not @srcdir@.
+ (common): Use ../libtxi, not ../common.
+ (makeinfo.in): Run makeinfo with --no-split.
+
+ * makeinfo/makeinfo.texi: Changes from bob.
+
+ * util/Makefile.in (VPATH): Use $(srcdir), not @srcdir@.
+ (common): Use ../libtxi, not ../common.
+
+ * util/fixfonts: Moved from top-level directory.
+
+Wed Mar 24 10:21:31 1993 Robert J. Chassell (bob at grackle)
+
+ * emacs/texinfmt.el (texinfo-format-region): Do not require
+ `@setfilename' line; delete `\input texinfo' line if part of
+ region.
+
+ * emacs/texinfmt.el (texinfo-raise-lower-sections): Raise or lower the
+ hierarchical level of chapters, sections, etc. according to
+ `@raisesections' and `@lowersections' commands.
+
+Thu Mar 18 16:02:27 1993 Robert J. Chassell (bob at grackle)
+
+ * emacs/texinfo.el (texinfo-show-structure): Indent *Occur* buffer
+ according to the structure of the file.
+
+Sat Mar 6 05:16:44 1993 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * util/texi2dvi: use ${1+"$@"}, not just "$@".
+
+Tue Feb 2 08:38:06 1993 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * info/Makefile.in: Replace all "--nosplit" arguments to makeinfo
+ with "--no-split"
+
+Sun Jan 31 18:16:58 1993 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * util/texi2dvi: Don't put .dvi and related auxillary files in same
+ directory as source files. Put them in current directory instead.
+ (TEXINPUTS_orig): New variable.
+ (file_texi): Variable removed.
+ (filename_texi): New variable.
+ (command_line_filename): Use this wherever references to file_texi
+ occured except in setting filename_noext.
+ (TEXINPUTS): Current directory and source directory where input
+ file resides prepended to standard path before invoking TeX.
+
+Wed Jan 27 16:24:37 1993 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * util/Makefile.in: overhauled.
+
+Tue Jan 26 21:04:23 1993 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * Makefile.in, info/Makefile.in, makeinfo/Makefile.in: Overhauled.
+
+ * configure.in: Renamed from texinfo.in.
+ Incorporated makeinfo/makeinfo.in, info/info.in, and
+ util/util.in. Create all child Makefiles.
+
+ * makeinfo/makeinfo.in, info/info.in: Deleted (incorporated into
+ top configure.in).
+
+ * util/util.in: Deleted (incorporated into ../configure.in).
+
+Mon Jan 25 10:59:49 1993 Brian Fox (bfox@cubit)
+
+ * info/info.c: New version 2.9; new variable INFO_PATCH_LEVEL
+ appears in the version string if it is non-zero. New function
+ version_string () produces the current version string, as in 2.8-p1.
+
+ * info/dir.c: New file implements Gillespies `localdir' hacks.
+
+ * info/nodes.c (info_get_node): Now calls maybe_build_dir_node ()
+ if the file name to look for is "dir".
+
+ * info/nodes.h: New flag N_CannotGC unconditionally prevents garbage
+ collection of a file buffer's contents. Used when "dir" is made
+ from at least one "localdir".
+
+Fri Jan 22 11:36:42 1993 Brian Fox (bfox@cubit)
+
+ * info/footnotes.c: Do not declare auto_footnotes_p as "extern" in
+ this file.
+
+Thu Jan 21 08:57:08 1993 Brian Fox (bfox@cubit)
+
+ * info/info.c: New version 2.8.
+
+ * info/userdoc.texi, info/infoman.texi, info/info.texi: Fully
+ document Info; create both online and printed manual versions.
+ "userdoc.texi" contains exactly the documentation for GNU Info 2.x.
+ "infoman.texi" is a wrapper for that file; it is meant to produce
+ printed documentation. "info.texi" has the user documentation as a
+ complete chapter within itself, but continues to contain the Info
+ tutorial.
+
+ * info/makedoc.c: Convert "ea_" into "echo_area_" when creating the
+ command name.
+
+Fri Jan 15 16:50:35 1993 Brian Fox (bfox@cubit)
+
+ * info/search.c (skip_node_characters): New argument NEWLINES_OKAY if
+ non-zero says that newlines should be skipped over during parsing.
+
+ * info/info-utils.c (info_parse_node): New argument NEWLINES_OKAY if
+ non-zero says that newlines should be skipped while parsing out
+ the nodename specification.
+
+Wed Jan 13 14:42:33 1993 Brian Fox (bfox@cubit)
+
+ * info/makedoc.c: Remove "info_" from the front of the command name
+ before installing it.
+
+ * info/session.c (info_menu_or_ref_item): A label of "Menu" is okay if
+ the builder is not info_menu_of_node ();
+
+ * info/m-x.c: New function replace_in_documentation () replaces \\[foo]
+ with the keystrokes you type to get that command. Now used in
+ indices.c, info.c, infodoc.c.
+
+Mon Jan 11 10:27:41 1993 Brian Fox (bfox@cubit)
+
+ * info/variables.c, h: New files contain describe-variable and stuff
+ moved out of m-x.c.
+
+ * info/m-x.c: Move VARIABLE_ALIST and variable functions into
+ variables.c. Add documentation string to variable definition.
+
+ * info/echo_area.c (push_echo_area): Zero the contents of
+ echo_area_completion_items after pushing the vars.
+
+Sat Jan 9 11:59:47 1993 Brian Fox (bfox@cubit)
+
+ * info/Makefile.in: Add footnotes.c,h,o to the appropriate Makefile
+ variables.
+
+ * info/window.c (window_tile_windows): New function divides the
+ available space among the visible windows.
+
+ * info/session.c (info_tile_windows): New function calls
+ window_tile_windows.
+
+ * info/footnotes.c, footnotes.h: New file implements functions for
+ aiding automatic footnote display when entering a node which has
+ footnotes.
+
+ * info/m-x.c: New user-variable "automatic-footnotes".
+
+ * info/window.c (window_physical_lines) New function counts the
+ carriage returns found in NODE.
+
+Wed Jan 6 11:24:19 1993 Brian Fox (bfox@cubit)
+
+ * info/general.h: #include <unistd.h> if we have it.
+
+Tue Jan 5 11:12:33 1993 Brian Fox (bfox@cubit)
+
+ * info/info-utils.c (info_concatenate_references): If either arg is
+ NULL, return the other arg.
+
+ * info/indices.c (info_indices_of_file_buffer): Simplified and
+ corrected loop through tags/nodes of file buffer looking for
+ indices.
+
+ * info/search.c (skip_node_characters): Rewrite "if" statement for
+ clarification and conciseness.
+
+Fri Jan 1 03:18:26 1993 Brian Fox (bfox@cubit)
+
+ * info/info.in: Check for setvbuf (), and check to see whether the args
+ are reversed.
+
+ * info/dribble.c (open_dribble_file) Check HAVE_SETVBUF and
+ SETVBUF_REVERSED when setting the buffering on info_dribble_file.
+
+Thu Dec 31 20:14:13 1992 Brian Fox (bfox@cubit)
+
+ * info/session.c (info_select_reference) If the node couldn't be found,
+ look for the label as a filename (i.e., "(LABEL)Top").
+
+Wed Dec 30 01:57:50 1992 Brian Fox (bfox@cubit)
+
+ * New Version 2.7 Beta.
+
+ * info/echo_area.c: Numerous functions now do something with the
+ numeric argument. Kill ring implemented, as well as yank and
+ yank_pop. Also transpose-chars.
+
+ * info/window.c (window_make_modeline): Check node->flags for
+ N_IsCompressed and display "zz" in the modeline if the node comes
+ from a file which is compressed on disk.
+
+Mon Dec 28 17:33:12 1992 Brian Fox (bfox@cubit)
+
+ * info/filesys.c, info/nodes.c: New member of FILE_BUFFER "FILESIZE"
+ contains the size of file_buffer->contents. finfo.st_size is no
+ longer relied upon to read the contents of files, since the new
+ function (filesys_read_info_file) can read compressed files.
+
+ * info/filesys.c (info_find_fullpath) If a file starts with a slash (or
+ tilde expansion causes it to start with a slash) still call
+ info_find_file_in_path () on it so that we can find files with
+ compression suffixes.
+
+ * info/m-x.c: New variable "gc-compressed-files".
+
+Tue Dec 22 03:45:28 1992 Brian Fox (bfox@cubit)
+
+ * info/info.c: Version 2.6 Beta.
+
+ * info/indices.c (info_index_next): Improve the final search for the
+ matched index entry.
+
+ * info/session.c (move_to_screen_line): New function implements `M-r'.
+ Given a numeric argument, move point to the start of that line in
+ the current window; without an arg, move to the center line.
+ * infomap.c: Put move_to_screen_line () on `M-r'.
+
+ * info/nodes.c (adjust_nodestart): Don't set N_UpdateTags unless the
+ node came from a tags table.
+
+ * info/nodes.c (info_find_file_internal): If the filename being looked
+ for doesn't start with a `/', then additionally compare the
+ filename against the fullpath of the file buffer sans the
+ directory name. This can happen when selecting nodemenu items.
+
+Mon Dec 21 10:07:18 1992 Brian Fox (bfox@cubit)
+
+ * info/session.c, info/display.c: Remove all references to
+ active_window_ch, active_window_cv, cursor_h, and cursor_v. The
+ single function display_cursor_at_point () is used for all cursor
+ movement, and to place the terminal's cursor at the right location
+ on the screen.
+
+Sat Dec 19 12:01:33 1992 Brian Fox (bfox@cubit)
+
+ * info/nodemenu.c: New file implements a few functions for manipulating
+ previously visited nodes. `list-visited-nodes' produces a menu of
+ the nodes that could be reached by info_history_node () in some
+ window. `select-visited-node' is similar to `list-visited-node'
+ followed by `info-menu-item', but doesn't display a window with
+ the visited nodes menu.
+
+ * info/session.c (info_numeric_arg_digit_loop): If redisplay had been
+ interrupted, then redisplay all of the windows while waiting for
+ input.
+
+ * info/display.c (display_was_interrupted_p): New variable keeps track
+ of interrupted display. Used in
+ info/session.c:info_numeric_arg_digit_loop ().
+
+ * info/session.c (info_global_next, info_global_prev): Use the numeric
+ argument passed to determine how many nodes to move.
+
+ * info/session.c (info_scroll_forward, info_scroll_backward): If the
+ invoking key is not SPC or DEL only do Page Only scrolling.
+
+Thu Dec 17 01:34:22 1992 Brian Fox (bfox@cubit)
+
+ * info/display.c (display_update_one_window): Allow W_NoWrap to affect
+ window display.
+
+ * info/window.c (calculate_line_starts): Now takes a WINDOW * as an
+ argument, and simply does the calculation, placing the results
+ into window->line_starts and window->line_count. It also handles
+ W_NoWrap in window->flags.
+
+Mon Dec 14 02:18:55 1992 Brian Fox (bfox@cubit)
+
+ * info/session.c (info_backward_scroll): Don't try to get previous node
+ if the top of the node isn't currently being displayed.
+
+ * info/window.c (window_adjust_pagetop) Use new variable
+ "window_scroll_step" to attempt to control the amount which the
+ window scrolls.
+
+ * info/m-x.c (info_variables) Add "scroll-step" to the list.
+
+Thu Dec 10 08:52:10 1992 Brian Fox (bfox@cubit)
+
+ * info/m-x.c: New variable entry show-index-matches. When set to
+ non-zero the matched portion of the search string is indicated
+ with ` and '. Perhaps I should use `|' inst|ea|d?
+
+ * info/echo_area.c (ea_possible_completions): Always build completions
+ before checking to see how many there were.
+
+ * info/info-utils.c: (info_concatenate_references): New utility
+ function concatenates references.
+
+ * info/Makefile.in: Add indices.c and indices.h to SRCS and HDRS.
+ Add indices.c to CMDFILES.
+
+ * info/indices.c, info/indices.h: New file implements `i' and `,'
+ commands of info, and provides index searching capabilities.
+
+ * info/echo_area.c (info_read_completing_in_echo_area): Split off into
+ separate callable function info_read_completing_internal ().
+
+ * info/echo_area.c (info_read_maybe_completing): New function calls
+ info_read_completing_internal () with non-forcing argument.
+
+ * info/session.c: Rename down_next_upnext_or_error () and
+ prev_up_or_error () to forward_move_node_structure (), and
+ backward_move_node_structure (). Implement new commands
+ info_global_next () and info_global_prev ().
+
+ * info/infomap.c (initialize_info_keymaps): Bind `[' and `]' to
+ backward_, forward_move_node_structure () respectively.
+
+ * info/session.c (info_menu_digit): Called with "0" as arg, select the
+ last menu item.
+
+ * info/infomap.c (initialize_info_keymaps): "0" calls
+ info_menu_digit ().
+
+ * info/session.c (info_move_to_xref): Take dir into account when there
+ are xrefs and menu items in the node and we are wrapping
+ backwards.
+
+Tue Dec 8 09:57:58 1992 Brian Fox (bfox@cubit)
+
+ * info/info.c: Version 2.5 Beta.
+
+ * info/terminal.c (terminal_insert_lines, terminal_delete_lines) Do not
+ expect tgoto to return a new string; it returns the address of a
+ static buffer.
+
+ * info/infodoc.c (info_find_or_create_help_window) Correct check for
+ prior existing help node.
+
+ * info/m-x.c (set_variable): Allow variables to have a list of choices.
+ Add new variable scroll-behaviour.
+
+ * info/session.c (down_next_upnext_or_error, prev_up_or_error) New
+ functions implement user-controlled behaviour when attempting to
+ scroll past the bottom or top of a node. New variable
+ info_scroll_behaviour is user visible as "scroll-behaviour".
+
+ * info/session.c (info_scroll_forward, info_scroll_backward) Call new
+ functions for user-controlled scroll behaviour.
+
+ * info/terminal.c (terminal_initialize_terminal) Set PC from BC not
+ from BUFFER.
+
+Mon Dec 7 11:26:12 1992 Brian Fox (bfox@cubit)
+
+ * util/texindex.c: Change EXIT_SUCCESS and EXIT_FATAL to TI_NO_ERROR
+ and TI_FATAL_ERROR respectively. This avoids namespace conflicts
+ on NeXT 2.0.
+
+Sat Dec 5 00:07:59 1992 Brian Fox (bfox@cubit)
+
+ * info/info.c: New option "--subnodes" says to recursively dump the
+ menus of the nodes that you wish to dump. Menu items which point
+ to external nodes are not dumped, and no node is dumped twice.
+
+Thu Dec 3 16:11:02 1992 Brian Fox (bfox@cubit)
+
+ * info/session.c (info_error) Don't ring the bell if
+ info_error_rings_bell_p is zero. (info_abort_key) Ring the bell
+ if printing "Quit" in the echo area wouldn't do it.
+
+ * info/m-x.c (set_variable) New functions allows setting of
+ variables in the echo area. Currently, only visilble-bell and
+ errors-ring-bell are implemented.
+
+Wed Dec 2 13:11:37 1992 Brian Fox (bfox@cubit)
+
+ * info/nodes.c, info/makedoc.c: If O_RDONLY is not defined by
+ sys/file.h, include sys/fcntl.h.
+
+ * info/filesys.c (info_file_in_path): Expand leading tildes found
+ within directory names.
+
+ * info/terminal.c (terminal_initialize_terminal) Set ospeed to 13 if
+ not settable any other way. It is an index into an array of
+ output speeds.
+
+ * info/display.c (free_display) Do not free a NULL display.
+
+ * info/display.c (string_width): New functions returns the width of
+ STRING when printed at HPOS.
+
+Sun Nov 29 01:24:42 1992 Brian Fox (bfox@cubit)
+
+ * info/info.c: New version 2.4 beta.
+
+ * info/general.h: #define info_toupper and info_tolower which check
+ their arguments before performing any conversion.
+
+ * info/search.c, info/echo_area.c: Use info_toupper.
+
+Sat Nov 28 14:23:24 1992 Brian Fox (bfox@cubit)
+
+ * info/session.c (info_scroll_forward, info_scroll_backward) If at
+ last/first page of the node, and the last command was
+ forward/backward, do info_next/prev/_node.
+
+ * info/session.c: New function info_select_reference_this_line gets
+ menu or cross reference immediately.
+
+ * info/infomap.c (initialize_info_keymaps): Add info_keymap[LFD] to
+ invoke info_select_reference_this_line ().
+
+ * info/session.c (info_last_reference) Rename to
+ info_history_reference. Wrote info_last_reference, and
+ info_first_reference which go to the last or first node of an info
+ file.
+
+Fri Nov 27 00:59:02 1992 Brian Fox (bfox@cubit)
+
+ * info/info.c: New version 2.3. Completed implementing contents of
+ TODO file.
+
+ * info/session.c (info_redraw_display): Fix C-l with numeric arg.
+
+Thu Nov 26 20:14:18 1992 Brian Fox (bfox@cubit)
+
+ * info/m-x.c: New file implements reading named commands in the echo
+ area, along with a new function "info-set-screen-height".
+ Compilation of this file and some code in others controlled by the
+ Makefile variable NAMED_COMMANDS (set to -DNAMED_COMMANDS).
+
+ * info/window.c (window_new_screen_size) Rewrite from scratch, allowing
+ clean growth and shrinkage of the screen. New variable
+ window_deletion_notifier is a pointer to a function to call when
+ the screen changes size, and some windows have to get deleted.
+ The function is called with the window to be deleted as an
+ argument, and it should clean up dangling references to that
+ window.
+
+ * info/session.c (initialize_info_session): Set
+ window_deletion_function to forget_window_and_nodes.
+
+ * info/display.c (display_update_one_window): If the first row of the
+ window to display wouldn't appear in the_screen, don't try to
+ display it. This happens when the screen has been made
+ unreasonably small, and we attempt to display the echo area.
+
+Tue Nov 24 00:47:20 1992 Brian Fox (bfox@cubit)
+
+ * Release Info 2.2.
+
+ * info/session.c: New functions implement reading typeahead and
+ implement C-g flushing typed ahead characters.
+ (info_search_internal): allows C-g to exit multi-file searches.
+
+Mon Nov 23 01:53:35 1992 Brian Fox (bfox@cubit)
+
+ * info/nodes.c: Remove calls to sscanf (), replacing them with calls to
+ atol (), since that is much faster.
+ (get_nodes_of_tags_table) Only check for "(Indirect)" if we
+ haven't parsed any nodes out of the tags table. Increase the
+ amount that file_buffer->nodes grows to 100 from 50. These two
+ together sufficiently speed up the parsing process.
+
+ * info/nodes.c: info_get_node_of_file_buffer_tags (),
+ info_get_node_of_file_buffer_nodes (): Search the appropriate list
+ and return a node. This was simply a cut and paste edit to
+ functionalize the code.
+
+ * info/TODO: Remove suggestion for partial tag parsing, since tag
+ parsing is much faster now.
+
+Sat Nov 21 02:48:23 1992 Brian Fox (bfox@cubit)
+
+ * info/makedoc.c: New File replaces makedoc.sh shell script.
+
+ * info/infomap.c: Install info_isearch (on C-s) and
+ info_reverse_isearch (on C-r) for Info windows.
+
+ * info/session.c (incremental_search, info_isearch,
+ info_reverse_isearch) New functions implement incremental
+ searching.
+
+Fri Nov 20 00:01:35 1992 Brian Fox (bfox@cubit)
+
+ * info/terminal.c (terminal_initialize_terminal): Declare and set up
+ `ospeed'. Turn off C-s and C-q processing.
+
+ * info/session.c (info_show_point) When this function is called, the
+ desired result is to show the point immediately. So now it calls
+ set_window_pagetop () if the new pagetop is not the same as the
+ old one. This means that info_prev_line (), info_next_line (),
+ info_forward_word (), and info_backward_word () can all scroll the
+ window if they have to.
+
+Thu Nov 19 12:27:07 1992 Brian Fox (bfox@cubit)
+
+ * info/session.c (set_window_pagetop): Add scrolling to make this
+ faster.
+
+ * info/echo_area.c (push/pop_echo_area): Remember the list of items to
+ complete over.
+
+ * info/session.c (info_forward_char): Don't let point get equal to
+ nodelen, only to nodelen - 1.
+
+ * info/display.c: New function display_scroll_display () scrolls the
+ rmembered display as well as the text on the actual display.
+
+ * info/terminal.c: New functions terminal_scroll_terminal (),
+ terminal_scroll_down (), and terminal_scroll_up (). All
+ implemented using "al" and "dl" termcap capabilities. (i.e.,
+ insert and delete line).
+
+Wed Nov 18 15:05:14 1992 Brian Fox (bfox@cubit)
+
+ * info/termdep.h: Only define HAVE_FCNTL_H if !aix and !ultrix.
+
+Tue Nov 17 20:35:08 1992 Brian Fox (bfox@cubit)
+
+ * First Beta Release of Info 2.0.
+
+Sun Nov 1 02:21:05 1992 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * util/texi2dvi (--force): Option removed. Always run tex at least
+ once, don't bother checking if .dvi file is newer than source.
+
+Fri Oct 30 02:16:28 1992 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * util/texi2dvi (-D): debugging option renamed from '-d'.
+ Made check to enable debugging more terse.
+ When checking if index files have changed, use
+ variable $this_file instead of $file in for loop.
+ (file_texi): wherever the variable $file was used to reference
+ the texinfo file, substituted $file_texi.
+
+Sat Oct 17 07:30:34 1992 Brian J. Fox (bfox@helios)
+
+ * util/texindex.c: Remove references to USG replacing them with a
+ define declaring the actual feature required or missing.
+
+Thu Oct 15 16:17:47 1992 Robert J. Chassell (bob@nutrimat.gnu.ai.mit.edu)
+
+ * emacs/texinfmt.el (texinfo-format-setfilename): Remove date from
+ Info file header so regression testing is easier.
+
+Tue Sep 15 16:28:35 1992 Robert J. Chassell (bob at grackle)
+
+ * emacs/texinfmt.el (texinfmt-version): New variable.
+ (texinfo-format-setfilename): Include date and
+ version in Info file header.
+ Better documentation for @definfoenclose
+ Handle whitespace after @end iftex, etc.
+
+Thu Sep 3 09:25:37 1992 Robert J. Chassell (bob at grackle)
+
+ * emacs/texnfo-upd.el: Fix typo re `texinfo-sequential-node-update.'
+
+Tue Aug 18 08:56:24 1992 Robert J. Chassell (bob at grackle)
+
+ * emacs/texinfmt.el (texinfo-value): Revise syntax.
+
+ * emacs/texnfo-upd.el (texinfo-start-menu-description):
+ New function to insert title as description in a menu.
+ (texinfo-make-menu-list): Remove automatic title insertion.
+
+ * emacs/texinfo.el (texinfo-mode-map): Add keybinding for
+ texinfo-start-menu-description.
+
+Wed Jul 29 11:58:53 1992 Robert J. Chassell (bob at grackle)
+
+ * emacs/texinfmt.el (texinfo-set): Revise to set a string to the flag.
+ (texinfo-value): @value{flag}: New command which inserts the
+ string to which the flag is set.
+
+Tue Jul 7 15:10:52 1992 Robert J. Chassell (bob at grackle)
+
+ * emacs/texnfo-upd.el (texinfo-master-menu): Error message if file
+ contains too few nodes for a master menu.
+ (texinfo-insert-master-menu-list): Only attempt to insert detailed
+ master menu if there is one.
+
+Wed Jun 10 15:26:18 1992 Robert J. Chassell (bob at grackle)
+
+ * emacs/texinfmt.el (texinfo-append-refill): Refill properly when lines
+ begin with within-paragraph @-commands.
+
+Tue Jun 9 12:28:11 1992 Robert J. Chassell (bob at grackle)
+
+ * emacs/texinfmt.el: Add `texinfo-deffn-formatting-property' and
+ `texinfo-defun-indexing-property' to @deffn commands.
+
+Mon Jun 8 11:52:01 1992 Robert J. Chassell (bob at grackle)
+
+ * emacs/texnfo-upd.el: Replace `(mark-whole-buffer)' with
+ `(push-mark (point-max) t) (goto-char (point-min))'
+ to avoid `Mark set' messages.
+
+Fri Jun 5 15:15:16 1992 Robert J. Chassell (bob@kropotkin.gnu.ai.mit.edu)
+
+ * emacs/texnfo-upd.el (texinfo-check-for-node-name): Offer section
+ title as prompt.
+ (texinfo-copy-next-section-title): Copy title correctly.
+
+Thu May 28 20:34:17 1992 Robert J. Chassell (bob@hill.gnu.ai.mit.edu)
+
+ * emacs/texinfmt.el: @vtable defined, parallel to @ftable, for
+ variables.
+ (texinfo-append-refill): set case-fold-search nil so @TeX is not
+ confused with @tex.
+
+Thu Mar 26 21:36:41 1992 Robert J. Chassell (bob@kropotkin.gnu.ai.mit.edu)
+
+ * emacs/makeinfo.el: Rename temp buffer from `*Makeinfo*' back to
+ `*compilation*' so `next-error' works; unfortunately,
+ `*compilation*' is written into the code as the name
+ `next-error' needs.
+ Rename `makeinfo-recenter-makeinfo-buffer' back to
+ `makeinfo-recenter-makeinfo-buffer'
+
+Thu May 14 21:14:25 1992 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * util/fixfonts: Enclosed most variable references with "" to prevent
+ potential globbing and other weirdness. Eliminated uses of
+ ${var-value}, which unfortunately isn't portable.
+
+ * util/texi2dvi: rewritten from scratch.
+
+Sat Apr 18 23:46:25 1992 Charles Hannum (mycroft@hal.gnu.ai.mit.edu)
+
+ * util/fixfonts: Re-evaluate prefix and libdir if inherited (to resolve
+ variable references from make).
+ (texlibdir): Don't add '/tex', since it's already there.
+
+Fri Apr 10 14:51:23 1992 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * util/fixfonts: set prefix and libdir only if they are not already
+ defined (i.e. not inherited from the environment).
+ Changed default path for libdir to be consistent with Makefile.
+
+Tue Mar 3 13:17:42 1992 Robert J. Chassell (bob at grackle)
+
+ * emacs/texnfo-upd.el (texinfo-insert-master-menu-list): Insert a
+ master menu only after `Top' node and before next node.
+ (texinfo-copy-menu): Error message if menu empty.
+
+Mon Feb 24 15:47:49 1992 Robert J. Chassell (bob at grackle)
+
+ * emacs/texinfmt.el (texinfo-format-region): Make sure region ends in a
+ newline.
+ (texinfo-itemize-item): Recognize all non-whitespace on same line
+ as @item command.
+
+Sat Feb 22 02:15:00 1992 Brian Fox (bfox at gnuwest.fsf.org)
+
+ * util/texindex.c: New version 1.45 has cleanups, should compile under
+ VMS quietly.
+
+Wed Feb 12 10:50:51 1992 Robert J. Chassell (bob at grackle)
+
+ * emacs/makeinfo.el: Rename temp buffer as *Makeinfo*.
+ Rename `makeinfo-recenter-compilation-buffer'.
+ (makeinfo-buffer): Offer to save buffer if it is modified.
+ (makeinfo-compile): Do not offer to save other buffers.
+ (makeinfo-compilation-sentinel): Switch to Info file.
+
+Tue Feb 4 13:07:39 1992 Robert J. Chassell (bob at grackle)
+
+ * emacs/texinfmt.el (texinfo-print-index): Format so that node names in
+ the index are lined up.
+
+Mon Feb 3 09:08:14 1992 Robert J. Chassell (bob at grackle)
+
+ * emacs/texinfmt.el (texinfo-itemize-item): Format entry when text
+ is on the same line as @item command. Also, handle @-commands.
+ (texinfo-format-region, texinfo-format-buffer-1): Set fill column
+ to local value of Texinfo buffer.
+
+ * emacs/texnfo-upd.el (texinfo-pointer-name): Find only those
+ section commands that are accompanied by `@node' lines.
+
+Tue Jan 14 16:10:16 1992 Robert J. Chassell (bob at grackle)
+
+ * emacs/texnfo-upd.el: Ensure that no commands depend on the value of
+ case-fold-search.
+
+Fri Jan 10 15:13:55 1992 Robert J. Chassell (bob at kropotkin)
+
+ * emacs/texinfmt.el (texinfo-append-refill): Replace use of
+ unsupported function `looking-at-backward' with
+ `re-search-backward'.
+
+Mon Dec 23 23:46:42 1991 David J. MacKenzie (djm at wookumz.gnu.ai.mit.edu)
+
+ * util/texindex.c: Change POSIX ifdefs to HAVE_UNISTD_H and
+ _POSIX_VERSION.
+
+Mon Dec 16 15:01:36 1991 Robert J. Chassell (bob at grackle)
+
+ * emacs/texinfmt.el (texinfo-append-refill): New function appends
+ @refill to all appropriate paragraphs so you no longer need to
+ append @refill command yourself.
+ (texinfo-format-region, texinfo-format-buffer-1,
+ texinfo-format-include): Call `texinfo-append-refill'.
+
+Fri Dec 6 01:25:09 1991 David J. MacKenzie (djm at wookumz.gnu.ai.mit.edu)
+
+ * util/texindex.c: Conditionalize on _AIX (which is predefined) instead
+ of AIX, just like makeinfo does.
+
+Tue Nov 26 10:21:04 1991 Robert J. Chassell (bob at grackle)
+
+ * emacs/texnfo-upd.el (texinfo-section-types-regexp): `@subtitle' no
+ longer treated as subsection.
+
+Sat Nov 16 08:27:42 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * util/fixfonts: New file, from Karl Berry.
+
+Tue Nov 12 16:13:24 1991 Robert J. Chassell (bob at grackle)
+
+ * emacs/texinfmt.el: Create @end smalllisp.
+
+Mon Nov 11 16:50:13 1991 Robert J. Chassell (bob at grackle)
+
+ * emacs/texinfo.el (texinfo-environment-regexp): Add all other block
+ enclosing Texinfo commands.
+
+Thu Nov 7 10:23:51 1991 Robert J. Chassell (bob at grackle)
+
+ * emacs/texinfo.el (texinfo-insert-@end): Attempt to insert correct end
+ command statement, eg, @end table. Fails with nested lists.
+ (texinfo-insert-*): Accept prefix arg to surround following N
+ words with braces for command.
+
+Thu Oct 31 21:31:41 1991 Robert J. Chassell (bob at kropotki)
+
+ * emacs/texinfmt.el (texinfo-clear): Clear flag even if flag not
+ previously set.
+
+Wed Oct 23 11:15:58 1991 Robert J. Chassell (bob at grackle)
+
+ * emacs/texinfo.el (texinfo-mode): page-delimiter now finds top node as
+ well as chapters.
+
+Tue Oct 22 11:46:12 1991 Robert J. Chassell (bob at grackle)
+
+ * emacs/texinfmt.el (texinfo-do-flushright): Test whether a line is too
+ long for the flush right command (line length must be less than
+ the value of fill column).
+
+ * emacs/texnfo-tex.el (texinfo-tex-buffer): Prompt for original file
+ even if point moved to *texinfo-tex-shell*.
+ texinfo-tex-original-file: variable to hold file name.
+
+Wed Oct 16 08:32:05 1991 Robert J. Chassell (bob at grackle)
+
+ * emacs/texinfmt.el (texinfo-format-center): Expand string before
+ centering so @-commands not included.
+
+Thu Oct 10 22:01:47 1991 Robert J. Chassell (bob at kropotki)
+
+ * emacs/texnfo-tex.el (texinfo-show-tex-print-queue): Do not kill a
+ running process; do start a process none exists.
+
+Thu Sep 26 21:58:47 1991 Robert J. Chassell (bob at kropotki)
+
+ * util/texi2dvi: Misc. bugs fixed.
+
+ * emacs/texinfo.el: Remove extraneous references to TeX.
+
+Thu Sep 19 20:45:29 1991 Robert J. Chassell (bob at kropotki)
+
+ * emacs/texinfmt.el: add @cartouche as a noop (makes box with rounded
+ corners in TeX)
+
+Tue Sep 10 20:44:57 1991 Robert J. Chassell (bob at grackle)
+
+ * emacs/texnfo-upd.el (texinfo-make-one-menu): Copy node-name correctly
+ for message.
+
+Thu Aug 29 17:54:07 1991 Robert J. Chassell (bob at kropotki)
+
+ * emacs/texnfo-tex.el (texinfo-quit-tex-job): Do not set mark.
+
+Wed Aug 21 10:36:21 1991 Robert J. Chassell (bob at grackle)
+
+ * emacs/texnfo-upd.el: (texinfo-copy-menu-title): Copy title as it
+ should rather than node line.
+
+Mon Aug 5 15:27:12 1991 Robert J. Chassell (bob at grackle)
+
+ * emacs/texinfmt.el (texinfo-format-convert): Changed regexp that
+ looks for three hyphens in a row to find those between word
+ constituent characters, as now, for Oxford Univ. style dashes and
+ also between spaces, for Cambridge Univ. Press style dashes.
+
+ * emacs/texnfo-tex.el (texinfo-tex-start-shell): Runs "/bin/sh" so
+ `explicit-shell-file-name' is not set globally.
+
+ * emacs/texnfo-upd.el: Rewrite messages.
+ (texinfo-find-higher-level-node): Stop search at limit.
+ (texinfo-copy-menu-title): Rewrite to handle outer include files.
+ (texinfo-multi-file-update): Update all nodes properly;
+ rewrite doc string and interactive.
+
+Sat Aug 3 10:46:13 1991 Robert J. Chassell (bob at grackle)
+
+ * emacs/texnfo-upd.el (texinfo-all-menus-update): Fixed typo that
+ caused the function to create a master menu when it shouldn't.
+
+ * emacs/texinfo.el (texinfo-mode): Make `indent-tabs-mode' a local
+ variable and set to nil to prevent TABs troubles with TeX.
+
+Wed Jul 31 11:07:08 1991 Robert J. Chassell (bob at grackle)
+
+ * emacs/texnfo-tex.el (texinfo-quit-tex-job): New function: quit
+ currently running TeX job, by sending an `x' to it.
+ (texinfo-tex-shell-sentinel): New function to
+ restart texinfo-tex-shell after it is killed.
+ (texinfo-kill-tex-job): Rewrite to use kill-process rather than
+ quit-process; uses `texinfo-tex-shell-sentinel' to restart
+ texinfo-tex-shell after it is killed.
+ (texinfo-tex-region, texinfo-tex-buffer): Replace
+ texinfo-kill-tex-job with quit-process.
+
+ * emacs/texinfo.el (texinfo-define-common-keys): Add keybinding for
+ texinfo-quit-tex-job
+
+Wed Jul 10 15:15:03 1991 Robert J. Chassell (bob at grackle)
+
+ * emacs/texinfmt.el: New commands @set, @clear, @ifset...@end
+ ifset, and @ifclear...@end ifclear.
+ Definition functions rewritten to make them easier to
+ maintain.
+
+Wed Jul 3 19:37:04 1991 Robert J. Chassell (bob at kropotki)
+
+ * emacs/texinfmt.el (texinfo-format-deftypefn-index): Remove reference
+ to data-type to make consistent with texinfo.tex and makeinfo.
+ texinfo.el: Fix page-delimiter and texinfo-chapter-level-regexp
+ variables.
+
+Thu Jun 27 18:35:36 1991 Robert J. Chassell (bob at nutrimat)
+
+ * emacs/texinfmt.el: Add @dmn as `texinfo-format-noop'.
+ texinfo2.texi: Document @dmn.
+ texinfmt.el (texinfo{,-end}-{eleterate,ecapitate} renamed
+ {alphaenumerate, capsenumerate}.
+
+Fri Jun 14 12:46:32 1991 Robert J. Chassell (bob at churchy.gnu.ai.mit.edu)
+
+ * emacs/texinfmt.el (texinfo-format-defun-1): @defivar prints name
+ correctly.
+
+Thu Jun 6 21:38:33 1991 Robert J. Chassell (bob at churchy.gnu.ai.mit.edu)
+
+ * emacs/texinfo.el (texinfo-mode): Set page delimiter to
+ 'texinfo-chapter-level-regexp' so that page commands work by
+ chapter or equivalent.
+
+ * emacs/texinfmt.el (texinfo-format-defun-1): @defop prints name
+ correctly.
+ (batch-texinfo-format): replace unsupported
+ 'buffer-disable-undo' with 'buffer-flush-undo'
+
+Fri Apr 5 15:17:17 1991 Robert J. Chassell (bob at wookumz.gnu.ai.mit.edu)
+
+ * emacs/makeinfo.el (makeinfo-compilation-sentinel): Check for
+ existance of makeinfo-temp-file to avoid harmless error message.
+ texinfo2.texi: Minor typos fixed.
+
+Thu Mar 28 19:13:24 1991 Robert J. Chassell (bob at pogo.gnu.ai.mit.edu)
+
+ * util/texi2dvi: Revised.
+
+Mon Mar 11 12:35:51 1991 Robert J. Chassell (bob at grackle)
+
+ * emacs/texinfmt.el: (@footnotestyle): New command to set
+ footnotestyle.
+ (@paragraphindent): New command to set indentation.
+ (texinfo-format-refill): Add indentation feature so as to
+ indent paragraph or leave indentation asis before refilling
+ according to value set by @paragraphindent command.
+ (texinfo-format-region): Insert header, if any, into Info buffer.
+ (texinfo-format-separate-node, texinfo-format-end-node): Run
+ texinfo-format-scan on footnote text only once.
+ (texinfo-format-scan): Shorten `---' to `--'.
+
+ * emacs/texinfo.el: Define key for `texinfo-master-menu'; define
+ start and end of header expressions.
+
+ * emacs/texnfo-upd.el (texinfo-all-menus-update): Update
+ pre-existing master menu, if there is one.
+
+Fri May 11 14:36:07 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * util/texindex.c: Rename `lines' to `nlines'.
+ (bzero): Pass arg to lib$movc5 through non-register var.
+ (perror_with_file, pfatal_with_file): Move extern decls and includes
+ to top of file.
+ [VMS]: If not using VMS C, define away `noshare' keyword.
+ Include perror.h.
+
+Mon Jul 11 18:02:29 1988 Chris Hanson (cph at kleph)
+
+ * util/texindex.c (indexify): when comparing to initial strings to
+ decide whether to change the header, must use `strncmp' to avoid
+ comparing entire strings of which initials are a substring.
+
+Sun Jun 26 18:46:16 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * util/texindex.c (sort_in_core, sort_offline, parsefile):
+ Give up on input file if any line doesn't start with backslash.
+
+/* changelog for texinfo.tex before 19jun01. */
+
+2001-05-24 <karl@gnu.org>
+
+ * texinfo.tex (\smallbreak, \medbreak, \bigbreak): add check for
+ \ifnum\lastpenalty to plain tex definitions, so that we won't
+ insert space right after a section title.
+ (\aboveenvbreak): similar check of \lastpenalty.
+
+2001-05-21 <karl@gnu.org>
+
+ * texinfo.tex (\pdfurl): \let\value=\expandablevalue, so at least
+ some cases can be properly handled.
+
+2001-03-28 <karl@gnu.org>
+
+ * texinfo.tex: Copyright.
+
+ * texinfo.tex (\pdfmkdest): remove trailing @ in target names;
+ suggestion from: Reiner Schlotte <R.Schlotte@science-computing.de>.
+ (\imagexxx): call \normalturnoffactive so _ (among others) will be
+ allowed in filenames; report from arnold@skeeve.com.
+
+2001-02-02 <karl@gnu.org>
+
+ * texinfo.tex (\secondary): handle pdf case.
+ (\dosubind): secondary index entry not written as separate arg for
+ texindex.
+ From: Trevin Beattie <trevin@eyring.com>
+ Date: Tue, 21 Mar 2000 13:04:06 -0700
+
+2001-01-12 <karl@gnu.org>
+
+ * texinfo.tex (\dopdfimage): different syntax for filename
+ inclusion (foo vs {foo}). From: <Kurt.Hornik@ci.tuwien.ac.at>,
+ 22dec99.
+
+2001-01-08 <karl@gnu.org>
+
+ * texinfo.tex (\afivepaper): new command from Jose Romildo
+ Malaquias <romildo@urano.iceb.ufop.br>.
+
+2000-12-12 <karl@gnu.org>
+
+ * texinfo.tex: oops, had outside page reversed.
+
+2000-12-11 <karl@gnu.org>
+
+ * texinfo.tex (\inmargin): allow lefttext and righttext as args.
+
+2000-11-10 <karl@gnu.org>
+
+ * texinfo.tex: implementation of new commands @verbatim, @verb,
+ and @verbatiminclude from janneke@gnu.org.
+
+2000-11-09 <karl@gnu.org>
+
+ * texinfo.tex (\inmargin): rewrite to allow for placing the
+ material either in the right or left margin.
+
+2000-10-27 <karl@gnu.org>
+
+ * texinfo.tex (\dosynindex): new macro subroutine, do not
+ \closeout twice the index being redirected.
+ (\synindex, \syncodeindex): call it.
+
+2000-10-18 <karl@gnu.org>
+
+ * texinfo.tex (\inmargin): rewrite to allow argument to be vmode
+ material, such as a box from an image.
+
+2000-09-06 <karl@gnu.org>
+
+ * texinfo.tex (\doublecolumnout): must subtract \ht\partialpage
+ here, not in \begindoublecolumns. Otherwise the \partialpage on
+ the first page of double columns affects every subsequent page,
+ e.g., if @setchapternewpage off. Reported by Aharon Robbins
+ <arnold@skeeve.com> for standards.texi.
+
+2000-05-28 <karl@gnu.org>
+
+ * texinfo.tex (\linkcolor): replace Cyan with Blue.
+ (\output): do \pdfmkdest at top.
+ (\pdfmakeoutlines): set \_ to \normalunderscore.
+ From: Trevin Beattie <trevin@eyring.com>.
+
+2000-05-27 <karl@gnu.org>
+
+ * texinfo.tex (\today): only define if undefined.
+ From: Stepan Kasal <kasal@suse.cz>.
+
+2000-05-16 <karl@gnu.org>
+
+ * texinfo.tex (\deftypeivarheader): need defheaderxcond. From:
+ Marcel van der Boom <marcel@hsdev.com>.
+
+1999-10-01 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\afourwide): had hsize and vsize reversed.
+ From: Pascal Obry <pascal_obry@csi.com>
+
+1999-09-25 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\alias): fix from Andreas.
+
+1999-09-19 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\key): rename the \smallrm and \smallsy here.
+
+ * texinfo.tex (\indexfonts): rename to \smallfonts, along with
+ \indrm, etc.
+ Define all the fonts, too.
+ (\footnotezzz): use \smallfonts.
+
+ * texinfo.tex (\needx): get better leading; do nothing if @need
+ value is less than one linespace. From Arnold.
+ (\douref, \xrefX, \doemail [pdf]): make spaces normal again, so our
+ \ignorespaces commands are effective even in an @display.
+
+ * texinfo.tex (\finishtitlepage): remove FINISH TITLE debugging
+ message.
+
+ * texinfo.tex (\anchor): rewrite to always \ignorespaces.
+ Bug from esken.
+
+ * texinfo.tex (\indexnofonts): dummy up \acronym.
+ From: Thomas Esken <esken@nmlab.informatik.fh-dortmund.de>
+
+1999-09-06 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\texinfoversion): update.
+
+ * texinfo.tex: Avoid multiparagraph cells losing linespace between
+ paragraphs. From: Andreas Schwab <schwab@suse.de>.
+ Bug from: Lalo Martins <lalo@webcom.com>.
+
+1999-08-19 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\shortchaplabel): move computation of width of
+ "Appendix" inside, in case it's been changed by a language.
+
+Mon Aug 9 16:31:55 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex: pdf updates from Han.
+
+Fri Aug 6 13:48:22 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\charcode): remove unused counter.
+ From: Akira KAKUTO <kakuto@fsci.fuk.kindai.ac.jp>.
+
+Thu Jul 22 19:08:19 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex: Update from Han.
+
+Tue Jul 20 17:13:16 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex: More pdf improvements from Han.
+
+Mon Jul 19 16:33:31 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex: Better pdf support from: Han The Thanh
+ <thanh@informatics.muni.cz>.
+
+Sun Jul 18 14:21:03 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex: pdfimage takes braces.
+
+Tue Jul 6 19:40:14 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\deftypeop): New command.
+
+Mon Jul 5 17:17:33 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\contents): call \pdfmakeoutlines here instead of
+ inline (!).
+ (\pdfmakeoutlines): call \indexnofonts instead of making a separate
+ attempt at it.
+
+Tue May 25 06:16:06 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (time-stamp-format): use %02H.
+
+ * texinfo.tex: Had PDF and DVI transposed.
+
+Sun Apr 25 15:30:00 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\appendixletter): restore \the, necessary for .toc.
+
+Thu Apr 22 19:22:12 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\emergencystretch): Increase to .15\hsize.
+
+Tue Apr 20 05:11:04 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\defunargs): use \tensl\hyphenchar\font to work
+ better with Gildea's PostScript version.
+
+ * texinfo.tex (\tab): Change back to just &.
+ From: Nathan Sidwell <nathan@acm.org>.
+
+ * texinfo.tex: No \fi.
+
+Mon Apr 19 17:38:54 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\pdflink) [!\ifpdf]: define to ignore arg.
+
+ * texinfo.tex: Add pdf support. Merge from: Kurt Hornik
+ <Kurt.Hornik@ci.tuwien.ac.at>.
+
+Wed Mar 31 13:24:16 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\defopheader): missing word space before `on'.
+ Report from: Chris Hanson <cph@martigny.ai.mit.edu>.
+
+Fri Mar 26 17:00:41 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\imagexxx): Equalize space above and below if in
+ vmode. From rms.
+
+Thu Mar 25 20:00:00 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\deftypeivar): new command.
+
+Tue Mar 23 17:53:37 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (&): be sure active & is defined for @deftypefn
+ operator&.
+ Report from: Nathan Sidwell <nathan@acm.org>.
+
+Sat Mar 20 12:31:53 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\exampleindent): new command. From Yoshiki.
+
+ * texinfo.tex: Changes from Andreas to use \sl\$ inside italics
+ and to avoid extra spaces around @anchor.
+
+ * texinfo.tex (\image, \imagexx): move pdf test to imagexxx for
+ correct filename parsing.
+
+Mon Mar 15 16:51:20 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\imagexxx): reset catcode ^^M in case we're inside
+ in an example. Report from kama.
+
+ * texinfo.tex (\putwordin): new macro for word `in'.
+ (\xrefX): use it.
+ Report from: "Alexey A. Nikiforov" <A.A.Nikiforov@inp.nsk.su>
+
+Sun Feb 21 16:47:28 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex: Expand tabs.
+
+Sun Feb 14 16:02:29 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\paragraphindent): implement.
+ Suggestion from: Paul DuBois <dubois@primate.wisc.edu>.
+
+Tue Feb 9 07:25:07 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\alias): use def rather than \let.
+ Change timestamp format to include hours.
+
+ * texinfo.tex: New commands @alias and @definfoenclose.
+ From: "Eric S. Raymond" <esr@snark.thyrsus.com>.
+
+Mon Feb 8 14:46:56 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\scanmacro): Use \endinput to avoid spurious space,
+ and various other space fixes. From: Andreas Schwab
+ <schwab@ls5.informatik.uni-dortmund.de>.
+
+Thu Feb 4 15:24:40 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\uref): implement optional third arg.
+
+ * texinfo.tex (\dosubind): Include index entry in third arg to
+ \entry instead of writing as bogus fourth arg.
+ Report from: kama@hippo.fido.de (Karl Heinz Marbaise).
+
+ * texinfo.tex (\setemergencystretch): Increase somewhat.
+
+ * texinfo.tex (\putwordof): rename from \putwordOf.
+ * texinfo.tex (defivarhead, \defcvarheader): Use \putwordof.
+
+Tue Feb 2 16:57:00 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\documentlanguage, \documentencoding): new
+ commands. \documentlanguage based on an implementation by kama.
+
+Sat Jan 30 17:23:45 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\putwordMMai): Should be MMay. From Trond.
+
+Fri Jan 29 17:52:16 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex: Fix @macro expansion inside @section. Patch from
+ Andreas:
+
+ From: Andreas Schwab <schwab@ls5.informatik.uni-dortmund.de>
+
+ The general idea is to construct a list a all defined macros in
+ the form \do\macro1\do\macro2..., then temporarily define
+ \do to something appropriate and execute the list to do
+ whatever is needed. Here is a patch, and i have also
+ fixed a few other bugs that i found while browsing through
+ the @macro implementation. Additionally i have added a
+ check to prevent the user from doing silly things like
+ @macro shipout.
+
+Sun Jan 24 09:59:42 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\obstexwarn): Don't use *** in message, it
+ interferes with make output parsing.
+
+Thu Jan 21 15:45:20 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex: Internationalization improvements from kama.
+
+Wed Jan 20 17:12:52 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\contents, \shortcontents): Run \contentspagealignmacro.
+ From: Trond Endrestol <trond@agamemnon.gtf.ol.no>
+
+Thu Jan 14 16:53:43 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\begindoublecolumns): Ship out \partialpage
+ immediately if it is nonvoid, instead of saving it. This avoids a
+ bug where the index could end up printing one line per page (see
+ the indexspread.tex test).
+ From: Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * texinfo.tex (\image): If running pdftex, do \pdfimage{imagefile.pdf}.
+ From: Samuel Tardieu <sam@inf.enst.fr>
+
+ Also, update copyright year.
+
+Tue Jan 5 17:50:45 1999 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\enddoublecolumns): Move \pagegoal reset to after
+ the \endgroup so we get the restored single-column \vsize
+ as intended.
+
+Sun Dec 20 17:57:22 1998 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\indexdummies): Set \{ and \} to \mylbrace and
+ \mybrace to avoid braces in the index file, which
+ texindex can't handle.
+
+Sat Dec 19 18:13:16 1998 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\pickupwholefraction): Ignore whole-number part.
+ (\setuptable): Always pass whole-number part and decimal point. This
+ allows leading zeroes.
+ Suggestion from: Ben Bullock <ben@hayamasa.demon.co.uk>.
+ Date: Fri, 21 Aug 1998 14:06:50 +0100 (BST)
+
+Tue Dec 15 16:38:07 1998 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\indexdummies): set \{ and \} to \lbracecmd and
+ \rbracecmd to avoid lossage if @tex is active during \shipout.
+ Report from: "Peter Kabal" <Kabal@ece.mcgill.ca>.
+
+Sun Dec 6 17:11:17 1998 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex: Doc fix.
+
+1998-11-11 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
+
+ * doc/texinfo.tex (\onepageout): Put the cropmarks in vboxes of
+ zero height so that they don't contribute space themselves.
+ Compensate for \topandbottommargin.
+ (\internalpagesizes): Advance \outervsize by 2\topandbottommargin,
+ not only 0.6in.
+
+Fri Nov 6 17:27:57 1998 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex: Use standard time-stamp.el package instead of
+ update-date.el.
+
+Sat Oct 31 19:23:02 1998 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\indexnofonts,\indexdummies): add \url and \uref to
+ list.
+
+Fri Oct 30 08:16:23 1998 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\expandablevalue): Delete spurious `v' character.
+
+Tue Oct 27 11:18:40 1998 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (@env, @command, @option): Must disable for index
+ and xref commands. Also, \input plain if necessary before
+ using {} in the version number.
+
+Wed Sep 30 11:40:36 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex: Use date as version number instead of RCS, and
+ update-date to update it.
+
+Thu Sep 17 13:22:44 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex: Fix @macro expansion of @code with _ in the
+ argument.
+ From: Zack Weinberg <zack@rabi.columbia.edu>.
+
+Fri Aug 28 10:30:29 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\itemzzz): take \itemmargin into account when
+ unhboxing. Reported by Bob.
+
+Fri Aug 14 16:56:58 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex: Change @defun environments so that right margin is
+ not changed, and instead the defun type label is outdented
+ into the margin.
+
+Thu Aug 13 13:31:41 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\smartslanted): define this separately from
+ \smartitalic.
+ (\emph, \i): use \smartitalic for true italics.
+
+Mon Aug 10 11:51:13 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\value): handle active _ or - in argument (happens
+ if called from @code).
+ Report from: Dave Love <d.love@dl.ac.uk>.
+
+Sun Jul 19 09:49:23 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\dosubind): Don't do \vskip to preserve \lastskip
+ unless we are in vertical mode. Otherwise we might end a
+ paragraph prematurely, and \folio won't get expanded by
+ \output.
+ Report from: "Richard E. Stone" <res@rstone.mn.org>
+
+Thu Jul 16 15:33:37 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex: Keep track of how negative the page numbers have
+ gotten:
+ (\lastnegativepageno): New \count register.
+ (\startcontents): Use it.
+ (\contents, \summarycontents): set it.
+
+Mon Jul 13 16:58:11 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\imagexxx): Add some space around the image if it's
+ by itself.
+
+1998-07-09 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * texinfo.tex (chapterzzz): Put a space before the chapter number
+ in the message.
+ (appendixzzz): Use \putwordAppendix in the message.
+
+Thu Jul 9 08:39:53 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\macro): Globalize assignments since it's done
+ inside a group. From Zack.
+
+Mon Jul 6 17:21:25 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\comment): Speed up.
+ (\loggingall): Turn on eTeX's extended tracing.
+ More macro fixes.
+ Date: Sat, 04 Jul 1998 14:51:49 -0400
+ From: Zack Weinberg <zack@rabi.phys.columbia.edu>
+
+Thu Jul 2 10:20:32 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\contents, \summarycontents, \startcontents): Use
+ roman numerals for toc, arabic outside, even when toc is
+ at the beginning.
+
+Mon Jun 29 10:05:28 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\anchor): New command @anchor.
+ (\xrefX): Avoid double space when xref to an @anchor or an @unnumbered.
+
+ * texinfo.tex (\itemzzz): Use kerns and \unhbox when item text
+ fits in the space, so footnotes can work.
+
+ * texinfo.tex (\setref): Take additional argument for the -snt
+ xref. Call \indexdummies.
+ (\donoderef, \appendixnoderef, \unnumbnoderef): Change \setref calls.
+
+Sat Jun 27 19:16:34 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\contents, \summarycontents): Must not be \outer.
+
+Fri Jun 26 16:15:14 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\writetocentry): New macro.
+ (\chapternofonts): No longer needed.
+ (\chapter, ..., \unnumberedsubsubsec): Change all the sectioning
+ commands to call \writetocentry instead of doing it inline.
+ Also, do not call \chapternofonts, we avoid expansion with
+ \the\toks instead.
+ (\opencontents): No longer needed, instead \writetocentry opens
+ the file when necessary.
+ (\setfilename): Don't call \opencontents.
+ (\ifsetcontentsaftertitlepage, \ifsetshortcontentsaftertitlepage):
+ New conditionals.
+ (\Etitlepage): Call \contents and/or \shortcontents if
+ conditionals are set.
+
+ Global: use \nobreak instead of \penalty 10000 for epsilon efficiency.
+
+Thu Jun 25 08:29:32 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\option,\env,\command): New markup commands.
+ Suggested by arnold@gnu.org.
+
+ * texinfo.tex (\afourpaper): More reasonable margins.
+ From: Wilhelm Mueller <muewi@hb.senbvs43.uni-bremen.de>
+ Date: Thu, 25 Jun 1998 10:48:13 +0200 (MET DST)
+
+Wed Jun 24 17:46:43 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\acronym): New Texinfo command.
+
+Tue Jun 23 17:36:39 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\dots, \enddots): Missing \leavevmode.
+ Report from: Thomas Esken <esken@nmlab.informatik.fh-dortmund.de>
+ Date: Tue, 23 Jun 1998 14:22:27 +0200 (MET DST)
+
+Mon Jun 22 16:00:53 1998 Karl Berry <karl@north>
+
+ * texinfo.tex: Rewrite of index stuff to do better column breaking
+ and balancing.
+ The old code failed miserably when the index was just the wrong size,
+ e.g., the Autoconf manual with @afourpaper.
+ Bug report from: Wilhelm Mueller <muewi@hb.senbvs43.uni-bremen.de>
+ Date: Fri, 12 Jun 1998 16:34:49 +0200 (MET DST)
+ (\initial): Add more glue around the initial, and make it a
+ multiple of \baselineskip.
+ (\entry): Add glue before each entry so the columns can always be the
+ same height.
+ (\doublecolumnout): Available space no longer needs to handle
+ \partialpage specially.
+ (\pagesofar): Take \ht\partialpage into account with \vsize.
+ (\enddoublecolumns): Reset \output to avoid calling
+ \balancecolumns twice
+ (\balancecolumns): Format for readability.
+ (\initialskipamount): No longer needed, remove.
+
+ (\hbadness): Increase a bit, boxes that are a little underfull look ok.
+
+Sun Jun 21 16:48:38 1998 Karl Berry <karl@north>
+
+ * texinfo.tex (\ninettsl): cmsltt10 is not standard, so use
+ cmsltt10 scaled 900.
+ Date: Mon, 15 Jun 1998 12:35:41 +0200 (MET DST)
+ From: Werner Struckmann <struck@ips.cs.tu-bs.de>.
+
+Thu Jun 18 08:32:15 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex: @macro fixes from Zack Weinberg
+ <zack@rabi.phys.columbia.edu>.
+ - @ifblah did not work inside @macro
+ - spaces in parameter lists in macro definitions caused errors
+ - leading spaces in parameter lists in macro invocations were
+ preserved inappropriately.
+
+Wed Jun 10 16:50:53 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\smallformatx, \smalldisplayx): New macros.
+ (\smallbook): Arrange to use them.
+ (\display, \flushleft, etc.): Rewrite to avoid duplication.
+
+Sun Jun 7 18:13:45 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\pagesizes): Rename to \internalpagesizes.
+ (\custompaper): Rename to \pagesizes.
+
+Sat Jun 6 13:16:32 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex: Rewrite paper size definitions, add @custompaper.
+
+ * texinfo.tex: Fix for macros in arguments to other commands.
+ From Zack.
+
+Thu Jun 4 11:21:07 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex: Better @macro implementation.
+ From: Zack Weinberg <zack@rabi.phys.columbia.edu>.
+
+Tue May 26 17:43:21 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\imagexxx): Center image if it is not part of a
+ paragraph.
+
+Tue May 19 17:17:12 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex: \linkstrue by default.
+ Also, first implementation of @macro; can only handle some cases,
+ but that is better than nothing.
+ From: Zack Weinberg <zack@rabi.phys.columbia.edu>
+
+Thu May 14 17:32:47 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex: New command @novalidate along the lines of makeinfo
+ --no-validate.
+ Date: Sun, 26 Oct 1997 18:54:47 -0500
+ From: Zack Weinberg <zack@rabi.phys.columbia.edu>
+
+Tue May 12 16:19:35 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\valuexxx): Split up into expandable and
+ non-expandable parts.
+ (\expandablevalue): New macro.
+ (\indexdummies): \let\value = \expandable value.
+
+ * texinfo.tex: Doc fixes.
+
+ * texinfo.tex (\doind): Just call \dosubind with empty third arg.
+ (\dosubind): Replace with \doind definition and suitable code to handle
+ possible third arg. And propagate glue past the whatsit from the
+ \write so index entries don't cause extra space between
+ @defuns (for example).
+
+Wed May 6 12:51:27 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\deftypemethparsebody): Handle the extra arg in
+ @deftypemethodx, too.
+ (\deftypefunx): Error definition was misspelled as \deftypeunx.
+
+Fri May 1 17:31:58 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo/texinfo.tex (\putwordon, \putwordMethodon): New macros.
+ Use in \def... commands.
+ (\indexdummies): make `\ ' be just ` ' for sorting.
+ (\deftypemethparsebody): New macro.
+ (\defmethod): Call it.
+ Various doc fixes.
+ Repored by: KHMarbaise@p69.ks.fido.de (Karl Heinz Marbaise)
+ Date: Wed, 07 Jan 1998 10:19:42 +0100
+
+Fri Apr 10 16:54:48 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex: @cartouche: Align right side correctly.
+ From: dale.smith@bellhow.com (Dale Smith)
+ Date: Fri, 06 Mar 1998 14:47:02 GMT
+
+Sun Apr 5 17:19:03 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\dosetq): Use \normalturnoffactive instead of just
+ \turnoffactive, so \'s in node names are handled properly.
+ (\tie): Move definition to more rational position in the file.
+ (\@, \{, etc.): Use decimal numbers in all cases, to avoid use of '.
+ Paranoia only.
+ (\+): Turn off once and for all at the beginning, and define as
+ \tabalign in @tex.
+
+Tue Mar 31 19:33:31 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\synindex, \syncodeindex): \closeout the redirected
+ index.
+ From: Jakob Stoklund Olesen <stoklund@mi.aau.dk>
+
+ * texinfo.tex (\doignore): Ignore everything after `c', so @end
+ ifinfo and the like can be commented out.
+ (\macrocsname): New macro.
+ Reported by: "James A. Lupo" <lupoja@feynman.ml.wpafb.af.mil>
+
+Wed Feb 25 15:48:51 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\doprintindex): Change catcode of @ before \read,
+ in case of \initial{@} being the line that is read.
+ Reported by: Drew Csillag <drew_csillag@geocities.com>
+
+ * texinfo.tex (\dotable): Add \leftskip to \hsize in the first column.
+ Don't inherit \rightskip from surrounding environment.
+ Set \item to \crcr to avoid empty first row.
+ Prepend \parskip glue before table.
+ Set \everycr locally outside of alignment, don't reset it
+ explicitly in \Emultitable.
+ All from Andreas Schwab, to avoid overfull hboxes.
+
+ Also, work on leading commentary in file a bit.
+
+Tue Feb 24 17:48:29 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex: \!: Save and restore this for @tex.
+ From: Jean-Pierre Moreau <jpmoreau@ciframedical.com>
+ Date: Fri, 22 Aug 1997 16:47:36 -0400
+
+ * texinfo.tex (\angleleft, \angleright): New macros.
+ (\refx, \email, \key): Use them.
+ From: Stephen Gildea <gildea@intouchsys.com>
+ Date: Fri, 26 Dec 1997 11:43:32 EST
+
+Mon Feb 23 17:34:23 1998 Karl Berry <karl@cs.umb.edu>
+
+ 1997-08-28 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+ * doc/texinfo.tex (xrdef): Read the second argument with \
+ as an escape character.
+
+1998-01-22 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * texinfo.tex (\tocentry): Don't \turnoffactive before typesetting
+ the arguments, it causes special characters to be printed
+ incorrectly.
+
+Mon Jan 19 10:58:25 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texi2html: Correct version number, home page reference.
+
+Sat Jan 17 15:12:03 1998 Karl Berry <karl@cs.umb.edu>
+
+ * texi2html: Version 1.54. Handle @image better, etc.
+ * From: Bob Friesenhahn <bfriesen@simple.dallas.tx.us>.
+
+Wed Dec 24 13:59:07 1997 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\dots, \enddots): Use current font instead of
+ always using math italic. From Stephen Gildea.
+
+Tue Dec 23 11:33:07 1997 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex: Spurious xepsf.tex should be epsf.tex.
+
+Mon Oct 13 15:49:28 1997 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\titlefont): Explicitly set \rm.
+
+Sat Jul 26 15:12:37 1997 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\email): Let to \uref instead of \code, as a second
+ optional argument makes sense for this, too.
+
+Mon Jul 14 13:43:43 1997 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\indexdummies): Add \value.
+
+Thu Jul 10 13:34:30 1997 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\authorrm): Must use \def instead of \let, as
+ \secrm is not yet defined.
+
+1997-07-09 Richard Stallman <rms@psilocin.gnu.ai.mit.edu>
+
+ * texinfo.tex (\titlefont): Define again, using \titlefonts.
+
+Wed Jul 9 16:45:30 1997 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\startcontents): Leave ^ catcode as other.
+
+Sat Jul 5 17:16:40 1997 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\titlefonts): New macro to set title font styles,
+ so italic etc. work in @title.
+ (\titlefont): No longer needed.
+ (\titlepage): Call \titlefonts instead of \titlefont.
+ (\chapsf, \ssecsy, \ssecttsl): Correct magstep values.
+ From: Stephen Gildea <gildea@intouchsys.com>.
+
+ * texinfo.tex (\onepageout): Back up to 2\baselineskip per Stephen.
+ (\kbdinputstyle): New command.
+
+1997-04-03 00:07:28 1997 Richard Stallman <rms@gnu.ai.mit.edu>
+
+ * texinfo.tex (\kbdfont, \kbdexamplefont): New macros, parms that
+ tell @@kbd what to do.
+ (\setkbdinputdistinct, \setkbdinputexample): New commands set them.
+ (\kbd): Use those parms.
+
+Thu Jul 3 16:52:39 1997 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\onepageout): Leave only one line space above the
+ footline, to be more like plain. Suggested by Stephen Gildea.
+ (\evenfootline): Left one too many line spaces here, so reduce by two.
+
+ (\ifnottex): Another ignore command.
+ (\ifnothtml,\ifnotinfo): New commands.
+ (\doignore): Ignore brace characters, so mismatched braces in ignored
+ text do not cause complaints.
+
+Fri Jun 27 15:09:16 1997 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\image): New definition for new @image command.
+
+Wed Jun 18 15:58:20 1997 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\oddfootingxxx),
+ (\onepageout): Leave space for the footline if present.
+ (\everyfootingxxx, \everyheadingxxx): Call \oddfootingxxx and
+ \evenfootingxxx instead of repeating their code. From: Stephen
+ Gildea <gildea@intouchsys.com>.
+
+ (\setfilename): Read texinfo.cnf if present.
+
+ (\indexdummies, \indexnofonts): No-op additional commands @result @equiv
+ @expansion @print @error @point. From: Dave Bodenstab
+ <imdave@ais.net> (for texi2www doc).
+
+Fri Jun 6 10:31:34 1997 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\setmultitablespacing): Restore bad typing mistake
+ from yesterday.
+
+Thu Jun 5 18:04:26 1997 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\uref): Write real definition, taking one mandatory
+ argument and one optional one.
+
+Wed Jun 4 17:16:09 1997 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\mainmagstep): Define this as a \count variable
+ instead of with \let, to make changing to \magstep1 more transparent.
+ From: HERBERT@boevm4.vnet.ibm.com.
+ (\uref): New command a la \url.
+
+Sat May 24 18:06:41 1997 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\deftypemethod, \deftypemethodheader): New macros
+ to implement new commands @deftypemethod and @deftypemethodx.
+ Suggestion from: KHMarbaise@p69.ks.fido.de (Karl Heinz Marbaise).
+
+Wed May 21 17:17:52 1997 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\opnr, \clnr): Increment/decrement \parencount, for
+ @defun lines with nested parens. From Bill Schelter
+ <wfs@fireant.ma.utexas.edu>.
+ (\itemizeitem): Correct \errmessage.
+
+Mon May 19 17:34:40 1997 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\codeunder): Use \_ and \ifusingtt to avoid
+ dotaccent from _ in roman fonts, e.g., @deftypefn.
+ (\tex): Remove spurious spaces at the end of subdefinitions.
+ From: "John W. Eaton" <jwe@bevo.che.wisc.edu>.
+ (\url, \email): \let to \code; no quotes or angle brackets.
+
+Mon May 5 17:06:35 1997 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\onepageout): \ifcropmarks, center the page body.
+ Lost this when merged \croppageout with \onepageout. Found by
+ Arnold.
+
+ (\doprintindex): Do not bother to go into double column mode unless
+ there actually is a non-empty index.
+
+ (\begindoublecolumns): Include any existing \partialpage in the new one,
+ lest we lose a whole page of output. Found by M J Morley
+ <mjm@scs.leeds.ac.uk>.
+
+ (\chapternofonts): Remove spurious spaces, both in the definitions that
+ get output to the aux file(s) and in this macro.
+
+ Fix comments and rationalize whitespace in various other places.
+
+Sun Apr 27 15:41:16 1997 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\chapter, etc.): Avoid expansion of section title
+ when writing the toc.
+
+Thu Apr 24 16:35:46 1997 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\onepageout): Integrate cropmarks case here,
+ instead of having a completely different routine.
+ (\croppageout): Remove this.
+
+Sun Jun 9 14:26:42 1996 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\ignoremorecommands): Ignore \defcodeindex, and do
+ not ignore \message.
+
+Thu Apr 11 12:59:42 1996 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * texinfo.tex (\macro): New macro.
+ (\enddots, \endldots): New macros.
+ (\centerchap, \centerchapyyy): New macros.
+ (\centerchfplain, \centerchfopen): New macros.
+ (\CHAPFplain, \CHAPFopen): Set \centerchapmacro.
+
+Wed Mar 13 11:42:17 1996 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\url): New macro, like \samp for now.
+
+Sun Mar 10 13:05:08 1996 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * texinfo.tex: Changes in @multitable code.
+ Change meaning of @multitablelinespace.
+
+Tue Mar 5 18:56:08 1996 Dave Love <d.love@dl.ac.uk>
+
+ * texinfo.tex (\set): Set catcode of space explicitly (inside a
+ group) to avoid losing inside @example, say.
+
+Sun Mar 3 17:01:27 1996 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\itemxpar): Protect the \vskip here with \nobreak,
+ to avoid a possible page break at an @itemx.
+
+Sun Feb 25 14:53:15 1996 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\obstexwarn): Use \global to avoid ever getting the
+ warning twice.
+
+ * texinfo.tex (\include): Allow underscores and other such
+ characters we made active in the file name argument.
+
+Tue Feb 6 15:06:27 1996 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * texinfo.tex (\afourlatex): Delete the old duplicate definition
+ of \afourlatex.
+
+Sun Feb 4 15:20:16 1996 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * texinfo.tex (\tab): New definition.
+ (\setuptable): Fix previous change.
+ (\multitablecolspace): Renamed from \multitablecolmargin.
+ (\multitablelinespace): Renamed from \multitablelineskip.
+
+Fri Feb 2 02:20:16 1996 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * texinfo.tex (\multitableparskip): Renamed from \intableparskip.
+ Allocate with \newskip.
+ (\multitableparindent): Renamed from \intableparindent. Use \newskip.
+ (\multitablelineskip): Renamed from \spacebetweenlines. Use \newskip.
+ (\multitablecolmargin): Renamed from \spacebetweencols.
+ (\columnfractions): Renamed from \percentofhsize.
+ (xcolumnfractions): Renamed from \xpercentofhsize.
+
+ * texinfo.tex (\setuptable): Handle >1 digits after @percentofsize.
+ (\pickupwholepercent): New macro.
+
+Sun Jan 28 21:14:46 1996 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * texinfo.tex (\key, \kbdfoo): Use \ttsl unconditionally.
+ (\setkeyfont): Definition deleted.
+
+Tue Jan 23 14:57:23 1996 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex: @kbd within @example selects slanted tty font:
+ (\ttsl, \ttslshape): Define this new font shape.
+ (\kbdfoo): Set the font to \ttsl if already using \tt.
+ (\setkeyfont, \ifmonospace): New macros.
+
+Wed Jan 17 23:57:48 1996 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * texinfo.tex (\changepagesizes): Additional arg for topskip.
+ (\afourlatex): Total rewrite.
+ (\afourwide): Pass new arg to \changepagesizes.
+
+Wed Jan 3 17:15:00 1996 Stephen Gildea <gildea@x.org>
+
+ * texinfo.tex (\slbshape, \itbshape): Use bold slant and and
+ bold italic in titles to match the bold roman. Do not use
+ bold sf or bold tt, which would be too heavy.
+
+ * texinfo.tex (\setfont): Pass font name in more pieces.
+ (\*shape): New macros defining symbolic names for all font
+ shapes so can use other font families with different naming
+ conventions.
+
+Wed Jan 3 15:52:18 1996 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * texinfo.tex (\ignoremorecommands): Turn off @everyheading and
+ friends, @headings, @setchapternewpage, @setchapterstyle.
+
+Sat Dec 30 17:20:48 1995 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\inmargin): Don't allow a break before the vertical
+ kern. Do allow a whole paragraph of marginal text, not just one line.
+ Use \inmarginspacing.
+
+Thu Dec 28 23:22:08 1995 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * texinfo.tex (\inmargin): New command @inmargin.
+ (\dircategory): Ignore @dircategory.
+
+Tue Dec 12 17:25:36 1995 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\lvvmode): Remove this; use \leavevmode as usual,
+ so spaces/underscores at beginnings of lines inside @example work.
+ Bogus index entries should be (and now are, I think) handled in
+ other ways.
+
+Mon Nov 13 16:07:09 1995 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\xrefX): Test for xref-automatic-section-title
+ being @set correctly, and remove spurious redefinition of
+ \printednodename in that case.
+
+Mon Oct 16 15:16:34 1995 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\unsepspaces): New macro to make active space
+ expand into a normal space char in index entries.
+ (\indexdummies): Use \unsepspaces.
+
+Thu Oct 12 14:56:52 1995 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * texinfo.tex (\tie): Use \lvvmode, not \leavevmode.
+ Don't use \@M directly either.
+
+Sun Aug 27 21:17:09 1995 Paul Eggert <eggert@twinsun.com>
+
+ * texinfo.tex (\appendixsection): Fix misspelled defn.
+
+Mon Jul 31 23:57:57 1995 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * texinfo.tex (\ttfont): Don't call \nohyphenation.
+
+Sun Jul 30 18:30:47 1995 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * texinfo.tex (\tocentry): Use \turnoffactive.
+
+Sun Feb 5 05:34:13 1995 Richard Stallman <rms@pogo.gnu.ai.mit.edu>
+
+ * texinfo.tex (\boldbraxnoamp): New function.
+ (\deftypefunargs): Use that, not \boldbrax.
+
+Tue Jan 31 12:15:28 1995 Karl Berry <karl@cs.umb.edu>
+
+ * texinfo.tex (\set): Use \gdef, not \xdef.
+
+Sat Jan 21 16:39:36 1995 Richard Stallman <rms@pogo.gnu.ai.mit.edu>
+
+ * texinfo.tex: Initially make _ and + \active,
+ then later make them \other.
+ (\otherifyactive): New command.
+
+Thu Jan 19 21:59:22 1995 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * texinfo.tex (\afourwide): New command.
+
+Mon Jan 16 09:29:38 1995 Stephen Gildea <gildea@x.org>
+
+ * texinfo.tex: Initially make + and _ "other" characters.
+ (\fixbackslash, \everyjob): Make + and _ active characters.
+
+Tue Jan 10 19:16:09 1995 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * texinfo.tex: At beginning, \input plain if necessary.
+ (\deftypefunargs): Use \boldbrax, not \functionparens.
+
+Sun Dec 18 16:40:11 1994 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * texinfo.tex (\indsc): Use csc10 (at 9pt), not indrm.
+
+Mon Oct 31 00:51:20 1994 Richard Stallman <rms@pogo.gnu.ai.mit.edu>
+
+ * texinfo.tex (\changepapersizes): Fix definition syntax.
+ (\fontprefix): Define only if not yet defined.
+
+ * texinfo.tex (\margin): Define a new insert.
+ (\SETmarginindex): Initialize to \relax.
+ (\doindex): Optionally put the entry in the margin.
+ (\pagecontents): Print the index entries put in the margin.
+
+Sat Oct 29 19:50:10 1994 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * texinfo.tex (\auxhat): New macro.
+ (\dosetq): Use \auxhat.
+ (reading the aux file): Give ^ catcode 7.
+
+Wed Oct 26 03:28:04 1994 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * texinfo.tex (\setfont): New macro. Use it for specifying
+ most of the fonts that are normally cm fonts.
+ (\fontprefix): New macro, normally `cm'.
+
+Mon Oct 24 01:27:09 1994 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * texinfo.tex (\startcontents): Set catcode of ^.
+
+Thu Oct 13 02:19:43 1994 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * texinfo.tex (\ifhtml, \html, \enddots, \?, \!): New commands.
+
+Fri Sep 16 16:30:52 1994 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * texinfo.tex (\defheaderxcond): New macro.
+ (\deftypefnheaderx): Use defheaderxcond when calling defname.
+ (\deftypefunheaderx, \deftypevarheader, \deftypevrheader): Likewise.
+
+Fri Aug 26 03:08:08 1994 Amy Hendickson <amyh@ai.mit.edu>
+
+ * texinfo.tex (\multitable): New command.
+
+Mon Aug 1 14:28:57 1994 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * texinfo.tex (\changepagesizes, \afourlatex): New macros.
+
+Tue Jul 12 11:45:58 1994 Karl Berry (karl@cs.umb.edu)
+
+ * texinfo.tex (\quotation): Set \parskip to zero to avoid extra
+ space below the environment.
+ (\quotation): Clean up comments and indentation.
+
+Wed Jul 13 05:36:40 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\xrefX): Put back, and correct, the test of
+ SETxref-automatic-section-title.
+
+Thu Jul 7 15:57:52 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Set catcodes of chars 128-255 to \other.
+
+Mon Jul 4 15:32:41 1994 Karl Berry (karl@cs.umb.edu)
+
+ * texinfo.tex (\tie): Set \catcode of @ to 11 before using \@M.
+
+ * texinfo.tex (\xrefX): Undo \turnoffactive while printing the node
+ name, so _ in node names doesn't come out as the dot accent.
+
+Sat Jul 2 14:49:26 1994 Karl Berry (karl@cs.umb.edu)
+
+ * texinfo.tex (\tie): Ensure we're in horizontal mode before the
+ \penalty.
+
+Tue May 10 01:21:28 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\donoderef, \unnumbnoderef, \appendixnoderef):
+ Set \lastnode globally.
+
+Sun Apr 17 15:35:43 1994 Karl Berry (karl@ra.cs.umb.edu)
+
+ * texinfo.tex (\~): Define to be a tie.
+ (\ptextilde): New defn to save the plain's tilde accent.
+ (\tex): Restore plain tilde.
+
+Sun Mar 27 23:35:17 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\smallbook): Set \defbodyindent and \deftypemargin.
+
+Sun Mar 20 19:47:59 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\xrefX): Define and use \correctnodename.
+ (@turnoffactive): Move after @ becomes available
+ and turn off backslash as well as other chars. Use @realbackslash.
+ (@normalturnoffactive): Like @turnoffactive but use @normalbackslash.
+
+Sat Mar 19 12:26:25 1994 Karl Berry (karl@cs.umb.edu)
+
+ * texinfo.tex (\singlespaceskip): Increase to 12.5pt.
+ (\singlespace): Call \setleading instead of just assigning to
+ \baselineskip, so the strut box will be reset.
+ (\smalllispx): Likewise.
+
+Sun Mar 13 20:32:28 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\dots): Change back to \ldots.
+
+Sat Mar 12 22:34:10 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\indexnofonts): Add %'s to suppress newlines after \def.
+
+Sat Feb 26 15:51:37 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\deftexinfoversion): New macro.
+ (\texinfoversion): Define using \deftexinfoversion.
+
+Wed Jan 26 12:40:52 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\putwordSee, \putwordInfo, \putwordfile)
+ (\putwordChapter, \putwordAppendix, \putwordSection)
+ (\putwordsection, \putwordpage)
+ (\putwordTableofContents, \putwordShortContents): New macros.
+ Used in various places instead of fixed words.
+
+Mon Jan 24 22:51:36 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\ignoremorecommands): Turn off @item and @message.
+
+Thu Jan 20 17:01:53 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\indexnofonts): Treat accents as dummies.
+ Turn modified European letters into one or more ordinary letters.
+
+Tue Jan 18 14:54:32 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\indexdummies): Handle tex accents and European letters.
+
+Wed Nov 24 16:11:51 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\dots): Use $\,$ for spacing.
+
+Sun Nov 21 22:16:21 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\dots): Avoid using \ldots; use periods and kern.
+ (\indexdotfill): Use italic periods.
+
+Fri Nov 19 20:50:31 1993 Roland H. Pesch (pesch@apple-gunkies.gnu.ai.mit.edu)
+
+ * texinfo.tex (\deftypefunargs): use \tclose rather than \code to
+ avoid side effects on active chars
+
+Tue Sep 28 16:01:58 1993 Roland H. Pesch (pesch@apple-gunkies.gnu.ai.mit.edu)
+
+ * texinfo.tex (\obeyedspace defn): remove blank after \sepspaces
+ (left destructive penalty in vertical list)
+
+Mon Aug 30 14:17:27 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * texinfo.tex (\setref, \unnumbsetref, \appendixsetref): Uncomment
+ \dosetq for title.
+ (\Ytitle): Define as \thissection instead of \thischapter.
+ (\xrefX): If there is no printed-title arg given, and @ifset
+ xref-automatic-section-title, try to use the real section title.
+
+Tue Jul 27 12:47:24 1993 Charles Hannym (mycroft@trinity.gnu.ai.mit.edu)
+
+ * texinfo.tex (\ifitemxneedsnegativevskip): New \if; set immediately
+ following a short \item.
+ (\itemxpar): \par and then if \ifitemxneedsnegativevskip is set, do
+ a \vskip-\parskip.
+ (\internalBitemx, \internalBxitemx, \internalBkitemx): Use \itemxpar
+ rather than \par.
+ (\itemzzz): Set \ifitemxneedsnegativevskip as appropriate.
+
+Thu Jul 22 16:08:33 1993 Charles Hannum (mycroft@trinity.gnu.ai.mit.edu)
+
+ * texinfo.tex (\titlezzz, \finishtitlepage): Explicitly make hrules
+ have a width of \hsize so they aren't too long in smallbook format.
+
+Tue Jun 29 15:56:19 1993 Roland H. Pesch (pesch@fowanton.cygnus.com)
+
+ * texinfo.tex (\deftypefnheaderx): call \normalparens to permit
+ normal typesetting of strings (e.g. for C++ docn) containing `&'
+
+Fri Jun 25 14:08:44 1993 Roland H. Pesch (pesch@fowanton.cygnus.com)
+
+ * texinfo.tex (\nestedignore): turn off \ind... fonts too
+ (primarily for use within @smallexample)
+
+Wed Jun 23 11:58:48 1993 Jim Kingdon (kingdon@wombat.gnu.ai.mit.edu)
+
+ * longopts.table: Update GDB options.
+
+Sun Jun 20 22:00:11 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * lgpl.texinfo: Use @smallexample instead of @example. Reformat
+ example disclaimer to avoid overfull \hbox.
+
+Mon Jun 14 04:09:47 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\entry): Don't make a line of dots
+ if there are no page numbers.
+
+Fri Jun 11 16:35:23 1993 Karl Berry (karl@cs.umb.edu)
+
+ * texinfo.tex (\defparsebodycommon): New macro from \defvrparsebody.
+ (\deftpparsebody): Call it; can't use \defvrparsebody.
+ (\deftpheaderline, \removeemptybraces): New macros.
+
+Sat May 8 10:49:25 1993 Karl Berry (karl@cs.umb.edu)
+
+ * texinfo.tex (\itemzzz): Only change \parskip temporarily, and
+ unskip by it later if the item text is on its own line.
+
+ * texinfo.tex (\tablez): Do \afterenvbreak before the \endgroup,
+ so the \parskip value is the table's, not the surrounding text's.
+ (\vtable, \ftable, \itemizey): Likewise.
+ Note: for most environments, \nonfillfinish deals with this.
+
+ * texinfo.tex (\smalllisp): New definition for non-small case, a
+ la @smallexample.
+
+ * texinfo.tex: Delete \message{} at beginning; it does nothing.
+
+ (These changes are all trying to make space above and below
+ environments more equal.)
+ * texinfo.tex (\singlespace): Don't insert a kern.
+ (\group): Do \offinterlineskip, and reset \par to insert a blank
+ line's worth of space.
+ (\lisppar): Delete meaningless call to \obeyspaces before making
+ the definition.
+ (\Elisp [the outer one]): Rename to \nonfillfinish, and end the
+ paragraph before the group.
+ (\lisp): Set \Elisp (the inner one) to \nonfillfinish
+ (\example, \smallexample, \display, \format, \flushleft,
+ \flushright, \quotation): Use \nonfillfinish.
+ (\lineskipfactor, \strut{height,depth}percent): Set to more exact
+ values.
+ (\setleading): Set \normallineskip and call \normalbaselines, for
+ cleanliness.
+
+Thu May 6 16:00:59 1993 Jeffrey Osier (jeffrey@deneb.cygnus.com)
+
+ * texinfo.tex (\ignoremorecommands): Turn off \set and \clear.
+
+Tue Apr 20 17:02:34 1993 Roland H. Pesch (pesch@apple-gunkies.gnu.ai.mit.edu)
+
+ * texinfo.tex (\codex): Delete space.
+
+Thu Apr 15 14:59:04 1993 Roland H. Pesch (pesch@fowanton.cygnus.com)
+
+ * texinfo.tex (\ignoremorecommands): Turn off @raisesections, @up,
+ @lowersections, @down within false conditionals.
+
+Sun Apr 18 04:33:13 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\code): Define - and _ to permit line-breaking
+ despite the fact that hyphenation is disabled.
+ (\codex, \codedash, \codeunder): New macros.
+
+Tue Mar 16 18:19:16 1993 Roland H. Pesch (pesch@fowanton.cygnus.com)
+
+ * texinfo.tex (\ignoremorecommands): Turn off @printindex within
+ false conditionals.
+
+Sun Mar 14 10:47:36 1993 Karl Berry (karl@cs.umb.edu)
+
+ * texinfo.tex (\footnote): Don't bother to take the footnote text
+ as an argument, and hence don't define as \long.
+ (\footnotezzz): Do \footstrut after we start the paragraph.
+ (Also reformat these macros to make them easier to read.)
+
+Fri Feb 26 13:02:44 1993 Roland H. Pesch (pesch@fowanton.cygnus.com)
+
+ * texinfo.tex (@include): Use \thisfile rather than #1 as \input arg.
+
+ * texinfo.tex (\readauxfile): Call \warnedobstrue to turn off warning
+ re TeX 3.0 on second and subsequent runs.
+
+Thu Feb 25 18:03:38 1993 Karl Berry (karl@cs.umb.edu)
+
+ * texinfo.tex (\realeverypar): Delete, as it was unused.
+
+ * texinfo.tex (\group): Do a \strut in \everypar.
+
+Mon Feb 22 17:10:06 1993 Karl Berry (karl@claude.cs.umb.edu)
+
+ * texinfo.tex (\obeyedspace): Define to be whatever \sepspaces
+ does (and move the definition to after \sepspaces).
+
+Wed Feb 17 01:55:20 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\nonfillstart): Do \singlespaces and \let\par
+ before \obeylines.
+
+Fri Feb 12 12:32:56 1993 Roland H. Pesch (pesch at el_bosque.cygnus.com)
+
+ * texinfo.tex (\obstexwarn): issue message re bug in TeX 3.0.
+ (\nullfont): commented-out redefinition, to enable w/TeX 3.0.
+ (\nestedignore): call \obstexwarn for manuals that may trip bug
+
+ * texinfo.tex (\nestedignore): avoid @tex contents with \doignore
+
+Thu Feb 11 15:41:06 1993 Roland H. Pesch (pesch@fowanton.cygnus.com)
+
+ * texinfo.tex (\indexdummies): enable @dfn and @emph in index entries
+
+Thu Feb 11 13:32:32 1993 Roland H. Pesch (pesch@fowanton.cygnus.com)
+
+ * texinfo.tex (\ignoremorecommands): ignore @include within
+ failing conditionals
+
+Sat Feb 6 19:44:28 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\nestedignore): Set \globaldefs--make all defs local.
+
+Tue Feb 2 15:57:37 1993 Roland H. Pesch (pesch@fowanton.cygnus.com)
+
+ * texinfo.tex (@raisesections, @lowersections): new commands.
+ * (@up, down): original BFox synonyms for above.
+ * (\numhead, \apphead, \unnmhead): internal macros to map headings
+ to appropriate level
+ * (@nwnode): new synonym for @node, used in newest
+ makeinfo
+
+Tue Jan 26 17:05:02 1993 Roland H. Pesch (pesch@fowanton.cygnus.com)
+
+ * texinfo.tex (\include): avoid group around file contents
+
+Tue Jan 19 18:58:56 1993 Roland H. Pesch (pesch@fowanton.cygnus.com)
+
+ * texinfo.tex (\ignoremorecommands, used in \nestedignore): also
+ ignore cross-ref commands and \settitle
+ (\setyyy, used in @set): make definitions global
+ (\clearxxx, used in @clear): clear definitions globally
+
+Thu Jan 14 17:43:32 1993 Michael I Bushnell (mib@geech.gnu.ai.mit.edu)
+
+ * texinfo.tex: Added \shorttitlepage.
+
+Sat Jan 2 15:01:45 1993 Karl Berry (karl@cs.umb.edu)
+
+ * texinfo.tex (\tclose): Use \spaceskip instead of modifying
+ \fontdimen's to normalize the interword space.
+
+ * texinfo.tex (\t, \key, \tclose): Use \hyphenchar instead of
+ \exhyphenpenalty, to turn off hyphenation for real.
+ (\{no,restore}hyphenation): New macros.
+
+Sat Jan 2 15:01:45 1993 Karl Berry (karl@cs.umb.edu)
+
+ * texinfo.tex (\t, \key, \tclose): Use \hyphenchar instead of
+ \exhyphenpenalty, to turn off hyphenation for real.
+ (\{no,restore}hyphenation): New macros.
+
+Tue Jan 5 19:15:46 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\deftpparsebody): Make synonymous with \defvrparsebody.
+
+Sun Dec 27 09:40:08 1992 Karl Berry (karl@cs.umb.edu)
+
+ * texinfo.tex (\inforef, \inforefzzz): Use the \ignorespaces
+ primitive instead of \losespace.
+ (\losespace): Delete.
+
+ * texinfo.tex (\menu, \direntry): Handle like \ifinfo.
+
+ * texinfo.tex (\unmatchedenderror, \defineunmatchedend): New macros.
+ (\endxxx): Call it, instead of just doing it inline.
+ (\conditionalsucceed, \nece): More new macros.
+ (\iftex): Call \conditionalsucceed.
+ (\Eiftex): Define to give an error at the outer level.
+
+ * texinfo.tex (\ignoremorecommands, \nestedignore): New macros.
+ (\ifset, \ifclear): Expand a macro on success as well as failure;
+ also switch to using expansion instead of assignments to act after
+ the conditional.
+ (\if{set,clear}succeed): Call \conditionalsucceed.
+ (\if{set,clear}fail): Call \nestedignore instead of \doignore.
+
+ * texinfo.tex (\clear): Don't insert a spurious space.
+
+ * texinfo.tex (\value): Put comment next to definition.
+
+ * texinfo.tex (\setyyy): Call \setzzz, and define the variable as
+ simply the parameter, no \unskip.
+ (\setzzz): New macro; do not globally define the variable.
+
+Thu Dec 3 17:24:05 1992 Roland H. Pesch (pesch@fowanton.cygnus.com)
+
+ * texinfo.tex (croppageout): use same escape-char switching as
+ default output routine. Permits using _ in TOC entries.
+
+Fri Nov 13 17:35:38 1992 Charles Hannum (mycroft@gnu.ai.mit.edu)
+
+ * texinfo.tex (indexing): Rewrote double-column mode to fix a
+ rare breakage.
+
+Sun Oct 25 07:13:31 1992 Karl Berry (karl@cs.umb.edu)
+
+ * texinfo.tex (\obeyedspace): No need to define with \gdef, we're
+ at the outer level.
+
+Fri Oct 16 18:04:40 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu)
+
+ * lgpl.texinfo: Change "This program" to "This library" in example
+ copying notice.
+
+Sat Oct 10 09:43:45 1992 Karl Berry (karl@cs.umb.edu)
+
+ * texinfo.tex (\bullet, \minus): Use \implicitmath instead of $.
+
+Fri Oct 2 08:35:51 1992 Karl Berry (karl@cs.umb.edu)
+
+ * texinfo.tex (\Egroup): Don't do the \strut and \nointerlineskip.
+
+Sat Sep 26 09:08:59 1992 Karl Berry (karl@cs.umb.edu)
+
+ * texinfo.tex (\doignore, \enddoignore): New macros.
+ (\ifinfo): Call \doignore.
+ (\ifxinfoxxx): Deleted.
+ (\ignore, \ifsetfail, \ifclearfail): use \doignore.
+
+ * texinfo.tex (\unnumbered): Expand the arg only once for the \message.
+
+ * texinfo.tex (\deftpparsebody, \parsetpheaderline): New macros.
+ (\deftp): Call \deftpparsebody.
+
+Thu Sep 24 10:12:45 1992 Karl Berry (karl@cs.umb.edu)
+
+ * texinfo.tex (\entry): Do \par first; add comments.
+ (\short{chap,unnumbered}entry,\do{chap,sec,subsec,subsubsec}entry):
+ Call \tocentry, instead of using \vbox.
+ (\tocentry): New macro.
+
+Sat Sep 19 14:36:11 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\`, \'): Definitions deleted.
+
+Fri Sep 18 14:33:09 1992 Roland H. Pesch (pesch@cygnus.com)
+
+ * texinfo.tex (\ifset, \ifclear): Standardize catcode of space as
+ for \ignore.
+
+Fri Sep 11 15:25:01 1992 Karl Berry (karl@hayley)
+
+ * texinfo.tex (\finalout): Move out of final section of file,
+ which claims not to define new control words.
+
+ * texinfo.tex (\setleading): New macro.
+ (outer level, @smallbook, @afourpaper): Call it, instead of
+ setting \baselineskip directly.
+
+ * texinfo.tex (\|): New definition for changebars.
+
+Tue Sep 1 17:32:48 1992 Karl Berry (karl@hayley)
+
+ * texinfo.tex (\begindoublecolumns): Exactly double \vsize.
+
+Sat Aug 29 10:12:16 1992 Karl Berry (karl@hayley)
+
+ * texinfo.tex (\group): Define \Egroup to use struts instead of
+ letting TeX do its own interline spacing.
+
+ * texinfo.tex (\{remove,ignore}activespaces): New macros.
+ (\end): Call \removeactivespaces; give the correct error messages;
+ don't try to expand a nonexistent \E... macro.
+
+ * texinfo.tex (\EMsimple): End the help message with a period.
+
+ * texinfo.tex (\gobble): New macro.
+ (\lisp): Call it (instead of defining it every time).
+ (\example, \smallexample): Define \E... within the macro.
+
+Tue Aug 25 11:56:26 1992 Roland H. Pesch (pesch@fowanton.cygnus.com)
+
+ * texinfo.tex (\readauxfile): Make + normal while reading aux file.
+
+Thu Aug 20 21:32:34 1992 Karl Berry (karl@hayley)
+
+ * texinfo.tex (\doublecolumnhsize): Compute value in
+ \begindoublecolumns.
+ (\afourpaper, \smallbook, <outer level>): Remove these (virtually
+ identical) computations.
+
+ * texinfo.tex (\doublecolumnvsize): Deleted.
+ (\afourpaper, \smallbook): Don't compute it.
+ (\begindoublecolumns): Just double \vsize here (thus decreasing
+ the value considerably from the old value of 19.1in, which was far
+ too large.)
+
+Fri Aug 14 10:16:42 1992 Karl Berry (karl@hayley)
+
+ * texinfo.tex (\parseargx): Use \expandafter instead of
+ \aftergroup to continue the processing.
+ (\parsearglinex): Renamed to \parseargline, since the former
+ \parseargline is no longer needed.
+
+ * texinfo.tex (\parseargline) Remove a trailing @c or @comment.
+ (\argremovec, \argremovecomment): New macros.
+
+Thu Aug 6 11:28:55 1992 Roland H. Pesch (pesch@fowanton.cygnus.com)
+
+ * texinfo.tex: extended @set to define expandable vars;
+ @value expands same. Auxiliary macros \setxxx, \setyyy
+ used for @set.
+
+Sun Aug 2 14:34:48 1992 Karl Berry (karl@hayley)
+
+ * texinfo.tex (\entry): do line-breaking on the index entry.
+
+Wed Jul 1 17:05:26 1992 Karl Berry (karl@claude.cs.umb.edu)
+
+ * texinfo.tex (\lparen, \rparen): new definitions.
+ ((,[,],)): new global definitions for these four active
+ characters, so parens and brackets can be used in @deffn names.
+
+Sat Jun 27 11:32:58 1992 Karl Berry (karl@hayley)
+
+ * texinfo.tex (\shortchaplabel): new macro to align chapter and
+ appendix labels.
+ (\shortchapentry): call it.
+ (\shortappendixwidth): new dimen register.
+
+Wed Jun 24 09:45:34 1992 Karl Berry (karl@hayley)
+
+ * texinfo.tex (\afterenvbreak): make the same as \aboveenvbreak,
+ so space below environments doesn't get lost.
+ (\aboveenvskipamount): rename to \envskipamount, since it's used
+ both above and below.
+
+Wed Jun 24 09:45:34 1992 Karl Berry (karl@hayley)
+
+ * texinfo.tex (\group): do @comment at the end, to avoid excessive
+ white space when called inside @group.
+
+Wed Jun 24 16:36:04 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\startcontents): End page before setting pageno.
+
+Thu May 28 20:27:25 1992 Robert J. Chassell (bob@hill.gnu.ai.mit.edu)
+
+ * texinfo.tex (\vtable): Like @ftable, but for variables.
+
+Fri May 22 07:04:32 1992 Karl Berry (karl@hayley)
+
+ * texinfo.tex (\w): do \leavevmode before the \hbox.
+
+Sat May 16 11:16:27 1992 Karl Berry (karl@hayley)
+
+ * texinfo.tex (\smallbook): decrease \topskip somewhat.
+
+ * texinfo.tex (\group): use \vtop instead of \vbox.
+
+ * texinfo.tex (\newlinechar): define for use in help strings.
+ (\groupinvalidhelp): define this for use with \errhelp.
+ (\group): set \errhelp to above.
+
+Thu Apr 30 16:19:17 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\need): Rewritten by karl.
+
+Sat Apr 18 16:24:00 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\exdentamount): New var, set by environments.
+ (\exdent, \exdentyyy): Define suitably for filled environments.
+ Always exdent by innermost indentation step.
+ (\nofillexdent, \nofillexdentyyy): Alternates for nofill envs.
+ (\lisp, \smalllispx, \display): Set \exdent to \nofillexdent.
+
+Thu Apr 2 15:04:15 1992 Robert J. Chassell (bob@kropotkin.gnu.ai.mit.edu)
+
+ * texinfo.tex (\Esmalllisp): Smaller baseline skip for smallexamples.
+
+Sun Mar 29 20:44:49 1992 Brendan Kehoe (brendan@cs.widener.edu)
+
+ * texinfo.tex (\startcontents): Always close contentsfile and
+ adjust the page.
+
+Fri Mar 27 17:41:52 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\chapternofonts): Deal with \result, \equiv, etc.
+
+Sat Mar 21 08:22:29 1992 Karl Berry (karl at hayley)
+
+ * texinfo.tex (\entry): format entries better if the page number
+ and entry text don't fit on one line.
+
+ * texinfo.tex (\loggingall, \gloggingall): new macros to help with
+ debugging.
+
+Fri Mar 20 15:35:42 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\result, \expansion, \print, \equiv):
+ Don't copy prefabricated boxes; must adapt to current font.
+ (\dblarrowbox, \longdblarrowbox, \pushcharbox, \equivbox): Deleted.
+ (\bullbox): Deleted.
+
+Thu Mar 19 22:17:14 1992 Robert J. Chassell (bob@kropotkin.gnu.ai.mit.edu)
+
+ * texinfo.tex (\widowpenalty, \clubpenalty): Set them to 10000, since
+ 8000 did not work.
+
+Fri Mar 6 13:26:36 1992 Robert J. Chassell (bob@kropotkin.gnu.ai.mit.edu)
+
+ * texinfo.tex (\widowpenalty, \clubpenalty): Set them to 8000, since
+ 2000 did not work (but \widowpenalty at 20000 did work).
+
+Thu Feb 27 12:27:14 1992 Karl Berry (karl@wombat.gnu.ai.mit.edu)
+
+ * texinfo.tex (\widowpenalty): set to 2000, not 20000.
+
+Sat Feb 8 14:34:45 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\widowpenalty, \clubpenalty): Set them to 2000.
+ (\itemizeitem): Use penalty 1200.
+ (\itemzzz): Add \nobreak near beginning.
+
+ * texinfo.tex (\quotation): Increase right margin, instead of
+ left margin twice.
+
+Wed Feb 5 12:08:30 1992 Karl Berry (karl at hayley)
+
+ * texinfo.tex (\alphaenumerate, \capsenumerate): redefine as a call
+ to \enumerate.
+ (\{lower,upper}caseenumerate): Rename from \{alpha,caps}enumerate.
+
+Sun Feb 2 21:07:19 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\itemzzz): Compensate in line-by-itself case for
+ a table that is indented.
+
+Mon Jan 13 21:04:07 1992 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * texinfo.tex: Use 26 instead of control-z as character constant.
+
+Sat Jan 11 02:20:58 1992 Roland McGrath (roland@albert.gnu.ai.mit.edu)
+
+ * gpl.texinfo: Unfilled Yoyodyne example.
+
+Sat Dec 7 16:16:54 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\cartouche): Set \nonarrowing.
+ (\lisp, \smalllisp, \quotation, \display): If set, don't narrow.
+
+Mon Dec 2 08:15:08 1991 Karl Berry (karl at hayley)
+
+ * texinfo.tex (\itemzzz): don't start a paragraph if the item text
+ is on a line by itself; don't allow a page break after that
+ line; always do \par before typesetting anything.
+
+Tue Nov 26 15:13:13 1991 Roland McGrath (roland@albert.gnu.ai.mit.edu)
+
+ * lgpl.texinfo: @ifset lgpl-appendix, use @appendix instead of
+ @unnumbered.
+
+Sun Nov 10 12:00:06 1991 Karl Berry (karl at hayley)
+
+ * texinfo.tex (\doprintindex): only \read if the file existed;
+ \closein the test stream in all cases.
+ (\initial, \entry): do not \outer, so that \read does not get an
+ error if the index exists.
+
+Fri Nov 8 18:13:28 1991 Michael Bushnell (roland@churchy.gnu.ai.mit.edu)
+
+ * texinfo.tex (\itemizey): missing %'s in macro defn.
+ Also, add \begingroup; accidentally deleted by Karl Berry.
+
+Thu Nov 7 11:41:25 1991 Karl Berry (karl at hayley)
+
+ * texinfo.tex (\doprintindex): \read from the index file to make
+ \ifeof true when the file exists but is empty.
+
+Tue Nov 5 08:29:13 1991 Robert J. Chassell (bob at grackle)
+
+ * texinfo.tex (@thischaptername): Provide default value for when
+ @chapter not defined.
+
+Sat Nov 2 17:59:02 1991 Karl Berry (karl at hayley)
+
+ * texinfo.tex (\itemizezzz): do \begingroup here, since \itemizey
+ can't any longer.
+
+Tue Oct 29 12:17:41 1991 Robert J. Chassell (bob at grackle)
+
+ * texinfo.tex: @paragraphindent defined as a no op.
+
+Fri Oct 25 15:19:47 1991 Karl Berry (karl at hayley)
+
+ * texinfo.tex (\enumeratey): allow any lowercase letter, uppercase
+ letter, or number as argument; initialize \itemno and begin the
+ environment's group here.
+ (\itemizey): don't initialize \itemno here.
+ (\numericenumerate, \startenumeration): new macro.
+
+Wed Oct 23 16:26:30 1991 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\ifclear, \ifset): Remove \outer.
+
+ * texinfo.tex (\afourpaper): Set various parameters.
+
+Tue Oct 22 18:42:31 1991 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\alphaenumerate, \capsenumerate):
+ Let @end enumerate end these.
+ (\Ealphaenumerate, \Ecapsenumerate): Aliases for \Eenumerate.
+
+Sun Oct 20 18:23:18 1991 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\mainmagstep): New parameter macro.
+ (Defining fonts): Use that parameter to scale them.
+ If \bigger is defined, use 12 point fonts.
+
+Tue Sep 24 00:30:07 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * texi2dvi: Iterate over the right variable to look for new idx files.
+
+ * texi2dvi: GPL 2.
+
+ * texi2dvi: Fix 2nd invocation of texindex to pass right args.
+
+Wed Sep 11 20:52:42 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\cartouche): New macro.
+
+Fri Aug 23 16:13:46 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\section, \subsection, \subsubsection):
+ Initially define for numbered chapters.
+
+Fri Aug 2 01:46:09 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\footnote): Use \unskip instead of \removelastskip.
+
+Mon Jul 29 14:06:54 1991 Roland H. Pesch (pesch at cygint.cygnus.com)
+
+ * texinfo.tex (\majorheadingzzz, \chapheadingzzz, \chfplain,
+ \unnchfplain, \unnchfopen, \secheadingi, \subsecheadingi,
+ \subsubsecheadingi): allow line breaks in headings.
+ (\shortchapentry, \shortunnumberedentry, \dochapentry, \dosecentry,
+ \dosubsecentry, \dosubsubsecentry): allow line breaks in table of
+ contents entries.
+
+Thu Jul 18 19:01:53 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\secfonts, \indexfonts): Fix typos.
+
+Sun Jul 7 16:36:28 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\afourpaper): New command.
+
+ * texinfo.tex (\numberedsec): Renamed from \section.
+ (\numberedsubsec): Renamed from \subsection.
+ (\numberedsubsubsec): Renamed from \subsubsection.
+ (\chapter, \appendix, \unnumbered): Define \section, \subsection,
+ and \subsubsection here according to type of chapter.
+
+Thu Jul 4 14:19:32 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\defvarparsebody, \defvrparsebody, \defopvarparsebody):
+ New functions.
+ (\defvar, \defvr, \defopt, \defcv, \defivar): Use them.
+ (\deftypevar, \deftypevr): Likewise.
+
+Mon Jul 1 13:49:25 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\group): Report error if used outside @example, etc.
+
+ * texinfo.tex (\defname): Reduce \leftskip
+ to cancel temporarily the increase made in \defparsebody.
+
+ * texinfo.tex (\enumerate): Allow optional arg to specify type
+ of counting.
+
+ * texinfo.tex (\set, \clear): New commands.
+
+Mon Jun 24 12:22:44 1991 Roland McGrath (roland@albert.gnu.ai.mit.edu)
+
+ * texinfo.tex (\eleterate): Renamed to \alphaenumerate. Sigh.
+ (\ecapitate): Likewise \capsenumerate.
+
+Thu Jun 6 20:02:48 1991 Roland McGrath (roland@geech.gnu.ai.mit.edu)
+
+ * lgpl.texinfo: Created from /fsf/rms/gnuorg/lgpl.text.
+
+ * gpl.texinfo: Created from /fsf/rms/gnuorg/gpl.text (GPL v2).
+
+ * texinfo.tex (\eleterate, \ecapitate): New commands, like @itemize,
+ but with [a..z] or [A..Z] instead of [1..n].
+
+Tue May 21 15:46:32 1991 Karl Berry (karl at hayley)
+
+ * texinfo.tex (\dmn): new command to typeset a dimension.
+
+Tue May 21 20:58:22 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\doind, \dosubind): Make new group around \indexdummies
+ and most of body, excluding the \penalty commands.
+
+Mon May 20 21:16:32 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\tex): Typo in redefining \@.
+
+ * texinfo.tex (\_): Use \lvvmode, not \leavevmode.
+ (\lvvmode): New macro.
+
+ * texinfo.tex (\authorrm, \titlerm): Move to after section fonts.
+
+Tue May 14 21:13:29 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\defunargs): Set \hyphenchar in \tensl, not \sl.
+
+Thu May 9 17:07:08 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\ignore): Standardize catcode of space.
+
+Wed May 8 13:49:45 1991 Karl Berry (karl at hayley)
+
+ * texinfo.tex (\sffam, \sf): New macros; support sans serif
+ type style in math.
+ (top level): Set up \textfonts early on, so we can create boxes w/ it.
+ (\tenrm...\tensf): Define these to be \textrm...\textsf instead.
+ (\df, \textfonts, \chapfonts, \secfonts, \subsecfonts):
+ (\indexfonts): Redefine \tenrm (etc.) instead of just \rm, so that
+ the math family assignment doesn't get lost; call \resetmathfonts.
+ (\resetmathfonts): New macro; redefines \textfont of each math family.
+ (\indsc, \indi, \indsy \chapsc, \chapi, \chapsy, \secsc, \seci):
+ (\secsy, \ssecsc, \sseci, \ssecsy): New font definitions.
+
+Mon May 6 21:30:19 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\indexdummies): Write \_ when an _ is seen.
+
+Mon Apr 29 01:41:44 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\defname): Use \dimen2, \dimen3 for outer margins.
+ Use outer margins for influencing \rightline.
+ (\tclose, \key, \t): Turn off line breaks at hyphens.
+
+Fri Apr 12 03:12:14 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\authorrm): Move definition to top level; copy \secrm.
+
+Tue Apr 2 22:48:39 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\defname): Adjust size of \rlap box, not \dimen0
+ or \dimen1, for current width.
+
+ * texinfo.tex (\Yappendixletterandtype): End with {}.
+
+Sat Mar 30 16:13:25 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\xrefX): Really use \cite.
+ (\inforefzzz): Use \samp for node name.
+
+ * texinfo.tex (\defname): Use current width for \dimen0, \dimen1.
+
+ * texinfo.tex (\doprintindex): Put lots of whitespace before index.
+
+Fri Mar 29 17:00:58 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\xrdef): Take out last change.
+
+ * texinfo.tex (\needx): Turn off \baselineskip. Use kern, and no glue.
+
+ * texinfo.tex (\shortcontrm): Renamed from \truesecrm.
+ (\shortcontbf, \shortcontsl): New fonts for short contents lines.
+ (\summarycontents): Use them.
+
+ * texinfo.tex (\defname): Don't set \leftskip to 0; just decrease by
+ one indent level.
+ (\defparsebody, \def*parsebody): Increment both margins by one level.
+
+Tue Mar 26 22:41:38 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * texinfo.tex (\xrdef): Change catcode before reading args.
+
+Wed Mar 20 14:21:57 1991 Roland McGrath (roland at geech.gnu.ai.mit.edu)
+
+ * texi2dvi: Use p modifier in sed -n command, so it works.
+ Duplicate code to find the index files, instead of being smart in
+ one place and dumb in another.
+
+Thu Mar 7 17:08:32 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * texinfo.tex (\defaultparindent): New variable.
+ (\footnotezzz): Reset \parindent to default.
+ (\xrefX): Use \cite for printed manual and node names.
+
+Tue Mar 5 13:39:34 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * texinfo.tex (\emergencystretch feature): Use \thisisundefined.
+
+Mon Mar 4 00:35:57 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * texinfo.tex (\ftablex): Define \Eftable; undefine \Etable.
+
+ * texinfo.tex (\footnote): Discard preceding whitespace.
+
+ * texinfo.tex: Use the \emergencystretch feature if available.
+
+Fri Feb 22 03:50:58 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * texinfo.tex (\tex): Make + not active.
+
+Fri Feb 15 10:05:24 1991 Roland McGrath (mcgrath at cygint.cygnus.com)
+
+ * texi2dvi: Use $TEXINFO in place of $TEX (falling back to $TEX
+ if $TEXINFO is undefined).
+
+ * texi2dvi: Renamed from texinfo. Bob (I believe) did this at some
+ point at and didn't make a ChangeLog entry. I'd shoot him myself if
+ he weren't the person who signs my paychecks.
+
+Sun Feb 10 22:51:52 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * texinfo.tex (\doprintindex): If index is empty, print a dummy.
+ (\need): Use vskips and penalties; don't use \pagetotal.
+
+Fri Feb 8 17:36:53 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * texinfo.tex (\ignoresections):
+ Turn off \contents, \smallbook and \titlepage.
+
+ * texinfo.tex (\Etitlepage): Do a page break before ending the group.
+
+ * texinfo.tex (\setref, \unnumbsetref, \appendixsetref):
+ Comment out recording the chapter title.
+
+Thu Jan 24 23:28:41 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * texinfo.tex (\top): Synonym for \unnumbered.
+ (\infotop): Synonym for \infounnumbered.
+ (\ignoresections): Handle \top.
+
+Thu Jan 24 12:41:33 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * texinfo.tex: Delete spurious character at beginning.
+
+Thu Jan 17 16:34:25 1991 Roland McGrath (roland at cygint.cygnus.com)
+
+ * texinfo: Check the exit status of tex and texindex. Don't procede
+ after a failing run.
+
+Thu Jan 10 15:16:47 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * texinfo.tex (\xrefX): Get rid of blank line.
+
+Wed Jan 9 18:06:20 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * texinfo.tex (\entry, \secondary): Use \indexdotfill.
+ (\indexdotfill): New macro.
+
+Tue Jan 8 17:44:01 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * texinfo.tex (\donoderef): Define a ...-title cross-reference.
+ (Ytitle): Subroutine for that.
+ (xrefX): Use the real title by default (but this is commented out).
+
+Tue Jan 1 23:18:21 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * texinfo.tex (\indexnofonts): Delete troublemaking blank line.
+
+Sat Dec 22 00:47:21 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * texinfo.tex (\xrefX): Prevent extra space.
+
+Fri Dec 21 21:14:50 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * texinfo.tex (\comment, \commentxxx): Ignore @ in comment.
+
+Thu Dec 13 22:38:31 1990 Chris Hanson (cph at kleph)
+
+ * texinfo.tex (\defivarheader): Capitalize "Variable".
+
+Sun Dec 2 01:46:04 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * texinfo.tex (\indexdummies, \indexnofonts): Handle \t like \r.
+
+ * texinfo.tex (heading fonts): New fonts based on cm...12.
+
+Tue Nov 27 16:59:35 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * texinfo.tex (\indexnofonts): Also supersede \TeX and \dots.
+
+Sun Nov 18 16:18:14 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * texinfo.tex (\*): End with \ignorespaces.
+
+Fri Nov 2 17:41:48 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * texinfo.tex (\*): Output empty hbox to avoid losing whitespace.
+ (\deftypevarheader, \deftypevrheader): End the paragraph
+ with suitable penalties.
+ (\deftypevrheader): Do print the data type.
+
+Thu Nov 1 12:04:52 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * texinfo.tex (\defmethodheader): Print `method', not `operation'.
+
+Fri Oct 26 17:11:08 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * texinfo.tex (\indexdummies): Temporarily redefine \_.
+ (\ptexdots): Copy of plain tex \dots.
+ (\tex): Temporarily reinstall that.
+
+Fri Oct 19 16:57:48 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * texinfo.tex (\subsubsecheadingi, \subsecheadingi): New subroutines.
+
+Mon Oct 8 13:34:19 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * texinfo.tex (active _): Use \normalunderscore.
+
+Tue Sep 25 22:32:55 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * texinfo.tex (\deftypefn, \deftypevar, \deftypevr): New macros.
+ Their subroutines also new.
+
+Tue Sep 25 16:42:52 1990 Roland McGrath (roland at geech.ai.mit.edu)
+
+ * texinfo: Recognize `.tex' as a suffix.
+
+Tue Sep 25 01:46:54 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * texinfo.tex (\deftypefun): New macro.
+ (\deftypefunheader, \deftypefunheaderx, \deftypefunargs): Also new.
+
+Fri Sep 14 00:38:28 1990 Roland McGrath (roland at churchy.ai.mit.edu)
+
+ * texinfo: Weed out files that have two-letter extensions but don't
+ start with a backslash, and therefore aren't index files.
+
+ * texinfo: Handle index files that have any two-letter extension,
+ rather than using a static list of extensions.
+
+ * texinfo: Handle .texi extension as well as .texinfo.
+
+ * texinfo: New file, a sh script to do .texinfo -> .dvi.
+
+Mon Sep 10 13:14:39 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * texinfo.tex (\math): New macro.
+
+Tue Sep 4 07:43:33 1990 Karl Berry (karl at hayley)
+
+ * texinfo.tex (\chfplain): Do not print a period after the chapter
+ number, for consistency with sections et al.
+
+ * texinfo.tex (\refX): hyphenate `undefined' so that the ligature
+ is not lost.
+
+ * texinfo.tex (_): use \_ unless we're in tt.
+ (\ifusingtt): new macro for such conditionalization.
+
+ * texinfo.tex (\xrefX): don't use \unhbox to print the node names,
+ since that loses on hyphens.
+ Use \ignorespaces rather than \losespace.
+
+Thu Aug 2 07:03:26 1990 Karl Berry (karl at hayley)
+
+ * texinfo.tex (\linenumber): new macro.
+ (\refx): give the line number in the message.
+
+Tue Jul 31 09:13:32 1990 Karl Berry (karl at hayley)
+
+ * texinfo.tex (\refx): improve warning messages, remove
+ unnecessary groups, and improve logic.
+
+Thu Jul 26 20:53:38 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\subheading, \subsubheading): Missing macros defined.
+
+Thu Jul 19 22:48:26 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\titlepage): Don't print rule for \page unless already
+ printed a rule.
+ (\abstract): Deleted.
+ (\direntry): New command, much like \ignore.
+
+Sun Jul 15 16:28:42 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\abstract): New construct; trivial in tex.
+
+Sun Jun 17 01:03:16 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\defcv): Protect space before `of'.
+ (\defspec): Capitalize `Form'.
+
+Sat Jun 16 19:36:56 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\kbd, \kbdfoo): Use \par to term. arg to \kbdfoo.
+
+Fri Jun 15 10:47:12 1990 Robert J. Chassell (bob at pogo.ai.mit.edu)
+
+ * texinfo.tex (\defcv): Use \defcvarheader instead of (undefined)
+ \defcvheader.
+
+Fri May 25 18:04:31 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\xrefX): Use \turnoffactive.
+
+Mon May 21 21:17:34 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\turnoffactive): New command.
+ (\normaldoublequote, ...): New commands.
+ (\dosetq): Use \turnoffactive.
+
+Sat May 19 12:31:17 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\indit): Use slanted font, not italic.
+ (\smalllispx): Do \indexfonts.
+
+Fri May 4 17:35:04 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\footnote, \footnotezzz): Make it \long.
+
+Wed May 2 01:19:55 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\titlerm): Go back to cmbx10 scaled \magstep5.
+ (\hsize): Don't set it, use the default.
+
+Fri Mar 23 21:07:02 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\footnote): Read arg in braces, not as a line.
+
+Mon Mar 19 19:30:08 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\unnumbsubsubsecentry): Typo in name being defined.
+
+Tue Mar 13 18:49:27 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\defvarargs): Add penalty at end.
+
+ * texinfo.tex (\synindex, \syncodeindex): Copy one index file name
+ into the other.
+
+Tue Mar 6 16:58:54 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\deftt): Make this a distinct font.
+
+ * texinfo.tex (\initial): Define \tt like \tentt.
+
+ * texinfo.tex (\ifinfo): End with \losespace.
+ (\ignore, \ifsetfailxxx, \ifclearfailxxx): Likewise.
+
+Sun Mar 4 19:55:57 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\lbrb, \rbrb): Use \bf.
+
+Sat Mar 3 17:53:22 1990 Richard Stallman (rms at geech)
+
+ * texinfo.tex (\onepageout): Set \escapechar here.
+
+ * texinfo.tex (\rawbackslash): Define using \chardef.
+
+ * texinfo.tex (\@): Use ttfont.
+
+Thu Mar 1 16:37:46 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (Ysectionnumberandtype, Yappendixletterandtype):
+ Capitalize "chapter", "appendix" and "section".
+
+Mon Feb 19 20:26:22 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\xkey): Attempt to eliminate spurious space from
+ output. Look at y-or-n-p.
+
+Mon Feb 12 16:34:00 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\errorbox): Get \dimen0 from \tentt.
+
+Sun Feb 11 15:11:57 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\defunargs): Use ragged right for args.
+ Add large penalty at end.
+
+ * texinfo.tex: Make active definition for = using \tt, but disable.
+ (\defparsebody): Make = active.
+ (\defunheader, etc.): Make inactive again.
+
+ * texinfo.tex (\errorbox): Try to equalize outside space to both sides.
+
+Fri Feb 2 14:47:21 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\appendix): Don't use \the before \appendixletter.
+
+Sat Dec 16 14:02:56 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\chapter, \appendix): Make defn of \thischapter
+ refer to \thischaptername, and store actual name there.
+ (\chapternofonts): Turn off more macros.
+ (\indexdummies): Likewise.
+
+Sun Nov 19 15:29:47 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\titlerm): There were two definitions of this command.
+ Put them together and commented out one of them.
+ (\subtitlerm): Was same as \tenrm, so just copy that.
+ (\ninett): Always define this.
+ (\indtt): Copy from \ninett.
+
+Sat Nov 18 22:57:37 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\ssecrm, etc.): Scale by 1315, rather than to 13pt.
+
+Wed Nov 8 18:38:33 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\titlepage): Turn on iffinishedtitlepage so
+ bottom rule is not printed.
+ (\titlezzz): Turn it off, so bottom rule is printed.
+
+Mon Nov 6 09:23:29 1989 Karl Berry (karl at hayley)
+
+ * texinfo.tex (\chapterzzz, \appendixzzz): include `Chapter
+ \the\chapno' and `Appendix \appendixletter' in \thischapter; use
+ \xdef instead of \gdef to define \thischapter, to avoid timing
+ problems with \chapno or \appendixletter.
+ (\startcontents): don't bother putting `Table of Contents' or
+ `Short Contents' in the headline.
+
+Fri Oct 20 09:11:35 1989 Karl Berry (karl at hayley)
+
+ * texinfo.tex (\titlepage): remove obsolete code for subtitles.
+ (\titlezzz): end with \relax, to avoid misinterpretation of a
+ following `plus' or `minus'
+ (\page (inside \titlepage)): call \finishtitlepage.
+ (\Etitlepage): call \finishtitlepage, if it hasn't been.
+ (\finishtitlepage): new macro to print a rule and leave some space
+ at the bottom of the title page.
+ (\iffinishedtitlepage): new; says whether \finishtitlepage has been
+ called.
+
+Mon Nov 6 21:35:34 1989 Robert J. Chassell (bob at rice-chex)
+
+ * texinfo.tex: Replaced `GNU CC' in the copyleft of this file with
+ the phrase `this texinfo.tex file'.
+
+Fri Oct 27 10:36:32 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\setfilename): Do nothing except 1st time used.
+ (\titlepage): Brace misplaced in \titlezzz.
+ (\indexdummies, \indexnofonts): Handle @w.
+
+ (\readauxfile): Set \ifhavexrefs true.
+ (\refX): Warn for every use of an undefined xref,
+ but if no xref values are known, warn just once that none are known.
+
+Tue Sep 19 04:12:51 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\xrefX): Go back to `section N [Foo], page M'.
+ (\exp): Delete it.
+
+Mon Sep 18 15:29:30 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\chapentryfonts): Try using \rm for chap title.
+
+Tue Sep 12 03:41:10 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\titlepage): Missing closeparen after \title.
+ Delete excess paren after \page.
+
+ * texinfo.tex (\samp): Use \tclose.
+
+Mon Sep 11 23:28:04 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\tclose): Make `@ ' a full-width space.
+
+Sat Sep 9 20:11:29 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\balancecolumns): Handle properly the case where
+ the index ends before one page is output, so \partialpage is nonempty.
+ In this case we may need to output two pages if the data
+ would just barely fit if not for \partialpage.
+
+Wed Aug 30 22:45:31 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\refx): New 2nd operand, output if xref is non-null.
+ (\xrefX): Use that to output the comma after the section number.
+ (\appendixnoderef, \appendixsetref, \Yappendixletterandtype):
+ Define xrefs for appendices that say "Appendix N".
+ Used in \appendix, \appendixsec, etc.
+
+ * texinfo.tex (\smartitalic): The actual italic correction was omitted.
+
+Mon Aug 28 00:21:33 1989 Richard Stallman (rms at apple-gunkies.ai.mit.edu)
+
+ * texinfo.tex (\ref): New kind of cross-reference.
+ (\xrefX): Put single quotes around section name.
+ (\refx): Allow hyphenation in `undefined'.
+
+ * texinfo.tex (+): Make it active.
+ (Altmode): Delete active defn.
+
+ * texinfo.tex (\defunargs): Prevent hyphenation at `-' in args.
+ Move the penalty at the end so that it works.
+ (\defvarargs): Move the penalty at the end so that it works.
+
+ * texinfo.tex (\defparsebody): Do increase right margin.
+
+ * texinfo.tex (\defbodyindent): Now .4 inch.
+
+ * texinfo.tex (\point, \result, \expansion, \print, \equiv, \error):
+ New macros for Lisp manual.
+
+ * texinfo.tex (\tex): Set = to code 12.
+
+ * texinfo.tex (\entry): Hairier way to output dots.
+
+ * texinfo.tex (\kbd): If arg consists of one \key command, be a no op.
+
+ * texinfo.tex (\sc): Delete spurious \.
+
+ * texinfo.tex (\smartitalic): New macro, does italic correction at end.
+ (\i, \var, \dfn, \emph, \cite): Use that.
+
+ * texinfo.tex (\node): Do \ENVcheck.
+
+ * texinfo.tex (\initial): Infinite penalty at end.
+
+ * texinfo.tex (\chapternofonts): New macro, sets \code, etc. to
+ output selves into file. Also undef \frenchspacing and \rawbackslash.
+ (\xhapterzzz, etc.): Call that. Make a group to undo it.
+ (\indexdummies): Do like \chapternofonts.
+
+Sun Aug 27 16:05:23 1989 Richard Stallman (rms at apple-gunkies.ai.mit.edu)
+
+ * texinfo.tex (\frenchspacing): Our own definition, using
+ decimal numbers for all character codes. The standard one fails.
+
+ * texinfo.tex (\indexnofonts): Handle \file, \tt, and many more.
+
+Fri Aug 25 22:05:24 1989 Richard Stallman (rms at apple-gunkies.ai.mit.edu)
+
+ * texinfo.tex (\chapter, etc.): Undefine \tclose around \edef\temp.
+
+Mon Aug 21 15:42:47 1989 Richard Stallman (rms at apple-gunkies.ai.mit.edu)
+
+ * texinfo.tex (\tclose): Like \t but make space same width
+ as in surrounding text.
+ (\code, \kbd): Use \tclose.
+
+Tue Jul 4 20:53:52 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (titlepage): Don't set \everypar; start just one group.
+ See comments in the code.
+
+ * texinfo.tex (defop,defcv): Use defopparsebody.
+ * texinfo.tex (defopparsebody): Like defmethparsebody but defines
+ def...x for more arguments.
+
+Sat Jun 17 13:49:13 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\titlepage): Rename @subtext, etc., to @subtitle, etc.
+
+ * texinfo.tex (\titlepage): Don't print the title automatically.
+ Define @title to print it, and the rule underneath it.
+ This should make @titlepage upward compatible with the old one.
+
+ * texinfo.tex (\titlepage): Revert local definition of @page
+ to previous. Don't print a rule.
+
+Mon Jun 12 20:49:17 1989 Karl Berry. (karl at mote)
+
+ * texinfo.tex (\titlepage): allow intensional definition of the
+ items on the title page. New control sequences (allowed only
+ within the titlepage environment:)
+ (@subtext): may take either a paragraph (e.g., a brief
+ description of the program) or just a line (e.g., the date).
+ May appear more than once.
+ (@author): must come after all the @subtext's. Can appear more
+ than once, also.
+ Also, use the title defined by @settitle.
+ (\subtextfont, \authorfont): switch to using the appropriate
+ fonts with appropriate leading.
+ (\titlepagetopglue, \titlepagebottomglue): define space that
+ never stretches or shrinks.
+ (\realeverypar): formatting for the @subtext's.
+
+Sun Jun 4 15:04:59 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (\shortchapentry, \shortunnumberedentry):
+ Use dots, right justify page numbers. Don't use italics.
+
+Fri Jun 2 14:40:28 1989 Karl Berry. (karl at mote)
+
+ * texinfo.tex (\entry, \secondary): use plain TeX \dotfill for
+ better leaders than the homegrown one.
+ (\Dotsbox): Deleted.
+ (\dotfill): Deleted; use Plain TeX definition.
+
+Wed May 31 17:19:30 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (ignore): Undefine the chapter/section macros
+ while reading the args, since they are \outer.
+ (ifinfo): Likewise
+ (ifsetxxx, ifclearxxx): Call another macro to parse the
+ conditionalized text, and do to that macro as with \ignore.
+
+Tue May 30 15:04:37 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex (unnumbered): Change back from \long to \outer.
+
+ * texinfo.tex: Changes by Karl Berry for toc format.
+ Rewrite the table of contents for appearance's sake. Add a
+ synonym for \summarycontents, \shortcontents, since that is the
+ traditional name. Two subroutines are now shared by \contents and
+ \summarycontents: \prepareforcontents, to reset the page number
+ and such; and \startcontents, which begins the \unnumbered and
+ resets catcodes before \input \jobname.toc. Some other macros --
+ \labelspace, \dopageno, \shortpageno -- are shared by the printing
+ macros.
+
+ * texinfo.tex (\truesecrm): New font, section-size roman, used in the
+ new toc. (cmr12)
+
+Sun May 28 07:25:42 1989 Karl Berry. (karl at mote)
+
+ * texinfo.tex (\eatinput): Do not print the `\input texinfo' if a
+ .fmt file is being used; ignore it, instead. This is the initial
+ definition for `\' now.
+ (\fixbackslash): on the other hand, subsequent backslashes should
+ be printed, and if the file does not have an `\input texinfo', the
+ first one should be printed. This new macro makes the definition
+ for `\' be \normalbackslash, if it is \eatinput.
+ (\setfilename): use \fixbackslash.
+
+Wed May 24 15:34:59 1989 Joseph Arceneaux (jla at apple-gunkies.ai.mit.edu)
+
+ * texinfo.tex: Changed def of unnumbered from \outer to \long.
+
+Tue May 23 12:27:59 1989 Karl Berry. (karl at mote)
+
+ * texinfo.tex: Allow one to make a texinfo.fmt file (with the
+ invocation:
+ initex \&plain texinfo
+ and then saying
+ @dump
+ after texinfo.tex has been read.
+ Changes:
+ (\setfilename): Instead of being a no-op, read the xref info, and
+ open the contents and index files. These actions were done as
+ texinfo.tex was read before.
+ (\opencontents, \openindices): new macros to open those files.
+ (\readauxfile): and one to read the aux file.
+
+Sat Apr 29 22:28:02 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex: `@headings on' no longer does a page break.
+
+Sun Apr 2 11:22:29 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex: Defined `@headings single' and `@headings double'.
+ `@headings on' picks one of them: `@setchapternewpage odd'
+ says `@headings on' means double; otherwise it means single.
+
+Mon Jan 30 22:00:35 1989 Robert J. Chassell (bob at rice-krispies.ai.mit.edu)
+
+ * texinfo.tex: Changed the size of the subsection fonts so they
+ are scaled at13pt rather than at magstep 2. This makes them
+ smaller than the section fonts, which are scaled at magstep 2.
+ In addition, changed the ssecrm font from cmbx to cmb.
+
+Fri Jan 6 15:00:44 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * texinfo.tex: Changed @lisp, @smalllisp, @display not to change
+ the right margin.
+
+Mon Dec 5 22:01:49 1988 Robert J. Chassell (bob at rice-krispies.ai.mit.edu)
+
+ * texinfo.tex: Tested the use of `cmbx10' vrs `cmb10' font and
+ stayed with cmb10 font since cmb10 looks better when the bold face
+ is part of a sentence although the cmbx10 font looks better on its own.
+
+Mon Aug 15 14:33:51 1988 Robert J. Chassell (bob at spiff)
+
+ * texinfo.tex: Changed the (undocumented) @today command from a
+ Month Day, Year format to a Day Month Year format. Left old
+ version commented out.
+
+
+Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
+1997, 1998, 1999, 2000, 2001, 2002, 2003 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.
+
+
+Local Variables:
+mode: indented-text
+left-margin: 8
+fill-column: 76
+version-control: never
+End:
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..d445e6d
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,49 @@
+$Id: INSTALL,v 1.8 2007/07/12 23:18:34 karl Exp $
+
+ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ 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.
+
+For generic installation instructions on compiling and installing this
+Automake-based distribution, please read the file `INSTALL.generic'.
+
+Installation notes specific to Texinfo:
+
+* texinfo.tex and the other *.tex files are not installed by `make
+ install'. This is because there is no reliable way to know where to
+ install them. Instead, you have to run an additional make command
+ after the normal make install:
+ make TEXMF=/your/texmf install-tex
+ texinfo.tex is installed in ${TEXMF}/tex/texinfo/texinfo.tex, etc.
+
+* On the other hand, if you're maintaining a TeX distribution, you don't
+ want your users to see the installation warnings, because you already
+ have the files installed. (And you're keeping them up to date, right?)
+ In this case, run configure --disable-install-warnings, or set
+ enable_install_warnings=no in the environment.
+
+* On MacOSX, if configure fails with the error:
+ ac_cv_build='config.sub: invalid option -apple-darwin7.2.0
+this is probably because your uname -p is returning "unknown". Use
+/usr/bin/uname instead.
+
+* For instructions on compiling this distribution with DJGPP tools
+ for MS-DOS and MS-Windows, see the file djgpp/README.
+
+* The Info tree uses a file `dir' as its root node; the `dir-example'
+ file in this distribution is included as a possible starting point.
+ Use it, modify it, or ignore it just as you like.
+
+* You can create a file texinfo.cnf to be read by TeX when
+ processing Texinfo manuals. For example, you might like to use
+ @afourpaper by default. See the `Preparing for TeX' node in
+ texinfo.txi for more details. You don't have to create the file if
+ you have nothing to put in it.
+
+* If your info files are not in $prefix/info, you may wish to add a line
+#define DEFAULT_INFOPATH "/mydir1:/mydir2:..."
+ to config.h after running configure.
diff --git a/INSTALL.generic b/INSTALL.generic
new file mode 100644
index 0000000..5458714
--- /dev/null
+++ b/INSTALL.generic
@@ -0,0 +1,234 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
+2006 Free Software Foundation, Inc.
+
+This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
+Basic Installation
+==================
+
+Briefly, the shell commands `./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.
+
+ 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.
+
+ 4. Type `make install' to install the programs and any data files and
+ documentation.
+
+ 5. 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.
+
+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 `..'.
+
+ 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.
+
+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'.
+
+ 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.
+
+ 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'.
+
+Optional Features
+=================
+
+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.
+
+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 bug. Until the bug is fixed you can use this workaround:
+
+ CONFIG_SHELL=/bin/bash /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 the options to `configure', and exit.
+
+`--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.
+
+`configure' also accepts some other, not widely useful, options. Run
+`configure --help' for more details.
+
diff --git a/INTRODUCTION b/INTRODUCTION
new file mode 100644
index 0000000..718c1c5
--- /dev/null
+++ b/INTRODUCTION
@@ -0,0 +1,108 @@
+$Id: INTRODUCTION,v 1.3 2004/04/11 17:56:45 karl Exp $
+Getting started with Texinfo.
+
+ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+ 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.
+
+
+
+Getting Started with Texinfo
+============================
+
+"Texinfo" is a documentation system that uses a single source file to
+produce both on-line information and printed output. Using Texinfo,
+you can create a printed document with the normal features of a book,
+including chapters, sections, cross references, and indices. From the
+same Texinfo source file, you can create a menu-driven, on-line Info
+file with nodes, menus, cross references, and indices.
+
+The name of the Texinfo source documentation file is `texinfo.txi'.
+You can produce both on-line information and printed output from this
+source file. The documentation describes Texinfo in detail, including
+how to write Texinfo files, how to format them for both hard copy and
+Info, and how to install Info files.
+
+To get started, you need to create either a printed manual or an
+on-line Info file from the `texinfo.txi' file. You do not need to
+create both, although you will probably want both eventually.
+
+To learn how to use Info, read the info documentation. You can do this in
+one of two ways: using the standalone `info' program, or using Info mode in
+GNU Emacs.
+
+ * If you want to use the `info' program, run
+
+ info -f info-stnd
+
+ * If you want to use Emacs, start up emacs and type `C-h i' [M-x info].
+ Follow the instructions to learn how to use Info.
+
+After learning how to use Info, you can read the Texinfo documentation.
+Using the standalone `info', type the following at the shell prompt:
+
+ info -f texinfo
+
+To use read this manual in Emacs, you first need to edit the Info-directory
+menu (the file `dir' in the system info directory) to contain the
+appropriate node. To learn how to do this, see node: Add in the Info
+documentation.
+
+The Texinfo documentation describes Texinfo in detail; among other things,
+it tells how to install Info files in the usual manner. (See node: Install
+an Info File.)
+
+The `info-stnd.info' file describes the standalone Info reader in detail. To
+read this file, type
+
+ $ info -f info-stnd
+
+
+To create a printed manual
+==========================
+
+You need:
+
+ * The `tex' program, which typesets the manual using TeX.
+ * The `texinfo.tex' definition file that tells TeX how to typeset
+ a Texinfo file.
+ * The `texindex' program, which sorts the unsorted index files
+ created by TeX.
+ * A printing program such as `lp' or `lpr',
+ * A printer.
+
+This Texinfo distribution package contains `texinfo.tex', the C source
+for `texindex', and the handy shell script `texi2dvi'. The `tex'
+program is not part of this distribution, but is available separately.
+(See `How to Obtain TeX' in the Texinfo documentation.)
+
+ * Install `tex'. (`texindex' is installed automagically by
+ `make install' in this distribution.)
+
+ * Move the `texinfo.tex' file to an appropriate directory; the current
+ directory will do. (`/usr/local/lib/tex/inputs' might be a good place.
+ See ``Preparing to Use TeX'' in the Texinfo manual, for more
+ information.)
+
+After following those instructions, type the following to make the .dvi
+files:
+
+ $ (cd doc; make dvi)
+
+You can then print the resulting .dvi files with the `lpr' or `lp'
+commands, or maybe `dvips'.
+
+For example, the command to print the texinfo.dvi file might be:
+
+ $ lpr -d texinfo.dvi
+
+The name of the printing command depends on the system; `lpr -d' is
+common, and is illustrated here. You may use a different name for the
+printing command.
+
+Please report bugs to bug-texinfo@gnu.org.
+
+Happy formatting.
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..5833d32
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,74 @@
+# Makefile.am for texinfo.
+# $Id: Makefile.am,v 1.25 2008/07/05 13:37:39 karl Exp $
+# Process this file with automake to produce Makefile.in in all directories.
+#
+# This file is free software; as a special exception the author 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.
+
+# Find our headers and gnulib headers.
+ACLOCAL_AMFLAGS = -I gnulib/m4
+
+# Additional files to distribute.
+EXTRA_DIST = ChangeLog.46 INSTALL.generic INTRODUCTION README.dev system.h \
+ djgpp/README djgpp/config.bat djgpp/config.sed djgpp/config.site \
+ gnulib/m4/gnulib-cache.m4
+
+# This is to prevent texinfo.tex from being included in the top-level
+# distribution directory.
+TEXINFO_TEX = doc/texinfo.tex
+
+if TOOLS_ONLY
+ # Build native tools only.
+ SUBDIRS = lib info install-info makeinfo util
+else
+ # All subdirectories.
+ # Do libs first since the C programs depend on it.
+ # Do doc last so makeinfo will be built when we get there.
+ # Others are alphabetical.
+ SUBDIRS = $(native_tools) gnulib/lib lib \
+ install-info info makeinfo po util doc
+endif
+
+# One special target for installers to use by hand if desired.
+install-tex:
+ cd doc && $(MAKE) TEXMF=$(TEXMF) install-tex
+
+distclean-local:
+ -test -d "$(native_tools)" && rm -rf "$(native_tools)"
+
+# Don't install native tools for cross compile.
+if TOOLS_ONLY
+install:
+
+endif
+
+# From coreutils.
+# Verify that all source files using _() are listed in po/POTFILES.in.
+# Run this before making pretests, as well as official releases, so that
+# translators will see changed string.
+po-check:
+ if test -f po/POTFILES.in; then \
+ grep -E -v '^(#|$$)' po/POTFILES.in \
+ | grep -v '^src/false\.c$$' | sort > $@-1; \
+ files=; \
+ for file in $$($(CVS_LIST_EXCEPT)) `find [a-z]* -name '*.[ch]'`; do \
+ case $$file in \
+ djgpp/* | man/*) continue;; \
+ esac; \
+ case $$file in \
+ *.[ch]) \
+ base=`expr " $$file" : ' \(.*\)\..'`; \
+ { test -f $$base.l || test -f $$base.y; } && continue;; \
+ esac; \
+ files="$$files $$file"; \
+ done; \
+ grep -E -l '\b(N?_|gettext *)\([^)"]*("|$$)' $$files \
+ | sort -u > $@-2; \
+ diff -u $@-1 $@-2 || exit 1; \
+ rm -f $@-1 $@-2; \
+ fi
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..add8f82
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,936 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008 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 for texinfo.
+# $Id: Makefile.am,v 1.25 2008/07/05 13:37:39 karl Exp $
+# Process this file with automake to produce Makefile.in in all directories.
+#
+# This file is free software; as a special exception the author 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@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@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 = README $(am__configure_deps) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(srcdir)/config.in \
+ $(top_srcdir)/configure ABOUT-NLS AUTHORS COPYING ChangeLog \
+ INSTALL NEWS 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/mdate-sh build-aux/missing \
+ build-aux/texinfo.tex
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/gnulib/m4/alloca.m4 \
+ $(top_srcdir)/gnulib/m4/argz.m4 \
+ $(top_srcdir)/gnulib/m4/codeset.m4 \
+ $(top_srcdir)/gnulib/m4/eealloc.m4 \
+ $(top_srcdir)/gnulib/m4/environ.m4 \
+ $(top_srcdir)/gnulib/m4/error.m4 \
+ $(top_srcdir)/gnulib/m4/exitfail.m4 \
+ $(top_srcdir)/gnulib/m4/extensions.m4 \
+ $(top_srcdir)/gnulib/m4/getopt.m4 \
+ $(top_srcdir)/gnulib/m4/gettext.m4 \
+ $(top_srcdir)/gnulib/m4/gettimeofday.m4 \
+ $(top_srcdir)/gnulib/m4/glibc21.m4 \
+ $(top_srcdir)/gnulib/m4/gnulib-common.m4 \
+ $(top_srcdir)/gnulib/m4/gnulib-comp.m4 \
+ $(top_srcdir)/gnulib/m4/iconv.m4 \
+ $(top_srcdir)/gnulib/m4/include_next.m4 \
+ $(top_srcdir)/gnulib/m4/inline.m4 \
+ $(top_srcdir)/gnulib/m4/intlmacosx.m4 \
+ $(top_srcdir)/gnulib/m4/lib-ld.m4 \
+ $(top_srcdir)/gnulib/m4/lib-link.m4 \
+ $(top_srcdir)/gnulib/m4/lib-prefix.m4 \
+ $(top_srcdir)/gnulib/m4/localcharset.m4 \
+ $(top_srcdir)/gnulib/m4/longlong.m4 \
+ $(top_srcdir)/gnulib/m4/malloc.m4 \
+ $(top_srcdir)/gnulib/m4/malloca.m4 \
+ $(top_srcdir)/gnulib/m4/mbchar.m4 \
+ $(top_srcdir)/gnulib/m4/mbiter.m4 \
+ $(top_srcdir)/gnulib/m4/mbrtowc.m4 \
+ $(top_srcdir)/gnulib/m4/mbscasecmp.m4 \
+ $(top_srcdir)/gnulib/m4/mbschr.m4 \
+ $(top_srcdir)/gnulib/m4/mbslen.m4 \
+ $(top_srcdir)/gnulib/m4/mbsncasecmp.m4 \
+ $(top_srcdir)/gnulib/m4/mbsstr.m4 \
+ $(top_srcdir)/gnulib/m4/mbstate_t.m4 \
+ $(top_srcdir)/gnulib/m4/mbswidth.m4 \
+ $(top_srcdir)/gnulib/m4/memchr.m4 \
+ $(top_srcdir)/gnulib/m4/memcmp.m4 \
+ $(top_srcdir)/gnulib/m4/memcpy.m4 \
+ $(top_srcdir)/gnulib/m4/memmem.m4 \
+ $(top_srcdir)/gnulib/m4/memmove.m4 \
+ $(top_srcdir)/gnulib/m4/mempcpy.m4 \
+ $(top_srcdir)/gnulib/m4/mkstemp.m4 \
+ $(top_srcdir)/gnulib/m4/nls.m4 \
+ $(top_srcdir)/gnulib/m4/onceonly.m4 \
+ $(top_srcdir)/gnulib/m4/po.m4 \
+ $(top_srcdir)/gnulib/m4/progtest.m4 \
+ $(top_srcdir)/gnulib/m4/setenv.m4 \
+ $(top_srcdir)/gnulib/m4/stdbool.m4 \
+ $(top_srcdir)/gnulib/m4/stdint.m4 \
+ $(top_srcdir)/gnulib/m4/stdlib_h.m4 \
+ $(top_srcdir)/gnulib/m4/stpcpy.m4 \
+ $(top_srcdir)/gnulib/m4/strdup.m4 \
+ $(top_srcdir)/gnulib/m4/strerror.m4 \
+ $(top_srcdir)/gnulib/m4/string_h.m4 \
+ $(top_srcdir)/gnulib/m4/strndup.m4 \
+ $(top_srcdir)/gnulib/m4/strnlen.m4 \
+ $(top_srcdir)/gnulib/m4/sys_stat_h.m4 \
+ $(top_srcdir)/gnulib/m4/sys_time_h.m4 \
+ $(top_srcdir)/gnulib/m4/tempname.m4 \
+ $(top_srcdir)/gnulib/m4/unistd_h.m4 \
+ $(top_srcdir)/gnulib/m4/wchar.m4 \
+ $(top_srcdir)/gnulib/m4/wchar_t.m4 \
+ $(top_srcdir)/gnulib/m4/wctype.m4 \
+ $(top_srcdir)/gnulib/m4/wcwidth.m4 \
+ $(top_srcdir)/gnulib/m4/wint_t.m4 \
+ $(top_srcdir)/gnulib/m4/xalloc.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 =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-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 uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = @native_tools@ gnulib/lib lib install-info info \
+ makeinfo po util doc
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ { test ! -d $(distdir) \
+ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -fr $(distdir); }; }
+DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.lzma
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+ARGZ_H = @ARGZ_H@
+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@
+GETOPT_H = @GETOPT_H@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_DUP2 = @GNULIB_DUP2@
+GNULIB_ENVIRON = @GNULIB_ENVIRON@
+GNULIB_FCHDIR = @GNULIB_FCHDIR@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+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_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRSEP = @GNULIB_STRSEP@
+GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
+GNULIB_STRSTR = @GNULIB_STRSTR@
+GNULIB_STRTOD = @GNULIB_STRTOD@
+GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
+GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GREP = @GREP@
+HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR = @HAVE_DECL_STRERROR@
+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_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SETENV = @HAVE_SETENV@
+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_SLEEP = @HAVE_SLEEP@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRNDUP = @HAVE_STRNDUP@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNSETENV = @HAVE_UNSETENV@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE__BOOL = @HAVE__BOOL@
+HELP2MAN = @HELP2MAN@
+HEVEA = @HEVEA@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LDFLAGS = @LDFLAGS@
+LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@
+LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_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_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_FCHDIR = @REPLACE_FCHDIR@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+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@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYS_STAT_H = @SYS_STAT_H@
+SYS_TIME_H = @SYS_TIME_H@
+TERMLIBS = @TERMLIBS@
+TEX = @TEX@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+VOID_UNSETENV = @VOID_UNSETENV@
+WCHAR_H = @WCHAR_H@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WCTYPE_H = @WCTYPE_H@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+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@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_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@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+native_tools = @native_tools@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+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@
+
+# Find our headers and gnulib headers.
+ACLOCAL_AMFLAGS = -I gnulib/m4
+
+# Additional files to distribute.
+EXTRA_DIST = ChangeLog.46 INSTALL.generic INTRODUCTION README.dev system.h \
+ djgpp/README djgpp/config.bat djgpp/config.sed djgpp/config.site \
+ gnulib/m4/gnulib-cache.m4
+
+
+# This is to prevent texinfo.tex from being included in the top-level
+# distribution directory.
+TEXINFO_TEX = doc/texinfo.tex
+@TOOLS_ONLY_FALSE@SUBDIRS = $(native_tools) gnulib/lib lib \
+@TOOLS_ONLY_FALSE@ install-info info makeinfo po util doc
+
+@TOOLS_ONLY_TRUE@SUBDIRS = lib info install-info makeinfo util
+all: config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+am--refresh:
+ @:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
+ cd $(srcdir) && $(AUTOMAKE) --gnu \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu 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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+
+config.h: stamp-h1
+ @if test ! -f $@; then \
+ rm -f stamp-h1; \
+ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
+ else :; fi
+
+stamp-h1: $(srcdir)/config.in $(top_builddir)/config.status
+ @rm -f stamp-h1
+ cd $(top_builddir) && $(SHELL) ./config.status config.h
+$(srcdir)/config.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ 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.
+$(RECURSIVE_TARGETS):
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; 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; \
+ (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"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ 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 || \
+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) config.in $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ list='$(SOURCES) $(HEADERS) config.in $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+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 $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$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 \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ distdir=`$(am__cd) $(distdir) && pwd`; \
+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+ (cd $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$top_distdir" \
+ distdir="$$distdir/$$subdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+ -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -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__remove_distdir)
+
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+ $(am__remove_distdir)
+dist-lzma: distdir
+ tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+ $(am__remove_distdir)
+
+dist-tarZ: distdir
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__remove_distdir)
+
+dist-shar: distdir
+ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+ $(am__remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__remove_distdir)
+
+dist dist-all: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+ $(am__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) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.lzma*) \
+ unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ esac
+ chmod -R a-w $(distdir); chmod a+w $(distdir)
+ mkdir $(distdir)/_build
+ mkdir $(distdir)/_inst
+ chmod a-w $(distdir)
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && cd $(distdir)/_build \
+ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+ $(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
+ $(am__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:
+ @cd $(distuninstallcheck_dir) \
+ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+ || { 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:
+@TOOLS_ONLY_FALSE@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:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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-local \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+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: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+ install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am am--refresh check check-am clean clean-generic \
+ ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
+ dist-lzma dist-shar dist-tarZ dist-zip distcheck distclean \
+ distclean-generic distclean-hdr distclean-local 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-recursive uninstall uninstall-am
+
+
+@TOOLS_ONLY_TRUE@ # Build native tools only.
+@TOOLS_ONLY_FALSE@ # All subdirectories.
+@TOOLS_ONLY_FALSE@ # Do libs first since the C programs depend on it.
+@TOOLS_ONLY_FALSE@ # Do doc last so makeinfo will be built when we get there.
+@TOOLS_ONLY_FALSE@ # Others are alphabetical.
+
+# One special target for installers to use by hand if desired.
+install-tex:
+ cd doc && $(MAKE) TEXMF=$(TEXMF) install-tex
+
+distclean-local:
+ -test -d "$(native_tools)" && rm -rf "$(native_tools)"
+
+# Don't install native tools for cross compile.
+@TOOLS_ONLY_TRUE@install:
+
+# From coreutils.
+# Verify that all source files using _() are listed in po/POTFILES.in.
+# Run this before making pretests, as well as official releases, so that
+# translators will see changed string.
+po-check:
+ if test -f po/POTFILES.in; then \
+ grep -E -v '^(#|$$)' po/POTFILES.in \
+ | grep -v '^src/false\.c$$' | sort > $@-1; \
+ files=; \
+ for file in $$($(CVS_LIST_EXCEPT)) `find [a-z]* -name '*.[ch]'`; do \
+ case $$file in \
+ djgpp/* | man/*) continue;; \
+ esac; \
+ case $$file in \
+ *.[ch]) \
+ base=`expr " $$file" : ' \(.*\)\..'`; \
+ { test -f $$base.l || test -f $$base.y; } && continue;; \
+ esac; \
+ files="$$files $$file"; \
+ done; \
+ grep -E -l '\b(N?_|gettext *)\([^)"]*("|$$)' $$files \
+ | sort -u > $@-2; \
+ diff -u $@-1 $@-2 || exit 1; \
+ rm -f $@-1 $@-2; \
+ fi
+# 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/NEWS b/NEWS
new file mode 100644
index 0000000..9e0dd7f
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,888 @@
+$Id: NEWS,v 1.179 2008/09/18 18:45:56 karl Exp $
+This NEWS file records noteworthy changes, very tersely.
+See the manual for detailed information.
+
+ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 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.
+
+*** NEWS FOR ALL AUTHORS OF TEXINFO MANUALS ***
+
+As of version 4.2, Texinfo has a new command @copying to define the
+copyright and copying permissions for a manual. If you haven't already,
+please switch to using it in your next release, because the historical
+method of doing copyright permissions using @ifinfo failed to output
+copyright information in the HTML (or XML) formats. The manual has
+detailed explanations and examples. For convenience, here's a url to
+one of the relevant sections:
+ http://www.gnu.org/software/texinfo/manual/texinfo/html_node/Document-Permissions.html
+
+-------------------------------------------------------------------------------
+
+4.13 (18 September 2008)
+
+* A reference card for Texinfo is now available, in doc/refcard. For
+ convenience, preformatted PDF's for letter-size and A4 paper are included.
+
+* makeinfo:
+ . new option --internal-links for HTML output, to write a tsv file
+ mapping indexed/toc terms to links, for easy reference from external
+ documents.
+ . - as an input file name reads standard input.
+
+* info:
+ . support for multibyte encodings such as UTF-8.
+ . new option --show-malformed-multibytes, to display malformed multibyte
+ sequences.
+ . new environment variable INFO_MAN_COMMAND sets the name of man binary
+ (use it if you a need to override PATH settings).
+
+* install-info:
+ . bug fix: support names with embedded periods (e.g., config.status) again.
+
+* Distribution:
+ . autoconf 2.63.
+
+
+4.12 (20 April 2008)
+
+* Language:
+ . new commands @clicksequence, @click, and @clickstyle for documenting
+ GUI sequences, and @arrow for the default glyph used.
+ . new commands @geq{} and @leq{} for the normal >= and <= relations.
+
+* install-info:
+ . lzma compression supported.
+ . Much work towards compatibility with Debian's independent
+ implementation. Changes in behavior:
+ - new entries are formatted to start at column 34 by default.
+ - existing entries are replaced by default.
+ - new sections are alphabetized among existing sections.
+ - if an entry being removed is the last one in a section, the
+ section is also removed.
+ . Also many new options:
+ --section REGEX TITLE.
+ --no-indent: disable formatting of new entries.
+ --menuentry, --name: specify left-hand side of an entry.
+ --dry-run: alias for --test.
+ --regex REGEX: renamed from --section regex, adds to all sections
+ matching REGEX by default.
+ --add-once: add only to first specified or matching section.
+ --align COL: start description at column COL.
+ --calign COL: start continuation lines in description at COL.
+ --max-width COL: wrap the description at COL.
+ . New section in the Texinfo manual describing all this.
+
+* info:
+ Our goal with these changes to the default interface is to make Info
+ documents more easily and quickly readable, especially by non-experts.
+ . the PageUp and PageDown keys move through the whole document by
+ default, instead of just the current node.
+ . the h command shows the basic help, and H starts the Info tutorial.
+ . the newly-bound x command deletes the current window, e.g., within help.
+ . the scroll-step variable is set to 1 by default, for smooth scrolling.
+ . the cursor-movement-scrolls-p variable is set to 1 by default, so
+ link searches look through the whole document.
+ . regular expression searches are supported, and are the default for
+ both regular and incremental searches.
+ . the new R command toggles between regexp and literal-string searches.
+ . the new variable scroll-last-node controls scrolling at the end of
+ the last node; by default, it now simply reports there are no more
+ nodes. To restore the old behavior, set scroll-last-node=Scroll.
+ . the precise line number specified in index entries is used if available.
+ . --usage=info shows usage for standalone Info.
+ . lzma compression supported.
+
+* Distribution:
+ . language support for no removed/renamed to nb, per Norwegian translators.
+ . new translation: es.
+ . bug fixes in make check (and elsewhere).
+ . gettext 0.17, automake 1.10.1, autoconf 2.62.
+
+
+4.11 (9 September 2007)
+
+* Language:
+ . @documentlanguage now supports an optional country code
+ specification after the language code, a la gettext.
+ . new command @allowcodebreaks controls breaks at _ and - within @code.
+ . new command @frenchspacing controls spacing after sentences.
+ . new command @fonttextsize allows changing body text font size to 10pt.
+ . new command @textdegree{} produces the normal degrees symbol.
+ . new command @thischapternum can be used in TeX headers/footers.
+ . new commands for quotes: @quotedblleft @quotedblright
+ @quoteleft @quoteright @quotedblbase @quotesinglbase
+ @guillemetleft @guillemetright @guilsinglleft @guilsinglright.
+ . new option @set txicodequoteundirected produces an undirected quote
+ in code and example output, instead of the regular right quote.
+ . new option @set txicodequotebacktick produces a grave accent in
+ code and example output, instead of the regular left quote.
+* makeinfo:
+ . The @documentlanguage locale is used to translate various document strings.
+ . --enable-encoding is now the default, meaning Info and plain text
+ output use 8-bit characters given a supported @documentencoding.
+ . new option --css-ref=URL for creating a stylesheet <link> in HTML output.
+ . new option --transliterate-file-names to use a reduction-to-ASCII
+ algorithm for split HTML file names, useful for non-Latin-based languages.
+ . @enddots{} outputs three dots instead of four, for consistency with
+ texinfo.tex.
+ . the Local Variables coding: setting written by --enable-encoding now
+ comes at the very end, after the tags table, so that Emacs can find
+ it in more cases.
+ . @allow-recursion (never documented) is deprecated and produces a warning.
+ . @quote-args (never documented) is now the default behavior.
+ . centering and such take account of character widths.
+ . the --reference-limit option is now a no-op.
+ . improvements to XML and Docbook output and the DTD.
+* texinfo.tex:
+ . @thissection can now be used in custom headings, and @thischapter
+ works reliably even without @set chapternewpage. Custom headings
+ have additional flexibility as well.
+* texi2dvi:
+ . pdftexi2dvi is a new wrapper to `texi2dvi --pdf', equal to texi2pdf,
+ for the sake of AUC-TeX which prepends `pdf' to the compilation
+ command when requested to produce PDF.
+* info:
+ . look for info files in the current directory first, by default.
+ . when calling man, use -a if no explicit section is found.
+ . avoid showing the top(1) man page for nonexistent info files.
+* install-info:
+ . new options --section-regex, --remove-exactly, --debug, --test.
+* Distribution:
+ . autoconf 2.60, automake 1.10, gettext 0.16.1.
+ . gettext support now [external].
+ . new translations: hu (Hungarian), rw (Kinyarwandan), vi (Vietnamese).
+ . most common sources imported from gnulib.
+
+4.10 (omitted)
+
+
+4.9 (29 June 2007)
+* GPLv3.
+* texi2dvi:
+ . new mode --build=tidy which supports compilation in a separate
+ directory, where intermediate files are preserved.
+ . new option --build-dir, to specify where the tidy build will take
+ place, either locally or globally. This allows avoiding the clutter
+ while preserving auxiliary files.
+ . new support for AUC-TeX: texi2dvi (weakly) supports arguments a la
+ TeX such as `\nonstopmode\input{file.tex}'.
+ . new options --ps and --dvipdf, useful especially for pstricks documents.
+ . new option --src-specials, passed to TeX.
+* texinfo.tex:
+ . Latin1, Latin2, Latin9, and UTF-8 are supported -- only as well as
+ the Computer Modern fonts can manage, which means primarily English
+ and western European languages, to a limited extent.
+ . png and jpg images supported in pdf output.
+ . new Russian, Serbian, and Ukrainian translations for texinfo.tex:
+ txi-ru.tex, txi-sr.tex, txi-uk.tex.
+ . section names with \ characters work properly in pdf outlines.
+ . have .toc files use @ as the escape character, instead of \.
+
+
+4.8 (31 December 2004)
+* Language:
+ . new command @euro for the Euro currency symbol, and
+ @documentencoding has some support for ISO-8859-15.
+ . new command @abbr for general abbreviations.
+ . new command @slanted to typeset text in a slanted font,
+ and @sansserif to typeset in a sans serif font.
+* makeinfo:
+ . An empty first argument to cross-reference commands, such as @xref,
+ causes an error. This change was made in 4.1, but not mentioned in NEWS.
+ . HTML output:
+ - <a name="..."> constructs are added for the old-style
+ conversion of node names to HTML names, so that external references
+ to them can continue to work.
+ - "g_t" prefixed to targets for node names beginning with a
+ nonletter, for XHTML compatibility.
+ . Docbook output: recognize more image formats.
+* texi2dvi:
+ . new option --recode, to call recode for input character translation.
+* Distribution:
+ . new convenience script texi2pdf, equivalent to texi2dvi --pdf (from tetex).
+ . some cross-compiling support in configure && make.
+ . new configure option --disable-install-warnings, for TeX.
+ distributions which do have the files installed.
+ . automake 1.9.4.
+
+
+4.7 (9 April 2004)
+* Language:
+ . new commands @float, @caption, @shortcaption, @listoffloats for
+ initial implementation of floating material (figures, tables, etc).
+ Ironically, they do not yet actually float anywhere.
+ . new commands @docbook, @ifdocbook, @ifnotdocbook for conditional Docbook.
+ . new commands @ordf{} and @ordm{} for Spanish feminine/masculine ordinals.
+ . new commands @deftypecv[x] for class variables in typed OO languages.
+ . new command @registeredsymbol for the r-in-a-circle symbol.
+ . new command @headitem to make a heading row in @multitable.
+ . new command @LaTeX{} for the LaTeX logo.
+ . new command @comma{} to avoid comma-parsing problems.
+ . @url is now a synonym for @uref; new command @indicateurl has the
+ old meaning of just displaying a url as text.
+ . @quotation now accepts an optional argument for labelling the text
+ as a `Note', `Tip', etc.
+ . @defun (et al.) heading lines can now be continued with a lone @.
+ . @acronym accepts an optional argument for the meaning of the acronym.
+* makeinfo:
+ . New environment variable TEXINFO_OUTPUT_FORMAT determines the output
+ format at runtime, if no options are specified.
+ . New option --plaintext, equivalent to --no-headers with Info output.
+ . All outputs:
+ - sections are numbered by default.
+ . Info output:
+ - punctuation is inserted after @pxref and @ref, if needed to make
+ cross-references valid.
+ - line numbers included in index menus, so Info readers can go to
+ the exact line of an entry, not just a node. Also in plaintext output.
+ - ^@^H[index^@^H] cookie included in index menus, so Info readers
+ can handle the ] etc. commands better.
+ . HTML output:
+ - new algorithm for cross-references to other manuals, for maximum
+ portability and stability.
+ - include node name in <title> with split output.
+ - @multicolumn fractions become percentages.
+ - entities used for bullets, quotes, dashes, and others.
+ - index entries are links to the exact locations.
+ - <h4> and <h5> used for @sub and @subsubsections again.
+ - accented dotless i supported.
+ . XML output: many new tags and structure to preserve more source features.
+ . Docbook output:
+ - upgraded DTD to Docbook XML 4.2, no longer using Docbook SGML.
+ - improved translation in general, for instance:
+ - line annotations and marked quotations.
+* texi2dvi:
+ . if available, use etex (pdfetex if --pdf) by default.
+ . if the input file includes thumbpdf.sty (for LaTeX), then run thumbpdf.
+ . more output if --debug.
+* texinfo.tex:
+ . @defun names are now printed in typewriter (instead of bold), and
+ within the arguments, @var text is printed in slanted typewriter.
+ . @tex code is executed inside a TeX group, so that any changes must
+ be prefixed with \global (or the equivalent) to be effective. (This
+ change was actually made years ago, but never made it into the NEWS.)
+* info:
+ . new option --where (aka --location, -w) to report where an Info file
+ would be found, instead of reading it.
+ . by default, output ANSI terminal escape sequences as-is; new option
+ --no-raw-escapes overrides this.
+ . use the newly-generated index line numbers.
+* Distribution:
+ . new script gendocs.sh (not installed), for use by GNU maintainers in
+ getting their manuals on the GNU web site. Documented in
+ maintain.texi (http://www.gnu.org/prep/maintain/).
+ . Most code uses ANSI C prototypes, to some extent.
+ . New translation: nb.
+ . automake 1.8.3, autoconf 2.59, gettext 0.14.1.
+
+
+4.6 (10 June 2003)
+* Language:
+ . new command @/ specifies an allowable breakpoint within a line.
+ . new command @dofirstparagraphindent to control whether the first
+ paragraph following a section heading is indented. Default is to
+ omit this indentation, unlike the output up to now.
+ . new command @indent for explicitly indenting a paragraph.
+ . makeinfo writes a new construct for @image in Info output, so that
+ graphical Info browsers (such as Emacs Info under X) can display an
+ actual image. (Standalone Info ignores this, since it runs in a tty.)
+* makeinfo:
+ . Common:
+ - search for image files in the include file search path.
+ - warns if @value is used on an undefined variable.
+ . Info output:
+ - default --split-size now 300,000 bytes, up from 50,000.
+ - with --enable-encoding and a given @documentencoding,
+ output a Local Variables section specifying that encoding, for use
+ with Emacs.
+ . HTML output:
+ - uses <h3> at the smallest.
+ - a few css <style> definitions are included to better
+ implement @format, @display, @small..., etc.
+ - new option --css-include=FILE includes FILE in the <style>.
+ - @cartouche now outputs a <table> with a border.
+* texinfo.tex:
+ . new Polish translation txi-pl.tex.
+* texi2dvi:
+ . --command=CMD replaces --texinfo=CMD; it inserts CMD at the first
+ line of LaTeX files now, or after the @setfilename for Texinfo files.
+* info:
+ . RET now goes to the nearest xref (rather like Emacs Info),
+ instead of the next xref starting on the current line.
+* Distribution:
+ . new Romanian (ro) translation.
+ . variables now declared const where appropriate.
+ . gettext 0.12.1, automake 1.7.5.
+
+
+4.5 (4 February 2003)
+* info:
+ . a bug in 4.4 prevented compressed info files from being found.
+* Distribution:
+ . detect sys/ptem.h on Solaris.
+
+
+4.4 (31 January 2003)
+* Language:
+ . The ' (ASCII apostrophe/right quote) character is finally allowed in
+ node and anchor names. Thus, after installing this texinfo.tex,
+ existing .aux files will cause errors! Remove them and rerun TeX to
+ generate good ones.
+ . @value constructs are now expanded in the filename arguments to
+ @include and @verbatiminclude.
+* makeinfo:
+ . @macro names may no longer include ^ or _, for the sake of math mode.
+ . bug fix: @copying text is now reflected in tag table positions;
+ before, nodes may not have been found with a long-enough @copying.
+ . bug fix: html @verb arg is quoted properly, and does not imply
+ a paragraph break.
+* texinfo.tex:
+ . @smallexample and the like now output in a smaller font (9pt) in all
+ paper formats, not just @smallbook and @afourpaper.
+ . new translation txi-tr.tex.
+ . bug fix: <>| and other characters do not disappear when they are
+ first on a line in @verbatim.
+* install-info:
+ . bug fix: don't translate the `* Menu' info keyword.
+* info:
+ . CTRL-H is treated like DEL in incremental search.
+ . arrow keys once again work in isearch contexts under Solaris.
+* infokey:
+ . use .info key bindings before defaults.
+ . allow prefix keys to be disabled.
+* Distribution:
+ . update to GNU FDL 1.2 (http://www.gnu.org/licenses/fdl.html).
+ . getopt and other common library files updated from gnulib
+ (http://savannah.gnu.org/projects/gnulib/).
+ . autoconf 2.57, automake 1.7.2.
+
+
+4.3 (14 November 2002)
+* Language:
+ . new command @tie{} to do a real tie (unbreakable interword space).
+* makeinfo:
+ . html output for @defun and friends now has font changes.
+ . html output has some class attributes.
+ . xml and docbook output improved in many details.
+* texinfo.tex:
+ . new Italian translations, txi-it.tex.
+ . pdf bookmarks for unnumbered sections work.
+ . type name for @defun and friends no longer extends into margin.
+* info:
+ . automatic-footnotes now off by default, for emacs compatibility.
+ . crash when MALLOC_CHECK_=2 fixed.
+* install-info:
+ . new option --infodir synonym for --info-dir, for compatibility with
+ the Debian install-info.
+ . support for bzip2-compressed files.
+* texindex:
+ . omit initial if the entire index is under one character.
+* Distribution:
+ . development sources now available under CVS, see
+ http://savannah.gnu.org/projects/texinfo/
+ . Turkish message translation.
+ . gettext 0.11.5, autoconf 2.54, automake 1.7.1.
+
+
+4.2 (1 April 2002)
+* Language:
+ . new command @copying to define copying permissions. See above.
+ . new conditionals @ifplaintext, @ifnotplaintext for the plain text
+ (--no-headers) output format.
+ . new command @\ to produce literal \ inside @math, since \ by itself
+ no longer works.
+* makeinfo:
+ . emit accesskey attributes for keyboard shortcuts to menu items.
+ . @{even,every,odd}{footing,header} are ignored by makeinfo now, so
+ they no longer need to be enclosed in @iftex.
+* texinfo.tex:
+ . bug fix for pdf-format table of contents.
+* info:
+ . bug fixes for -R (--raw-escapes).
+ . --help shows short option names.
+* Distribution:
+ . the doc.c, funs.h, and key.c files in info/ are no longer generated
+ at make time, to appease Automake's make distcheck.
+ . gettext 0.11.1, autoconf 2.53, automake 1.6 (with install-info kludge).
+
+
+4.1 (4 March 2002)
+* Language:
+ . new commands @verbatim and @verb for printing verbatim inserts.
+ . new command @verbatiminclude for verbatim include of files.
+ . new environment @documentdescription for defining the HTML description.
+ . new command @afivepaper for the A5 paper size.
+* makeinfo:
+ . supports xml and docbook output.
+ . supports HTML splitting by node, which is now the default.
+ . new option --split-size to control maximum size of split info files.
+ . new option --enable-encoding to enable
+* info:
+ . user-specified key bindings supported.
+ . ANSI escape sequences (as produced by groff) removed from man output
+ by default; use --raw-escapes to let them through if your terminal
+ supports them.
+ . RET terminates incremental search normally.
+* texinfo.tex:
+ . @math implies @tex, so all the usual plain TeX math is supported.
+ . smaller fonts for @smallexample, in all page sizes.
+ . improvements in the PDF support.
+* texi2dvi:
+ . new option -o to explicitly specify output filename.
+* Distribution:
+ . switch to GNU Free Documentation License (http://www.gnu.org/copyleft/).
+ . update to GNU gettext 0.11, autoconf 2.52, and automake 1.5.
+ . Danish, Swedish, and Hebrew message translations.
+
+
+4.0 (28 September 1999)
+* Language:
+ . New command @anchor for cross references to arbitrary points.
+ . New commands @documentlanguage sets the main document language,
+ and @documentencoding sets the document input encoding (although not
+ much is done yet with either).
+ . New command @pagesizes allows limited control of text area for typesetting.
+ . New command @acronym for abbreviations in all caps, such as `NASA'.
+ . New command @alias for simple command aliases.
+ . New command @definfoenclose for better control of info output.
+ . New commands @deftypeivar for typed instance variables of a class
+ and @deftypeop for typed operations of a class.
+ . New command @novalidate suppresses cross-reference checking and (in
+ TeX) auxiliary file creation.
+ . New commands @setcontentsaftertitlepage and
+ @setshortcontentsaftertitlepage to force printing the table of
+ contents after @end titlepage. Also, @contents and @shortcontents
+ themselves can now appear at the beginning of the document as
+ well as the end.
+ . New markup commands: @env (for environment variables), @command (for
+ command names), @option (for command-line options).
+ . New commands @smallformat and @smalldisplay, a la @smallexample.
+ . New command @exampleindent to set indentation of example-like
+ environments a la @paragraphindent.
+ . @uref takes an optional third argument of text to show instead of
+ (rather than in addition to) the url for info and dvi output.
+ . @footnote works in an @item for a @table.
+* texinfo.tex:
+ . latest version always at ftp://ftp.gnu.org/gnu/texinfo/texinfo.tex
+ (and mirrors).
+ . implements @macro.
+ . implements @paragraphindent (except asis).
+ . @emph and @i use true italic type (cmti) instead of slanted (cmsl).
+ . implements pdf output when run with pdftex.
+ . better support for internationalization via txi-??.tex files.
+ . footnotes now set in a smaller point size.
+* makeinfo:
+ . supports HTML output with the --html option.
+ . implication of --html: @top nodes should be wrapped in @ifnottex
+ rather than @ifinfo. @ifinfo conditionals are not expanded with --html.
+ . new option --number-sections to output chapter/section numbers.
+ . dashes and quotes are not treated specially in node names.
+ . new option --commands-in-node-names to allow @-commands in node names.
+ (Not implemented in TeX, and most likely never will be.)
+ . @emph output uses _underscores_.
+ . @image looks for .png files before .jpg.
+ . only output `Making ... file' line when verbose.
+ . allow -v as synonym for --verbose.
+ . new command line options to specify which conditionals to process
+ (but --iftex is not fully implemented).
+ . warns if @var contains any of ,[]().
+ . @quote-arg implicitly done for all one-argument macros, so commas in
+ the argument text are allowed.
+ . \\ required in macro body to get single \, no other `escapes' defined.
+* info:
+ . ISO Latin 1 characters are displayed and input as-is by default.
+ . new option --vi-keys to enable vi-like and less-like key bindings.
+ . new command S does case-sensitive searching.
+ . new commands C-x n and C-x N repeat last search, respectively, in the
+ same and in reverse direction, without prompting for the string. These
+ commands are bound to n and N under --vi-keys, like in Less.
+ . new command G menu1 menu2 ... searches for menu items from (dir),
+ as allowed on the command line.
+ . new command O (capital o, not zero) goes directly to the node that
+ describes command-line options.
+ . new command-line option --show-options causes the node which
+ describes command-line options to be the first node displayed.
+ . M-prior and M-DEL do new command info-scroll-other-window-backward.
+ . / searches like s does.
+ . If the search string includes upper-case letters, in both incremental
+ and non-incremental search, the search is case-sensitive.
+ . S searches case-sensitively even if the search string is all
+ lower-case.
+ . - makes the argument negative (so e.g. `- /' searches backward).
+ . l restores point in the window returned to.
+ . SPC/DEL do not move outside the current document.
+ . foo.info is found before foo.
+ . `info foo --index-search=bar' now searches for bar in foo's index.
+ . support for files compressed with bzip2.
+* install-info:
+ . handles gzipped dir files.
+ . sort entries into alphabetical order.
+ . install direntries only in preceding dircategory, not in all.
+ . --delete does not require the info file to exist.
+ . --delete can handle XEmacs-style dir entries.
+* texi2dvi:
+ . bug fixed: now uses only the @iftex and @tex parts of the source.
+ . process LaTeX source as well as Texinfo source.
+ . output PDF (using pdftex) with new option --pdf.
+ . handles --OPTION=ARG style of command line arguments.
+ . new option --batch for progress reports but no interaction.
+ . new option --clean to remove all auxiliary files.
+ . new option --quiet for silence (unless there are errors).
+ . new option -I for specifying directories for @include to search.
+ . handles LaTeX files (running BibTeX etc.).
+* Fixes to util/gen-dir-node and util/fix-info-dir (formerly util/update-info).
+* Distribution:
+ . Man pages included.
+ . Czech and Norwegian message translations.
+ . Various translations for texinfo.tex fixed words included.
+ . DJGPP support.
+
+
+3.12 (3 March 1998)
+* Elisp files removed, since they are only usefully distributed with Emacs.
+* Restore inclusion of compile-time $(infodir) to INFOPATH.
+* install-info creates a proper dir file.
+* Various portability fixes.
+
+
+3.11 (31 July 1997)
+* New commands:
+ - @uref to make a reference to a url; @url now only indicates such.
+ - @image to include graphics (epsf for TeX).
+ - @deftypemethod and @deftypemethodx to document methods in strongly
+ typed object-oriented languages, such as C++.
+ - @html for raw HTML.
+ - @ifnothtml @ifnotinfo @ifnottex for more precise conditionals.
+ - @kbdinputstyle to control when @kbd uses the slanted typewriter font.
+ - @email takes second optional argument.
+* texinfo.tex reads texinfo.cnf (if present) for site-wide TeX
+ configuration; for example, A4 paper sizes.
+* info:
+ - arrow keys supported.
+ - trailing : in INFOPATH appends default path.
+ - new option --index-search for online help support.
+* makeinfo:
+ - output files removed if errors unless (new option) --force.
+ - new option -P to prepend to search path.
+ - macro expansion file can be standard output.
+* install-info creates a new dir file if necessary.
+* update-info script to create a dir file from all info files.
+* Elisp: texnfo-tex.el and detexinfo.el removed from the distribution;
+ - texnfo-tex features are now part of standard TeX & Texinfo packages;
+ - makeinfo --no-headers does a better job than detexinfo.el.
+* Documentation:
+ - Updates, revisions, corrections in the manual.
+ - makeinfo.texi removed, as it was a copy of what was in texinfo.texi.
+* gettext support in sources, French and German translations included.
+* info man page removed; use the Texinfo manual.
+* Automake used, other portability fixes.
+
+3.10 (omitted)
+
+
+3.9 (4 October 1996)
+* makeinfo:
+ - Give a suppressible (with --no-validate) error for references
+ outside of any node.
+ - Keep track of multitable output correctly for split files; this
+ caused nodes after the first multitable to be ``undefined''.
+* install-info:
+ - Rename --infodir option to --info-dir.
+ - More robust error checking to avoid various crashes.
+* configure: Include replacements for memcpy and memmove functions in
+ the distribution, in case they are missing.
+
+
+3.8 (30 September 1996)
+* Define and/or document new and/or previously existing commands:
+ Accents: @" @' @, @" @= @^ @` @~ @H @d @dotaccent @dotless @ringaccent
+ @tieaccent @u @ubaraccent @v
+ Special characters: @AA @AE @L @O @OE @aa @ae @exclamdown @l @o @oe
+ @pounds @questiondown @ss
+ Special punctuation: @! @? @enddots
+ dir file maintenance: @dircategory @direntry; also new program, install-info
+ HTML support: @email @url @ifhtml...@end ifhtml
+ Macros: @macro @unmacro
+ Tables: @multitable @tab
+ Hyphenation: @- @hyphenation
+ Spacing: @ @<TAB> @<NEWLINE>
+ Sectioning:
+ @headings singleafter/doubleafter (change heading style after current page)
+ @centerchap
+ @setchapterstyle
+ Other:
+ @shorttitlepage (simple title pages)
+ @detailmenu...@end detailmenu (help makeinfo parse master menus)
+* Makeinfo prefers an input file named `foo.texinfo' or `foo.texi' or
+ `foo.txinfo' to just `foo' (the latter most likely being an executable).
+* Makeinfo implements @. @! @? correctly, as end-of-sentence punctuation.
+* @key marks its argument with a lozenge in TeX and <...> in Info.
+* TeX output has substantially decreased interline spacing and other
+ formatting changes.
+* Remove these obsolete and never-documented commands:
+ @infotop
+ @infoappendix @infoappendixsec @infoappendixsubsec @infoappendixsubsubsec
+ @infochapter @infosection @infosubsection @infosubsubsection
+ @infounnumbered @infounnumberedsec @infounnumberedsubsec
+ @infounnumberedsubsubsec
+ @input
+ @smallbreak @medbreak
+ @overfullrule
+ @br
+* Deprecate these obsolete commands, to be removed in the next release:
+ @ctrl
+ @infoinclude
+ @iappendix @iappendixsection @iappendixsec @iappendixsubsec
+ @iappendixsubsubsec
+ @ichapter @isection @isubsection @isubsubsection
+ @iunnumbered @iunnumberedsec @iunnumberedsubsec @iunnumberedsubsubsec
+ @setchapterstyle
+ @titlespec
+
+
+3.7 (24 December 1995)
+* Have --version print texinfo release number as well as the individual
+ program version.
+* Better man page cleaning.
+* Update Elisp files from current Emacs release.
+
+
+3.6 (21 June 1995)
+* Unmatched brace error reporting improved.
+* Missing comment terminator prevented compilation.
+
+
+3.5 (20 June 1995)
+* Autoconf update.
+* Support for parallel makes.
+* make install does not install Elisp files.
+
+
+3.4 (19 June 1995)
+* Handle @ifhtml in Elisp.
+* Update FSF address.
+
+
+3.3 (15 June 1995)
+* Portability changes.
+* Compile Elisp files.
+* Don't distribute .info* files.
+
+
+3.2 (9 June 1995)
+* Standalone Info can read Unix man pages.
+* New commands: @! @? @^ @" @enddots.
+* makeinfo -E does macro expansion (and nothing else).
+
+
+3.1 (23 May 1993)
+Just bug fixes, see ChangeLog for full details.
+
+
+3.0: first release of Texinfo version 2, with many new commands.
+
+
+
+Here is the separate NEWS for old releases of Info:
+
+Version 2.11, Sat Apr 1 09:15:21 1995
+
+Changes since 2.7 beta:
+
+Although the basic code remains the same, there are numerous nits
+fixed, including some display bugs, and a memory leak. Some changes
+that have taken place with larger impact include the way in which the
+(dir) node is built; I have added in support for "localdir"
+directories among other things. Info files may be stored in
+compressed formats, and in their own subdirectories; menu items which
+do not explicitly name the node to which they are attached have the
+menu item name looked up as an Info file if it is not found within the
+current document. This means that the menu item:
+
+* Info:: The Info documentation reader.
+
+in (dir) refers to the info node "(info)Top".
+
+Please see the ChangeLog and documentation for details on other
+changes.
+
+Version 2.7 beta, Wed Dec 30 02:02:38 1992
+Version 2.6 beta, Tue Dec 22 03:58:07 1992
+Version 2.5 beta, Tue Dec 8 14:50:35 1992
+Version 2.4 beta, Sat Nov 28 14:34:02 1992
+Version 2.3 beta, Fri Nov 27 01:04:13 1992
+Version 2.2 beta, Tue Nov 24 09:36:08 1992
+Version 2.1 beta, Tue Nov 17 23:29:36 1992
+
+Changes since 2.5 beta:
+
+Note that versions 2.6 and 2.7 Beta were only released to a select group.
+
+* "info-" removed from the front of M-x commands.
+
+* Automatic footnote display. When you enter a node which contains
+ footnotes, and the variable "automatic-footnotes" is "On", Info pops
+ up a window containing the footnotes. Likewise, when you leave that
+ node, the window containing the footnotes goes away.
+
+* Cleaner built in documentation, and documentation functions.
+
+ Use:
+ o `M-x describe-variable' to read a variable's documenation
+ o `M-x describe-key' to find out what a particular keystroke does.
+ o `M-x describe-function' to read a function's documentation.
+ o `M-x where-is' to find out what keys invoke a particular function.
+
+* Info can "tile" the displayed windows (via "M-x tile-windows"). If
+ the variable "automatic-tiling" is "On", then splitting a window or
+ deleting a window causes the remaining windows to be retiled.
+
+* You can save every keystroke you type in a "dribble file" by using the
+ `--dribble FILENAME' option. You can initially read keystrokes from an
+ alternate input stream with `--restore FILENAME', or by redirecting
+ input on the command line `info < old-dribble'.
+
+* New behaviour of menu items. If the label is the same as the
+ target node name, and the node couldn't be found in the current file,
+ treat the label as a file name. For example, a menu entry in "DIR"
+ might contain:
+
+ * Emacs:: Cool text-editor.
+
+ Info would not find the node "(dir)Emacs", so just plain "(emacs)"
+ would be tried.
+
+* New variable "ISO-Latin" allows you to use European machines with
+ 8-bit character sets.
+
+* Cleanups in echo area reading, and redisplay. Cleanups in handling the
+ window which shows possible completions.
+
+* Info can now read files that have been compressed. An array in filesys.c
+ maps extensions to programs that can decompress stdin, and write the results
+ to stdout. Currently, ".Z"/uncompress, ".z"/gunzip, and ".Y"/unyabba are
+ supported. The modeline for a compressed file shows "zz" in it.
+
+* There is a new variable "gc-compressed-files" which, if non-zero, says
+ it is okay to reclaim the file buffer space allocated to a file which
+ was compressed, if, and only if, that file's contents do not appear in
+ any history node.
+
+* New file `nodemenu.c' implements a few functions for manipulating
+ previously visited nodes. `C-x C-b' (list-visited-nodes) produces a
+ menu of the nodes that could be reached by info-history-node in some
+ window. `C-x b' (select-visited-node) is similar, but reads one of
+ the node names with completion.
+
+* Keystroke `M-r' (move_to_screen_line) allows the user to place the cursor at
+ the start of a specific screen line. Without a numeric argument, place the
+ cursor on the center line; with an arg, place the cursor on that line.
+
+* Interruptible display implemented. Basic display speedups and hacks.
+* The message "*** Tags Out of Date ***" now means what it says.
+* Index searching with `,' (info-index-next) has been improved.
+* When scrolling with C-v, C-M-v, or M-v, only "Page Only" scrolling
+ will happen.
+
+* Continous scrolling (along with `]' (info-global-next) and `['
+ (info-global-prev) works better. `]' and `[' accept numeric
+ arguments, moving that many nodes in that case.
+
+* `C-x w' (info-toggle-wrap) controls how lines wider than the width
+ of the screen are displayed. If a line is too long, a `$' is
+ displayed in the rightmost column of the window.
+
+* There are some new variables for controlling the behaviour of Info
+ interactively. The current list of variables is as follows:
+
+ Variable Name Default Value Description
+ ------------- ------------- -----------
+ `automatic-footnotes' On When "On", footnotes appear and
+ disappear automatically.
+
+ `automatic-tiling' Off When "On", creating of deleting a
+ window resizes other windows.
+
+ `visible-bell' Off If non-zero, try to use a visible bell.
+
+ `errors-ring-bell' On If non-zero, errors cause a ring.
+
+ `show-index-match' On If non-zero, the portion of the string
+ matched is highlighted by changing its
+ case.
+
+ `scroll-behaviour' Continuous One of "Continuous", "Next Only", or
+ "Page Only". "Page Only" prevents you from
+ scrolling past the bottom or top of a node.
+ "Next Only" causes the Next or Prev node to
+ be selected when you scroll past the bottom
+ or top of a node. "Continous" moves
+ linearly through the files hierchichal
+ structure.
+
+ `scroll-step' 0 Controls how scrolling is done for you when
+ the cursor moves out of the current window.
+ Non-zero means it is the number of lines
+ you would like the screen to shift. A
+ value of 0 means to center the line
+ containing the cursor in the window.
+
+ `gc-compressed-files' Off If non-zero means it is okay to reclaim the
+ file buffer space allocated to a file which
+ was compressed, if, and only if, that
+ file's contents do not appear in the node
+ list of any window.
+
+ `ISO-Latin' Off Non-zero means that you are using an ISO
+ Latin character set. By default, standard
+ ASCII characters are assumed.
+________________________________________
+This release of Info is version 2.5 beta.
+
+Changes since 2.4 beta:
+
+* Index (i) and (,) commands fully implemented.
+* "configure" script now shipped with Info.
+* New function "set-variable" allows users to set various variables.
+* User-settable behaviour on end or beginning of node scrolling. This
+ supercedes the SPC and DEL changes in 2.3 beta.
+
+________________________________________
+This release of Info is version 2.4 beta.
+
+Changes since 2.3 beta:
+
+* info-last-node now means move to the last node of this info file.
+* info-history-node means move backwards through this window's node history.
+* info-first-node moves to the first node in the Info file. This node is
+ not necessarily "Top"!
+* SPC and DEL can select the Next or Prev node after printing an informative
+ message when pressed at the end/beg of a node.
+
+----------------------------------------
+This release of Info is version 2.3 beta.
+
+Changes since 2.2 beta:
+
+* M-x command lines if NAMED_COMMANDS is #defined. Variable in Makefile.
+* Screen height changes made quite robust.
+* Interactive function "set-screen-height" implements user height changes.
+* Scrolling on some terminals is faster now.
+* C-l with numeric arguement is fixed.
+
+----------------------------------------
+This release of Info is version 2.2 beta.
+
+Changes since 2.0:
+
+* C-g can now interrupt multi-file searches.
+* Incremental search is fully implemented.
+* Loading large tag tables is much faster now.
+* makedoc.c replaces shell script, speeding incremental builds.
+* Scrolling in redisplay is implemented.
+* Recursive uses of the echo area made more robust.
+* Garbage collection of unreferenced nodes.
diff --git a/README b/README
new file mode 100644
index 0000000..879b59b
--- /dev/null
+++ b/README
@@ -0,0 +1,112 @@
+$Id: README,v 1.16 2004/12/13 13:36:32 karl Exp $
+This is the README file for the GNU Texinfo distribution. Texinfo is
+the preferred documentation format for GNU software.
+
+ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+ 2001, 2002, 2003, 2004 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.
+
+See ./INSTALL* for installation instructions.
+
+Primary distribution point: ftp://ftp.gnu.org/gnu/texinfo/
+ (list of mirrors at: http://www.gnu.org/prep/ftp.html)
+
+Home page: http://www.gnu.org/software/texinfo/
+ (list of mirrors at: http://www.gnu.org/server/list-mirrors.html)
+ This page includes links to other Texinfo-related programs.
+
+Mailing lists and archives:
+- bug-texinfo@gnu.org for bug reports or enhancement suggestions,
+ archive: http://mail.gnu.org/pipermail/bug-texinfo
+- help-texinfo@gnu.org for authoring questions and general discussion,
+ archive: http://mail.gnu.org/pipermail/help-texinfo
+- texinfo-pretest@texinfo.org for pretests of new releases,
+ archive: http://texinfo.org/ftp/texinfo-pretest-archive
+There are no corresponding newsgroups.
+
+Bug reports:
+ please include enough information for the maintainers to reproduce the
+ problem. Generally speaking, that means:
+- the contents of any input files necessary to reproduce the bug (crucial!).
+- a description of the problem and any samples of the erroneous output.
+- the version number of Texinfo and the program(s) involved (use --version).
+- hardware, operating system, and compiler versions (uname -a).
+- unusual options you gave to configure, if any (see config.status).
+- anything else that you think would be helpful.
+
+Patches are most welcome; if possible, please make them with diff -c and
+include ChangeLog entries.
+
+When sending email, please do not encode or split the messages in any
+way if at all possible; it's easier to deal with one large message than
+many small ones. GNU shar (http://www.gnu.org/software/sharutils/) is a
+convenient way of packaging multiple and/or binary files for email.
+
+See README.dev for information on the Texinfo development environment --
+any interested parties are welcome. If you're a programmer and wish to
+contribute, this should get you started. And if you're not a
+programmer, you can still make significant contributions by writing test
+cases, checking the documentation against the implementation, etc.
+
+This distribution includes the following files, among others:
+ README This file.
+ README.dev Texinfo developer information.
+
+ INSTALL Texinfo-specific installation notes.
+ NEWS Summary of new features by release.
+ INTRODUCTION Brief introduction to the system, and
+ how to create readable files from the
+ Texinfo source files in this distribution.
+
+Texinfo documentation files (in ./doc):
+ texinfo.txi Describes the Texinfo language and many
+ of the associated tools. It tells how
+ to use Texinfo to write documentation,
+ how to use Texinfo mode in GNU Emacs,
+ TeX, makeinfo, and the Emacs Lisp
+ Texinfo formatting commands.
+
+ info.texi This manual tells you how to use
+ Info. This document also comes as part of
+ GNU Emacs. If you do not have Emacs,
+ you can format this Texinfo source
+ file with makeinfo or TeX and then
+ read the resulting Info file with the
+ standalone Info reader that is part of
+ this distribution.
+
+ info-stnd.texi This manual tells you how to use
+ the standalone GNU Info reader that is
+ included in this distribution as C
+ source (./info).
+
+Printing related files:
+ doc/texinfo.tex This TeX definitions file tells
+ the TeX program how to typeset a
+ Texinfo file into a DVI file ready for
+ printing.
+
+ util/texindex.c This file contains the source for
+ the `texindex' program that generates
+ sorted indices used by TeX when
+ typesetting a file for printing.
+
+ util/texi2dvi This is a shell script for
+ producing an indexed DVI file using
+ TeX and texindex.
+
+Source files for standalone C programs:
+ ./lib
+ ./makeinfo
+ ./info
+
+Installation files:
+ Makefile.am What Automake uses to make a Makefile.in.
+ Makefile.in What `configure' uses to make a Makefile,
+ created by Automake.
+ configure.ac What Autoconf uses to create `configure'.
+ configure Configuration script for local conditions,
+ created by Autoconf.
diff --git a/README.dev b/README.dev
new file mode 100644
index 0000000..7706d33
--- /dev/null
+++ b/README.dev
@@ -0,0 +1,52 @@
+$Id: README.dev,v 1.15 2008/03/25 13:51:20 karl Exp $
+This README.dev file describes the development environment.
+
+ Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008
+ 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.
+
+The development sources for GNU Texinfo are available through anonymous
+CVS at Savannah:
+ http://savannah.gnu.org/cvs/?group=texinfo
+
+This distribution uses whatever versions of Automake, Autoconf, and
+Gettext are listed in NEWS; usually the latest ones released. If you
+are getting the sources from CVS (or change configure.ac), you'll need
+to have these tools installed to (re)build. You'll also need help2man.
+All of these programs are available from ftp://ftp.gnu.org/gnu.
+
+After getting the CVS sources, and installing the tools above, you can run
+ ./autogen.sh
+and then
+ ./configure CFLAGS='-g -Wdeclaration-after-statement' --enable-maintainer-mode
+and then
+ make
+
+After the initial autogen && configure, simply running make should suffice.
+
+The reason for that particular -W is that intermixing declarations with
+statementts is an easy thing to do accidentally, gcc won't warn about it
+by default, and other compilers that don't support it are still
+widespread. Lots of other -W options can be useful too, and patches are
+welcome to resolve the diagnostics. Or if you're not using gcc, of
+course you shouldn't include it at all.
+
+This distribution also uses Gnulib (http://www.gnu.org/software/gnulib)
+to share common files, with the files being checked in to CVS. If you
+get automake/conf/etc. errors from ./autogen.sh, please try doing a CVS
+checkout of gnulib (in a separate directory to the texinfo checkout),
+and then run
+ ../gnulib/gnulib-tool --update
+in your top-level Texinfo directory. (gnulib-tool is in the gnulib CVS tree.)
+
+For the record, a first time invocation would be
+ gnulib-tool --import --m4-base=gnulib/m4 --source-base=gnulib/lib \
+ --no-vc-files getopt
+
+Many more modules have been added since. The currently-used gnulib
+modules and other gnulib information are recorded in
+gnulib/m4/gnulib-cache.m4. Given a source checkout of gnulib, you can
+update the files with gnulib-tool --import.
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..a14f880
--- /dev/null
+++ b/TODO
@@ -0,0 +1,212 @@
+$Id: TODO,v 1.45 2008/07/26 17:13:26 karl Exp $
+This is the todo list for GNU Texinfo.
+If you are interested in working on any of these, email bug-texinfo@gnu.org.
+
+ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2003,
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation.
+
+ 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.
+
+* General:
+ - Support installation of manuals in different languages, along these lines:
+ . support a LINGUAS file or variable saying which subdirs LL in the
+ source to descend into (under doc/).
+ . within each subdir LL, install the info files into $infodir/LL,
+ and run install-info on $infodir/LL/dir.
+ . info (both emacs and standalone) should read $infodir/$LANG/dir
+ as the first dir file, and likewise read info files first from
+ $infodir/$LANG, before falling back to $infodir.
+ . consider ways to avoid installing images in both places.
+ In fact, images probably need to be installed in a subdir
+ $infodir/MANUAL/ in the first place, to avoid conflicts of having
+ the same image name in different manuals.
+ For a test case, see texinfo cvs, with its one translated manual
+ (info-fr.texi).
+ From Wojciech Polak.
+ - Or even multibyte languages like Japanese, see msg:
+ http://lists.gnu.org/archive/html/bug-texinfo/2005-03/msg00000.html
+ - Monitor and improve the dir categories in existing manuals,
+ following the Free Software Directory categories. Much mail to
+ developers has already been sent, what's needed now is to check new
+ releases and make sure they are using the right categories.
+ See the util/dir-example in the Texinfo distribution for our current
+ recommended categories.
+ For background, see the thread (which discusses a lot of other
+ issues too) at
+ http://mail.gnu.org/pipermail/emacs-devel/2002-10/msg00011.html,
+ especially
+ http://mail.gnu.org/archive/html/emacs-devel/2002-10/msg00090.html
+ http://mail.gnu.org/archive/html/emacs-devel/2002-10/msg00137.html
+ - Extend and improve the tests.
+ - Get Info declared as a MIME Content-Type.
+ - Likewise the `info:' URI scheme; a library consortium has proposed a
+ completely different purpose for the URI scheme, but I don't know
+ how to send comments, despite it being a "request for comments". Sigh.
+ There is mail about this in the bug-texinfo archives:
+ http://mail.gnu.org/archive/html/bug-texinfo/2003-09/msg00086.html
+ - Support compressed image files.
+ - Support reference card creation, perhaps by only paying attention to
+ sectioning and @def... commands.
+ - Allow @end (and other?) commands to be indented in the source.
+
+* Language:
+ - @else for the @if... conditionals.
+ - @xindexterm [def] primary [,secondary [,tertiary]] or some such?
+ - Allow subitems and `see' and `see also' in indices.
+ - multicolumn * width to take up `the rest'.
+ - another table command to take N succeeding items and split them
+ into M columns (see eplain).
+ - support bibliographies with BibTeX (see web2c/doc for kludge prototype).
+ - @flushboth to combine @flushleft and @flushright, for RFC's.
+ - @part sectioning command.
+ - @exercise/@answer command for, e.g., gawk.
+ - Allow @hsep/@vsep at @item, instead of just in template.
+ - Support automatic line numbering of examples.
+ - Better macro syntax, including a separate @inlinemacro (or
+ something) to distinguish macros that swallow their final newline
+ and those that don't.
+ - Better def... command syntax.
+ - Allow : in node names for info files, for names like
+ `class::method'. Likewise index entries. A quoting mechanism such
+ as surrounding node names with SPACE BACKSPACE is probably the best
+ solution, although this is an incompatible change to Info format, sigh.
+ - Glossary/general definition support (dumas msg 28 Nov 2003 17:09:57 +0100).
+ - Add support for other Latin 9 (and Latin 2 and Latin 1) characters.
+
+* Makeinfo:
+ - Translation of "Appendix" etc. should depend on @doclang not $LANG.
+ - Really support UTF-8 instead of just passing through the bytes.
+ - lang.c setup doesn't support @v{S} (S with caron) -- no named entity.
+ - Automatically do -I of directory of main source file.
+ - Make makeinfo -E just do macro expansion, avoiding all error checks.
+ That way, texi2dvi could run makeinfo --iftex -E.
+ - A detexinfo program, like detex or delatex. This command would
+ strip all the texinfo commands out, and would be used as a filter on
+ the way to a speller. An option would be to NOT strip comments out.
+ makeinfo --no-headers comes close.
+ - If node name contains an @ command, complain explicitly.
+ - Use @documentlanguage instead of LANG for many translations.
+ - HTML: split output by chapter to improve context, per Akim.
+ Even different splits for different chapters.
+ Generate dummy files for all nodes for the sake of cross-references?
+ - HTML: support thumbnails.
+ - HTML: make images of math, maybe.
+ - HTML: allow settable background color, table colors and spacing,
+ <head> meta tags, etc. A la http://texi2html.cvshome.org. In fact:
+ - HTML: have a library of different CSS styles.
+ http://mail.gnu.org/archive/html/bug-texinfo/2004-01/msg00025.html
+ - XML: cannot be loaded directly in a browser; why not?
+ - Docbook: &euro; and other entities do not work; does anything work?
+ - Support the MediaWiki output format.
+ - Rewrite completely to simplify generation of different formats.
+
+* TeX:
+ - Use @ as the escape character, and Texinfo syntax generally, in the
+ table of contents and index files.
+ - Support input in any encoding and language, via ec or Latin Modern fonts.
+ Including Unicode, e.g., UTF-8. (Some work has been done.)
+ - Reasonable way to change fonts from the default (some work has been
+ done), to allow for PostScript fonts, for example.
+ - @multitable: handle @hsep and @vsep.
+ - @multitable: repeat table headings if multiple pages long.
+ - @multitable: support a heading line concept (<thead> in HTML).
+ - Introduce new command to change \bindingoffset.
+ - Use marks to define a real @thissection.
+ - Table of contents is misaligned if there are 10 or more [sub]sections.
+ - Use url.sty (or something) to allow linebreak of url's.
+ - Make accent commands implicitly use @dotless{i/j}.
+ - Include hyperlink \special's in the DVI output for xdvi, etc.
+ - PDF: make each letter of the index (A, B, ...) a section in the TOC.
+ From Carsten Dominik.
+ - PDF: use the PageLabels dictionary to allow jumping to logical
+ pages, presumably after xpdf/gv support it. Section 8.3.1 of the
+ PDF reference. From Werner Lemberg, texinfo-pretest mail of
+ 27 Feb 2006 22:55:13 +0100.
+
+* Doc:
+ - Include a complete functional summary, as in a reference card, in
+ the manual.
+ - Improve the manuals, especially for makeinfo, standalone info, etc.
+ - new section on doing dedication pages. See gawk.texi
+ for an example of doing it in both the tex and info versions.
+
+* Info:
+ - (By far the most important bug to fix.)
+ Support multibyte character sets, principally UTF-8; most
+ critically, do not break multibyte characters across lines, but lots
+ of other problems are present. This implies major changes to Info,
+ since it currently assumes byte/character equivalence (having been
+ written long before multibyte character sets were common).
+
+ Here's a careful bug report on the subject (the sender can help test):
+ http://lists.gnu.org/archive/html/bug-texinfo/2007-11/msg00033.html
+
+ Here's an initial bug report and "patch" that simply disables translation.
+ http://lists.gnu.org/archive/html/bug-texinfo/2006-08/msg00001.html
+ http://wiki.linuxfromscratch.org/patches/browser/trunk/texinfo/texinfo-4.8-multibyte-1.patch
+
+ - The help message does not report Down/Up for next/prev-line.
+ - When scrolling through the help text, it should stop at the end, not
+ report "No more nodes" and go back to the beginning.
+ - It would be nice for h in the help window to quit help.
+ - It would be nice to be able to specify a preferred key to report in
+ the help message, instead of using the last one set; cf. q vs. C-x C-c.
+ - Full-text search across all info files installed on the system.
+ - Perhaps comply with LANGUAGE setting on a per-node basis, to allow
+ incremental translation of Texinfo files.
+ - Display images when running under X, as Emacs 22+ can.
+ - Search all nodes of dir file at startup, then can have
+ INFO-DIR-SEPARATE-GROUPS and other such. I.e., we could have
+ programs (what is now "Individual utilities") in one node, library
+ functions, in another, etc. And how about supporting other languages?
+ - Better dir file merging.
+ - Global dir file (as in /etc/conf/dir) and texinfo config file
+ specifying which info directories to search. From Dale Mellor.
+ http://mail.gnu.org/mailman/private/gnu-prog-discuss/2003q4/000439.html
+ - Steal interface ideas from Lynx: number links, use color, etc.
+ Perhaps code from the pinfo viewer can be reused:
+ http://zeus.polsl.gliwice.pl/~pborys/.
+ - More sample .infokey files, so people can choose without writing their own.
+ - Incorporate an X-based viewer, perhaps the old GNU xinfo widget
+ (http://www.gnu.org/software/xinfo) or saxinfo
+ or tkinfo (http://www.math.ucsb.edu/~boldt/tkinfo/).
+ - Make "info foo bar" search for bar in foo's index(es) if no menu match.
+ - Handle M-n, C-u m, and C-u g like Emacs Info (opening new windows).
+ - Write technical definition of Info format.
+
+* install-info:
+ - be able to copy the info file to compile-time $infodir, to
+ simplify by-hand installation.
+ - also support installing HTML files, etc., along with subsidiary
+ @image (or other) files. In subdirs. Or something.
+ - support info dir entries for other than the current info file name;
+ see comments in menu_item_equal.
+
+* texindex:
+ - read source file (specified by new option) for @documentlanguage
+ and/or @documentencoding, and change the sorting appropriately.
+ From: Wojciech Polak, 26 Apr 2003 11:30:59 +0200.
+
+* Distribution:
+ - generate txi-??.tex from .po's to make translators' jobs easier.
+ From Akim and Karl E.
+
+Ideas that will not be implemented:
+- Process Texinfo files directly instead of converting to Info:
+ ftp://ftp.cs.berkeley.edu/ucb/people/phelps/tcltk/tkman.tar.Z, which
+ uses Tcl/Tk 8.0 from ftp.smli.com in the /pub/tcl directory.
+ From: Tom Phelps @ berkeley
+ [This has the disadvantage of needing to be updated when the
+ Texinfo language changes, so don't.]
+
+- Call Ghostscript to get ASCII/jpg output for the @image command.
+ [makeinfo should not try to be make, or assume it knows how the user
+ wants to generate images. Too many different methods are possible.]
+
+- Change bars. This is difficult or impossible in TeX,
+ unfortunately. To do it right requires device driver support.
+ wdiff or ediff may be all we can do. Merely specifying what should be
+ changed is not obvious. texdiff (http://www.robmar.net/TexDiff) does
+ something reasonable for LaTeX, maybe it can be adapted.
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..2217e2e
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,997 @@
+# generated automatically by aclocal 1.10.1 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008 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_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(AC_AUTOCONF_VERSION, [2.63],,
+[m4_warning([this file was generated for autoconf 2.63.
+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, 2003, 2005, 2006, 2007 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.10'
+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.10.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 AC_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.10.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(AC_AUTOCONF_VERSION)])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005 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, 2000, 2001, 2003, 2004, 2005, 2006
+# 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 8
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$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
+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, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+# 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 9
+
+# 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", "GCJ", or "OBJC".
+# 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
+
+ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
+ [$1], CXX, [depcc="$CXX" am_compiler_list=],
+ [$1], OBJC, [depcc="$OBJC" 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'.
+ 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
+ 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 8's {/usr,}/bin/sh.
+ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ case $depmode in
+ 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
+ ;;
+ none) break ;;
+ esac
+ # 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.
+ if depmode=$depmode \
+ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} 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 sub/conftest.${OBJEXT-o} 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,
+[ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+# 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 3
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[for mf in $CONFIG_FILES; 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"`
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n 's/^U = //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' -e 's/\$U/'"$U"'/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, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008 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 13
+
+# 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.
+
+# 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.60])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],
+[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], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+ [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)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# 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)],
+ [define([AC_PROG_CC],
+ defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES(CXX)],
+ [define([AC_PROG_CXX],
+ defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES(OBJC)],
+ [define([AC_PROG_OBJC],
+ defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+])
+
+
+# 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, 2003, 2005 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
+install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005 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 2
+
+# 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])])
+
+# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005
+# 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 4
+
+AC_DEFUN([AM_MAINTAINER_MODE],
+[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+ dnl maintainer-mode is disabled by default
+ AC_ARG_ENABLE(maintainer-mode,
+[ --enable-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer],
+ USE_MAINTAINER_MODE=$enableval,
+ USE_MAINTAINER_MODE=no)
+ AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+ AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
+ MAINT=$MAINTAINER_MODE_TRUE
+ AC_SUBST(MAINT)dnl
+]
+)
+
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005 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 3
+
+# 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 done
+.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
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+ am__include=include
+ am__quote=
+ _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ fi
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005
+# 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 5
+
+# AM_PROG_CC_C_O
+# --------------
+# Like AC_PROG_CC_C_O, but changed for automake.
+AC_DEFUN([AM_PROG_CC_C_O],
+[AC_REQUIRE([AC_PROG_CC_C_O])dnl
+AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+ac_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
+if eval "test \"`echo '$ac_cv_prog_cc_'${ac_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
+dnl Make sure AC_PROG_CC is never called again, or it will override our
+dnl setting of CC.
+m4_define([AC_PROG_CC],
+ [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])])
+])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005
+# 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 5
+
+# 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 supports --run.
+# If it does, 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
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006 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_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+ [[\\/$]]* | ?:[[\\/]]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005 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 3
+
+# _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],
+[AC_FOREACH([_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])])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# 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 4
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# 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 (
+ 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
+ rm -f conftest.file
+ 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
+
+ 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)])
+
+# Copyright (C) 2001, 2003, 2005 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 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])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005 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 2
+
+# _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.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+ [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+ [m4_case([$1], [ustar],, [pax],,
+ [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+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])
+ 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/alloca.m4])
+m4_include([gnulib/m4/argz.m4])
+m4_include([gnulib/m4/codeset.m4])
+m4_include([gnulib/m4/eealloc.m4])
+m4_include([gnulib/m4/environ.m4])
+m4_include([gnulib/m4/error.m4])
+m4_include([gnulib/m4/exitfail.m4])
+m4_include([gnulib/m4/extensions.m4])
+m4_include([gnulib/m4/getopt.m4])
+m4_include([gnulib/m4/gettext.m4])
+m4_include([gnulib/m4/gettimeofday.m4])
+m4_include([gnulib/m4/glibc21.m4])
+m4_include([gnulib/m4/gnulib-common.m4])
+m4_include([gnulib/m4/gnulib-comp.m4])
+m4_include([gnulib/m4/iconv.m4])
+m4_include([gnulib/m4/include_next.m4])
+m4_include([gnulib/m4/inline.m4])
+m4_include([gnulib/m4/intlmacosx.m4])
+m4_include([gnulib/m4/lib-ld.m4])
+m4_include([gnulib/m4/lib-link.m4])
+m4_include([gnulib/m4/lib-prefix.m4])
+m4_include([gnulib/m4/localcharset.m4])
+m4_include([gnulib/m4/longlong.m4])
+m4_include([gnulib/m4/malloc.m4])
+m4_include([gnulib/m4/malloca.m4])
+m4_include([gnulib/m4/mbchar.m4])
+m4_include([gnulib/m4/mbiter.m4])
+m4_include([gnulib/m4/mbrtowc.m4])
+m4_include([gnulib/m4/mbscasecmp.m4])
+m4_include([gnulib/m4/mbschr.m4])
+m4_include([gnulib/m4/mbslen.m4])
+m4_include([gnulib/m4/mbsncasecmp.m4])
+m4_include([gnulib/m4/mbsstr.m4])
+m4_include([gnulib/m4/mbstate_t.m4])
+m4_include([gnulib/m4/mbswidth.m4])
+m4_include([gnulib/m4/memchr.m4])
+m4_include([gnulib/m4/memcmp.m4])
+m4_include([gnulib/m4/memcpy.m4])
+m4_include([gnulib/m4/memmem.m4])
+m4_include([gnulib/m4/memmove.m4])
+m4_include([gnulib/m4/mempcpy.m4])
+m4_include([gnulib/m4/mkstemp.m4])
+m4_include([gnulib/m4/nls.m4])
+m4_include([gnulib/m4/onceonly.m4])
+m4_include([gnulib/m4/po.m4])
+m4_include([gnulib/m4/progtest.m4])
+m4_include([gnulib/m4/setenv.m4])
+m4_include([gnulib/m4/stdbool.m4])
+m4_include([gnulib/m4/stdint.m4])
+m4_include([gnulib/m4/stdlib_h.m4])
+m4_include([gnulib/m4/stpcpy.m4])
+m4_include([gnulib/m4/strdup.m4])
+m4_include([gnulib/m4/strerror.m4])
+m4_include([gnulib/m4/string_h.m4])
+m4_include([gnulib/m4/strndup.m4])
+m4_include([gnulib/m4/strnlen.m4])
+m4_include([gnulib/m4/sys_stat_h.m4])
+m4_include([gnulib/m4/sys_time_h.m4])
+m4_include([gnulib/m4/tempname.m4])
+m4_include([gnulib/m4/unistd_h.m4])
+m4_include([gnulib/m4/wchar.m4])
+m4_include([gnulib/m4/wchar_t.m4])
+m4_include([gnulib/m4/wctype.m4])
+m4_include([gnulib/m4/wcwidth.m4])
+m4_include([gnulib/m4/wint_t.m4])
+m4_include([gnulib/m4/xalloc.m4])
diff --git a/build-aux/compile b/build-aux/compile
new file mode 100755
index 0000000..da3925b
--- /dev/null
+++ b/build-aux/compile
@@ -0,0 +1,142 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand `-c -o'.
+
+scriptversion=2005-05-14.22
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005 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 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# 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>.
+
+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 $?
+ ;;
+esac
+
+ofile=
+cfile=
+eat=
+
+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 -e 's|^.*/||' -e '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
+ mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+ 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-end: "$"
+# End:
diff --git a/build-aux/config.guess b/build-aux/config.guess
new file mode 100755
index 0000000..7924ac0
--- /dev/null
+++ b/build-aux/config.guess
@@ -0,0 +1,1500 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
+# Inc.
+
+timestamp='2006-06-06'
+
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# 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 Per Bothner <per@bothner.com>.
+# Please send patches to <config-patches@gnu.org>. Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub. If it succeeds, it prints the system name on stdout, and
+# exits with 0. Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+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
+
+# 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 tupples: *-*-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 ;;
+ *) 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 __ELF__ >/dev/null
+ 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 ;;
+ *: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 powerppc-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'`
+ exit ;;
+ 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 ;;
+ 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:SunOS:5.*:*)
+ echo i386-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:*:[45])
+ 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 __LP64__ >/dev/null
+ 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:*:*)
+ case ${UNAME_MACHINE} in
+ pc98)
+ echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ amd64)
+ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ *)
+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ esac
+ exit ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit ;;
+ i*:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ exit ;;
+ i*:windows32*:*)
+ # uname -m includes "-pc" on this system.
+ echo ${UNAME_MACHINE}-mingw32
+ exit ;;
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+ exit ;;
+ x86:Interix*:[345]*)
+ echo i586-pc-interix${UNAME_RELEASE}
+ exit ;;
+ EM64T:Interix*:[345]*)
+ echo x86_64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+ echo i${UNAME_MACHINE}-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-gnu`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/[-(].*//'`-gnu
+ exit ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit ;;
+ arm*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ avr32*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ cris:Linux:*:*)
+ echo cris-axis-linux-gnu
+ exit ;;
+ crisv32:Linux:*:*)
+ echo crisv32-axis-linux-gnu
+ exit ;;
+ frv:Linux:*:*)
+ echo frv-unknown-linux-gnu
+ exit ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ m32r*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ mips:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef mips
+ #undef mipsel
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=mipsel
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=mips
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+ /^CPU/{
+ s: ::g
+ p
+ }'`"
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+ ;;
+ mips64:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef mips64
+ #undef mips64el
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=mips64el
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=mips64
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+ /^CPU/{
+ s: ::g
+ p
+ }'`"
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+ ;;
+ or32:Linux:*:*)
+ echo or32-unknown-linux-gnu
+ exit ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-gnu
+ exit ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-gnu
+ 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 ld.so.1 >/dev/null
+ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-gnu${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-gnu ;;
+ PA8*) echo hppa2.0-unknown-linux-gnu ;;
+ *) echo hppa-unknown-linux-gnu ;;
+ esac
+ exit ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-gnu
+ exit ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux
+ exit ;;
+ sh64*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ vax:Linux:*:*)
+ echo ${UNAME_MACHINE}-dec-linux-gnu
+ exit ;;
+ x86_64:Linux:*:*)
+ echo x86_64-unknown-linux-gnu
+ exit ;;
+ i*86:Linux:*:*)
+ # The BFD linker knows what the default object file format is, so
+ # first see if it will tell us. cd to the root directory to prevent
+ # problems with other programs or directories called `ld' in the path.
+ # Set LC_ALL=C to ensure ld outputs messages in English.
+ ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+ | sed -ne '/supported targets:/!d
+ s/[ ][ ]*/ /g
+ s/.*supported targets: *//
+ s/ .*//
+ p'`
+ case "$ld_supported_targets" in
+ elf32-i386)
+ TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+ ;;
+ a.out-i386-linux)
+ echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+ exit ;;
+ coff-i386)
+ echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+ exit ;;
+ "")
+ # Either a pre-BFD a.out linker (linux-gnuoldld) or
+ # one that does not give us useful --help.
+ echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+ exit ;;
+ esac
+ # Determine whether the default compiler is a.out or elf
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <features.h>
+ #ifdef __ELF__
+ # ifdef __GLIBC__
+ # if __GLIBC__ >= 2
+ LIBC=gnu
+ # else
+ LIBC=gnulibc1
+ # endif
+ # else
+ LIBC=gnulibc1
+ # endif
+ #else
+ #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+ LIBC=gnu
+ #else
+ LIBC=gnuaout
+ #endif
+ #endif
+ #ifdef __dietlibc__
+ LIBC=dietlibc
+ #endif
+EOF
+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+ /^LIBC/{
+ s: ::g
+ p
+ }'`"
+ test x"${LIBC}" != x && {
+ echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+ exit
+ }
+ test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; 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.0*:*)
+ 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 i386.
+ echo i386-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; } ;;
+ 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.0*:*)
+ 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 ;;
+ 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 ;;
+ 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
+ case $UNAME_PROCESSOR in
+ unknown) UNAME_PROCESSOR=powerpc ;;
+ esac
+ 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 ;;
+ 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 ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+ printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+ printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+# include <sys/param.h>
+# if defined (BSD)
+# if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+# else
+# if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# endif
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# else
+ printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+ case `getsysinfo -f cpu_type` in
+ c1*)
+ echo c1-convex-bsd
+ exit ;;
+ c2*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ c34*)
+ echo c34-convex-bsd
+ exit ;;
+ c38*)
+ echo c38-convex-bsd
+ exit ;;
+ c4*)
+ echo c4-convex-bsd
+ exit ;;
+ esac
+fi
+
+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://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
+and
+ http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
+
+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/build-aux/config.rpath b/build-aux/config.rpath
new file mode 100755
index 0000000..85c2f20
--- /dev/null
+++ b/build-aux/config.rpath
@@ -0,0 +1,672 @@
+#! /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-2008 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,'
+ ;;
+ darwin*)
+ case $cc_basename in
+ xlc*)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ wl='-Wl,'
+ ;;
+ irix5* | irix6* | nonstopux*)
+ wl='-Wl,'
+ ;;
+ newsos6)
+ ;;
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ ecc*)
+ wl='-Wl,'
+ ;;
+ icc* | ifort*)
+ wl='-Wl,'
+ ;;
+ lf95*)
+ wl='-Wl,'
+ ;;
+ pgcc | pgf77 | pgf90)
+ wl='-Wl,'
+ ;;
+ ccc*)
+ wl='-Wl,'
+ ;;
+ como)
+ wl='-lopt='
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ osf3* | osf4* | osf5*)
+ wl='-Wl,'
+ ;;
+ rdos*)
+ ;;
+ solaris*)
+ wl='-Wl,'
+ ;;
+ 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*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we cannot use
+ # them.
+ ld_shlibs=no
+ ;;
+ 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
+ ;;
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ gnu* | linux* | k*bsd*-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*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ # see comment about different semantics on the GNU ld section
+ ld_shlibs=no
+ ;;
+ 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 test "$GCC" = yes ; then
+ :
+ else
+ case $cc_basename in
+ xlc*)
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+ fi
+ ;;
+ dgux*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ freebsd1*)
+ ld_shlibs=no
+ ;;
+ freebsd2.2*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ freebsd2*)
+ 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=:
+ ;;
+ 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*)
+ library_names_spec='$libname.a'
+ ;;
+ 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'
+ ;;
+ freebsd1*)
+ ;;
+ freebsd* | dragonfly*)
+ case "$host_os" in
+ freebsd[123]*)
+ library_names_spec='$libname$shrext$versuffix' ;;
+ *)
+ library_names_spec='$libname$shrext' ;;
+ esac
+ ;;
+ gnu*)
+ 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)
+ 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'
+ ;;
+ 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
index 0000000..70584b0
--- /dev/null
+++ b/build-aux/config.sub
@@ -0,0 +1,1608 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
+# Inc.
+
+timestamp='2006-06-06'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine. It does not imply ALL GNU software can.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# 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.
+
+
+# Please send patches to <config-patches@gnu.org>. Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# 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.
+
+# 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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+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-dietlibc | linux-newlib* | linux-uclibc* | \
+ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+ storm-chaos* | os2-emx* | rtmk-nova*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+ *)
+ 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)
+ os=
+ basic_machine=$1
+ ;;
+ -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*)
+ 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 \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+ | bfin \
+ | c4x | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+ | fr30 | frv \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | i370 | i860 | i960 | ia64 \
+ | ip2k | iq2000 \
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
+ | maxq | mb | microblaze | mcore \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+ | mips64vr | mips64vrel \
+ | mips64orion | mips64orionel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mips64vr5900 | mips64vr5900el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | mt \
+ | msp430 \
+ | nios | nios2 \
+ | ns16k | ns32k \
+ | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+ | pyramid \
+ | sh | sh[1234] | sh[24]a | 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 | strongarm \
+ | tahoe | thumb | tic4x | tic80 | tron \
+ | v850 | v850e \
+ | we32k \
+ | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
+ | z8k)
+ basic_machine=$basic_machine-unknown
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12)
+ # Motorola 68HC11/12.
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
+ ms1)
+ basic_machine=mt-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-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* | avr32-* \
+ | bfin-* | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+ | clipper-* | craynv-* | cydra-* \
+ | d10v-* | d30v-* | dlx-* \
+ | elxsi-* \
+ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | ip2k-* | iq2000-* \
+ | m32c-* | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+ | mips64vr-* | mips64vrel-* \
+ | mips64orion-* | mips64orionel-* \
+ | mips64vr4100-* | mips64vr4100el-* \
+ | mips64vr4300-* | mips64vr4300el-* \
+ | mips64vr5000-* | mips64vr5000el-* \
+ | mips64vr5900-* | mips64vr5900el-* \
+ | mipsisa32-* | mipsisa32el-* \
+ | mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipstx39-* | mipstx39el-* \
+ | mmix-* \
+ | mt-* \
+ | msp430-* \
+ | nios-* | nios2-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+ | pyramid-* \
+ | romp-* | rs6000-* \
+ | sh-* | sh[1234]-* | sh[24]a-* | 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-* | strongarm-* | sv1-* | sx?-* \
+ | tahoe-* | thumb-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tron-* \
+ | v850-* | v850e-* | vax-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
+ | xstormy16-* | xtensa-* \
+ | ymp-* \
+ | z8k-*)
+ ;;
+ # 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
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
+ c90)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
+ 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
+ ;;
+ cr16c)
+ basic_machine=cr16c-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
+ ;;
+ 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'm not sure what "Sysv32" means. Should this be sysv3.2?
+ 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
+ ;;
+ m88k-omron*)
+ basic_machine=m88k-omron
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ os=-sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+ mingw32)
+ basic_machine=i386-pc
+ os=-mingw32
+ ;;
+ 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
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
+ ms1-*)
+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+ 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
+ ;;
+ 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
+ ;;
+ 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) basic_machine=powerpc-unknown
+ ;;
+ ppc-*) 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)
+ 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
+ ;;
+ sei)
+ basic_machine=mips-sei
+ os=-seiux
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ ;;
+ sh)
+ basic_machine=sh-hitachi
+ os=-hms
+ ;;
+ 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
+ ;;
+ 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
+ ;;
+ tic54x | c54x*)
+ basic_machine=tic54x-unknown
+ os=-coff
+ ;;
+ tic55x | c55x*)
+ basic_machine=tic55x-unknown
+ os=-coff
+ ;;
+ tic6x | c6x*)
+ basic_machine=tic6x-unknown
+ os=-coff
+ ;;
+ 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
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
+ z8k-*-coff)
+ basic_machine=z8k-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[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.
+ -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* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+ | -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* \
+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -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*)
+ # 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
+ ;;
+ -kaos*)
+ os=-kaos
+ ;;
+ -zvmoe)
+ os=-zvmoe
+ ;;
+ -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
+ spu-*)
+ os=-elf
+ ;;
+ *-acorn)
+ os=-riscix1.2
+ ;;
+ arm*-rebel)
+ os=-linux
+ ;;
+ arm*-semi)
+ os=-aout
+ ;;
+ c4x-* | tic4x-*)
+ 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
+ # This also exists in the configure program, but was not the
+ # default.
+ # os=-sunos4
+ ;;
+ m68*-cisco)
+ os=-aout
+ ;;
+ 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
+ ;;
+ -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/build-aux/depcomp b/build-aux/depcomp
new file mode 100755
index 0000000..4e7b1bd
--- /dev/null
+++ b/build-aux/depcomp
@@ -0,0 +1,571 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2006-05-10.23
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# 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 outputing dependencies.
+ libtool Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "depcomp $scriptversion"
+ exit $?
+ ;;
+esac
+
+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"
+
+# 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
+
+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.
+ "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ mv "$tmpdepfile" "$depfile"
+ ;;
+
+gcc)
+## 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).
+## - 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 -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## 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.
+ tr ' ' '
+' < "$tmpdepfile" |
+## 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.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -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 -eq 0; then :
+ else
+ 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 ' ' '
+' < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+ tr '
+' ' ' >> $depfile
+ echo >> $depfile
+
+ # The second pass generates a dummy entry for each header file.
+ tr ' ' '
+' < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+ >> $depfile
+ else
+ # The sourcefile does not contain any dependencies, so just
+ # store a dummy comment line, to avoid errors with the Makefile
+ # "include basename.Plo" scheme.
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+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.
+ stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
+ tmpdepfile="$stripped.u"
+ if test "$libtool" = yes; then
+ "$@" -Wc,-M
+ else
+ "$@" -M
+ fi
+ stat=$?
+
+ if test -f "$tmpdepfile"; then :
+ else
+ stripped=`echo "$stripped" | sed 's,^.*/,,'`
+ tmpdepfile="$stripped.u"
+ fi
+
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+
+ if test -f "$tmpdepfile"; then
+ outname="$stripped.o"
+ # Each line is of the form `foo.o: dependent.h'.
+ # Do two passes, one to just change these to
+ # `$object: dependent.h' and one to simply `dependent.h:'.
+ sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
+ sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
+ else
+ # The sourcefile does not contain any dependencies, so just
+ # store a dummy comment line, to avoid errors with the Makefile
+ # "include basename.Plo" scheme.
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+icc)
+ # Intel's C compiler understands `-MD -MF file'. However on
+ # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+ # ICC 7.0 will fill foo.d with something like
+ # foo.o: sub/foo.c
+ # foo.o: sub/foo.h
+ # which is wrong. We want:
+ # sub/foo.o: sub/foo.c
+ # sub/foo.o: sub/foo.h
+ # sub/foo.c:
+ # sub/foo.h:
+ # ICC 7.1 will output
+ # foo.o: sub/foo.c sub/foo.h
+ # and will wrap long lines using \ :
+ # foo.o: sub/foo.c ... \
+ # sub/foo.h ... \
+ # ...
+
+ "$@" -MD -MF "$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ 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.
+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+ test "x$dir" = "x$object" && dir=
+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+ 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 -eq 0; then :
+ else
+ 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,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
+ # Add `dependent.h:' lines.
+ sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
+ else
+ echo "#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.
+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+ test "x$dir" = "x$object" && dir=
+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+ if test "$libtool" = yes; then
+ # With Tru64 cc, shared objects can also be used to make a
+ # static library. This mechanism is used in libtool 1.4 series to
+ # handle both shared and static libraries in a single compilation.
+ # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
+ #
+ # With libtool 1.5 this exception was removed, and libtool now
+ # generates 2 separate objects for the 2 libraries. These two
+ # compilations output dependencies in 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.libs/$base.lo.d # libtool 1.4
+ tmpdepfile2=$dir$base.o.d # libtool 1.5
+ tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
+ tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
+ "$@" -Wc,-MD
+ else
+ tmpdepfile1=$dir$base.o.d
+ tmpdepfile2=$dir$base.d
+ tmpdepfile3=$dir$base.d
+ tmpdepfile4=$dir$base.d
+ "$@" -MD
+ fi
+
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ if test -f "$tmpdepfile"; then
+ sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+ # That's a tab and a space in the [].
+ sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+ else
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+#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 $1 != '--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:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
+ rm -f "$depfile"
+ cat < "$tmpdepfile" > "$depfile"
+ tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ 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 $1 != '--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+ # X makedepend
+ shift
+ cleared=no
+ for arg in "$@"; do
+ case $cleared in
+ no)
+ set ""; shift
+ cleared=yes ;;
+ esac
+ 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.
+ -*|$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"
+ cat < "$tmpdepfile" > "$depfile"
+ sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ 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 $1 != '--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, regardless of -o,
+ # because we must use -o when running libtool.
+ "$@" || exit $?
+ IFS=" "
+ for arg
+ do
+ case "$arg" in
+ "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+ set fnord "$@"
+ shift
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift
+ shift
+ ;;
+ esac
+ done
+ "$@" -E |
+ sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
+ echo " " >> "$depfile"
+ . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+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-end: "$"
+# End:
diff --git a/build-aux/install-sh b/build-aux/install-sh
new file mode 100755
index 0000000..f746d0f
--- /dev/null
+++ b/build-aux/install-sh
@@ -0,0 +1,442 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2006-05-11.20
+
+# 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. It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+nl='
+'
+IFS=" "" $nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+posix_glob=
+posix_mkdir=
+
+# Symbolic mode for testing mkdir with directories.
+# It is the same as 755, but also tests that "u+" works.
+test_mode=u=rwx,g=rx,o=rx,u+wx
+
+# Desired mode of installed file.
+mode=0755
+
+# Desired mode of newly created intermediate directories.
+# It is empty if not known yet.
+intermediate_mode=
+
+chmodcmd=$chmodprog
+chowncmd=
+chgrpcmd=
+stripcmd=
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=
+dst=
+dir_arg=
+dstarg=
+no_target_directory=
+
+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:
+-c (ignored)
+-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.
+--help display this help and exit.
+--version display version info and exit.
+
+Environment variables override the default commands:
+ CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+ case $1 in
+ -c) shift
+ continue;;
+
+ -d) dir_arg=true
+ shift
+ continue;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift
+ shift
+ continue;;
+
+ --help) echo "$usage"; exit $?;;
+
+ -m) mode=$2
+ shift
+ shift
+ continue;;
+
+ -o) chowncmd="$chownprog $2"
+ shift
+ shift
+ continue;;
+
+ -s) stripcmd=$stripprog
+ shift
+ continue;;
+
+ -t) dstarg=$2
+ shift
+ shift
+ continue;;
+
+ -T) no_target_directory=true
+ shift
+ continue;;
+
+ --version) echo "$0 $scriptversion"; exit $?;;
+
+ --) shift
+ break;;
+
+ -*) echo "$0: invalid option: $1" >&2
+ exit 1;;
+
+ *) break;;
+ esac
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dstarg"; 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 "$dstarg"; then
+ # $@ is not empty: it contains at least $arg.
+ set fnord "$@" "$dstarg"
+ shift # fnord
+ fi
+ shift # arg
+ dstarg=$arg
+ 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
+
+test -n "$dir_arg" || trap '(exit $?); exit' 1 2 13 15
+
+for src
+do
+ # Protect names starting with `-'.
+ 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 "$dstarg"; then
+ echo "$0: no destination specified." >&2
+ exit 1
+ fi
+
+ dst=$dstarg
+ # Protect names starting with `-'.
+ case $dst in
+ -*) dst=./$dst ;;
+ esac
+
+ # 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 -n "$no_target_directory"; then
+ echo "$0: $dstarg: Is a directory" >&2
+ exit 1
+ fi
+ dstdir=$dst
+ dst=$dstdir/`basename "$src"`
+ dstdir_status=0
+ else
+ # Prefer dirname, but fall back on a substitute if dirname fails.
+ dstdir=`
+ (dirname "$dst") 2>/dev/null ||
+ expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$dst" : 'X\(//\)[^/]' \| \
+ X"$dst" : 'X\(//\)$' \| \
+ X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+ echo X"$dst" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'
+ `
+
+ test -d "$dstdir"
+ dstdir_status=$?
+ fi
+ fi
+
+ obsolete_mkdir_used=false
+
+ if test $dstdir_status != 0; then
+ case $posix_mkdir in
+ '')
+ posix_mkdir=false
+ if $mkdirprog -m $test_mode -p -- / >/dev/null 2>&1; then
+ posix_mkdir=true
+ else
+ # Remove any dirs left behind by ancient mkdir implementations.
+ rmdir ./-m "$test_mode" ./-p ./-- 2>/dev/null
+ fi ;;
+ esac
+
+ if
+ $posix_mkdir && {
+
+ # With -d, create the new directory with the user-specified mode.
+ # Otherwise, create it using the same intermediate mode that
+ # mkdir -p would use when creating intermediate directories.
+ # POSIX says that this mode is "$(umask -S),u+wx", so use that
+ # if umask -S works.
+
+ if test -n "$dir_arg"; then
+ mkdir_mode=$mode
+ else
+ case $intermediate_mode in
+ '')
+ if umask_S=`(umask -S) 2>/dev/null`; then
+ intermediate_mode=$umask_S,u+wx
+ else
+ intermediate_mode=$test_mode
+ fi ;;
+ esac
+ mkdir_mode=$intermediate_mode
+ fi
+
+ $mkdirprog -m "$mkdir_mode" -p -- "$dstdir"
+ }
+ then :
+ else
+
+ # 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
+
+ case $posix_glob in
+ '')
+ if (set -f) 2>/dev/null; then
+ posix_glob=true
+ else
+ posix_glob=false
+ fi ;;
+ esac
+
+ oIFS=$IFS
+ IFS=/
+ $posix_glob && set -f
+ set fnord $dstdir
+ shift
+ $posix_glob && set +f
+ IFS=$oIFS
+
+ prefixes=
+
+ for d
+ do
+ test -z "$d" && continue
+
+ prefix=$prefix$d
+ if test -d "$prefix"; then
+ prefixes=
+ else
+ if $posix_mkdir; then
+ $mkdirprog -m "$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.
+ eval "\$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.
+ $doit $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"; } &&
+
+ # Now 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.
+ {
+ if test -f "$dst"; then
+ $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
+ }
+ else
+ :
+ fi
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dst"
+ }
+ } || 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-end: "$"
+# End:
diff --git a/build-aux/link-warning.h b/build-aux/link-warning.h
new file mode 100644
index 0000000..fda0194
--- /dev/null
+++ b/build-aux/link-warning.h
@@ -0,0 +1,28 @@
+/* GL_LINK_WARNING("literal string") arranges to emit the literal string as
+ a linker warning on most glibc systems.
+ We use a linker warning rather than a preprocessor warning, because
+ #warning cannot be used inside macros. */
+#ifndef GL_LINK_WARNING
+ /* This works on platforms with GNU ld and ELF object format.
+ Testing __GLIBC__ is sufficient for asserting that GNU ld is in use.
+ Testing __ELF__ guarantees the ELF object format.
+ Testing __GNUC__ is necessary for the compound expression syntax. */
+# if defined __GLIBC__ && defined __ELF__ && defined __GNUC__
+# define GL_LINK_WARNING(message) \
+ GL_LINK_WARNING1 (__FILE__, __LINE__, message)
+# define GL_LINK_WARNING1(file, line, message) \
+ GL_LINK_WARNING2 (file, line, message) /* macroexpand file and line */
+# define GL_LINK_WARNING2(file, line, message) \
+ GL_LINK_WARNING3 (file ":" #line ": warning: " message)
+# define GL_LINK_WARNING3(message) \
+ ({ static const char warning[sizeof (message)] \
+ __attribute__ ((__unused__, \
+ __section__ (".gnu.warning"), \
+ __aligned__ (1))) \
+ = message "\n"; \
+ (void)0; \
+ })
+# else
+# define GL_LINK_WARNING(message) ((void) 0)
+# endif
+#endif
diff --git a/build-aux/mdate-sh b/build-aux/mdate-sh
new file mode 100755
index 0000000..cd916c0
--- /dev/null
+++ b/build-aux/mdate-sh
@@ -0,0 +1,201 @@
+#!/bin/sh
+# Get modification time of a file or directory and pretty-print it.
+
+scriptversion=2005-06-29.22
+
+# Copyright (C) 1995, 1996, 1997, 2003, 2004, 2005 Free Software
+# Foundation, Inc.
+# written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# 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>.
+
+case $1 in
+ '')
+ echo "$0: No file. Try \`$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: mdate-sh [--help] [--version] FILE
+
+Pretty-print the modification time of FILE.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "mdate-sh $scriptversion"
+ exit $?
+ ;;
+esac
+
+# Prevent date giving response in another language.
+LANG=C
+export LANG
+LC_ALL=C
+export LC_ALL
+LC_TIME=C
+export LC_TIME
+
+# GNU ls changes its time format in response to the TIME_STYLE
+# variable. Since we cannot assume `unset' works, revert this
+# variable to its documented default.
+if test "${TIME_STYLE+set}" = set; then
+ TIME_STYLE=posix-long-iso
+ export TIME_STYLE
+fi
+
+save_arg1=$1
+
+# Find out how to get the extended ls output of a file or directory.
+if ls -L /dev/null 1>/dev/null 2>&1; then
+ ls_command='ls -L -l -d'
+else
+ ls_command='ls -l -d'
+fi
+
+# A `ls -l' line looks as follows on OS/2.
+# drwxrwx--- 0 Aug 11 2001 foo
+# This differs from Unix, which adds ownership information.
+# drwxrwx--- 2 root root 4096 Aug 11 2001 foo
+#
+# To find the date, we split the line on spaces and iterate on words
+# until we find a month. This cannot work with files whose owner is a
+# user named `Jan', or `Feb', etc. However, it's unlikely that `/'
+# will be owned by a user whose name is a month. So we first look at
+# the extended ls output of the root directory to decide how many
+# words should be skipped to get the date.
+
+# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below.
+set x`ls -l -d /`
+
+# Find which argument is the month.
+month=
+command=
+until test $month
+do
+ shift
+ # Add another shift to the command.
+ command="$command shift;"
+ case $1 in
+ Jan) month=January; nummonth=1;;
+ Feb) month=February; nummonth=2;;
+ Mar) month=March; nummonth=3;;
+ Apr) month=April; nummonth=4;;
+ May) month=May; nummonth=5;;
+ Jun) month=June; nummonth=6;;
+ Jul) month=July; nummonth=7;;
+ Aug) month=August; nummonth=8;;
+ Sep) month=September; nummonth=9;;
+ Oct) month=October; nummonth=10;;
+ Nov) month=November; nummonth=11;;
+ Dec) month=December; nummonth=12;;
+ esac
+done
+
+# Get the extended ls output of the file or directory.
+set dummy x`eval "$ls_command \"\$save_arg1\""`
+
+# Remove all preceding arguments
+eval $command
+
+# Because of the dummy argument above, month is in $2.
+#
+# On a POSIX system, we should have
+#
+# $# = 5
+# $1 = file size
+# $2 = month
+# $3 = day
+# $4 = year or time
+# $5 = filename
+#
+# On Darwin 7.7.0 and 7.6.0, we have
+#
+# $# = 4
+# $1 = day
+# $2 = month
+# $3 = year or time
+# $4 = filename
+
+# Get the month.
+case $2 in
+ Jan) month=January; nummonth=1;;
+ Feb) month=February; nummonth=2;;
+ Mar) month=March; nummonth=3;;
+ Apr) month=April; nummonth=4;;
+ May) month=May; nummonth=5;;
+ Jun) month=June; nummonth=6;;
+ Jul) month=July; nummonth=7;;
+ Aug) month=August; nummonth=8;;
+ Sep) month=September; nummonth=9;;
+ Oct) month=October; nummonth=10;;
+ Nov) month=November; nummonth=11;;
+ Dec) month=December; nummonth=12;;
+esac
+
+case $3 in
+ ???*) day=$1;;
+ *) day=$3; shift;;
+esac
+
+# Here we have to deal with the problem that the ls output gives either
+# the time of day or the year.
+case $3 in
+ *:*) set `date`; eval year=\$$#
+ case $2 in
+ Jan) nummonthtod=1;;
+ Feb) nummonthtod=2;;
+ Mar) nummonthtod=3;;
+ Apr) nummonthtod=4;;
+ May) nummonthtod=5;;
+ Jun) nummonthtod=6;;
+ Jul) nummonthtod=7;;
+ Aug) nummonthtod=8;;
+ Sep) nummonthtod=9;;
+ Oct) nummonthtod=10;;
+ Nov) nummonthtod=11;;
+ Dec) nummonthtod=12;;
+ esac
+ # For the first six month of the year the time notation can also
+ # be used for files modified in the last year.
+ if (expr $nummonth \> $nummonthtod) > /dev/null;
+ then
+ year=`expr $year - 1`
+ fi;;
+ *) year=$3;;
+esac
+
+# The result.
+echo $day $month $year
+
+# 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-end: "$"
+# End:
diff --git a/build-aux/missing b/build-aux/missing
new file mode 100755
index 0000000..1c8ff70
--- /dev/null
+++ b/build-aux/missing
@@ -0,0 +1,367 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2006-05-10.23
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006
+# 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# 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
+ tar try tar, gnutar, gtar, then tar without non-portable flags
+ yacc create \`y.tab.[ch]', if possible, from existing .[ch]
+
+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
+
+# 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).
+case $1 in
+ lex|yacc)
+ # Not GNU programs, they don't have --version.
+ ;;
+
+ tar)
+ if test -n "$run"; then
+ echo 1>&2 "ERROR: \`tar' requires --run"
+ exit 1
+ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+ exit 1
+ fi
+ ;;
+
+ *)
+ 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 $1 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 1
+ 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
+ ;;
+
+ tar)
+ shift
+
+ # We have already tried tar in the generic part.
+ # Look for gnutar/gtar before invocation to avoid ugly error
+ # messages.
+ if (gnutar --version > /dev/null 2>&1); then
+ gnutar "$@" && exit 0
+ fi
+ if (gtar --version > /dev/null 2>&1); then
+ gtar "$@" && exit 0
+ fi
+ firstarg="$1"
+ if shift; then
+ case $firstarg in
+ *o*)
+ firstarg=`echo "$firstarg" | sed s/o//`
+ tar "$firstarg" "$@" && exit 0
+ ;;
+ esac
+ case $firstarg in
+ *h*)
+ firstarg=`echo "$firstarg" | sed s/h//`
+ tar "$firstarg" "$@" && exit 0
+ ;;
+ esac
+ fi
+
+ echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+ You may want to install GNU tar or Free paxutils, or check the
+ command line arguments."
+ exit 1
+ ;;
+
+ *)
+ 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-end: "$"
+# End:
diff --git a/build-aux/texinfo.tex b/build-aux/texinfo.tex
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/build-aux/texinfo.tex
diff --git a/config.in b/config.in
new file mode 100644
index 0000000..d554661
--- /dev/null
+++ b/config.in
@@ -0,0 +1,540 @@
+/* config.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 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 to 1 if translation of program messages to the user's native
+ language is requested. */
+#undef ENABLE_NLS
+
+/* Define if gettimeofday clobbers the localtime buffer. */
+#undef GETTIMEOFDAY_CLOBBERS_LOCALTIME
+
+/* Define to 1 if `TIOCGWINSZ' requires <sys/ioctl.h>. */
+#undef GWINSZ_IN_SYS_IOCTL
+
+/* 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 <argz.h> header file. */
+#undef HAVE_ARGZ_H
+
+/* Define to 1 if you have the <bp-sym.h> header file. */
+#undef HAVE_BP_SYM_H
+
+/* Define to 1 if you have the `bzero' function. */
+#undef HAVE_BZERO
+
+/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the
+ CoreFoundation framework. */
+#undef HAVE_CFLOCALECOPYCURRENT
+
+/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in
+ the CoreFoundation framework. */
+#undef HAVE_CFPREFERENCESCOPYAPPVALUE
+
+/* Define if the GNU dcgettext() function is already present or preinstalled.
+ */
+#undef HAVE_DCGETTEXT
+
+/* 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 `getenv', and to 0 if you don't.
+ */
+#undef HAVE_DECL_GETENV
+
+/* Define to 1 if you have a declaration of mbswidth() in <wchar.h>, and to 0
+ otherwise. */
+#undef HAVE_DECL_MBSWIDTH_IN_WCHAR_H
+
+/* Define to 1 if you have the declaration of `memchr', and to 0 if you don't.
+ */
+#undef HAVE_DECL_MEMCHR
+
+/* Define to 1 if you have the declaration of `memmem', and to 0 if you don't.
+ */
+#undef HAVE_DECL_MEMMEM
+
+/* Define to 1 if you have the declaration of `strcoll', and to 0 if you
+ don't. */
+#undef HAVE_DECL_STRCOLL
+
+/* Define to 1 if you have the declaration of `strdup', and to 0 if you don't.
+ */
+#undef HAVE_DECL_STRDUP
+
+/* Define to 1 if you have the declaration of `strerror', and to 0 if you
+ don't. */
+#undef HAVE_DECL_STRERROR
+
+/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you
+ don't. */
+#undef HAVE_DECL_STRERROR_R
+
+/* Define to 1 if you have the declaration of `strndup', and to 0 if you
+ don't. */
+#undef HAVE_DECL_STRNDUP
+
+/* Define to 1 if you have the declaration of `strnlen', and to 0 if you
+ don't. */
+#undef HAVE_DECL_STRNLEN
+
+/* 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 don't have `vprintf' but do have `_doprnt.' */
+#undef HAVE_DOPRNT
+
+/* Define if you have the declaration of environ. */
+#undef HAVE_ENVIRON_DECL
+
+/* Define to 1 if the system has the type `error_t'. */
+#undef HAVE_ERROR_T
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H
+
+/* Define to 1 if you have the `getcwd' function. */
+#undef HAVE_GETCWD
+
+/* Define to 1 if you have the <getopt.h> header file. */
+#undef HAVE_GETOPT_H
+
+/* Define to 1 if you have the `getopt_long_only' function. */
+#undef HAVE_GETOPT_LONG_ONLY
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#undef HAVE_GETTEXT
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#undef HAVE_GETTIMEOFDAY
+
+/* Define if you have the iconv() function and it works. */
+#undef HAVE_ICONV
+
+/* Define if your compiler supports the #include_next directive. */
+#undef HAVE_INCLUDE_NEXT
+
+/* Define to 1 if the compiler supports one of the keywords 'inline',
+ '__inline__', '__inline' and effectively inlines functions marked as such.
+ */
+#undef HAVE_INLINE
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the <io.h> header file. */
+#undef HAVE_IO_H
+
+/* Define to 1 if you have the `isascii' function. */
+#undef HAVE_ISASCII
+
+/* 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 you have the `bsd' library (-lbsd). */
+#undef HAVE_LIBBSD
+
+/* 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 you have the `lstat' function. */
+#undef HAVE_LSTAT
+
+/* Define if the 'malloc' function is POSIX compliant. */
+#undef HAVE_MALLOC_POSIX
+
+/* Define to 1 if mbrtowc and mbstate_t are properly declared. */
+#undef HAVE_MBRTOWC
+
+/* Define to 1 if you have the `mbsinit' function. */
+#undef HAVE_MBSINIT
+
+/* Define to 1 if <wchar.h> declares mbstate_t. */
+#undef HAVE_MBSTATE_T
+
+/* Define to 1 if you have the `memchr' function. */
+#undef HAVE_MEMCHR
+
+/* Define to 1 if you have the `memcpy' function. */
+#undef HAVE_MEMCPY
+
+/* Define to 1 if you have the `memmem' function. */
+#undef HAVE_MEMMEM
+
+/* Define to 1 if you have the `memmove' function. */
+#undef HAVE_MEMMOVE
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `mempcpy' function. */
+#undef HAVE_MEMPCPY
+
+/* Define to 1 if you have the `memset' function. */
+#undef HAVE_MEMSET
+
+/* Define to 1 if you have the <ncurses/termcap.h> header file. */
+#undef HAVE_NCURSES_TERMCAP_H
+
+/* Define to 1 if you have the <pwd.h> header file. */
+#undef HAVE_PWD_H
+
+/* Define to 1 if you have the <search.h> header file. */
+#undef HAVE_SEARCH_H
+
+/* Define to 1 if you have the `setenv' function. */
+#undef HAVE_SETENV
+
+/* Define to 1 if you have the `setlocale' function. */
+#undef HAVE_SETLOCALE
+
+/* Define to 1 if you have the `setvbuf' function. */
+#undef HAVE_SETVBUF
+
+/* Define to 1 if you have the `sigaction' function. */
+#undef HAVE_SIGACTION
+
+/* 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 `sigprocmask' function. */
+#undef HAVE_SIGPROCMASK
+
+/* Define to 1 if you have the `sigsetmask' function. */
+#undef HAVE_SIGSETMASK
+
+/* Define to 1 if stdbool.h conforms to C99. */
+#undef HAVE_STDBOOL_H
+
+/* 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 `stpcpy' function. */
+#undef HAVE_STPCPY
+
+/* Define to 1 if you have the `strchr' function. */
+#undef HAVE_STRCHR
+
+/* Define to 1 if you have the `strcoll' function and it is properly defined.
+ */
+#undef HAVE_STRCOLL
+
+/* Define to 1 if you have the `strdup' function. */
+#undef HAVE_STRDUP
+
+/* Define to 1 if you have the `strerror' function. */
+#undef HAVE_STRERROR
+
+/* Define to 1 if you have the `strerror_r' function. */
+#undef HAVE_STRERROR_R
+
+/* 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 if you have the strndup() function and it works. */
+#undef HAVE_STRNDUP
+
+/* 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/fcntl.h> header file. */
+#undef HAVE_SYS_FCNTL_H
+
+/* Define to 1 if you have the <sys/file.h> header file. */
+#undef HAVE_SYS_FILE_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/ptem.h> header file. */
+#undef HAVE_SYS_PTEM_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/stream.h> header file. */
+#undef HAVE_SYS_STREAM_H
+
+/* Define to 1 if you have the <sys/timeb.h> header file. */
+#undef HAVE_SYS_TIMEB_H
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define to 1 if you have the <sys/ttold.h> header file. */
+#undef HAVE_SYS_TTOLD_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 <sys/wait.h> header file. */
+#undef HAVE_SYS_WAIT_H
+
+/* Define to 1 if you have the <termcap.h> header file. */
+#undef HAVE_TERMCAP_H
+
+/* Define to 1 if you have the <termios.h> header file. */
+#undef HAVE_TERMIOS_H
+
+/* Define to 1 if you have the <termio.h> header file. */
+#undef HAVE_TERMIO_H
+
+/* Define to 1 if you have the `tsearch' function. */
+#undef HAVE_TSEARCH
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the `unsetenv' function. */
+#undef HAVE_UNSETENV
+
+/* 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 `vprintf' function. */
+#undef HAVE_VPRINTF
+
+/* 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
+
+/* This value is set to 1 to indicate that the system argz facility works */
+#undef HAVE_WORKING_ARGZ
+
+/* Define to 1 if the system has the type `_Bool'. */
+#undef HAVE__BOOL
+
+/* Define to 1 if you have the `_ftime' function. */
+#undef HAVE__FTIME
+
+/* If malloc(0) is != NULL, define this to 1. Otherwise define this to 0. */
+#undef MALLOC_0_IS_NONNULL
+
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
+#undef NO_MINUS_C_MINUS_O
+
+/* 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 version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+ 'ptrdiff_t'. */
+#undef PTRDIFF_T_SUFFIX
+
+/* Define this to 1 if strerror is broken. */
+#undef REPLACE_STRERROR
+
+/* Define as the return type of signal handlers (`int' or `void'). */
+#undef RETSIGTYPE
+
+/* 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
+
+/* 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 the `S_IS*' macros in <sys/stat.h> do not work properly. */
+#undef STAT_MACROS_BROKEN
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to 1 if strerror_r returns char *. */
+#undef STRERROR_R_CHAR_P
+
+/* Define to 1 if your <sys/time.h> declares `struct tm'. */
+#undef TM_IN_SYS_TIME
+
+/* 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
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#undef _FILE_OFFSET_BITS
+
+/* Define for large files, on AIX-style hosts. */
+#undef _LARGE_FILES
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* 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
+
+/* Enable extensions on AIX 3, Interix. */
+#ifndef _ALL_SOURCE
+# undef _ALL_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 general extensions on Solaris. */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
+/* Define to rpl_ if the getopt replacement functions and variables should be
+ used. */
+#undef __GETOPT_PREFIX
+
+/* Define so that glibc/gnulib argp.h does not typedef error_t. */
+#undef __error_t_defined
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to a type to use for `error_t' if it is not otherwise available. */
+#undef error_t
+
+/* Define to rpl_gmtime if the replacement function should be used. */
+#undef gmtime
+
+/* 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
+
+/* 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 MacOS 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 rpl_localtime if the replacement function should be used. */
+#undef localtime
+
+/* Define to a type if <wchar.h> does not define. */
+#undef mbstate_t
+
+/* Define to rpl_memcmp if the replacement function should be used. */
+#undef memcmp
+
+/* Define to the type of st_nlink in struct stat, or a supertype. */
+#undef nlink_t
+
+/* Define to `long int' if <sys/types.h> does not define. */
+#undef off_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, 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
+
+/* Define to rpl_strnlen if the replacement function should be used. */
+#undef strnlen
diff --git a/configure b/configure
new file mode 100755
index 0000000..3d7bc90
--- /dev/null
+++ b/configure
@@ -0,0 +1,21790 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.63 for GNU Texinfo 4.13.
+#
+# Report bugs to <bug-texinfo@gnu.org>.
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008 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
+
+
+
+
+# PATH needs CR
+# 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_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
+if (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
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+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.
+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); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# Required to use basename.
+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
+
+
+# Name of the executable.
+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'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+if test "x$CONFIG_SHELL" = x; then
+ if (eval ":") 2>/dev/null; then
+ as_have_required=yes
+else
+ as_have_required=no
+fi
+
+ if test $as_have_required = yes && (eval ":
+(as_func_return () {
+ (exit \$1)
+}
+as_func_success () {
+ as_func_return 0
+}
+as_func_failure () {
+ as_func_return 1
+}
+as_func_ret_success () {
+ return 0
+}
+as_func_ret_failure () {
+ return 1
+}
+
+exitcode=0
+if as_func_success; then
+ :
+else
+ exitcode=1
+ echo as_func_success failed.
+fi
+
+if as_func_failure; then
+ exitcode=1
+ echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+ :
+else
+ exitcode=1
+ echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+ exitcode=1
+ echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+ :
+else
+ exitcode=1
+ echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0) || { (exit 1); exit 1; }
+
+(
+ as_lineno_1=\$LINENO
+ as_lineno_2=\$LINENO
+ test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
+ test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
+") 2> /dev/null; then
+ :
+else
+ as_candidate_shells=
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ case $as_dir in
+ /*)
+ for as_base in sh bash ksh sh5; do
+ as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
+ done;;
+ esac
+done
+IFS=$as_save_IFS
+
+
+ for as_shell in $as_candidate_shells $SHELL; do
+ # Try only shells that exist, to save several forks.
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { ("$as_shell") 2> /dev/null <<\_ASEOF
+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
+
+
+:
+_ASEOF
+}; then
+ CONFIG_SHELL=$as_shell
+ as_have_required=yes
+ if { "$as_shell" 2> /dev/null <<\_ASEOF
+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_func_return () {
+ (exit $1)
+}
+as_func_success () {
+ as_func_return 0
+}
+as_func_failure () {
+ as_func_return 1
+}
+as_func_ret_success () {
+ return 0
+}
+as_func_ret_failure () {
+ return 1
+}
+
+exitcode=0
+if as_func_success; then
+ :
+else
+ exitcode=1
+ echo as_func_success failed.
+fi
+
+if as_func_failure; then
+ exitcode=1
+ echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+ :
+else
+ exitcode=1
+ echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+ exitcode=1
+ echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = "$1" ); then
+ :
+else
+ exitcode=1
+ echo positional parameters were not saved.
+fi
+
+test $exitcode = 0) || { (exit 1); exit 1; }
+
+(
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
+
+_ASEOF
+}; then
+ break
+fi
+
+fi
+
+ done
+
+ if test "x$CONFIG_SHELL" != x; then
+ for as_var in BASH_ENV ENV
+ do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+ done
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+
+ if test $as_have_required = no; then
+ echo This script requires a shell more modern than all the
+ echo shells that I found on your system. Please install a
+ echo modern shell, or manually run the script under such a
+ echo shell if you do have one.
+ { (exit 1); exit 1; }
+fi
+
+
+fi
+
+fi
+
+
+
+(eval "as_func_return () {
+ (exit \$1)
+}
+as_func_success () {
+ as_func_return 0
+}
+as_func_failure () {
+ as_func_return 1
+}
+as_func_ret_success () {
+ return 0
+}
+as_func_ret_failure () {
+ return 1
+}
+
+exitcode=0
+if as_func_success; then
+ :
+else
+ exitcode=1
+ echo as_func_success failed.
+fi
+
+if as_func_failure; then
+ exitcode=1
+ echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+ :
+else
+ exitcode=1
+ echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+ exitcode=1
+ echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+ :
+else
+ exitcode=1
+ echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0") || {
+ echo No shell found that supports shell functions.
+ echo Please tell bug-autoconf@gnu.org about your system,
+ echo including any error possibly output before this message.
+ echo This can help us improve future autoconf versions.
+ echo Configuration will now proceed without shell functions.
+}
+
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line after each line using $LINENO; the second 'sed'
+ # does the real work. The second script uses 'N' to pair each
+ # line-number line with the line containing $LINENO, and appends
+ # trailing '-' during substitution so that $LINENO is not a special
+ # case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # scripts with optimization help from Paolo Bonzini. 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
+ { (exit 1); exit 1; }; }
+
+ # 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
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+ case `echo 'x\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ *) ECHO_C='\c';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+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 -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
+ fi
+else
+ as_ln_s='cp -p'
+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=:
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# 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 7<&0 </dev/null 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, 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=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Identity of this package.
+PACKAGE_NAME='GNU Texinfo'
+PACKAGE_TARNAME='texinfo'
+PACKAGE_VERSION='4.13'
+PACKAGE_STRING='GNU Texinfo 4.13'
+PACKAGE_BUGREPORT='bug-texinfo@gnu.org'
+
+ac_unique_file="makeinfo/makeinfo.c"
+# 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=
+gt_needs=
+ac_subst_vars='gltests_LTLIBOBJS
+gltests_LIBOBJS
+gl_LTLIBOBJS
+gl_LIBOBJS
+LTLIBOBJS
+TEX
+HEVEA
+POSUB
+INTLLIBS
+LTLIBICONV
+LIBICONV
+INTL_MACOSX_LIBS
+XGETTEXT_EXTRA_OPTIONS
+MSGMERGE
+XGETTEXT_015
+XGETTEXT
+GMSGFMT_015
+MSGFMT_015
+GMSGFMT
+MSGFMT
+GETTEXT_MACRO_VERSION
+USE_NLS
+INSTALL_WARNINGS_FALSE
+INSTALL_WARNINGS_TRUE
+TERMLIBS
+TOOLS_ONLY_FALSE
+TOOLS_ONLY_TRUE
+native_tools
+LIBOBJS
+HELP2MAN
+LIBGNU_LTLIBDEPS
+LIBGNU_LIBDEPS
+REPLACE_ISWCNTRL
+WCTYPE_H
+HAVE_WCTYPE_H
+NEXT_WCTYPE_H
+HAVE_WINT_T
+HAVE_ISWCNTRL
+NEXT_WCHAR_H
+HAVE_WCHAR_H
+WCHAR_H
+REPLACE_WCWIDTH
+HAVE_DECL_WCWIDTH
+GNULIB_WCWIDTH
+HAVE_UNISTD_H
+NEXT_UNISTD_H
+SYS_STAT_H
+NEXT_SYS_STAT_H
+HAVE_LSTAT
+REPLACE_MKDIR
+NEXT_STRING_H
+NEXT_STDLIB_H
+STDINT_H
+WINT_T_SUFFIX
+WCHAR_T_SUFFIX
+SIZE_T_SUFFIX
+SIG_ATOMIC_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_SIZE_T
+BITSIZEOF_SIG_ATOMIC_T
+BITSIZEOF_PTRDIFF_T
+HAVE_SYS_BITYPES_H
+HAVE_SYS_INTTYPES_H
+HAVE_STDINT_H
+NEXT_STDINT_H
+HAVE_SYS_TYPES_H
+HAVE_INTTYPES_H
+HAVE_UNSIGNED_LONG_LONG_INT
+HAVE_LONG_LONG_INT
+HAVE__BOOL
+STDBOOL_H
+REPLACE_STRSTR
+REPLACE_STRCASESTR
+REPLACE_MEMMEM
+REPLACE_STRSIGNAL
+REPLACE_STRERROR
+HAVE_DECL_STRSIGNAL
+HAVE_DECL_STRERROR
+HAVE_DECL_STRTOK_R
+HAVE_STRCASESTR
+HAVE_STRSEP
+HAVE_STRPBRK
+HAVE_DECL_STRNLEN
+HAVE_DECL_STRNDUP
+HAVE_STRNDUP
+HAVE_DECL_STRDUP
+HAVE_STRCHRNUL
+HAVE_STPNCPY
+HAVE_STPCPY
+HAVE_RAWMEMCHR
+HAVE_DECL_MEMRCHR
+HAVE_MEMPCPY
+HAVE_DECL_MEMMEM
+GNULIB_STRSIGNAL
+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_STRDUP
+GNULIB_STRCHRNUL
+GNULIB_STPNCPY
+GNULIB_STPCPY
+GNULIB_RAWMEMCHR
+GNULIB_MEMRCHR
+GNULIB_MEMPCPY
+GNULIB_MEMMEM
+VOID_UNSETENV
+REPLACE_STRTOD
+REPLACE_PUTENV
+REPLACE_MKSTEMP
+HAVE_UNSETENV
+HAVE_STRTOD
+HAVE_SETENV
+HAVE_RPMATCH
+HAVE_REALLOC_POSIX
+HAVE_MKDTEMP
+HAVE_GETSUBOPT
+HAVE_CALLOC_POSIX
+GNULIB_UNSETENV
+GNULIB_STRTOD
+GNULIB_SETENV
+GNULIB_RPMATCH
+GNULIB_PUTENV
+GNULIB_MKSTEMP
+GNULIB_MKDTEMP
+GNULIB_GETSUBOPT
+GNULIB_CALLOC_POSIX
+GNULIB_REALLOC_POSIX
+GNULIB_MALLOC_POSIX
+HAVE_MALLOC_POSIX
+LOCALCHARSET_TESTS_ENVIRONMENT
+GLIBC21
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+SYS_TIME_H
+REPLACE_GETTIMEOFDAY
+HAVE_STRUCT_TIMEVAL
+HAVE_SYS_TIME_H
+NEXT_SYS_TIME_H
+INCLUDE_NEXT
+LTLIBINTL
+LIBINTL
+GETOPT_H
+REPLACE_LSEEK
+REPLACE_LCHOWN
+REPLACE_GETPAGESIZE
+REPLACE_GETCWD
+REPLACE_FCHDIR
+REPLACE_CHOWN
+HAVE_SYS_PARAM_H
+HAVE_OS_H
+HAVE_DECL_GETLOGIN_R
+HAVE_DECL_ENVIRON
+HAVE_SLEEP
+HAVE_READLINK
+HAVE_GETPAGESIZE
+HAVE_FTRUNCATE
+HAVE_DUP2
+GNULIB_SLEEP
+GNULIB_READLINK
+GNULIB_LSEEK
+GNULIB_LCHOWN
+GNULIB_GETPAGESIZE
+GNULIB_GETLOGIN_R
+GNULIB_GETCWD
+GNULIB_FTRUNCATE
+GNULIB_FCHDIR
+GNULIB_ENVIRON
+GNULIB_DUP2
+GNULIB_CHOWN
+ARGZ_H
+ALLOCA_H
+ALLOCA
+GL_COND_LIBTOOL_FALSE
+GL_COND_LIBTOOL_TRUE
+EGREP
+GREP
+CPP
+RANLIB
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+MAINT
+MAINTAINER_MODE_FALSE
+MAINTAINER_MODE_TRUE
+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_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_maintainer_mode
+enable_dependency_tracking
+enable_largefile
+enable_multiplatform
+enable_install_warnings
+enable_nls
+with_gnu_ld
+enable_rpath
+with_libiconv_prefix
+with_libintl_prefix
+'
+ 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=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_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
+ { (exit 1); exit 1; }; }
+ 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_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
+ { (exit 1); exit 1; }; }
+ 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_echo "$as_me: error: invalid package name: $ac_useropt" >&2
+ { (exit 1); exit 1; }; }
+ 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_echo "$as_me: error: invalid package name: $ac_useropt" >&2
+ { (exit 1); exit 1; }; }
+ 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_echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; }
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+ { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+ { (exit 1); exit 1; }; }
+ 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_echo "$as_me: error: missing argument to $ac_option" >&2
+ { (exit 1); exit 1; }; }
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2
+ { (exit 1); exit 1; }; } ;;
+ *) $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_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; }
+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
+ $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used." >&2
+ 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_echo "$as_me: error: working directory cannot be determined" >&2
+ { (exit 1); exit 1; }; }
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ { $as_echo "$as_me: error: pwd does not report name of working directory" >&2
+ { (exit 1); exit 1; }; }
+
+
+# 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_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+ { (exit 1); exit 1; }; }
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2
+ { (exit 1); exit 1; }; }
+ 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 GNU Texinfo 4.13 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/texinfo]
+ --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 GNU Texinfo 4.13:";;
+ 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-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer
+ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors
+ --disable-largefile omit support for large files
+ --enable-multiplatform put executables into bin/PLATFORM and libraries into
+ lib/PLATFORM
+ --disable-install-warnings omit make install warnings about TeX files
+ --disable-nls do not use Native Language Support
+ --disable-rpath do not hardcode runtime library paths
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --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-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib
+ --without-libintl-prefix don't search for libintl in includedir and libdir
+
+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 C/C++/Objective 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 <bug-texinfo@gnu.org>.
+_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
+GNU Texinfo configure 4.13
+generated by GNU Autoconf 2.63
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 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
+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 GNU Texinfo $as_me 4.13, which was
+generated by GNU Autoconf 2.63. 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) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+ 2)
+ ac_configure_args1="$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
+ ac_configure_args="$ac_configure_args '$ac_arg'"
+ ;;
+ esac
+ done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export 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
+
+ cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+ 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:$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= ;; #(
+ *) $as_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
+
+ cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+ 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
+ cat <<\_ASBOX
+## ------------------- ##
+## File substitutions. ##
+## ------------------- ##
+_ASBOX
+ 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
+ cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+ 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'; { (exit 1); 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
+
+# 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
+
+
+# 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
+ ac_site_file1=$CONFIG_SITE
+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 -r "$ac_site_file"; then
+ { $as_echo "$as_me:$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"
+ 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.
+ if test -f "$cache_file"; then
+ { $as_echo "$as_me:$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:$LINENO: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+gl_header_list="$gl_header_list sys/time.h"
+gl_func_list="$gl_func_list gettimeofday"
+gl_header_list="$gl_header_list wchar.h"
+gl_func_list="$gl_func_list isascii"
+gl_func_list="$gl_func_list mbsinit"
+gl_func_list="$gl_func_list setenv"
+gl_header_list="$gl_header_list unistd.h"
+gl_header_list="$gl_header_list stdint.h"
+gl_header_list="$gl_header_list stdlib.h"
+gl_header_list="$gl_header_list string.h"
+gl_func_list="$gl_func_list lstat"
+gl_header_list="$gl_header_list sys/stat.h"
+gl_func_list="$gl_func_list iswcntrl"
+gl_header_list="$gl_header_list wctype.h"
+gl_func_list="$gl_func_list wcwidth"
+gt_needs="$gt_needs "
+# 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:$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:$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:$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:$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:$LINENO: former value: \`$ac_old_val'" >&5
+$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
+ { $as_echo "$as_me:$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.
+ *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { $as_echo "$as_me:$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_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+ { (exit 1); exit 1; }; }
+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_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_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in build-aux \"$srcdir\"/build-aux" >&5
+$as_echo "$as_me: error: cannot find install-sh or install.sh in build-aux \"$srcdir\"/build-aux" >&2;}
+ { (exit 1); exit 1; }; }
+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.10'
+
+# 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:$LINENO: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; 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 { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$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:$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:$LINENO: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# 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 (
+ 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
+ rm -f conftest.file
+ 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_echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken
+alias in your environment" >&5
+$as_echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken
+alias in your environment" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ { { $as_echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+Check your system clock" >&5
+$as_echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+{ $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+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`
+
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+{ $as_echo "$as_me:$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 test "${ac_cv_path_mkdir+set}" = set; 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
+ { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$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
+
+ 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.
+ test -d ./--version && rmdir ./--version
+ MKDIR_P="$ac_install_sh -d"
+ fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+ [\\/$]* | ?:[\\/]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+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:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AWK+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_AWK="$ac_prog"
+ $as_echo "$as_me:$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:$LINENO: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:$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 { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; 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:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+ SET_MAKE=
+else
+ { $as_echo "$as_me:$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
+
+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_echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+$as_echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+ { (exit 1); exit 1; }; }
+ 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='texinfo'
+ VERSION='4.13'
+
+
+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"}
+
+install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
+
+# 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:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:$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:$LINENO: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:$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:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:$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:$LINENO: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:$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:$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"
+
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+
+
+# Minimum Autoconf version required.
+
+
+# Where to generate output; srcdir location.
+ac_config_headers="$ac_config_headers config.h:config.in"
+
+
+# When the Texinfo source is imported into other repositories
+# (NetBSD and TeX Live), timestamps are generally not preserved. This
+# causes lots of annoyance, so --enable-maintainer-mode. Sorry.
+{ $as_echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
+$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+ # Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then
+ enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else
+ USE_MAINTAINER_MODE=no
+fi
+
+ { $as_echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
+$as_echo "$USE_MAINTAINER_MODE" >&6; }
+ if test $USE_MAINTAINER_MODE = yes; then
+ MAINTAINER_MODE_TRUE=
+ MAINTAINER_MODE_FALSE='#'
+else
+ MAINTAINER_MODE_TRUE='#'
+ MAINTAINER_MODE_FALSE=
+fi
+
+ MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+# 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:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ $as_echo "$as_me:$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:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:$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:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ $as_echo "$as_me:$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:$LINENO: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:$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:$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:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ $as_echo "$as_me:$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:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:$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:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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:$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:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:$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:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:$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:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:$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:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:$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:$LINENO: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:$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:$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:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:$LINENO: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compiler --version >&5") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compiler -v >&5") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compiler -V >&5") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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:$LINENO: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; 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
+
+{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+if test -z "$ac_file"; then
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: C compiler cannot create executables
+See \`config.log' for more details." >&2;}
+ { (exit 77); exit 77; }; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+ if { ac_try='./$ac_file'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }; }
+ fi
+ fi
+fi
+{ $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+{ $as_echo "$as_me:$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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; 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:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if test "${ac_cv_objext+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; 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:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:$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 test "${ac_cv_c_compiler_gnu+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_compiler_gnu=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ 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:$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:$LINENO: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; 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 >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_prog_cc_g=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ CFLAGS=""
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ :
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_prog_cc_g=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+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:$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:$LINENO: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* 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"
+ 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_prog_cc_c89=$ac_arg
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+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:$LINENO: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:$LINENO: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+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
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:$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
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+ am__include=include
+ am__quote=
+ _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ fi
+fi
+
+
+{ $as_echo "$as_me:$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='\'
+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:$LINENO: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; 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'.
+ 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
+ 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 8's {/usr,}/bin/sh.
+ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ case $depmode in
+ 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
+ ;;
+ none) break ;;
+ esac
+ # 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.
+ if depmode=$depmode \
+ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} 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 sub/conftest.${OBJEXT-o} 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:$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
+
+
+
+# Since we use gnulib: gl_EARLY must be called as soon as possible after
+# the C compiler is checked. The others could be later, but we just
+# keep everything together.
+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:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ $as_echo "$as_me:$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:$LINENO: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+ { $as_echo "$as_me:$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:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ $as_echo "$as_me:$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:$LINENO: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+ { $as_echo "$as_me:$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:$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 "x$CC" != xcc; then
+ { $as_echo "$as_me:$LINENO: checking whether $CC and cc understand -c and -o together" >&5
+$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; }
+else
+ { $as_echo "$as_me:$LINENO: checking whether cc understands -c and -o together" >&5
+$as_echo_n "checking whether cc understands -c and -o together... " >&6; }
+fi
+set dummy $CC; ac_cc=`$as_echo "$2" |
+ sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+# Make sure it works both with $CC and with simple cc.
+# We do the test twice because some compilers refuse to overwrite an
+# existing .o file with -o, though they will create one.
+ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+rm -f conftest2.*
+if { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ test -f conftest2.$ac_objext && { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); };
+then
+ eval ac_cv_prog_cc_${ac_cc}_c_o=yes
+ if test "x$CC" != xcc; then
+ # Test first that cc exists at all.
+ if { ac_try='cc -c conftest.$ac_ext >&5'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+ rm -f conftest2.*
+ if { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ test -f conftest2.$ac_objext && { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); };
+ then
+ # cc works too.
+ :
+ else
+ # cc exists but doesn't like -o.
+ eval ac_cv_prog_cc_${ac_cc}_c_o=no
+ fi
+ fi
+ fi
+else
+ eval ac_cv_prog_cc_${ac_cc}_c_o=no
+fi
+rm -f core conftest*
+
+fi
+if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define NO_MINUS_C_MINUS_O 1
+_ACEOF
+
+fi
+
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+ac_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+if eval "test \"`echo '$ac_cv_prog_cc_'${ac_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
+{ $as_echo "$as_me:$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 test "${ac_cv_prog_CPP+set}" = set; 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 >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ :
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ # Broken: success on invalid input.
+continue
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f 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:$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 >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ :
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ # Broken: success on invalid input.
+continue
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ :
+else
+ { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }; }
+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:$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 test "${ac_cv_path_GREP+set}" = set; 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"
+ { test -f "$ac_path_GREP" && $as_test_x "$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
+ ac_count=`expr $ac_count + 1`
+ 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_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+$as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:$LINENO: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; 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"
+ { test -f "$ac_path_EGREP" && $as_test_x "$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
+ ac_count=`expr $ac_count + 1`
+ 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_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+$as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_header_stdc=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ 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 >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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 >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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 >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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
+rm -f 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+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
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+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`
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ eval "$as_ac_Header=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = 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_minix_config_h+set}" = set; then
+ { $as_echo "$as_me:$LINENO: checking for minix/config.h" >&5
+$as_echo_n "checking for minix/config.h... " >&6; }
+if test "${ac_cv_header_minix_config_h+set}" = set; then
+ $as_echo_n "(cached) " >&6
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5
+$as_echo "$ac_cv_header_minix_config_h" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking minix/config.h usability" >&5
+$as_echo_n "checking minix/config.h usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <minix/config.h>
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_header_compiler=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking minix/config.h presence" >&5
+$as_echo_n "checking minix/config.h presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <minix/config.h>
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ ac_header_preproc=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$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:$LINENO: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: minix/config.h: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: minix/config.h: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: minix/config.h: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: minix/config.h: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: minix/config.h: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: minix/config.h: proceeding with the preprocessor's result" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: minix/config.h: in the future, the compiler will take precedence" >&2;}
+ ( cat <<\_ASBOX
+## ---------------------------------- ##
+## Report this to bug-texinfo@gnu.org ##
+## ---------------------------------- ##
+_ASBOX
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for minix/config.h" >&5
+$as_echo_n "checking for minix/config.h... " >&6; }
+if test "${ac_cv_header_minix_config_h+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_header_minix_config_h=$ac_header_preproc
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5
+$as_echo "$ac_cv_header_minix_config_h" >&6; }
+
+fi
+if test "x$ac_cv_header_minix_config_h" = x""yes; then
+ MINIX=yes
+else
+ MINIX=
+fi
+
+
+ if test "$MINIX" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define _POSIX_SOURCE 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define _POSIX_1_SOURCE 2
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define _MINIX 1
+_ACEOF
+
+ fi
+
+
+
+ { $as_echo "$as_me:$LINENO: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+# define __EXTENSIONS__ 1
+ $ac_includes_default
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_safe_to_define___extensions__=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_safe_to_define___extensions__=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$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 &&
+ cat >>confdefs.h <<\_ACEOF
+#define __EXTENSIONS__ 1
+_ACEOF
+
+ cat >>confdefs.h <<\_ACEOF
+#define _ALL_SOURCE 1
+_ACEOF
+
+ cat >>confdefs.h <<\_ACEOF
+#define _GNU_SOURCE 1
+_ACEOF
+
+ cat >>confdefs.h <<\_ACEOF
+#define _POSIX_PTHREAD_SEMANTICS 1
+_ACEOF
+
+ cat >>confdefs.h <<\_ACEOF
+#define _TANDEM_SOURCE 1
+_ACEOF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
+# for constant arguments. Useless!
+{ $as_echo "$as_me:$LINENO: checking for working alloca.h" >&5
+$as_echo_n "checking for working alloca.h... " >&6; }
+if test "${ac_cv_working_alloca_h+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <alloca.h>
+int
+main ()
+{
+char *p = (char *) alloca (2 * sizeof (int));
+ if (p) return 0;
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ ac_cv_working_alloca_h=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_working_alloca_h=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$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
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ALLOCA_H 1
+_ACEOF
+
+fi
+
+{ $as_echo "$as_me:$LINENO: checking for alloca" >&5
+$as_echo_n "checking for alloca... " >&6; }
+if test "${ac_cv_func_alloca_works+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.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 */
+char *alloca ();
+# endif
+# endif
+# endif
+# endif
+#endif
+
+int
+main ()
+{
+char *p = (char *) alloca (1);
+ if (p) return 0;
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ ac_cv_func_alloca_works=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_func_alloca_works=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$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
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ALLOCA 1
+_ACEOF
+
+else
+ # 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.
+
+
+
+
+
+ALLOCA=\${LIBOBJDIR}alloca.$ac_objext
+
+cat >>confdefs.h <<\_ACEOF
+#define C_ALLOCA 1
+_ACEOF
+
+
+{ $as_echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5
+$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; }
+if test "${ac_cv_os_cray+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#if defined CRAY && ! defined CRAY2
+webecray
+#else
+wenotbecray
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "webecray" >/dev/null 2>&1; then
+ ac_cv_os_cray=yes
+else
+ ac_cv_os_cray=no
+fi
+rm -f conftest*
+
+fi
+{ $as_echo "$as_me:$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`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* 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 $ac_func ();
+/* 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_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ eval "$as_ac_var=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define CRAY_STACKSEG_END $ac_func
+_ACEOF
+
+ break
+fi
+
+ done
+fi
+
+{ $as_echo "$as_me:$LINENO: checking stack direction for C alloca" >&5
+$as_echo_n "checking stack direction for C alloca... " >&6; }
+if test "${ac_cv_c_stack_direction+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then
+ ac_cv_c_stack_direction=0
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+find_stack_direction ()
+{
+ static char *addr = 0;
+ auto char dummy;
+ if (addr == 0)
+ {
+ addr = &dummy;
+ return find_stack_direction ();
+ }
+ else
+ return (&dummy > addr) ? 1 : -1;
+}
+
+int
+main ()
+{
+ return find_stack_direction () < 0;
+}
+_ACEOF
+rm -f 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_c_stack_direction=1
+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
+
+( exit $ac_status )
+ac_cv_c_stack_direction=-1
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:$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
+
+
+fi
+
+{ $as_echo "$as_me:$LINENO: checking for C/C++ restrict keyword" >&5
+$as_echo_n "checking for C/C++ restrict keyword... " >&6; }
+if test "${ac_cv_c_restrict+set}" = set; 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 >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+typedef int * int_ptr;
+ int foo (int_ptr $ac_kw ip) {
+ return ip[0];
+ }
+int
+main ()
+{
+int s[1];
+ int * $ac_kw t = s;
+ t[0] = 0;
+ return foo(t)
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_c_restrict=$ac_kw
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+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:$LINENO: result: $ac_cv_c_restrict" >&5
+$as_echo "$ac_cv_c_restrict" >&6; }
+
+
+ case $ac_cv_c_restrict in
+ restrict) ;;
+ no) cat >>confdefs.h <<\_ACEOF
+#define restrict /**/
+_ACEOF
+ ;;
+ *) cat >>confdefs.h <<_ACEOF
+#define restrict $ac_cv_c_restrict
+_ACEOF
+ ;;
+ esac
+
+
+ GNULIB_CHOWN=0;
+ GNULIB_DUP2=0;
+ GNULIB_ENVIRON=0;
+ GNULIB_FCHDIR=0;
+ GNULIB_FTRUNCATE=0;
+ GNULIB_GETCWD=0;
+ GNULIB_GETLOGIN_R=0;
+ GNULIB_GETPAGESIZE=0;
+ GNULIB_LCHOWN=0;
+ GNULIB_LSEEK=0;
+ GNULIB_READLINK=0;
+ GNULIB_SLEEP=0;
+ HAVE_DUP2=1;
+ HAVE_FTRUNCATE=1;
+ HAVE_GETPAGESIZE=1;
+ HAVE_READLINK=1;
+ HAVE_SLEEP=1;
+ HAVE_DECL_ENVIRON=1;
+ HAVE_DECL_GETLOGIN_R=1;
+ HAVE_OS_H=0;
+ HAVE_SYS_PARAM_H=0;
+ REPLACE_CHOWN=0;
+ REPLACE_FCHDIR=0;
+ REPLACE_GETCWD=0;
+ REPLACE_GETPAGESIZE=0;
+ REPLACE_LCHOWN=0;
+ REPLACE_LSEEK=0;
+
+{ $as_echo "$as_me:$LINENO: checking whether strerror_r is declared" >&5
+$as_echo_n "checking whether strerror_r is declared... " >&6; }
+if test "${ac_cv_have_decl_strerror_r+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+#ifndef strerror_r
+ (void) strerror_r;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_strerror_r=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_strerror_r=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_strerror_r" >&5
+$as_echo "$ac_cv_have_decl_strerror_r" >&6; }
+if test "x$ac_cv_have_decl_strerror_r" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRERROR_R 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRERROR_R 0
+_ACEOF
+
+
+fi
+
+
+
+for ac_func in strerror_r
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* 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 $ac_func ();
+/* 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_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ eval "$as_ac_var=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+{ $as_echo "$as_me:$LINENO: checking whether strerror_r returns char *" >&5
+$as_echo_n "checking whether strerror_r returns char *... " >&6; }
+if test "${ac_cv_func_strerror_r_char_p+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+
+ ac_cv_func_strerror_r_char_p=no
+ if test $ac_cv_have_decl_strerror_r = yes; then
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+
+ char buf[100];
+ char x = *strerror_r (0, buf, sizeof buf);
+ char *p = strerror_r (0, buf, sizeof buf);
+ return !p || x;
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_func_strerror_r_char_p=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ else
+ # strerror_r is not declared. Choose between
+ # systems that have relatively inaccessible declarations for the
+ # function. BeOS and DEC UNIX 4.0 fall in this category, but the
+ # former has a strerror_r that returns char*, while the latter
+ # has a strerror_r that returns `int'.
+ # This test should segfault on the DEC system.
+ if test "$cross_compiling" = yes; then
+ :
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+ extern char *strerror_r ();
+int
+main ()
+{
+char buf[100];
+ char x = *strerror_r (0, buf, sizeof buf);
+ return ! isalpha (x);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_strerror_r_char_p=yes
+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
+
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+ fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_strerror_r_char_p" >&5
+$as_echo "$ac_cv_func_strerror_r_char_p" >&6; }
+if test $ac_cv_func_strerror_r_char_p = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STRERROR_R_CHAR_P 1
+_ACEOF
+
+fi
+
+
+ XGETTEXT_EXTRA_OPTIONS=
+
+
+ if test -z "$GETOPT_H"; then
+
+for ac_header in getopt.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_header_compiler=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ ac_header_preproc=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$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:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ ( cat <<\_ASBOX
+## ---------------------------------- ##
+## Report this to bug-texinfo@gnu.org ##
+## ---------------------------------- ##
+_ASBOX
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+as_val=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ GETOPT_H=getopt.h
+fi
+
+done
+
+ fi
+
+ if test -z "$GETOPT_H"; then
+
+for ac_func in getopt_long_only
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* 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 $ac_func ();
+/* 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_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ eval "$as_ac_var=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ GETOPT_H=getopt.h
+fi
+done
+
+ fi
+
+ if test -z "$GETOPT_H"; then
+ { $as_echo "$as_me:$LINENO: checking whether optreset is declared" >&5
+$as_echo_n "checking whether optreset is declared... " >&6; }
+if test "${ac_cv_have_decl_optreset+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <getopt.h>
+
+int
+main ()
+{
+#ifndef optreset
+ (void) optreset;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_optreset=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_optreset=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_optreset" >&5
+$as_echo "$ac_cv_have_decl_optreset" >&6; }
+if test "x$ac_cv_have_decl_optreset" = x""yes; then
+ GETOPT_H=getopt.h
+fi
+
+ fi
+
+ if test -z "$GETOPT_H"; then
+ { $as_echo "$as_me:$LINENO: checking for working GNU getopt function" >&5
+$as_echo_n "checking for working GNU getopt function... " >&6; }
+if test "${gl_cv_func_gnu_getopt+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then
+ { $as_echo "$as_me:$LINENO: checking whether getopt_clip is declared" >&5
+$as_echo_n "checking whether getopt_clip is declared... " >&6; }
+if test "${ac_cv_have_decl_getopt_clip+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <getopt.h>
+
+int
+main ()
+{
+#ifndef getopt_clip
+ (void) getopt_clip;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_getopt_clip=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_getopt_clip=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_getopt_clip" >&5
+$as_echo "$ac_cv_have_decl_getopt_clip" >&6; }
+if test "x$ac_cv_have_decl_getopt_clip" = x""yes; then
+ gl_cv_func_gnu_getopt=no
+else
+ gl_cv_func_gnu_getopt=yes
+fi
+
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <getopt.h>
+int
+main ()
+{
+
+ char *myargv[3];
+ myargv[0] = "conftest";
+ myargv[1] = "-+";
+ myargv[2] = 0;
+ return getopt (2, myargv, "+a") != '?';
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ gl_cv_func_gnu_getopt=yes
+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
+
+( exit $ac_status )
+gl_cv_func_gnu_getopt=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_gnu_getopt" >&5
+$as_echo "$gl_cv_func_gnu_getopt" >&6; }
+ if test "$gl_cv_func_gnu_getopt" = "no"; then
+ GETOPT_H=getopt.h
+ fi
+ fi
+
+
+ { $as_echo "$as_me:$LINENO: checking whether getenv is declared" >&5
+$as_echo_n "checking whether getenv is declared... " >&6; }
+if test "${ac_cv_have_decl_getenv+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+#ifndef getenv
+ (void) getenv;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_getenv=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_getenv=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_getenv" >&5
+$as_echo "$ac_cv_have_decl_getenv" >&6; }
+if test "x$ac_cv_have_decl_getenv" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETENV 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETENV 0
+_ACEOF
+
+
+fi
+
+
+
+
+
+ { $as_echo "$as_me:$LINENO: checking whether the preprocessor supports include_next" >&5
+$as_echo_n "checking whether the preprocessor supports include_next... " >&6; }
+if test "${gl_cv_have_include_next+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ rm -rf conftestd1 conftestd2
+ mkdir conftestd1 conftestd2
+ cat <<EOF > conftestd1/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 > conftestd2/conftest.h
+#ifndef DEFINED_IN_CONFTESTD1
+#error "include_next test doesn't work"
+#endif
+#define DEFINED_IN_CONFTESTD2
+EOF
+ save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS -Iconftestd1 -Iconftestd2"
+ cat >conftest.$ac_ext <<_ACEOF
+#include <conftest.h>
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ gl_cv_have_include_next=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gl_cv_have_include_next=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CPPFLAGS="$save_CPPFLAGS"
+ rm -rf conftestd1 conftestd2
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_have_include_next" >&5
+$as_echo "$gl_cv_have_include_next" >&6; }
+ if test $gl_cv_have_include_next = yes; then
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_INCLUDE_NEXT 1
+_ACEOF
+
+
+ INCLUDE_NEXT=include_next
+ else
+ INCLUDE_NEXT=include
+ fi
+
+
+
+
+
+
+
+for ac_header in $gl_header_list
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_header_compiler=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ ac_header_preproc=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$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:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ ( cat <<\_ASBOX
+## ---------------------------------- ##
+## Report this to bug-texinfo@gnu.org ##
+## ---------------------------------- ##
+_ASBOX
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+as_val=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+
+
+
+
+
+
+ :
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_sys_time_h='<'sys/time.h'>'
+ else
+ { $as_echo "$as_me:$LINENO: checking absolute name of <sys/time.h>" >&5
+$as_echo_n "checking absolute name of <sys/time.h>... " >&6; }
+if test "${gl_cv_next_sys_time_h+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+
+ if test $ac_cv_header_sys_time_h = yes; then
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/time.h>
+
+_ACEOF
+ gl_cv_next_sys_time_h='"'`(eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ sed -n '\#/sys/time.h#{
+ s#.*"\(.*/sys/time.h\)".*#\1#
+ s#^/[^/]#//&#
+ p
+ q
+ }'`'"'
+ else
+ gl_cv_next_sys_time_h='<'sys/time.h'>'
+ fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_sys_time_h" >&5
+$as_echo "$gl_cv_next_sys_time_h" >&6; }
+ fi
+ NEXT_SYS_TIME_H=$gl_cv_next_sys_time_h
+
+
+
+
+ if test $ac_cv_header_sys_time_h = yes; then
+ HAVE_SYS_TIME_H=1
+ else
+ HAVE_SYS_TIME_H=0
+ fi
+
+
+ { $as_echo "$as_me:$LINENO: checking for struct timeval" >&5
+$as_echo_n "checking for struct timeval... " >&6; }
+if test "${gl_cv_sys_struct_timeval+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#if HAVE_SYS_TIME_H
+ #include <sys/time.h>
+ #endif
+ #include <time.h>
+
+int
+main ()
+{
+static struct timeval x; x.tv_sec = x.tv_usec;
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ gl_cv_sys_struct_timeval=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gl_cv_sys_struct_timeval=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_sys_struct_timeval" >&5
+$as_echo "$gl_cv_sys_struct_timeval" >&6; }
+ if test $gl_cv_sys_struct_timeval = yes; then
+ HAVE_STRUCT_TIMEVAL=1
+ else
+ HAVE_STRUCT_TIMEVAL=0
+ fi
+
+
+ REPLACE_GETTIMEOFDAY=0
+
+ if test $HAVE_SYS_TIME_H = 0 || test $HAVE_STRUCT_TIMEVAL = 0; then
+ SYS_TIME_H=sys/time.h
+ else
+ SYS_TIME_H=
+ fi
+
+
+
+
+
+
+
+
+
+
+for ac_func in $gl_func_list
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* 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 $ac_func ();
+/* 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_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ eval "$as_ac_var=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking for inline" >&5
+$as_echo_n "checking for inline... " >&6; }
+if test "${ac_cv_c_inline+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_c_inline=$ac_kw
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+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:$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
+
+
+ { $as_echo "$as_me:$LINENO: checking for nl_langinfo and CODESET" >&5
+$as_echo_n "checking for nl_langinfo and CODESET... " >&6; }
+if test "${am_cv_langinfo_codeset+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <langinfo.h>
+int
+main ()
+{
+char* cs = nl_langinfo(CODESET); return !cs;
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ am_cv_langinfo_codeset=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ am_cv_langinfo_codeset=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $am_cv_langinfo_codeset" >&5
+$as_echo "$am_cv_langinfo_codeset" >&6; }
+ if test $am_cv_langinfo_codeset = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LANGINFO_CODESET 1
+_ACEOF
+
+ fi
+
+
+ { $as_echo "$as_me:$LINENO: checking whether getc_unlocked is declared" >&5
+$as_echo_n "checking whether getc_unlocked is declared... " >&6; }
+if test "${ac_cv_have_decl_getc_unlocked+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+#ifndef getc_unlocked
+ (void) getc_unlocked;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_getc_unlocked=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_getc_unlocked=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_getc_unlocked" >&5
+$as_echo "$ac_cv_have_decl_getc_unlocked" >&6; }
+if test "x$ac_cv_have_decl_getc_unlocked" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETC_UNLOCKED 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETC_UNLOCKED 0
+_ACEOF
+
+
+fi
+
+
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+ { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
+$as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
+ { (exit 1); exit 1; }; }
+
+{ $as_echo "$as_me:$LINENO: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if test "${ac_cv_build+set}" = set; 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_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+$as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+ { (exit 1); exit 1; }; }
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+ { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
+$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
+$as_echo "$as_me: error: invalid value of canonical build" >&2;}
+ { (exit 1); exit 1; }; };;
+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:$LINENO: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if test "${ac_cv_host+set}" = set; 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_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
+$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
+$as_echo "$as_me: error: invalid value of canonical host" >&2;}
+ { (exit 1); exit 1; }; };;
+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
+
+
+
+ { $as_echo "$as_me:$LINENO: checking whether we are using the GNU C Library 2.1 or newer" >&5
+$as_echo_n "checking whether we are using the GNU C Library 2.1 or newer... " >&6; }
+if test "${ac_cv_gnu_library_2_1+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
+ Lucky GNU user
+ #endif
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "Lucky GNU user" >/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:$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:$LINENO: checking whether malloc, realloc, calloc are POSIX compliant" >&5
+$as_echo_n "checking whether malloc, realloc, calloc are POSIX compliant... " >&6; }
+if test "${gl_cv_func_malloc_posix+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+ choke me
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ gl_cv_func_malloc_posix=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gl_cv_func_malloc_posix=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_malloc_posix" >&5
+$as_echo "$gl_cv_func_malloc_posix" >&6; }
+
+
+ GNULIB_MALLOC_POSIX=0;
+ GNULIB_REALLOC_POSIX=0;
+ GNULIB_CALLOC_POSIX=0;
+ GNULIB_GETSUBOPT=0;
+ GNULIB_MKDTEMP=0;
+ GNULIB_MKSTEMP=0;
+ GNULIB_PUTENV=0;
+ GNULIB_RPMATCH=0;
+ GNULIB_SETENV=0;
+ GNULIB_STRTOD=0;
+ GNULIB_UNSETENV=0;
+ HAVE_CALLOC_POSIX=1;
+ HAVE_GETSUBOPT=1;
+ HAVE_MALLOC_POSIX=1;
+ HAVE_MKDTEMP=1;
+ HAVE_REALLOC_POSIX=1;
+ HAVE_RPMATCH=1;
+ HAVE_SETENV=1;
+ HAVE_STRTOD=1;
+ HAVE_UNSETENV=1;
+ REPLACE_MKSTEMP=0;
+ REPLACE_PUTENV=0;
+ REPLACE_STRTOD=0;
+ VOID_UNSETENV=0;
+
+
+
+for ac_header in stdlib.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_header_compiler=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ ac_header_preproc=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$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:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ ( cat <<\_ASBOX
+## ---------------------------------- ##
+## Report this to bug-texinfo@gnu.org ##
+## ---------------------------------- ##
+_ASBOX
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+as_val=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+{ $as_echo "$as_me:$LINENO: checking for GNU libc compatible malloc" >&5
+$as_echo_n "checking for GNU libc compatible malloc... " >&6; }
+if test "${ac_cv_func_malloc_0_nonnull+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then
+ ac_cv_func_malloc_0_nonnull=no
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#if defined STDC_HEADERS || defined HAVE_STDLIB_H
+# include <stdlib.h>
+#else
+char *malloc ();
+#endif
+
+int
+main ()
+{
+return ! malloc (0);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_malloc_0_nonnull=yes
+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
+
+( exit $ac_status )
+ac_cv_func_malloc_0_nonnull=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_malloc_0_nonnull" >&5
+$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; }
+if test $ac_cv_func_malloc_0_nonnull = yes; then
+ gl_cv_func_malloc_0_nonnull=1
+else
+ gl_cv_func_malloc_0_nonnull=0
+fi
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define MALLOC_0_IS_NONNULL $gl_cv_func_malloc_0_nonnull
+_ACEOF
+
+
+
+ { $as_echo "$as_me:$LINENO: checking for long long int" >&5
+$as_echo_n "checking for long long int... " >&6; }
+if test "${ac_cv_type_long_long_int+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+
+ /* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ if test "$cross_compiling" = yes; then
+ ac_cv_type_long_long_int=yes
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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
+rm -f 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_long_long_int=yes
+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
+
+( exit $ac_status )
+ac_cv_type_long_long_int=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_type_long_long_int=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$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
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LONG_LONG_INT 1
+_ACEOF
+
+ fi
+
+{ $as_echo "$as_me:$LINENO: checking for mbstate_t" >&5
+$as_echo_n "checking for mbstate_t... " >&6; }
+if test "${ac_cv_type_mbstate_t+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+# include <wchar.h>
+int
+main ()
+{
+mbstate_t x; return sizeof x;
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_type_mbstate_t=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_type_mbstate_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_mbstate_t" >&5
+$as_echo "$ac_cv_type_mbstate_t" >&6; }
+ if test $ac_cv_type_mbstate_t = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MBSTATE_T 1
+_ACEOF
+
+ else
+
+cat >>confdefs.h <<\_ACEOF
+#define mbstate_t int
+_ACEOF
+
+ fi
+
+ { $as_echo "$as_me:$LINENO: checking whether mbrtowc and mbstate_t are properly declared" >&5
+$as_echo_n "checking whether mbrtowc and mbstate_t are properly declared... " >&6; }
+if test "${gl_cv_func_mbrtowc+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <wchar.h>
+int
+main ()
+{
+wchar_t wc;
+ char const s[] = "";
+ size_t n = 1;
+ mbstate_t state;
+ return ! (sizeof state && (mbrtowc) (&wc, s, n, &state));
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ gl_cv_func_mbrtowc=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gl_cv_func_mbrtowc=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_mbrtowc" >&5
+$as_echo "$gl_cv_func_mbrtowc" >&6; }
+ if test $gl_cv_func_mbrtowc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MBRTOWC 1
+_ACEOF
+
+ fi
+
+
+ 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_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_STRSIGNAL=0;
+ 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_STRNDUP=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=1;
+ HAVE_DECL_STRSIGNAL=1;
+ REPLACE_STRERROR=0;
+ REPLACE_STRSIGNAL=0;
+ REPLACE_MEMMEM=0;
+ REPLACE_STRCASESTR=0;
+ REPLACE_STRSTR=0;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:$LINENO: checking whether memmem is declared" >&5
+$as_echo_n "checking whether memmem is declared... " >&6; }
+if test "${ac_cv_have_decl_memmem+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+#ifndef memmem
+ (void) memmem;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_memmem=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_memmem=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_memmem" >&5
+$as_echo "$ac_cv_have_decl_memmem" >&6; }
+if test "x$ac_cv_have_decl_memmem" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MEMMEM 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MEMMEM 0
+_ACEOF
+
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_func in memmem
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* 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 $ac_func ();
+/* 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_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ eval "$as_ac_var=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+
+ gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext"
+
+fi
+done
+
+
+
+ :
+
+
+
+
+
+ if test $ac_cv_have_decl_memmem = no; then
+ HAVE_DECL_MEMMEM=0
+ fi
+ :
+
+# Check whether --enable-largefile was given.
+if test "${enable_largefile+set}" = set; then
+ enableval=$enable_largefile;
+fi
+
+if test "$enable_largefile" != no; then
+
+ { $as_echo "$as_me:$LINENO: checking for special C compiler options needed for large files" >&5
+$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
+if test "${ac_cv_sys_largefile_CC+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_sys_largefile_CC=no
+ if test "$GCC" != yes; then
+ ac_save_CC=$CC
+ while :; do
+ # IRIX 6.2 and later do not support large files by default,
+ # so use the C compiler's -n32 option if that helps.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ break
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+ CC="$CC -n32"
+ 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_sys_largefile_CC=' -n32'; break
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+ break
+ done
+ CC=$ac_save_CC
+ rm -f conftest.$ac_ext
+ fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_CC" >&5
+$as_echo "$ac_cv_sys_largefile_CC" >&6; }
+ if test "$ac_cv_sys_largefile_CC" != no; then
+ CC=$CC$ac_cv_sys_largefile_CC
+ fi
+
+ { $as_echo "$as_me:$LINENO: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
+if test "${ac_cv_sys_file_offset_bits+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_sys_file_offset_bits=no; break
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#define _FILE_OFFSET_BITS 64
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_sys_file_offset_bits=64; break
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cv_sys_file_offset_bits=unknown
+ break
+done
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_sys_file_offset_bits" >&5
+$as_echo "$ac_cv_sys_file_offset_bits" >&6; }
+case $ac_cv_sys_file_offset_bits in #(
+ no | unknown) ;;
+ *)
+cat >>confdefs.h <<_ACEOF
+#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
+_ACEOF
+;;
+esac
+rm -rf conftest*
+ if test $ac_cv_sys_file_offset_bits = unknown; then
+ { $as_echo "$as_me:$LINENO: checking for _LARGE_FILES value needed for large files" >&5
+$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
+if test "${ac_cv_sys_large_files+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_sys_large_files=no; break
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#define _LARGE_FILES 1
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_sys_large_files=1; break
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cv_sys_large_files=unknown
+ break
+done
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_sys_large_files" >&5
+$as_echo "$ac_cv_sys_large_files" >&6; }
+case $ac_cv_sys_large_files in #(
+ no | unknown) ;;
+ *)
+cat >>confdefs.h <<_ACEOF
+#define _LARGE_FILES $ac_cv_sys_large_files
+_ACEOF
+;;
+esac
+rm -rf conftest*
+ fi
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking for stdbool.h that conforms to C99" >&5
+$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; }
+if test "${ac_cv_header_stdbool_h+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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];
+ bool e = &s;
+ 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 };
+ _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];
+ #if defined __xlc__ || defined __GNUC__
+ /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0
+ reported by James Lemley on 2005-10-05; see
+ http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
+ This test is not quite right, since xlc is allowed to
+ reject this program, as the initializer for xlcbug is
+ not one of the forms that C requires support for.
+ However, doing the test right would require a run-time
+ test, and that would make cross-compilation harder.
+ Let us hope that IBM fixes the xlc bug, and also adds
+ support for this kind of constant expression. In the
+ meantime, this test will reject xlc, which is OK, since
+ our stdbool.h substitute should suffice. We also test
+ this with GCC, where it should work, to detect more
+ quickly whether someone messes up the test in the
+ future. */
+ char digs[] = "0123456789";
+ int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1);
+ #endif
+ /* 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 ()
+{
+
+ *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
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_header_stdbool_h=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_header_stdbool_h=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdbool_h" >&5
+$as_echo "$ac_cv_header_stdbool_h" >&6; }
+ { $as_echo "$as_me:$LINENO: checking for _Bool" >&5
+$as_echo_n "checking for _Bool... " >&6; }
+if test "${ac_cv_type__Bool+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_type__Bool=no
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+if (sizeof (_Bool))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+if (sizeof ((_Bool)))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ :
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_type__Bool=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type__Bool" >&5
+$as_echo "$ac_cv_type__Bool" >&6; }
+if test "x$ac_cv_type__Bool" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE__BOOL 1
+_ACEOF
+
+
+fi
+
+ if test $ac_cv_header_stdbool_h = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_STDBOOL_H 1
+_ACEOF
+
+ fi
+
+ { $as_echo "$as_me:$LINENO: checking for unsigned long long int" >&5
+$as_echo_n "checking for unsigned long long int... " >&6; }
+if test "${ac_cv_type_unsigned_long_long_int+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+
+ /* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ ac_cv_type_unsigned_long_long_int=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_type_unsigned_long_long_int=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$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
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_UNSIGNED_LONG_LONG_INT 1
+_ACEOF
+
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:$LINENO: checking whether strdup is declared" >&5
+$as_echo_n "checking whether strdup is declared... " >&6; }
+if test "${ac_cv_have_decl_strdup+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+#ifndef strdup
+ (void) strdup;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_strdup=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_strdup=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_strdup" >&5
+$as_echo "$ac_cv_have_decl_strdup" >&6; }
+if test "x$ac_cv_have_decl_strdup" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRDUP 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRDUP 0
+_ACEOF
+
+
+fi
+
+
+
+
+
+ { $as_echo "$as_me:$LINENO: checking for working strerror function" >&5
+$as_echo_n "checking for working strerror function... " >&6; }
+if test "${gl_cv_func_working_strerror+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <string.h>
+
+int
+main ()
+{
+return !*strerror (-2);
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ gl_cv_func_working_strerror=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gl_cv_func_working_strerror=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <string.h>
+
+int
+main ()
+{
+return !*strerror (-2);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ gl_cv_func_working_strerror=yes
+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
+
+( exit $ac_status )
+gl_cv_func_working_strerror=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_working_strerror" >&5
+$as_echo "$gl_cv_func_working_strerror" >&6; }
+ if test $gl_cv_func_working_strerror = no ; then
+ REPLACE_STRERROR=1
+
+ { $as_echo "$as_me:$LINENO: checking whether strerror is declared" >&5
+$as_echo_n "checking whether strerror is declared... " >&6; }
+if test "${ac_cv_have_decl_strerror+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+#ifndef strerror
+ (void) strerror;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_strerror=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_strerror=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_strerror" >&5
+$as_echo "$ac_cv_have_decl_strerror" >&6; }
+if test "x$ac_cv_have_decl_strerror" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRERROR 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRERROR 0
+_ACEOF
+
+
+fi
+
+
+
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+ :
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_string_h='<'string.h'>'
+ else
+ { $as_echo "$as_me:$LINENO: checking absolute name of <string.h>" >&5
+$as_echo_n "checking absolute name of <string.h>... " >&6; }
+if test "${gl_cv_next_string_h+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+
+ if test $ac_cv_header_string_h = yes; then
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <string.h>
+
+_ACEOF
+ gl_cv_next_string_h='"'`(eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ sed -n '\#/string.h#{
+ s#.*"\(.*/string.h\)".*#\1#
+ s#^/[^/]#//&#
+ p
+ q
+ }'`'"'
+ else
+ gl_cv_next_string_h='<'string.h'>'
+ fi
+
+fi
+{ $as_echo "$as_me:$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
+
+
+
+
+
+ { $as_echo "$as_me:$LINENO: checking whether strndup is declared" >&5
+$as_echo_n "checking whether strndup is declared... " >&6; }
+if test "${ac_cv_have_decl_strndup+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+#ifndef strndup
+ (void) strndup;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_strndup=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_strndup=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_strndup" >&5
+$as_echo "$ac_cv_have_decl_strndup" >&6; }
+if test "x$ac_cv_have_decl_strndup" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRNDUP 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRNDUP 0
+_ACEOF
+
+
+fi
+
+
+
+
+ { $as_echo "$as_me:$LINENO: checking whether strnlen is declared" >&5
+$as_echo_n "checking whether strnlen is declared... " >&6; }
+if test "${ac_cv_have_decl_strnlen+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+#ifndef strnlen
+ (void) strnlen;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_strnlen=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_strnlen=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_strnlen" >&5
+$as_echo "$ac_cv_have_decl_strnlen" >&6; }
+if test "x$ac_cv_have_decl_strnlen" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRNLEN 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRNLEN 0
+_ACEOF
+
+
+fi
+
+
+
+
+ REPLACE_MKDIR=0;
+
+
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking whether stat file-mode macros are broken" >&5
+$as_echo_n "checking whether stat file-mode macros are broken... " >&6; }
+if test "${ac_cv_header_stat_broken+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#if defined S_ISBLK && defined S_IFDIR
+extern char c1[S_ISBLK (S_IFDIR) ? -1 : 1];
+#endif
+
+#if defined S_ISBLK && defined S_IFCHR
+extern char c2[S_ISBLK (S_IFCHR) ? -1 : 1];
+#endif
+
+#if defined S_ISLNK && defined S_IFREG
+extern char c3[S_ISLNK (S_IFREG) ? -1 : 1];
+#endif
+
+#if defined S_ISSOCK && defined S_IFREG
+extern char c4[S_ISSOCK (S_IFREG) ? -1 : 1];
+#endif
+
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_header_stat_broken=no
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_header_stat_broken=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stat_broken" >&5
+$as_echo "$ac_cv_header_stat_broken" >&6; }
+if test $ac_cv_header_stat_broken = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STAT_MACROS_BROKEN 1
+_ACEOF
+
+fi
+
+
+
+
+
+
+
+
+ GNULIB_WCWIDTH=0;
+ HAVE_DECL_WCWIDTH=1;
+ REPLACE_WCWIDTH=0;
+ WCHAR_H=
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:$LINENO: checking for wint_t" >&5
+$as_echo_n "checking for wint_t... " >&6; }
+if test "${gt_cv_c_wint_t+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ gt_cv_c_wint_t=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gt_cv_c_wint_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$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
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_WINT_T 1
+_ACEOF
+
+ fi
+
+
+ { $as_echo "$as_me:$LINENO: checking for wchar_t" >&5
+$as_echo_n "checking for wchar_t... " >&6; }
+if test "${gt_cv_c_wchar_t+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stddef.h>
+ wchar_t foo = (wchar_t)'\0';
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ gt_cv_c_wchar_t=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gt_cv_c_wchar_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$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
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_WCHAR_T 1
+_ACEOF
+
+ fi
+
+
+
+
+
+
+
+
+ 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_source_base='gnulib/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:$LINENO: checking for alloca as a compiler built-in" >&5
+$as_echo_n "checking for alloca as a compiler built-in... " >&6; }
+if test "${gl_cv_rpl_alloca+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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:$LINENO: result: $gl_cv_rpl_alloca" >&5
+$as_echo "$gl_cv_rpl_alloca" >&6; }
+ if test $gl_cv_rpl_alloca = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ALLOCA 1
+_ACEOF
+
+ ALLOCA_H=alloca.h
+ else
+ ALLOCA_H=
+ fi
+ else
+ ALLOCA_H=alloca.h
+ fi
+
+
+ :
+
+
+
+
+for ac_header in argz.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ eval "$as_ac_Header=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+{ $as_echo "$as_me:$LINENO: checking for error_t" >&5
+$as_echo_n "checking for error_t... " >&6; }
+if test "${ac_cv_type_error_t+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_type_error_t=no
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#if defined(HAVE_ARGZ_H)
+# include <argz.h>
+#endif
+
+int
+main ()
+{
+if (sizeof (error_t))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#if defined(HAVE_ARGZ_H)
+# include <argz.h>
+#endif
+
+int
+main ()
+{
+if (sizeof ((error_t)))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ :
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_type_error_t=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_error_t" >&5
+$as_echo "$ac_cv_type_error_t" >&6; }
+if test "x$ac_cv_type_error_t" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_ERROR_T 1
+_ACEOF
+
+
+else
+
+cat >>confdefs.h <<\_ACEOF
+#define error_t int
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define __error_t_defined 1
+_ACEOF
+
+fi
+
+
+ARGZ_H=
+{ $as_echo "$as_me:$LINENO: checking for argz_replace" >&5
+$as_echo_n "checking for argz_replace... " >&6; }
+if test "${ac_cv_func_argz_replace+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define argz_replace to an innocuous variant, in case <limits.h> declares argz_replace.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define argz_replace innocuous_argz_replace
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char argz_replace (); 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 argz_replace
+
+/* 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 argz_replace ();
+/* 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_argz_replace || defined __stub___argz_replace
+choke me
+#endif
+
+int
+main ()
+{
+return argz_replace ();
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ ac_cv_func_argz_replace=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_func_argz_replace=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_argz_replace" >&5
+$as_echo "$ac_cv_func_argz_replace" >&6; }
+if test "x$ac_cv_func_argz_replace" = x""yes; then
+ :
+else
+ ARGZ_H=argz.h;
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS argz.$ac_objext"
+
+fi
+
+
+if test -z "$ARGZ_H"; then
+ { $as_echo "$as_me:$LINENO: checking if argz actually works" >&5
+$as_echo_n "checking if argz actually works... " >&6; }
+if test "${lt_cv_sys_argz_works+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ case $host_os in #(
+ *cygwin*)
+ lt_cv_sys_argz_works=no
+ if test "$cross_compiling" != no; then
+ lt_cv_sys_argz_works="guessing no"
+ else
+ lt_sed_extract_leading_digits='s/^\([0-9\.]*\).*/\1/'
+ save_IFS=$IFS
+ IFS=-.
+ set x `uname -r | sed -e "$lt_sed_extract_leading_digits"`
+ IFS=$save_IFS
+ lt_os_major=${2-0}
+ lt_os_minor=${3-0}
+ lt_os_micro=${4-0}
+ if test "$lt_os_major" -gt 1 \
+ || { test "$lt_os_major" -eq 1 \
+ && { test "$lt_os_minor" -gt 5 \
+ || { test "$lt_os_minor" -eq 5 \
+ && test "$lt_os_micro" -gt 24; }; }; }; then
+ lt_cv_sys_argz_works=yes
+ fi
+ fi
+ ;; #(
+ *) lt_cv_sys_argz_works=yes ;;
+ esac
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_sys_argz_works" >&5
+$as_echo "$lt_cv_sys_argz_works" >&6; }
+ if test $lt_cv_sys_argz_works = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_WORKING_ARGZ 1
+_ACEOF
+
+else
+ ARGZ_H=argz.h
+
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS argz.$ac_objext"
+
+fi
+
+fi
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:$LINENO: checking if environ is properly declared" >&5
+$as_echo_n "checking if environ is properly declared... " >&6; }
+ if test "${gt_cv_var_environ_declaration+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <unistd.h>
+ extern struct { int foo; } environ;
+int
+main ()
+{
+environ.foo = 1;
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ gt_cv_var_environ_declaration=no
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gt_cv_var_environ_declaration=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+ { $as_echo "$as_me:$LINENO: result: $gt_cv_var_environ_declaration" >&5
+$as_echo "$gt_cv_var_environ_declaration" >&6; }
+ if test $gt_cv_var_environ_declaration = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ENVIRON_DECL 1
+_ACEOF
+
+ fi
+
+
+ if test $gt_cv_var_environ_declaration != yes; then
+ HAVE_DECL_ENVIRON=0
+ fi
+
+
+
+ GNULIB_ENVIRON=1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking for error_at_line" >&5
+$as_echo_n "checking for error_at_line... " >&6; }
+if test "${ac_cv_lib_error_at_line+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <error.h>
+int
+main ()
+{
+error_at_line (0, 0, "", 0, "an error occurred");
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ ac_cv_lib_error_at_line=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_lib_error_at_line=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_error_at_line" >&5
+$as_echo "$ac_cv_lib_error_at_line" >&6; }
+if test $ac_cv_lib_error_at_line = no; then
+
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS error.$ac_objext"
+
+fi
+
+
+
+ :
+
+
+
+
+ XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error:3:c-format"
+
+
+
+ XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error_at_line:5:c-format"
+
+
+
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS exitfail.$ac_objext"
+
+
+ :
+
+
+
+ if test -n "$GETOPT_H"; then
+
+
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS getopt.$ac_objext"
+
+
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS getopt1.$ac_objext"
+
+
+ GETOPT_H=getopt.h
+
+cat >>confdefs.h <<\_ACEOF
+#define __GETOPT_PREFIX rpl_
+_ACEOF
+
+
+
+
+
+ :
+
+
+
+
+
+
+
+fi
+
+
+
+
+
+
+
+
+
+ :
+
+
+
+
+
+
+ { $as_echo "$as_me:$LINENO: checking for gettimeofday with POSIX signature" >&5
+$as_echo_n "checking for gettimeofday with POSIX signature... " >&6; }
+if test "${gl_cv_func_gettimeofday_posix_signature+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/time.h>
+ struct timeval c;
+
+int
+main ()
+{
+
+ int (*f) (struct timeval *restrict, void *restrict) = gettimeofday;
+ int x = f (&c, 0);
+ return !(x | c.tv_sec | c.tv_usec);
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ gl_cv_func_gettimeofday_posix_signature=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gl_cv_func_gettimeofday_posix_signature=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_gettimeofday_posix_signature" >&5
+$as_echo "$gl_cv_func_gettimeofday_posix_signature" >&6; }
+
+
+
+
+ { $as_echo "$as_me:$LINENO: checking whether gettimeofday clobbers localtime buffer" >&5
+$as_echo_n "checking whether gettimeofday clobbers localtime buffer... " >&6; }
+if test "${gl_cv_func_gettimeofday_clobber+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then
+ gl_cv_func_gettimeofday_clobber=yes
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <string.h>
+ #include <sys/time.h>
+ #include <time.h>
+ #include <stdlib.h>
+
+int
+main ()
+{
+
+ time_t t = 0;
+ struct tm *lt;
+ struct tm saved_lt;
+ struct timeval tv;
+ lt = localtime (&t);
+ saved_lt = *lt;
+ gettimeofday (&tv, NULL);
+ return memcmp (lt, &saved_lt, sizeof (struct tm)) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ gl_cv_func_gettimeofday_clobber=no
+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
+
+( exit $ac_status )
+gl_cv_func_gettimeofday_clobber=yes
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_gettimeofday_clobber" >&5
+$as_echo "$gl_cv_func_gettimeofday_clobber" >&6; }
+
+ if test $gl_cv_func_gettimeofday_clobber = yes; then
+ REPLACE_GETTIMEOFDAY=1
+ SYS_TIME_H=sys/time.h
+
+
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS gettimeofday.$ac_objext"
+
+
+
+for ac_header in sys/timeb.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_header_compiler=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ ac_header_preproc=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$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:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ ( cat <<\_ASBOX
+## ---------------------------------- ##
+## Report this to bug-texinfo@gnu.org ##
+## ---------------------------------- ##
+_ASBOX
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+as_val=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_func in _ftime
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* 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 $ac_func ();
+/* 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_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ eval "$as_ac_var=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+cat >>confdefs.h <<\_ACEOF
+#define gmtime rpl_gmtime
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define localtime rpl_localtime
+_ACEOF
+
+
+
+cat >>confdefs.h <<\_ACEOF
+#define GETTIMEOFDAY_CLOBBERS_LOCALTIME 1
+_ACEOF
+
+ fi
+
+
+ if test $gl_cv_func_gettimeofday_posix_signature != yes; then
+ REPLACE_GETTIMEOFDAY=1
+ SYS_TIME_H=sys/time.h
+ if test $gl_cv_func_gettimeofday_clobber != yes; then
+
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS gettimeofday.$ac_objext"
+
+
+
+for ac_header in sys/timeb.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_header_compiler=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ ac_header_preproc=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$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:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ ( cat <<\_ASBOX
+## ---------------------------------- ##
+## Report this to bug-texinfo@gnu.org ##
+## ---------------------------------- ##
+_ASBOX
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+as_val=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_func in _ftime
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* 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 $ac_func ();
+/* 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_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ eval "$as_ac_var=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+ fi
+ fi
+
+
+
+ { $as_echo "$as_me:$LINENO: checking whether the compiler generally respects inline" >&5
+$as_echo_n "checking whether the compiler generally respects inline... " >&6; }
+if test "${gl_cv_c_inline_effective+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test $ac_cv_c_inline = no; then
+ gl_cv_c_inline_effective=no
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifdef __NO_INLINE__
+ #error "inline is not effective"
+ #endif
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ gl_cv_c_inline_effective=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gl_cv_c_inline_effective=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_c_inline_effective" >&5
+$as_echo "$gl_cv_c_inline_effective" >&6; }
+ if test $gl_cv_c_inline_effective = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_INLINE 1
+_ACEOF
+
+ fi
+
+
+
+
+ :
+
+
+
+
+
+
+
+
+
+ LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(top_builddir)/$gl_source_base\""
+
+
+
+ if test $gl_cv_func_malloc_posix = yes; then
+ HAVE_MALLOC_POSIX=1
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MALLOC_POSIX 1
+_ACEOF
+
+ else
+
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS malloc.$ac_objext"
+
+ HAVE_MALLOC_POSIX=0
+ fi
+
+
+
+
+ GNULIB_MALLOC_POSIX=1
+
+
+
+
+
+
+
+
+
+
+
+ :
+
+
+
+
+ :
+
+
+
+
+ GNULIB_MBSCASECMP=1
+
+
+
+
+ :
+
+
+
+
+ GNULIB_MBSCHR=1
+
+
+
+
+ :
+
+
+
+
+ GNULIB_MBSLEN=1
+
+
+
+
+ :
+
+
+
+
+ GNULIB_MBSNCASECMP=1
+
+
+
+
+ :
+
+
+
+
+ GNULIB_MBSSTR=1
+
+
+
+ :
+
+
+
+
+
+
+ :
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:$LINENO: checking whether mbrtowc and mbstate_t are properly declared" >&5
+$as_echo_n "checking whether mbrtowc and mbstate_t are properly declared... " >&6; }
+if test "${gl_cv_func_mbrtowc+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <wchar.h>
+int
+main ()
+{
+wchar_t wc;
+ char const s[] = "";
+ size_t n = 1;
+ mbstate_t state;
+ return ! (sizeof state && (mbrtowc) (&wc, s, n, &state));
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ gl_cv_func_mbrtowc=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gl_cv_func_mbrtowc=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_mbrtowc" >&5
+$as_echo "$gl_cv_func_mbrtowc" >&6; }
+ if test $gl_cv_func_mbrtowc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MBRTOWC 1
+_ACEOF
+
+ fi
+
+
+ { $as_echo "$as_me:$LINENO: checking whether mbswidth is declared in <wchar.h>" >&5
+$as_echo_n "checking whether mbswidth is declared in <wchar.h>... " >&6; }
+if test "${ac_cv_have_decl_mbswidth+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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>
+
+int
+main ()
+{
+
+ char *p = (char *) mbswidth;
+ return !p;
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_mbswidth=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_mbswidth=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_mbswidth" >&5
+$as_echo "$ac_cv_have_decl_mbswidth" >&6; }
+ if test $ac_cv_have_decl_mbswidth = yes; then
+ ac_val=1
+ else
+ ac_val=0
+ fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MBSWIDTH_IN_WCHAR_H $ac_val
+_ACEOF
+
+
+ { $as_echo "$as_me:$LINENO: checking for mbstate_t" >&5
+$as_echo_n "checking for mbstate_t... " >&6; }
+if test "${ac_cv_type_mbstate_t+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+# include <wchar.h>
+int
+main ()
+{
+mbstate_t x; return sizeof x;
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_type_mbstate_t=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_type_mbstate_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_mbstate_t" >&5
+$as_echo "$ac_cv_type_mbstate_t" >&6; }
+ if test $ac_cv_type_mbstate_t = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MBSTATE_T 1
+_ACEOF
+
+ else
+
+cat >>confdefs.h <<\_ACEOF
+#define mbstate_t int
+_ACEOF
+
+ fi
+
+
+
+
+ :
+
+
+
+
+
+
+
+
+
+
+
+for ac_func in memchr
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* 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 $ac_func ();
+/* 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_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ eval "$as_ac_var=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+
+ gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext"
+
+fi
+done
+
+
+ if test $ac_cv_func_memchr = no; then
+
+
+for ac_header in bp-sym.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_header_compiler=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ ac_header_preproc=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$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:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ ( cat <<\_ASBOX
+## ---------------------------------- ##
+## Report this to bug-texinfo@gnu.org ##
+## ---------------------------------- ##
+_ASBOX
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+as_val=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+ fi
+
+
+ if test $cross_compiling != no; then
+ # AC_FUNC_MEMCMP as of 2.62 defaults to 'no' when cross compiling.
+ # We default to yes if memcmp appears to exist, which works
+ # better for MinGW.
+ { $as_echo "$as_me:$LINENO: checking whether cross-compiling target has memcmp" >&5
+$as_echo_n "checking whether cross-compiling target has memcmp... " >&6; }
+if test "${ac_cv_func_memcmp_working+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+
+ /* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <string.h>
+
+int
+main ()
+{
+int ret = memcmp ("foo", "bar", 0);
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ ac_cv_func_memcmp_working=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_func_memcmp_working=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_memcmp_working" >&5
+$as_echo "$ac_cv_func_memcmp_working" >&6; }
+ fi
+ { $as_echo "$as_me:$LINENO: checking for working memcmp" >&5
+$as_echo_n "checking for working memcmp... " >&6; }
+if test "${ac_cv_func_memcmp_working+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then
+ ac_cv_func_memcmp_working=no
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+
+ /* Some versions of memcmp are not 8-bit clean. */
+ char c0 = '\100', c1 = '\200', c2 = '\201';
+ if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0)
+ return 1;
+
+ /* The Next x86 OpenStep bug shows up only when comparing 16 bytes
+ or more and with at least one buffer not starting on a 4-byte boundary.
+ William Lewis provided this test program. */
+ {
+ char foo[21];
+ char bar[21];
+ int i;
+ for (i = 0; i < 4; i++)
+ {
+ char *a = foo + i;
+ char *b = bar + i;
+ strcpy (a, "--------01111111");
+ strcpy (b, "--------10000000");
+ if (memcmp (a, b, 16) >= 0)
+ return 1;
+ }
+ return 0;
+ }
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_memcmp_working=yes
+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
+
+( exit $ac_status )
+ac_cv_func_memcmp_working=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_memcmp_working" >&5
+$as_echo "$ac_cv_func_memcmp_working" >&6; }
+test $ac_cv_func_memcmp_working = no &&
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS memcmp.$ac_objext"
+
+
+ if test $ac_cv_func_memcmp_working = no; then
+
+cat >>confdefs.h <<\_ACEOF
+#define memcmp rpl_memcmp
+_ACEOF
+
+ :
+ fi
+
+
+
+
+
+
+
+
+
+
+
+for ac_func in memcpy
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* 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 $ac_func ();
+/* 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_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ eval "$as_ac_var=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+
+ gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext"
+
+fi
+done
+
+
+ if test $ac_cv_func_memcpy = no; then
+
+ :
+
+ fi
+
+
+
+ if test $ac_cv_have_decl_memmem = yes; then
+ { $as_echo "$as_me:$LINENO: checking whether memmem works in linear time" >&5
+$as_echo_n "checking whether memmem works in linear time... " >&6; }
+if test "${gl_cv_func_memmem_works+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 9) || (__GLIBC__ > 2)
+ Lucky user
+ #endif
+#endif
+#ifdef __CYGWIN__
+ #include <cygwin/version.h>
+ #if CYGWIN_VERSION_DLL_MAJOR >= 1007
+ Lucky user
+ #endif
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "Lucky user" >/dev/null 2>&1; then
+ gl_cv_func_memmem_works=yes
+else
+ gl_cv_func_memmem_works="guessing no"
+fi
+rm -f conftest*
+
+
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <signal.h> /* for signal */
+#include <string.h> /* for memmem */
+#include <stdlib.h> /* for malloc */
+#include <unistd.h> /* for alarm */
+
+int
+main ()
+{
+size_t m = 1000000;
+ char *haystack = (char *) malloc (2 * m + 1);
+ char *needle = (char *) malloc (m + 1);
+ void *result = 0;
+ /* Failure to compile this test due to missing alarm is okay,
+ since all such platforms (mingw) also lack memmem. */
+ signal (SIGALRM, SIG_DFL);
+ alarm (5);
+ /* Check for quadratic performance. */
+ if (haystack && needle)
+ {
+ memset (haystack, 'A', 2 * m);
+ haystack[2 * m] = 'B';
+ memset (needle, 'A', m);
+ needle[m] = 'B';
+ result = memmem (haystack, 2 * m + 1, needle, m + 1);
+ }
+ /* Check for empty needle behavior. */
+ return !result || !memmem ("a", 1, 0, 0);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ gl_cv_func_memmem_works=yes
+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
+
+( exit $ac_status )
+gl_cv_func_memmem_works=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_memmem_works" >&5
+$as_echo "$gl_cv_func_memmem_works" >&6; }
+ if test "$gl_cv_func_memmem_works" != yes; then
+ REPLACE_MEMMEM=1
+
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS memmem.$ac_objext"
+
+ fi
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_func in memmem
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* 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 $ac_func ();
+/* 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_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ eval "$as_ac_var=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+
+ gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext"
+
+fi
+done
+
+
+
+ :
+
+
+
+
+
+ if test $ac_cv_have_decl_memmem = no; then
+ HAVE_DECL_MEMMEM=0
+ fi
+ :
+
+
+
+ GNULIB_MEMMEM=1
+
+
+
+
+
+
+
+
+
+
+
+for ac_func in memmove
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* 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 $ac_func ();
+/* 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_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ eval "$as_ac_var=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+
+ gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext"
+
+fi
+done
+
+
+ if test $ac_cv_func_memmove = no; then
+
+ :
+
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_func in mempcpy
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* 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 $ac_func ();
+/* 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_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ eval "$as_ac_var=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+
+ gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext"
+
+fi
+done
+
+
+ if test $ac_cv_func_mempcpy = no; then
+ HAVE_MEMPCPY=0
+
+ :
+
+ fi
+
+
+
+ GNULIB_MEMPCPY=1
+
+
+
+
+
+ { $as_echo "$as_me:$LINENO: checking for working mkstemp" >&5
+$as_echo_n "checking for working mkstemp... " >&6; }
+if test "${gl_cv_func_working_mkstemp+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+
+ mkdir conftest.mkstemp
+ if test "$cross_compiling" = yes; then
+ gl_cv_func_working_mkstemp=no
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+int i;
+ off_t large = (off_t) 4294967295u;
+ if (large < 0)
+ large = 2147483647;
+ for (i = 0; i < 70; i++)
+ {
+ char templ[] = "conftest.mkstemp/coXXXXXX";
+ int (*mkstemp_function) (char *) = mkstemp;
+ int fd = mkstemp_function (templ);
+ if (fd < 0 || lseek (fd, large, SEEK_SET) != large)
+ return 1;
+ close (fd);
+ }
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ gl_cv_func_working_mkstemp=yes
+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
+
+( exit $ac_status )
+gl_cv_func_working_mkstemp=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+ rm -rf conftest.mkstemp
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_working_mkstemp" >&5
+$as_echo "$gl_cv_func_working_mkstemp" >&6; }
+
+ if test $gl_cv_func_working_mkstemp != yes; then
+ REPLACE_MKSTEMP=1
+
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS mkstemp.$ac_objext"
+
+
+
+ fi
+
+
+
+ GNULIB_MKSTEMP=1
+
+
+
+
+ :
+
+
+
+
+
+ if test $ac_cv_func_setenv = no; then
+ HAVE_SETENV=0
+
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS setenv.$ac_objext"
+
+
+
+
+
+ :
+
+
+
+
+
+
+for ac_header in search.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_header_compiler=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ ac_header_preproc=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$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:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ ( cat <<\_ASBOX
+## ---------------------------------- ##
+## Report this to bug-texinfo@gnu.org ##
+## ---------------------------------- ##
+_ASBOX
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+as_val=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_func in tsearch
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* 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 $ac_func ();
+/* 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_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ eval "$as_ac_var=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+ fi
+
+
+
+ GNULIB_SETENV=1
+
+
+
+
+ # 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 "$ac_cv_type__Bool" = yes; then
+ HAVE__BOOL=1
+ else
+ HAVE__BOOL=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_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:$LINENO: checking absolute name of <stdint.h>" >&5
+$as_echo_n "checking absolute name of <stdint.h>... " >&6; }
+if test "${gl_cv_next_stdint_h+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+
+ if test $ac_cv_header_stdint_h = yes; then
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdint.h>
+
+_ACEOF
+ gl_cv_next_stdint_h='"'`(eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ sed -n '\#/stdint.h#{
+ s#.*"\(.*/stdint.h\)".*#\1#
+ s#^/[^/]#//&#
+ p
+ q
+ }'`'"'
+ else
+ gl_cv_next_stdint_h='<'stdint.h'>'
+ fi
+
+fi
+{ $as_echo "$as_me:$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 $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:$LINENO: checking whether stdint.h conforms to C99" >&5
+$as_echo_n "checking whether stdint.h conforms to C99... " >&6; }
+if test "${gl_cv_header_working_stdint_h+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ gl_cv_header_working_stdint_h=no
+ cat >conftest.$ac_ext <<_ACEOF
+
+ /* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */
+#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */
+#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 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))
+#define TYPE_MAXIMUM(t) \
+ ((t) ((t) 0 < (t) -1 ? (t) -1 : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 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
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ gl_cv_header_working_stdint_h=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$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`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_header_compiler=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ ac_header_preproc=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$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:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ ( cat <<\_ASBOX
+## ---------------------------------- ##
+## Report this to bug-texinfo@gnu.org ##
+## ---------------------------------- ##
+_ASBOX
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+as_val=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = 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
+
+
+
+ :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ for gltype in ptrdiff_t sig_atomic_t size_t wchar_t wint_t ; do
+ { $as_echo "$as_me:$LINENO: checking for bit size of $gltype" >&5
+$as_echo_n "checking for bit size of $gltype... " >&6; }
+if { as_var=gl_cv_bitsizeof_${gltype}; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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
+
+#include <limits.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((sizeof ($gltype) * CHAR_BIT) >= 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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
+
+#include <limits.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((sizeof ($gltype) * CHAR_BIT) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_hi=$ac_mid; break
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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
+
+#include <limits.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((sizeof ($gltype) * CHAR_BIT) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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
+
+#include <limits.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((sizeof ($gltype) * CHAR_BIT) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_lo=$ac_mid; break
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ 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
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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
+
+#include <limits.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((sizeof ($gltype) * CHAR_BIT) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_hi=$ac_mid
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) result=$ac_lo;;
+'') result=unknown ;;
+esac
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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
+
+#include <limits.h>
+static long int longval () { return sizeof ($gltype) * CHAR_BIT; }
+static unsigned long int ulongval () { return sizeof ($gltype) * CHAR_BIT; }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ return 1;
+ if ((sizeof ($gltype) * CHAR_BIT) < 0)
+ {
+ long int i = longval ();
+ if (i != (sizeof ($gltype) * CHAR_BIT))
+ return 1;
+ fprintf (f, "%ld", i);
+ }
+ else
+ {
+ unsigned long int i = ulongval ();
+ if (i != (sizeof ($gltype) * CHAR_BIT))
+ 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
+rm -f 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ result=`cat conftest.val`
+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
+
+( exit $ac_status )
+result=unknown
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.val
+ eval gl_cv_bitsizeof_${gltype}=\$result
+
+fi
+ac_res=`eval 'as_val=${'gl_cv_bitsizeof_${gltype}'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$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:$LINENO: checking whether $gltype is signed" >&5
+$as_echo_n "checking whether $gltype is signed... " >&6; }
+if { as_var=gl_cv_type_${gltype}_signed; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ result=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ result=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ eval gl_cv_type_${gltype}_signed=\$result
+
+fi
+ac_res=`eval 'as_val=${'gl_cv_type_${gltype}_signed'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$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
+
+
+
+
+
+
+
+ for gltype in ptrdiff_t sig_atomic_t size_t wchar_t wint_t ; do
+ { $as_echo "$as_me:$LINENO: checking for $gltype integer literal suffix" >&5
+$as_echo_n "checking for $gltype integer literal suffix... " >&6; }
+if { as_var=gl_cv_type_${gltype}_suffix; eval "test \"\${$as_var+set}\" = set"; }; 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 >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ eval gl_cv_type_${gltype}_suffix=\$glsuf
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+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
+ac_res=`eval 'as_val=${'gl_cv_type_${gltype}_suffix'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$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
+
+
+
+ STDINT_H=stdint.h
+ fi
+
+
+
+
+
+
+
+ :
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_stdlib_h='<'stdlib.h'>'
+ else
+ { $as_echo "$as_me:$LINENO: checking absolute name of <stdlib.h>" >&5
+$as_echo_n "checking absolute name of <stdlib.h>... " >&6; }
+if test "${gl_cv_next_stdlib_h+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+
+ if test $ac_cv_header_stdlib_h = yes; then
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+
+_ACEOF
+ gl_cv_next_stdlib_h='"'`(eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ sed -n '\#/stdlib.h#{
+ s#.*"\(.*/stdlib.h\)".*#\1#
+ s#^/[^/]#//&#
+ p
+ q
+ }'`'"'
+ else
+ gl_cv_next_stdlib_h='<'stdlib.h'>'
+ fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_stdlib_h" >&5
+$as_echo "$gl_cv_next_stdlib_h" >&6; }
+ fi
+ NEXT_STDLIB_H=$gl_cv_next_stdlib_h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_func in stpcpy
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* 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 $ac_func ();
+/* 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_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ eval "$as_ac_var=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+
+ gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext"
+
+fi
+done
+
+
+ if test $ac_cv_func_stpcpy = no; then
+ HAVE_STPCPY=0
+
+ :
+
+ fi
+
+
+
+ GNULIB_STPCPY=1
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_func in strdup
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* 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 $ac_func ();
+/* 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_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ eval "$as_ac_var=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+
+ gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext"
+
+fi
+done
+
+
+
+ :
+
+
+
+
+
+ if test $ac_cv_have_decl_strdup = no; then
+ HAVE_DECL_STRDUP=0
+ fi
+ :
+
+
+
+ GNULIB_STRDUP=1
+
+
+
+ if test $gl_cv_func_working_strerror = no; then
+
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS strerror.$ac_objext"
+
+
+cat >>confdefs.h <<_ACEOF
+#define REPLACE_STRERROR $REPLACE_STRERROR
+_ACEOF
+
+ fi
+
+
+
+ GNULIB_STRERROR=1
+
+
+
+
+
+
+
+
+
+ :
+
+
+
+
+
+ if test $ac_cv_have_decl_strndup = no; then
+ HAVE_DECL_STRNDUP=0
+ fi
+
+ # AIX 4.3.3, AIX 5.1 have a function that fails to add the terminating '\0'.
+ { $as_echo "$as_me:$LINENO: checking for working strndup" >&5
+$as_echo_n "checking for working strndup... " >&6; }
+if test "${gl_cv_func_strndup+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then
+ { $as_echo "$as_me:$LINENO: checking for strndup" >&5
+$as_echo_n "checking for strndup... " >&6; }
+if test "${ac_cv_func_strndup+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define strndup to an innocuous variant, in case <limits.h> declares strndup.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define strndup innocuous_strndup
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char strndup (); 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 strndup
+
+/* 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 strndup ();
+/* 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_strndup || defined __stub___strndup
+choke me
+#endif
+
+int
+main ()
+{
+return strndup ();
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ ac_cv_func_strndup=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_func_strndup=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_strndup" >&5
+$as_echo "$ac_cv_func_strndup" >&6; }
+if test "x$ac_cv_func_strndup" = x""yes; then
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#ifdef _AIX
+ too risky
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "too risky" >/dev/null 2>&1; then
+ gl_cv_func_strndup=no
+else
+ gl_cv_func_strndup=yes
+fi
+rm -f conftest*
+
+else
+ gl_cv_func_strndup=no
+fi
+
+else
+ cat >conftest.$ac_ext <<_ACEOF
+
+ /* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <string.h>
+ #include <stdlib.h>
+int
+main ()
+{
+
+#ifndef HAVE_DECL_STRNDUP
+ extern char *strndup (const char *, size_t);
+#endif
+ char *s;
+ s = strndup ("some longer string", 15);
+ free (s);
+ s = strndup ("shorter string", 13);
+ return s[13] != '\0';
+ ;
+ return 0;
+}
+_ACEOF
+rm -f 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ gl_cv_func_strndup=yes
+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
+
+( exit $ac_status )
+gl_cv_func_strndup=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_strndup" >&5
+$as_echo "$gl_cv_func_strndup" >&6; }
+ if test $gl_cv_func_strndup = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_STRNDUP 1
+_ACEOF
+
+ else
+ HAVE_STRNDUP=0
+
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS strndup.$ac_objext"
+
+ :
+ fi
+
+
+
+ GNULIB_STRNDUP=1
+
+
+
+
+
+
+ :
+
+
+
+
+
+ if test $ac_cv_have_decl_strnlen = no; then
+ HAVE_DECL_STRNLEN=0
+ fi
+
+ { $as_echo "$as_me:$LINENO: checking for working strnlen" >&5
+$as_echo_n "checking for working strnlen... " >&6; }
+if test "${ac_cv_func_strnlen_working+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then
+ ac_cv_func_strnlen_working=no
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+
+#define S "foobar"
+#define S_LEN (sizeof S - 1)
+
+ /* At least one implementation is buggy: that of AIX 4.3 would
+ give strnlen (S, 1) == 3. */
+
+ int i;
+ for (i = 0; i < S_LEN + 1; ++i)
+ {
+ int expected = i <= S_LEN ? i : S_LEN;
+ if (strnlen (S, i) != expected)
+ return 1;
+ }
+ return 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_strnlen_working=yes
+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
+
+( exit $ac_status )
+ac_cv_func_strnlen_working=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_strnlen_working" >&5
+$as_echo "$ac_cv_func_strnlen_working" >&6; }
+test $ac_cv_func_strnlen_working = no &&
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS strnlen.$ac_objext"
+
+
+ if test $ac_cv_func_strnlen_working = no; then
+ # This is necessary because automake-1.6.1 doesn't understand
+ # that the above use of AC_FUNC_STRNLEN means we may have to use
+ # lib/strnlen.c.
+ #AC_LIBOBJ(strnlen)
+
+cat >>confdefs.h <<\_ACEOF
+#define strnlen rpl_strnlen
+_ACEOF
+
+ :
+ fi
+
+
+
+ GNULIB_STRNLEN=1
+
+
+
+
+
+ :
+
+
+
+
+
+ if test $ac_cv_func_lstat = yes; then
+ HAVE_LSTAT=1
+ else
+ HAVE_LSTAT=0
+ fi
+
+
+
+
+
+
+
+
+
+ :
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_sys_stat_h='<'sys/stat.h'>'
+ else
+ { $as_echo "$as_me:$LINENO: checking absolute name of <sys/stat.h>" >&5
+$as_echo_n "checking absolute name of <sys/stat.h>... " >&6; }
+if test "${gl_cv_next_sys_stat_h+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+
+ if test $ac_cv_header_sys_stat_h = yes; then
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/stat.h>
+
+_ACEOF
+ gl_cv_next_sys_stat_h='"'`(eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ sed -n '\#/sys/stat.h#{
+ s#.*"\(.*/sys/stat.h\)".*#\1#
+ s#^/[^/]#//&#
+ p
+ q
+ }'`'"'
+ else
+ gl_cv_next_sys_stat_h='<'sys/stat.h'>'
+ fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_sys_stat_h" >&5
+$as_echo "$gl_cv_next_sys_stat_h" >&6; }
+ fi
+ NEXT_SYS_STAT_H=$gl_cv_next_sys_stat_h
+
+
+
+ SYS_STAT_H='sys/stat.h'
+
+
+ { $as_echo "$as_me:$LINENO: checking for nlink_t" >&5
+$as_echo_n "checking for nlink_t... " >&6; }
+if test "${ac_cv_type_nlink_t+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_type_nlink_t=no
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+ #include <sys/stat.h>
+
+int
+main ()
+{
+if (sizeof (nlink_t))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+ #include <sys/stat.h>
+
+int
+main ()
+{
+if (sizeof ((nlink_t)))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ :
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_type_nlink_t=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_nlink_t" >&5
+$as_echo "$ac_cv_type_nlink_t" >&6; }
+if test "x$ac_cv_type_nlink_t" = x""yes; then
+ :
+else
+
+cat >>confdefs.h <<\_ACEOF
+#define nlink_t int
+_ACEOF
+
+fi
+
+
+
+ { $as_echo "$as_me:$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 test "${ac_cv_path_mkdir+set}" = set; 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
+ { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$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
+
+ 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.
+ test -d ./--version && rmdir ./--version
+ MKDIR_P="$ac_install_sh -d"
+ fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+
+
+
+ { $as_echo "$as_me:$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 test "${ac_cv_path_mkdir+set}" = set; 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
+ { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$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
+
+ 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.
+ test -d ./--version && rmdir ./--version
+ MKDIR_P="$ac_install_sh -d"
+ fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+
+
+
+
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS tempname.$ac_objext"
+
+
+ :
+
+
+
+
+
+
+
+
+ :
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_unistd_h='<'unistd.h'>'
+ else
+ { $as_echo "$as_me:$LINENO: checking absolute name of <unistd.h>" >&5
+$as_echo_n "checking absolute name of <unistd.h>... " >&6; }
+if test "${gl_cv_next_unistd_h+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+
+ if test $ac_cv_header_unistd_h = yes; then
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <unistd.h>
+
+_ACEOF
+ gl_cv_next_unistd_h='"'`(eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ sed -n '\#/unistd.h#{
+ s#.*"\(.*/unistd.h\)".*#\1#
+ s#^/[^/]#//&#
+ p
+ q
+ }'`'"'
+ else
+ gl_cv_next_unistd_h='<'unistd.h'>'
+ fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_unistd_h" >&5
+$as_echo "$gl_cv_next_unistd_h" >&6; }
+ fi
+ NEXT_UNISTD_H=$gl_cv_next_unistd_h
+
+
+
+
+
+ :
+
+
+
+
+
+ if test $ac_cv_header_unistd_h = yes; then
+ HAVE_UNISTD_H=1
+ else
+ HAVE_UNISTD_H=0
+ fi
+
+
+
+
+
+for ac_func in unsetenv
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* 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 $ac_func ();
+/* 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_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ eval "$as_ac_var=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+ if test $ac_cv_func_unsetenv = no; then
+ HAVE_UNSETENV=0
+
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS unsetenv.$ac_objext"
+
+
+
+
+ :
+
+
+
+
+
+
+ else
+ { $as_echo "$as_me:$LINENO: checking for unsetenv() return type" >&5
+$as_echo_n "checking for unsetenv() return type... " >&6; }
+if test "${gt_cv_func_unsetenv_ret+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+int unsetenv (const char *name);
+#else
+int unsetenv();
+#endif
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ gt_cv_func_unsetenv_ret='int'
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gt_cv_func_unsetenv_ret='void'
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $gt_cv_func_unsetenv_ret" >&5
+$as_echo "$gt_cv_func_unsetenv_ret" >&6; }
+ if test $gt_cv_func_unsetenv_ret = 'void'; then
+ VOID_UNSETENV=1
+ fi
+ fi
+
+
+
+ GNULIB_UNSETENV=1
+
+
+
+ { $as_echo "$as_me:$LINENO: checking whether <wchar.h> is standalone" >&5
+$as_echo_n "checking whether <wchar.h> is standalone... " >&6; }
+if test "${gl_cv_header_wchar_h_standalone+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#include <wchar.h>
+wchar_t w;
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ gl_cv_header_wchar_h_standalone=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gl_cv_header_wchar_h_standalone=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_header_wchar_h_standalone" >&5
+$as_echo "$gl_cv_header_wchar_h_standalone" >&6; }
+ if test $gl_cv_header_wchar_h_standalone != yes; then
+ WCHAR_H=wchar.h
+ fi
+
+
+ :
+
+
+
+
+
+ if test $ac_cv_header_wchar_h = yes; then
+ HAVE_WCHAR_H=1
+ else
+ HAVE_WCHAR_H=0
+ fi
+
+
+
+
+ :
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_wchar_h='<'wchar.h'>'
+ else
+ { $as_echo "$as_me:$LINENO: checking absolute name of <wchar.h>" >&5
+$as_echo_n "checking absolute name of <wchar.h>... " >&6; }
+if test "${gl_cv_next_wchar_h+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+
+ if test $ac_cv_header_wchar_h = yes; then
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <wchar.h>
+
+_ACEOF
+ gl_cv_next_wchar_h='"'`(eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ sed -n '\#/wchar.h#{
+ s#.*"\(.*/wchar.h\)".*#\1#
+ s#^/[^/]#//&#
+ p
+ q
+ }'`'"'
+ else
+ gl_cv_next_wchar_h='<'wchar.h'>'
+ fi
+
+fi
+{ $as_echo "$as_me:$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 $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
+
+
+ WCTYPE_H=wctype.h
+ if test $ac_cv_header_wctype_h = yes; then
+ if test $ac_cv_func_iswcntrl = yes; then
+ { $as_echo "$as_me:$LINENO: checking whether iswcntrl works" >&5
+$as_echo_n "checking whether iswcntrl works... " >&6; }
+if test "${gl_cv_func_iswcntrl_works+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+
+ if test "$cross_compiling" = yes; then
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+ #if __GNU_LIBRARY__ == 1
+ Linux libc5 i18n is broken.
+ #endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ gl_cv_func_iswcntrl_works=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gl_cv_func_iswcntrl_works=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stddef.h>
+ #include <stdio.h>
+ #include <time.h>
+ #include <wchar.h>
+ #include <wctype.h>
+ int main () { return iswprint ('x') == 0; }
+_ACEOF
+rm -f 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ gl_cv_func_iswcntrl_works=yes
+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
+
+( exit $ac_status )
+gl_cv_func_iswcntrl_works=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_iswcntrl_works" >&5
+$as_echo "$gl_cv_func_iswcntrl_works" >&6; }
+ if test $gl_cv_func_iswcntrl_works = yes; then
+ WCTYPE_H=
+ fi
+ fi
+
+
+
+ :
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_wctype_h='<'wctype.h'>'
+ else
+ { $as_echo "$as_me:$LINENO: checking absolute name of <wctype.h>" >&5
+$as_echo_n "checking absolute name of <wctype.h>... " >&6; }
+if test "${gl_cv_next_wctype_h+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+
+ if test $ac_cv_header_wctype_h = yes; then
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <wctype.h>
+
+_ACEOF
+ gl_cv_next_wctype_h='"'`(eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ sed -n '\#/wctype.h#{
+ s#.*"\(.*/wctype.h\)".*#\1#
+ s#^/[^/]#//&#
+ p
+ q
+ }'`'"'
+ else
+ gl_cv_next_wctype_h='<'wctype.h'>'
+ fi
+
+fi
+{ $as_echo "$as_me:$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
+
+
+
+ HAVE_WCTYPE_H=1
+ else
+ HAVE_WCTYPE_H=0
+ fi
+
+
+
+ if test "$gl_cv_func_iswcntrl_works" = no; then
+ REPLACE_ISWCNTRL=1
+ else
+ REPLACE_ISWCNTRL=0
+ fi
+
+
+
+
+
+
+
+
+
+
+
+ :
+
+
+
+
+
+
+ :
+
+
+
+
+
+
+ { $as_echo "$as_me:$LINENO: checking whether wcwidth is declared" >&5
+$as_echo_n "checking whether wcwidth is declared... " >&6; }
+if test "${ac_cv_have_decl_wcwidth+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.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>
+
+
+int
+main ()
+{
+#ifndef wcwidth
+ (void) wcwidth;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_wcwidth=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_wcwidth=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_wcwidth" >&5
+$as_echo "$ac_cv_have_decl_wcwidth" >&6; }
+if test "x$ac_cv_have_decl_wcwidth" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_WCWIDTH 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_WCWIDTH 0
+_ACEOF
+
+
+fi
+
+
+ if test $ac_cv_have_decl_wcwidth != yes; then
+ HAVE_DECL_WCWIDTH=0
+ fi
+
+ if test $ac_cv_func_wcwidth = no; then
+ REPLACE_WCWIDTH=1
+ else
+ { $as_echo "$as_me:$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 test "${gl_cv_func_wcwidth_works+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+
+ if test "$cross_compiling" = yes; then
+ gl_cv_func_wcwidth_works="guessing no"
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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 ()
+{
+ if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL)
+ if (wcwidth (0x0301) > 0 || wcwidth (0x200B) > 0)
+ return 1;
+ return 0;
+}
+_ACEOF
+rm -f 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ gl_cv_func_wcwidth_works=yes
+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
+
+( exit $ac_status )
+gl_cv_func_wcwidth_works=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+
+fi
+{ $as_echo "$as_me:$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
+ fi
+ if test $REPLACE_WCWIDTH = 1; then
+
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS wcwidth.$ac_objext"
+
+ fi
+
+ if test $REPLACE_WCWIDTH = 1 || test $HAVE_DECL_WCWIDTH = 0; then
+ WCHAR_H=wchar.h
+ fi
+
+
+
+ GNULIB_WCWIDTH=1
+
+
+
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS xmalloc.$ac_objext"
+
+
+
+
+ :
+
+
+ :
+
+
+
+
+
+
+
+
+
+
+
+ gltests_libdeps=
+ gltests_ltlibdeps=
+
+
+
+
+
+
+
+
+ gl_source_base='tests'
+
+
+
+
+
+
+
+ LIBGNU_LIBDEPS="$gl_libdeps"
+
+ LIBGNU_LTLIBDEPS="$gl_ltlibdeps"
+
+
+
+
+# Since we make a helper library.
+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:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ $as_echo "$as_me:$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:$LINENO: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+ { $as_echo "$as_me:$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:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ $as_echo "$as_me:$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:$LINENO: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+ { $as_echo "$as_me:$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:$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
+
+
+HELP2MAN=${HELP2MAN-"${am_missing_run}help2man"}
+
+
+# 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:$LINENO: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; 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 { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$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:$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:$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 { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; 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:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+ SET_MAKE=
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+
+# Needed on sysV68 for sigblock, sigsetmask. But check for it in libc first.
+{ $as_echo "$as_me:$LINENO: checking for sigblock" >&5
+$as_echo_n "checking for sigblock... " >&6; }
+if test "${ac_cv_func_sigblock+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define sigblock to an innocuous variant, in case <limits.h> declares sigblock.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define sigblock innocuous_sigblock
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char sigblock (); 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 sigblock
+
+/* 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 sigblock ();
+/* 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_sigblock || defined __stub___sigblock
+choke me
+#endif
+
+int
+main ()
+{
+return sigblock ();
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ ac_cv_func_sigblock=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_func_sigblock=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_sigblock" >&5
+$as_echo "$ac_cv_func_sigblock" >&6; }
+if test "x$ac_cv_func_sigblock" = x""yes; then
+ :
+else
+
+{ $as_echo "$as_me:$LINENO: checking for sigblock in -lbsd" >&5
+$as_echo_n "checking for sigblock in -lbsd... " >&6; }
+if test "${ac_cv_lib_bsd_sigblock+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbsd $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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 sigblock ();
+int
+main ()
+{
+return sigblock ();
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ ac_cv_lib_bsd_sigblock=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_lib_bsd_sigblock=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_sigblock" >&5
+$as_echo "$ac_cv_lib_bsd_sigblock" >&6; }
+if test "x$ac_cv_lib_bsd_sigblock" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBBSD 1
+_ACEOF
+
+ LIBS="-lbsd $LIBS"
+
+fi
+
+fi
+
+
+# Checks for header files.
+{ $as_echo "$as_me:$LINENO: checking whether stat file-mode macros are broken" >&5
+$as_echo_n "checking whether stat file-mode macros are broken... " >&6; }
+if test "${ac_cv_header_stat_broken+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#if defined S_ISBLK && defined S_IFDIR
+extern char c1[S_ISBLK (S_IFDIR) ? -1 : 1];
+#endif
+
+#if defined S_ISBLK && defined S_IFCHR
+extern char c2[S_ISBLK (S_IFCHR) ? -1 : 1];
+#endif
+
+#if defined S_ISLNK && defined S_IFREG
+extern char c3[S_ISLNK (S_IFREG) ? -1 : 1];
+#endif
+
+#if defined S_ISSOCK && defined S_IFREG
+extern char c4[S_ISSOCK (S_IFREG) ? -1 : 1];
+#endif
+
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_header_stat_broken=no
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_header_stat_broken=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stat_broken" >&5
+$as_echo "$ac_cv_header_stat_broken" >&6; }
+if test $ac_cv_header_stat_broken = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STAT_MACROS_BROKEN 1
+_ACEOF
+
+fi
+
+{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_header_stdc=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ 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 >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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 >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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 >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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
+rm -f 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+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
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_header in fcntl.h io.h limits.h pwd.h string.h strings.h \
+ termcap.h termio.h termios.h unistd.h \
+ sys/fcntl.h sys/file.h sys/stream.h sys/time.h sys/ttold.h sys/wait.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_header_compiler=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ ac_header_preproc=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$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:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ ( cat <<\_ASBOX
+## ---------------------------------- ##
+## Report this to bug-texinfo@gnu.org ##
+## ---------------------------------- ##
+_ASBOX
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+as_val=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+# sys/ptem.h requires sys/stream.h for mblk_t on Solaris.
+
+for ac_header in sys/ptem.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#if HAVE_SYS_STREAM_H
+#include <sys/stream.h>
+#endif
+
+
+#include <$ac_header>
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ eval "$as_ac_Header=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+{ $as_echo "$as_me:$LINENO: checking POSIX termios" >&5
+$as_echo_n "checking POSIX termios... " >&6; }
+if test "${ac_cv_sys_posix_termios+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <unistd.h>
+#include <termios.h>
+
+int
+main ()
+{
+/* SunOS 4.0.3 has termios.h but not the library calls. */
+ tcgetattr(0, 0);
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ ac_cv_sys_posix_termios=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_sys_posix_termios=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_sys_posix_termios" >&5
+$as_echo "$ac_cv_sys_posix_termios" >&6; }
+
+{ $as_echo "$as_me:$LINENO: checking whether termios.h defines TIOCGWINSZ" >&5
+$as_echo_n "checking whether termios.h defines TIOCGWINSZ... " >&6; }
+if test "${ac_cv_sys_tiocgwinsz_in_termios_h+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <termios.h>
+#ifdef TIOCGWINSZ
+ yes
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "yes" >/dev/null 2>&1; then
+ ac_cv_sys_tiocgwinsz_in_termios_h=yes
+else
+ ac_cv_sys_tiocgwinsz_in_termios_h=no
+fi
+rm -f conftest*
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_sys_tiocgwinsz_in_termios_h" >&5
+$as_echo "$ac_cv_sys_tiocgwinsz_in_termios_h" >&6; }
+
+if test $ac_cv_sys_tiocgwinsz_in_termios_h != yes; then
+ { $as_echo "$as_me:$LINENO: checking whether sys/ioctl.h defines TIOCGWINSZ" >&5
+$as_echo_n "checking whether sys/ioctl.h defines TIOCGWINSZ... " >&6; }
+if test "${ac_cv_sys_tiocgwinsz_in_sys_ioctl_h+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#ifdef TIOCGWINSZ
+ yes
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "yes" >/dev/null 2>&1; then
+ ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=yes
+else
+ ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=no
+fi
+rm -f conftest*
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&5
+$as_echo "$ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&6; }
+
+ if test $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define GWINSZ_IN_SYS_IOCTL 1
+_ACEOF
+
+ fi
+fi
+
+
+# Checks for typedefs, structures, and compiler characteristics.
+{ $as_echo "$as_me:$LINENO: checking for off_t" >&5
+$as_echo_n "checking for off_t... " >&6; }
+if test "${ac_cv_type_off_t+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_type_off_t=no
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+if (sizeof (off_t))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+if (sizeof ((off_t)))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ :
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_type_off_t=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5
+$as_echo "$ac_cv_type_off_t" >&6; }
+if test "x$ac_cv_type_off_t" = x""yes; then
+ :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define off_t long int
+_ACEOF
+
+fi
+
+{ $as_echo "$as_me:$LINENO: checking return type of signal handlers" >&5
+$as_echo_n "checking return type of signal handlers... " >&6; }
+if test "${ac_cv_type_signal+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <signal.h>
+
+int
+main ()
+{
+return *(signal (0, 0)) (0) == 1;
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_type_signal=int
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_type_signal=void
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5
+$as_echo "$ac_cv_type_signal" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define RETSIGTYPE $ac_cv_type_signal
+_ACEOF
+
+
+{ $as_echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
+$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
+if test "${ac_cv_c_const+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+ /* Ultrix mips cc rejects this. */
+ typedef int charset[2];
+ const charset cs;
+ /* SunOS 4.1.1 cc rejects this. */
+ char const *const *pcpcc;
+ char **ppc;
+ /* NEC SVR4.0.2 mips cc rejects this. */
+ struct point {int x, y;};
+ static struct point const zero = {0,0};
+ /* AIX XL C 1.02.0.0 rejects this.
+ It does not let you subtract one const X* pointer from another in
+ an arm of an if-expression whose if-part is not a constant
+ expression */
+ const char *g = "string";
+ pcpcc = &g + (g ? g-g : 0);
+ /* HPUX 7.0 cc rejects these. */
+ ++pcpcc;
+ ppc = (char**) pcpcc;
+ pcpcc = (char const *const *) ppc;
+ { /* SCO 3.2v4 cc rejects this. */
+ char *t;
+ char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+ *t++ = 0;
+ if (s) return 0;
+ }
+ { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
+ int x[] = {25, 17};
+ const int *foo = &x[0];
+ ++foo;
+ }
+ { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+ typedef const int *iptr;
+ iptr p = 0;
+ ++p;
+ }
+ { /* AIX XL C 1.02.0.0 rejects this saying
+ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+ struct s { int j; const int *ap[3]; };
+ struct s *b; b->j = 5;
+ }
+ { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+ const int foo = 10;
+ if (!foo) return 0;
+ }
+ return !cs[0] && !zero.x;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_c_const=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_c_const=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
+$as_echo "$ac_cv_c_const" >&6; }
+if test $ac_cv_c_const = no; then
+
+cat >>confdefs.h <<\_ACEOF
+#define const /**/
+_ACEOF
+
+fi
+
+{ $as_echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5
+$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; }
+if test "${ac_cv_struct_tm+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <time.h>
+
+int
+main ()
+{
+struct tm tm;
+ int *p = &tm.tm_sec;
+ return !p;
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_struct_tm=time.h
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_struct_tm=sys/time.h
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5
+$as_echo "$ac_cv_struct_tm" >&6; }
+if test $ac_cv_struct_tm = sys/time.h; then
+
+cat >>confdefs.h <<\_ACEOF
+#define TM_IN_SYS_TIME 1
+_ACEOF
+
+fi
+
+
+# Checks for function declarations.
+{ $as_echo "$as_me:$LINENO: checking whether memchr is declared" >&5
+$as_echo_n "checking whether memchr is declared... " >&6; }
+if test "${ac_cv_have_decl_memchr+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+#ifndef memchr
+ (void) memchr;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_memchr=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_memchr=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_memchr" >&5
+$as_echo "$ac_cv_have_decl_memchr" >&6; }
+if test "x$ac_cv_have_decl_memchr" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MEMCHR 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MEMCHR 0
+_ACEOF
+
+
+fi
+{ $as_echo "$as_me:$LINENO: checking whether strcoll is declared" >&5
+$as_echo_n "checking whether strcoll is declared... " >&6; }
+if test "${ac_cv_have_decl_strcoll+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+#ifndef strcoll
+ (void) strcoll;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_strcoll=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_strcoll=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_strcoll" >&5
+$as_echo "$ac_cv_have_decl_strcoll" >&6; }
+if test "x$ac_cv_have_decl_strcoll" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRCOLL 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRCOLL 0
+_ACEOF
+
+
+fi
+{ $as_echo "$as_me:$LINENO: checking whether strerror is declared" >&5
+$as_echo_n "checking whether strerror is declared... " >&6; }
+if test "${ac_cv_have_decl_strerror+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+#ifndef strerror
+ (void) strerror;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_strerror=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_strerror=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_strerror" >&5
+$as_echo "$ac_cv_have_decl_strerror" >&6; }
+if test "x$ac_cv_have_decl_strerror" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRERROR 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRERROR 0
+_ACEOF
+
+
+fi
+
+
+
+# Checks for library functions.
+{ $as_echo "$as_me:$LINENO: checking for working strcoll" >&5
+$as_echo_n "checking for working strcoll... " >&6; }
+if test "${ac_cv_func_strcoll_works+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then
+ ac_cv_func_strcoll_works=no
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+return (strcoll ("abc", "def") >= 0 ||
+ strcoll ("ABC", "DEF") >= 0 ||
+ strcoll ("123", "456") >= 0)
+ ;
+ return 0;
+}
+_ACEOF
+rm -f 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_strcoll_works=yes
+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
+
+( exit $ac_status )
+ac_cv_func_strcoll_works=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_strcoll_works" >&5
+$as_echo "$ac_cv_func_strcoll_works" >&6; }
+if test $ac_cv_func_strcoll_works = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_STRCOLL 1
+_ACEOF
+
+fi
+
+
+for ac_func in vprintf
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* 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 $ac_func ();
+/* 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_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ eval "$as_ac_var=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+{ $as_echo "$as_me:$LINENO: checking for _doprnt" >&5
+$as_echo_n "checking for _doprnt... " >&6; }
+if test "${ac_cv_func__doprnt+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define _doprnt to an innocuous variant, in case <limits.h> declares _doprnt.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define _doprnt innocuous__doprnt
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char _doprnt (); 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 _doprnt
+
+/* 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 _doprnt ();
+/* 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__doprnt || defined __stub____doprnt
+choke me
+#endif
+
+int
+main ()
+{
+return _doprnt ();
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ ac_cv_func__doprnt=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_func__doprnt=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func__doprnt" >&5
+$as_echo "$ac_cv_func__doprnt" >&6; }
+if test "x$ac_cv_func__doprnt" = x""yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_DOPRNT 1
+_ACEOF
+
+fi
+
+fi
+done
+
+
+# in theory only pre-sysvr3 systems needed this and it's not likely
+# that anyone compiling new texinfo still has such a thing? we'll see.
+# AC_FUNC_SETVBUF_REVERSED
+
+
+
+
+
+
+
+
+
+for ac_func in bzero getcwd memset setlocale setvbuf sigaction sigprocmask \
+ sigsetmask strchr
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* 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 $ac_func ();
+/* 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_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ eval "$as_ac_var=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+
+
+for ac_func in memcpy memmove strdup strerror
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* 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 $ac_func ();
+/* 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_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ eval "$as_ac_var=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ case " $LIBOBJS " in
+ *" $ac_func.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext"
+ ;;
+esac
+
+fi
+done
+
+
+
+# We want to recognize djgpp to avoid the useless warning about no
+# term library.
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+ { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
+$as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
+ { (exit 1); exit 1; }; }
+
+{ $as_echo "$as_me:$LINENO: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if test "${ac_cv_build+set}" = set; 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_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+$as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+ { (exit 1); exit 1; }; }
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+ { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
+$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
+$as_echo "$as_me: error: invalid value of canonical build" >&2;}
+ { (exit 1); exit 1; }; };;
+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
+
+
+
+# We need to run some of our own binaries, most notably makedoc, but as
+# long as we have this process, we also use our own makeinfo and
+# install-info.
+#
+# This means that if we are cross compiling, we have to configure the
+# package twice: once with the native compiler (this is done in a
+# subdirectory $native_tools), and once with the cross compiler.
+# The former is invoked automatically here, with --host=$build.
+# $native_tools is also added to SUBDIRS in the main Makefile.am,
+# so that make compiles the native tools first.
+#
+if test "$cross_compiling" = no; then
+ native_tools=
+else
+ native_tools=tools
+ test -d "$native_tools" || mkdir "$native_tools"
+ confdir=`(cd "$srcdir";pwd)`
+ # Make sure the secondary configure won't fail with
+ # "error: source directory already configured".
+ rm -f config.status
+ { $as_echo "$as_me:$LINENO: Doing configure of native tools (${build})." >&5
+$as_echo "$as_me: Doing configure of native tools (${build})." >&6;}
+ cd "$native_tools" || exit 1
+ # Run secondary configure in alternate environment or
+ # it gets the wrong CC etc.
+ # env -i gives this build host configure a clean environment;
+ # consequently, we have to re-initialize $PATH.
+ env -i CC="$BUILD_CC" AR="$BUILD_AR" RANLIB="$BUILD_RANLIB" \
+ PATH="$PATH" \
+ tools_only=1 \
+ ${confdir}/configure --build=${build} --host=${build} \
+ --disable-rpath --disable-nls
+ cd .. || exit 1
+ { $as_echo "$as_me:$LINENO: Continuing with main configure (${host})." >&5
+$as_echo "$as_me: Continuing with main configure (${host})." >&6;}
+fi
+
+ if test "x$tools_only" = x1; then
+ TOOLS_ONLY_TRUE=
+ TOOLS_ONLY_FALSE='#'
+else
+ TOOLS_ONLY_TRUE='#'
+ TOOLS_ONLY_FALSE=
+fi
+
+
+# Some GNU/Linux systems (e.g., SuSE 4.3, 1996) don't have curses, but
+# rather ncurses. So we check for it.
+TERMLIBS=
+# Check for termlib before termcap because Solaris termcap needs libucb.
+TERMLIB_VARIANTS="ncurses curses termlib termcap terminfo"
+for termlib in ${TERMLIB_VARIANTS}; do
+ as_ac_Lib=`$as_echo "ac_cv_lib_${termlib}''_tgetent" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for tgetent in -l${termlib}" >&5
+$as_echo_n "checking for tgetent in -l${termlib}... " >&6; }
+if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-l${termlib} $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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 tgetent ();
+int
+main ()
+{
+return tgetent ();
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ eval "$as_ac_Lib=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_Lib=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+ac_res=`eval 'as_val=${'$as_ac_Lib'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_Lib'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ TERMLIBS="${TERMLIBS} -l${termlib}"; break
+fi
+
+done
+# don't bother warning on djgpp, it doesn't have a term library, it
+# ports each termcap-needing program separately according to its needs.
+if test -z "$TERMLIBS" && echo "$build" | grep -v djgpp >/dev/null; then
+ { $as_echo "$as_me:$LINENO: WARNING: probably need a terminal library, one of: ${TERMLIB_VARIANTS}" >&5
+$as_echo "$as_me: WARNING: probably need a terminal library, one of: ${TERMLIB_VARIANTS}" >&2;}
+fi
+
+# Checks for variables.
+# HP-UX 9 (at least) needs -lncurses which defines termcap variables PC etc.
+{ $as_echo "$as_me:$LINENO: checking for library with termcap variables" >&5
+$as_echo_n "checking for library with termcap variables... " >&6; }
+if test "${ac_cv_var_ospeed+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ oldLIBS=$LIBS
+for trylib in $termlib ${TERMLIB_VARIANTS}; do
+ if test "x$trylib" != "x$termlib"; then
+ LIBS="$oldLIBS -l$termlib -l$trylib"
+ else
+ LIBS="$oldLIBS -l$termlib"
+ fi
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifdef HAVE_NCURSES_TERMCAP_H
+#include <ncurses/termcap.h>
+#else
+#ifdef HAVE_TERMCAP_H
+#include <termcap.h>
+#else
+#undef PC
+char *BC;
+char **UP;
+char PC;
+short ospeed;
+#endif
+#endif
+/* Make sure all variables actually exist. AIX 4.3 has ospeed but no BC.
+ --Andreas Ley <andy@rz.uni-karlsruhe.de> 24 Aug 2000. */
+BC++;
+UP++;
+PC++;
+return ospeed != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ ac_cv_var_ospeed=$trylib; break
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+done
+LIBS=$oldLIBS
+
+fi
+
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_var_ospeed" >&5
+$as_echo "$ac_cv_var_ospeed" >&6; }
+if test -n "$ac_cv_var_ospeed" \
+ && test "x$termlib" != "x$ac_cv_var_ospeed"; then
+ TERMLIBS="${TERMLIBS} -l${ac_cv_var_ospeed}"
+fi
+#
+
+# Do not use <ncurses/termcap.h> unless we're linking with ncurses.
+# Must come after the termlib tests.
+if test "x$termlib" = xncurses; then
+ # Use AC_CHECK_HEADERS so the HAVE_*_H symbol gets defined.
+
+for ac_header in ncurses/termcap.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_header_compiler=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ ac_header_preproc=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$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:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ ( cat <<\_ASBOX
+## ---------------------------------- ##
+## Report this to bug-texinfo@gnu.org ##
+## ---------------------------------- ##
+_ASBOX
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+as_val=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ if test "x$as_val" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+fi
+
+# For teTeX and TeX Live.
+{ $as_echo "$as_me:$LINENO: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if test "${ac_cv_host+set}" = set; 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_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
+$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
+$as_echo "$as_me: error: invalid value of canonical host" >&2;}
+ { (exit 1); exit 1; }; };;
+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
+
+
+# Check whether --enable-multiplatform was given.
+if test "${enable_multiplatform+set}" = set; then
+ enableval=$enable_multiplatform;
+fi
+# if enable_multiplatform is set in the environment, use that.
+if test "x$enable_multiplatform" = xyes; then
+ test "x$bindir" = 'x${exec_prefix}/bin' && bindir="$bindir/$host"
+ test "x$libdir" = 'x${exec_prefix}/lib' && libdir="$libdir/$host"
+fi
+
+# Taken from the example in
+# http://www.gnu.org/software/automake/manual/html_node/Conditionals.html.
+# Check whether --enable-install-warnings was given.
+if test "${enable_install_warnings+set}" = set; then
+ enableval=$enable_install_warnings; case "${enableval}" in
+ yes) install_warnings=true ;;
+ no) install_warnings=false ;;
+ *) { { $as_echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-install-warnings" >&5
+$as_echo "$as_me: error: bad value ${enableval} for --enable-install-warnings" >&2;}
+ { (exit 1); exit 1; }; } ;;
+ esac
+else
+ install_warnings=true
+fi
+
+ if test x"$install_warnings" = xtrue || test x"$install_warnings" = xyes; then
+ INSTALL_WARNINGS_TRUE=
+ INSTALL_WARNINGS_FALSE='#'
+else
+ INSTALL_WARNINGS_TRUE='#'
+ INSTALL_WARNINGS_FALSE=
+fi
+
+
+# i18n support. To update to a new version of gettext, run:
+# gettextize -f -c
+
+
+ { $as_echo "$as_me:$LINENO: checking whether NLS is requested" >&5
+$as_echo_n "checking whether NLS is requested... " >&6; }
+ # Check whether --enable-nls was given.
+if test "${enable_nls+set}" = set; then
+ enableval=$enable_nls; USE_NLS=$enableval
+else
+ USE_NLS=yes
+fi
+
+ { $as_echo "$as_me:$LINENO: result: $USE_NLS" >&5
+$as_echo "$USE_NLS" >&6; }
+
+
+
+
+ GETTEXT_MACRO_VERSION=0.17
+
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_MSGFMT+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ case "$MSGFMT" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&5
+ if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 &&
+ (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
+ ;;
+esac
+fi
+MSGFMT="$ac_cv_path_MSGFMT"
+if test "$MSGFMT" != ":"; then
+ { $as_echo "$as_me:$LINENO: result: $MSGFMT" >&5
+$as_echo "$MSGFMT" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ # Extract the first word of "gmsgfmt", so it can be a program name with args.
+set dummy gmsgfmt; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_GMSGFMT+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ case $GMSGFMT in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_GMSGFMT="$GMSGFMT" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
+ ;;
+esac
+fi
+GMSGFMT=$ac_cv_path_GMSGFMT
+if test -n "$GMSGFMT"; then
+ { $as_echo "$as_me:$LINENO: result: $GMSGFMT" >&5
+$as_echo "$GMSGFMT" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
+ *) MSGFMT_015=$MSGFMT ;;
+ esac
+
+ case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+ *) GMSGFMT_015=$GMSGFMT ;;
+ esac
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "xgettext", so it can be a program name with args.
+set dummy xgettext; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_XGETTEXT+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ case "$XGETTEXT" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&5
+ if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 &&
+ (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
+ ;;
+esac
+fi
+XGETTEXT="$ac_cv_path_XGETTEXT"
+if test "$XGETTEXT" != ":"; then
+ { $as_echo "$as_me:$LINENO: result: $XGETTEXT" >&5
+$as_echo "$XGETTEXT" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ rm -f messages.po
+
+ case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+ *) XGETTEXT_015=$XGETTEXT ;;
+ esac
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgmerge", so it can be a program name with args.
+set dummy msgmerge; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_MSGMERGE+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ case "$MSGMERGE" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&5
+ if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then
+ ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":"
+ ;;
+esac
+fi
+MSGMERGE="$ac_cv_path_MSGMERGE"
+if test "$MSGMERGE" != ":"; then
+ { $as_echo "$as_me:$LINENO: result: $MSGMERGE" >&5
+$as_echo "$MSGMERGE" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$localedir" || localedir='${datadir}/locale'
+
+
+ test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
+
+
+ ac_config_commands="$ac_config_commands po-directories"
+
+
+
+ if test "X$prefix" = "XNONE"; then
+ acl_final_prefix="$ac_default_prefix"
+ else
+ acl_final_prefix="$prefix"
+ fi
+ if test "X$exec_prefix" = "XNONE"; then
+ acl_final_exec_prefix='${prefix}'
+ else
+ acl_final_exec_prefix="$exec_prefix"
+ fi
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+ prefix="$acl_save_prefix"
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+ with_gnu_ld=no
+fi
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ { $as_echo "$as_me:$LINENO: checking for ld used by GCC" >&5
+$as_echo_n "checking for ld used by GCC... " >&6; }
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [\\/]* | [A-Za-z]:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the path of ld
+ ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+ while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+ { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if test "${acl_cv_path_LD+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$LD"; then
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+ for ac_dir in $PATH; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ acl_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some GNU ld's only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break ;;
+ *)
+ test "$with_gnu_ld" != yes && break ;;
+ esac
+ fi
+ done
+ IFS="$ac_save_ifs"
+else
+ acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+ { $as_echo "$as_me:$LINENO: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+$as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+ { (exit 1); exit 1; }; }
+{ $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if test "${acl_cv_prog_gnu_ld+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ acl_cv_prog_gnu_ld=yes ;;
+*)
+ acl_cv_prog_gnu_ld=no ;;
+esac
+fi
+{ $as_echo "$as_me:$LINENO: result: $acl_cv_prog_gnu_ld" >&5
+$as_echo "$acl_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$acl_cv_prog_gnu_ld
+
+
+
+
+ { $as_echo "$as_me:$LINENO: checking for shared library run path origin" >&5
+$as_echo_n "checking for shared library run path origin... " >&6; }
+if test "${acl_cv_rpath+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+
+ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+ . ./conftest.sh
+ rm -f ./conftest.sh
+ acl_cv_rpath=done
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5
+$as_echo "$acl_cv_rpath" >&6; }
+ wl="$acl_cv_wl"
+ acl_libext="$acl_cv_libext"
+ acl_shlibext="$acl_cv_shlibext"
+ acl_libname_spec="$acl_cv_libname_spec"
+ acl_library_names_spec="$acl_cv_library_names_spec"
+ acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+ acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+ acl_hardcode_direct="$acl_cv_hardcode_direct"
+ acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
+ # Check whether --enable-rpath was given.
+if test "${enable_rpath+set}" = set; then
+ enableval=$enable_rpath; :
+else
+ enable_rpath=yes
+fi
+
+
+
+ acl_libdirstem=lib
+ searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+ if test -n "$searchpath"; then
+ acl_save_IFS="${IFS= }"; IFS=":"
+ for searchdir in $searchpath; do
+ if test -d "$searchdir"; then
+ case "$searchdir" in
+ */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+ *) searchdir=`cd "$searchdir" && pwd`
+ case "$searchdir" in
+ */lib64 ) acl_libdirstem=lib64 ;;
+ esac ;;
+ esac
+ fi
+ done
+ IFS="$acl_save_IFS"
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+ use_additional=yes
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+
+# Check whether --with-libiconv-prefix was given.
+if test "${with_libiconv_prefix+set}" = set; then
+ withval=$with_libiconv_prefix;
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ fi
+ fi
+
+fi
+
+ LIBICONV=
+ LTLIBICONV=
+ INCICONV=
+ LIBICONV_PREFIX=
+ rpathdirs=
+ ltrpathdirs=
+ names_already_handled=
+ names_next_round='iconv '
+ while test -n "$names_next_round"; do
+ names_this_round="$names_next_round"
+ names_next_round=
+ for name in $names_this_round; do
+ already_handled=
+ for n in $names_already_handled; do
+ if test "$n" = "$name"; then
+ already_handled=yes
+ break
+ fi
+ done
+ if test -z "$already_handled"; then
+ names_already_handled="$names_already_handled $name"
+ uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+ eval value=\"\$HAVE_LIB$uppername\"
+ if test -n "$value"; then
+ if test "$value" = yes; then
+ eval value=\"\$LIB$uppername\"
+ test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value"
+ eval value=\"\$LTLIB$uppername\"
+ test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value"
+ else
+ :
+ fi
+ else
+ found_dir=
+ found_la=
+ found_so=
+ found_a=
+ eval libname=\"$acl_libname_spec\" # typically: libname=lib$name
+ if test -n "$acl_shlibext"; then
+ shrext=".$acl_shlibext" # typically: shrext=.so
+ else
+ shrext=
+ fi
+ if test $use_additional = yes; then
+ dir="$additional_libdir"
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ for x in $LDFLAGS $LTLIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ case "$x" in
+ -L*)
+ dir=`echo "X$x" | sed -e 's/^X-L//'`
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ ;;
+ esac
+ if test "X$found_dir" != "X"; then
+ break
+ fi
+ done
+ fi
+ if test "X$found_dir" != "X"; then
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name"
+ if test "X$found_so" != "X"; then
+ if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ else
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $found_dir"
+ fi
+ if test "$acl_hardcode_direct" = yes; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ else
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $found_dir"
+ fi
+ else
+ haveit=
+ for x in $LDFLAGS $LIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir"
+ fi
+ if test "$acl_hardcode_minus_L" != no; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ else
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+ fi
+ fi
+ fi
+ fi
+ else
+ if test "X$found_a" != "X"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a"
+ else
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name"
+ fi
+ fi
+ additional_includedir=
+ case "$found_dir" in
+ */$acl_libdirstem | */$acl_libdirstem/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+ LIBICONV_PREFIX="$basedir"
+ additional_includedir="$basedir/include"
+ ;;
+ esac
+ if test "X$additional_includedir" != "X"; then
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ for x in $CPPFLAGS $INCICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ fi
+ if test -n "$found_la"; then
+ save_libdir="$libdir"
+ case "$found_la" in
+ */* | *\\*) . "$found_la" ;;
+ *) . "./$found_la" ;;
+ esac
+ libdir="$save_libdir"
+ for dep in $dependency_libs; do
+ case "$dep" in
+ -L*)
+ additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+ haveit=
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ haveit=
+ for x in $LDFLAGS $LIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir"
+ fi
+ fi
+ haveit=
+ for x in $LDFLAGS $LTLIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ ;;
+ -R*)
+ dir=`echo "X$dep" | sed -e 's/^X-R//'`
+ if test "$enable_rpath" != no; then
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $dir"
+ fi
+ fi
+ ;;
+ -l*)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+ ;;
+ *.la)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+ ;;
+ *)
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$dep"
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep"
+ ;;
+ esac
+ done
+ fi
+ else
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name"
+ fi
+ fi
+ fi
+ done
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n "$acl_hardcode_libdir_separator"; then
+ alldirs=
+ for found_dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+ done
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+ else
+ for found_dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$found_dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+ done
+ fi
+ fi
+ if test "X$ltrpathdirs" != "X"; then
+ for found_dir in $ltrpathdirs; do
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir"
+ done
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:$LINENO: checking for CFPreferencesCopyAppValue" >&5
+$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; }
+if test "${gt_cv_func_CFPreferencesCopyAppValue+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <CoreFoundation/CFPreferences.h>
+int
+main ()
+{
+CFPreferencesCopyAppValue(NULL, NULL)
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ gt_cv_func_CFPreferencesCopyAppValue=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gt_cv_func_CFPreferencesCopyAppValue=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$gt_save_LIBS"
+fi
+{ $as_echo "$as_me:$LINENO: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
+$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_CFPREFERENCESCOPYAPPVALUE 1
+_ACEOF
+
+ fi
+ { $as_echo "$as_me:$LINENO: checking for CFLocaleCopyCurrent" >&5
+$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; }
+if test "${gt_cv_func_CFLocaleCopyCurrent+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <CoreFoundation/CFLocale.h>
+int
+main ()
+{
+CFLocaleCopyCurrent();
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ gt_cv_func_CFLocaleCopyCurrent=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gt_cv_func_CFLocaleCopyCurrent=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$gt_save_LIBS"
+fi
+{ $as_echo "$as_me:$LINENO: result: $gt_cv_func_CFLocaleCopyCurrent" >&5
+$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; }
+ if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_CFLOCALECOPYCURRENT 1
+_ACEOF
+
+ fi
+ INTL_MACOSX_LIBS=
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+ INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+ fi
+
+
+
+
+
+
+ LIBINTL=
+ LTLIBINTL=
+ POSUB=
+
+ case " $gt_needs " in
+ *" need-formatstring-macros "*) gt_api_version=3 ;;
+ *" need-ngettext "*) gt_api_version=2 ;;
+ *) gt_api_version=1 ;;
+ esac
+ gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+ gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
+ if test "$USE_NLS" = "yes"; then
+ gt_use_preinstalled_gnugettext=no
+
+
+ if test $gt_api_version -ge 3; then
+ gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+'
+ else
+ gt_revision_test_code=
+ fi
+ if test $gt_api_version -ge 2; then
+ gt_expression_test_code=' + * ngettext ("", "", 0)'
+ else
+ gt_expression_test_code=
+ fi
+
+ { $as_echo "$as_me:$LINENO: checking for GNU gettext in libc" >&5
+$as_echo_n "checking for GNU gettext in libc... " >&6; }
+if { as_var=$gt_func_gnugettext_libc; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;
+int
+main ()
+{
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ eval "$gt_func_gnugettext_libc=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$gt_func_gnugettext_libc=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$gt_func_gnugettext_libc'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+
+
+
+
+
+ am_save_CPPFLAGS="$CPPFLAGS"
+
+ for element in $INCICONV; do
+ haveit=
+ for x in $CPPFLAGS; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X$element"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+ fi
+ done
+
+
+ { $as_echo "$as_me:$LINENO: checking for iconv" >&5
+$as_echo_n "checking for iconv... " >&6; }
+if test "${am_cv_func_iconv+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+
+ am_cv_func_iconv="no, consider installing GNU libiconv"
+ am_cv_lib_iconv=no
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <iconv.h>
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ am_cv_func_iconv=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ if test "$am_cv_func_iconv" != yes; then
+ am_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBICONV"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <iconv.h>
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ am_cv_lib_iconv=yes
+ am_cv_func_iconv=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$am_save_LIBS"
+ fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5
+$as_echo "$am_cv_func_iconv" >&6; }
+ if test "$am_cv_func_iconv" = yes; then
+ { $as_echo "$as_me:$LINENO: checking for working iconv" >&5
+$as_echo_n "checking for working iconv... " >&6; }
+if test "${am_cv_func_iconv_works+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+
+ am_save_LIBS="$LIBS"
+ if test $am_cv_lib_iconv = yes; then
+ LIBS="$LIBS $LIBICONV"
+ fi
+ if test "$cross_compiling" = yes; then
+ case "$host_os" in
+ aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+ *) am_cv_func_iconv_works="guessing yes" ;;
+ esac
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <iconv.h>
+#include <string.h>
+int main ()
+{
+ /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+ returns. */
+ {
+ iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+ if (cd_utf8_to_88591 != (iconv_t)(-1))
+ {
+ static const char input[] = "\342\202\254"; /* EURO SIGN */
+ char buf[10];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_utf8_to_88591,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ return 1;
+ }
+ }
+#if 0 /* This bug could be worked around by the caller. */
+ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */
+ {
+ iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+ if (cd_88591_to_utf8 != (iconv_t)(-1))
+ {
+ static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+ char buf[50];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_88591_to_utf8,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if ((int)res > 0)
+ return 1;
+ }
+ }
+#endif
+ /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+ provided. */
+ if (/* Try standardized names. */
+ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+ /* Try IRIX, OSF/1 names. */
+ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+ /* Try AIX names. */
+ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+ /* Try HP-UX names. */
+ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+ return 1;
+ return 0;
+}
+_ACEOF
+rm -f 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ am_cv_func_iconv_works=yes
+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
+
+( exit $ac_status )
+am_cv_func_iconv_works=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+ LIBS="$am_save_LIBS"
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $am_cv_func_iconv_works" >&5
+$as_echo "$am_cv_func_iconv_works" >&6; }
+ case "$am_cv_func_iconv_works" in
+ *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+ *) am_func_iconv=yes ;;
+ esac
+ else
+ am_func_iconv=no am_cv_lib_iconv=no
+ fi
+ if test "$am_func_iconv" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ICONV 1
+_ACEOF
+
+ fi
+ if test "$am_cv_lib_iconv" = yes; then
+ { $as_echo "$as_me:$LINENO: checking how to link with libiconv" >&5
+$as_echo_n "checking how to link with libiconv... " >&6; }
+ { $as_echo "$as_me:$LINENO: result: $LIBICONV" >&5
+$as_echo "$LIBICONV" >&6; }
+ else
+ CPPFLAGS="$am_save_CPPFLAGS"
+ LIBICONV=
+ LTLIBICONV=
+ fi
+
+
+
+
+
+
+
+
+
+
+
+ use_additional=yes
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+
+# Check whether --with-libintl-prefix was given.
+if test "${with_libintl_prefix+set}" = set; then
+ withval=$with_libintl_prefix;
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ fi
+ fi
+
+fi
+
+ LIBINTL=
+ LTLIBINTL=
+ INCINTL=
+ LIBINTL_PREFIX=
+ rpathdirs=
+ ltrpathdirs=
+ names_already_handled=
+ names_next_round='intl '
+ while test -n "$names_next_round"; do
+ names_this_round="$names_next_round"
+ names_next_round=
+ for name in $names_this_round; do
+ already_handled=
+ for n in $names_already_handled; do
+ if test "$n" = "$name"; then
+ already_handled=yes
+ break
+ fi
+ done
+ if test -z "$already_handled"; then
+ names_already_handled="$names_already_handled $name"
+ uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+ eval value=\"\$HAVE_LIB$uppername\"
+ if test -n "$value"; then
+ if test "$value" = yes; then
+ eval value=\"\$LIB$uppername\"
+ test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value"
+ eval value=\"\$LTLIB$uppername\"
+ test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value"
+ else
+ :
+ fi
+ else
+ found_dir=
+ found_la=
+ found_so=
+ found_a=
+ eval libname=\"$acl_libname_spec\" # typically: libname=lib$name
+ if test -n "$acl_shlibext"; then
+ shrext=".$acl_shlibext" # typically: shrext=.so
+ else
+ shrext=
+ fi
+ if test $use_additional = yes; then
+ dir="$additional_libdir"
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ for x in $LDFLAGS $LTLIBINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ case "$x" in
+ -L*)
+ dir=`echo "X$x" | sed -e 's/^X-L//'`
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ ;;
+ esac
+ if test "X$found_dir" != "X"; then
+ break
+ fi
+ done
+ fi
+ if test "X$found_dir" != "X"; then
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name"
+ if test "X$found_so" != "X"; then
+ if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ else
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $found_dir"
+ fi
+ if test "$acl_hardcode_direct" = yes; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ else
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $found_dir"
+ fi
+ else
+ haveit=
+ for x in $LDFLAGS $LIBINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir"
+ fi
+ if test "$acl_hardcode_minus_L" != no; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ else
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
+ fi
+ fi
+ fi
+ fi
+ else
+ if test "X$found_a" != "X"; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a"
+ else
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name"
+ fi
+ fi
+ additional_includedir=
+ case "$found_dir" in
+ */$acl_libdirstem | */$acl_libdirstem/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+ LIBINTL_PREFIX="$basedir"
+ additional_includedir="$basedir/include"
+ ;;
+ esac
+ if test "X$additional_includedir" != "X"; then
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ for x in $CPPFLAGS $INCINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ fi
+ if test -n "$found_la"; then
+ save_libdir="$libdir"
+ case "$found_la" in
+ */* | *\\*) . "$found_la" ;;
+ *) . "./$found_la" ;;
+ esac
+ libdir="$save_libdir"
+ for dep in $dependency_libs; do
+ case "$dep" in
+ -L*)
+ additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+ haveit=
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ haveit=
+ for x in $LDFLAGS $LIBINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir"
+ fi
+ fi
+ haveit=
+ for x in $LDFLAGS $LTLIBINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ ;;
+ -R*)
+ dir=`echo "X$dep" | sed -e 's/^X-R//'`
+ if test "$enable_rpath" != no; then
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $dir"
+ fi
+ fi
+ ;;
+ -l*)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+ ;;
+ *.la)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+ ;;
+ *)
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$dep"
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep"
+ ;;
+ esac
+ done
+ fi
+ else
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name"
+ fi
+ fi
+ fi
+ done
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n "$acl_hardcode_libdir_separator"; then
+ alldirs=
+ for found_dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+ done
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
+ else
+ for found_dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$found_dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
+ done
+ fi
+ fi
+ if test "X$ltrpathdirs" != "X"; then
+ for found_dir in $ltrpathdirs; do
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir"
+ done
+ fi
+
+
+
+
+
+
+ { $as_echo "$as_me:$LINENO: checking for GNU gettext in libintl" >&5
+$as_echo_n "checking for GNU gettext in libintl... " >&6; }
+if { as_var=$gt_func_gnugettext_libintl; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ gt_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $INCINTL"
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBINTL"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+int
+main ()
+{
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ eval "$gt_func_gnugettext_libintl=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$gt_func_gnugettext_libintl=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
+ LIBS="$LIBS $LIBICONV"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+int
+main ()
+{
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+ ;
+ return 0;
+}
+_ACEOF
+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:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ LIBINTL="$LIBINTL $LIBICONV"
+ LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+ eval "$gt_func_gnugettext_libintl=yes"
+
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+ CPPFLAGS="$gt_save_CPPFLAGS"
+ LIBS="$gt_save_LIBS"
+fi
+ac_res=`eval 'as_val=${'$gt_func_gnugettext_libintl'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ fi
+
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
+ && test "$PACKAGE" != gettext-runtime \
+ && test "$PACKAGE" != gettext-tools; }; then
+ gt_use_preinstalled_gnugettext=yes
+ else
+ LIBINTL=
+ LTLIBINTL=
+ INCINTL=
+ fi
+
+
+
+ if test -n "$INTL_MACOSX_LIBS"; then
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+ LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+ fi
+ fi
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define ENABLE_NLS 1
+_ACEOF
+
+ else
+ USE_NLS=no
+ fi
+ fi
+
+ { $as_echo "$as_me:$LINENO: checking whether to use NLS" >&5
+$as_echo_n "checking whether to use NLS... " >&6; }
+ { $as_echo "$as_me:$LINENO: result: $USE_NLS" >&5
+$as_echo "$USE_NLS" >&6; }
+ if test "$USE_NLS" = "yes"; then
+ { $as_echo "$as_me:$LINENO: checking where the gettext function comes from" >&5
+$as_echo_n "checking where the gettext function comes from... " >&6; }
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ gt_source="external libintl"
+ else
+ gt_source="libc"
+ fi
+ else
+ gt_source="included intl directory"
+ fi
+ { $as_echo "$as_me:$LINENO: result: $gt_source" >&5
+$as_echo "$gt_source" >&6; }
+ fi
+
+ if test "$USE_NLS" = "yes"; then
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ { $as_echo "$as_me:$LINENO: checking how to link with libintl" >&5
+$as_echo_n "checking how to link with libintl... " >&6; }
+ { $as_echo "$as_me:$LINENO: result: $LIBINTL" >&5
+$as_echo "$LIBINTL" >&6; }
+
+ for element in $INCINTL; do
+ haveit=
+ for x in $CPPFLAGS; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X$element"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+ fi
+ done
+
+ fi
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_GETTEXT 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_DCGETTEXT 1
+_ACEOF
+
+ fi
+
+ POSUB=po
+ fi
+
+
+
+ INTLLIBS="$LIBINTL"
+
+
+
+
+
+
+
+# The test suite.
+ac_config_files="$ac_config_files install-info/tests/defs"
+
+ac_config_files="$ac_config_files util/defs"
+
+for ac_prog in hevea
+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:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_HEVEA+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$HEVEA"; then
+ ac_cv_prog_HEVEA="$HEVEA" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_HEVEA="$ac_prog"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+HEVEA=$ac_cv_prog_HEVEA
+if test -n "$HEVEA"; then
+ { $as_echo "$as_me:$LINENO: result: $HEVEA" >&5
+$as_echo "$HEVEA" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$HEVEA" && break
+done
+
+for ac_prog in tex
+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:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_TEX+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$TEX"; then
+ ac_cv_prog_TEX="$TEX" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_TEX="$ac_prog"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+TEX=$ac_cv_prog_TEX
+if test -n "$TEX"; then
+ { $as_echo "$as_me:$LINENO: result: $TEX" >&5
+$as_echo "$TEX" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$TEX" && break
+done
+
+
+ac_config_files="$ac_config_files Makefile doc/Makefile gnulib/lib/Makefile info/Makefile install-info/Makefile install-info/tests/Makefile lib/Makefile makeinfo/Makefile makeinfo/tests/Makefile po/Makefile.in util/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:$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= ;; #(
+ *) $as_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
+ test "x$cache_file" != "x/dev/null" &&
+ { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+ cat confcache >$cache_file
+ else
+ { $as_echo "$as_me:$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=
+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.
+ ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+ { { $as_echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+ { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+if test -z "${GL_COND_LIBTOOL_TRUE}" && test -z "${GL_COND_LIBTOOL_FALSE}"; then
+ { { $as_echo "$as_me:$LINENO: error: conditional \"GL_COND_LIBTOOL\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"GL_COND_LIBTOOL\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+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 "$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 "$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 "${TOOLS_ONLY_TRUE}" && test -z "${TOOLS_ONLY_FALSE}"; then
+ { { $as_echo "$as_me:$LINENO: error: conditional \"TOOLS_ONLY\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"TOOLS_ONLY\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+if test -z "${INSTALL_WARNINGS_TRUE}" && test -z "${INSTALL_WARNINGS_FALSE}"; then
+ { { $as_echo "$as_me:$LINENO: error: conditional \"INSTALL_WARNINGS\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"INSTALL_WARNINGS\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+: ${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:$LINENO: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF || ac_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}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_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
+
+
+
+
+# PATH needs CR
+# 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_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
+if (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
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+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.
+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); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# Required to use basename.
+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
+
+
+# Name of the executable.
+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'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line after each line using $LINENO; the second 'sed'
+ # does the real work. The second script uses 'N' to pair each
+ # line-number line with the line containing $LINENO, and appends
+ # trailing '-' during substitution so that $LINENO is not a special
+ # case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # scripts with optimization help from Paolo Bonzini. 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
+ { (exit 1); exit 1; }; }
+
+ # 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
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+ case `echo 'x\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ *) ECHO_C='\c';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+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 -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
+ fi
+else
+ as_ln_s='cp -p'
+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=:
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# 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
+
+# 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 GNU Texinfo $as_me 4.13, which was
+generated by GNU Autoconf 2.63. 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 from templates according to the
+current configuration.
+
+Usage: $0 [OPTION]... [FILE]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, 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 <bug-autoconf@gnu.org>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_version="\\
+GNU Texinfo config.status 4.13
+configured by $0, generated by GNU Autoconf 2.63,
+ with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2008 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=$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 ;;
+ --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"` ;;
+ esac
+ CONFIG_FILES="$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
+ CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h)
+ # Conflict between --help and --header
+ { $as_echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; };;
+ --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_echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; } ;;
+
+ *) ac_config_targets="$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"
+# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+ # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
+ # from automake < 1.5.
+ eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+ # Capture the value of LINGUAS because we need it to compute CATALOGS.
+ LINGUAS="${LINGUAS-%UNSET%}"
+
+
+_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:config.in" ;;
+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;;
+ "install-info/tests/defs") CONFIG_FILES="$CONFIG_FILES install-info/tests/defs" ;;
+ "util/defs") CONFIG_FILES="$CONFIG_FILES util/defs" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+ "gnulib/lib/Makefile") CONFIG_FILES="$CONFIG_FILES gnulib/lib/Makefile" ;;
+ "info/Makefile") CONFIG_FILES="$CONFIG_FILES info/Makefile" ;;
+ "install-info/Makefile") CONFIG_FILES="$CONFIG_FILES install-info/Makefile" ;;
+ "install-info/tests/Makefile") CONFIG_FILES="$CONFIG_FILES install-info/tests/Makefile" ;;
+ "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
+ "makeinfo/Makefile") CONFIG_FILES="$CONFIG_FILES makeinfo/Makefile" ;;
+ "makeinfo/tests/Makefile") CONFIG_FILES="$CONFIG_FILES makeinfo/tests/Makefile" ;;
+ "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
+ "util/Makefile") CONFIG_FILES="$CONFIG_FILES util/Makefile" ;;
+
+ *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+ { (exit 1); exit 1; }; };;
+ 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=
+ trap 'exit_status=$?
+ { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
+ trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -n "$tmp" && test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} ||
+{
+ $as_echo "$as_me: cannot create a temporary directory in ." >&2
+ { (exit 1); exit 1; }
+}
+
+# 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=' '
+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 {' >"$tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+ { (exit 1); exit 1; }; }
+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_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+ { (exit 1); exit 1; }; }
+
+ 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_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+ { (exit 1); exit 1; }; }
+ 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 >>"\$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 >>"\$tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
+
+}
+{
+ 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 < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+ || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5
+$as_echo "$as_me: error: could not setup config files machinery" >&2;}
+ { (exit 1); exit 1; }; }
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ 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[ ]*=/{
+s/:*\$(srcdir):*/:/
+s/:*\${srcdir}:*/:/
+s/:*@srcdir@:*/:/
+s/^\([^=]*=[ ]*\):*/\1/
+s/:*$//
+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 >"$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_t=`sed -n "/$ac_delim/p" confdefs.h`
+ if test -z "$ac_t"; then
+ break
+ elif $ac_last_try; then
+ { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;}
+ { (exit 1); exit 1; }; }
+ 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 = ""
+}
+/^[\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_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5
+$as_echo "$as_me: error: could not setup config headers machinery" >&2;}
+ { (exit 1); exit 1; }; }
+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_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5
+$as_echo "$as_me: error: invalid tag $ac_tag" >&2;}
+ { (exit 1); exit 1; }; };;
+ :[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="$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_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
+$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ ac_file_inputs="$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:$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 >"$tmp/stdin" \
+ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+ { (exit 1); exit 1; }; } ;;
+ 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"
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+ 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_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
+ { (exit 1); exit 1; }; }; }
+ 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:$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 "$tmp/subs.awk" >$tmp/out \
+ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+ { (exit 1); exit 1; }; }
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+ { $as_echo "$as_me:$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 "$tmp/stdin"
+ case $ac_file in
+ -) cat "$tmp/out" && rm -f "$tmp/out";;
+ *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+ esac \
+ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+ { (exit 1); exit 1; }; }
+ ;;
+ :H)
+ #
+ # CONFIG_HEADER
+ #
+ if test x"$ac_file" != x-; then
+ {
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
+ } >"$tmp/config.h" \
+ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+ { (exit 1); exit 1; }; }
+ if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+ { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ rm -f "$ac_file"
+ mv "$tmp/config.h" "$ac_file" \
+ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ else
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+ || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5
+$as_echo "$as_me: error: could not create -" >&2;}
+ { (exit 1); exit 1; }; }
+ 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:$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"" || for mf in $CONFIG_FILES; 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"`
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n 's/^U = //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' -e 's/\$U/'"$U"'/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
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+ 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_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
+ { (exit 1); exit 1; }; }; }
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+done
+ ;;
+ "po-directories":C)
+ for ac_file in $CONFIG_FILES; do
+ # Support "outfile[:infile[:infile...]]"
+ case "$ac_file" in
+ *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ esac
+ # PO directories have a Makefile.in generated from Makefile.in.in.
+ case "$ac_file" in */Makefile.in)
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+ # Treat a directory as a PO directory if and only if it has a
+ # POTFILES.in file. This allows packages to have multiple PO
+ # directories under different names or in different locations.
+ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+ rm -f "$ac_dir/POTFILES"
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+ cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+ POMAKEFILEDEPS="POTFILES.in"
+ # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+ # on $ac_dir but don't depend on user-specified configuration
+ # parameters.
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ # Hide the ALL_LINGUAS assigment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # The set of available languages was given in configure.in.
+ # Hide the ALL_LINGUAS assigment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+ fi
+ # Compute POFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+ # Compute UPDATEPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+ # Compute DUMMYPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+ # Compute GMOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ GMOFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ done
+ fi
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+ sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+ for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+ if test -f "$f"; then
+ case "$f" in
+ *.orig | *.bak | *~) ;;
+ *) cat "$f" >> "$ac_dir/Makefile" ;;
+ esac
+ fi
+ done
+ fi
+ ;;
+ esac
+ done ;;
+
+ esac
+done # for ac_tag
+
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;}
+ { (exit 1); exit 1; }; }
+
+
+# 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 || { (exit 1); exit 1; }
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..aeb39dc
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,240 @@
+# Process this file with autoconf to produce a configure script.
+# $Id: configure.ac,v 1.93 2008/09/18 18:45:56 karl Exp $
+#
+# This file is free software; as a special exception the author 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.
+#
+AC_INIT([GNU Texinfo], [4.13], [bug-texinfo@gnu.org])
+
+dnl Must come before AM_INIT_AUTOMAKE.
+AC_CONFIG_AUX_DIR([build-aux])
+AM_INIT_AUTOMAKE([1.10.1 readme-alpha dist-lzma])
+
+# Minimum Autoconf version required.
+AC_PREREQ(2.59)
+
+# Where to generate output; srcdir location.
+AC_CONFIG_HEADERS([config.h:config.in])dnl Keep filename to 8.3 for MS-DOS.
+AC_CONFIG_SRCDIR([makeinfo/makeinfo.c])
+
+# When the Texinfo source is imported into other repositories
+# (NetBSD and TeX Live), timestamps are generally not preserved. This
+# causes lots of annoyance, so --enable-maintainer-mode. Sorry.
+AM_MAINTAINER_MODE
+
+# Checks for programs.
+AC_PROG_CC
+
+# Since we use gnulib: gl_EARLY must be called as soon as possible after
+# the C compiler is checked. The others could be later, but we just
+# keep everything together.
+gl_EARLY
+
+dnl Rest of Gnulib.
+gl_INIT
+
+
+# Since we make a helper library.
+AC_PROG_RANLIB
+AM_MISSING_PROG(HELP2MAN, help2man)
+
+AC_PROG_INSTALL
+AC_PROG_MAKE_SET
+
+# Needed on sysV68 for sigblock, sigsetmask. But check for it in libc first.
+AC_CHECK_FUNC(sigblock, , [AC_CHECK_LIB(bsd, sigblock)])
+
+# Checks for header files.
+AC_HEADER_STAT
+AC_HEADER_STDC
+AC_CHECK_HEADERS(fcntl.h io.h limits.h pwd.h string.h strings.h \
+ termcap.h termio.h termios.h unistd.h \
+ sys/fcntl.h sys/file.h sys/stream.h sys/time.h sys/ttold.h sys/wait.h)
+
+# sys/ptem.h requires sys/stream.h for mblk_t on Solaris.
+AC_CHECK_HEADERS([sys/ptem.h],,,
+[#if HAVE_SYS_STREAM_H
+#include <sys/stream.h>
+#endif
+])
+
+AC_SYS_POSIX_TERMIOS
+AC_HEADER_TIOCGWINSZ
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_TYPE_OFF_T
+AC_TYPE_SIGNAL
+AC_C_CONST
+AC_STRUCT_TM
+
+# Checks for function declarations.
+AC_CHECK_DECLS([memchr, strcoll, strerror])
+
+# Checks for library functions.
+AC_FUNC_STRCOLL
+AC_FUNC_VPRINTF
+# in theory only pre-sysvr3 systems needed this and it's not likely
+# that anyone compiling new texinfo still has such a thing? we'll see.
+# AC_FUNC_SETVBUF_REVERSED
+AC_CHECK_FUNCS(bzero getcwd memset setlocale setvbuf sigaction sigprocmask \
+ sigsetmask strchr)
+AC_REPLACE_FUNCS(memcpy memmove strdup strerror)
+
+# We want to recognize djgpp to avoid the useless warning about no
+# term library.
+AC_CANONICAL_BUILD
+
+# We need to run some of our own binaries, most notably makedoc, but as
+# long as we have this process, we also use our own makeinfo and
+# install-info.
+#
+# This means that if we are cross compiling, we have to configure the
+# package twice: once with the native compiler (this is done in a
+# subdirectory $native_tools), and once with the cross compiler.
+# The former is invoked automatically here, with --host=$build.
+# $native_tools is also added to SUBDIRS in the main Makefile.am,
+# so that make compiles the native tools first.
+#
+if test "$cross_compiling" = no; then
+ native_tools=
+else
+ native_tools=tools
+ test -d "$native_tools" || mkdir "$native_tools"
+ confdir=`(cd "$srcdir";pwd)`
+ # Make sure the secondary configure won't fail with
+ # "error: source directory already configured".
+ rm -f config.status
+ AC_MSG_NOTICE([[Doing configure of native tools (${build}).]])
+ cd "$native_tools" || exit 1
+ # Run secondary configure in alternate environment or
+ # it gets the wrong CC etc.
+ # env -i gives this build host configure a clean environment;
+ # consequently, we have to re-initialize $PATH.
+ env -i CC="$BUILD_CC" AR="$BUILD_AR" RANLIB="$BUILD_RANLIB" \
+ PATH="$PATH" \
+ tools_only=1 \
+ ${confdir}/configure --build=${build} --host=${build} \
+ --disable-rpath --disable-nls
+ cd .. || exit 1
+ AC_MSG_NOTICE([[Continuing with main configure (${host}).]])
+fi
+AC_SUBST(native_tools)
+AM_CONDITIONAL(TOOLS_ONLY, [[test "x$tools_only" = x1]])
+
+# Some GNU/Linux systems (e.g., SuSE 4.3, 1996) don't have curses, but
+# rather ncurses. So we check for it.
+TERMLIBS=
+# Check for termlib before termcap because Solaris termcap needs libucb.
+TERMLIB_VARIANTS="ncurses curses termlib termcap terminfo"
+for termlib in ${TERMLIB_VARIANTS}; do
+ AC_CHECK_LIB(${termlib}, tgetent,
+ [TERMLIBS="${TERMLIBS} -l${termlib}"; break])
+done
+# don't bother warning on djgpp, it doesn't have a term library, it
+# ports each termcap-needing program separately according to its needs.
+if test -z "$TERMLIBS" && echo "$build" | grep -v djgpp >/dev/null; then
+ AC_MSG_WARN([probably need a terminal library, one of: ${TERMLIB_VARIANTS}])
+fi
+
+# Checks for variables.
+# HP-UX 9 (at least) needs -lncurses which defines termcap variables PC etc.
+AC_MSG_CHECKING(for library with termcap variables)
+AC_CACHE_VAL(ac_cv_var_ospeed,
+[oldLIBS=$LIBS
+for trylib in $termlib ${TERMLIB_VARIANTS}; do
+ if test "x$trylib" != "x$termlib"; then
+ LIBS="$oldLIBS -l$termlib -l$trylib"
+ else
+ LIBS="$oldLIBS -l$termlib"
+ fi
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[#ifdef HAVE_NCURSES_TERMCAP_H
+#include <ncurses/termcap.h>
+#else
+#ifdef HAVE_TERMCAP_H
+#include <termcap.h>
+#else
+#undef PC
+char *BC;
+char **UP;
+char PC;
+short ospeed;
+#endif
+#endif
+/* Make sure all variables actually exist. AIX 4.3 has ospeed but no BC.
+ --Andreas Ley <andy@rz.uni-karlsruhe.de> 24 Aug 2000. */
+BC++;
+UP++;
+PC++;
+return ospeed != 0;
+]])], [ac_cv_var_ospeed=$trylib; break])
+done
+LIBS=$oldLIBS
+])
+AC_MSG_RESULT($ac_cv_var_ospeed)
+if test -n "$ac_cv_var_ospeed" \
+ && test "x$termlib" != "x$ac_cv_var_ospeed"; then
+ TERMLIBS="${TERMLIBS} -l${ac_cv_var_ospeed}"
+fi
+AC_SUBST(TERMLIBS)#
+
+# Do not use <ncurses/termcap.h> unless we're linking with ncurses.
+# Must come after the termlib tests.
+if test "x$termlib" = xncurses; then
+ # Use AC_CHECK_HEADERS so the HAVE_*_H symbol gets defined.
+ AC_CHECK_HEADERS(ncurses/termcap.h)
+fi
+
+# For teTeX and TeX Live.
+AC_CANONICAL_HOST
+AC_ARG_ENABLE([multiplatform],
+ [AS_HELP_STRING([--enable-multiplatform],
+ [put executables into bin/PLATFORM and libraries into lib/PLATFORM])])dnl
+# if enable_multiplatform is set in the environment, use that.
+if test "x$enable_multiplatform" = xyes; then
+ test "x$bindir" = 'x${exec_prefix}/bin' && bindir="$bindir/$host"
+ test "x$libdir" = 'x${exec_prefix}/lib' && libdir="$libdir/$host"
+fi
+
+# Taken from the example in
+# http://www.gnu.org/software/automake/manual/html_node/Conditionals.html.
+AC_ARG_ENABLE(install-warnings,
+ [ --disable-install-warnings omit make install warnings about TeX files],
+ [case "${enableval}" in
+ yes) install_warnings=true ;;
+ no) install_warnings=false ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for --enable-install-warnings) ;;
+ esac],
+ [install_warnings=true])
+AM_CONDITIONAL(INSTALL_WARNINGS,
+ test x"$install_warnings" = xtrue || test x"$install_warnings" = xyes)
+
+# i18n support. To update to a new version of gettext, run:
+# gettextize -f -c
+AM_GNU_GETTEXT_VERSION([0.17])
+AM_GNU_GETTEXT([external])
+
+# The test suite.
+AC_CONFIG_FILES([install-info/tests/defs])
+AC_CONFIG_FILES([util/defs])
+AC_CHECK_PROGS([HEVEA], [hevea], [])
+AC_CHECK_PROGS([TEX], [tex], [])
+
+AC_CONFIG_FILES([
+ Makefile
+ doc/Makefile
+ gnulib/lib/Makefile
+ info/Makefile
+ install-info/Makefile
+ install-info/tests/Makefile
+ lib/Makefile
+ makeinfo/Makefile
+ makeinfo/tests/Makefile
+ po/Makefile.in
+ util/Makefile
+])
+AC_OUTPUT
diff --git a/djgpp/README b/djgpp/README
new file mode 100644
index 0000000..bfe9655
--- /dev/null
+++ b/djgpp/README
@@ -0,0 +1,431 @@
+Building and installing GNU Texinfo with DJGPP v2.x
+===================================================
+
+This directory holds files required for building Texinfo with DJGPP
+tools for MS-DOS and MS-Windows. If you got this file with a binary
+distribution, look for the "Installation" section below.
+
+
+1. Building Texinfo
+ ----------------
+
+ a. To compile Texinfo, you will need the following tools:
+
+ - basic DJGPP development environment: GCC, Binutils and djdev;
+ - a DJGPP port of GNU Make version 3.78 or later;
+ - a DJGPP port of Bash 2.04 or later;
+ - a port of GNU Sed 3.02 or later;
+ - DJGPP ports of Fileutils, Textutils, Sh-utils, Diffutils,
+ Gawk and Grep;
+ - etags (from the Emacs distribution) and mkid (from ID-utils)
+ if you need the TAGS and ID targets of the Makefile's.
+
+ All of the above are available from the DJGPP ftp sites on
+ SimTel.NET mirrors, in the v2gnu directory.
+
+ b. From the root of your DJGPP installation, unzip the source package:
+
+ - if you are unpacking the official GNU source distribution:
+
+ tar -xvzf texinfo-X.YZ.tar.gz
+
+ or
+
+ djtar -x texinfo-X.YZ.tar.gz
+
+ where X.YZ is the version number. (Users of MS-DOS and
+ MS-Windows 3.X, which don't support long file names, will need
+ to rename the archive to something like texi-XYZ.tgz.)
+
+ - if you are unpacking a source distribution from a DJGPP ftp
+ site:
+
+ unzip txiXYZs
+
+ or
+
+ pkunzip -d txiXYZs
+
+ If you build Texinfo on Windows 9X, Windows ME, Windows 2000 or
+ Windows XP, you are advised to use a version of Unzip which
+ supports long filenames, so that the original long filenames of
+ the source files will be preserved. Otherwise, the build
+ procedure will most probably fail.
+
+ Do NOT use an unzip program which supports long file names on
+ Windows NT 4, as DJGPP doesn't support long names there.
+
+ The program unzip32.exe, available from the SimTel.NET site,
+ will deal correctly with long file names on any platform, so it
+ is the recommended way of unzipping txiXYZs.zip archives.
+
+ c. If the source distribution comes with a ready Makefile (this is
+ usually the case with archives downloaded from the DJGPP sites),
+ and all you need is to build Texinfo, you may skip the configure
+ step below and go directly to step e.
+
+ d. To build the official GNU distribution, or to configure Texinfo
+ for any environment but stock DJGPP v2.x, run djgpp\config.bat
+ first, like this:
+
+ SRCDIR\djgpp\config SRCDIR
+
+ Here SRCDIR is the directory where you unpacked the sources. If
+ you are configuring from the source directory itself, you may
+ omit the argument to the config.bat file. If you do supply the
+ argument, you MUST use forward slashes in it, or else the batch
+ file might fail.
+
+ config.bat sets some environment variables, then invokes the
+ configure script. The script will run for a few minutes and
+ create Makefile's in all the directories, and the config.h file.
+
+ e. Run `Make'. This builds the programs and the Info files.
+
+
+
+2. Installation
+ ------------
+
+ a. If you are installing the binary distribution, then go to your
+ main DJGPP directory and unzip the files. For instance, if your
+ DJGPP installation is rooted on C:\DJGPP, then type this (XYZ is
+ the version number):
+
+ cd c:\djgpp
+ unzip txiXYZb
+
+ or, if you prefer `pkunzip':
+
+ pkunzip -d txiXYZb
+
+ b. If you downloaded and built Texinfo from sources, install by
+ invoking Make:
+
+ make install
+
+ This requires a port of Unix-like program `install.exe'. It is
+ available from the DJGPP port of GNU Fileutils on SimTel.NET.
+
+ c. Info needs a file named DIR with the top-level menu of all the
+ Info files installed on your system. If you installed the DJGPP
+ development environment (djdevNN.zip), then you already have
+ this file in the info/ subdirectory of your DJGPP installation.
+ Otherwise, you will need to create it. A minimal DIR file is
+ available in this distribution under the name `dir-example',
+ which you can use as a starting point. Copy it to the directory
+ where you install the Info files from this distribution.
+
+ Even if you already have a DIR file, you should review it to
+ make sure it is consistent with the names of the Info file you
+ are installing. Here's how your Texinfo-related entries in DIR
+ should look like:
+
+ * Info: (info).
+ Documentation browsing system. This topic teaches you about
+ how to use the online help information.
+
+ * Info-Standalone: (info-stnd).
+ This topic helps you use the standalone Info-Program (info.exe)
+
+ * infokey: (info-stnd)Invoking infokey.
+ Compile Info key customizations.
+
+ * Makeinfo: (texinfo)Invoking makeinfo.
+ Convert a .texinfo file (.txi) to an info file suitable for the
+ info reader or Emacs, into plain ASCII, into HTML, into XML,
+ or into DocBook.
+
+ * Texinfo: (texinfo).
+ With one source file, make either a printed manual (through TeX)
+ or an on-line manual (through makeinfo). This topic includes
+ a full description of the Texinfo language and related
+ facilities, including Emacs commands to work with Texinfo files.
+
+ * install-info: (texinfo)Invoking install-info.
+ How to update info/dir entries when installing GNU packages.
+
+ * texi2dvi: (texinfo)Format with texi2dvi.
+ Printing Texinfo documentation with TeX.
+
+ * texindex: (texinfo)Format with tex/texindex.
+ Sorting Texinfo index files automatically.
+
+
+ Note that the asterisk `*' should be flushed all the way to the
+ left, it is indented here just to make reading more convenient.
+
+ If your DIR file entries differ from these, I suggest to edit them
+ so they are as shown above. Otherwise, Info might not be able to
+ find some of the files. You HAVE been warned!
+
+ d. Optionally, set up environment variables for Info. These are:
+
+ * INFO_LINES -- screen size for Info.
+ * INFO_COLORS -- screen colors for Info.
+
+ (If you have DJGPP installed on your system, the file djgpp.env
+ which comes with it already has entries for Info, see the [info]
+ section there.)
+
+ INFO_LINES can be one of 25 (the default), 28, 35, 40, 43, or 50
+ (that's if you have a VGA; EGAs only support 25, 35 and 43 lines).
+ I recommend 40 if your monitor is 17" or larger, and at least 28
+ lines for smaller monitors (I work with 40 lines even on 14"
+ monitors).
+
+ INFO_COLORS should have the following syntax:
+
+ set INFO_COLORS=XX.YY
+
+ where XX is the text attribute for text displayed in the text
+ windows and the echo area, and YY is the text attribute for the
+ modeline (aka the status line). Each attribute is a numeric
+ value of a byte which describes the desired combination of
+ foreground and background colors. The individual bits in the
+ attribute byte are defined as follows:
+
+ bBBBFFFF
+
+ where `b' is the blink bit, `BBB' are the 3 bits for background
+ color and `FFFF' are the 4 bits for the foreground color. This is
+ the usual PC text attribute byte structure, and is further explained
+ in any standard reference on text-mode programming for the PC.
+
+ My favorite setting for INFO_COLORS is `0x1e.0x31'. This makes
+ Info use yellow foreground on blue background for the text and
+ blue foreground on cyan background for the modelines.
+
+ After you've played with these variables and have chosen the values
+ you like, it's a good idea to put them on the DJGPP.ENV file, in the
+ [info] section.
+
+ e. Beginning with version 3.6, GNU Info can read Unix man pages. If
+ you have a `man' clone on your system and would like to be able to
+ read man pages with Info, read the chapter ``Reading Man Pages''
+ below. One such clone is available as v2apps/manXYb.zip from
+ the DJGPP sites (XY is the version number).
+
+ f. This port supports compressed Info files, like what Info under Unix
+ gives you. For this to work, you will need to install a DOS port of
+ GNU `Gzip' package and to observe certain rules of file naming, so
+ that Info will find the compressed files working around the DOS 8.3
+ filename restriction. The chapter ``Compressed Info Files'' below
+ explains the details of this.
+
+ g. If you need to use the `print-node' command, read the chapter
+ ``Printing Nodes'' below.
+
+ h. That's it! You are now ready to use Info, Makeinfo, and Texindex.
+ To learn about them, type `Info' and press [Enter]. You will be
+ presented with the top-level menu of GNU/DJGPP hypertext
+ documentation. If you are unfamiliar with Info, press `?' to see
+ the available commands. Pressing `h' will cause Info to take you on
+ a guided tour through its features (recommended for first-time
+ users).
+
+ i. If you are used to Info ports of versions before 3.6, you should
+ know that the command bindings to PC-specific keys has changed: the
+ numeric keypad keys invoke the same commands as their extended
+ namesakes. That is, e.g., the key `PgUp' on the numeric keypad
+ invokes the same command as the grey `PgUp' key on the extended
+ keypad. This was done at DJ's request, because laptop machines
+ don't have extended keys. Commands to move between nodes
+ (previously bound to numeric keypad) are now bound to Ctrl-
+ varieties of numeric keypad keys (e.g., `next-node' is on
+ `Ctrl-PgDn', `prev-node' is on `Ctrl-PgUp', etc.). You can use
+ the `Alt-x describe-key' command to see which command is invoked
+ by a particular key.
+
+ j. There are several MSDOS-specific changes in Texinfo, relative to
+ previous Texinfo ports (for other changes, see the file NEWS):
+
+ * Full support for both forward and backslashes in all file
+ names. Previously, Info was sensitive to the style of
+ slashes in directories mentioned in the INFOPATH environment
+ variable.
+
+ * The default operation of the `print-node' command has been
+ changed so that it automatically prints to the local printer
+ device connected to the PRN port. (If your printer is
+ connected to another port, set the INFO_PRINT_COMMAND
+ environment variable like this:
+
+ set INFO_PRINT_COMMAND=>LPT2
+
+ In other words, if the value of INFO_PRINT_COMMAND begins
+ wih a `>' character, Info will write to the file or device
+ whose name follows the `>' character. (Don't leave any
+ blanks between `>' and the device name!).
+
+ Note that some old versions of stock DOS shell won't let you
+ use the `>' character in environment variables set from the
+ DOS prompt or batch files, but you can set it in the [info]
+ section of your DJGPP.ENV file.
+
+ * The `set-screen-height' command now actually changes the
+ screen dimensions from within Info if you specify one of the
+ sizes supported by your video hardware.
+
+ * If you don't have a `man' clone installed, and you invoke
+ Info with a name of a document which Info cannot find, it
+ will no longer wait for 15 seconds.
+
+ * Several bugs in handling of man pages were corrected.
+
+ * Info opens the dribble and input files in BINARY mode. This
+ allows to record keystrokes and restore them in another Info
+ session, thus using dribble files as a startup or init file
+ which changes default behavior, binds keys, etc.
+
+ * Info recognizes a new DOS-specific command-line option `-b'
+ or `--speech-friendly'. This option causes Info to use DOS
+ I/O functions (`printf', `puts', etc.) instead of direct
+ screen writes, which is required to enable speech
+ synthesizer software (used by visually-impaired people) to
+ grab the output. When this option is given, the screen
+ colors defined by the `INFO_COLORS' environment variable and
+ the visible-bell feature will be disabled, because stdio
+ functions don't support neither color text nor inverting
+ screen colors. This improvement was suggested and
+ originally implemented by Hans-Bernhard Broeker
+ <Broeker@physik.rwth-aachen.de>.
+
+ * Makeinfo now generates full .info-NN filenames when long
+ filenames are supported (e.g. on Win9x) and short .iNN
+ filenames otherwise. When the Texinfo source or the
+ command-line parameter -o specify an output file with no
+ extension (like `texinfo'), and long filenames aren't
+ supported, Makeinfo will make sure the generated names will
+ be unique (it will create e.g. `texinf-1', `texin-10' etc.).
+
+ * The texi2dvi script is now fully compatible with
+ MS-DOS/MS-Windows and with the DJGPP port of TeX.
+
+
+3. Reading Man Pages
+ -----------------
+
+ Yes, Info can now read man pages! This port supports that feature,
+ but for it to work, you will have to make sure your `man' clone is
+ set up correctly:
+
+ a. You should have an executable file named `man.exe', `man.com'
+ etc. somewhere on your PATH.
+
+ b. When invoked with redirected stdout, that executable should
+ print the contents of the file it gets as its argument to stdout
+ and exit. If your man command calls some pager, that pager
+ should have this behavior (various ports of Unix command `more'
+ and the DJGPP port of GNU Less behave that way).
+
+ One `man' clone is available as v2apps/manNNb.zip from the DJGPP
+ sites on SimTel.NET.
+
+
+4. Compressed Info Files
+ ---------------------
+
+ Info allows you to hold your Info files in compressed form, to save
+ disk space. When a file Info wants cannot be found, it will
+ automatically try to find that file in compressed form. Info does
+ this by trying to find the original file with specific extensions.
+ Each extension tells Info which program should be called to
+ decompress the file.
+
+ This port supports compression by the GNU Gzip program. When Info
+ cannot find a file `foo', it will first try to find `foo.z' or
+ `foo.gz'. If this fails, and the file has an extension, the last
+ one or two characters of the extension are replaced by `z' and `gz'
+ respectively, and Info tries again. If it finds any of these, it
+ will call the `GUnzip' program to decompress the file, catch its
+ output and display it. (The original compressed file stays
+ intact.)
+
+ So, to use this feature, compress your files with Gzip and call the
+ compressed files using the following as guidelines:
+
+ foo --> foo.gz
+ foo.inf --> foo.igz
+ foo.i5 --> foo.i5z
+ foo.25 --> foo.25z
+
+ If you have a package whose Info docs are split into more than 9
+ sub-files and you need to compress those files, you will have to
+ rename the sub-files from `foo.iNN' to `foo.NN' so that there will
+ be place for the trailing `z' in the compressed names. Don't
+ forget to edit the indirect file table in the main Info file and
+ change the sub-file filenames there too!
+
+ An alternative for those packages which have more than 99 Info
+ sub-files is to generate them from the Texinfo sources and force
+ Makeinfo to produce files without the .iNN extensions, like this:
+
+ makeinfo -o foo foo.txi
+
+ This causes Makeinfo to generate file names like foo-1, foo-2,
+ etc., which leave more place for the numeric index. If necessary,
+ Makeinfo will automatically remove characters from the end of the
+ argument to `-o'. For example, "-o texinfo" produces files
+ texinf-1, ..., texin-10, ..., texi-100, etc. on platforms which
+ only support 8+3 file names.
+
+ Saying "@setfilename foo" near the beginning of the Texinfo source
+ file is another way of forcing Makeinfo to produce files without
+ the .iNN extensions.
+
+ Using Makeinfo to produce files whose names are "compression-ready"
+ is more convenient, since you don't need to edit the the indirect
+ file table to reflect the changes in file names.
+
+ On platforms which support long filenames, the usual Info behavior
+ of appending `.gz' or `.Z' to the original filename also works;
+ this is done *before* Info checks the above butchered names.
+
+ Special considerations apply if you are installing Info on dual
+ DOS/Windows 9X/ME/2K/XP system, where you'd like Info to work with
+ the same files both in plain DOS and from the Windows DOS box. In
+ this case, you should make sure your compressed Info files follow
+ the 8+3 DOS naming conventions outlined above, even though Info
+ supports long file names on Windows 9X. Also, you need to turn off
+ the generation of numeric tails in short 8+3 aliases Windows
+ creates for long names (if you don't know how, the DJGPP FAQ list
+ explains it).
+
+ Please note: for the automatic decompression to work, Info must be
+ able to find the file it looks for with an extension which
+ indicates that the file is compressed. Do NOT call the compressed
+ files as the original uncompressed files were called, or Info
+ won't be able to find them! File names like bison-1, gcc.i10 or
+ make.info-3 have nothing in them to suggest that they are
+ compressed, so don't expect Info to uncompress them.
+
+
+5. Printing Nodes
+ --------------
+
+ Info has a `print-node' command. It works by piping the contents of
+ the current node through a program which is named by the environment
+ variable INFO_PRINT_COMMAND. That command should read its standard
+ input and write it to your printer. Find any such program, put its
+ name into the above environment variable, and you can print nodes from
+ within Info.
+
+ If the value of INFO_PRINT_COMMAND begins with a redirection
+ character `>', Info will write the contents of the node to the file
+ whose name follows the `>' character.
+
+ If INFO_PRINT_COMMAND is not defined, the DJGPP port will use
+ ">PRN" as the default, which causes it to print to the local printer
+ device, PRN.
+
+6. Bug Reports
+ -----------
+
+ If you see any bugs which seem specific to this DOS port, please tell
+ me about them.
+
+
+ Enjoy,
+
+ Eli Zaretskii <eliz@is.elta.co.il>
diff --git a/djgpp/config.bat b/djgpp/config.bat
new file mode 100755
index 0000000..f5dffc4
--- /dev/null
+++ b/djgpp/config.bat
@@ -0,0 +1,237 @@
+@echo off
+
+echo Configuring GNU Texinfo for DJGPP v2.x...
+
+Rem The small_env tests protect against fixed and too small size
+Rem of the environment in stock DOS shell.
+
+Rem Find out if NLS is wanted or not, if dependency-tracking is
+Rem wanted or not, if cache is wanted or not, and where the sources are.
+set ARGS=
+set NLS=disabled
+if not "%NLS%" == "disabled" goto small_env
+set CACHE=enabled
+if not "%CACHE%" == "enabled" goto small_env
+set DEPTRAK=disabled
+if not "%DEPTRAK%" == "disabled" goto small_env
+set XSRC=.
+if not "%XSRC%" == "." goto small_env
+
+Rem Loop over all arguments.
+Rem Special arguments are: NLS, XSRC CACHE and DEPS.
+Rem All other arguments are stored into ARGS.
+:arg_loop
+set SPECARG=0
+if not "%SPECARG%" == "0" goto small_env
+if not "%1" == "NLS" if not "%1" == "nls" goto cache_opt
+if "%1" == "nls" set NLS=enabled
+if "%1" == "NLS" set NLS=enabled
+if not "%NLS%" == "enabled" goto small_env
+set SPECARG=1
+if not "%SPECARG%" == "1" goto small_env
+shift
+:cache_opt
+set SPECARG=0
+if not "%SPECARG%" == "0" goto small_env
+if "%1" == "no-cache" goto cache_off
+if "%1" == "no-CACHE" goto cache_off
+if not "%1" == "NO-CACHE" goto dependency_opt
+:cache_off
+if "%1" == "no-cache" set CACHE=disabled
+if "%1" == "no-CACHE" set CACHE=disabled
+if "%1" == "NO-CACHE" set CACHE=disabled
+if not "%CACHE%" == "disabled" goto small_env
+set SPECARG=1
+if not "%SPECARG%" == "1" goto small_env
+shift
+:dependency_opt
+set SPECARG=0
+if not "%SPECARG%" == "0" goto small_env
+if "%1" == "dep" goto dep_off
+if not "%1" == "DEP" goto src_dir_opt
+:dep_off
+if "%1" == "dep" set DEPTRAK=enabled
+if "%1" == "DEP" set DEPTRAK=enabled
+if not "%DEPTRAK%" == "enabled" goto small_env
+set SPECARG=1
+if not "%SPECARG%" == "1" goto small_env
+shift
+:src_dir_opt
+set SPECARG=0
+if not "%SPECARG%" == "0" goto small_env
+echo %1 | grep -q "/"
+if errorlevel 1 goto collect_arg
+set XSRC=%1
+if not "%XSRC%" == "%1" goto small_env
+set SPECARG=1
+if not "%SPECARG%" == "1" goto small_env
+:collect_arg
+if "%SPECARG%" == "0" set _ARGS=%ARGS% %1
+if "%SPECARG%" == "0" if not "%_ARGS%" == "%ARGS% %1" goto small_env
+echo %_ARGS% | grep -q "[^ ]"
+if not errorlevel 0 set ARGS=%_ARGS%
+set _ARGS=
+shift
+if not "%1" == "" goto arg_loop
+set SPECARG=
+
+Rem Create a response file for the configure script.
+echo --srcdir=%XSRC% > args
+if "%CACHE%" == "enabled" echo --config-cache >> args
+if "%DEPTRAK%" == "enabled" echo --enable-dependency-tracking >> args
+if "%DEPTRAK%" == "disabled" echo --disable-dependency-tracking >> args
+if not "%ARGS%" == "" echo %ARGS% >> args
+set ARGS=
+set CACHE=
+set DEPTRAK=
+
+if "%XSRC%" == "." goto in_place
+
+:not_in_place
+redir -e /dev/null update %XSRC%/configure.org ./configure
+test -f ./configure
+if errorlevel 1 update %XSRC%/configure ./configure
+
+:in_place
+Rem Update configuration files
+echo Updating configuration scripts...
+test -f ./configure.org
+if errorlevel 1 update configure configure.org
+sed -f %XSRC%/djgpp/config.sed configure.org > configure
+if errorlevel 1 goto sed_error
+
+Rem Make sure they have a config.site file
+set CONFIG_SITE=%XSRC%/djgpp/config.site
+if not "%CONFIG_SITE%" == "%XSRC%/djgpp/config.site" goto small_env
+
+Rem Make sure crucial file names are not munged by unpacking
+test -f %XSRC%/po/Makefile.in.in
+if not errorlevel 1 mv -f %XSRC%/po/Makefile.in.in %XSRC%/po/Makefile.in-in
+test -f %XSRC%/po/Makefile.am.in
+if not errorlevel 1 mv -f %XSRC%/po/Makefile.am.in %XSRC%/po/Makefile.am-in
+
+Rem This is required because DOS/Windows are case-insensitive
+Rem to file names, and "make install" will do nothing if Make
+Rem finds a file called `install'.
+if exist INSTALL ren INSTALL INSTALL.txt
+
+Rem Set HOME to a sane default so configure stops complaining.
+if not "%HOME%" == "" goto host_name
+set HOME=%XSRC%/djgpp
+if not "%HOME%" == "%XSRC%/djgpp" goto small_env
+echo No HOME found in the environment, using default value
+
+:host_name
+Rem Set HOSTNAME so it shows in config.status
+if not "%HOSTNAME%" == "" goto hostdone
+if "%windir%" == "" goto msdos
+set OS=MS-Windows
+if not "%OS%" == "MS-Windows" goto small_env
+goto haveos
+:msdos
+set OS=MS-DOS
+if not "%OS%" == "MS-DOS" goto small_env
+:haveos
+if not "%USERNAME%" == "" goto haveuname
+if not "%USER%" == "" goto haveuser
+echo No USERNAME and no USER found in the environment, using default values
+set HOSTNAME=Unknown PC
+if not "%HOSTNAME%" == "Unknown PC" goto small_env
+goto userdone
+:haveuser
+set HOSTNAME=%USER%'s PC
+if not "%HOSTNAME%" == "%USER%'s PC" goto small_env
+goto userdone
+:haveuname
+set HOSTNAME=%USERNAME%'s PC
+if not "%HOSTNAME%" == "%USERNAME%'s PC" goto small_env
+:userdone
+set _HOSTNAME=%HOSTNAME%, %OS%
+if not "%_HOSTNAME%" == "%HOSTNAME%, %OS%" goto small_env
+set HOSTNAME=%_HOSTNAME%
+:hostdone
+set _HOSTNAME=
+set OS=
+
+Rem install-sh is required by the configure script but clashes with the
+Rem various Makefile install-foo targets, so we MUST have it before the
+Rem script runs and rename it afterwards
+test -f %XSRC%/install-sh
+if not errorlevel 1 goto no_ren0
+test -f %XSRC%/install-sh.sh
+if not errorlevel 1 mv -f %XSRC%/install-sh.sh %XSRC%/install-sh
+:no_ren0
+
+if "%NLS%" == "disabled" goto without_NLS
+
+:with_NLS
+Rem Check for the needed libraries and binaries.
+test -x /dev/env/DJDIR/bin/msgfmt.exe
+if not errorlevel 0 goto missing_NLS_tools
+test -x /dev/env/DJDIR/bin/xgettext.exe
+if not errorlevel 0 goto missing_NLS_tools
+test -f /dev/env/DJDIR/include/libcharset.h
+if not errorlevel 0 goto missing_NLS_tools
+test -f /dev/env/DJDIR/lib/libcharset.a
+if not errorlevel 0 goto missing_NLS_tools
+test -f /dev/env/DJDIR/include/iconv.h
+if not errorlevel 0 goto missing_NLS_tools
+test -f /dev/env/DJDIR/lib/libiconv.a
+if not errorlevel 0 goto missing_NLS_tools
+test -f /dev/env/DJDIR/include/libintl.h
+if not errorlevel 0 goto missing_NLS_tools
+test -f /dev/env/DJDIR/lib/libintl.a
+if not errorlevel 0 goto missing_NLS_tools
+
+Rem Recreate the files in the %XSRC%/po subdir with our ported tools.
+redir -e /dev/null rm %XSRC%/po/*.gmo
+redir -e /dev/null rm %XSRC%/po/texinfo*.pot
+redir -e /dev/null rm %XSRC%/po/cat-id-tbl.c
+redir -e /dev/null rm %XSRC%/po/stamp-cat-id
+
+Rem Update the arguments file for the configure script.
+Rem We prefer without-included-gettext because libintl.a from gettext package
+Rem is the only one that is guaranteed to have been ported to DJGPP.
+echo --enable-nls --without-included-gettext >> args
+goto configure_package
+
+:missing_NLS_tools
+echo Needed libs/tools for NLS not found. Configuring without NLS.
+:without_NLS
+Rem Update the arguments file for the configure script.
+echo --disable-nls >> args
+
+:configure_package
+echo Running the ./configure script...
+sh ./configure @args
+if errorlevel 1 goto cfg_error
+rm args
+echo Done.
+goto End
+
+:sed_error
+echo ./configure script editing failed!
+goto End
+
+:cfg_error
+echo ./configure script exited abnormally!
+goto End
+
+:small_env
+echo Your environment size is too small. Enlarge it and run me again.
+echo Configuration NOT done!
+
+:End
+test -f %XSRC%/install-sh.sh
+if not errorlevel 1 goto no_ren1
+test -f %XSRC%/install-sh
+if not errorlevel 1 mv -f %XSRC%/install-sh %XSRC%/install-sh.sh
+:no_ren1
+if "%HOME%" == "%XSRC%/djgpp" set HOME=
+set ARGS=
+set CONFIG_SITE=
+set HOSTNAME=
+set NLS=
+set CACHE=
+set DEPTRAK=
+set XSRC=
diff --git a/djgpp/config.sed b/djgpp/config.sed
new file mode 100644
index 0000000..965e31c
--- /dev/null
+++ b/djgpp/config.sed
@@ -0,0 +1,104 @@
+# DJGPP specific configuration file.
+# Sed script for additional DJGPP specific editing
+# of the configure script generated by autoconf 2.62.
+
+
+# Additional editing of Makefiles
+/^eval sed.*ac_file_inputs.*tmp\/out \\$/ {
+:loop
+n
+/^$/!b loop
+a\
+cat > "$tmp/subs-djgpp.sed" << eof_djgpp\
+# DJGPP specific Makefile changes.\
+s,\\.deps,_deps,g\
+s,\\.libs,_libs,g\
+s,\\.new\\.,_new.,g\
+s,\\.old\\.,_old.,g\
+s,\\.tab\\.,_tab.,g\
+s,Makefile\\.am\\.in,Makefile.am-in,g\
+s,Makefile\\.in\\.in,Makefile.in-in,g\
+/^install-info-am:/,/^$/ {\
+ /@list=.\\\$(INFO_DEPS)\[^ \]/s,DEPS),& texinf- texin- info-stn.i info.inf,\
+ s,\\(\\\$\\\$d/\\\$\\\$file-\\[0-9\\]\\[0-9\\]\\)\\(\[^ \]\\),\\1 \\$\\$d/\\$\\$file[0-9] \\$\\$d/\\$\\$file[0-9][0-9]\\2,\
+ s,\\( \\\$\\\$file-\\[0-9\\]\\[0-9\\]\\)\\(\[^ \]\\),\\1 \\$\\$file[0-9] \\$\\$file[0-9][0-9]\\2,\
+}\
+/^uninstall-info-am:/,/^$/ {\
+ /@list=.\\\$(INFO_DEPS)\[^ \]/s,DEPS),& texinf- texin- info-stn.i info.inf,\
+ s,\\(file-\\[0-9\\]\\[0-9\\]\\)\\(\[^ \]\\),\\1 \\$\\$file[0-9] \\$\\$file[0-9][0-9]\\2,\
+}\
+eof_djgpp\
+sed -f "\$tmp/subs-djgpp.sed" \$tmp/out > \$tmp/out.djgpp\
+mv -f \$tmp/out.djgpp \$tmp/out
+}
+
+
+# Makefile.in.in is renamed to Makefile.in-in.
+/ac_config_files=/,/_ACEOF/ {
+ s|po/Makefile\.in|&:po/Makefile.in-in|
+}
+/CONFIG_FILES=/ s|po/Makefile\.in|&:po/Makefile.in-in|2
+
+# We always use _deps and _libs instead of .deps and .libs, because
+# the latter is an invalid name on 8+3 MS-DOS file system. This makes
+# the generated Makefiles good for every DJGPP installation, not only
+# the one where the package was configured (which could happen to be
+# a Windows box, where leading dots in file names are allowed).
+/^rmdir[ ]*\.tst/ i\
+am__leading_dot=_
+
+# The following two items are changes needed for configuring
+# and compiling across partitions.
+# The given srcdir value is always translated from the
+# "x:" syntax into "/dev/x" syntax while we run configure.
+/^[ ]*-srcdir=\*.*$/ a\
+ ac_optarg=`echo "$ac_optarg" | sed "s,^\\([A-Za-z]\\):,/dev/\\1,"`
+/set X `ls -Lt \$srcdir/ i\
+ if `echo $srcdir | grep "^/dev/" - > /dev/null`; then\
+ srcdir=`echo "$srcdir" | sed -e "s%^/dev/%%" -e "s%/%:/%"`\
+ fi
+
+# Autoconf 2.52e generated configure scripts
+# write absolute paths into Makefiles making
+# them useless for DJGPP installations for which
+# the package has not been configured for.
+/MISSING=/,/^$/ {
+ /^fi$/ a\
+am_missing_run=`echo "$am_missing_run" | sed 's%/dev.*/texinfo-\\{0,1\\}4\\.[0-9][0-9]\\{0,1\\}\\.\\{0,1\\}[0-9]\\{0,2\\}[a-z]\\{0,1\\}%${top_srcdir}%;s%.:.*/texinfo-\\{0,1\\}4\\.[0-9][0-9]\\{0,1\\}\\.\\{0,1\\}[0-9]\\{0,2\\}[a-z]\\{0,1\\}%${top_srcdir}%'`
+}
+/^install_sh=/a\
+install_sh=`echo "$install_sh" | sed 's%/dev.*/texinfo-\\{0,1\\}4\\.[0-9][0-9]\\{0,1\\}\\.\\{0,1\\}[0-9]\\{0,2\\}[a-z]\\{0,1\\}%${top_srcdir}%;s%.:.*/texinfo-\\{0,1\\}4\\.[0-9][0-9]\\{0,1\\}\\.\\{0,1\\}[0-9]\\{0,2\\}[a-z]\\{0,1\\}%${top_srcdir}%'`
+
+# On DOS/WIN systems every partition has its own root directory,
+# so do not make any assumptions about absolute paths or the
+# configure script and the generated Makefiles will only be
+# good for the system where the package has been configured for.
+/^ac_abs_srcdir=/ i\
+ac_abs_builddir=`echo "$ac_abs_builddir" | sed "s%/dev/.*/texinfo[-_0-9]\\{1,1\\}[-.0-9A-Za-z+]*%../../.%;s%.:.*/texinfo[-_0-9]\\{1,1\\}[-.0-9A-Za-z+]*%../../.%"`\
+ac_abs_top_builddir=`echo "$ac_abs_top_builddir" | sed "s%/dev/.*/texinfo[-_0-9]\\{1,1\\}[-.0-9A-Za-z+]*%../../..%;s%.:.*/texinfo[-_0-9]\\{1,1\\}[-.0-9A-Za-z+]*%../../..%"`\
+ac_abs_top_srcdir=`echo "$ac_abs_top_srcdir" | sed "s%/dev/.*/texinfo[-_0-9]\\{1,1\\}[-.0-9A-Za-z+]*%../../..%;s%.:.*/texinfo[-_0-9]\\{1,1\\}[-.0-9A-Za-z+]*%../../..%"`
+#ac_abs_srcdir=`echo "$ac_abs_srcdir" | sed "s%/dev/.*/texinfo[-_0-9]\\{1,1\\}[-.0-9A-Za-z+]*%../../.%;s%.:.*/texinfo[-_0-9]\\{1,1\\}[-.0-9A-Za-z+]*%../../.%"`
+/^ac_abs_srcdir=/ a\
+for dj_dir in $ac_abs_builddir $ac_abs_top_builddir $ac_abs_top_srcdir $ac_abs_srcdir\
+do\
+ ac_abs_builddir=`echo "$ac_abs_builddir" | sed "s%//%/%g"`\
+ ac_abs_top_builddir=`echo "$ac_abs_top_builddir" | sed "s%//%/%g"`\
+ ac_abs_top_srcdir=`echo "$ac_abs_top_srcdir" | sed "s%//%/%g"`\
+ ac_abs_srcdir=`echo "$ac_abs_srcdir" | sed "s%//%/%g"`\
+done
+
+# The following makes sure we are not going to remove a directory
+# which is the cwd on its drive (DOS doesn't allow to remove such
+# a directory). The trick is to chdir to the root directory on
+# temp directory's drive before removing $tmp.
+/^ *trap 'exit_status=\$\?; rm -rf/s%rm -rf%cd $tmp; cd /; &%
+
+# AC_CONFIG_LINKS fails if the source and destination are on
+# different file systems and symlinks don't work.
+/^ ln \$srcdir/s%||%|| cp -pf $srcdir/$ac_source $ac_dest ||%
+
+# The CR test for awk does not work for DJGPP.
+/^ac_cs_awk_cr=/,/^$/ {
+ /^fi$/ a\
+ac_cs_awk_cr=$ac_cr
+}
diff --git a/djgpp/config.site b/djgpp/config.site
new file mode 100755
index 0000000..c8a1123
--- /dev/null
+++ b/djgpp/config.site
@@ -0,0 +1,62 @@
+#! /bin/sh
+# Site defaults for the DJGPP configuration
+
+# These two variables are required, otherwise looking for
+# programs along the PATH will not work.
+PATH_SEPARATOR=:
+PATH_EXPAND=y
+
+# This is required in for "test -f foo" to find foo.exe.
+export TEST_FINDS_EXE=y
+
+# The root of the DJGPP tree serves as the default prefix
+# for all paths that are hardcoded in the binaries.
+# When installing the installation prefix must be supplied.
+test "x$prefix" = xNONE && prefix='/dev/env/DJDIR'
+
+# This is required for config.status script to be run, since
+# ./configure runs it by invoking ${CONFIG_SHELL-/bin/sh}
+# CONFIG_SHELL=${CONFIG_SHELL='sh'}
+
+# These are set here so the generated Makefile's will be good
+# for every DJGPP installation, not only the one where the
+# package was configured.
+# $INSTALL must be an absolute path name, otherwise config.status
+# will try to prepend ./ and ../ to it when it goes into subdirs.
+INSTALL=${INSTALL='/dev/env/DJDIR/bin/ginstall -c'}
+RANLIB=${RANLIB='ranlib'}
+GMSGFMT=${GMSGFMT='/dev/env/DJDIR/bin/msgfmt'}
+MSGFMT=${MSGFMT='/dev/env/DJDIR/bin/msgfmt'}
+XGETTEXT=${XGETTEXT='/dev/env/DJDIR/bin/xgettext'}
+
+# Sane defaults for standard programs used by the build process.
+# We force the values of these variables so that the resultant
+# Makefile's will work on any DJGPP platform, not only on the
+# machine where the package was configured.
+ac_cv_prog_AWK=${AWK='gawk'}
+ac_cv_prog_INTLBISON=${INTLBISON='bison'}
+ac_cv_prog_CC=${CC='gcc'}
+
+# These are set here so the generated libtool/Makefile's will
+# be good for every DJGPP installation, not only the one where
+# the package was configured.
+NM=${NM='nm'}
+LD=${LD='ld'}
+MAKEINFO=${MAKEINFO='makeinfo'}
+
+# A sane default for mkdir.
+ac_cv_path_mkdir=${MKDIR_P='/dev/env/DJDIR/bin/mkdir -p'}
+
+# A sane default for grep.
+ac_cv_path_GREP=${GREP='/dev/env/DJDIR/bin/grep'}
+
+# A sane default for egrep.
+ac_cv_path_EGREP=${EGREP='/dev/env/DJDIR/bin/egrep'}
+
+# Force the test for 'ln -s' to report 'cp -pf'.
+ac_cv_prog_LN_S='cp -pf'
+
+# We have `fork', but it always fails. Don't trust Autoconf to be
+# smart enough to detect that...
+ac_cv_func_fork=no
+ac_cv_func_vfork=no
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644
index 0000000..54c490e
--- /dev/null
+++ b/doc/Makefile.am
@@ -0,0 +1,132 @@
+# $Id: Makefile.am,v 1.40 2008/09/08 13:39:17 karl Exp $
+# Makefile.am for texinfo/doc.
+# Run automake in .. to produce Makefile.in from this.
+#
+# This file is free software; as a special exception the author 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.
+
+# Put texinfo.txi first because that's the most important.
+info_TEXINFOS = texinfo.txi info-stnd.texi info.texi
+DISTCLEANFILES = texinfo texinfo-* info*.info*
+
+man_MANS = info.1 infokey.1 install-info.1 makeinfo.1 texindex.1 \
+ info.5 texinfo.5
+
+# Use the programs built in our distribution, taking account of possible
+# cross-compiling.
+MAKEINFO = $(top_builddir)/$(native_tools)/makeinfo/makeinfo
+
+# We'd also like to use something like this, but Automake calls
+# "install-info" directly.
+# INSTALL_INFO = $(top_builddir)/$(native_tools)/util/ginstall-info
+
+TXI_XLATE = txi-cs.tex txi-de.tex txi-en.tex txi-es.tex txi-fr.tex \
+ txi-it.tex txi-nl.tex txi-nb.tex txi-pl.tex txi-pt.tex \
+ txi-ru.tex txi-sr.tex txi-tr.tex txi-uk.tex
+
+refcard_files = refcard/Makefile refcard/txicmdcheck \
+ refcard/txirefcard-a4.pdf refcard/txirefcard.pdf \
+ refcard/txirefcard.tex
+
+# Include our texinfo.tex, not Automake's.
+EXTRA_DIST = epsf.tex texinfo.tex \
+ fdl.texi \
+ $(man_MANS) $(TXI_XLATE)
+ $(refcard_files)
+
+if INSTALL_WARNINGS
+install-data-local:
+ @echo
+ @echo "WARNING: If your texmf tree does not already contain"
+ @echo " up-to-date versions, you must install"
+ @echo " texinfo.tex and txi-??.tex manually,"
+ @echo " perhaps in TEXMF/tex/texinfo/,"
+ @echo " where TEXMF is a root of your TeX tree."
+ @echo " See doc/README for some considerations."
+ @echo " You can run make TEXMF=/your/texmf install-tex to do this."
+ @echo
+ @echo " You may also need to install epsf.tex in"
+ @echo " TEXMF/tex/generic/dvips, if your TeX"
+ @echo " installation did not include it."
+endif
+
+texmf_texinfo = $(TEXMF)/tex/texinfo
+texmf_dvips = $(TEXMF)/tex/generic/epsf
+install-tex:
+ test -n "$(TEXMF)" || (echo "TEXMF must be set." >&2; exit 1)
+ $(mkinstalldirs) $(DESTDIR)$(texmf_texinfo) $(DESTDIR)$(texmf_dvips)
+ $(INSTALL_DATA) $(srcdir)/texinfo.tex $(DESTDIR)$(texmf_texinfo)/texinfo.tex
+ $(INSTALL_DATA) $(srcdir)/epsf.tex $(DESTDIR)$(texmf_dvips)/epsf.tex
+ for f in $(TXI_XLATE); do \
+ $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(texmf_texinfo)/$$f; done
+
+# The man pages depend on the --help strings and the version number.
+common_mandeps = $(top_srcdir)/configure.ac
+
+# Set up the variables:
+man_rule_0 = \
+ program=`expr '/$@' : '.*/\(.*\)\.1'` && \
+ case $$program in makeinfo) dir=makeinfo;; info*) dir=info;; \
+ *install-info) dir=install-info;; *) dir=util;; esac && \
+ dir="$(top_builddir)/$(native_tools)/$$dir" && \
+ case $$program in info|install-info) program=g$$program;; \
+ esac
+
+# Update the manpage for a binary program; set up the variables,
+# make sure the binary is up-to-date and then generate the man page.
+man_rule_bin = echo "Updating man page $@" && \
+ $(man_rule_0) && \
+ echo cd "$$dir" '&&' $(MAKE) $(AM_MAKEFLAGS) $$program$(EXEEXT) && \
+ (cd "$$dir" && $(MAKE) $(AM_MAKEFLAGS) $$program$(EXEEXT)) && \
+ echo $(HELP2MAN) --name=\""$$name"\" "$$dir/$$program" -o '$@' && \
+ $(HELP2MAN) --name="$$name" "$$dir/$$program" -o '$@'
+
+$(srcdir)/info.1: $(top_srcdir)/info/info.c $(common_mandeps)
+ @name="read Info documents" && $(man_rule_bin)
+$(srcdir)/infokey.1: $(top_srcdir)/info/infokey.c $(common_mandeps)
+ @name="compile customizations for Info" && $(man_rule_bin)
+$(srcdir)/install-info.1: $(top_srcdir)/install-info/install-info.c $(common_mandeps)
+ @name="update info/dir entries" && $(man_rule_bin)
+
+# Here we need some postprocessing:
+$(srcdir)/makeinfo.1: $(top_srcdir)/makeinfo/makeinfo.c $(common_mandeps)
+ @name="translate Texinfo documents" && $(man_rule_bin)
+ mv $@ $@.tmp
+ sed '/^\.IP$$/N;/\nAlso/s/I//;/\nThe/s/I//' $@.tmp >$@
+ rm $@.tmp
+
+$(srcdir)/texindex.1: $(util_srcdir)/texindex.c $(common_mandeps)
+ @name="sort Texinfo index files" && $(man_rule_bin)
+
+
+## ---------- ##
+## texi2dvi. ##
+## ---------- ##
+
+man_MANS += texi2dvi.1 texi2pdf.1 pdftexi2dvi.1
+util_srcdir = $(top_srcdir)/util
+
+# Do not depend on the current user's settings.
+# We need to include util_srcdir in PATH so texi2pdf can find texi2dvi.
+change_envvars = unset TEXI2DVI_BUILD_MODE; unset TEXI2DVI_BUILD_DIRECTORY; \
+ PATH="$(util_srcdir):$${PATH}"; export PATH
+
+common_texi2dvi_deps = $(common_mandeps) \
+ $(util_srcdir)/texi2dvi $(util_srcdir)/texi2pdf
+
+$(srcdir)/texi2dvi.1: $(common_texi2dvi_deps)
+ $(change_envvars); $(HELP2MAN) --name="convert Texinfo documents to DVI" $(util_srcdir)/texi2dvi >$@
+
+$(srcdir)/texi2pdf.1: $(common_texi2dvi_deps)
+ $(change_envvars); $(HELP2MAN) --name="convert Texinfo documents to PDF" $(util_srcdir)/texi2pdf >$@
+
+$(srcdir)/pdftexi2dvi.1: $(common_texi2dvi_deps)
+ $(change_envvars); $(HELP2MAN) --name="convert Texinfo documents to PDF" $(util_srcdir)/pdftexi2dvi >$@
+
+# Do not create info files for distribution.
+dist-info:
diff --git a/doc/Makefile.in b/doc/Makefile.in
new file mode 100644
index 0000000..02cf1f7
--- /dev/null
+++ b/doc/Makefile.in
@@ -0,0 +1,1135 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008 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@
+
+# $Id: Makefile.am,v 1.40 2008/09/08 13:39:17 karl Exp $
+# Makefile.am for texinfo/doc.
+# Run automake in .. to produce Makefile.in from this.
+#
+# This file is free software; as a special exception the author 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@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@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 = doc
+DIST_COMMON = README $(info_TEXINFOS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(srcdir)/stamp-1 $(srcdir)/stamp-vti \
+ $(srcdir)/version-stnd.texi $(srcdir)/version.texi texinfo.tex
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/gnulib/m4/alloca.m4 \
+ $(top_srcdir)/gnulib/m4/argz.m4 \
+ $(top_srcdir)/gnulib/m4/codeset.m4 \
+ $(top_srcdir)/gnulib/m4/eealloc.m4 \
+ $(top_srcdir)/gnulib/m4/environ.m4 \
+ $(top_srcdir)/gnulib/m4/error.m4 \
+ $(top_srcdir)/gnulib/m4/exitfail.m4 \
+ $(top_srcdir)/gnulib/m4/extensions.m4 \
+ $(top_srcdir)/gnulib/m4/getopt.m4 \
+ $(top_srcdir)/gnulib/m4/gettext.m4 \
+ $(top_srcdir)/gnulib/m4/gettimeofday.m4 \
+ $(top_srcdir)/gnulib/m4/glibc21.m4 \
+ $(top_srcdir)/gnulib/m4/gnulib-common.m4 \
+ $(top_srcdir)/gnulib/m4/gnulib-comp.m4 \
+ $(top_srcdir)/gnulib/m4/iconv.m4 \
+ $(top_srcdir)/gnulib/m4/include_next.m4 \
+ $(top_srcdir)/gnulib/m4/inline.m4 \
+ $(top_srcdir)/gnulib/m4/intlmacosx.m4 \
+ $(top_srcdir)/gnulib/m4/lib-ld.m4 \
+ $(top_srcdir)/gnulib/m4/lib-link.m4 \
+ $(top_srcdir)/gnulib/m4/lib-prefix.m4 \
+ $(top_srcdir)/gnulib/m4/localcharset.m4 \
+ $(top_srcdir)/gnulib/m4/longlong.m4 \
+ $(top_srcdir)/gnulib/m4/malloc.m4 \
+ $(top_srcdir)/gnulib/m4/malloca.m4 \
+ $(top_srcdir)/gnulib/m4/mbchar.m4 \
+ $(top_srcdir)/gnulib/m4/mbiter.m4 \
+ $(top_srcdir)/gnulib/m4/mbrtowc.m4 \
+ $(top_srcdir)/gnulib/m4/mbscasecmp.m4 \
+ $(top_srcdir)/gnulib/m4/mbschr.m4 \
+ $(top_srcdir)/gnulib/m4/mbslen.m4 \
+ $(top_srcdir)/gnulib/m4/mbsncasecmp.m4 \
+ $(top_srcdir)/gnulib/m4/mbsstr.m4 \
+ $(top_srcdir)/gnulib/m4/mbstate_t.m4 \
+ $(top_srcdir)/gnulib/m4/mbswidth.m4 \
+ $(top_srcdir)/gnulib/m4/memchr.m4 \
+ $(top_srcdir)/gnulib/m4/memcmp.m4 \
+ $(top_srcdir)/gnulib/m4/memcpy.m4 \
+ $(top_srcdir)/gnulib/m4/memmem.m4 \
+ $(top_srcdir)/gnulib/m4/memmove.m4 \
+ $(top_srcdir)/gnulib/m4/mempcpy.m4 \
+ $(top_srcdir)/gnulib/m4/mkstemp.m4 \
+ $(top_srcdir)/gnulib/m4/nls.m4 \
+ $(top_srcdir)/gnulib/m4/onceonly.m4 \
+ $(top_srcdir)/gnulib/m4/po.m4 \
+ $(top_srcdir)/gnulib/m4/progtest.m4 \
+ $(top_srcdir)/gnulib/m4/setenv.m4 \
+ $(top_srcdir)/gnulib/m4/stdbool.m4 \
+ $(top_srcdir)/gnulib/m4/stdint.m4 \
+ $(top_srcdir)/gnulib/m4/stdlib_h.m4 \
+ $(top_srcdir)/gnulib/m4/stpcpy.m4 \
+ $(top_srcdir)/gnulib/m4/strdup.m4 \
+ $(top_srcdir)/gnulib/m4/strerror.m4 \
+ $(top_srcdir)/gnulib/m4/string_h.m4 \
+ $(top_srcdir)/gnulib/m4/strndup.m4 \
+ $(top_srcdir)/gnulib/m4/strnlen.m4 \
+ $(top_srcdir)/gnulib/m4/sys_stat_h.m4 \
+ $(top_srcdir)/gnulib/m4/sys_time_h.m4 \
+ $(top_srcdir)/gnulib/m4/tempname.m4 \
+ $(top_srcdir)/gnulib/m4/unistd_h.m4 \
+ $(top_srcdir)/gnulib/m4/wchar.m4 \
+ $(top_srcdir)/gnulib/m4/wchar_t.m4 \
+ $(top_srcdir)/gnulib/m4/wctype.m4 \
+ $(top_srcdir)/gnulib/m4/wcwidth.m4 \
+ $(top_srcdir)/gnulib/m4/wint_t.m4 \
+ $(top_srcdir)/gnulib/m4/xalloc.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 =
+SOURCES =
+DIST_SOURCES =
+INFO_DEPS = texinfo info-stnd.info info.info
+TEXINFO_TEX = $(top_srcdir)/build-aux/texinfo.tex
+am__TEXINFO_TEX_DIR = $(top_srcdir)/build-aux
+DVIS = texinfo.dvi info-stnd.dvi info.dvi
+PDFS = texinfo.pdf info-stnd.pdf info.pdf
+PSS = texinfo.ps info-stnd.ps info.ps
+HTMLS = texinfo.html info-stnd.html info.html
+TEXINFOS = texinfo.txi info-stnd.texi info.texi
+TEXI2DVI = texi2dvi
+TEXI2PDF = $(TEXI2DVI) --pdf --batch
+MAKEINFOHTML = $(MAKEINFO) --html
+AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
+DVIPS = dvips
+am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" \
+ "$(DESTDIR)$(man5dir)"
+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 = `echo $$p | sed -e 's|^.*/||'`;
+man1dir = $(mandir)/man1
+man5dir = $(mandir)/man5
+NROFF = nroff
+MANS = $(man_MANS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+ARGZ_H = @ARGZ_H@
+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@
+GETOPT_H = @GETOPT_H@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_DUP2 = @GNULIB_DUP2@
+GNULIB_ENVIRON = @GNULIB_ENVIRON@
+GNULIB_FCHDIR = @GNULIB_FCHDIR@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+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_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRSEP = @GNULIB_STRSEP@
+GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
+GNULIB_STRSTR = @GNULIB_STRSTR@
+GNULIB_STRTOD = @GNULIB_STRTOD@
+GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
+GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GREP = @GREP@
+HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR = @HAVE_DECL_STRERROR@
+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_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SETENV = @HAVE_SETENV@
+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_SLEEP = @HAVE_SLEEP@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRNDUP = @HAVE_STRNDUP@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNSETENV = @HAVE_UNSETENV@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE__BOOL = @HAVE__BOOL@
+HELP2MAN = @HELP2MAN@
+HEVEA = @HEVEA@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LDFLAGS = @LDFLAGS@
+LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@
+LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+
+# Use the programs built in our distribution, taking account of possible
+# cross-compiling.
+MAKEINFO = $(top_builddir)/$(native_tools)/makeinfo/makeinfo
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_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_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_FCHDIR = @REPLACE_FCHDIR@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+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@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYS_STAT_H = @SYS_STAT_H@
+SYS_TIME_H = @SYS_TIME_H@
+TERMLIBS = @TERMLIBS@
+TEX = @TEX@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+VOID_UNSETENV = @VOID_UNSETENV@
+WCHAR_H = @WCHAR_H@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WCTYPE_H = @WCTYPE_H@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+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@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_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@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+native_tools = @native_tools@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+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@
+
+# Put texinfo.txi first because that's the most important.
+info_TEXINFOS = texinfo.txi info-stnd.texi info.texi
+DISTCLEANFILES = texinfo texinfo-* info*.info*
+man_MANS = info.1 infokey.1 install-info.1 makeinfo.1 texindex.1 \
+ info.5 texinfo.5 texi2dvi.1 texi2pdf.1 pdftexi2dvi.1
+
+# We'd also like to use something like this, but Automake calls
+# "install-info" directly.
+# INSTALL_INFO = $(top_builddir)/$(native_tools)/util/ginstall-info
+TXI_XLATE = txi-cs.tex txi-de.tex txi-en.tex txi-es.tex txi-fr.tex \
+ txi-it.tex txi-nl.tex txi-nb.tex txi-pl.tex txi-pt.tex \
+ txi-ru.tex txi-sr.tex txi-tr.tex txi-uk.tex
+
+refcard_files = refcard/Makefile refcard/txicmdcheck \
+ refcard/txirefcard-a4.pdf refcard/txirefcard.pdf \
+ refcard/txirefcard.tex
+
+
+# Include our texinfo.tex, not Automake's.
+EXTRA_DIST = epsf.tex texinfo.tex \
+ fdl.texi \
+ $(man_MANS) $(TXI_XLATE)
+
+texmf_texinfo = $(TEXMF)/tex/texinfo
+texmf_dvips = $(TEXMF)/tex/generic/epsf
+
+# The man pages depend on the --help strings and the version number.
+common_mandeps = $(top_srcdir)/configure.ac
+
+# Set up the variables:
+man_rule_0 = \
+ program=`expr '/$@' : '.*/\(.*\)\.1'` && \
+ case $$program in makeinfo) dir=makeinfo;; info*) dir=info;; \
+ *install-info) dir=install-info;; *) dir=util;; esac && \
+ dir="$(top_builddir)/$(native_tools)/$$dir" && \
+ case $$program in info|install-info) program=g$$program;; \
+ esac
+
+
+# Update the manpage for a binary program; set up the variables,
+# make sure the binary is up-to-date and then generate the man page.
+man_rule_bin = echo "Updating man page $@" && \
+ $(man_rule_0) && \
+ echo cd "$$dir" '&&' $(MAKE) $(AM_MAKEFLAGS) $$program$(EXEEXT) && \
+ (cd "$$dir" && $(MAKE) $(AM_MAKEFLAGS) $$program$(EXEEXT)) && \
+ echo $(HELP2MAN) --name=\""$$name"\" "$$dir/$$program" -o '$@' && \
+ $(HELP2MAN) --name="$$name" "$$dir/$$program" -o '$@'
+
+util_srcdir = $(top_srcdir)/util
+
+# Do not depend on the current user's settings.
+# We need to include util_srcdir in PATH so texi2pdf can find texi2dvi.
+change_envvars = unset TEXI2DVI_BUILD_MODE; unset TEXI2DVI_BUILD_DIRECTORY; \
+ PATH="$(util_srcdir):$${PATH}"; export PATH
+
+common_texi2dvi_deps = $(common_mandeps) \
+ $(util_srcdir)/texi2dvi $(util_srcdir)/texi2pdf
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .dvi .ps
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+texinfo: texinfo.txi $(srcdir)/version.texi
+ restore=: && backupdir="$(am__leading_dot)am$$$$" && \
+ rm -rf $$backupdir && mkdir $$backupdir && \
+ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
+ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
+ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
+ done; \
+ else :; fi && \
+ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+ -o $@ `test -f 'texinfo.txi' || echo '$(srcdir)/'`texinfo.txi; \
+ then \
+ rc=0; \
+ else \
+ rc=$$?; \
+ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
+ fi; \
+ rm -rf $$backupdir; exit $$rc
+
+texinfo.dvi: texinfo.txi $(srcdir)/version.texi
+ TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+ $(TEXI2DVI) -o $@ `test -f 'texinfo.txi' || echo '$(srcdir)/'`texinfo.txi
+
+texinfo.pdf: texinfo.txi $(srcdir)/version.texi
+ TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+ $(TEXI2PDF) -o $@ `test -f 'texinfo.txi' || echo '$(srcdir)/'`texinfo.txi
+
+texinfo.html: texinfo.txi $(srcdir)/version.texi
+ rm -rf $(@:.html=.htp)
+ if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+ -o $(@:.html=.htp) `test -f 'texinfo.txi' || echo '$(srcdir)/'`texinfo.txi; \
+ then \
+ rm -rf $@; \
+ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+ mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
+ else \
+ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+ rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
+ exit 1; \
+ fi
+$(srcdir)/version.texi: @MAINTAINER_MODE_TRUE@ $(srcdir)/stamp-vti
+$(srcdir)/stamp-vti: texinfo.txi $(top_srcdir)/configure
+ @(dir=.; test -f ./texinfo.txi || dir=$(srcdir); \
+ set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/texinfo.txi`; \
+ echo "@set UPDATED $$1 $$2 $$3"; \
+ echo "@set UPDATED-MONTH $$2 $$3"; \
+ echo "@set EDITION $(VERSION)"; \
+ echo "@set VERSION $(VERSION)") > vti.tmp
+ @cmp -s vti.tmp $(srcdir)/version.texi \
+ || (echo "Updating $(srcdir)/version.texi"; \
+ cp vti.tmp $(srcdir)/version.texi)
+ -@rm -f vti.tmp
+ @cp $(srcdir)/version.texi $@
+
+mostlyclean-vti:
+ -rm -f vti.tmp
+
+maintainer-clean-vti:
+@MAINTAINER_MODE_TRUE@ -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi
+
+info-stnd.info: info-stnd.texi $(srcdir)/version-stnd.texi
+ restore=: && backupdir="$(am__leading_dot)am$$$$" && \
+ rm -rf $$backupdir && mkdir $$backupdir && \
+ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
+ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
+ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
+ done; \
+ else :; fi && \
+ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+ -o $@ `test -f 'info-stnd.texi' || echo '$(srcdir)/'`info-stnd.texi; \
+ then \
+ rc=0; \
+ else \
+ rc=$$?; \
+ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
+ fi; \
+ rm -rf $$backupdir; exit $$rc
+
+info-stnd.dvi: info-stnd.texi $(srcdir)/version-stnd.texi
+ TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+ $(TEXI2DVI) -o $@ `test -f 'info-stnd.texi' || echo '$(srcdir)/'`info-stnd.texi
+
+info-stnd.pdf: info-stnd.texi $(srcdir)/version-stnd.texi
+ TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+ $(TEXI2PDF) -o $@ `test -f 'info-stnd.texi' || echo '$(srcdir)/'`info-stnd.texi
+
+info-stnd.html: info-stnd.texi $(srcdir)/version-stnd.texi
+ rm -rf $(@:.html=.htp)
+ if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+ -o $(@:.html=.htp) `test -f 'info-stnd.texi' || echo '$(srcdir)/'`info-stnd.texi; \
+ then \
+ rm -rf $@; \
+ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+ mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
+ else \
+ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+ rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
+ exit 1; \
+ fi
+$(srcdir)/version-stnd.texi: @MAINTAINER_MODE_TRUE@ $(srcdir)/stamp-1
+$(srcdir)/stamp-1: info-stnd.texi $(top_srcdir)/configure
+ @(dir=.; test -f ./info-stnd.texi || dir=$(srcdir); \
+ set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/info-stnd.texi`; \
+ echo "@set UPDATED $$1 $$2 $$3"; \
+ echo "@set UPDATED-MONTH $$2 $$3"; \
+ echo "@set EDITION $(VERSION)"; \
+ echo "@set VERSION $(VERSION)") > 1.tmp
+ @cmp -s 1.tmp $(srcdir)/version-stnd.texi \
+ || (echo "Updating $(srcdir)/version-stnd.texi"; \
+ cp 1.tmp $(srcdir)/version-stnd.texi)
+ -@rm -f 1.tmp
+ @cp $(srcdir)/version-stnd.texi $@
+
+mostlyclean-1:
+ -rm -f 1.tmp
+
+maintainer-clean-1:
+@MAINTAINER_MODE_TRUE@ -rm -f $(srcdir)/stamp-1 $(srcdir)/version-stnd.texi
+
+info.info: info.texi $(info_TEXINFOS)
+ restore=: && backupdir="$(am__leading_dot)am$$$$" && \
+ rm -rf $$backupdir && mkdir $$backupdir && \
+ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
+ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
+ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
+ done; \
+ else :; fi && \
+ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+ -o $@ `test -f 'info.texi' || echo '$(srcdir)/'`info.texi; \
+ then \
+ rc=0; \
+ else \
+ rc=$$?; \
+ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
+ fi; \
+ rm -rf $$backupdir; exit $$rc
+
+info.dvi: info.texi $(info_TEXINFOS)
+ TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+ $(TEXI2DVI) -o $@ `test -f 'info.texi' || echo '$(srcdir)/'`info.texi
+
+info.pdf: info.texi $(info_TEXINFOS)
+ TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+ $(TEXI2PDF) -o $@ `test -f 'info.texi' || echo '$(srcdir)/'`info.texi
+
+info.html: info.texi $(info_TEXINFOS)
+ rm -rf $(@:.html=.htp)
+ if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+ -o $(@:.html=.htp) `test -f 'info.texi' || echo '$(srcdir)/'`info.texi; \
+ then \
+ rm -rf $@; \
+ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+ mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
+ else \
+ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+ rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
+ exit 1; \
+ fi
+.dvi.ps:
+ TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ $(DVIPS) -o $@ $<
+
+uninstall-dvi-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(DVIS)'; for p in $$list; do \
+ f=$(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \
+ rm -f "$(DESTDIR)$(dvidir)/$$f"; \
+ done
+
+uninstall-html-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(HTMLS)'; for p in $$list; do \
+ f=$(am__strip_dir) \
+ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \
+ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \
+ done
+
+uninstall-info-am:
+ @$(PRE_UNINSTALL)
+ @if test -d '$(DESTDIR)$(infodir)' && \
+ (install-info --version && \
+ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
+ list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
+ install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
+ done; \
+ else :; fi
+ @$(NORMAL_UNINSTALL)
+ @list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
+ (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \
+ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \
+ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
+ else :; fi); \
+ done
+
+uninstall-pdf-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(PDFS)'; for p in $$list; do \
+ f=$(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \
+ done
+
+uninstall-ps-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(PSS)'; for p in $$list; do \
+ f=$(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(psdir)/$$f"; \
+ done
+
+mostlyclean-aminfo:
+ -rm -rf texinfo.aux texinfo.cp texinfo.cps texinfo.fn texinfo.fns texinfo.ky \
+ texinfo.kys texinfo.log texinfo.op texinfo.pg texinfo.tmp \
+ texinfo.toc texinfo.tp texinfo.tps texinfo.vr texinfo.dvi \
+ texinfo.pdf texinfo.ps texinfo.html info-stnd.aux \
+ info-stnd.cp info-stnd.cps info-stnd.fn info-stnd.ky \
+ info-stnd.log info-stnd.pg info-stnd.pgs info-stnd.tmp \
+ info-stnd.toc info-stnd.tp info-stnd.tps info-stnd.vr \
+ info-stnd.dvi info-stnd.pdf info-stnd.ps info-stnd.html \
+ info.aux info.cp info.cps info.fn info.ky info.log info.pg \
+ info.pgs info.tmp info.toc info.tp info.tps info.vr info.dvi \
+ info.pdf info.ps info.html
+
+maintainer-clean-aminfo:
+ @list='$(INFO_DEPS)'; for i in $$list; do \
+ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \
+ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
+ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
+ done
+install-man1: $(man1_MANS) $(man_MANS)
+ @$(NORMAL_INSTALL)
+ test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.1*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+ else file=$$i; fi; \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 1*) ;; \
+ *) ext='1' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+ done
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.1*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 1*) ;; \
+ *) ext='1' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+ rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+ done
+install-man5: $(man5_MANS) $(man_MANS)
+ @$(NORMAL_INSTALL)
+ test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)"
+ @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.5*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+ else file=$$i; fi; \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 5*) ;; \
+ *) ext='5' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst"; \
+ done
+uninstall-man5:
+ @$(NORMAL_UNINSTALL)
+ @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.5*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 5*) ;; \
+ *) ext='5' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " rm -f '$(DESTDIR)$(man5dir)/$$inst'"; \
+ rm -f "$(DESTDIR)$(man5dir)/$$inst"; \
+ done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+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 $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$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-info
+check-am: all-am
+check: check-am
+all-am: Makefile $(INFO_DEPS) $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+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:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -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."
+@INSTALL_WARNINGS_FALSE@install-data-local:
+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: $(DVIS)
+
+html: html-am
+
+html-am: $(HTMLS)
+
+info: info-am
+
+info-am: $(INFO_DEPS)
+
+install-data-am: install-data-local install-info-am install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am: $(DVIS)
+ @$(NORMAL_INSTALL)
+ test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)"
+ @list='$(DVIS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(am__strip_dir) \
+ echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(dvidir)/$$f'"; \
+ $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(dvidir)/$$f"; \
+ done
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am: $(HTMLS)
+ @$(NORMAL_INSTALL)
+ test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)"
+ @list='$(HTMLS)'; for p in $$list; do \
+ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(am__strip_dir) \
+ if test -d "$$d$$p"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \
+ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
+ echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \
+ $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \
+ else \
+ echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \
+ $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \
+ fi; \
+ done
+install-info: install-info-am
+
+install-info-am: $(INFO_DEPS)
+ @$(NORMAL_INSTALL)
+ test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)"
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ esac; \
+ if test -f $$file; then d=.; else d=$(srcdir); fi; \
+ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
+ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
+ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
+ if test -f $$ifile; then \
+ relfile=`echo "$$ifile" | sed 's|^.*/||'`; \
+ echo " $(INSTALL_DATA) '$$ifile' '$(DESTDIR)$(infodir)/$$relfile'"; \
+ $(INSTALL_DATA) "$$ifile" "$(DESTDIR)$(infodir)/$$relfile"; \
+ else : ; fi; \
+ done; \
+ done
+ @$(POST_INSTALL)
+ @if (install-info --version && \
+ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
+ list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
+ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
+ done; \
+ else : ; fi
+install-man: install-man1 install-man5
+
+install-pdf: install-pdf-am
+
+install-pdf-am: $(PDFS)
+ @$(NORMAL_INSTALL)
+ test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)"
+ @list='$(PDFS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(am__strip_dir) \
+ echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/$$f'"; \
+ $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/$$f"; \
+ done
+install-ps: install-ps-am
+
+install-ps-am: $(PSS)
+ @$(NORMAL_INSTALL)
+ test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)"
+ @list='$(PSS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(am__strip_dir) \
+ echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(psdir)/$$f'"; \
+ $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(psdir)/$$f"; \
+ done
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-1 \
+ maintainer-clean-aminfo maintainer-clean-generic \
+ maintainer-clean-vti
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-1 mostlyclean-aminfo mostlyclean-generic \
+ mostlyclean-vti
+
+pdf: pdf-am
+
+pdf-am: $(PDFS)
+
+ps: ps-am
+
+ps-am: $(PSS)
+
+uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \
+ uninstall-man uninstall-pdf-am uninstall-ps-am
+
+uninstall-man: uninstall-man1 uninstall-man5
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic dist-info \
+ distclean distclean-generic distdir dvi dvi-am html html-am \
+ info info-am install install-am install-data install-data-am \
+ install-data-local install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-man1 install-man5 \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-1 maintainer-clean-aminfo \
+ maintainer-clean-generic maintainer-clean-vti mostlyclean \
+ mostlyclean-1 mostlyclean-aminfo mostlyclean-generic \
+ mostlyclean-vti pdf pdf-am ps ps-am uninstall uninstall-am \
+ uninstall-dvi-am uninstall-html-am uninstall-info-am \
+ uninstall-man uninstall-man1 uninstall-man5 uninstall-pdf-am \
+ uninstall-ps-am
+
+ $(refcard_files)
+
+@INSTALL_WARNINGS_TRUE@install-data-local:
+@INSTALL_WARNINGS_TRUE@ @echo
+@INSTALL_WARNINGS_TRUE@ @echo "WARNING: If your texmf tree does not already contain"
+@INSTALL_WARNINGS_TRUE@ @echo " up-to-date versions, you must install"
+@INSTALL_WARNINGS_TRUE@ @echo " texinfo.tex and txi-??.tex manually,"
+@INSTALL_WARNINGS_TRUE@ @echo " perhaps in TEXMF/tex/texinfo/,"
+@INSTALL_WARNINGS_TRUE@ @echo " where TEXMF is a root of your TeX tree."
+@INSTALL_WARNINGS_TRUE@ @echo " See doc/README for some considerations."
+@INSTALL_WARNINGS_TRUE@ @echo " You can run make TEXMF=/your/texmf install-tex to do this."
+@INSTALL_WARNINGS_TRUE@ @echo
+@INSTALL_WARNINGS_TRUE@ @echo " You may also need to install epsf.tex in"
+@INSTALL_WARNINGS_TRUE@ @echo " TEXMF/tex/generic/dvips, if your TeX"
+@INSTALL_WARNINGS_TRUE@ @echo " installation did not include it."
+install-tex:
+ test -n "$(TEXMF)" || (echo "TEXMF must be set." >&2; exit 1)
+ $(mkinstalldirs) $(DESTDIR)$(texmf_texinfo) $(DESTDIR)$(texmf_dvips)
+ $(INSTALL_DATA) $(srcdir)/texinfo.tex $(DESTDIR)$(texmf_texinfo)/texinfo.tex
+ $(INSTALL_DATA) $(srcdir)/epsf.tex $(DESTDIR)$(texmf_dvips)/epsf.tex
+ for f in $(TXI_XLATE); do \
+ $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(texmf_texinfo)/$$f; done
+
+$(srcdir)/info.1: $(top_srcdir)/info/info.c $(common_mandeps)
+ @name="read Info documents" && $(man_rule_bin)
+$(srcdir)/infokey.1: $(top_srcdir)/info/infokey.c $(common_mandeps)
+ @name="compile customizations for Info" && $(man_rule_bin)
+$(srcdir)/install-info.1: $(top_srcdir)/install-info/install-info.c $(common_mandeps)
+ @name="update info/dir entries" && $(man_rule_bin)
+
+# Here we need some postprocessing:
+$(srcdir)/makeinfo.1: $(top_srcdir)/makeinfo/makeinfo.c $(common_mandeps)
+ @name="translate Texinfo documents" && $(man_rule_bin)
+ mv $@ $@.tmp
+ sed '/^\.IP$$/N;/\nAlso/s/I//;/\nThe/s/I//' $@.tmp >$@
+ rm $@.tmp
+
+$(srcdir)/texindex.1: $(util_srcdir)/texindex.c $(common_mandeps)
+ @name="sort Texinfo index files" && $(man_rule_bin)
+
+$(srcdir)/texi2dvi.1: $(common_texi2dvi_deps)
+ $(change_envvars); $(HELP2MAN) --name="convert Texinfo documents to DVI" $(util_srcdir)/texi2dvi >$@
+
+$(srcdir)/texi2pdf.1: $(common_texi2dvi_deps)
+ $(change_envvars); $(HELP2MAN) --name="convert Texinfo documents to PDF" $(util_srcdir)/texi2pdf >$@
+
+$(srcdir)/pdftexi2dvi.1: $(common_texi2dvi_deps)
+ $(change_envvars); $(HELP2MAN) --name="convert Texinfo documents to PDF" $(util_srcdir)/pdftexi2dvi >$@
+
+# Do not create info files for distribution.
+dist-info:
+# 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/doc/README b/doc/README
new file mode 100644
index 0000000..1b64f63
--- /dev/null
+++ b/doc/README
@@ -0,0 +1,44 @@
+$Id: README,v 1.5 2007/07/02 21:40:32 olegkat Exp $
+texinfo/doc/README
+
+ Copyright (C) 2002 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 directory contains documentation on the Texinfo system and the TeX
+sources needed to process Texinfo sources. We recommend using the
+texi2dvi included in this distribution to run a Texinfo manual through
+TeX to produce a DVI file.
+
+The .tex files are not installed automatically because TeX installations
+vary so widely. Installing them in the wrong place would give a false
+sense of security. So, you should simply cp *.tex to the appropriate
+place. If your installation follows the TeX Directory Structure
+standard (http://tug.org/tds/), this will be the directory
+TEXMF/tex/texinfo/ for texinfo.tex, and TEXMF/tex/generic/dvips/ for
+epsf.tex. If you use the default installation paths, TEXMF will be
+/usr/local/share/texmf. On systems with TeX preinstalled, as most
+GNU/Linux distributions offer, TEXMF will often be something like
+/usr/share/texmf.
+
+It is also possible to put these .tex files in a `local' place instead
+of overwriting existing ones, but this is more complicated. See your TeX
+documentation in general and the texmf.cnf file in particular for information.
+
+If you add files to your TeX installations, not just replace existing
+ones, you very likely have to update your ls-R file; do this with the
+mktexlsr command. In older versions, this was named MakeTeXls-R.
+
+You can get the latest texinfo.tex from
+ftp://ftp.gnu.org/gnu/texinfo/texinfo.tex (and all GNU mirrors)
+ftp://tug.org/tex/texinfo.tex (and all CTAN mirrors)
+or on the FSF machines in /home/gd/gnu/doc/texinfo.tex.
+If you have problems with the version in this distribution, please check
+for a newer version.
+
+epsf.tex comes with dvips distributions, and you may already have it
+installed. The version here is functionally identical but slightly
+nicer than the one in dvips574. The changes have been sent to the
+epsf.tex maintainer.
diff --git a/doc/epsf.tex b/doc/epsf.tex
new file mode 100644
index 0000000..00b12c8
--- /dev/null
+++ b/doc/epsf.tex
@@ -0,0 +1,644 @@
+%%% -*-TeX-*-
+%%% ====================================================================
+%%% @TeX-file{
+%%% author = "Tom Rokicki",
+%%% version = "2.7.3",
+%%% date = "23 July 2005",
+%%% time = "14:32:01 MDT",
+%%% filename = "epsf.tex",
+%%% address = "Tom Rokicki
+%%% Box 2081
+%%% Stanford, CA 94309
+%%% USA",
+%%% telephone = "+1 415 855 9989",
+%%% checksum = "20914 644 3054 26594",
+%%% email = "rokicki@cs.stanford.edu (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% copyright = "This file is freely redistributable and
+%%% placed into the public domain by Tomas
+%%% Rokicki.",
+%%% keywords = "PostScript, TeX",
+%%% supported = "yes",
+%%% abstract = "This file contains macros to support the
+%%% inclusion of Encapsulated PostScript files
+%%% in TeX documents.",
+%%% docstring = "This file contains TeX macros to include an
+%%% Encapsulated PostScript graphic. It works
+%%% by finding the bounding box comment,
+%%% calculating the correct scale values, and
+%%% inserting a vbox of the appropriate size at
+%%% the current position in the TeX document.
+%%%
+%%% To use, simply use
+%%%
+%%% \input epsf % somewhere early on in your TeX file
+%%%
+%%% % then where you want to insert a vbox for a figure:
+%%% \epsfbox{filename.ps}
+%%%
+%%% Alternatively, you can supply your own
+%%% bounding box by
+%%%
+%%% \epsfbox[0 0 30 50]{filename.ps}
+%%%
+%%% This will not read in the file, and will
+%%% instead use the bounding box you specify.
+%%%
+%%% The effect will be to typeset the figure as
+%%% a TeX box, at the point of your \epsfbox
+%%% command. By default, the graphic will have
+%%% its `natural' width (namely the width of
+%%% its bounding box, as described in
+%%% filename.ps). The TeX box will have depth
+%%% zero.
+%%%
+%%% You can enlarge or reduce the figure by
+%%% using
+%%%
+%%% \epsfxsize = <dimen> \epsfbox{filename.ps}
+%%% or
+%%% \epsfysize = <dimen> \epsfbox{filename.ps}
+%%%
+%%% instead. Then the width of the TeX box will
+%%% be \epsfxsize and its height will be scaled
+%%% proportionately (or the height will be
+%%% \epsfysize and its width will be scaled
+%%% proportionately).
+%%%
+%%% The width (and height) is restored to zero
+%%% after each use, so \epsfxsize or \epsfysize
+%%% must be specified before EACH use of
+%%% \epsfbox.
+%%%
+%%% A more general facility for sizing is
+%%% available by defining the \epsfsize macro.
+%%% Normally you can redefine this macro to do
+%%% almost anything. The first parameter is
+%%% the natural x size of the PostScript
+%%% graphic, the second parameter is the
+%%% natural y size of the PostScript graphic.
+%%% It must return the xsize to use, or 0 if
+%%% natural scaling is to be used. Common uses
+%%% include:
+%%%
+%%% \epsfxsize % just leave the old value alone
+%%% 0pt % use the natural sizes
+%%% #1 % use the natural sizes
+%%% \hsize % scale to full width
+%%% 0.5#1 % scale to 50% of natural size
+%%% \ifnum #1 > \hsize \hsize \else #1\fi
+%%% % smaller of natural, hsize
+%%%
+%%% If you want TeX to report the size of the
+%%% figure (as a message on your terminal when
+%%% it processes each figure), use
+%%% `\epsfverbosetrue'.
+%%%
+%%% If you only want to get the bounding box
+%%% extents, without producing any output boxes
+%%% or \special{}, then use \epsfgetbb{filename}.
+%%% The bounding box corner coordinates are saved
+%%% in the macros \epsfllx, \epsflly, \epsfurx,
+%%% and \epsfury in PostScript units of big
+%%% points.
+%%%
+%%% Revision history:
+%%%
+%%% ---------------------------------------------
+%%% epsf.tex macro file:
+%%% Originally written by Tomas Rokicki of
+%%% Radical Eye Software, 29 Mar 1989.
+%%%
+%%% ---------------------------------------------
+%%% Revised by Don Knuth, 3 Jan 1990.
+%%%
+%%% ---------------------------------------------
+%%% Revised by Tomas Rokicki, 18 Jul 1990.
+%%% Accept bounding boxes with no space after
+%%% the colon.
+%%%
+%%% ---------------------------------------------
+%%% Revised by Nelson H. F. Beebe
+%%% <beebe@math.utah.edu>, 03 Dec 1991 [2.0].
+%%% Add version number and date typeout.
+%%%
+%%% Use \immediate\write16 instead of \message
+%%% to ensure output on new line.
+%%%
+%%% Handle nested EPS files.
+%%%
+%%% Handle %%BoundingBox: (atend) lines.
+%%%
+%%% Do not quit when blank lines are found.
+%%%
+%%% Add a few percents to remove generation of
+%%% spurious blank space.
+%%%
+%%% Move \special output to
+%%% \epsfspecial{filename} so that other macro
+%%% packages can input this one, then change
+%%% the definition of \epsfspecial to match
+%%% another DVI driver.
+%%%
+%%% Move size computation to \epsfsetsize which
+%%% can be called by the user; the verbose
+%%% output of the bounding box and scaled width
+%%% and height happens here.
+%%%
+%%% ---------------------------------------------
+%%% Revised by Nelson H. F. Beebe
+%%% <beebe@math.utah.edu>, 05 May 1992 [2.1].
+%%% Wrap \leavevmode\hbox{} around \vbox{} with
+%%% the \special so that \epsffile{} can be
+%%% used inside \begin{center}...\end{center}
+%%%
+%%% ---------------------------------------------
+%%% Revised by Nelson H. F. Beebe
+%%% <beebe@math.utah.edu>, 09 Dec 1992 [2.2].
+%%% Introduce \epsfshow{true,false} and
+%%% \epsfframe{true,false} macros; the latter
+%%% suppresses the insertion of the PostScript,
+%%% and instead just creates an empty box,
+%%% which may be handy for rapid prototyping.
+%%%
+%%% ---------------------------------------------
+%%% Revised by Nelson H. F. Beebe
+%%% <beebe@math.utah.edu>, 14 Dec 1992 [2.3].
+%%% Add \epsfshowfilename{true,false}. When
+%%% true, and \epsfshowfalse is specified, the
+%%% PostScript file name will be displayed
+%%% centered in the figure box.
+%%%
+%%% ---------------------------------------------
+%%% Revised by Nelson H. F. Beebe
+%%% <beebe@math.utah.edu>, 20 June 1993 [2.4].
+%%% Remove non-zero debug setting of \epsfframemargin,
+%%% and change margin handling to preserve EPS image
+%%% size and aspect ratio, so that the actual
+%%% box is \epsfxsize+\epsfframemargin wide by
+%%% \epsfysize+\epsfframemargin high.
+%%% Reduce output of \epsfshowfilenametrue to
+%%% just the bare file name.
+%%%
+%%% ---------------------------------------------
+%%% Revised by Nelson H. F. Beebe
+%%% <beebe@math.utah.edu>, 13 July 1993 [2.5].
+%%% Add \epsfframethickness for control of
+%%% \epsfframe frame lines.
+%%%
+%%% ---------------------------------------------
+%%% Revised by Nelson H. F. Beebe
+%%% <beebe@math.utah.edu>, 02 July 1996 [2.6]
+%%% Add missing initialization \epsfatendfalse;
+%%% the lack of this resulted in the wrong
+%%% BoundingBox being picked up, mea culpa, sigh...
+%%%
+%%% ---------------------------------------------
+%%% Revised by Nelson H. F. Beebe
+%%% <beebe@math.utah.edu>, 25 October 1996 [2.7]
+%%% Update to match changes in from dvips 5-600
+%%% distribution: new user-accessible macros:
+%%% \epsfclipon, \epsfclipoff, \epsfdrafton,
+%%% \epsfdraftoff, change \empty to \epsfempty.
+%%%
+%%% ---------------------------------------------
+%%% Revised by Nelson H. F. Beebe
+%%% <beebe@math.utah.edu>, 18 May 2002 [2.7.1]
+%%% Add write statements to echo input file
+%%% names. Prior to that change, an error in
+%%% such a file could be quite hard to track
+%%% down: a long list of TeX page numbers could
+%%% suddenly be followed by ``TeX buffer
+%%% capacity'' exceeded, without any indication
+%%% of the file that was responsible.
+%%%
+%%% ---------------------------------------------
+%%% Revised by Nelson H. F. Beebe
+%%% <beebe@math.utah.edu>, 16 May 2003 [2.7.2]
+%%% Supply two critical percent characters that
+%%% were mistakenly omitted in version 2.7.1,
+%%% and resulted in a small amount of spurious
+%%% horizontal space.
+%%%
+%%% ---------------------------------------------
+%%% Revised by Nelson H. F. Beebe
+%%% <beebe@math.utah.edu>, Karl Berry
+%%% <karl@freefriends.org>, and Robin Fairbairns
+%%% <Robin.Fairbairns@cl.cam.ac.uk>,
+%%% 23 July 2005 [2.7.3]
+%%% Add critical \hbox{} wrapper in \epsfsetgraph
+%%% so that \epsfbox{} does not conflict with
+%%% LaTeX center environment when \epsfbox{} is
+%%% surrounded by other horizonal objects.
+%%% Improve macro readability by adding legal,
+%%% but invisible-in-typeset-output, spaces.
+%%% Ensure that verbose status reports come
+%%% inside (filename ...) list.
+%%%
+%%% ---------------------------------------------
+%%% The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by
+%%% the equivalent of the standard UNIX wc
+%%% (word count) utility output of lines,
+%%% words, and characters. This is produced by
+%%% Robert Solovay's checksum utility.",
+%%% }
+%%% ====================================================================
+
+%\immediate \write16 {This is `epsf.tex' v2.0 <02 Dec 1991>}%
+%\immediate \write16 {This is `epsf.tex' v2.1 <05 May 1992>}%
+%\immediate \write16 {This is `epsf.tex' v2.2 <09 Dec 1992>}%
+%\immediate \write16 {This is `epsf.tex' v2.3 <14 Dec 1992>}%
+%\immediate \write16 {This is `epsf.tex' v2.4 <20 June 1993>}%
+%\immediate \write16 {This is `epsf.tex' v2.5 <13 July 1993>}%
+%\immediate \write16 {This is `epsf.tex' v2.6 <02 July 1996>}%
+%\immediate \write16 {This is `epsf.tex' v2.7 <25 October 1996>}%
+%\immediate \write16 {This is `epsf.tex' v2.7.1 <18 May 2002>}%
+%\immediate \write16 {This is `epsf.tex' v2.7.2 <16 May 2003>}%
+\immediate \write16 {This is `epsf.tex' v2.7.3 <23 July 2005>}%
+%
+\newread \epsffilein % file to \read
+\newif \ifepsfatend % need to scan to LAST %%BoundingBox comment?
+\newif \ifepsfbbfound % success?
+\newif \ifepsfdraft % use draft mode?
+\newif \ifepsffileok % continue looking for the bounding box?
+\newif \ifepsfframe % frame the bounding box?
+\newif \ifepsfshow % show PostScript file, or just bounding box?
+\epsfshowtrue % default is to display PostScript file
+\newif \ifepsfshowfilename % show the file name if \epsfshowfalse specified?
+\newif \ifepsfverbose % report what you're making?
+\newdimen \epsfframemargin % margin between box and frame
+\newdimen \epsfframethickness % thickness of frame rules
+\newdimen \epsfrsize % vertical size before scaling
+\newdimen \epsftmp % register for arithmetic manipulation
+\newdimen \epsftsize % horizontal size before scaling
+\newdimen \epsfxsize % horizontal size after scaling
+\newdimen \epsfysize % vertical size after scaling
+\newdimen \pspoints % conversion factor
+%
+\pspoints = 1bp % Adobe points are `big'
+\epsfxsize = 0pt % default value, means `use natural size'
+\epsfysize = 0pt % ditto
+\epsfframemargin = 0pt % default value: frame box flush around picture
+\epsfframethickness = 0.4pt % TeX's default rule thickness
+%
+\def \epsfbox #1{%
+ \global \def \epsfllx {72}%
+ \global \def \epsflly {72}%
+ \global \def \epsfurx {540}%
+ \global \def \epsfury {720}%
+ \def \lbracket {[}%
+ \def \testit {#1}%
+ \ifx \testit \lbracket
+ \let \next = \epsfgetlitbb
+ \else
+ \let \next = \epsfnormal
+ \fi
+ \next{#1}%
+}%
+%
+% We use \epsfgetlitbb if the user specified an explicit bounding box,
+% and \epsfnormal otherwise. Because \epsfgetbb can be called
+% separately to retrieve the bounding box, we move the verbose
+% printing the bounding box extents and size on the terminal to
+% \epsfstatus. Therefore, when the user provided the bounding box,
+% \epsfgetbb will not be called, so we must call \epsfsetsize and
+% \epsfstatus ourselves.
+%
+\def \epsfgetlitbb #1#2 #3 #4 #5]#6{%
+ \epsfgrab #2 #3 #4 #5 .\\%
+ \epsfsetsize
+ \epsfstatus{#6}%
+ \epsfsetgraph{#6}%
+}%
+%
+\def \epsfnormal #1{%
+ \epsfgetbb{#1}%
+ \epsfsetgraph{#1}%
+}%
+%
+\def \epsfgetbb #1{%
+%
+% The first thing we need to do is to open the
+% PostScript file, if possible.
+%
+ \openin\epsffilein=#1
+ \immediate \write16 {(#1}%
+ \ifeof \epsffilein
+ \errmessage{Could not open file #1, ignoring it}%
+ \else %process the file
+ {% %start a group to contain catcode changes
+ % Make all special characters, except space, to be of type
+ % `other' so we process the file in almost verbatim mode
+ % (TeXbook, p. 344).
+ \chardef \other = 12%
+ \def \do ##1{\catcode`##1=\other}%
+ \dospecials
+ \catcode `\ = 10%
+ \epsffileoktrue %true while we are looping
+ \epsfatendfalse %[02-Jul-1996]: add forgotten initialization
+ \loop %reading lines from the EPS file
+ \read \epsffilein to \epsffileline
+ \ifeof \epsffilein %then no more input
+ \epsffileokfalse %so set completion flag
+ \else %otherwise process one line
+ \expandafter \epsfaux \epsffileline :. \\%
+ \fi
+ \ifepsffileok
+ \repeat
+ \ifepsfbbfound
+ \else
+ \ifepsfverbose
+ \immediate \write16 {No BoundingBox comment found in %
+ file #1; using defaults}%
+ \fi
+ \fi
+ }% %end catcode changes
+ \closein\epsffilein
+ \fi %end of file processing
+ \epsfsetsize %compute size parameters
+ \epsfstatus{#1}%
+ \immediate \write16 {)}%
+}%
+%
+% Clipping control:
+\def \epsfclipon {\def \epsfclipstring { clip}}%
+\def \epsfclipoff {\def \epsfclipstring {\ifepsfdraft \space clip\fi}}%
+\epsfclipoff % default for dvips is OFF
+%
+% The special that is emitted by \epsfsetgraph comes from this macro.
+% It is defined separately to allow easy customization by other
+% packages that first \input epsf.tex, then redefine \epsfspecial.
+% This macro is invoked in the lower-left corner of a box of the
+% width and height determined from the arguments to \epsffile, or
+% from the %%BoundingBox in the EPS file itself.
+%
+% This version is for dvips:
+\def \epsfspecial #1{%
+ \epsftmp=10\epsfxsize
+ \divide \epsftmp by \pspoints
+ \ifnum \epsfrsize = 0%
+ \relax
+ \special{PSfile=\ifepsfdraft psdraft.ps\else#1\fi\space
+ llx=\epsfllx\space
+ lly=\epsflly\space
+ urx=\epsfurx\space
+ ury=\epsfury\space
+ rwi=\number\epsftmp
+ \epsfclipstring
+ }%
+ \else
+ \epsfrsize=10\epsfysize
+ \divide \epsfrsize by \pspoints
+ \special{PSfile=\ifepsfdraft psdraft.ps\else#1\fi\space
+ llx=\epsfllx\space
+ lly=\epsflly\space
+ urx=\epsfurx\space
+ ury=\epsfury\space
+ rwi=\number\epsftmp
+ rhi=\number\epsfrsize
+ \epsfclipstring
+ }%
+ \fi
+}%
+%
+% \epsfframe macro adapted from the TeXbook, exercise 21.3, p. 223, 331.
+% but modified to set the box width to the natural width, rather
+% than the line width, and to include space for margins and rules
+\def \epsfframe #1%
+{%
+ % method for detecting latex suggested by Robin Fairbairns, May 2005.
+ \ifx \documentstyle \epsfundefined
+ \relax
+ \else
+% \leavevmode % so we can put this inside
+ % a latex centered environment
+ % The \leavevmode breaks under plain when this is inside a box,
+ % because it forces the figure to be the entire \hsize. On the
+ % other hand, we need the \leavevmode for it to work in LaTeX,
+ % because the {center} environment works by adjusting TeX's
+ % paragraph parameters.
+ %
+ % Compare the LaTeX sequence
+ % \begin{center}
+ % \epsfbox{tip.eps}q
+ % \end{center}
+ % (needs the \leavevmode to put the q right next to the image)
+ %
+ % with the plain TeX sequence:
+ % \leftline{\vbox{\epsfbox{tip.eps}}q}
+ % (had the q all the way over to the right, when \leavevmode was used)
+ \fi
+ %
+ \setbox0 = \hbox{#1}%
+ \dimen0 = \wd0 % natural width of argument
+ \advance \dimen0 by 2\epsfframemargin % plus width of 2 margins
+ \advance \dimen0 by 2\epsfframethickness % plus width of 2 rule lines
+ \relax
+ \hbox{%
+ \vbox
+ {%
+ \hrule height \epsfframethickness depth 0pt
+ \hbox to \dimen0
+ {%
+ \hss
+ \vrule width \epsfframethickness
+ \kern \epsfframemargin
+ \vbox {\kern \epsfframemargin \box0 \kern \epsfframemargin }%
+ \kern \epsfframemargin
+ \vrule width \epsfframethickness
+ \hss
+ }% end hbox
+ \hrule height 0pt depth \epsfframethickness
+ }% end vbox
+ }% end hbox
+ \relax
+}%
+%
+\def \epsfsetgraph #1%
+{%
+ %
+ % Make the vbox and stick in a \special that the DVI driver can
+ % parse. \vfil and \hfil are used to place the \special origin at
+ % the lower-left corner of the vbox. \epsfspecial can be redefined
+ % to produce alternate \special syntaxes.
+ %
+ \ifvmode \leavevmode \fi
+ \relax
+ \hbox{% so we can put this in \begin{center}...\end{center}
+ \ifepsfframe \expandafter \epsfframe \fi
+ {\vbox to\epsfysize
+ {%
+ \ifepsfshow
+ % output \special{} at lower-left corner of figure box
+ \vfil
+ \hbox to \epsfxsize{\epsfspecial{#1}\hfil}%
+ \else
+ \vfil
+ \hbox to\epsfxsize{%
+ \hss
+ \ifepsfshowfilename
+ {%
+ \epsfframemargin=3pt % local change of margin
+ \epsfframe{{\tt #1}}%
+ }%
+ \fi
+ \hss
+ }%
+ \vfil
+ \fi
+ }%
+ }}%
+ \relax
+ %
+ % Reset \epsfxsize and \epsfysize, as documented above.
+ %
+ \global \epsfxsize = 0pt
+ \global \epsfysize = 0pt
+}%
+%
+% Now we have to calculate the scale and offset values to use.
+% First we compute the natural sizes.
+%
+\def \epsfsetsize
+{%
+ \epsfrsize = \epsfury \pspoints
+ \advance \epsfrsize by -\epsflly \pspoints
+ \epsftsize = \epsfurx \pspoints
+ \advance \epsftsize by -\epsfllx \pspoints
+%
+% If `epsfxsize' is 0, we default to the natural size of the picture.
+% Otherwise we scale the graph to be \epsfxsize wide.
+%
+ \epsfxsize = \epsfsize{\epsftsize}{\epsfrsize}%
+ \ifnum \epsfxsize = 0
+ \ifnum \epsfysize = 0
+ \epsfxsize = \epsftsize
+ \epsfysize = \epsfrsize
+ \epsfrsize = 0pt
+%
+% We have a sticky problem here: TeX doesn't do floating point arithmetic!
+% Our goal is to compute y = rx/t. The following loop does this reasonably
+% fast, with an error of at most about 16 sp (about 1/4000 pt).
+%
+ \else
+ \epsftmp = \epsftsize
+ \divide \epsftmp by \epsfrsize
+ \epsfxsize = \epsfysize
+ \multiply \epsfxsize by \epsftmp
+ \multiply \epsftmp by \epsfrsize
+ \advance \epsftsize by -\epsftmp
+ \epsftmp = \epsfysize
+ \loop
+ \advance \epsftsize by \epsftsize
+ \divide \epsftmp by 2
+ \ifnum \epsftmp > 0
+ \ifnum \epsftsize < \epsfrsize
+ \else
+ \advance \epsftsize -\epsfrsize
+ \advance \epsfxsize \epsftmp
+ \fi
+ \repeat
+ \epsfrsize = 0pt
+ \fi
+ \else
+ \ifnum \epsfysize = 0
+ \epsftmp = \epsfrsize
+ \divide \epsftmp by \epsftsize
+ \epsfysize = \epsfxsize
+ \multiply \epsfysize by \epsftmp
+ \multiply \epsftmp by \epsftsize
+ \advance \epsfrsize by -\epsftmp
+ \epsftmp = \epsfxsize
+ \loop
+ \advance \epsfrsize by \epsfrsize
+ \divide \epsftmp by 2
+ \ifnum \epsftmp > 0
+ \ifnum \epsfrsize < \epsftsize
+ \else
+ \advance \epsfrsize by -\epsftsize
+ \advance \epsfysize by \epsftmp
+ \fi
+ \repeat
+ \epsfrsize = 0pt
+ \else
+ \epsfrsize = \epsfysize
+ \fi
+ \fi
+}%
+%
+% Issue some status messages if the user requested them
+%
+\def \epsfstatus #1{% arg = filename
+ \ifepsfverbose
+ \immediate \write16 {#1: BoundingBox:
+ llx = \epsfllx \space lly = \epsflly \space
+ urx = \epsfurx \space ury = \epsfury \space}%
+ \immediate \write16 {#1: scaled width = \the\epsfxsize \space
+ scaled height = \the\epsfysize}%
+ \fi
+}%
+%
+% We still need to define the tricky \epsfaux macro. This requires
+% a couple of magic constants for comparison purposes.
+%
+{\catcode`\%=12 \global \let \epsfpercent=%\global \def \epsfbblit {%BoundingBox}}%
+\global \def \epsfatend{(atend)}%
+%
+% So we're ready to check for `%BoundingBox:' and to grab the
+% values if they are found.
+%
+% If we find a line
+%
+% %%BoundingBox: (atend)
+%
+% then we ignore it, but set a flag to force parsing all of the
+% file, so the last %%BoundingBox parsed will be the one used. This
+% is necessary, because EPS files can themselves contain other EPS
+% files with their own %%BoundingBox comments.
+%
+% If we find a line
+%
+% %%BoundingBox: llx lly urx ury
+%
+% then we save the 4 values in \epsfllx, \epsflly, \epsfurx, \epsfury.
+% Then, if we have not previously parsed an (atend), we flag completion
+% and can stop reading the file. Otherwise, we must keep on reading
+% to end of file so that we find the values on the LAST %%BoundingBox.
+\long \def \epsfaux#1#2:#3\\%
+{%
+ \def \testit {#2}% % save second character up to just before colon
+ \ifx#1\epsfpercent % then first char is percent (quick test)
+ \ifx \testit \epsfbblit % then (slow test) we have %%BoundingBox
+ \epsfgrab #3 . . . \\%
+ \ifx \epsfllx\epsfatend % then ignore %%BoundingBox: (atend)
+ \global \epsfatendtrue
+ \else % else found %%BoundingBox: llx lly urx ury
+ \ifepsfatend % then keep parsing ALL %%BoundingBox lines
+ \else % else stop after first one parsed
+ \epsffileokfalse
+ \fi
+ \global \epsfbbfoundtrue
+ \fi
+ \fi
+ \fi
+}%
+%
+% Here we grab the values and stuff them in the appropriate definitions.
+%
+\def \epsfempty {}%
+\def \epsfgrab #1 #2 #3 #4 #5\\{%
+ \global \def \epsfllx {#1}\ifx \epsfllx\epsfempty
+ \epsfgrab #2 #3 #4 #5 .\\\else
+ \global \def \epsflly {#2}%
+ \global \def \epsfurx {#3}\global \def \epsfury {#4}\fi
+}%
+%
+% We default the epsfsize macro.
+%
+\def \epsfsize #1#2{\epsfxsize}%
+%
+% Finally, another definition for compatibility with older macros.
+%
+\let \epsffile = \epsfbox
+\endinput
diff --git a/doc/fdl.texi b/doc/fdl.texi
new file mode 100644
index 0000000..7b93651
--- /dev/null
+++ b/doc/fdl.texi
@@ -0,0 +1,451 @@
+@c The GNU Free Documentation License.
+@center Version 1.2, November 2002
+
+@c This file is intended to be included within another document,
+@c hence no sectioning command or @node.
+
+@display
+Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc.
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+@end display
+
+@enumerate 0
+@item
+PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document @dfn{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.
+
+@item
+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
+@sc{ascii} without markup, Texinfo input format, La@TeX{} input
+format, @acronym{SGML} or @acronym{XML} using a publicly available
+@acronym{DTD}, and standard-conforming simple @acronym{HTML},
+PostScript or @acronym{PDF} designed for human modification. Examples
+of transparent image formats include @acronym{PNG}, @acronym{XCF} and
+@acronym{JPG}. Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, @acronym{SGML} or
+@acronym{XML} for which the @acronym{DTD} and/or processing tools are
+not generally available, and the machine-generated @acronym{HTML},
+PostScript or @acronym{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.
+
+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.
+
+@item
+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.
+
+@item
+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.
+
+@item
+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:
+
+@enumerate A
+@item
+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.
+
+@item
+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.
+
+@item
+State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+
+@item
+Preserve all the copyright notices of the Document.
+
+@item
+Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+
+@item
+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.
+
+@item
+Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+
+@item
+Include an unaltered copy of this License.
+
+@item
+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.
+
+@item
+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.
+
+@item
+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.
+
+@item
+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.
+
+@item
+Delete any section Entitled ``Endorsements''. Such a section
+may not be included in the Modified Version.
+
+@item
+Do not retitle any existing section to be Entitled ``Endorsements'' or
+to conflict in title with any Invariant Section.
+
+@item
+Preserve any Warranty Disclaimers.
+@end enumerate
+
+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.
+
+@item
+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.''
+
+@item
+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.
+
+@item
+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.
+
+@item
+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.
+
+@item
+TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License. Any other attempt to
+copy, modify, sublicense or distribute the Document is void, and will
+automatically terminate your rights under this License. However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+@item
+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
+@uref{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.
+@end enumerate
+
+@page
+@heading 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:
+
+@smallexample
+@group
+ Copyright (C) @var{year} @var{your name}.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.2
+ 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''.
+@end group
+@end smallexample
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the ``with@dots{}Texts.'' line with this:
+
+@smallexample
+@group
+ with the Invariant Sections being @var{list their titles}, with
+ the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
+ being @var{list}.
+@end group
+@end smallexample
+
+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.
+
+@c Local Variables:
+@c ispell-local-pdict: "ispell-dict"
+@c End:
+
diff --git a/doc/info-stnd.texi b/doc/info-stnd.texi
new file mode 100644
index 0000000..0fde962
--- /dev/null
+++ b/doc/info-stnd.texi
@@ -0,0 +1,2270 @@
+vb\input texinfo.tex @c -*-texinfo-*-
+@comment $Id: info-stnd.texi,v 1.24 2008/08/29 17:27:18 karl Exp $
+@c We must \input texinfo.tex instead of texinfo, otherwise make
+@c distcheck in the Texinfo distribution fails, because the texinfo Info
+@c file is made first, and texi2dvi must include . first in the path.
+@comment %**start of header
+@setfilename info-stnd.info
+@include version-stnd.texi
+@settitle GNU Info @value{VERSION}
+@syncodeindex vr cp
+@syncodeindex fn cp
+@syncodeindex ky cp
+@comment %**end of header
+
+@copying
+This manual is for GNU Info (version @value{VERSION}, @value{UPDATED}),
+a program for viewing documents in Info format (usually created from
+Texinfo source files).
+
+Copyright @copyright{} 1992, 1993, 1996, 1997, 1998, 1999, 2001, 2002,
+2003, 2004, 2005, 2006, 2007, 2008 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.2 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' in the Texinfo manual.
+
+(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
+
+This document is part of a collection distributed under the GNU Free
+Documentation License. If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
+@end copying
+
+@dircategory Texinfo documentation system
+@direntry
+* info standalone: (info-stnd). Read Info documents without Emacs.
+* infokey: (info-stnd)Invoking infokey. Compile Info customizations.
+@end direntry
+
+@titlepage
+@title GNU Info
+@subtitle for version @value{VERSION}, @value{UPDATED}
+@author Brian J. Fox
+@page
+@vskip 0pt plus 1filll
+@insertcopying
+@end titlepage
+
+@contents
+
+@ifnottex
+@node Top
+@top GNU Info
+
+If you do not know how to use Info, but have a working Info reader,
+you should read the Info manual before this one (@pxref{Top, Getting
+Started,,info, Info}), as it includes more background information and
+a thorough tutorial. This documentation describes the stand-alone Info
+reader that is part of the Texinfo distribution, not the Info reader
+that is part of GNU Emacs.
+@end ifnottex
+
+@menu
+* Stand-alone Info:: What is Info?
+* Invoking Info:: Options you can pass on the command line.
+* Cursor Commands:: Commands which move the cursor within a node.
+* Scrolling Commands:: Commands for reading the text within a node.
+* Node Commands:: Commands for selecting a new node.
+* Searching Commands:: Commands for searching an Info file.
+* Xref Commands:: Commands for selecting cross references.
+* Window Commands:: Commands which manipulate multiple windows.
+* Printing Nodes:: How to print out the contents of a node.
+* Miscellaneous Commands:: A few commands that defy categories.
+* Variables:: How to change the default behavior of Info.
+* Custom Key Bindings:: How to define your own key-to-command bindings.
+* Index:: Global index with keystrokes, command names,
+ variable names, and general concepts.
+@end menu
+
+
+@node Stand-alone Info
+@chapter Stand-alone Info
+
+The @dfn{Info} program is a stand-alone program, part of the Texinfo
+distribution, which is used to view Info files on an ASCII terminal.
+@dfn{Info files} are typically the result of processing Texinfo files
+with the program @code{makeinfo} (also in the Texinfo distribution)
+
+Texinfo itself is a documentation system that uses a single source
+file to produce both on-line information and printed output. You can
+typeset and print the files that you read in Info.
+
+GNU Emacs also provides an Info reader (just type @kbd{M-x info} in
+Emacs). Emacs Info and stand-alone Info have nearly identical user
+interfaces, although customization and other details are different
+(this manual explains the stand-alone Info reader). The Emacs Info
+reader supports the X Window System and other such bitmapped
+interfaces, not just plain ASCII, so if you want the prettiest
+display for Info files, you should try it. You can use Emacs Info
+without using Emacs for anything else. (Type @kbd{C-x C-c} to exit;
+this also works in the stand-alone Info reader.)
+
+
+@node Invoking Info
+@chapter Invoking Info
+
+@cindex Info, invoking
+@cindex invoking Info
+@cindex command line options
+@cindex options, command line
+@cindex arguments, command line
+
+GNU Info accepts several options to control the initial node being
+viewed, and to specify which directories to search for Info files. Here
+is a template showing an invocation of GNU Info from the shell:
+
+@example
+info [@var{option}]@dots{} [@var{menu-item}@dots{}]
+@end example
+
+The program accepts the following options:
+
+@table @code
+@anchor{--apropos}
+@item --apropos=@var{string}
+@itemx -k @var{string}
+@cindex Searching all indices
+@cindex Info files@r{, searching all indices}
+@cindex Apropos@r{, in Info files}
+Specify a string to search in every index of every Info file installed
+on your system. Info looks up the named @var{string} in all the
+indices it can find, prints the results to standard output, and then
+exits. If you are not sure which Info file explains certain issues,
+this option is your friend. (If your system has a lot of Info files
+installed, searching all of them might take some time!)
+
+You can invoke the apropos command from inside Info; see
+@ref{Searching Commands}.
+
+@cindex directory path
+@item --directory @var{directory-path}
+@itemx -d @var{directory-path}
+Prepend @var{directory-path} to the list of directory paths searched
+when Info needs to find a file. You may issue @code{--directory}
+multiple times; once for each directory which contains Info files. The
+list of directories searched by Info is constructed from the value of
+the environment variable @code{INFOPATH}; @code{--directory} causes the
+named @var{directory-path} to be prepended to that list. The value of
+@code{INFOPATH} is a list of directories usually separated by a colon;
+on MS-DOS/MS-Windows systems, the semicolon is used. If you do not
+define @code{INFOPATH}, Info uses a default path defined when Info was
+built as the initial list of directories. If the value of
+@code{INFOPATH} ends with a colon (or semicolon on MS-DOS/MS-Windows),
+the initial list of directories is constructed by appending the
+build-time default to the value of @code{INFOPATH}.
+
+@cindex keystrokes, recording
+@cindex remembering user keystrokes
+@item --dribble=@var{dribble-file}
+Specify a file where all user keystrokes will be recorded. This file
+can be used later to replay the same sequence of commands, see the
+@samp{--restore} option below.
+
+@item --file @var{filename}
+@itemx -f @var{filename}
+@cindex Info file, selecting
+Specify a particular Info file to visit. By default, Info visits
+the file @code{dir}; if you use this option, Info will start with
+@code{(@var{filename})Top} as the first file and node.
+
+@cindex relative Info file names
+@cindex file names, relative
+@cindex Info files, relative
+If @var{filename} is an absolute file name, or begins with @file{./} or
+@file{../}, Info looks for @var{filename} only in the directory of the
+specified @var{filename}, and adds the directory of @var{filename} to
+the value of @code{INFOPATH}. In contrast, if @var{filename} is in the
+form of a relative file name, but without the @file{./} or @file{../}
+prefix, Info will only look for it in the directories specified in
+@code{INFOPATH}. In other words, Info does @emph{not} treat file names
+which lack @file{./} and @file{../} prefix as relative to the current
+directory.
+
+@cindex compressed Info files
+@cindex files, compressed
+@cindex Info files, compressed
+In every directory Info tries, if @var{filename} is not found, Info
+looks for it with a number of known extensions of Info files@footnote{
+@file{.info}, @file{-info}, @file{/index}, and @file{.inf}.}. For every
+known extension, Info looks for a compressed file, if a regular file
+isn't found. Info supports files compressed with @code{gzip},
+@code{bzip2}, @code{compress} and @code{yabba} programs; it calls
+@code{gunzip}, @code{bunzip2}, @code{uncompress} and @code{unyabba},
+accordingly, to decompress such files. Compressed Info files are
+assumed to have @file{.z}, @file{.gz}, @file{.bz2}, @file{.Z}, or
+@file{.Y} extensions, possibly in addition to one of the known Info
+files extensions@footnote{The MS-DOS version allows for the Info
+extension, such as @code{.inf}, and the short compressed file
+extensions, such as @file{.z} and @file{.gz}, to be merged into a single
+extension, since DOS doesn't allow more than a single dot in the
+basename of a file. Thus, on MS-DOS, if Info looks for @file{bison},
+file names like @file{bison.igz} and @file{bison.inz} will be found and
+decompressed by @code{gunzip}.}.
+
+@item --help
+@itemx -h
+Produces a relatively brief description of the available Info options.
+
+@item --index-search @var{string}
+@cindex index search, selecting from the command line
+@cindex online help, using Info as
+After processing all command-line arguments, go to the index in the Info
+file and search for index entries which match @var{string}. If such an
+entry is found, the Info session begins with displaying the node pointed
+to by the first matching index entry; press @kbd{,} to step through the
+rest of the matching entries. If no such entry exists, print @samp{no
+entries found} and exit with nonzero status. This can be used from
+another program as a way to provide online help, or as a quick way of
+starting to read an Info file at a certain node when you don't know the
+exact name of that node.
+
+This command can also be invoked from inside Info; see @ref{Searching
+Commands}.
+
+@item --node @var{nodename}
+@itemx -n @var{nodename}
+@cindex node, selecting from the command line
+Specify a particular node to visit in the initial file that Info
+loads. This is especially useful in conjunction with
+@code{--file}@footnote{Of course, you can specify both the file and node
+in a @code{--node} command; but don't forget to escape the open and
+close parentheses and whitespace from the shell as in: @code{info --node
+"(emacs)Buffers"}.}. You may specify @code{--node} multiple times; for
+an interactive Info, each @var{nodename} is visited in its own window,
+for a non-interactive Info (such as when @code{--output} is given) each
+@var{nodename} is processed sequentially.
+
+@item --output @var{filename}
+@itemx -o @var{filename}
+@cindex file, outputting to
+@cindex outputting to a file
+Specify @var{filename} as the name of a file to which to direct output.
+Each node that Info visits will be output to @var{filename} instead of
+interactively viewed. A value of @code{-} for @var{filename} specifies
+the standard output.
+
+@cindex colors in documents
+@cindex ANSI escape sequences in documents
+@item --raw-escapes
+@itemx --no-raw-escapes
+@itemx -R
+Do not remove ANSI escape sequences from documents. Some versions of
+Groff, the GNU document formatter, produce man pages with ANSI escape
+sequences for bold, italics, and underlined characters, and for
+colorized text. By default, Info lets those escape sequences pass
+through directly to the terminal. If your terminal does not support
+these escapes, use @code{--no-raw-escapes} to make Info remove them.
+
+@cindex replaying recorded keystrokes
+@item --restore=@var{dribble-file}
+Read keystrokes from @var{dribble-file}, presumably recorded during
+previous Info session (see the description of the @samp{--dribble}
+option above). When the keystrokes in the files are all read, Info
+reverts its input to the usual interactive operation.
+
+@item --show-malformed-multibytes
+@itemx --no-show-malformed-multibytes
+ Show malformed multibyte sequences in the output. By default, such
+sequences are dropped.
+
+@anchor{--show-options}
+@cindex command-line options, how to find
+@cindex invocation description, how to find
+@item --show-options
+@itemx --usage
+@itemx -O
+This option causes Info to look for the node that describes how to
+invoke the program and its command-line options, and begin the session
+by displaying that node. It is provided to make it easier to find the
+most important usage information in a manual without the need to wade
+through complex menu hierarchies. The effect is similar to the
+@code{M-x goto-invocation} command (@pxref{goto-invocation}) from inside
+Info.
+
+@cindex speech synthesizers
+@item --speech-friendly
+@itemx -b
+On MS-DOS/MS-Windows only, this option causes Info to use standard file
+I/O functions for screen writes. (By default, Info uses direct writes
+to the video memory on these systems, for faster operation and colored
+display support.) This allows the speech synthesizers used by blind
+persons to catch the output and convert it to audible speech.
+
+@item --subnodes
+@cindex @code{--subnodes}, command line option
+This option only has meaning when given in conjunction with
+@code{--output}. It means to recursively output the nodes appearing in
+the menus of each node being output. Menu items which resolve to
+external Info files are not output, and neither are menu items which are
+members of an index. Each node is only output once.
+
+@item --version
+@cindex version information
+Prints the version information of Info and exits.
+
+@anchor{--vi-keys}
+@cindex vi-like key bindings
+@cindex Less-like key bindings
+@item --vi-keys
+This option binds functions to keys differently, to emulate the key
+bindings of @code{vi} and Less. The default key bindings are generally
+modeled after Emacs.
+(@xref{Custom Key Bindings},
+for a more general way of altering GNU Info's key bindings.)
+
+@cindex Info manual location
+@cindex Where is an Info manual?
+@item --where
+@itemx --location
+@itemx -w
+Show the filename that would be read and exit, instead of actually
+reading it and starting Info.
+
+@item @var{menu-item}
+@cindex menu, following
+@anchor{command-line menu items}
+Info treats its remaining arguments as the names of menu items. The
+first argument is a menu item in the initial node visited (generally
+@code{dir}), the second argument is a menu item in the first argument's
+node, etc. You can easily move to the node of your choice by specifying
+the menu names which describe the path to that node. For example,
+
+@example
+info emacs buffers
+@end example
+
+@noindent
+first selects the menu item @samp{Emacs} in the node @samp{(dir)Top},
+and then selects the menu item @samp{Buffers} in the node
+@samp{(emacs)Top}.
+@end table
+
+To avoid searching the @file{dir} files and just show some arbitrary
+file, use @samp{-f} and the filename, as in @samp{info -f ./foo.info}.
+
+The index search and the search for the node which describes program
+invocation and command-line options begins @emph{after} processing all
+the command-line menu items. Therefore, the Info file searched for the
+index or the invocation node is the file where Info finds itself after
+following all the menu items given on the command line. This is so
+@samp{info emacs --show-options} does what you'd expect.
+
+Finally, Info defines many default key bindings and variables.
+@xref{Custom Key Bindings}, for information on how to customize these
+settings.
+
+@c FIXME: the feature with lowercasing the file name isn't documented
+
+
+@node Cursor Commands
+@chapter Moving the Cursor
+@cindex cursor, moving
+@cindex moving the cursor
+
+Many people find that reading screens of text page by page is made
+easier when one is able to indicate particular pieces of text with
+some kind of pointing device. Since this is the case, GNU Info (both
+the Emacs and stand-alone versions) have several commands which allow
+you to move the cursor about the screen. The notation used in this
+manual to describe keystrokes is identical to the notation used within
+the Emacs manual, and the GNU Readline manual. @xref{User Input,,,
+emacs, The GNU Emacs Manual}, if you are unfamiliar with the
+notation.@footnote{Here's a short summary. @kbd{C-@var{x}} means
+press the @kbd{CTRL} key and the key @var{x}. @kbd{M-@var{x}} means
+press the @kbd{META} key and the key @var{x}. On many terminals th
+@kbd{META} key is known as the @kbd{ALT} key. @kbd{SPC} is the space
+bar. The other keys are usually called by the names imprinted on
+them.}
+
+The following table lists the basic cursor movement commands in Info.
+Each entry consists of the key sequence you should type to execute the
+cursor movement, the @code{M-x}@footnote{@code{M-x} is also a command; it
+invokes @code{execute-extended-command}. @xref{M-x, , Executing an
+extended command, emacs, The GNU Emacs Manual}, for more detailed
+information.} command name (displayed in parentheses), and a short
+description of what the command does. All of the cursor motion commands
+can take a @dfn{numeric} argument (see @ref{Miscellaneous Commands,
+@code{universal-argument}, to find out how to supply them}. With a
+numeric argument, the motion commands are simply executed that
+many times; for example, a numeric argument of 4 given to
+@code{next-line} causes the cursor to move down 4 lines. With a
+negative numeric argument, the motion is reversed; an argument of -4
+given to the @code{next-line} command would cause the cursor to move
+@emph{up} 4 lines.
+
+@table @asis
+@item @kbd{C-n} (@code{next-line})
+@itemx @key{DOWN} (an arrow key)
+@kindex C-n
+@kindex DOWN (an arrow key)
+@findex next-line
+Move the cursor down to the next line.
+
+@item @kbd{C-p} (@code{prev-line})
+@itemx @key{UP} (an arrow key)
+@kindex C-p
+@kindex UP (an arrow key)
+@findex prev-line
+Move the cursor up to the previous line.
+
+@item @kbd{C-a} (@code{beginning-of-line})
+@itemx @key{Home} (on DOS/Windows only)
+@kindex C-a, in Info windows
+@kindex Home
+@findex beginning-of-line
+Move the cursor to the start of the current line.
+
+@item @kbd{C-e} (@code{end-of-line})
+@itemx @key{End} (on DOS/Windows only)
+@kindex C-e, in Info windows
+@kindex End
+@findex end-of-line
+Move the cursor to the end of the current line.
+
+@item @kbd{C-f} (@code{forward-char})
+@itemx @key{RIGHT} (an arrow key)
+@kindex C-f, in Info windows
+@kindex RIGHT (an arrow key)
+@findex forward-char
+Move the cursor forward a character.
+
+@item @kbd{C-b} (@code{backward-char})
+@itemx @key{LEFT} (an arrow key)
+@kindex C-b, in Info windows
+@kindex LEFT (an arrow key)
+@findex backward-char
+Move the cursor backward a character.
+
+@item @kbd{M-f} (@code{forward-word})
+@itemx @kbd{C-@key{RIGHT}} (on DOS/Windows only)
+@kindex M-f, in Info windows
+@kindex C-RIGHT
+@findex forward-word
+Move the cursor forward a word.
+
+@item @kbd{M-b} (@code{backward-word})
+@itemx @kbd{C-@key{LEFT}} (on DOS/Windows only)
+@kindex M-b, in Info windows
+@kindex C-LEFT
+@findex backward-word
+Move the cursor backward a word.
+
+@item @kbd{M-<} (@code{beginning-of-node})
+@itemx @kbd{C-@key{Home}} (on DOS/Windows only)
+@itemx @kbd{b}
+@itemx @kbd{M-b}, vi-like operation
+@kindex b, in Info windows
+@kindex M-<
+@kindex C-Home
+@kindex M-b, vi-like operation
+@findex beginning-of-node
+Move the cursor to the start of the current node.
+
+@item @kbd{M->} (@code{end-of-node})
+@itemx @kbd{C-@key{End}} (on DOS/Windows only)
+@itemx @kbd{e}
+@kindex M->
+@kindex e, in Info windows
+@kindex C-End
+@findex end-of-node
+Move the cursor to the end of the current node.
+
+@item @kbd{M-r} (@code{move-to-window-line})
+@kindex M-r
+@findex move-to-window-line
+Move the cursor to a specific line of the window. Without a numeric
+argument, @code{M-r} moves the cursor to the start of the line in the
+center of the window. With a numeric argument of @var{n}, @code{M-r}
+moves the cursor to the start of the @var{n}th line in the window.
+@end table
+
+
+@node Scrolling Commands
+@chapter Moving Text Within a Window
+@cindex scrolling
+
+Sometimes you are looking at a screenful of text, and only part of the
+current paragraph you are reading is visible on the screen. The
+commands detailed in this section are used to shift which part of the
+current node is visible on the screen.
+
+Scrolling commands are bound differently when @samp{--vi-keys}
+operation is in effect (@pxref{--vi-keys}). These key bindings are
+designated with ``vi-like operation''. @xref{Custom Key Bindings},
+for information on arbitrarily customizing key bindings and variable
+settings.
+
+@table @asis
+@item @key{SPC} (@code{scroll-forward})
+@kindex SPC, in Info windows
+@findex scroll-forward
+Shift the text in this window up. That is, show more of the node which
+is currently below the bottom of the window. With a numeric argument,
+show that many more lines at the bottom of the window; a numeric
+argument of 4 would shift all of the text in the window up 4 lines
+(discarding the top 4 lines), and show you four new lines at the bottom
+of the window. Without a numeric argument, @key{SPC} takes the bottom
+two lines of the window and places them at the top of the window,
+redisplaying almost a completely new screenful of lines. If you are at
+the end of a node, @key{SPC} takes you to the ``next'' node, so that you can
+read an entire manual from start to finish by repeating @key{SPC}.
+
+The default scroll size is one screen-full, but it can be changed by
+invoking the (@code{scroll-forward-page-only-set-window}) command,
+@samp{z} under @samp{--vi-keys}, with a numeric argument.
+
+@item @key{NEXT} (an arrow key) (@code{scroll-forward-page-only})
+@itemx @kbd{C-v}
+@itemx @kbd{C-f}, vi-like operation
+@itemx @kbd{f}, vi-like operation
+@itemx @kbd{M-SPC}, vi-like operation
+@kindex NEXT
+@kindex C-v
+@kindex C-f, vi-like operation
+@kindex f, vi-like operation
+@kindex M-SPC, vi-like operation
+@findex scroll-forward-page-only
+Shift the text in this window up. This is identical to the @key{SPC}
+operation above, except that it never scrolls beyond the end of the
+current node.
+
+@kindex PageDown
+The @key{NEXT} key is known as the @key{PageDown} key on some
+keyboards.
+
+@item @kbd{z} (@code{scroll-forward-page-only-set-window}, vi-like operation)
+@kindex z, vi-like operation
+@findex scroll-forward-page-only-set-window
+Scroll forward, like with @key{NEXT}, but if a numeric argument is
+specified, it becomes the default scroll size for subsequent
+@code{scroll-forward} and @code{scroll-backward} commands and their
+ilk.
+
+@item @key{DEL} (@code{scroll-backward})
+@kindex DEL, in Info windows
+@findex scroll-backward
+Shift the text in this window down. The inverse of
+@code{scroll-forward}.
+If you are at the start of a node, @key{DEL} takes you to the
+``previous'' node, so that you can read an entire manual from finish to
+start by repeating @key{DEL}. The default scroll size can be changed by
+invoking the (@code{scroll-backward-page-only-set-window}) command,
+@samp{w} under @samp{--vi-keys}, with a numeric argument.
+
+@itemx @key{PREVIOUS} (arrow key) (@code{scroll-backward-page-only})
+@itemx @key{PRIOR} (arrow key)
+@itemx @kbd{M-v}
+@itemx @kbd{b}, vi-like operation
+@itemx @kbd{C-b}, vi-like operation
+@kindex PREVIOUS
+@kindex M-v
+@kindex b, vi-like operation
+@kindex C-b, vi-like operation
+@findex scroll-backward-page-only
+Shift the text in this window down. The inverse of
+@code{scroll-forward-page-only}. Does not scroll beyond the start of
+the current node. The default scroll size can be changed by invoking
+the(@code{scroll-backward-page-only-set-window}) command, @samp{w} under
+@samp{--vi-keys}, with a numeric argument.
+
+@item @kbd{w} (@code{scroll-backward-page-only-set-window}, vi-like operation)
+@kindex w, vi-like operation
+@findex scroll-backward-page-only-set-window
+Scroll backward, like with @key{PREVIOUS}, but if a numeric argument is
+specified, it becomes the default scroll size for subsequent
+@code{scroll-forward} and @code{scroll-backward} commands.
+
+@item @kbd{C-n} (@code{down-line}, vi-like operation)
+@itemx @kbd{C-e}, vi-like operation
+@itemx @key{RET}, vi-like operation
+@itemx @key{LFD}, vi-like operation
+@itemx @key{DOWN}, vi-like operation
+@kindex C-n, vi-like operation
+@kindex C-e, vi-like operation
+@kindex RET, vi-like operation
+@kindex LFD, vi-like operation
+@kindex DOWN, vi-like operation
+@findex down-line
+Scroll forward by one line. With a numeric argument, scroll forward
+that many lines.
+
+@item @kbd{C-p} (@code{up-line}, vi-like operation)
+@itemx @key{UP}, vi-like operation
+@itemx @kbd{y}, vi-like operation
+@itemx @kbd{k}, vi-like operation
+@itemx @kbd{C-k}, vi-like operation
+@itemx @kbd{C-y}, vi-like operation
+@kindex C-p, vi-like operation
+@kindex UP, vi-like operation
+@kindex y, vi-like operation
+@kindex k, vi-like operation
+@kindex C-k, vi-like operation
+@kindex C-y, vi-like operation
+@findex up-line
+Scroll backward one line. With a numeric argument, scroll backward that
+many lines.
+
+@item @kbd{d} (@code{scroll-half-screen-down}, vi-like operation)
+@itemx @kbd{C-d}, vi-like operation
+@kindex d, vi-like operation
+@kindex C-d, vi-like operation
+@findex scroll-half-screen-down
+Scroll forward by half of the screen size. With a numeric argument,
+scroll that many lines. If an argument is specified, it becomes the new
+default number of lines to scroll for subsequent @samp{d} and @samp{u}
+commands.
+
+@item @kbd{u} (@code{scroll-half-screen-up}, vi-like operation)
+@itemx @kbd{C-u}, vi-like operation
+@kindex u, vi-like operation
+@kindex C-u, vi-like operation
+@findex scroll-half-screen-up
+Scroll back by half of the screen size. With a numeric argument,
+scroll that many lines. If an argument is specified, it becomes the new
+default number of lines to scroll for subsequent @samp{u} and @samp{d}
+commands.
+@end table
+
+@cindex scrolling through node structure
+The @code{scroll-forward} and @code{scroll-backward} commands can also
+move forward and backward through the node structure of the file. If
+you press @key{SPC} while viewing the end of a node, or @key{DEL} while
+viewing the beginning of a node, what happens is controlled by the
+variable @code{scroll-behavior} (@pxref{scroll-behavior}).
+
+The @code{scroll-forward-page-only} and @code{scroll-backward-page-only}
+commands never scroll beyond the current node.
+
+@kindex PageUp
+The @key{PREVIOUS} key is the @key{PageUp} key on many keyboards. Emacs
+refers to it by the name @key{PRIOR}. When you use @key{PRIOR} or
+@key{PageUp} to scroll, Info never scrolls beyond the beginning of the
+current node.
+
+@kindex BS (backspace)
+If your keyboard lacks the @key{DEL} key, look for a key called
+@key{BS}, or @samp{Backspace}, sometimes designated with an arrow which
+points to the left, which should perform the same function.
+
+@table @asis
+@item @kbd{C-l} (@code{redraw-display})
+@kindex C-l
+@findex redraw-display
+Redraw the display from scratch, or shift the line containing the cursor
+to a specified location. With no numeric argument, @samp{C-l} clears
+the screen, and then redraws its entire contents. Given a numeric
+argument of @var{n}, the line containing the cursor is shifted so that
+it is on the @var{n}th line of the window.
+
+@item @kbd{C-x @kbd{w}} (@code{toggle-wrap})
+@kindex C-w
+@findex toggle-wrap
+Toggles the state of line wrapping in the current window. Normally,
+lines which are longer than the screen width @dfn{wrap}, i.e., they are
+continued on the next line. Lines which wrap have a @samp{\} appearing
+in the rightmost column of the screen. You can cause such lines to be
+terminated at the rightmost column by changing the state of line
+wrapping in the window with @code{C-x w}. When a line which needs more
+space than one screen width to display is displayed, a @samp{$} appears
+in the rightmost column of the screen, and the remainder of the line is
+invisible. When long lines are truncated, the modeline displays the
+@samp{$} character near its left edge.
+@end table
+
+
+@node Node Commands
+@chapter Selecting a Node
+@cindex nodes, selection of
+
+This section details the numerous Info commands which select a new node
+to view in the current window.
+
+The most basic node commands are @samp{n}, @samp{p}, @samp{u}, and
+@samp{l}. Note that the commands to select nodes are mapped differently
+when @samp{--vi-keys} is in effect; these keybindings are designated
+below as ``vi-like operation''.
+
+When you are viewing a node, the top line of the node contains some Info
+@dfn{pointers} which describe where the next, previous, and up nodes
+are. Info uses this line to move about the node structure of the file
+when you use the following commands:
+
+@table @asis
+@item @kbd{n} (@code{next-node})
+@itemx @kbd{C-@key{NEXT}} (on DOS/Windows only)
+@itemx @kbd{C-x @kbd{n}}, vi-like operation
+@kindex n
+@kindex C-NEXT
+@kindex C-x n, vi-like operation
+@findex next-node
+Select the `Next' node.
+
+@kindex C-PgDn
+The @key{NEXT} key is known as the @key{PgDn} key on some
+keyboards.
+
+@item @kbd{p} (@code{prev-node})
+@itemx @kbd{C-@key{PREVIOUS}} (on DOS/Windows only)
+@kindex p
+@kindex C-PREVIOUS
+@findex prev-node
+Select the `Prev' node.
+
+@kindex C-PgUp
+The @key{PREVIOUS} key is known as the @key{PgUp} key on some
+keyboards.
+
+@item @kbd{u} (@code{up-node})
+@itemx @kbd{C-@key{UP}} (an arrow key on DOS/Windows only)
+@itemx @kbd{C-x @kbd{u}}, vi-like operation
+@kindex u
+@kindex C-UP
+@kindex C-x u, vi-like operation
+@findex up-node
+Select the `Up' node.
+@end table
+
+You can easily select a node that you have already viewed in this window
+by using the @samp{l} command---this name stands for ``last'', and
+actually moves backwards through the history of visited nodes for this
+window. This is handy when you followed a reference to another node,
+possibly to read about a related issue, and would like then to resume
+reading at the same place where you started the excursion.
+
+Each node where you press @samp{l} is discarded from the history. Thus,
+by the time you get to the first node you visited in a window, the
+entire history of that window is discarded.
+
+@table @asis
+@item @kbd{l} (@code{history-node})
+@itemx @kbd{C-@key{CENTER}} (on DOS/Windows only)
+@itemx @kbd{'}, vi-like operation
+@kindex l
+@kindex C-CENTER
+@kindex ', vi-like operation
+@findex history-node
+Pop the most recently selected node in this window from the node
+history.
+@end table
+
+Two additional commands make it easy to select the most commonly
+selected nodes; they are @samp{t} and @samp{d}.
+
+@table @asis
+@item @kbd{t} (@code{top-node})
+@itemx @kbd{M-t}, vi-like operation
+@kindex t
+@kindex M-t, vi-like operation
+@findex top-node
+Select the node @samp{Top} in the current Info file.
+
+@item @kbd{d} (@code{dir-node})
+@itemx @kbd{M-d}, vi-like operation
+@kindex d
+@kindex M-d, vi-like operation
+@findex dir-node
+Select the directory node (i.e., the node @samp{(dir)}).
+@end table
+
+Here are some other commands which immediately result in the selection
+of a different node in the current window:
+
+@table @asis
+@item @kbd{<} (@code{first-node})
+@itemx @kbd{g}, vi-like operation
+@kindex <
+@kindex g, vi-like operation
+@findex first-node
+Selects the first node which appears in this file. This node is most
+often @samp{Top}, but it does not have to be. With a numeric argument
+@var{N}, select the @var{N}th node (the first node is node 1). An
+argument of zero is the same as the argument of 1.
+
+@item @kbd{>} (@code{last-node})
+@itemx @kbd{G}, vi-like operation
+@kindex >
+@kindex G, vi-like operation
+@findex last-node
+Select the last node which appears in this file. With a numeric argument
+@var{N}, select the @var{N}th node (the first node is node 1). An
+argument of zero is the same as no argument, i.e., it selects the last
+node.
+
+@item @kbd{]} (@code{global-next-node})
+@kindex ]
+@findex global-next-node
+Move forward or down through node structure. If the node that you are
+currently viewing has a @samp{Next} pointer, that node is selected.
+Otherwise, if this node has a menu, the first menu item is selected. If
+there is no @samp{Next} and no menu, the same process is tried with the
+@samp{Up} node of this node.
+
+@item @kbd{[} (@code{global-prev-node})
+@kindex [
+@findex global-prev-node
+Move backward or up through node structure. If the node that you are
+currently viewing has a @samp{Prev} pointer, that node is selected.
+Otherwise, if the node has an @samp{Up} pointer, that node is selected,
+and if it has a menu, the last item in the menu is selected.
+@end table
+
+You can get the same behavior as @code{global-next-node} and
+@code{global-prev-node} while simply scrolling through the file with
+@key{SPC} and @key{DEL} (@pxref{scroll-behavior}).
+
+@table @asis
+@anchor{goto-node}
+@item @kbd{g} (@code{goto-node})
+@itemx @kbd{C-x @kbd{g}}, vi-like operation
+@kindex g
+@kindex C-x g, vi-like operation
+@findex goto-node
+Read the name of a node and select it. While reading the node name,
+completion (@pxref{The Echo Area, completion}) is only done for the
+nodes which reside in one of the Info files that were loaded in the
+current Info session; if the desired node resides in some other file,
+you must type the node exactly as it appears in that Info file, and you
+must include the Info file of the other file. For example,
+
+@example
+@code{g(emacs)Buffers}
+@end example
+
+finds the node @samp{Buffers} in the Info file @file{emacs}.
+
+@anchor{goto-invocation}
+@item @kbd{O} (@code{goto-invocation}
+@itemx @kbd{I}
+@kindex O
+@kindex I
+@findex goto-invocation
+@cindex finding the Invocation node
+Read the name of a program and look for a node in the current Info file
+which describes the invocation and the command-line options for that
+program. The default program name is derived from the name of the
+current Info file. This command does the same as the
+@samp{--show-options} command-line option (@pxref{--show-options}), but
+it also allows to specify the program name; this is important for those
+manuals which describe several programs.
+
+If you need to find the Invocation node of a program that is documented
+in another Info file, you need to visit that file before invoking
+@samp{I}. For example, if you are reading the Emacs manual and want to
+see the command-line options of the @code{makeinfo} program, type @kbd{g
+(texinfo) @key{RET}} and then @kbd{I makeinfo @key{RET}}. If you don't
+know what Info file documents the command, or if invoking @samp{I}
+doesn't display the right node, go to the @samp{(dir)} node (using the
+@samp{d} command) and invoke @samp{I} from there.
+
+@item @kbd{G} (@code{menu-sequence})
+@kindex G
+@findex menu-sequence
+@cindex menu, following, from inside Info
+Read a sequence of menu entries and follow it. Info prompts for a
+sequence of menu items separated by commas. (Since commas are not
+allowed in a node name, they are a natural choice for a delimiter in a
+list of menu items.) Info then looks up the first item in the menu of
+the node @samp{(dir)} (if the @samp{(dir)} node cannot be found, Info
+uses @samp{Top}). If such an entry is found, Info goes to the node it
+points to and looks up the second item in the menu of that node, etc.
+In other words, you can specify a complete path which descends through
+the menu hierarchy of a particular Info file starting at the
+@samp{(dir)} node. This has the same effect as if you typed the menu
+item sequence on Info's command line, see @ref{command-line menu items,,
+Info command-line arguments processing}. For example,
+
+@example
+ @kbd{G Texinfo,Overview,Reporting Bugs @key{RET}}
+@end example
+
+@noindent
+displays the node @samp{Reporting Bugs} in the Texinfo manual. (You
+don't actually need to type the menu items in their full length, or in
+their exact letter-case. However, if you do type the menu items
+exactly, Info will find it faster.)
+
+If any of the menu items you type are not found, Info stops at the last
+entry it did find and reports an error.
+
+@item @kbd{C-x @kbd{k}} (@code{kill-node})
+@kindex C-x k
+@findex kill-node
+Kill a node. The node name is prompted for in the echo area, with a
+default of the current node. @dfn{Killing} a node means that Info tries
+hard to forget about it, removing it from the list of history nodes kept
+for the window where that node is found. Another node is selected in
+the window which contained the killed node.
+
+@item @kbd{C-x C-f} (@code{view-file})
+@kindex C-x C-f
+@findex view-file
+Read the name of a file and selects the entire file. The command
+@example
+@code{C-x C-f @var{filename}}
+@end example
+is equivalent to typing
+@example
+@code{g(@var{filename})*}
+@end example
+
+@item @kbd{C-x C-b} (@code{list-visited-nodes})
+@kindex C-x C-b
+@findex list-visited-nodes
+Make a window containing a menu of all of the currently visited nodes.
+This window becomes the selected window, and you may use the standard
+Info commands within it.
+
+@item @kbd{C-x @kbd{b}} (@code{select-visited-node})
+@kindex C-x b
+@findex select-visited-node
+Select a node which has been previously visited in a visible window.
+This is similar to @samp{C-x C-b} followed by @samp{m}, but no window is
+created.
+@end table
+
+
+@node Searching Commands
+@chapter Searching an Info File
+@cindex searching
+
+GNU Info allows you to search for a sequence of characters throughout an
+entire Info file, search through the indices of an Info file, or find
+areas within an Info file which discuss a particular topic.
+
+@table @asis
+@item @kbd{s} (@code{search})
+@itemx @kbd{/}
+@kindex s
+@kindex /
+@findex search
+@cindex regular expression search
+Read a string in the echo area and search for it, either as a regular
+expression (by default) or a literal string. If the string includes
+upper-case characters, the Info file is searched case-sensitively;
+otherwise Info ignores the letter case. With a numeric argument of
+@var{N}, search for @var{N}th occurrence of the string. Negative
+arguments search backwards.
+
+@item @kbd{?} (@code{search-backward}, vi-like operation)
+@kindex ?, vi-like operation
+@findex search-backward
+Read a string in the echo area and search backward through the Info file
+for that string. If the string includes upper-case characters, the Info
+file is searched case-sensitively; otherwise Info ignores the letter
+case. With a numeric argument of @var{N}, search for @var{N}th
+occurrence of the string. Negative arguments search forward.
+
+@item @kbd{R} (@code{toggle-regexp})
+@kindex R
+@findex toggle-regexp
+Toggle between using regular expressions and literal strings for
+searching. Info uses so-called `extended' regular expression syntax,
+similar to Emacs (@pxref{Regexps, , Using Regular Expressions, emacs,
+The GNU Emacs Manual}).
+
+@item @kbd{S} (@code{search-case-sensitively}
+@kindex S
+@findex search-case-sensitively
+@cindex search, case-sensitive
+@cindex case-sensitive search
+Read a string in the echo area and search for it case-sensitively, even
+if the string includes only lower-case letters. With a numeric argument
+of @var{N}, search for @var{N}th occurrence of the string. Negative
+arguments search backwards.
+
+@item @kbd{C-x @kbd{n}} (@code{search-next})
+@itemx @kbd{n}, vi-like operation
+@kindex C-x n
+@kindex n, vi-like operation
+@findex search-next
+@cindex repeated search
+Search for the same string used in the last search command, in the same
+direction, and with the same case-sensitivity option. With a numeric
+argument of @var{N}, search for @var{N}th next occurrence.
+
+@item @kbd{C-x @kbd{N}} (@code{search-previous})
+@itemx @kbd{N}, vi-like operation
+@kindex C-x N
+@kindex n, vi-like operation
+@findex search-previous
+Search for the same string used in the last search command, and with the
+same case-sensitivity option, but in the reverse direction. With a
+numeric argument of @var{N}, search for @var{N}th previous occurrence.
+
+@item @kbd{C-s} (@code{isearch-forward})
+@kindex C-s
+@findex isearch-forward
+@cindex incremental search
+Interactively search forward through the Info file for a string as you
+type it. If the string includes upper-case characters, the search is
+case-sensitive; otherwise Info ignores the letter case.
+
+@item @kbd{C-r} (@code{isearch-backward})
+@kindex C-r
+@findex isearch-backward
+Interactively search backward through the Info file for a string as
+you type it. If the string includes upper-case characters, the search
+is case-sensitive; otherwise Info ignores the letter case.
+
+@item @kbd{i} (@code{index-search})
+@kindex i
+@findex index-search
+@cindex index, searching
+@cindex searching, in the indices
+Look up a string in the indices for this Info file, and select a node
+to which the found index entry points.
+
+@item @kbd{,} (@code{next-index-match})
+@kindex ,
+@findex next-index-match
+Move to the node containing the next matching index item from the last
+@samp{i} command.
+
+@item @kbd{M-x index-apropos}
+@findex index-apropos
+Grovel the indices of all the known Info files on your system for a
+string, and build a menu of the possible matches.
+@end table
+
+The most basic searching command is @samp{s} or @samp{/}
+(@code{search}). The @samp{s} command prompts you for a string in the
+echo area, and then searches the remainder of the Info file for an
+occurrence of that string. If the string is found, the node containing
+it is selected, and the cursor is left positioned at the start of the
+found string. Subsequent @samp{s} commands show you the default search
+string within @samp{[} and @samp{]}; pressing @key{RET} instead of
+typing a new string will use the default search string. Under
+@samp{--vi-keys} (@pxref{--vi-keys}), using the @samp{n} or @samp{N}
+commands is a faster way of searching for the same string.
+
+@dfn{Incremental searching} is similar to basic searching, but the
+string is looked up while you are typing it, instead of waiting until
+the entire search string has been specified.
+
+@cindex search, and case-sensitivity
+@cindex case-sensitivity, and search
+Both incremental and non-incremental search by default ignore the case
+of letters when comparing the Info file text with the search string.
+However, an uppercase letter in the search string makes the search
+case-sensitive. You can force a case-sensitive non-incremental search,
+even for a string that includes only lower-case letters, by using the
+@samp{S} command (@code{search-case-sensitively}). The @samp{n} and
+@samp{N} commands operate case-sensitively if the last search command
+was @samp{S}.
+
+The most efficient means of finding something quickly in a manual is
+the @samp{i} command (@code{index-search}). This command prompts for
+a string, and then looks for that string in all the indices of the
+current Info manual. If it finds a matching index entry, it displays
+the node to which that entry refers and prints the full text of the
+entry in the echo area. You can press @samp{,}
+(@code{next-index-match}) to find more matches. A good Info manual
+has all of its important concepts indexed, so the @samp{i} command
+lets you use a manual as a reference.
+
+If you don't know what manual documents something, try the @kbd{M-x
+index-apropos} command. It prompts for a string and then looks up
+that string in all the indices of all the Info documents installed on
+your system. It can also be invoked from the command line; see
+@ref{--apropos}.
+
+
+@node Xref Commands
+@chapter Selecting Cross References
+
+We have already discussed the @samp{Next}, @samp{Prev}, and @samp{Up}
+pointers which appear at the top of a node. In addition to these
+pointers, a node may contain other pointers which refer you to a
+different node, perhaps in another Info file. Such pointers are called
+@dfn{cross references}, or @dfn{xrefs} for short.
+
+@menu
+* Parts of an Xref:: What a cross reference is made of.
+* Selecting Xrefs:: Commands for selecting menu or note items.
+@end menu
+
+@node Parts of an Xref
+@section Parts of an Xref
+
+Cross references have two major parts: the first part is called the
+@dfn{label}; it is the name that you can use to refer to the cross
+reference, and the second is the @dfn{target}; it is the full name of
+the node that the cross reference points to.
+
+The target is separated from the label by a colon @samp{:}; first the
+label appears, and then the target. For example, in the sample menu
+cross reference below, the single colon separates the label from the
+target.
+
+@example
+* Foo Label: Foo Target. More information about Foo.
+@end example
+
+Note the @samp{.} which ends the name of the target. The @samp{.} is
+not part of the target; it serves only to let Info know where the target
+name ends.
+
+A shorthand way of specifying references allows two adjacent colons to
+stand for a target name which is the same as the label name:
+
+@example
+* Foo Commands:: Commands pertaining to Foo.
+@end example
+
+In the above example, the name of the target is the same as the name of
+the label, in this case @code{Foo Commands}.
+
+You will normally see two types of cross reference while viewing nodes:
+@dfn{menu} references, and @dfn{note} references. Menu references
+appear within a node's menu; they begin with a @samp{*} at the beginning
+of a line, and continue with a label, a target, and a comment which
+describes what the contents of the node pointed to contains.
+
+Note references appear within the body of the node text; they begin with
+@code{*Note}, and continue with a label and a target.
+
+Like @samp{Next}, @samp{Prev}, and @samp{Up} pointers, cross references
+can point to any valid node. They are used to refer you to a place
+where more detailed information can be found on a particular subject.
+Here is a cross reference which points to a node within the Texinfo
+documentation: @xref{xref, , Writing an Xref, texinfo, the Texinfo
+Manual}, for more information on creating your own texinfo cross
+references.
+
+@node Selecting Xrefs
+@section Selecting Xrefs
+
+The following table lists the Info commands which operate on menu items.
+
+@table @asis
+@item @kbd{1} (@code{menu-digit})
+@itemx @kbd{2} @dots{} @kbd{9}
+@itemx @kbd{M-1}, vi-like operation
+@itemx @kbd{M-2} @dots{} @kbd{M-9}, vi-like operation
+@cindex 1 @dots{} 9, in Info windows
+@cindex M-1 @dots{} M-9, vi-like operation
+@kindex 1 @dots{} 9, in Info windows
+@kindex M-1 @dots{} M-9, vi-like operation
+@findex menu-digit
+Within an Info window, pressing a single digit, (such as @samp{1}),
+selects that menu item, and places its node in the current window.
+For convenience, there is one exception; pressing @samp{0} selects the
+@emph{last} item in the node's menu. When @samp{--vi-keys} is in
+effect, digits set the numeric argument, so these commands are remapped
+to their @samp{M-} varieties. For example, to select the last menu
+item, press @kbd{M-0}.
+
+@item @kbd{0} (@code{last-menu-item})
+@itemx @kbd{M-0}, vi-like operation
+@kindex 0, in Info windows
+@kindex M-0, vi-like operation
+@findex last-menu-item
+Select the last item in the current node's menu.
+
+@item @kbd{m} (@code{menu-item})
+@kindex m
+@findex menu-item
+Reads the name of a menu item in the echo area and selects its node.
+Completion is available while reading the menu label. @xref{The Echo
+Area, completion}.
+
+@item @kbd{M-x find-menu}
+@findex find-menu
+Move the cursor to the start of this node's menu.
+@end table
+
+This table lists the Info commands which operate on cross references.
+
+@table @asis
+@item @kbd{f} (@code{xref-item})
+@itemx @kbd{r}
+@item @kbd{M-f}, vi-like operation
+@itemx @kbd{C-x @kbd{r}}, vi-like operation
+@kindex f
+@kindex r
+@kindex M-f, vi-like operation
+@kindex C-x r, vi-like operation
+@findex xref-item
+Reads the name of a note cross reference in the echo area and selects
+its node. Completion is available while reading the cross reference
+label. @xref{The Echo Area, completion}.
+@end table
+
+Finally, the next few commands operate on menu or note references alike:
+
+@table @asis
+@item @key{TAB} (@code{move-to-next-xref})
+@kindex TAB, in Info windows
+@findex move-to-next-xref
+Move the cursor to the start of the next nearest menu item or note
+reference in this node. You can then use @key{RET}
+(@code{select-reference-this-line}) to select the menu or note reference.
+
+@item @kbd{M-TAB} (@code{move-to-prev-xref})
+@itemx @kbd{Shift-@key{TAB}} (on DOS/Windows only)
+@kindex M-TAB, in Info windows
+@findex move-to-prev-xref
+Move the cursor the start of the nearest previous menu item or note
+reference in this node.
+
+@kindex Shift-TAB, in Info windows
+@kindex BackTab, in Info windows
+On DOS/Windows only, the @kbd{Shift-@key{TAB}} key is an alias for
+@kbd{M-@key{TAB}}. This key is sometimes called @samp{BackTab}.
+
+@item @key{RET} (@code{select-reference-this-line})
+@itemx @kbd{M-g}, vi-like operation
+@kindex RET, in Info windows
+@kindex M-g, vi-like operation
+@findex select-reference-this-line
+Select the menu item or note reference appearing on this line.
+@end table
+
+
+@node Window Commands
+@chapter Manipulating Multiple Windows
+@cindex windows, manipulating
+
+A @dfn{window} is a place to show the text of a node. Windows have a
+view area where the text of the node is displayed, and an associated
+@dfn{mode line}, which briefly describes the node being viewed.
+
+GNU Info supports multiple windows appearing in a single screen; each
+window is separated from the next by its modeline. At any time, there
+is only one @dfn{active} window, that is, the window in which the cursor
+appears. There are commands available for creating windows, changing
+the size of windows, selecting which window is active, and for deleting
+windows.
+
+@menu
+* The Mode Line:: What appears in the mode line?
+* Basic Windows:: Manipulating windows in Info.
+* The Echo Area:: Used for displaying errors and reading input.
+@end menu
+
+@node The Mode Line
+@section The Mode Line
+
+A @dfn{mode line} is a line of inverse video which appears at the bottom
+of an Info window. It describes the contents of the window just above
+it; this information includes the name of the file and node appearing in
+that window, the number of screen lines it takes to display the node,
+and the percentage of text that is above the top of the window. It can
+also tell you if the indirect tags table for this Info file needs to be
+updated, and whether or not the Info file was compressed when stored on
+disk.
+
+Here is a sample mode line for a window containing an uncompressed file
+named @file{dir}, showing the node @samp{Top}.
+
+@example
+@group
+-----Info: (dir)Top, 40 lines --Top-------------------------------------
+ ^^ ^ ^^^ ^^
+ (file)Node #lines where
+@end group
+@end example
+
+When a node comes from a file which is compressed on disk, this is
+indicated in the mode line with two small @samp{z}'s. In addition, if
+the Info file containing the node has been split into subfiles, the name
+of the subfile containing the node appears in the modeline as well:
+
+@example
+--zz-Info: (emacs)Top, 291 lines --Top-- Subfile: emacs-1.Z-------------
+@end example
+
+Truncation of long lines (as opposed to wrapping them to the next
+display line, @pxref{Scrolling Commands, toggle-wrap}) is indicated by a
+@samp{$} at the left edge of the mode line:
+
+@example
+--$--Info: (texinfo)Top, 480 lines --Top-- Subfile: texinfo-1-----------
+@end example
+
+When Info makes a node internally, such that there is no corresponding
+info file on disk, the name of the node is surrounded by asterisks
+(@samp{*}). The name itself tells you what the contents of the window
+are; the sample mode line below shows an internally constructed node
+showing possible completions:
+
+@example
+-----Info: *Completions*, 7 lines --All---------------------------------
+@end example
+
+@node Basic Windows
+@section Window Commands
+
+It can be convenient to view more than one node at a time. To allow
+this, Info can display more than one @dfn{window}. Each window has its
+own mode line (@pxref{The Mode Line}) and history of nodes viewed in that
+window (@pxref{Node Commands, , @code{history-node}}).
+
+@table @asis
+@item @kbd{C-x @kbd{o}} (@code{next-window})
+@cindex windows, selecting
+@kindex C-x o
+@findex next-window
+Select the next window on the screen. Note that the echo area can only be
+selected if it is already in use, and you have left it temporarily.
+Normally, @samp{C-x o} simply moves the cursor into the next window on
+the screen, or if you are already within the last window, into the first
+window on the screen. Given a numeric argument, @samp{C-x o} moves over
+that many windows. A negative argument causes @samp{C-x o} to select
+the previous window on the screen.
+
+@item @kbd{M-x prev-window}
+@findex prev-window
+Select the previous window on the screen. This is identical to
+@samp{C-x o} with a negative argument.
+
+@item @kbd{C-x @kbd{2}} (@code{split-window})
+@cindex windows, creating
+@kindex C-x 2
+@findex split-window
+Split the current window into two windows, both showing the same node.
+Each window is one half the size of the original window, and the cursor
+remains in the original window. The variable @code{automatic-tiling}
+can cause all of the windows on the screen to be resized for you
+automatically (@pxref{Variables, , automatic-tiling}).
+
+@item @kbd{C-x @kbd{0}} (@code{delete-window})
+@cindex windows, deleting
+@kindex C-x 0
+@findex delete-window
+Delete the current window from the screen. If you have made too many
+windows and your screen appears cluttered, this is the way to get rid of
+some of them.
+
+@item @kbd{C-x @kbd{1}} (@code{keep-one-window})
+@kindex C-x 1
+@findex keep-one-window
+Delete all of the windows excepting the current one.
+
+@item @kbd{ESC @kbd{C-v}} (@code{scroll-other-window})
+@kindex ESC C-v, in Info windows
+@findex scroll-other-window
+Scroll the other window, in the same fashion that @samp{C-v} might
+scroll the current window. Given a negative argument, scroll the
+``other'' window backward.
+
+@item @kbd{C-x @kbd{^}} (@code{grow-window})
+@kindex C-x ^
+@findex grow-window
+Grow (or shrink) the current window. Given a numeric argument, grow
+the current window that many lines; with a negative numeric argument,
+shrink the window instead.
+
+@item @kbd{C-x @kbd{t}} (@code{tile-windows})
+@cindex tiling
+@kindex C-x t
+@findex tile-windows
+Divide the available screen space among all of the visible windows.
+Each window is given an equal portion of the screen in which to display
+its contents. The variable @code{automatic-tiling} can cause
+@code{tile-windows} to be called when a window is created or deleted.
+@xref{Variables, , @code{automatic-tiling}}.
+@end table
+
+@node The Echo Area
+@section The Echo Area
+@cindex echo area
+
+The @dfn{echo area} is a one line window which appears at the bottom of
+the screen. It is used to display informative or error messages, and to
+read lines of input from you when that is necessary. Almost all of the
+commands available in the echo area are identical to their Emacs
+counterparts, so please refer to that documentation for greater depth of
+discussion on the concepts of editing a line of text. The following
+table briefly lists the commands that are available while input is being
+read in the echo area:
+
+@table @asis
+@item @kbd{C-f} (@code{echo-area-forward})
+@itemx @key{RIGHT} (an arrow key)
+@itemx @kbd{M-h}, vi-like operation
+@kindex C-f, in the echo area
+@kindex RIGHT, in the echo area
+@kindex M-h, in the echo area, vi-like operation
+@findex echo-area-forward
+Move forward a character.
+
+@item @kbd{C-b} (@code{echo-area-backward})
+@itemx @key{LEFT} (an arrow key)
+@itemx @kbd{M-l}, vi-like operation
+@kindex LEFT, in the echo area
+@kindex C-b, in the echo area
+@kindex M-l, in the echo area, vi-like operation
+@findex echo-area-backward
+Move backward a character.
+
+@item @kbd{C-a} (@code{echo-area-beg-of-line})
+@itemx @kbd{M-0}, vi-like operation
+@kindex C-a, in the echo area
+@kindex M-0, in the echo area, vi-like operation
+@findex echo-area-beg-of-line
+Move to the start of the input line.
+
+@item @kbd{C-e} (@code{echo-area-end-of-line})
+@itemx @kbd{M-$}, vi-like operation
+@kindex C-e, in the echo area
+@kindex M-$, vi-like operation
+@findex echo-area-end-of-line
+Move to the end of the input line.
+
+@item @kbd{M-f} (@code{echo-area-forward-word})
+@itemx @kbd{C-@key{RIGHT}} (DOS/Windows only)
+@itemx @kbd{M-w}, vi-like operation
+@kindex M-f, in the echo area
+@kindex M-w, in the echo area, vi-like operation
+@findex echo-area-forward-word
+Move forward a word.
+
+@kindex C-RIGHT, in the echo area
+On DOS/Windows, @kbd{C-@key{RIGHT}} moves forward by words.
+
+@item @kbd{M-b} (@code{echo-area-backward-word})
+@itemx @kbd{C-@key{LEFT}} (DOS/Windows only)
+@kindex M-b, in the echo area
+@findex echo-area-backward-word
+Move backward a word.
+
+@kindex C-LEFT, in the echo area
+On DOS/Windows, @kbd{C-@key{LEFT}} moves backward by words.
+
+@item @kbd{C-d} (@code{echo-area-delete})
+@itemx @kbd{M-x}, vi-like operation
+@kindex C-d, in the echo area
+@kindex M-x, in the echo area, vi-like operation
+@findex echo-area-delete
+Delete the character under the cursor.
+
+@item @key{DEL} (@code{echo-area-rubout})
+@kindex DEL, in the echo area
+@findex echo-area-rubout
+Delete the character behind the cursor.
+
+On some keyboards, this key is designated @key{BS}, for
+@samp{Backspace}. Those keyboards will usually bind @key{DEL} in the
+echo area to @code{echo-area-delete}.
+
+@item @kbd{C-g} (@code{echo-area-abort})
+@itemx @kbd{C-u}, vi-like operation
+@kindex C-g, in the echo area
+@kindex C-u, in the echo area, vi-like operation
+@findex echo-area-abort
+Cancel or quit the current operation. If completion is being read, this
+command discards the text of the input line which does not match any
+completion. If the input line is empty, it aborts the calling function.
+
+@item @key{RET} (@code{echo-area-newline})
+@kindex RET, in the echo area
+@findex echo-area-newline
+Accept (or forces completion of) the current input line.
+
+@item @kbd{C-q} (@code{echo-area-quoted-insert})
+@itemx @kbd{C-v}, vi-like operation
+@kindex C-q, in the echo area
+@kindex C-v, in the echo area, vi-like operation
+@findex echo-area-quoted-insert
+Insert the next character verbatim. This is how you can insert control
+characters into a search string, for example, or the @samp{?} character
+when Info prompts with completion.
+
+@item @var{printing character} (@code{echo-area-insert})
+@kindex printing characters, in the echo area
+@findex echo-area-insert
+Insert the character. Characters that have their 8th bit set, and not
+bound to @samp{M-} commands, are also inserted verbatim; this is useful
+for terminals which support Latin scripts.
+
+@item @kbd{M-TAB} (@code{echo-area-tab-insert})
+@itemx @kbd{Shift-@key{TAB}} (on DOS/Windows only)
+@kindex M-TAB, in the echo area
+@kindex Shift-TAB, in the echo area
+@findex echo-area-tab-insert
+Insert a TAB character.
+
+@kindex Shift-TAB, in the echo area
+@kindex BackTab, in the echo area
+On DOS/Windows only, the @kbd{Shift-@key{TAB}} key is an alias for
+@kbd{M-@key{TAB}}. This key is sometimes called @samp{BackTab}.
+
+@item @kbd{C-t} (@code{echo-area-transpose-chars})
+@kindex C-t, in the echo area
+@findex echo-area-transpose-chars
+Transpose the characters at the cursor.
+@end table
+
+The next group of commands deal with @dfn{killing}, and @dfn{yanking}
+text@footnote{
+Some people are used to calling these operations @dfn{cut} and
+@dfn{paste}, respectively.}. For an in-depth discussion of killing and
+yanking, see @ref{Killing, , Killing and Deleting, emacs, the GNU Emacs
+Manual}.
+
+@table @asis
+@item @kbd{M-d} (@code{echo-area-kill-word})
+@itemx @kbd{M-X}, vi-like operation
+@kindex M-d, in the echo area
+@kindex M-X, in the echo area, vi-like operation
+@findex echo-area-kill-word
+Kill the word following the cursor.
+
+@item @kbd{M-@key{DEL}} (@code{echo-area-backward-kill-word})
+@itemx @kbd{M-@key{BS}}
+@kindex M-DEL, in the echo area
+@findex echo-area-backward-kill-word
+Kill the word preceding the cursor.
+
+@kindex M-BS, in the echo area
+On some keyboards, the @samp{Backspace} key is used instead of
+@code{DEL}, so @code{M-@key{Backspace}} has the same effect as
+@code{M-@key{DEL}}.
+
+@item @kbd{C-k} (@code{echo-area-kill-line})
+@kindex C-k, in the echo area
+@findex echo-area-kill-line
+Kill the text from the cursor to the end of the line.
+
+@item @kbd{C-x @key{DEL}} (@code{echo-area-backward-kill-line})
+@kindex C-x DEL, in the echo area
+@findex echo-area-backward-kill-line
+Kill the text from the cursor to the beginning of the line.
+
+@item @kbd{C-y} (@code{echo-area-yank})
+@kindex C-y, in the echo area
+@findex echo-area-yank
+Yank back the contents of the last kill.
+
+@item @kbd{M-y} (@code{echo-area-yank-pop})
+@kindex M-y, in the echo area
+@findex echo-area-yank-pop
+Yank back a previous kill, removing the last yanked text first.
+@end table
+
+@cindex completion
+Sometimes when reading input in the echo area, the command that needed
+input will only accept one of a list of several choices. The choices
+represent the @dfn{possible completions}, and you must respond with one
+of them. Since there are a limited number of responses you can make,
+Info allows you to abbreviate what you type, only typing as much of the
+response as is necessary to uniquely identify it. In addition, you can
+request Info to fill in as much of the response as is possible; this
+is called @dfn{completion}.
+
+The following commands are available when completing in the echo area:
+
+@table @asis
+@item @key{TAB} (@code{echo-area-complete})
+@itemx @key{SPC}
+@kindex TAB, in the echo area
+@kindex SPC, in the echo area
+@findex echo-area-complete
+Insert as much of a completion as is possible.
+
+@item @kbd{?} (@code{echo-area-possible-completions})
+@kindex ?, in the echo area
+@findex echo-area-possible-completions
+Display a window containing a list of the possible completions of what
+you have typed so far. For example, if the available choices are:
+
+@example
+@group
+bar
+foliate
+food
+forget
+@end group
+@end example
+
+@noindent
+and you have typed an @samp{f}, followed by @samp{?}, Info will pop up a
+window showing a node called @samp{*Completions*} which lists the
+possible completions like this:
+
+@example
+@group
+3 completions:
+foliate food
+forget
+@end group
+@end example
+
+@noindent
+i.e., all of the choices which begin with @samp{f}. Pressing @key{SPC}
+or @key{TAB} would result in @samp{fo} appearing in the echo area, since
+all of the choices which begin with @samp{f} continue with @samp{o}.
+Now, typing @samp{l} followed by @samp{TAB} results in @samp{foliate}
+appearing in the echo area, since that is the only choice which begins
+with @samp{fol}.
+
+@item @key{ESC C-v} (@code{echo-area-scroll-completions-window})
+@kindex ESC C-v, in the echo area
+@findex echo-area-scroll-completions-window
+Scroll the completions window, if that is visible, or the ``other''
+window if not.
+@end table
+
+
+@node Printing Nodes
+@chapter Printing Nodes
+@cindex printing
+
+In general, we recommend that you use @TeX{} to format the document and
+print sections of it, by running @code{tex} on the Texinfo source file.
+However, you may wish to print out the contents of a node as a quick
+reference document for later use, or if you don't have @TeX{} installed.
+Info provides you with a command for doing this.
+
+@table @asis
+@item @kbd{M-x print-node}
+@findex print-node
+@cindex INFO_PRINT_COMMAND, environment variable
+Pipe the contents of the current node through the command in the
+environment variable @code{INFO_PRINT_COMMAND}. If the variable does not
+exist, the node is simply piped to @code{lpr} (on DOS/Windows, the
+default is to print the node to the local printer device, @file{PRN}).
+
+@cindex printing nodes to the local printer
+@cindex local printer device
+The value of @code{INFO_PRINT_COMMAND} may begin with the @samp{>}
+character, as in @samp{>/dev/printer}, in which case Info treats the
+rest as the name of a file or a device. Instead of piping to a command,
+Info opens the file, writes the node contents, and closes the file,
+under the assumption that text written to that file will be printed by
+the underlying OS.
+@end table
+
+
+@node Miscellaneous Commands
+@chapter Miscellaneous Commands
+
+GNU Info contains several commands which self-document GNU Info:
+
+@table @asis
+@item @kbd{M-x describe-command}
+@cindex functions, describing
+@cindex commands, describing
+@findex describe-command
+Read the name of an Info command in the echo area and then display a
+brief description of what that command does.
+
+@item @kbd{M-x describe-key}
+@cindex keys, describing
+@findex describe-key
+Read a key sequence in the echo area, and then display the name and
+documentation of the Info command that the key sequence invokes.
+
+@item @kbd{M-x describe-variable}
+Read the name of a variable in the echo area and then display a brief
+description of what the variable affects.
+
+@item @kbd{M-x where-is}
+@findex where-is
+Read the name of an Info command in the echo area, and then display
+a key sequence which can be typed in order to invoke that command.
+
+@item @kbd{C-h} (@code{get-help-window})
+@itemx @kbd{?}
+@itemx @key{F1} (on DOS/Windows only)
+@itemx h, vi-like operation
+@kindex C-h
+@kindex ?, in Info windows
+@kindex F1
+@kindex h, vi-like operation
+@findex get-help-window
+Create (or Move into) the window displaying @code{*Help*}, and place
+a node containing a quick reference card into it. This window displays
+the most concise information about GNU Info available.
+
+@item @kbd{h} (@code{get-info-help-node})
+@itemx @kbd{M-h}, vi-like operation
+@kindex h
+@kindex M-h, vi-like operation
+@findex get-info-help-node
+Try hard to visit the node @code{(info)Help}. The Info file
+@file{info.texi} distributed with GNU Info contains this node. Of
+course, the file must first be processed with @code{makeinfo}, and then
+placed into the location of your Info directory.
+@end table
+
+Here are the commands for creating a numeric argument:
+
+@table @asis
+@item @kbd{C-u} (@code{universal-argument})
+@cindex numeric arguments
+@kindex C-u
+@findex universal-argument
+Start (or multiply by 4) the current numeric argument. @samp{C-u} is
+a good way to give a small numeric argument to cursor movement or
+scrolling commands; @samp{C-u C-v} scrolls the screen 4 lines, while
+@samp{C-u C-u C-n} moves the cursor down 16 lines. @samp{C-u} followed
+by digit keys sets the numeric argument to the number thus typed:
+@kbd{C-u 1 2 0} sets the argument to 120.
+
+@item @kbd{M-1} (@code{add-digit-to-numeric-arg})
+@itemx @kbd{1}, vi-like operation
+@itemx @kbd{M-2} @dots{} @kbd{M-9}
+@itemx @kbd{2} @dots{} @kbd{9}, vi-like operation
+@itemx @kbd{M-0}
+@itemx @kbd{0}, vi-like operation
+@kindex M-0 @dots{} M-9
+@kindex 0 @dots{} 9, vi-like operation
+@findex add-digit-to-numeric-arg
+Add the digit value of the invoking key to the current numeric
+argument. Once Info is reading a numeric argument, you may just type
+the digits of the argument, without the Meta prefix. For example, you
+might give @samp{C-l} a numeric argument of 32 by typing:
+
+@example
+@kbd{C-u 3 2 C-l}
+@end example
+
+@noindent
+or
+
+@example
+@kbd{M-3 2 C-l}
+@end example
+
+@item @kbd{M--} (@code{add-digit-to-numeric-arg}
+@itemx @kbd{-}
+@kindex M--
+@kindex -
+@cindex negative arguments
+@cindex arguments, negative
+@cindex numeric arguments, negative
+To make a negative argument, type @kbd{-}. Typing @kbd{-} alone makes a
+negative argument with a value of -1. If you continue to type digit or
+Meta-digit keys after @kbd{-}, the result is a negative number produced
+by those digits.
+
+@kbd{-} doesn't work when you type in the echo area, because you need to
+be able to insert the @samp{-} character itself; use @kbd{M--} instead,
+if you need to specify negative arguments in the echo area.
+@end table
+
+@samp{C-g} is used to abort the reading of a multi-character key
+sequence, to cancel lengthy operations (such as multi-file searches) and
+to cancel reading input in the echo area.
+
+@table @asis
+@item @kbd{C-g} (@code{abort-key})
+@itemx @kbd{C-u}, vi-like operation
+@cindex cancelling typeahead
+@cindex cancelling the current operation
+@kindex C-g, in Info windows
+@kindex C-u cancels typeahead, vi-like operation
+@findex abort-key
+Cancel current operation.
+@end table
+
+The @samp{q} command of Info simply quits running Info. Under
+@samp{--vi-keys} (@pxref{--vi-keys}), you can also exit with @samp{:q}
+or @samp{ZZ}.
+
+@table @asis
+@item @kbd{q} (@code{quit})
+@itemx @kbd{C-x C-c}
+@itemx @kbd{:q}, vi-like operation
+@itemx @kbd{ZZ}, vi-like operation
+@cindex quitting
+@kindex q
+@kindex C-x C-c
+@kindex ZZ, vi-like operation
+@findex quit
+Exit GNU Info.
+@end table
+
+If the operating system tells GNU Info that the screen is 60 lines tall,
+and it is actually only 40 lines tall, here is a way to tell Info that
+the operating system is correct.
+
+@table @asis
+@item @kbd{M-x set-screen-height}
+@findex set-screen-height
+@cindex screen, changing the height of
+Read a height value in the echo area and set the height of the
+displayed screen to that value.
+@end table
+
+On MS-DOS/MS-Windows, this command actually tries to change the
+dimensions of the visible screen to the value you type in the echo
+area.
+
+Finally, Info provides a convenient way to display footnotes which might
+be associated with the current node that you are viewing:
+
+@table @asis
+@item @kbd{ESC C-f} (@code{show-footnotes})
+@kindex ESC C-f
+@findex show-footnotes
+@cindex footnotes, displaying
+Show the footnotes (if any) associated with the current node in another
+window. You can have Info automatically display the footnotes
+associated with a node when the node is selected by setting the variable
+@code{automatic-footnotes}. @xref{Variables, , @code{automatic-footnotes}}.
+@end table
+
+
+@node Variables
+@chapter Manipulating Variables
+
+GNU Info contains several @dfn{variables} whose values are looked at by
+various Info commands. You can change the values of these variables,
+and thus change the behavior of Info to more closely match your
+environment and Info file reading manner.
+
+There are two ways to set the value of a variable: interactively, using
+the @code{set-variable} command described below, or in the @code{#var}
+section of the @code{.infokey} file. @xref{Custom Key Bindings}.
+
+@table @asis
+@item @kbd{M-x set-variable}
+@cindex variables, setting
+@findex set-variable
+Read the name of a variable, and the value for it, in the echo area and
+then set the variable to that value. Completion is available when
+reading the variable name (@pxref{The Echo Area, completion}); often,
+completion is available when reading the value to give to the variable,
+but that depends on the variable itself. If a variable does @emph{not}
+supply multiple choices to complete over, it expects a numeric value.
+
+@item @kbd{M-x describe-variable}
+@cindex variables, describing
+@findex describe-variable
+Read the name of a variable in the echo area and then display a brief
+description of what the variable affects.
+@end table
+
+Here is a list of the variables that you can set in Info.
+
+@table @code
+@item automatic-footnotes
+@vindex automatic-footnotes
+When set to @code{On}, footnotes appear and disappear automatically;
+else, they appear at the bottom of the node text. This variable is
+@code{Off} by default. When a node is selected, a window containing
+the footnotes which appear in that node is created, and the footnotes
+are displayed within the new window. The window that Info creates to
+contain the footnotes is called @samp{*Footnotes*}. If a node is
+selected which contains no footnotes, and a @samp{*Footnotes*} window
+is on the screen, the @samp{*Footnotes*} window is deleted. Footnote
+windows created in this fashion are not automatically tiled so that
+they can use as little of the display as is possible.
+
+@item automatic-tiling
+@vindex automatic-tiling
+When set to @code{On}, creating or deleting a window resizes other
+windows. This variable is @code{Off} by default. Normally, typing
+@samp{C-x 2} divides the current window into two equal parts. When
+@code{automatic-tiling} is set to @code{On}, all of the windows are
+resized automatically, keeping an equal number of lines visible in each
+window. There are exceptions to the automatic tiling; specifically, the
+windows @samp{*Completions*} and @samp{*Footnotes*} are @emph{not}
+resized through automatic tiling; they remain their original size.
+
+@anchor{cursor-movement-scrolls}
+@item cursor-movement-scrolls
+Normally, cursor movement commands (@pxref{Cursor Commands}) stop when
+top or bottom of a node is reached. When this variable is set to
+@code{On}, cursor movement commands act as scrolling ones and their
+behavior is controlled by the @code{scroll-behavior} variable (see below).
+
+@item errors-ring-bell
+@vindex errors-ring-bell
+When set to @code{On}, errors cause the bell to ring. The default
+setting of this variable is @code{On}.
+
+@item gc-compressed-files
+@vindex gc-compressed-files
+When set to @code{On}, Info garbage collects files which had to be
+uncompressed. The default value of this variable is @code{Off}.
+Whenever a node is visited in Info, the Info file containing that node
+is read into core, and Info reads information about the tags and nodes
+contained in that file. Once the tags information is read by Info, it
+is never forgotten. However, the actual text of the nodes does not need
+to remain in core unless a particular Info window needs it. For
+non-compressed files, the text of the nodes does not remain in core when
+it is no longer in use. But de-compressing a file can be a time
+consuming operation, and so Info tries hard not to do it twice.
+@code{gc-compressed-files} tells Info it is okay to garbage collect the
+text of the nodes of a file which was compressed on disk.
+
+@item ISO-Latin
+@cindex ISO Latin characters
+@vindex ISO-Latin
+When set to @code{On}, Info accepts and displays ISO Latin characters.
+By default, Info assumes an ASCII character set. @code{ISO-Latin} tells
+Info that it is running in an environment where the European standard
+character set is in use, and allows you to input such characters to
+Info, as well as display them.
+
+@anchor{scroll-behavior}
+@item scroll-behavior
+@itemx scroll-behaviour
+@vindex scroll-behavior
+@vindex scroll-behaviour
+Control what happens when forward scrolling is requested at the end of
+a node, or when backward scrolling is requested at the beginning of a
+node. The default value for this variable is @code{Continuous}.
+There are three possible values for this variable:
+
+@table @code
+@item Continuous
+Try to get the first item in this node's menu, or failing that, the
+@samp{Next} node, or failing that, the @samp{Next} of the @samp{Up}.
+This behavior is identical to using the @samp{]}
+(@code{global-next-node}) and @samp{[} (@code{global-prev-node})
+commands.
+
+@item scroll-last-node
+@vindex scroll-last-node
+Control what happens when a scrolling command is issued at the end of
+the last node. Possible values are:
+
+@table @code
+@item Stop
+Do not scroll. Display the @samp{No more nodes within this document.}
+message. This is the default.
+
+@item Scroll
+Scroll as usual. Since the last node is usually an index, this means
+that the very first node from the menu will be selected.
+
+@item Top
+Go to the top node of this document.
+@end table
+
+This variable is in effect only if @code{scroll-behaviour} is set to
+@code{Continuous}.
+
+Notice that the default behavior has changed in version 4.12. Previous
+versions behaved as if @code{scroll-last-node=Scroll} was set. This
+behavior was counter-intuitive, therefore since version 4.12 the
+default is to stop at the last node.
+
+@item Next Only
+Only try to get the @samp{Next} node.
+
+@item Page Only
+Simply give up, changing nothing. If @code{scroll-behavior} is
+@code{Page Only}, no scrolling command can change the node that is being
+viewed.
+@end table
+
+This variable normally affects only scrolling commands.
+@xref{cursor-movement-scrolls}, for information on how to widen its
+scope.
+
+The two names, @code{scroll-behavior} and @code{scroll-behaviour}, are
+a historical accident. They are merely synonyms.
+
+@item scroll-step
+@vindex scroll-step
+The number of lines to scroll when the cursor moves out of the window.
+Scrolling happens automatically if the cursor has moved out of the
+visible portion of the node text when it is time to display. Usually
+the scrolling is done so as to put the cursor on the center line of the
+current window. However, if the variable @code{scroll-step} has a
+nonzero value, Info attempts to scroll the node text by that many lines;
+if that is enough to bring the cursor back into the window, that is what
+is done. The default value of this variable is 0, thus placing the
+cursor (and the text it is attached to) in the center of the window.
+Setting this variable to 1 causes a kind of ``smooth scrolling'' which
+some people prefer.
+
+@item show-index-match
+@vindex show-index-match
+When set to @code{On}, the portion of the matched search string is
+highlighted in the message which explains where the matched search
+string was found. The default value of this variable is @code{On}.
+When Info displays the location where an index match was found,
+(@pxref{Searching Commands, , @code{next-index-match}}), the portion of the
+string that you had typed is highlighted by displaying it in the inverse
+case from its surrounding characters.
+
+@item visible-bell
+@vindex visible-bell
+When set to @code{On}, GNU Info attempts to flash the screen instead of
+ringing the bell. This variable is @code{Off} by default. Of course,
+Info can only flash the screen if the terminal allows it; in the case
+that the terminal does not allow it, the setting of this variable has no
+effect. However, you can make Info perform quietly by setting the
+@code{errors-ring-bell} variable to @code{Off}.
+
+@end table
+
+
+@node Custom Key Bindings
+@chapter Customizing Key Bindings and Variables
+
+@cindex default key bindings, overriding
+@cindex overriding default key bindings
+@cindex customizing key bindings
+@cindex key bindings, customizing
+@cindex infokey
+@cindex .info
+@cindex .infokey
+@cindex _info file (MS-DOS)
+
+GNU Info provides a way to define arbitrary key-to-command bindings
+and variable settings, overriding the defaults described in this
+document. (The @option{--vi-keys} option rebinds many keys at once;
+@pxref{--vi-keys}.)
+
+On startup, GNU Info looks for a configuration file in the invoker's
+HOME directory called @file{.info}@footnote{Due to the limitations of
+DOS filesystems, the MS-DOS version of Info looks for a file
+@file{_info} instead. If the @env{HOME} variable is not defined, Info
+additionally looks in the current directory.}. If it is present, and
+appears to contain Info configuration data, and was created with the
+current version of the @code{infokey} command, then Info adopts the
+key bindings and variable settings contained therein.
+
+The @file{.info} file contains compact, non-textual data for reasons of
+efficiency and because its design was lifted wholesale from the GNU Less
+program, which also does it that way. It must be created by compiling a
+textual source file using the @code{infokey} command.
+
+@menu
+* Invoking infokey::
+* infokey source format::
+@end menu
+
+
+@node Invoking infokey
+@section Invoking @command{infokey}
+
+@cindex invoking infokey
+@cindex infokey, invoking
+@cindex _infokey file (MS-DOS)
+
+@command{infokey} compiles a source file
+(@file{$HOME/.infokey}@footnote{This file is named @file{_infokey} in
+the MS-DOS version, and is looked for in the current directory if
+@env{HOME} is undefined.} by default) containing Info customizations
+into a binary format (@file{$HOME/.info} by default). GNU Info reads
+the binary file at startup to override the default key bindings and
+variable definitions. Synopsis:
+
+@example
+infokey [@var{option}@dots{}] [@var{input-file}]
+@end example
+
+Besides the standard @option{--help} and @option{--version}, the only
+option is @option{--output @var{file}}. This tells @command{infokey} to
+write the binary data to @var{file} instead of @file{$HOME/.info}.
+
+
+@node infokey source format
+@section @command{infokey} source format
+
+@cindex infokey source format
+@cindex .infokey source format
+@cindex format of .infokey source
+
+The format of the source file read by @command{infokey} is most easily
+illustrated by example. For instance, here is a sample @file{.infokey}
+source file suitable for aficionados of @command{vi} or @command{less}:
+
+@example
+#info
+j next-line
+k prev-line
+l forward-char
+h backward-char
+\kd next-line
+\ku prev-line
+\kr forward-char
+\kl backward-char
+\ scroll-forward
+\kD scroll-forward-page-only
+b scroll-backward
+\kU scroll-backward-page-only
+g beginning-of-node
+\kh beginning-of-node
+G end-of-node
+\ke end-of-node
+\t select-reference-this-line
+- history-node
+n next-node
+p prev-node
+u up-node
+t top-node
+d dir-node
+#var
+scroll-step=1
+@end example
+
+The source file consists of one or more @dfn{sections}.
+Each section starts with a line that identifies the type of section.
+Possible sections are:
+
+@table @code
+@item #info
+Key bindings for Info windows.
+The start of this section is indicated by a line containing just
+@code{#info} by itself. If this is the first section in the source
+file, the @code{#info} line can be omitted. The rest of this section
+consists of lines of the form:
+
+@example
+@var{string} whitespace @var{action} [ whitespace [ # comment ] ] newline
+@end example
+
+Whitespace is any sequence of one or more spaces and/or tabs. Comment
+is any sequence of any characters, excluding newline. @var{string} is
+the key sequence which invokes the action. @var{action} is the name of
+an Info command. The characters in @var{string} are interpreted
+literally or prefixed by a caret (@code{^}) to indicate a control
+character. A backslash followed by certain characters specifies input
+keystrokes as follows:
+
+@table @code
+@item \b
+Backspace
+@item \e
+Escape (ESC)
+@item \n
+Newline
+@item \r
+Return
+@item \t
+Tab
+@item \ku
+Up arrow
+@item \kd
+Down arrow
+@item \kl
+Left arrow
+@item \kr
+Right arrow
+@item \kU
+Page Up
+@item \kD
+Page Down
+@item \kh
+HOME
+@item \ke
+END
+@item \kx
+Delete (DEL)
+@item \m@var{x}
+Meta-@var{x} where @var{x} is any character as described above.
+@end table
+
+Backslash followed by any other character indicates that character is to
+be taken literally. Characters which must be preceded by a backslash
+include caret, space, tab, and backslash itself.
+
+@item #echo-area
+Key bindings for the echo area.
+The start of this section is indicated by a line containing just
+@code{#echo-area} by itself. The rest of this section has a syntax
+identical to that for the key definitions for the Info area, described
+above.
+
+@item #var
+Variable initializations.
+The start of this section is indicated by a line containing just
+@code{#var} by itself. Following this line is a list of variable
+assignments, one per line. Each line consists of a variable name
+(@xref{Variables},) followed by @code{=} followed by a value.
+There may be no white space between the variable name and the @code{=},
+and all characters following the @code{=}, including white space,
+are included in the value.
+@end table
+
+Blank lines and lines starting with @code{#} are ignored, except for
+the special section header lines.
+
+Key bindings defined in the @file{.info} file take precedence over GNU
+Info's default key bindings, whether or not @samp{--vi-keys} is used. A
+default key binding may be disabled by overriding it in the @file{.info}
+file with the action @code{invalid}. In addition, @emph{all} default
+key bindings can be disabled by adding this line @emph{anywhere} in the
+relevant section:
+
+@example
+#stop
+@end example
+
+This will cause GNU Info to ignore all the default key commands for that
+section.
+
+Beware: @code{#stop} can be dangerous. Since it disables all default
+key bindings, you must supply enough new key bindings to enable all
+necessary actions. Failure to bind any key to the @code{quit} command,
+for example, can lead to frustration.
+
+The order in which key bindings are defined in the @file{.info} file is
+not important, except that the command summary produced by the
+@code{get-help-window} command only displays the @emph{first} key that
+is bound to each command.
+
+
+@c the following is incomplete
+@ignore
+@c node Info for Sys Admins
+@c chapter Info for System Administrators
+
+This text describes some common ways of setting up an Info hierarchy
+from scratch, and details the various options that are available when
+installing Info. This text is designed for the person who is installing
+GNU Info on the system; although users may find the information present
+in this section interesting, none of it is vital to understanding how to
+use GNU Info.
+
+@menu
+* Setting the INFOPATH:: Where are my Info files kept?
+* Editing the DIR node:: What goes in `DIR', and why?
+* Storing Info files:: Alternate formats allow flexibility in setups.
+* Using `localdir':: Building DIR on the fly.
+* Example setups:: Some common ways to organize Info files.
+@end menu
+
+@c node Setting the INFOPATH
+@c section Setting the INFOPATH
+
+Where are my Info files kept?
+
+@c node Editing the DIR node
+@c section Editing the DIR node
+
+What goes in `DIR', and why?
+
+@c node Storing Info files
+@c section Storing Info files
+
+Alternate formats allow flexibility in setups.
+
+@c node Using `localdir'
+@c section Using `localdir'
+
+Building DIR on the fly.
+
+@c node Example setups
+@c section Example setups
+
+Some common ways to organize Info files.
+@end ignore
+
+
+@node Index
+@appendix Index
+
+@printindex cp
+
+@bye
diff --git a/doc/info.1 b/doc/info.1
new file mode 100644
index 0000000..352f09a
--- /dev/null
+++ b/doc/info.1
@@ -0,0 +1,101 @@
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36.
+.TH INFO "1" "September 2008" "info 4.13" "User Commands"
+.SH NAME
+info \- read Info documents
+.SH SYNOPSIS
+.B info
+[\fIOPTION\fR]... [\fIMENU-ITEM\fR...]
+.SH DESCRIPTION
+Read documentation in Info format.
+.SH OPTIONS
+.TP
+\fB\-k\fR, \fB\-\-apropos\fR=\fISTRING\fR
+look up STRING in all indices of all manuals.
+.TP
+\fB\-d\fR, \fB\-\-directory\fR=\fIDIR\fR
+add DIR to INFOPATH.
+.TP
+\fB\-\-dribble\fR=\fIFILENAME\fR
+remember user keystrokes in FILENAME.
+.TP
+\fB\-f\fR, \fB\-\-file\fR=\fIFILENAME\fR
+specify Info file to visit.
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+display this help and exit.
+.TP
+\fB\-\-index\-search\fR=\fISTRING\fR
+go to node pointed by index entry STRING.
+.TP
+\fB\-n\fR, \fB\-\-node\fR=\fINODENAME\fR
+specify nodes in first visited Info file.
+.TP
+\fB\-o\fR, \fB\-\-output\fR=\fIFILENAME\fR
+output selected nodes to FILENAME.
+.TP
+\fB\-R\fR, \fB\-\-raw\-escapes\fR
+output "raw" ANSI escapes (default).
+.TP
+\fB\-\-no\-raw\-escapes\fR
+output escapes as literal text.
+.TP
+\fB\-\-restore\fR=\fIFILENAME\fR
+read initial keystrokes from FILENAME.
+.TP
+\fB\-O\fR, \fB\-\-show\-options\fR, \fB\-\-usage\fR
+go to command\-line options node.
+.TP
+\fB\-\-subnodes\fR
+recursively output menu items.
+.TP
+\fB\-\-vi\-keys\fR
+use vi\-like and less\-like key bindings.
+.TP
+\fB\-\-version\fR
+display version information and exit.
+.TP
+\fB\-w\fR, \fB\-\-where\fR, \fB\-\-location\fR
+print physical location of Info file.
+.PP
+The first non\-option argument, if present, is the menu entry to start from;
+it is searched for in all `dir' files along INFOPATH.
+If it is not present, info merges all `dir' files and shows the result.
+Any remaining arguments are treated as the names of menu
+items relative to the initial node visited.
+.PP
+For a summary of key bindings, type h within Info.
+.SH EXAMPLES
+.TP
+info
+show top\-level dir menu
+.TP
+info info
+show the general manual for Info readers
+.TP
+info info\-stnd
+show the manual specific to this Info program
+.TP
+info emacs
+start at emacs node from top\-level dir
+.TP
+info emacs buffers
+start at buffers node within emacs manual
+.TP
+info \fB\-\-show\-options\fR emacs
+start at node with emacs' command line options
+.TP
+info \fB\-\-subnodes\fR \fB\-o\fR out.txt emacs
+dump entire manual to out.txt
+.TP
+info \fB\-f\fR ./foo.info
+show file ./foo.info, not searching dir
+.SH "REPORTING BUGS"
+Email bug reports to bug\-texinfo@gnu.org,
+general questions and discussion to help\-texinfo@gnu.org.
+Texinfo home page: http://www.gnu.org/software/texinfo/
+.SH COPYRIGHT
+Copyright \(co 2008 Free Software Foundation, Inc.
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
+.br
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
diff --git a/doc/info.5 b/doc/info.5
new file mode 100644
index 0000000..488d2a1
--- /dev/null
+++ b/doc/info.5
@@ -0,0 +1,72 @@
+.\" info(5)
+.\" $Id: info.5,v 1.3 2005/01/20 22:38:32 karl Exp $
+.\"
+.\" Copyright (C) 1998 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 stated in a
+.\" translation approved by the Foundation.
+.\"
+.de EX
+.nf
+.ft CW
+.in +5
+..
+.de EE
+.in -5
+.ft R
+.fi
+..
+.TH INFO 5 "GNU Info" "FSF"
+.SH NAME
+info \- readable online documentation
+.SH DESCRIPTION
+The Info file format is an easily-parsable representation for online
+documents. It can be read by
+.I emacs(1)
+and
+.I info(1)
+among other programs.
+.PP
+Info files are usually created from
+.I texinfo(5)
+sources by
+.IR makeinfo(1) ,
+but can be created from scratch if so desired.
+.PP
+For a full description of the Texinfo language and associated tools,
+please see the Texinfo manual (written in Texinfo itself). Most likely,
+running this command from your shell:
+.EX
+info texinfo
+.EE
+or this key sequence from inside Emacs:
+.EX
+M-x info RET m texinfo RET
+.EE
+will get you there.
+.SH AVAILABILITY
+ftp://ftp.gnu.org/pub/gnu/texinfo-<version>.tar.gz
+.br
+or any GNU mirror site.
+.SH "REPORTING BUGS"
+Please send bug reports to bug-texinfo@gnu.org,
+general questions and discussion to help-texinfo@gnu.org.
+.SH "SEE ALSO"
+info(1), install-info(1), makeinfo(1), texi2dvi(1),
+.br
+texindex(1).
+.br
+emacs(1), tex(1).
+.br
+texinfo(5).
diff --git a/doc/info.texi b/doc/info.texi
new file mode 100644
index 0000000..62c4c85
--- /dev/null
+++ b/doc/info.texi
@@ -0,0 +1,1511 @@
+\input texinfo.tex @c -*-texinfo-*-
+@c We must \input texinfo.tex instead of texinfo, otherwise make
+@c distcheck in the Texinfo distribution fails, because the texinfo Info
+@c file is made first, and texi2dvi must include . first in the path.
+@comment %**start of header
+@setfilename info.info
+@settitle Info
+@syncodeindex fn cp
+@syncodeindex vr cp
+@syncodeindex ky cp
+@comment %**end of header
+
+@copying
+This file describes how to use Info, the on-line, menu-driven GNU
+documentation system.
+
+Copyright @copyright{} 1989, 1992, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 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.2 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'' in the Emacs manual.
+
+(a) The FSF's Back-Cover Text is: ``You have freedom to copy and
+modify this GNU Manual, like GNU software. Buying copies from GNU
+Press supports the FSF in developing GNU and promoting software
+freedom.''
+
+This document is part of a collection distributed under the GNU Free
+Documentation License. If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
+@end quotation
+@end copying
+
+@dircategory Texinfo documentation system
+@direntry
+* Info: (info). How to use the documentation browsing system.
+@end direntry
+
+@titlepage
+@title Info
+@subtitle The online, hyper-text GNU documentation system
+@author Brian Fox
+@author and the GNU Texinfo community
+@page
+@vskip 0pt plus 1filll
+@insertcopying
+@end titlepage
+
+@contents
+
+@ifnottex
+@node Top
+@top Info: An Introduction
+
+The GNU Project distributes most of its on-line manuals in the
+@dfn{Info format}, which you read using an @dfn{Info reader}. You are
+probably using an Info reader to read this now.
+
+There are two primary Info readers: @code{info}, a stand-alone program
+designed just to read Info files (@pxref{Top,,Stand-alone Info,
+info-stnd, GNU Info}), and the @code{info} package in GNU Emacs, a
+general-purpose editor. At present, only the Emacs reader supports
+using a mouse.
+
+@ifinfo
+If you are new to the Info reader and want to learn how to use it,
+type the command @kbd{h} now. It brings you to a programmed
+instruction sequence.
+
+To read about advanced Info commands, type @kbd{n} twice. This
+brings you to @cite{Advanced Info Commands}, skipping over the `Getting
+Started' chapter.
+@end ifinfo
+@end ifnottex
+
+@menu
+* Getting Started:: Getting started using an Info reader.
+* Advanced:: Advanced Info commands.
+* Expert Info:: Info commands for experts.
+* Index:: An index of topics, commands, and variables.
+@end menu
+
+@node Getting Started, Advanced, Top, Top
+@comment node-name, next, previous, up
+@chapter Getting Started
+
+This first part of this Info manual describes how to get around inside
+of Info. The second part of the manual describes various advanced
+Info commands. The third part briefly explains how to generate Info
+files from Texinfo files, and describes how to write an Info file
+by hand.
+
+@ifnotinfo
+This manual is primarily designed for browsing with an Info reader
+program on a computer, so that you can try Info commands while reading
+about them. Reading it on paper or with an HTML browser is less
+effective, since you must take it on faith that the commands described
+really do what the manual says. By all means go through this manual
+now that you have it; but please try going through the on-line version
+as well.
+
+@cindex Info reader, how to invoke
+@cindex entering Info
+There are two ways of looking at the online version of this manual:
+
+@enumerate
+@item
+Type @code{info} at your shell's command line. This approach uses a
+stand-alone program designed just to read Info files.
+
+@item
+Type @code{emacs} at the command line; then type @kbd{C-h i}
+(@kbd{Control-h}, followed by @kbd{i}). This approach uses the Info
+mode of the Emacs editor.
+@end enumerate
+
+In either case, then type @kbd{mInfo} (just the letters), followed by
+@key{RET}---the ``Return'' or ``Enter'' key. At this point, you should
+be ready to follow the instructions in this manual as you read them on
+the screen.
+@c FIXME! (pesch@cygnus.com, 14 dec 1992)
+@c Is it worth worrying about what-if the beginner goes to somebody
+@c else's Emacs session, which already has an Info running in the middle
+@c of something---in which case these simple instructions won't work?
+@end ifnotinfo
+
+@menu
+* Help-Small-Screen:: Starting Info on a Small Screen.
+* Help:: How to use Info.
+* Help-P:: Returning to the Previous node.
+* Help-^L:: The Space, DEL, B and ^L commands.
+* Help-Inv:: Invisible text in Emacs Info.
+* Help-M:: Menus.
+* Help-Xref:: Following cross-references.
+* Help-Int:: Some intermediate Info commands.
+* Help-Q:: Quitting Info.
+@end menu
+
+@node Help-Small-Screen
+@section Starting Info on a Small Screen
+
+@ifnotinfo
+(In Info, you only see this section if your terminal has a small
+number of lines; most readers pass by it without seeing it.)
+@end ifnotinfo
+
+@cindex small screen, moving around
+Since your terminal has a relatively small number of lines on its
+screen, it is necessary to give you special advice at the beginning.
+
+If the entire text you are looking at fits on the screen, the text
+@samp{All} will be displayed at the bottom of the screen. In the
+stand-alone Info reader, it is displayed at the bottom right corner of
+the screen; in Emacs, it is displayed on the modeline. If you see the
+text @samp{Top} instead, it means that there is more text below that
+does not fit. To move forward through the text and see another screen
+full, press @key{SPC}, the Space bar. To move back up, press the key
+labeled @samp{Backspace} or @samp{DEL} (on some keyboards, this key
+might be labeled @samp{Delete}).
+
+@ifinfo
+Here are 40 lines of junk, so you can try @key{SPC} and @key{DEL} and
+see what they do. At the end are instructions of what you should do
+next.
+
+@format
+This is line 20
+This is line 21
+This is line 22
+This is line 23
+This is line 24
+This is line 25
+This is line 26
+This is line 27
+This is line 28
+This is line 29
+This is line 30
+This is line 31
+This is line 32
+This is line 33
+This is line 34
+This is line 35
+This is line 36
+This is line 37
+This is line 38
+This is line 39
+This is line 40
+This is line 41
+This is line 42
+This is line 43
+This is line 44
+This is line 45
+This is line 46
+This is line 47
+This is line 48
+This is line 49
+This is line 50
+This is line 51
+This is line 52
+This is line 53
+This is line 54
+This is line 55
+This is line 56
+This is line 57
+This is line 58
+This is line 59
+@end format
+
+If you have managed to get here, go back to the beginning with
+@kbd{DEL} (or @key{BACKSPACE}), and come back here again, then you
+understand the about the @samp{Space} and @samp{Backspace} keys. So
+now type an @kbd{n}---just one character; don't type the quotes and
+don't type the Return key afterward---to get to the normal start of
+the course.
+@end ifinfo
+
+@node Help, Help-P, Help-Small-Screen, Getting Started
+@comment node-name, next, previous, up
+@section How to use Info
+
+You are talking to the program Info, for reading documentation.
+
+ There are two ways to use Info: from within Emacs or as a
+stand-alone reader that you can invoke from a shell using the command
+@command{info}.
+
+@cindex node, in Info documents
+ Right now you are looking at one @dfn{Node} of Information.
+A node contains text describing a specific topic at a specific
+level of detail. This node's topic is ``how to use Info''. The mode
+line says that this is node @samp{Help} in the file @file{info}.
+
+@cindex header of Info node
+ The top line of a node is its @dfn{header}. This node's header
+(look at it now) says that the @samp{Next} node after this one is the
+node called @samp{Help-P}. An advanced Info command lets you go to
+any node whose name you know. In the stand-alone Info reader program,
+the header line shows the names of this node and the Info file as
+well. In Emacs, the header line is displayed with a special typeface,
+and remains at the top of the window all the time even if you scroll
+through the node.
+
+ Besides a @samp{Next}, a node can have a @samp{Previous} link, or an
+@samp{Up} link, or both. As you can see, this node has all of these
+links.
+
+@kindex n @r{(Info mode)}
+ Now it is time to move on to the @samp{Next} node, named @samp{Help-P}.
+
+@format
+>> Type @kbd{n} to move there. Type just one character;
+ do not type the quotes and do not type a @key{RET} afterward.
+@end format
+
+@noindent
+@samp{>>} in the margin means it is really time to try a command.
+
+@format
+>> If you are in Emacs and have a mouse, and if you already practiced
+ typing @kbd{n} to get to the next node, click now with the left
+ mouse button on the @samp{Next} link to do the same ``the mouse way''.
+@end format
+
+@node Help-P, Help-^L, Help, Getting Started
+@comment node-name, next, previous, up
+@section Returning to the Previous node
+
+@kindex p @r{(Info mode)}
+This node is called @samp{Help-P}. The @samp{Previous} node, as you see,
+is @samp{Help}, which is the one you just came from using the @kbd{n}
+command. Another @kbd{n} command now would take you to the next
+node, @samp{Help-^L}.
+
+@format
+>> But do not type @kbd{n} yet. First, try the @kbd{p} command, or
+ (in Emacs) click on the @samp{Prev} link. That takes you to
+ the @samp{Previous} node. Then use @kbd{n} to return here.
+@end format
+
+ If you read this in Emacs, you will see an @samp{Info} item in the
+menu bar, close to its right edge. Clicking the mouse on the
+@samp{Info} menu-bar item opens a menu of commands which include
+@samp{Next} and @samp{Previous} (and also some others which you didn't yet
+learn about).
+
+ This all probably seems insultingly simple so far, but @emph{please
+don't} start skimming. Things will get complicated soon enough!
+Also, please do not try a new command until you are told it is time
+to. You could make Info skip past an important warning that was
+coming up.
+
+@format
+>> Now do an @kbd{n}, or (in Emacs) click the middle mouse button on
+ the @samp{Next} link, to get to the node @samp{Help-^L} and learn more.
+@end format
+
+@node Help-^L, Help-Inv, Help-P, Getting Started
+@comment node-name, next, previous, up
+@section The Space, DEL, B and ^L commands
+
+ This node's mode line tells you that you are now at node
+@samp{Help-^L}, and the header line tells you that @kbd{p} would get
+you back to @samp{Help-P}. The node's title is highlighted and may be
+underlined as well; it says what the node is about.
+
+ This is a big node and it does not all fit on your display screen.
+You can tell that there is more that is not visible because you
+can see the text @samp{Top} rather than @samp{All} near the bottom of
+the screen.
+
+@kindex SPC @r{(Info mode)}
+@kindex DEL @r{(Info mode)}
+@kindex BACKSPACE @r{(Info mode)}
+@findex Info-scroll-up
+@findex Info-scroll-down
+ The @key{SPC}, @key{BACKSPACE} (or @key{DEL})@footnote{The key which
+we call ``Backspace or DEL'' in this manual is labeled differently on
+different keyboards. Look for a key which is a little ways above the
+@key{ENTER} or @key{RET} key and which you normally use outside Emacs
+to erase the character before the cursor, i.e.@: the character you
+typed last. It might be labeled @samp{Backspace} or @samp{<-} or
+@samp{DEL}, or sometimes @samp{Delete}.} and @kbd{b} commands exist to
+allow you to ``move around'' in a node that does not all fit on the
+screen at once. @key{SPC} moves forward, to show what was below the
+bottom of the screen. @key{DEL} or @key{BACKSPACE} moves backward, to
+show what was above the top of the screen (there is not anything above
+the top until you have typed some spaces).
+
+@format
+>> Now try typing a @key{SPC} (afterward, type a @key{BACKSPACE} to
+ return here).
+@end format
+
+ When you type the @key{SPC}, the two lines that were at the bottom of
+the screen appear at the top, followed by more lines. @key{DEL} or
+@key{BACKSPACE} takes the two lines from the top and moves them to the
+bottom, @emph{usually}, but if there are not a full screen's worth of
+lines above them they may not make it all the way to the bottom.
+
+ If you are reading this in Emacs, note that the header line is
+always visible, never scrolling off the display. That way, you can
+always see the @samp{Next}, @samp{Prev}, and @samp{Up} links, and you
+can conveniently go to one of these links at any time by
+clicking the middle mouse button on the link.
+
+@cindex reading Info documents top to bottom
+@cindex Info documents as tutorials
+ @key{SPC} and @key{DEL} not only move forward and backward through
+the current node. They also move between nodes. @key{SPC} at the end
+of a node moves to the next node; @key{DEL} (or @key{BACKSPACE}) at
+the beginning of a node moves to the previous node. In effect, these
+commands scroll through all the nodes in an Info file as a single
+logical sequence. You can read an entire manual top to bottom by just
+typing @key{SPC}, and move backward through the entire manual from
+bottom to top by typing @key{DEL} (or @key{BACKSPACE}).
+
+ In this sequence, a node's subnodes appear following their parent.
+If a node has a menu, @key{SPC} takes you into the subnodes listed in
+the menu, one by one. Once you reach the end of a node, and have seen
+all of its subnodes, @key{SPC} takes you to the next node or to the
+parent's next node.
+
+@kindex PAGEUP @r{(Info mode)}
+@kindex PAGEDOWN @r{(Info mode)}
+ Many keyboards nowadays have two scroll keys labeled @samp{PageUp}
+and @samp{PageDown} (or maybe @samp{Prior} and @samp{Next}). If your
+keyboard has these keys, you can use them to move forward and backward
+through the text of one node, like @key{SPC} and @key{BACKSPACE} (or
+@key{DEL}). However, @key{PAGEUP} and @key{PAGEDOWN} keys never
+scroll beyond the beginning or the end of the current node.
+
+@kindex C-l @r{(Info mode)}
+ If your screen is ever garbaged, you can tell Info to display it
+again by typing @kbd{C-l} (@kbd{Control-L}---that is, hold down
+@key{CTRL} and type @kbd{L} or @kbd{l}).
+
+@format
+>> Type @kbd{C-l} now.
+@end format
+
+@kindex b @r{(Info mode)}
+ To move back to the beginning of the node you are on, you can type
+the @key{BACKSPACE} key (or @key{DEL}) many times. You can also type
+@kbd{b} just once. @kbd{b} stands for ``beginning.''
+
+@format
+>> Try that now. (We have put in enough verbiage to push this past
+ the first screenful, but screens are so big nowadays that perhaps it
+ isn't enough. You may need to shrink your Emacs or Info window.)
+ Then come back, by typing @key{SPC} one or more times.
+@end format
+
+@kindex ? @r{(Info mode)}
+@findex Info-summary
+ You have just learned a considerable number of commands. If you
+want to use one but have trouble remembering which, you should type
+@kbd{?}, which displays a brief list of commands. When you are
+finished looking at the list, make it go away by typing @key{SPC}
+repeatedly.
+
+@format
+>> Type a @key{?} now. Press @key{SPC} to see consecutive screenfuls of
+ the list until finished. Then type @key{SPC} several times. If
+ you are using Emacs, the help will then go away automatically.
+@end format
+
+ (If you are using the stand-alone Info reader, type @kbd{C-x 0} to
+return here, that is---press and hold @key{CTRL}, type an @kbd{x},
+then release @key{CTRL} and @kbd{x}, and press @kbd{0}; that's a zero,
+not the letter ``o''.)
+
+ From now on, you will encounter large nodes without warning, and
+will be expected to know how to use @key{SPC} and @key{BACKSPACE} to
+move around in them without being told. Since not all terminals have
+the same size screen, it would be impossible to warn you anyway.
+
+@format
+>> Now type @kbd{n}, or click the middle mouse button on the @samp{Next} link,
+ to visit the next node.
+@end format
+
+@node Help-Inv, Help-M, Help-^L, Getting Started
+@comment node-name, next, previous, up
+@section Invisible text in Emacs Info
+
+ Before discussing menus, we need to make some remarks that are only
+relevant to users reading Info using Emacs. Users of the stand-alone
+version can skip this node by typing @kbd{]} now.
+
+@cindex invisible text in Emacs
+ In Emacs, certain text that appears in the stand-alone version is
+normally hidden, technically because it has the @samp{invisibility}
+property. Invisible text is really a part of the text. It becomes
+visible (by default) after killing and yanking, it appears in printed
+output, it gets saved to file just like any other text, and so on.
+Thus it is useful to know it is there.
+
+@findex visible-mode
+You can make invisible text visible by using the command @kbd{M-x
+visible-mode}. Visible mode is a minor mode, so using the command a
+second time will make the text invisible again. Watch the effects of
+the command on the ``menu'' below and the top line of this node.
+
+If you prefer to @emph{always} see the invisible text, you can set
+@code{Info-hide-note-references} to @code{nil}. Enabling Visible mode
+permanently is not a real alternative, because Emacs Info also uses
+(although less extensively) another text property that can change the
+text being displayed, the @samp{display} property. Only the
+invisibility property is affected by Visible mode. When, in this
+tutorial, we refer to the @samp{Emacs} behavior, we mean the
+@emph{default} Emacs behavior.
+
+Now type @kbd{]}, to learn about the @kbd{]} and @kbd{[} commands.
+
+@menu
+* ]: Help-]. Node telling about ].
+* stuff: Help-]. Same node.
+* Help-]:: Yet again, same node.
+@end menu
+
+@node Help-], , , Help-Inv
+@subsection The @kbd{]} and @kbd{[} commands
+
+If you type @kbd{n} now, you get an error message saying that this
+node has no next node. Similarly, if you type @kbd{p}, the error
+message tells you that there is no previous node. (The exact message
+depends on the Info reader you use.) This is because @kbd{n} and
+@kbd{p} carry you to the next and previous node @emph{at the same
+level}. The present node is contained in a menu (see next) of the
+node you came from, and hence is considered to be at a lower level.
+It is the only node in the previous node's menu (even though it was
+listed three times). Hence it has no next or previous node that
+@kbd{n} or @kbd{p} could move to.
+
+If you systematically move through a manual by typing @kbd{n}, you run
+the risk of skipping many nodes. You do not run this risk if you
+systematically use @kbd{@key{SPC}}, because, when you scroll to the
+bottom of a node and type another @kbd{@key{SPC}}, then this carries
+you to the following node in the manual @emph{regardless of level}.
+If you immediately want to go to that node, without having to scroll
+to the bottom of the screen first, you can type @kbd{]}.
+
+Similarly, @kbd{@key{BACKSPACE}} carries you to the preceding node
+regardless of level, after you scrolled to the beginning of the
+present node. If you want to go to the preceding node immediately,
+you can type @kbd{[}.
+
+For instance, typing this sequence will come back here in three steps:
+@kbd{[ n [}. To do the same backward, type @kbd{] p ]}.
+
+Now type @kbd{]} to go to the next node and learn about menus.
+
+@node Help-M, Help-Xref, Help-Inv, Getting Started
+@comment node-name, next, previous, up
+@section Menus and the @kbd{m} command
+
+@cindex menus in an Info document
+@cindex Info menus
+ With only the @kbd{n} (next), @kbd{p} (previous), @kbd{@key{SPC}},
+@kbd{@key{BACKSPACE}}, @kbd{]} and @kbd{[} commands for moving between
+nodes, nodes are restricted to a linear sequence. Menus allow a
+branching structure. A menu is a list of other nodes you can move to.
+It is actually just part of the text of the node formatted specially
+so that Info can interpret it. The beginning of a menu is always
+identified by a line which starts with @w{@samp{* Menu:}}. A node
+contains a menu if and only if it has a line in it which starts that
+way. The only menu you can use at any moment is the one in the node
+you are in. To use a menu in any other node, you must move to that
+node first.
+
+ After the start of the menu, each line that starts with a @samp{*}
+identifies one subtopic. The line usually contains a brief name for
+the subtopic (followed by a @samp{:}, normally hidden in Emacs), the
+name of the node that talks about that subtopic (again, normally
+hidden in Emacs), and optionally some further description of the
+subtopic. Lines in the menu that do not start with a @samp{*} have no
+special meaning---they are only for the human reader's benefit and do
+not define additional subtopics. Here is an example:
+
+@example
+* Foo: Node about FOO. This tells about FOO.
+@end example
+
+The subtopic name is Foo, and the node describing it is @samp{Node
+about FOO}. The rest of the line is just for the reader's
+Information. [[ But this line is not a real menu item, simply because
+there is no line above it which starts with @w{@samp{* Menu:}}. Also,
+in a real menu item, the @samp{*} would appear at the very start of
+the line. This is why the ``normally hidden'' text in Emacs, namely
+@samp{: Node about FOO.}, is actually visible in this example, even
+when Visible mode is off.]]
+
+ When you use a menu to go to another node (in a way that will be
+described soon), what you specify is the subtopic name, the first
+thing in the menu line. Info uses it to find the menu line, extracts
+the node name from it, and goes to that node. The reason that there
+is both a subtopic name and a node name is that the node name must be
+meaningful to the computer and may therefore have to be ugly looking.
+The subtopic name can be chosen just to be convenient for the user to
+specify. Often the node name is convenient for the user to specify
+and so both it and the subtopic name are the same. There is an
+abbreviation for this:
+
+@example
+* Foo:: This tells about FOO.
+@end example
+
+@noindent
+This means that the subtopic name and node name are the same; they are
+both @samp{Foo}. (The @samp{::} is normally hidden in Emacs.)
+
+@format
+>> Now use @key{SPC} to find the menu in this node, then come back to
+ the front with a @kbd{b} and some @key{SPC}s. As you see, a menu is
+ actually visible in its node. If you cannot find a menu in a node
+ by looking at it, then the node does not have a menu and the
+ @kbd{m} command is not available.
+@end format
+
+If you keep typing @key{SPC} once the menu appears on the screen, it
+will move to another node (the first one in the menu). If that
+happens, type @key{BACKSPACE} to come back.
+
+@kindex m @r{(Info mode)}
+ The command to go to one of the subnodes is @kbd{m}. This is very
+different from the commands you have used: it is a command that
+prompts you for more input.
+
+ The Info commands you know do not need additional input; when you
+type one of them, Info processes it instantly and then is ready for
+another command. The @kbd{m} command is different: it needs to know
+the @dfn{name of the subtopic}. Once you have typed @kbd{m}, Info
+tries to read the subtopic name.
+
+ Now, in the stand-alone Info, look for the line containing many
+dashes near the bottom of the screen. (This is the stand-alone
+equivalent for the mode line in Emacs.) There is one more line
+beneath that one, but usually it is blank. (In Emacs, this is the
+echo area.) When it is blank, Info is ready for a command, such as
+@kbd{n} or @kbd{b} or @key{SPC} or @kbd{m}. If that line contains
+text ending in a colon, it means Info is reading more input for the
+last command. You can't type an Info command then, because Info is
+trying to read input, not commands. You must either give the input
+and finish the command you started, or type @kbd{Control-g} to cancel
+the command. When you have done one of those things, the input entry
+line becomes blank again. Then you can type Info commands again.
+
+@findex Info-menu
+ The command to go to a subnode via a menu is @kbd{m}. After you type
+the @kbd{m}, the line at the bottom of the screen says @samp{Menu item: }.
+You must then type the name of the subtopic you want, and end it with
+a @key{RET}.
+
+@cindex abbreviating Info subnodes
+ You can abbreviate the subtopic name. If the abbreviation is not
+unique, the first matching subtopic is chosen. Some menus put
+the shortest possible abbreviation for each subtopic name in capital
+letters, so you can see how much you need to type. It does not
+matter whether you use upper case or lower case when you type the
+subtopic. You should not put any spaces at the end, or inside of the
+item name, except for one space where a space appears in the item in
+the menu.
+
+@cindex completion of Info node names
+ You can also use the @dfn{completion} feature to help enter the
+subtopic name. If you type the @key{TAB} key after entering part of a
+name, it will fill in more of the name---as much as Info can deduce
+from the part you have entered.
+
+ If you move the cursor to one of the menu subtopic lines, then you do
+not need to type the argument: you just type a @key{RET}, and it
+stands for the subtopic of the line you are on. You can also click
+the middle mouse button directly on the subtopic line to go there.
+
+Here is a menu to give you a chance to practice. This menu gives you
+three ways of going to one place, Help-FOO:
+
+@menu
+* Foo: Help-FOO. A node you can visit for fun.
+* Bar: Help-FOO. We have made two ways to get to the same place.
+* Help-FOO:: And yet another!
+@end menu
+
+(Turn Visible mode on if you are using Emacs.)
+
+@format
+>> Now type just an @kbd{m} and see what happens:
+@end format
+
+ Now you are ``inside'' an @kbd{m} command. Commands cannot be used
+now; the next thing you will type must be the name of a subtopic.
+
+ You can change your mind about doing the @kbd{m} by typing
+@kbd{Control-g}.
+
+@format
+>> Try that now; notice the bottom line clear.
+@end format
+
+@format
+>> Then type another @kbd{m}.
+@end format
+
+@format
+>> Now type @kbd{BAR}, the item name. Do not type @key{RET} yet.
+@end format
+
+ While you are typing the item name, you can use the @key{DEL} (or
+@key{BACKSPACE}) key to cancel one character at a time if you make a
+mistake.
+
+@format
+>> Press @key{DEL} to cancel the @samp{R}. You could type another @kbd{R}
+ to replace it. But you do not have to, since @samp{BA} is a valid
+ abbreviation.
+@end format
+
+@format
+>> Now you are ready to go. Type a @key{RET}.
+@end format
+
+ After visiting @samp{Help-FOO}, you should return here.
+
+ Another way to move to the menu subtopic lines and between them is
+to type @key{TAB}. Each time you type a @key{TAB}, you move to the
+next subtopic line. To move to a previous subtopic line in the
+stand-alone reader, type @kbd{M-@key{TAB}}---that is, press and hold
+the @key{META} key and then press @key{TAB}. (On some keyboards, the
+@key{META} key might be labeled @samp{Alt}.) In Emacs Info, type
+@kbd{S-@key{TAB}} to move to a previous subtopic line (press and hold
+the @key{Shift} key and then press @key{TAB}).
+
+ Once you move cursor to a subtopic line, press @key{RET} to go to
+that subtopic's node.
+
+@cindex mouse support in Info mode
+@kindex Mouse-2 @r{(Info mode)}
+ If your terminal supports a mouse, you have yet another way of going
+to a subtopic. Move your mouse pointer to the subtopic line,
+somewhere between the beginning @samp{*} and the colon @samp{:} which
+ends the subtopic's brief name. You will see the subtopic's name
+change its appearance (usually, its background color will change), and
+the shape of the mouse pointer will change if your platform supports
+that. After a while, if you leave the mouse on that spot, a small
+window will pop up, saying ``Mouse-2: go to that node,'' or the same
+message may appear at the bottom of the screen.
+
+ @kbd{Mouse-2} is the second button of your mouse counting from the
+left---the middle button on a 3-button mouse. (On a 2-button mouse,
+you may have to press both buttons together to ``press the middle
+button''.) The message tells you pressing @kbd{Mouse-2} with the
+current position of the mouse pointer (on subtopic in the menu) will
+go to that subtopic.
+
+@findex Info-mouse-follow-nearest-node
+ More generally, @kbd{Mouse-2} in an Info buffer finds the nearest
+link to another node and goes there. For example, near a cross
+reference it acts like @kbd{f}, in a menu it acts like @kbd{m}, on the
+node's header line it acts like @kbd{n}, @kbd{p}, or @kbd{u}, etc. At
+end of the node's text @kbd{Mouse-2} moves to the next node, or up if
+there's no next node.
+
+@format
+>> Type @kbd{n} to see more commands.
+@end format
+
+@node Help-FOO, , , Help-M
+@subsection The @kbd{u} command
+
+ Congratulations! This is the node @samp{Help-FOO}. It has an @samp{Up}
+pointer @samp{Help-M}, the node you just came from via the @kbd{m}
+command. This is the usual convention---the nodes you reach from a menu
+have @samp{Up} nodes that lead back to the menu. Menus move Down in the
+tree, and @samp{Up} moves Up. @samp{Previous}, on the other hand, is
+usually used to ``stay on the same level but go backwards''.
+
+@kindex u @r{(Info mode)}
+@findex Info-up
+ You can go back to the node @samp{Help-M} by typing the command
+@kbd{u} for ``Up''. This puts you at the menu subtopic line pointing
+to the subnode that the @kbd{u} command brought you from. (Some Info
+readers may put you at the @emph{front} of the node instead---to get
+back to where you were reading, you have to type some @key{SPC}s.)
+
+ Another way to go Up is to click @kbd{Mouse-2} on the @samp{Up}
+pointer shown in the header line (provided that you have a mouse).
+
+@format
+>> Now type @kbd{u} to move back up to @samp{Help-M}.
+@end format
+
+@node Help-Xref, Help-Int, Help-M, Getting Started
+@comment node-name, next, previous, up
+@section Following Cross-References
+
+@cindex cross references in Info documents
+ In Info documentation, you will see many @dfn{cross references}.
+Cross references look like this: @xref{Help-Cross, Cross}. That text
+is a real, live cross reference, whose name is @samp{Cross} and which
+points to the node named @samp{Help-Cross}. (The node name is hidden
+in Emacs. Do @kbd{M-x visible-mode} to show or hide it.)
+
+@kindex f @r{(Info mode)}
+@findex Info-follow-reference
+ You can follow a cross reference by moving the cursor to it and
+press @key{RET}, just as in a menu. In Emacs, you can also click
+@kbd{Mouse-1} on a cross reference to follow it; you can see that the
+cross reference is mouse-sensitive by moving the mouse pointer to the
+reference and watching how the underlying text and the mouse pointer
+change in response.
+
+ Another way to follow a cross reference is to type @kbd{f} and then
+specify the name of the cross reference (in this case, @samp{Cross})
+as an argument. For this command, it does not matter where the cursor
+was. If the cursor is on or near a cross reference, @kbd{f} suggests
+that reference name in parentheses as the default; typing @key{RET}
+will follow that reference. However, if you type a different
+reference name, @kbd{f} will follow the other reference which has that
+name.
+
+@format
+>> Type @kbd{f}, followed by @kbd{Cross}, and then @key{RET}.
+@end format
+
+ As you enter the reference name, you can use the @key{DEL} (or
+@key{BACKSPACE}) key to edit your input. If you change your mind
+about following any reference, you can use @kbd{Control-g} to cancel
+the command. Completion is available in the @kbd{f} command; you can
+complete among all the cross reference names in the current node by
+typing a @key{TAB}.
+
+ To get a list of all the cross references in the current node, you
+can type @kbd{?} after an @kbd{f}. The @kbd{f} continues to await a
+cross reference name even after displaying the list, so if you don't
+actually want to follow a reference, you should type a @kbd{Control-g}
+to cancel the @kbd{f}.
+
+@format
+>> Type @kbd{f?} to get a list of the cross references in this node. Then
+ type a @kbd{Control-g} and see how the @samp{f} gives up.
+@end format
+
+ The @key{TAB}, @kbd{M-@key{TAB}} and @kbd{S-@key{TAB}} keys,
+which move between menu items in a menu, also move between cross
+references outside of menus.
+
+ Sometimes a cross reference (or a node) can lead to another file (in
+other words another ``manual''), or, on occasion, even a file on a
+remote machine (although Info files distributed with Emacs or the
+stand-alone Info avoid using remote links). Such a cross reference
+looks like this: @xref{Top,, Overview of Texinfo, texinfo, Texinfo:
+The GNU Documentation Format}. (After following this link, type
+@kbd{l} to get back to this node.) Here the name @samp{texinfo}
+between parentheses refers to the file name. This file name appears
+in cross references and node names if it differs from the current
+file, so you can always know that you are going to be switching to
+another manual and which one.
+
+However, Emacs normally hides some other text in cross-references.
+If you put your mouse over the cross reference, then the information
+appearing in a separate box (tool tip) or in the echo area will show
+the full cross-reference including the file name and the node name of
+the cross reference. If you have a mouse, just leave it over the
+cross reference @xref{Top,, Overview of Texinfo, texinfo, Texinfo:
+The GNU Documentation Format}, and watch what happens. If you
+always like to have that information visible without having to move
+your mouse over the cross reference, use @kbd{M-x visible-mode}, or
+set @code{Info-hide-note-references} to a value other than @code{t}
+(@pxref{Emacs Info Variables}).
+
+@format
+>> Now type @kbd{n} to learn more commands.
+@end format
+
+@node Help-Int, Help-Q, Help-Xref, Getting Started
+@comment node-name, next, previous, up
+@section Some intermediate Info commands
+
+ The introductory course is almost over; please continue
+a little longer to learn some intermediate-level commands.
+
+ Most Info files have an index, which is actually a large node
+containing little but a menu. The menu has one menu item for each
+topic listed in the index. (As a special feature, menus for indices
+may also include the line number within the node of the index entry.
+This allows Info readers to go to the exact line of an entry, not just
+the start of the containing node.)
+
+ You can get to the index from the main menu of the file with the
+@kbd{m} command and the name of the index node; then you can use the
+@kbd{m} command again in the index node to go to the node that
+describes the topic you want.
+
+ There is also a short-cut Info command, @kbd{i}, which does all of
+that for you. It searches the index for a given topic (a string) and
+goes to the node which is listed in the index for that topic.
+@xref{Search Index}, for a full explanation.
+
+@kindex l @r{(Info mode)}
+@findex Info-history-back
+@cindex going back in Info history
+ If you have been moving around to different nodes and wish to
+retrace your steps, the @kbd{l} command (@kbd{l} for @dfn{last}) will
+do that, one node-step at a time. As you move from node to node, Info
+records the nodes where you have been in a special history list. The
+@kbd{l} command revisits nodes in the history list; each successive
+@kbd{l} command moves one step back through the history.
+
+@format
+>> Try typing @kbd{p p n} and then three @kbd{l}'s, pausing in between
+to see what each @kbd{l} does. You should wind up right back here.
+@end format
+
+ Note the difference between @kbd{l} and @kbd{p}: @kbd{l} moves to
+where @emph{you} last were, whereas @kbd{p} always moves to the node
+which the header says is the @samp{Previous} node (from this node, the
+@samp{Prev} link leads to @samp{Help-Xref}).
+
+@kindex r @r{(Info mode)}
+@findex Info-history-forward
+@cindex going forward in Info history
+ You can use the @kbd{r} command (@code{Info-history-forward} in Emacs)
+to revisit nodes in the history list in the forward direction, so that
+@kbd{r} will return you to the node you came from by typing @kbd{l}.
+
+@kindex L @r{(Info mode)}
+@findex Info-history
+@cindex history list of visited nodes
+ The @kbd{L} command (@code{Info-history} in Emacs) creates a virtual
+node that contains a list of all nodes you visited. You can select
+a previously visited node from this menu to revisit it.
+
+@kindex d @r{(Info mode)}
+@findex Info-directory
+@cindex go to Directory node
+ The @kbd{d} command (@code{Info-directory} in Emacs) gets you
+instantly to the Directory node. This node, which is the first one
+you saw when you entered Info, has a menu which leads (directly or
+indirectly, through other menus), to all the nodes that exist. The
+Directory node lists all the manuals and other Info documents that
+are, or could be, installed on your system.
+
+@format
+>> Try doing a @kbd{d}, then do an @kbd{l} to return here (yes,
+ @emph{do} return).
+@end format
+
+@kindex t @r{(Info mode)}
+@findex Info-top-node
+@cindex go to Top node
+ The @kbd{t} command moves to the @samp{Top} node of the manual.
+This is useful if you want to browse the manual's main menu, or select
+some specific top-level menu item. The Emacs command run by @kbd{t}
+is @code{Info-top-node}.
+
+@format
+>> Now type @kbd{n} to see the last node of the course.
+@end format
+
+ @xref{Advanced}, for more advanced Info features.
+
+@c If a menu appears at the end of this node, remove it.
+@c It is an accident of the menu updating command.
+
+@node Help-Q, , Help-Int, Getting Started
+@comment node-name, next, previous, up
+@section Quitting Info
+
+@kindex q @r{(Info mode)}
+@findex Info-exit
+@cindex quitting Info mode
+ To get out of Info, back to what you were doing before, type @kbd{q}
+for @dfn{Quit}. This runs @code{Info-exit} in Emacs.
+
+ This is the end of the basic course on using Info. You have learned
+how to move in an Info document, and how to follow menus and cross
+references. This makes you ready for reading manuals top to bottom,
+as new users should do when they learn a new package.
+
+ Another set of Info commands is useful when you need to find
+something quickly in a manual---that is, when you need to use a manual
+as a reference rather than as a tutorial. We urge you to learn
+these search commands as well. If you want to do that now, follow this
+cross reference to @ref{Advanced}.
+
+Yet another set of commands are meant for experienced users; you can
+find them by looking in the Directory node for documentation on Info.
+Finding them will be a good exercise in using Info in the usual
+manner.
+
+@format
+>> Type @kbd{d} to go to the Info directory node; then type
+ @kbd{mInfo} and Return, to get to the node about Info and
+ see what other help is available.
+@end format
+
+
+@node Advanced
+@chapter Advanced Info Commands
+
+ This chapter describes various advanced Info commands. (If you
+are using a stand-alone Info reader, there are additional commands
+specific to it, which are documented in several chapters of @ref{Top,,
+GNU Info, info-stnd, GNU Info}.)
+
+@kindex C-q @r{(Info mode)}
+ One advanced command useful with most of the others described here
+is @kbd{C-q}, which ``quotes'' the next character so that it is
+entered literally (@pxref{Inserting Text,,,emacs,The GNU Emacs
+Manual}). For example, pressing @kbd{?} ordinarily brings up a list
+of completion possibilities. If you want to (for example) search for
+an actual @samp{?} character, the simplest way is to insert it using
+@kbd{C-q ?}. This works the same in Emacs and stand-alone Info.
+
+@menu
+* Search Text:: How to search Info documents.
+* Search Index:: How to search the indices for specific subjects.
+* Go to node:: How to go to a node by name.
+* Choose menu subtopic:: How to choose a menu subtopic by its number.
+* Create Info buffer:: How to create a new Info buffer in Emacs.
+* Emacs Info Variables:: Variables modifying the behavior of Emacs Info.
+@end menu
+
+
+@node Search Text, Search Index, , Advanced
+@comment node-name, next, previous, up
+@section @kbd{s} searches Info documents
+
+@cindex searching Info documents
+@cindex Info document as a reference
+ The commands which move between and inside nodes allow you to read
+the entire manual or its large portions. But what if you need to find
+some information in the manual as fast as you can, and you don't know
+or don't remember in what node to look for it? This need arises when
+you use a manual as a @dfn{reference}, or when it is impractical to
+read the entire manual before you start using the programs it
+describes.
+
+ Info has powerful searching facilities that let you find things
+quickly. You can search either the manual text or its indices.
+
+@kindex s @r{(Info mode)}
+@findex Info-search
+ The @kbd{s} command allows you to search a whole Info file for a string.
+It switches to the next node if and when that is necessary. You
+type @kbd{s} followed by the string to search for, terminated by
+@key{RET}. To search for the same string again, just @kbd{s} followed
+by @key{RET} will do. The file's nodes are scanned in the order
+they are in the file, which has no necessary relationship to the
+order that they may be in the tree structure of menus and @samp{next}
+pointers. But normally the two orders are not very different. In any
+case, you can always look at the mode line to find out what node you have
+reached, if the header is not visible (this can happen, because @kbd{s}
+puts your cursor at the occurrence of the string, not at the beginning
+of the node).
+
+@kindex M-s @r{(Info mode)}
+ In Emacs, @kbd{Meta-s} is equivalent to @kbd{s}. That is for
+compatibility with other GNU packages that use @kbd{M-s} for a similar
+kind of search command. Both @kbd{s} and @kbd{M-s} run in Emacs the
+command @code{Info-search}.
+
+@kindex C-s @r{(Info mode)}
+@kindex C-r @r{(Info mode)}
+@findex isearch
+ Instead of using @kbd{s} in Emacs Info and in the stand-alone Info,
+you can use an incremental search started with @kbd{C-s} or @kbd{C-r}.
+It can search through multiple Info nodes. @xref{Incremental Search,,,
+emacs, The GNU Emacs Manual}. In Emacs, you can disable this behavior
+by setting the variable @code{Info-isearch-search} to @code{nil}
+(@pxref{Emacs Info Variables}).
+
+@node Search Index, Go to node, Search Text, Advanced
+@comment node-name, next, previous, up
+@section @kbd{i} searches the indices for specific subjects
+
+@cindex searching Info indices
+@kindex i @r{(Info mode)}
+@findex Info-index
+ Since most topics in the manual should be indexed, you should try
+the index search first before the text search. The @kbd{i} command
+prompts you for a subject and then looks up that subject in the
+indices. If it finds an index entry with the subject you typed, it
+goes to the node to which that index entry points. You should browse
+through that node to see whether the issue you are looking for is
+described there. If it isn't, type @kbd{,} one or more times to go
+through additional index entries which match your subject.
+
+ The @kbd{i} command and subsequent @kbd{,} commands find all index
+entries which include the string you typed @emph{as a substring}.
+For each match, Info shows in the echo area the full index entry it
+found. Often, the text of the full index entry already gives you
+enough information to decide whether it is relevant to what you are
+looking for, so we recommend that you read what Info shows in the echo
+area before looking at the node it displays.
+
+ Since @kbd{i} looks for a substring, you can search for subjects even
+if you are not sure how they are spelled in the index. For example,
+suppose you want to find something that is pertinent to commands which
+complete partial input (e.g., when you type @key{TAB}). If you want
+to catch index entries that refer to ``complete,'' ``completion,'' and
+``completing,'' you could type @kbd{icomplet@key{RET}}.
+
+ Info documents which describe programs should index the commands,
+options, and key sequences that the program provides. If you are
+looking for a description of a command, an option, or a key, just type
+their names when @kbd{i} prompts you for a topic. For example, if you
+want to read the description of what the @kbd{C-l} key does, type
+@kbd{iC-l@key{RET}} literally.
+
+@findex info-apropos
+@findex index-apropos
+If you aren't sure which manual documents the topic you are looking
+for, try the @kbd{M-x info-apropos} command in Emacs, or the @kbd{M-x
+index-apropos} command in the stand-alone reader. It prompts for
+a string and then looks up that string in all the indices of all the
+Info documents installed on your system.
+
+@node Go to node, Choose menu subtopic, Search Index, Advanced
+@comment node-name, next, previous, up
+@section @kbd{g} goes to a node by name
+
+@kindex g @r{(Info mode)}
+@findex Info-goto-node
+@cindex go to a node by name
+ If you know a node's name, you can go there by typing @kbd{g}, the
+name, and @key{RET}. Thus, @kbd{gTop@key{RET}} would go to the node
+called @samp{Top} in this file. (This is equivalent to @kbd{t}, see
+@ref{Help-Int}.) @kbd{gGo to node@key{RET}} would come back here.
+
+ Unlike @kbd{m}, @kbd{g} does not allow the use of abbreviations.
+But it does allow completion, so you can type @key{TAB} to complete a
+partial node name.
+
+@cindex go to another Info file
+ To go to a node in another file, you can include the file name in the
+node name by putting it at the front, in parentheses. Thus,
+@kbd{g(dir)Top@key{RET}} would go to the Info Directory node, which is
+the node @samp{Top} in the Info file @file{dir}. Likewise,
+@kbd{g(emacs)Top@key{RET}} goes to the top node of the Emacs manual.
+
+ The node name @samp{*} specifies the whole file. So you can look at
+all of the current file by typing @kbd{g*@key{RET}} or all of any
+other file with @kbd{g(@var{filename})*@key{RET}}.
+
+@node Choose menu subtopic, Create Info buffer, Go to node, Advanced
+@comment node-name, next, previous, up
+@section @kbd{1}--@kbd{9} choose a menu subtopic by its number
+
+@kindex 1 @r{through} 9 @r{(Info mode)}
+@findex Info-nth-menu-item
+@cindex select @var{n}'th menu item
+ If you begrudge each character of type-in which your system requires,
+you might like to use the commands @kbd{1}, @kbd{2}, @kbd{3}, @kbd{4},
+@dots{}, @kbd{9}. They are short for the @kbd{m} command together
+with a name of a menu subtopic. @kbd{1} goes through the first item
+in the current node's menu; @kbd{2} goes through the second item, etc.
+In the stand-alone reader, @kbd{0} goes through the last menu item;
+this is so you need not count how many entries are there.
+
+ If your display supports multiple fonts, colors or underlining, and
+you are using Emacs' Info mode to read Info files, the third, sixth
+and ninth menu items have a @samp{*} that stands out, either in color
+or in some other attribute, such as underline; this makes it easy to
+see at a glance which number to use for an item.
+
+ Some terminals don't support either multiple fonts, colors or
+underlining. If you need to actually count items, it is better to use
+@kbd{m} instead, and specify the name, or use @key{TAB} to quickly
+move between menu items.
+
+@node Create Info buffer, Emacs Info Variables, Choose menu subtopic, Advanced
+@comment node-name, next, previous, up
+@section @kbd{M-n} creates a new independent Info buffer in Emacs
+
+@kindex M-n @r{(Info mode)}
+@findex clone-buffer
+@cindex multiple Info buffers
+ If you are reading Info in Emacs, you can select a new independent
+Info buffer in a new Emacs window by typing @kbd{M-n}. The new buffer
+starts out as an exact copy of the old one, but you will be able to
+move independently between nodes in the two buffers. (In Info mode,
+@kbd{M-n} runs the Emacs command @code{clone-buffer}.)
+
+ In Emacs Info, you can also produce new Info buffers by giving a
+numeric prefix argument to the @kbd{m} and @kbd{g} commands. @kbd{C-u
+m} and @kbd{C-u g} go to a new node in exactly the same way that
+@kbd{m} and @kbd{g} do, but they do so in a new Info buffer which they
+select in another window.
+
+ Another way to produce new Info buffers in Emacs is to use a numeric
+prefix argument for the @kbd{C-h i} command (@code{info}) which
+switches to the Info buffer with that number. Thus, @kbd{C-u 2 C-h i}
+switches to the buffer @samp{*info*<2>}, creating it if necessary.
+
+@node Emacs Info Variables, , Create Info buffer, Advanced
+@comment node-name, next, previous, up
+@section Emacs Info-mode Variables
+
+The following variables may modify the behavior of Info-mode in Emacs;
+you may wish to set one or several of these variables interactively,
+or in your init file. @xref{Examining, Examining and Setting
+Variables, Examining and Setting Variables, emacs, The GNU Emacs
+Manual}. The stand-alone Info reader program has its own set of
+variables, described in @ref{Variables,, Manipulating Variables,
+info-stnd, GNU Info}.
+
+@vtable @code
+@item Info-directory-list
+The list of directories to search for Info files. Each element is a
+string (directory name) or @code{nil} (try default directory). If not
+initialized Info uses the environment variable @env{INFOPATH} to
+initialize it, or @code{Info-default-directory-list} if there is no
+@env{INFOPATH} variable in the environment.
+
+If you wish to customize the Info directory search list for both Emacs
+Info and stand-alone Info, it is best to set the @env{INFOPATH}
+environment variable, since that applies to both programs.
+
+@item Info-additional-directory-list
+A list of additional directories to search for Info documentation files.
+These directories are not searched for merging the @file{dir} file.
+
+@item Info-mode-hook
+Hooks run when @code{Info-mode} is called. By default, it contains
+the hook @code{turn-on-font-lock} which enables highlighting of Info
+files. You can change how the highlighting looks by customizing the
+faces @code{info-node}, @code{info-xref}, @code{info-xref-visited},
+@code{info-header-xref}, @code{info-header-node}, @code{info-menu-header},
+@code{info-menu-star}, and @code{info-title-@var{n}} (where @var{n}
+is the level of the section, a number between 1 and 4). To customize
+a face, type @kbd{M-x customize-face @key{RET} @var{face} @key{RET}},
+where @var{face} is one of the face names listed here.
+
+@item Info-fontify-maximum-menu-size
+Maximum size of menu to fontify if @code{font-lock-mode} is non-@code{nil}.
+
+@item Info-fontify-visited-nodes
+If non-@code{nil}, menu items and cross-references pointing to visited
+nodes are displayed in the @code{info-xref-visited} face.
+
+@item Info-use-header-line
+If non-@code{nil}, Emacs puts in the Info buffer a header line showing
+the @samp{Next}, @samp{Prev}, and @samp{Up} links. A header line does
+not scroll with the rest of the buffer, making these links always
+visible.
+
+@item Info-hide-note-references
+As explained in earlier nodes, the Emacs version of Info normally
+hides some text in menus and cross-references. You can completely
+disable this feature, by setting this option to @code{nil}. Setting
+it to a value that is neither @code{nil} nor @code{t} produces an
+intermediate behavior, hiding a limited amount of text, but showing
+all text that could potentially be useful.
+
+@item Info-scroll-prefer-subnodes
+If set to a non-@code{nil} value, @key{SPC} and @key{BACKSPACE} (or
+@key{DEL}) keys in a menu visit subnodes of the current node before
+scrolling to its end or beginning, respectively. For example, if the
+node's menu appears on the screen, the next @key{SPC} moves to a
+subnode indicated by the following menu item. Setting this option to
+@code{nil} results in behavior similar to the stand-alone Info reader
+program, which visits the first subnode from the menu only when you
+hit the end of the current node. The default is @code{nil}.
+
+@item Info-isearch-search
+If non-@code{nil}, isearch in Info searches through multiple nodes.
+
+@item Info-enable-active-nodes
+When set to a non-@code{nil} value, allows Info to execute Lisp code
+associated with nodes. The Lisp code is executed when the node is
+selected. The Lisp code to be executed should follow the node
+delimiter (the @samp{DEL} character) and an @samp{execute: } tag, like
+this:
+
+@example
+^_execute: (message "This is an active node!")
+@end example
+@end vtable
+
+
+@node Expert Info
+@chapter Info for Experts
+
+ This chapter explains how to write an Info file by hand. However,
+in most cases, writing a Texinfo file is better, since you can use it
+to make a printed manual or produce other formats, such as HTML and
+DocBook, as well as for generating Info files.
+
+The @code{makeinfo} command converts a Texinfo file into an Info file;
+@code{texinfo-format-region} and @code{texinfo-format-buffer} are GNU
+Emacs functions that do the same.
+
+@xref{Top,, Overview of Texinfo, texinfo, Texinfo: The GNU
+Documentation Format}, for how to write a Texinfo file.
+
+@xref{Creating an Info File,,, texinfo, Texinfo: The GNU Documentation
+Format}, for how to create an Info file from a Texinfo file.
+
+@xref{Installing an Info File,,, texinfo, Texinfo: The GNU
+Documentation Format}, for how to install an Info file after you
+have created one.
+
+However, if you want to edit an Info file manually and install it manually,
+here is how.
+
+@menu
+* Add:: Describes how to add new nodes to the hierarchy.
+ Also tells what nodes look like.
+* Menus:: How to add to or create menus in Info nodes.
+* Cross-refs:: How to add cross-references to Info nodes.
+* Tags:: How to make tags tables for Info files.
+* Checking:: Checking an Info File.
+@end menu
+
+@node Add, Menus, , Expert Info
+@comment node-name, next, previous, up
+@section Adding a new node to Info
+
+To add a new topic to the list in the Info directory, you must:
+
+@enumerate
+@item
+Create some nodes, in some file, to document that topic.
+@item
+Put that topic in the menu in the directory. @xref{Menus, Menu}.
+@end enumerate
+
+@cindex node delimiters
+ The new node can live in an existing documentation file, or in a new
+one. It must have a @samp{^_} character before it (invisible to the
+user; this node has one but you cannot see it), and it ends with either
+a @samp{^_}, a @samp{^L} (``formfeed''), or the end of file.@footnote{If
+you put in a @samp{^L} to end a new node, be sure that there is a
+@samp{^_} after it to start the next one, since @samp{^L} cannot
+@emph{start} a node. Also, a nicer way to make a node boundary be a
+page boundary as well is to put a @samp{^L} @emph{right after} the
+@samp{^_}.}
+
+ The @samp{^_} starting a node must be followed by a newline or a
+@samp{^L} newline, after which comes the node's header line. The
+header line must give the node's name (by which Info finds it), and
+state the names of the @samp{Next}, @samp{Previous}, and @samp{Up}
+nodes (if there are any). As you can see, this node's @samp{Up} node
+is the node @samp{Expert Info}. The @samp{Next} node is @samp{Menus}.
+
+@cindex node header line format
+@cindex format of node headers
+ The keywords @dfn{Node}, @dfn{Next}, @dfn{Previous}, and @dfn{Up}
+may appear in any order, anywhere in the header line, but the
+recommended order is the one in this sentence. Each keyword must be
+followed by a colon, spaces and tabs, and then the appropriate name.
+The name may be terminated with a tab, a comma, or a newline. A space
+does not end it; node names may contain spaces. The case of letters
+in the names is insignificant.
+
+@cindex node name format
+@cindex Directory node
+ A node name has two forms. A node in the current file is named by
+what appears after the @samp{Node: } in that node's first line. For
+example, this node's name is @samp{Add}. A node in another file is
+named by @samp{(@var{filename})@var{node-within-file}}, as in
+@samp{(info)Add} for this node. If the file name starts with @samp{./},
+then it is relative to the current directory; otherwise, it is
+relative starting from the standard directory for Info files of your
+site. The name @samp{(@var{filename})Top} can be abbreviated to just
+@samp{(@var{filename})}. By convention, the name @samp{Top} is used
+for the ``highest'' node in any single file---the node whose @samp{Up}
+points out of the file. The @samp{Directory} node is @file{(dir)}, it
+points to a file @file{dir} which holds a large menu listing all the
+Info documents installed on your site. The @samp{Top} node of a
+document file listed in the @samp{Directory} should have an @samp{Up:
+(dir)} in it.
+
+@cindex unstructured documents
+ The node name @kbd{*} is special: it refers to the entire file.
+Thus, @kbd{g*} shows you the whole current file. The use of the
+node @kbd{*} is to make it possible to make old-fashioned,
+unstructured files into nodes of the tree.
+
+ The @samp{Node:} name, in which a node states its own name, must not
+contain a file name, since when Info searches for a node, it does not
+expect a file name to be there. The @samp{Next}, @samp{Previous} and
+@samp{Up} names may contain them. In this node, since the @samp{Up}
+node is in the same file, it was not necessary to use one.
+
+ Note that the nodes in this file have a file name in the header
+line. The file names are ignored by Info, but they serve as comments
+to help identify the node for the user.
+
+@node Menus, Cross-refs, Add, Expert Info
+@comment node-name, next, previous, up
+@section How to Create Menus
+
+ Any node in the Info hierarchy may have a @dfn{menu}---a list of subnodes.
+The @kbd{m} command searches the current node's menu for the topic which it
+reads from the terminal.
+
+@cindex menu and menu entry format
+ A menu begins with a line starting with @w{@samp{* Menu:}}. The
+rest of the line is a comment. After the starting line, every line
+that begins with a @samp{* } lists a single topic. The name of the
+topic---what the user must type at the @kbd{m}'s command prompt to
+select this topic---comes right after the star and space, and is
+followed by a colon, spaces and tabs, and the name of the node which
+discusses that topic. The node name, like node names following
+@samp{Next}, @samp{Previous} and @samp{Up}, may be terminated with a
+tab, comma, or newline; it may also be terminated with a period.
+
+ If the node name and topic name are the same, then rather than
+giving the name twice, the abbreviation @samp{* @var{name}::} may be
+used (and should be used, whenever possible, as it reduces the visual
+clutter in the menu).
+
+ It is considerate to choose the topic names so that they differ
+from each other very near the beginning---this allows the user to type
+short abbreviations. In a long menu, it is a good idea to capitalize
+the beginning of each item name which is the minimum acceptable
+abbreviation for it (a long menu is more than 5 or so entries).
+
+ The nodes listed in a node's menu are called its ``subnodes,'' and it
+is their ``superior''. They should each have an @samp{Up:} pointing at
+the superior. It is often useful to arrange all or most of the subnodes
+in a sequence of @samp{Next} and @samp{Previous} pointers so that
+someone who wants to see them all need not keep revisiting the Menu.
+
+ The Info Directory is simply the menu of the node @samp{(dir)Top}---that
+is, node @samp{Top} in file @file{.../info/dir}. You can put new entries
+in that menu just like any other menu. The Info Directory is @emph{not} the
+same as the file directory called @file{info}. It happens that many of
+Info's files live in that file directory, but they do not have to; and
+files in that directory are not automatically listed in the Info
+Directory node.
+
+ Also, although the Info node graph is claimed to be a ``hierarchy,''
+in fact it can be @emph{any} directed graph. Shared structures and
+pointer cycles are perfectly possible, and can be used if they are
+appropriate to the meaning to be expressed. There is no need for all
+the nodes in a file to form a connected structure. In fact, this file
+has two connected components. You are in one of them, which is under
+the node @samp{Top}; the other contains the node @samp{Help} which the
+@kbd{h} command goes to. In fact, since there is no garbage
+collector on the node graph, nothing terrible happens if a substructure
+is not pointed to, but such a substructure is rather useless since nobody
+can ever find out that it exists.
+
+@node Cross-refs, Tags, Menus, Expert Info
+@comment node-name, next, previous, up
+@section Creating Cross References
+
+@cindex cross reference format
+ A cross reference can be placed anywhere in the text, unlike a menu
+item which must go at the front of a line. A cross reference looks
+like a menu item except that it has @samp{*note} instead of @samp{*}.
+It @emph{cannot} be terminated by a @samp{)}, because @samp{)}'s are
+so often part of node names. If you wish to enclose a cross reference
+in parentheses, terminate it with a period first. Here are two
+examples of cross references pointers:
+
+@example
+*Note details: commands. (See *note 3: Full Proof.)
+@end example
+
+@noindent
+@emph{These are just examples.} The places they ``lead to'' do not
+really exist!
+
+@menu
+* Help-Cross:: Target of a cross-reference.
+@end menu
+
+
+@node Help-Cross, , , Cross-refs
+@subsection The node reached by the cross reference in Info
+
+ This is the node reached by the cross reference named @samp{Cross}.
+
+ While this node is specifically intended to be reached by a cross
+reference, most cross references lead to nodes that ``belong''
+someplace else far away in the structure of an Info document. So you
+cannot expect this node to have a @samp{Next}, @samp{Previous} or
+@samp{Up} links pointing back to where you came from. In general, the
+@kbd{l} (el) command is the only way to get back there.
+
+@format
+>> Type @kbd{l} to return to the node where the cross reference was.
+@end format
+
+@node Tags, Checking, Cross-refs, Expert Info
+@comment node-name, next, previous, up
+@section Tags Tables for Info Files
+
+@cindex tags tables in Info files
+ You can speed up the access to nodes of a large Info file by giving
+it a tags table. Unlike the tags table for a program, the tags table for
+an Info file lives inside the file itself and is used
+automatically whenever Info reads in the file.
+
+@findex Info-tagify
+ To make a tags table, go to a node in the file using Emacs Info mode and type
+@kbd{M-x Info-tagify}. Then you must use @kbd{C-x C-s} to save the
+file. Info files produced by the @code{makeinfo} command that is part
+of the Texinfo package always have tags tables to begin with.
+
+@cindex stale tags tables
+@cindex update Info tags table
+ Once the Info file has a tags table, you must make certain it is up
+to date. If you edit an Info file directly (as opposed to editing its
+Texinfo source), and, as a result of deletion of text, any node moves back
+more than a thousand characters in the file from the position
+recorded in the tags table, Info will no longer be able to find that
+node. To update the tags table, use the @code{Info-tagify} command
+again.
+
+ An Info file tags table appears at the end of the file and looks like
+this:
+
+@example
+^_^L
+Tag Table:
+File: info, Node: Cross-refs^?21419
+File: info, Node: Tags^?22145
+^_
+End Tag Table
+@end example
+
+@noindent
+Note that it contains one line per node, and this line contains
+the beginning of the node's header (ending just after the node name),
+a @samp{DEL} character, and the character position in the file of the
+beginning of the node.
+
+@node Checking, , Tags, Expert Info
+@section Checking an Info File
+
+When creating an Info file, it is easy to forget the name of a node when
+you are making a pointer to it from another node. If you put in the
+wrong name for a node, this is not detected until someone tries to go
+through the pointer using Info. Verification of the Info file is an
+automatic process which checks all pointers to nodes and reports any
+pointers which are invalid. Every @samp{Next}, @samp{Previous}, and
+@samp{Up} is checked, as is every menu item and every cross reference. In
+addition, any @samp{Next} which does not have a @samp{Previous} pointing
+back is reported. Only pointers within the file are checked, because
+checking pointers to other files would be terribly slow. But those are
+usually few.
+
+@findex Info-validate
+To check an Info file, do @kbd{M-x Info-validate} while looking at any
+node of the file with Emacs Info mode.
+
+@node Index
+@unnumbered Index
+
+This is an alphabetical listing of all the commands, variables, and
+topics discussed in this document.
+
+@printindex cp
+
+@bye
+
+@ignore
+ arch-tag: 965c1638-01d6-4156-9227-b10418b9d8e8
+@end ignore
diff --git a/doc/infokey.1 b/doc/infokey.1
new file mode 100644
index 0000000..2ea37bf
--- /dev/null
+++ b/doc/infokey.1
@@ -0,0 +1,42 @@
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36.
+.TH INFOKEY "1" "September 2008" "infokey 4.13" "User Commands"
+.SH NAME
+infokey \- compile customizations for Info
+.SH SYNOPSIS
+.B infokey
+[\fIOPTION\fR]... [\fIINPUT-FILE\fR]
+.SH DESCRIPTION
+Compile infokey source file to infokey file. Reads INPUT\-FILE (default
+$HOME/.infokey) and writes compiled key file to (by default) $HOME/.info.
+.SH OPTIONS
+.TP
+\fB\-\-output\fR FILE
+output to FILE instead of $HOME/.info
+.TP
+\fB\-\-help\fR
+display this help and exit.
+.TP
+\fB\-\-version\fR
+display version information and exit.
+.SH "REPORTING BUGS"
+Email bug reports to bug\-texinfo@gnu.org,
+general questions and discussion to help\-texinfo@gnu.org.
+Texinfo home page: http://www.gnu.org/software/texinfo/
+.SH COPYRIGHT
+Copyright \(co 2008 Free Software Foundation, Inc.
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
+.br
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+.SH "SEE ALSO"
+The full documentation for
+.B infokey
+is maintained as a Texinfo manual. If the
+.B info
+and
+.B infokey
+programs are properly installed at your site, the command
+.IP
+.B info infokey
+.PP
+should give you access to the complete manual.
diff --git a/doc/install-info.1 b/doc/install-info.1
new file mode 100644
index 0000000..47ae5d7
--- /dev/null
+++ b/doc/install-info.1
@@ -0,0 +1,129 @@
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36.
+.TH INSTALL-INFO "1" "September 2008" "install-info 4.13" "User Commands"
+.SH NAME
+install-info \- update info/dir entries
+.SH SYNOPSIS
+.B install-info
+[\fIOPTION\fR]... [\fIINFO-FILE \fR[\fIDIR-FILE\fR]]
+.SH DESCRIPTION
+Add or remove entries in INFO\-FILE from the Info directory DIR\-FILE.
+.SH OPTIONS
+.TP
+\fB\-\-debug\fR
+report what is being done.
+.TP
+\fB\-\-delete\fR
+delete existing entries for INFO\-FILE from DIR\-FILE;
+don't insert any new entries.
+.TP
+\fB\-\-description\fR=\fITEXT\fR
+the description of the entry is TEXT; used with
+the \fB\-\-name\fR option to become synonymous with the
+\fB\-\-entry\fR option.
+.TP
+\fB\-\-dir\-file\fR=\fINAME\fR
+specify file name of Info directory file;
+equivalent to using the DIR\-FILE argument.
+.TP
+\fB\-\-dry\-run\fR
+same as \fB\-\-test\fR.
+.TP
+\fB\-\-entry\fR=\fITEXT\fR
+insert TEXT as an Info directory entry.
+TEXT is written as an Info menu item line followed
+.IP
+by zero or more extra lines starting with whitespace.
+.IP
+If you specify more than one entry, all are added.
+If you don't specify any entries, they are determined
+.IP
+from information in the Info file itself.
+.IP
+When removing, TEXT specifies the entry to remove.
+TEXT is only removed as a last resort, if the
+entry as determined from the Info file is not present,
+and the basename of the Info file isn't found either.
+.TP
+\fB\-\-help\fR
+display this help and exit.
+.TP
+\fB\-\-info\-dir\fR=\fIDIR\fR
+same as \fB\-\-dir\-file\fR=\fIDIR\fR/dir.
+.TP
+\fB\-\-info\-file\fR=\fIFILE\fR
+specify Info file to install in the directory;
+equivalent to using the INFO\-FILE argument.
+.TP
+\fB\-\-item\fR=\fITEXT\fR
+same as \fB\-\-entry\fR=\fITEXT\fR.
+.TP
+\fB\-\-keep\-old\fR
+do not replace entries, or remove empty sections.
+.TP
+\fB\-\-menuentry\fR=\fITEXT\fR
+same as \fB\-\-name\fR=\fITEXT\fR.
+.TP
+\fB\-\-name\fR=\fITEXT\fR
+the name of the entry is TEXT; used with \fB\-\-description\fR
+to become synonymous with the \fB\-\-entry\fR option.
+.TP
+\fB\-\-no\-indent\fR
+do not format new entries in the DIR file.
+.TP
+\fB\-\-quiet\fR
+suppress warnings.
+.TP
+\fB\-\-regex\fR=\fIR\fR
+put this file's entries in all sections that match the
+regular expression R (ignoring case).
+.TP
+\fB\-\-remove\fR
+same as \fB\-\-delete\fR.
+.TP
+\fB\-\-remove\-exactly\fR
+only remove if the info file name matches exactly;
+suffixes such as .info and .gz are not ignored.
+.TP
+\fB\-\-section\fR=\fISEC\fR
+put entries in section SEC of the directory.
+If you specify more than one section, all the entries
+.IP
+are added in each of the sections.
+.IP
+If you don't specify any sections, they are determined
+.IP
+from information in the Info file itself.
+.TP
+\fB\-\-section\fR R SEC
+equivalent to \fB\-\-regex\fR=\fIR\fR \fB\-\-section\fR=\fISEC\fR \fB\-\-add\-once\fR.
+.TP
+\fB\-\-silent\fR
+suppress warnings.
+.TP
+\fB\-\-test\fR
+suppress updating of DIR\-FILE.
+.TP
+\fB\-\-version\fR
+display version information and exit.
+.SH "REPORTING BUGS"
+Email bug reports to bug\-texinfo@gnu.org,
+general questions and discussion to help\-texinfo@gnu.org.
+Texinfo home page: http://www.gnu.org/software/texinfo/
+.SH COPYRIGHT
+Copyright \(co 2008 Free Software Foundation, Inc.
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
+.br
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+.SH "SEE ALSO"
+The full documentation for
+.B install-info
+is maintained as a Texinfo manual. If the
+.B info
+and
+.B install-info
+programs are properly installed at your site, the command
+.IP
+.B info install-info
+.PP
+should give you access to the complete manual.
diff --git a/doc/makeinfo.1 b/doc/makeinfo.1
new file mode 100644
index 0000000..3753a0f
--- /dev/null
+++ b/doc/makeinfo.1
@@ -0,0 +1,222 @@
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36.
+.TH MAKEINFO "1" "September 2008" "makeinfo 4.13" "User Commands"
+.SH NAME
+makeinfo \- translate Texinfo documents
+.SH SYNOPSIS
+.B makeinfo
+[\fIOPTION\fR]... \fITEXINFO-FILE\fR...
+.SH DESCRIPTION
+Translate Texinfo source documentation to various other formats, by default
+Info files suitable for reading online with Emacs or standalone GNU Info.
+.SS "General options:"
+.TP
+\fB\-\-error\-limit\fR=\fINUM\fR
+quit after NUM errors (default 100).
+.TP
+\fB\-\-document\-language\fR=\fISTR\fR locale to use in translating Texinfo keywords
+for the output document (default C).
+.TP
+\fB\-\-force\fR
+preserve output even if errors.
+.TP
+\fB\-\-help\fR
+display this help and exit.
+.TP
+\fB\-\-no\-validate\fR
+suppress node cross\-reference validation.
+.TP
+\fB\-\-no\-warn\fR
+suppress warnings (but not errors).
+.TP
+\fB\-v\fR, \fB\-\-verbose\fR
+explain what is being done.
+.TP
+\fB\-\-version\fR
+display version information and exit.
+.SS "Output format selection (default is to produce Info):"
+.TP
+\fB\-\-docbook\fR
+output Docbook XML rather than Info.
+.TP
+\fB\-\-html\fR
+output HTML rather than Info.
+.TP
+\fB\-\-xml\fR
+output Texinfo XML rather than Info.
+.TP
+\fB\-\-plaintext\fR
+output plain text rather than Info.
+.SS "General output options:"
+.TP
+\fB\-E\fR, \fB\-\-macro\-expand\fR=\fIFILE\fR
+output macro\-expanded source to FILE,
+ignoring any @setfilename.
+.TP
+\fB\-\-no\-headers\fR
+suppress node separators, Node: lines, and menus
+from Info output (thus producing plain text)
+or from HTML (thus producing shorter output);
+also, write to standard output by default.
+.TP
+\fB\-\-no\-split\fR
+suppress the splitting of Info or HTML output,
+generate only one output file.
+.TP
+\fB\-\-number\-sections\fR
+output chapter and sectioning numbers.
+.TP
+\fB\-o\fR, \fB\-\-output\fR=\fIFILE\fR
+output to FILE (or directory if split HTML).
+.SS "Options for Info and plain text:"
+.TP
+\fB\-\-disable\-encoding\fR
+do not output accented and special characters
+in Info output based on @documentencoding.
+.TP
+\fB\-\-enable\-encoding\fR
+override \fB\-\-disable\-encoding\fR (default).
+.TP
+\fB\-\-fill\-column\fR=\fINUM\fR
+break Info lines at NUM characters (default 72).
+.TP
+\fB\-\-footnote\-style\fR=\fISTYLE\fR
+output footnotes in Info according to STYLE:
+`separate' to put them in their own node;
+`end' to put them at the end of the node, in
+which they are defined (this is the default).
+.TP
+\fB\-\-paragraph\-indent\fR=\fIVAL\fR
+indent Info paragraphs by VAL spaces (default 3).
+If VAL is `none', do not indent; if VAL is
+`asis', preserve existing indentation.
+.TP
+\fB\-\-split\-size\fR=\fINUM\fR
+split Info files at size NUM (default 300000).
+.SS "Options for HTML:"
+.TP
+\fB\-\-css\-include\fR=\fIFILE\fR
+include FILE in HTML <style> output;
+read stdin if FILE is \-.
+.TP
+\fB\-\-css\-ref\fR=\fIURL\fR
+generate reference to a CSS file.
+.TP
+\fB\-\-internal\-links\fR=\fIFILE\fR
+produce list of internal links in FILE.
+.TP
+\fB\-\-transliterate\-file\-names\fR
+produce file names in ASCII transliteration.
+.SS "Options for XML and Docbook:"
+.TP
+\fB\-\-output\-indent\fR=\fIVAL\fR
+indent XML elements by VAL spaces (default 2).
+If VAL is 0, ignorable whitespace is dropped.
+.SS "Input file options:"
+.TP
+\fB\-\-commands\-in\-node\-names\fR
+allow @ commands in node names.
+.TP
+\fB\-D\fR VAR
+define the variable VAR, as with @set.
+.TP
+\fB\-I\fR DIR
+append DIR to the @include search path.
+.TP
+\fB\-P\fR DIR
+prepend DIR to the @include search path.
+.TP
+\fB\-U\fR VAR
+undefine the variable VAR, as with @clear.
+.SS "Conditional processing in input:"
+.TP
+\fB\-\-ifdocbook\fR
+process @ifdocbook and @docbook even if
+not generating Docbook.
+.TP
+\fB\-\-ifhtml\fR
+process @ifhtml and @html even if not generating HTML.
+.TP
+\fB\-\-ifinfo\fR
+process @ifinfo even if not generating Info.
+.TP
+\fB\-\-ifplaintext\fR
+process @ifplaintext even if not generating plain text.
+.TP
+\fB\-\-iftex\fR
+process @iftex and @tex; implies \fB\-\-no\-split\fR.
+.TP
+\fB\-\-ifxml\fR
+process @ifxml and @xml.
+.TP
+\fB\-\-no\-ifdocbook\fR
+do not process @ifdocbook and @docbook text.
+.TP
+\fB\-\-no\-ifhtml\fR
+do not process @ifhtml and @html text.
+.TP
+\fB\-\-no\-ifinfo\fR
+do not process @ifinfo text.
+.TP
+\fB\-\-no\-ifplaintext\fR
+do not process @ifplaintext text.
+.TP
+\fB\-\-no\-iftex\fR
+do not process @iftex and @tex text.
+.TP
+\fB\-\-no\-ifxml\fR
+do not process @ifxml and @xml text.
+.P
+Also, for the \fB\-\-no\-ifFORMAT\fR options, do process @ifnotFORMAT text.
+.P
+The defaults for the @if... conditionals depend on the output format:
+if generating HTML, \fB\-\-ifhtml\fR is on and the others are off;
+if generating Info, \fB\-\-ifinfo\fR is on and the others are off;
+if generating plain text, \fB\-\-ifplaintext\fR is on and the others are off;
+if generating XML, \fB\-\-ifxml\fR is on and the others are off.
+.SH EXAMPLES
+.TP
+makeinfo foo.texi
+write Info to foo's @setfilename
+.TP
+makeinfo \fB\-\-html\fR foo.texi
+write HTML to @setfilename
+.TP
+makeinfo \fB\-\-xml\fR foo.texi
+write Texinfo XML to @setfilename
+.TP
+makeinfo \fB\-\-docbook\fR foo.texi
+write DocBook XML to @setfilename
+.TP
+makeinfo \fB\-\-no\-headers\fR foo.texi
+write plain text to standard output
+.TP
+makeinfo \fB\-\-html\fR \fB\-\-no\-headers\fR foo.texi
+write html without node lines, menus
+.TP
+makeinfo \fB\-\-number\-sections\fR foo.texi
+write Info with numbered sections
+.TP
+makeinfo \fB\-\-no\-split\fR foo.texi
+write one Info file however big
+.SH "REPORTING BUGS"
+Email bug reports to bug\-texinfo@gnu.org,
+general questions and discussion to help\-texinfo@gnu.org.
+Texinfo home page: http://www.gnu.org/software/texinfo/
+.SH COPYRIGHT
+Copyright \(co 2008 Free Software Foundation, Inc.
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
+.br
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+.SH "SEE ALSO"
+The full documentation for
+.B makeinfo
+is maintained as a Texinfo manual. If the
+.B info
+and
+.B makeinfo
+programs are properly installed at your site, the command
+.IP
+.B info makeinfo
+.PP
+should give you access to the complete manual.
diff --git a/doc/pdftexi2dvi.1 b/doc/pdftexi2dvi.1
new file mode 100644
index 0000000..0319b28
--- /dev/null
+++ b/doc/pdftexi2dvi.1
@@ -0,0 +1,187 @@
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36.
+.TH TEXI2DVI "1" "September 2008" "texi2dvi 1.135" "User Commands"
+.SH NAME
+texi2dvi \- convert Texinfo documents to PDF
+.SH SYNOPSIS
+.B texi2dvi
+[\fIOPTION\fR]... \fIFILE\fR...
+.SH DESCRIPTION
+Run each Texinfo or (La)TeX FILE through TeX in turn until all
+cross\-references are resolved, building all indices. The directory
+containing each FILE is searched for included files. The suffix of FILE
+is used to determine its language ((La)TeX or Texinfo). To process
+(e)plain TeX files, set the environment variable LATEX=tex.
+.PP
+In order to make texi2dvi a drop\-in replacement of TeX/LaTeX in AUC\-TeX,
+the FILE may also be composed of the following simple TeX commands.
+.TP
+`\einput{FILE}'
+the actual file to compile
+.TP
+`\enonstopmode'
+same as \fB\-\-batch\fR
+.PP
+Makeinfo is used to perform Texinfo macro expansion before running TeX
+when needed.
+.SS "General options:"
+.TP
+\fB\-b\fR, \fB\-\-batch\fR
+no interaction
+.TP
+\fB\-D\fR, \fB\-\-debug\fR
+turn on shell debugging (set \fB\-x\fR)
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+display this help and exit successfully
+.TP
+\fB\-o\fR, \fB\-\-output\fR=\fIOFILE\fR
+leave output in OFILE (implies \fB\-\-clean\fR);
+only one input FILE may be specified in this case
+.TP
+\fB\-q\fR, \fB\-\-quiet\fR
+no output unless errors (implies \fB\-\-batch\fR)
+.TP
+\fB\-s\fR, \fB\-\-silent\fR
+same as \fB\-\-quiet\fR
+.TP
+\fB\-v\fR, \fB\-\-version\fR
+display version information and exit successfully
+.TP
+\fB\-V\fR, \fB\-\-verbose\fR
+report on what is done
+.SS "TeX tuning:"
+.TP
+\-@
+use @input instead of \einput for preloaded Texinfo
+.TP
+\fB\-\-dvi\fR
+output a DVI file [default]
+.TP
+\fB\-\-dvipdf\fR
+output a PDF file via DVI (using dvipdf)
+.TP
+\fB\-e\fR, \fB\-E\fR, \fB\-\-expand\fR
+force macro expansion using makeinfo
+.TP
+\fB\-I\fR DIR
+search DIR for Texinfo files
+.TP
+\fB\-l\fR, \fB\-\-language\fR=\fILANG\fR
+specify LANG for FILE, either latex or texinfo
+.TP
+\fB\-\-no\-line\-error\fR
+do not pass \fB\-\-file\-line\-error\fR to TeX
+.TP
+\fB\-p\fR, \fB\-\-pdf\fR
+use pdftex or pdflatex for processing
+.TP
+\fB\-r\fR, \fB\-\-recode\fR
+call recode before TeX to translate input
+.TP
+\fB\-\-recode\-from\fR=\fIENC\fR
+recode from ENC to the @documentencoding
+.TP
+\fB\-\-src\-specials\fR
+pass \fB\-\-src\-specials\fR to TeX
+.TP
+\fB\-t\fR, \fB\-\-command\fR=\fICMD\fR
+insert CMD in copy of input file
+.TP
+or \fB\-\-texinfo\fR=\fICMD\fR
+multiple values accumulate
+.TP
+\fB\-\-translate\-file\fR=\fIFILE\fR
+use given charset translation file for TeX
+.SS "Build modes:"
+.TP
+\fB\-\-build\fR=\fIMODE\fR
+specify the treatment of auxiliary files [local]
+.TP
+\fB\-\-tidy\fR
+same as \fB\-\-build\fR=\fItidy\fR
+.TP
+\fB\-c\fR, \fB\-\-clean\fR
+same as \fB\-\-build\fR=\fIclean\fR
+.TP
+\fB\-\-build\-dir\fR=\fIDIR\fR
+specify where the tidy compilation is performed;
+implies \fB\-\-tidy\fR;
+defaults to TEXI2DVI_BUILD_DIRECTORY [.]
+.TP
+\fB\-\-mostly\-clean\fR
+remove the auxiliary files and directories
+but not the output
+.PP
+The MODE specifies where the TeX compilation takes place, and, as a
+consequence, how auxiliary files are treated. The build mode
+can also be set using the environment variable TEXI2DVI_BUILD_MODE.
+.SS "Valid MODEs are:"
+.TP
+`local'
+compile in the current directory, leaving all the auxiliary
+files around. This is the traditional TeX use.
+.TP
+`tidy'
+compile in a local *.t2d directory, where the auxiliary files
+are left. Output files are copied back to the original file.
+.TP
+`clean'
+same as `tidy', but remove the auxiliary directory afterwards.
+Every compilation therefore requires the full cycle.
+.SS "Using the `tidy' mode brings several advantages:"
+.TP
+\-
+the current directory is not cluttered with plethora of temporary files.
+.TP
+\-
+clutter can be even reduced using \fB\-\-build\-dir\fR=\fIdir\fR: all the *.t2d
+directories are stored there.
+.TP
+\-
+clutter can be reduced to zero using, e.g., \fB\-\-build\-dir=\fR/tmp/$USER.t2d
+or \fB\-\-build\-dir=\fR$HOME/.t2d.
+.TP
+\-
+the output file is updated after every succesful TeX run, for
+sake of concurrent visualization of the output. In a `local' build
+the viewer stops during the whole TeX run.
+.TP
+\-
+if the compilation fails, the previous state of the output file
+is preserved.
+.TP
+\-
+PDF and DVI compilation are kept in separate subdirectories
+preventing any possibility of auxiliary file incompatibility.
+.PP
+On the other hand, because `tidy' compilation takes place in another
+directory, occasionally TeX won't be able to find some files (e.g., when
+using \egraphicspath): in that case use \fB\-I\fR to specify the additional
+directories to consider.
+.PP
+The values of the BIBTEX, LATEX (or PDFLATEX), MAKEINDEX, MAKEINFO,
+TEX (or PDFTEX), TEXINDEX, and THUMBPDF environment variables are used
+to run those commands, if they are set. Any CMD strings are added
+after @setfilename for Texinfo input, in the first line for LaTeX input.
+.SH "REPORTING BUGS"
+Email bug reports to <bug\-texinfo@gnu.org>,
+general questions and discussion to <help\-texinfo@gnu.org>.
+Texinfo home page: http://www.gnu.org/software/texinfo/
+.SH COPYRIGHT
+Copyright \(co 2008 Free Software Foundation, Inc.
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
+.br
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+.SH "SEE ALSO"
+The full documentation for
+.B texi2dvi
+is maintained as a Texinfo manual. If the
+.B info
+and
+.B texi2dvi
+programs are properly installed at your site, the command
+.IP
+.B info texi2dvi
+.PP
+should give you access to the complete manual.
diff --git a/doc/refcard/txicmdcheck b/doc/refcard/txicmdcheck
new file mode 100755
index 0000000..89f39f8
--- /dev/null
+++ b/doc/refcard/txicmdcheck
@@ -0,0 +1,131 @@
+#!/usr/bin/env perl
+# $Id: txicmdcheck,v 1.1 2008/09/07 22:47:47 karl Exp $
+# Copyright 2008 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/>.
+#
+# Original author: Karl Berry.
+#
+# Kludge of a script to check command lists in refcard vs. refman
+# for consistency. Would be nice to check makeinfo, too.
+
+exit (&main ());
+
+sub main
+{
+ my @cardcmds = &read_refcard ("txirefcard.tex");
+ my @mancmds = &read_refman ("../texinfo.txi");
+ my (%mancmds, %cardcmds);
+ @mancmds{@mancmds} = ();
+ @cardcmds{@cardcmds} = ();
+
+ my @found = ();
+ for my $cc (@cardcmds) {
+ if (exists $mancmds{$cc}) {
+ push (@found, $cc);
+ delete $mancmds{$cc};
+ delete $cardcmds{$cc};
+ }
+ }
+ printf " common %d: @{[sort @found]}\n", @found + 0;
+ my @card_only = keys %cardcmds;
+ printf "refcard only %s: @{[sort @card_only]}\n", @card_only + 0;
+ my @man_only = keys %mancmds;
+ printf "refman only %s: @{[sort @man_only]}\n", @man_only + 0;
+
+ return @card_only + @man_only;
+}
+
+
+# Return command names given in the reference card.
+#
+sub read_refcard
+{
+ my ($fname) = @_;
+ my @ret = ();
+
+ local *FILE;
+ $FILE = $fname;
+ open (FILE) || die "open($FILE) failed: $!";
+ while (<FILE>) {
+ next unless /^\\txicmd/;
+ chomp;
+ my $xcmd = 0;
+ s/\\txicmdarg{.*?}}?//; # first get rid of the arguments
+ s/}{.*//; # then the descriptions
+ s/^\\txicmdx{// && ($xcmd = 1); # used for the @def...x
+ s/^\\txicmd{//; # finally the markup cmd itself
+
+ my (@cmds) = split (/, */, $_); # a couple of times we combine cmds
+
+ # we typeset these specially in TeX.
+ if ("@cmds" eq "@#1footing") {
+ @cmds = ('@oddfooting', '@evenfooting', '@everyfooting');
+ } elsif ("@cmds" eq "@#1heading") {
+ @cmds = ('@oddheading', '@evenheading', '@everyheading');
+ }
+
+ # add each command from this line to the return.
+ for my $c (@cmds) {
+#warn "refcard $c\n";
+#warn "refcard $c{x}\n" if $xcmd;
+ if ($c eq '@\tildechar') { # TeX specialties, forcibly make them match
+ $c = '@~';
+ } elsif ($c eq '@\var{whitespace}') {
+ $c = '@var{whitespace}';
+ }
+ $c = '@~' if $c eq '@\tildechar'; # TeX
+ $c = '@\\' if $c eq '@\bschar'; # TeX
+ $c = '@{' if $c eq '@\lbracechar'; # TeX
+ $c = '@}' if $c eq '@\rbracechar'; # TeX
+ push (@ret, $c);
+ push (@ret, "${c}x") if $xcmd;
+ }
+ }
+ push (@ret, '@,'); # our non-parsing above lost the comma
+ push (@ret, '@end', '@uref', '@appendixsection'); # described in text
+ close (FILE) || warn "close($FILE) failed: $!";
+ return @ret;
+}
+
+
+# Return command names from the @-Command List summary node in the
+# reference manual.
+#
+sub read_refman
+{
+ my ($fname) = @_;
+ my @ret = ();
+
+ local *FILE;
+ $FILE = $fname;
+ open (FILE) || die "open($FILE) failed: $!";
+ while (<FILE>) {
+ last if /^\@appendix \@\@-Command List/; # ignore until right appendix
+ }
+ while (<FILE>) {
+ last if /^\@end table/; # ignore again after the summary
+ next unless s/^\@itemx? *\@//; # only want item[x]s in the table
+ chomp;
+ s/\@\{.*//; # remove braced arguments
+ s/ .*//; # remove arguments following a space
+ s/\@\@/@/g; # @@ -> @
+ next if $_ =~ /^\@(br|ctrl)$/; # @ignore-d in text
+ push (@ret, $_);
+ }
+ push (@ret, '@{'); # our non-parsing above fails on this one
+
+ close (FILE) || warn "close($FILE) failed: $!";
+ return @ret;
+}
diff --git a/doc/refcard/txirefcard-a4.pdf b/doc/refcard/txirefcard-a4.pdf
new file mode 100644
index 0000000..a630ca3
--- /dev/null
+++ b/doc/refcard/txirefcard-a4.pdf
Binary files differ
diff --git a/doc/refcard/txirefcard.pdf b/doc/refcard/txirefcard.pdf
new file mode 100644
index 0000000..358c0cc
--- /dev/null
+++ b/doc/refcard/txirefcard.pdf
Binary files differ
diff --git a/doc/refcard/txirefcard.tex b/doc/refcard/txirefcard.tex
new file mode 100644
index 0000000..9e62723
--- /dev/null
+++ b/doc/refcard/txirefcard.tex
@@ -0,0 +1,968 @@
+% Texinfo reference card.
+% $Id: txirefcard.tex,v 1.1 2008/09/07 22:47:47 karl Exp $
+%
+%**start of header
+% This file can be printed with 1, 2, or 3 columns per page (see below).
+% Specify how many you want here. (Except only 3 has been tested.)
+\newcount\columnsperpage
+\columnsperpage=3
+
+% Set letterpaper to 0 for A4 paper, 1 for letter (US) paper.
+% (Except only 1 (letter) has been tested)
+% Useful only when columnsperpage is 2 or 3.
+% \afour is defined in the invocation from the Makefile.
+\newcount\letterpaper
+\ifx\undefined\afour\letterpaper=1 \else\letterpaper=0 \fi
+
+% Copyright 2008 Free Software Foundation, Inc.
+%
+% This file is part of GNU Texinfo.
+%
+% Texinfo is free software; you can redistribute it and/or modify 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.
+%
+% Texinfo is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with Texinfo. If not, see <http://www.gnu.org/licenses/>.
+%
+% This file is written in plain TeX.
+%
+% To compile and print this document:
+% tex refcard.tex
+% dvips -t letter -t landscape refcard.dvi
+%
+% Author:
+% Robert D. Solimeno (adapted from Emacs reference card by Stephen Gildea)
+% Internet: solimeno (at) gmail (dot) com
+%
+% The author thanks Karl Berry for the opportunity to contribute to this
+% project and for his assistance and great patience as I learned how to
+% use TeX.
+%
+% Much of the text is based on, and sometimes copied from, the @-Command
+% Summary node in texinfo.txi, written primarily by Bob Chassell.
+
+\def\versionyear{2008} % year manual was updated
+\def\versionTexinfo{4.13} % version of Texinfo this manual is for
+\def\year{2008} % copyright year
+
+\def\copyrightnotice{%
+\vskip 1ex plus 1filll\begingroup\small
+\advance\baselineskip by 1pt
+\centerline{Copyright \copyright\ \year\ Free Software Foundation, Inc.}
+\centerline{for Texinfo version \versionTexinfo, \versionyear}
+\centerline{by Robert D. Solimeno}
+
+\smallskip
+ Copying and distribution of this material, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved.
+
+\smallskip
+For printed copies of the Texinfo manual, visit {\tt http://gnupress.org} or
+write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
+Floor, Boston, MA 02110-1301 USA.
+
+\endgroup}
+
+% make \bye not \outer so that the \def\bye in the \else clause below
+% can be scanned without complaint.
+\def\bye{\par\vfill\supereject\end}
+
+\newdimen\intercolumnskip %horizontal space between columns
+\newbox\columna %boxes to hold columns already built
+\newbox\columnb
+
+\def\ncolumns{\the\columnsperpage}
+
+\message{[\ncolumns\space
+ column\if 1\ncolumns\else s\fi\space per page]}
+
+\def\scaledmag#1{ scaled \magstep #1}
+
+% This multi-way format was designed by Stephen Gildea October 1986.
+% Note that the 1-column format is fontfamily-independent.
+\ifnum \ncolumns=1 %one-column format uses normal size
+ \hsize 4in
+ \vsize 10in
+ \voffset -.7in
+ \font\titlefont=\fontname\tenbf \scaledmag3
+ \font\headingfont=\fontname\tenbf \scaledmag2
+ \font\smallfont=\fontname\sevenrm
+ \font\smallsy=\fontname\sevensy
+ \font\acrofont=cmr9
+ \footline{\hss\folio}
+ \def\makefootline{\baselineskip10pt\hsize6.5in\line{\the\footline}}
+\else %2 or 3 columns uses prereduced size
+ \hsize 3.4in
+ \ifnum \letterpaper=1
+ \vsize 7.95in
+ \else
+ \vsize 7.65in
+ \fi
+ \hoffset -.75in
+ \voffset -.745in
+ \font\titlefont=cmbx8 \scaledmag3
+ \font\headingfont=cmbx8 \scaledmag2
+ \font\subheadingfont=cmbx8 \scaledmag1
+ \font\subsubheadingfont=cmbx8 \scaledmag0
+ \font\smallfont=cmr8
+ \font\smallsy=cmsy8
+ \font\eightrm=cmr8
+ \font\eightbf=cmbx8
+ \font\eightit=cmti8
+ \font\eighttt=cmtt8
+ \font\eightmi=cmmi8
+ \font\eightsl=cmsl8
+ \font\eightsy=cmsy8
+ \textfont0=\eightrm
+ \textfont1=\eightmi
+ \textfont2=\eightsy
+ \def\rm{\eightrm}
+ \def\bf{\eightbf}
+ \def\it{\eightit}
+ \def\sl{\eightsl}
+ \def\tt{\eighttt}
+ \font\acrofont=cmr7
+ \ifnum \letterpaper=1
+ \normalbaselineskip=.75\normalbaselineskip
+ \else
+ \normalbaselineskip=.7\normalbaselineskip
+ \fi
+ \normallineskip=.8\normallineskip
+ \normallineskiplimit=.8\normallineskiplimit
+ \normalbaselines\rm %make definitions take effect
+
+ \if 2\ncolumns
+ \let\maxcolumn=b
+ \footline{\hss\rm\folio\hss}
+ \def\makefootline{\vskip 2in \hsize=6.86in\line{\the\footline}}
+ \else \if 3\ncolumns
+ \let\maxcolumn=c
+ \nopagenumbers
+ \else
+ \errhelp{You must set \columnsperpage equal to 1, 2, or 3.}
+ \errmessage{Invalid number of columns per page}
+ \fi\fi
+
+ \intercolumnskip=.1in
+ \def\abc{a}
+ \output={% %see The TeXbook page 257
+ % This next line is useful when designing the layout.
+ %\immediate\write16{Column \folio\abc\space starts with \firstmark}
+ \if \maxcolumn\abc \multicolumnformat \global\def\abc{a}
+ \else\if a\abc
+ \global\setbox\columna\columnbox \global\def\abc{b}
+ %% in case we never use \columnb (two-column mode)
+ \global\setbox\columnb\hbox to -\intercolumnskip{}
+ \else
+ \global\setbox\columnb\columnbox \global\def\abc{c}\fi\fi}
+ \def\multicolumnformat{\shipout\vbox{\makeheadline
+ \hbox{\box\columna\hskip\intercolumnskip
+ \box\columnb\hskip\intercolumnskip\columnbox}
+ \makefootline}\advancepageno}
+ \def\columnbox{\leftline{\pagebody}}
+
+ \def\bye{\par\vfill\supereject
+ \if a\abc \else\null\vfill\eject\fi
+ \if a\abc \else\null\vfill\eject\fi
+ \end}
+\fi
+
+\parindent 0pt
+\parskip 1ex plus.5ex minus.5ex % between entries
+\emergencystretch = .9\hsize
+\rightskip = 0pt plus.33\hsize
+\hbadness = 3000
+
+% characters special to TeX.
+\catcode`\^=12
+\catcode`\_=12
+\def\tildechar{{\tt \char`\~}}
+\def\bschar{{\tt \char`\\}}
+\def\lbracechar{{\tt \char`\{}}
+\def\rbracechar{{\tt \char`\}}}
+
+\def\small{\smallfont\textfont2=\smallsy\baselineskip=0.9\baselineskip}
+
+% newcolumn - force a new column. Use sparingly if at all.
+\outer\def\newcolumn{\vfill\eject}
+
+% title - page title. Argument is title text.
+\outer\def\title#1{{\titlefont\centerline{#1}}\vskip 1ex plus .5ex minus .75ex}
+
+% chapter - new major section. Argument is section name.
+\outer\def\chapter#1{\glueabove{2ex plus1.5ex minus1.5ex}%
+ \nobreak\noindent {\headingfont #1}%
+ \nobreak\vskip 0pt plus1ex\nobreak}
+%
+\outer\def\section#1{\glueabove{1.5ex plus1ex minus1ex}
+ \nobreak\noindent {\subheadingfont #1}%
+ \nobreak\vskip 0pt plus.5ex\nobreak}
+%
+\outer\def\subsection#1{\glueabove{1ex plus.5ex minus.5ex}%
+ \nobreak\noindent \centerline{\it #1}%
+ \nobreak\vskip-.5ex % reduce parskip
+ \nobreak
+ }
+
+\def\glueabove#1{\par\ifnum\lastpenalty<10000 \filbreak \vskip #1\relax\fi}
+
+% paralign - begin paragraph containing an alignment.
+% If an \halign is entered while in vertical mode, a parskip is never
+% inserted. Using \paralign instead of \halign solves this problem.
+\def\paralign{\vskip\parskip\halign}
+
+% code, samp - typewriter, without or with surrounding quotes.
+\def\code#1{{\tt#1}\null} %\null so not an abbrev even if period follows
+\def\samp#1{`\code{#1}'}
+
+% var - metasyntactic var, in slanted.
+\def\var#1{{\sl#1\/}\null}
+
+% acro - one point size smaller than main text.
+\def\acro#1{{\acrofont #1}}
+
+% beginexample...endexample surrounds literal text, such a code example.
+% typeset in a typewriter font with line breaks preserved
+\def\beginexample{\par\leavevmode\begingroup
+ \obeylines\obeyspaces\parskip0pt\tt}
+{\obeyspaces\global\let =\ }
+\def\endexample{\endgroup}
+
+% \beginindentedkeys...\endindentedkeys - key definitions will be
+% indented, but running text, typically used as headings to group
+% definitions, will not.
+\newdimen\keyindent
+\def\beginindentedkeys{\keyindent=1em}
+\def\endindentedkeys{\keyindent=0em}
+\endindentedkeys
+
+% \key{key-name}{description of key}
+% prints the description left-justified, and the key-name in a \code
+% form near the right margin. Both in typewriter. The order of the
+% arguments is because that is what describe-mode outputs.
+\def\key#1#2{\leavevmode\hbox to \hsize{\tt
+ \vtop{\hsize=.75\hsize \rightskip=1em \hskip\keyindent\relax #2}%
+ #1\hfil}}
+
+% \infokey KEY DESC
+% the keystroke is delimited by space(s) from the description, the idea
+% being to make straight copy-and-paste from the help message mostly work.
+\gdef\infokey#1 #2\cr{\code{#1}&#2\cr}%
+
+% make eol active.
+\def\begininfokeys{
+ \smallskip
+ \begingroup
+ \def\par{\noalign{\smallskip}}% blank lines within the table
+ \halign\bgroup ##\quad\hfil&##\hfil\cr
+}
+\def\endinfokeys{\egroup\endgroup\smallskip}
+
+% txicmd - definition of a txicmd.
+% \txicmd{cmdname}{args}{description of txicmd}
+% prints the txicmd-name left-justified in typewriter, and the description
+% in small font in a paragraph below the command.
+%
+\def\txicmd#1#2#3{\ifnum\lastpenalty<10000 \filbreak\fi
+ {{\tt#1}\txicmdarg{#2}\ {\small#3}\vskip -2pt}}
+\def\txicmdarg#1{\ {\small\sl\kern-.17em #1}}
+% the kern there gives us less than a full word space; we want enough
+% space for the line-delimited commands like @chapter, but not to be
+% excessive for the brace-delimited commands like @url.
+
+% For the definition commands, which all have @foo and @foox variants.
+\def\txicmdx#1{\txicmd{#1\rmbrack[x]}}
+
+% Enclose argument in roman brackets.
+\def\rmbrack[#1]{{\small[}#1{\small{]}\thinspace}}
+
+% Enclose argument in typewriter braces.
+\def\ttbraced#1{\lbracechar#1\rbracechar}
+
+% metax - definition of a M-x command.
+% \metax{description of command}{M-x command-name}
+% Tries to justify the beginning of the command name at the same place
+% as \key starts the key name. (The "M-x " sticks out to the left.)
+\newbox\metaxbox
+\setbox\metaxbox\hbox{\code{M-x }}
+\newdimen\metaxwidth
+\metaxwidth=\wd\metaxbox
+
+\def\metax#1#2{\leavevmode\hbox to \hsize{\hbox to .75\hsize
+ {\hskip\keyindent\relax#1\hfil}%
+ \hskip -\metaxwidth minus 1fil
+ \code{#2}\hfil}}
+
+% threecol - like "key" but with two key names.
+% for example, one for doing the action backward, and one for forward.
+\def\threecol#1#2#3{\hskip\keyindent\relax#1\hfil&\code{#2}\hfil\quad
+ &\code{#3}\hfil\quad\cr}
+
+% Define the LaTeX logo
+\def\LaTeX{L\kern-.26em \raise.7ex\hbox{\fiverm A}\kern-.15em \TeX}%
+
+% Define some special glyphs, taken from Texinfo.tex
+% The @error{} command.
+% Adapted from the TeXbook's \boxit.
+%
+\newbox\errorbox
+%
+{\tentt \global\dimen0 = 3em}% Width of the box.
+\dimen2 = .35pt % Thickness of rules
+% The text. (`r' is open on the right, `e' somewhat less so on the left.)
+\setbox0 = \hbox{\kern-.75pt \smallfont error\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}
+
+% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
+%
+% Since these characters are used in examples, it should be an even number of
+% \tt widths. Each \tt character is 1en, so two makes it 1em.
+%
+\def\point{$\star$}
+\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
+\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
+\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
+
+% @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{\fiverm R}%
+ \hfil\crcr\Orb}}%
+ }$%
+}
+
+\font\eurosym = feybr10 at 8pt
+\def\euro{{\eurosym e}}
+
+%**end of header
+
+%
+\title{GNU Texinfo Reference Card}
+
+\centerline{(for Texinfo version \versionTexinfo)}
+\vskip1pt
+\centerline{\code{http://www.gnu.org/software/texinfo/}}
+
+\chapter{Texinfo document skeleton}
+
+Texinfo source files are plain text; standard extensions are
+\samp{.texinfo}, \samp{.texi}, and \samp{.txi}. A Texinfo file must
+begin with lines like this:
+
+{\advance\baselineskip by -3pt
+\code{\bschar input texinfo}\hfil\break
+\code{@setfilename {\sl info-file-name}}\hfil\break
+\code{@settitle {\sl name-of-manual}}}
+
+\dots the contents of the Texinfo document follow,
+ending with:\hfil\break
+\code{@bye}
+
+
+\chapter{Texinfo @-commands}
+
+\section{Beginning a Texinfo document}
+
+The commands in this section are given approximately in the order in
+which they conventionally appear.
+
+\txicmd{@setfilename}{info-file-name}{Provide a name to be used for the output files. This command is essential for \TeX\ formatting as well, even though it produces no output. Should be the first command in the input.}
+\txicmd{@settitle}{title}{Specify document \var{title}.}
+
+
+\subsection{Internationalization}
+
+\txicmd{@documentencoding}{enc}{Declare the input encoding to be \var{enc}; use right after \code{@setfilename}. Default is \code{US-ASCII}; other possibilities: \code{UTF-8}, \code{ISO-8859-1}, \code{koi8-r}, \dots}
+\txicmd{@documentlanguage}{LL\rmbrack[\code{_}CC]}{Declare the current language as the two-character \acro{ISO}-639 abbreviation \var{LL}, optionally followed by an underscore and a two-letter \acro{ISO} 3166 two-letter country code (\var{CC}). Default is \code{en_US}.}
+
+
+\subsection{Info directory specifications}
+
+\txicmd{@dircategory}{category name}{Specify an Info directory section for this file's entries. Can be repeated. We try to follow the categories in the Free Software Directory.}
+\txicmd{@direntry}{}{Begin the Info directory menu entries for this file. Pair with \tt @end direntry.}
+
+\subsection{HTML document description}
+
+\txicmd{@documentdescription}{}{Set the document description text for \acro{HTML}; default is just the title of the document. Pair with \code{@end documentdescription}.}
+
+
+\subsection{Title pages}
+
+\txicmd{@shorttitlepage}{title}{Generate a minimal title page, generally for the first page of output in a long printed manual.}
+\txicmd{@center}{line-of-text}{Center \var{line-of-text}, usually for titles.}
+\txicmd{@titlefont}{\ttbraced{\var{text}}}{In a printed manual, print \var{text} in a larger than normal font. Ignored in Info.}
+\txicmd{@titlepage}{}{Begin the title page. Write the command on a line of its own, paired with \code{@end titlepage}. Ignored in Info.}
+\txicmd{@title}{title}{Within \code{@titlepage}, display \var{title} appropriately.}
+\txicmd{@subtitle}{subtitle}{Within \code{@titlepage}, display \var{subtitle}.}
+\txicmd{@author}{author}{Within \code{@titlepage}, display \var{author}.}
+
+
+\subsection{Tables of contents}
+
+\txicmd{@shortcontents}{}{Print a short table of contents (chapter-level entries only). Not relevant to Info.}
+\txicmd{@summarycontents}{}{Synonym for \code{@shortcontents}.}
+\txicmd{@contents}{}{Print a complete table of contents. Has no effect in Info, which uses menus instead.}
+\txicmd{@setcontentsaftertitlepage}{}{Put the table of contents after the `\code{@end titlepage}' even if the \code{@contents} is at the end.}
+\txicmd{@setshortcontentsaftertitlepage}{}{Place the short table of contents after the `\code{@end titlepage}' command even if the \code{@shortcontents} command is at the end.}
+
+\section{Nodes}
+
+\txicmd{@node}{name, next, previous, up}{Begin a new node. The \var{next}, \var{previous}, and \var{up} pointers are usually omitted in a normally-structured document.}
+
+\txicmd{@top}{title}{Mark the topmost \code{@node} in the file, which must be defined on the line immediately preceding \code{@top}. The \var{title} is formatted as a chapter-level heading. The entire top node, including the \code{@node} and \code{@top} lines, are normally enclosed with \code{@ifnottex ... @end ifnottex}.}
+
+\txicmd{@anchor}{\ttbraced{\var{name}}}{Define \var{name} as the current location, for use as a cross-reference target.}
+
+\txicmd{@novalidate}{}{Suppress validation of node references and omit creation of auxiliary files with \TeX. Use before \code{@setfilename}.}
+
+
+\section{Chapter structuring}
+
+\txicmd{@lowersections}{}{Change subsequent chapters to sections, sections to subsections, and so on.}
+\txicmd{@raisesections}{}{Change subsequent sections to chapters, subsections to sections, and so on.}
+
+\subsection{Numbered, included in contents}
+
+\txicmd{@chapter}{title}{Begin a numbered chapter; \var{title} appears in the table of contents.}
+\txicmd{@centerchap}{title}{Like \code{@chapter}, with chapter title centered.}
+
+\subsection{Context-dependent, included in contents}
+
+\txicmd{@section}{title}{Begin a section within a chapter. Within \code{@chapter} and \code{@appendix}, the section is numbered; within \code{@unnumbered}, it is unnumbered.}
+\txicmd{@subsection}{title}{Begin a subsection within a section. Same context-dependent numbering as \code{@section}.}
+\txicmd{@subsubsection}{title}{Begin a numbered subsubsection within a subsection. Same context-dependent numbering as \code{@section}.}
+
+\subsection{Unnumbered, included in contents}
+
+\txicmd{@unnumbered}{title}{Begin an unnumbered chapter.}
+\txicmd{@unnumberedsec}{title}{Begin an unnumbered section.}
+\txicmd{@unnumberedsubsec}{title}{Begin an unnumbered subsection.}
+\txicmd{@unnumberedsubsubsec}{title}{Begin an unnumbered subsubsection.}
+
+\subsection{Lettered and numbered, included in contents}
+
+\txicmd{@appendix}{title}{Begin an appendix.}
+\txicmd{@appendixsec}{title}{Begin an appendix section within an appendix; \code{@appendixsection} is a synonym.}
+\txicmd{@appendixsubsec}{title}{Begin an appendix subsection; \code{@appendixsubsection} is a synonym.}
+\txicmd{@appendixsubsubsec}{title}{Begin an appendix subsubsection; \code{@appendixsubsubsection} is a synonym.}
+
+\subsection{Unnumbered, not in contents, no new page}
+
+\txicmd{@chapheading}{title}{Print an unnumbered chapter-like heading.}
+\txicmd{@majorheading}{title}{Like \code{@chapheading}, but generate additional vertical whitespace before the heading.}
+\txicmd{@heading}{title}{Print an unnumbered section-like heading.}
+\txicmd{@subheading}{title}{Print an unnumbered subsection-like heading.}
+\txicmd{@subsubheading}{title}{Print an unnumbered subsubsection-like heading.}
+
+
+\section{Menus}
+
+\txicmd{@menu}{}{Mark the beginning of a menu of nodes in Info. No effect in a printed manual. Pair with \code{@end menu}.}
+\txicmd{@detailmenu}{}{Mark the (optional) detailed node listing in a master menu.}
+
+
+\section{Cross references}
+
+\subsection{Within the Info system}
+
+\txicmd{@xref}{\ttbraced{node, \rmbrack[entry], \rmbrack[node-title], \rmbrack[info-file], \rmbrack[manual]}}{Makes a reference that starts with `See' in a printed manual. Follow command with punctuation. Only the first argument is mandatory.}
+\txicmd{@pxref}{\ttbraced{node, \rmbrack[entry], \rmbrack[node-title], \rmbrack[info-file], \rmbrack[manual]}}{Like \code{@xref}, but starts with `see' instead of `See', and must be used inside parentheses.}
+\txicmd{@ref}{\ttbraced{node, \rmbrack[entry], \rmbrack[node-title], \rmbrack[info-file], \rmbrack[manual]}}{Like \code{@xref}, but produces only the bare reference without `See' or `see'; must be followed by a punctuation mark.}
+\txicmd{@inforef}{\ttbraced{node, \rmbrack[entry-name], info-file}}{Make a cross reference to an Info file for which there is no printed manual.}
+
+\subsection{Outside of Info}
+
+\txicmd{@url}{\ttbraced{url, \rmbrack[displayed-text], \rmbrack[replacement]}}{Make a hyperlink reference to a uniform resource locator. \code{@uref} is a synonym.}
+\txicmd{@cite}{\ttbraced{title}}{Indicate the name of a book or other reference that has no Info file; no hyperlink.}
+
+
+\section{Marking words and phrases}
+
+\subsection{Markup for regular text}
+
+\txicmd{@emph}{\ttbraced{text}}{Emphasize \var{text}, by using italics where possible, and enclosing in asterisks in Info.}
+\txicmd{@strong}{\ttbraced{text}}{Emphasize \var{text} even more strongly, by using bold where possible; still enclosed in asterisks in Info.}
+\txicmd{@var}{\ttbraced{metasyntactic-variable}}{Indicate a meta variable (a name that stands for another piece of text).}
+\txicmd{@dfn}{\ttbraced{term}}{Indicate the introductory or defining use of a technical term.}
+\txicmd{@acronym}{\ttbraced{acronym}}{Indicate an acronym written in all captial letters, such as `\acro{NASA}'.}
+\txicmd{@abbr}{\ttbraced{abbreviation}}{Indicate a general abbreviation, such as `Comput.'}
+
+\subsection{Markup for literal text}
+
+\txicmd{@code}{\ttbraced{sample-code}}{Indicate an expression, a syntactically complete token, or a program name. Unquoted in Info output.}
+\txicmd{@file}{\ttbraced{filename}}{Indicate the name of a file, buffer, node, directory, etc.}
+\txicmd{@command}{\ttbraced{command-name}}{Indicate a system command name, such as \code{ls}.}
+\txicmd{@env}{\ttbraced{environment-variable}}{Indicate an environment variable name, such as \code{PATH}.}
+\txicmd{@option}{\ttbraced{option-name}}{Indicate a command-line option, such as \code{-v} and \code{--help}.}
+\txicmd{@kbd}{\ttbraced{keyboard-characters}}{Indicate characters of input to be typed by users.}
+\txicmd{@key}{\ttbraced{key-name}}{Indicate the name of a key on a keyboard.}
+\txicmd{@email}{\ttbraced{address, \rmbrack[displayed-text]}}{Indicate an email address.}
+\txicmd{@indicateurl}{\ttbraced{url}}{Indicate a uniform resource locator, but without creating any hyperlink.}
+\txicmd{@samp}{\ttbraced{text}}{Indicate a sequence of literal characters, in general. Quoted in Info output.}
+\txicmd{@verb}{\ttbraced{delimchar literal-text delimchar}}{Output \var{literal-text}, delimited by the single character \var{delimchar}, exactly as is, including any whitespace or Texinfo special characters. Example: \code{@verb\ttbraced{|@ @\rbracechar|}}.}
+
+\subsection{Explicit font selection}
+
+\txicmd{@sc}{\ttbraced{text}}{Set \var{text} in a small caps font in printed output, and uppercase in Info. No other font command has any effect in Info.}
+\txicmd{@r}{\ttbraced{text}}{Set \var{text} in the regular roman font.}
+\txicmd{@i}{\ttbraced{text}}{Set \var{text} in an italic font.}
+\txicmd{@slanted}{\ttbraced{text}}{Set \var{text} in a slanted (oblique) font if possible.}
+\txicmd{@b}{\ttbraced{text}}{Set \var{text} in a bold font.}
+\txicmd{@sansserif}{\ttbraced{text}}{Set \var{text} in a sans serif font if possible.}
+\txicmd{@t}{\ttbraced{text}}{Set \var{text} in a fixed-width, typewriter-like font.}
+
+
+\section{Quotation and example environments}
+
+`Environments' in Texinfo begin with an \code{@\var{envname}} on a line
+of its own and continue through the following lines of input until a
+corresponding \code{@end \var{envname}} is seen.
+
+\txicmd{@noindent}{}{Omit the normal indentation when starting a new paragraph; often used after environments.}
+\txicmd{@exdent}{line-of-text}{Output \var{line-of-text} without any indentation.}
+\txicmd{@cartouche}{}{Highlight an example or quotation by drawing a box with rounded corners around it. Pair with \code{@end cartouche}. No effect in Info.}
+
+\subsection{Displays in regular text fonts}
+
+\txicmd{@format}{}{Begin formatted text: do not fill text; retain normal
+margins and normal text font. Pair with \code{@end format}.}
+\txicmd{@smallformat}{}{Like \code{@format}, but select a smaller (text) font where possible. Pair with \code{@end smallformat}.}
+\txicmd{@display}{}{Begin displayed text: do not fill, and indent text; retain normal text font. Pair with \code{@end display}.}
+\txicmd{@smalldisplay}{}{Like \code{@display}, but select a smaller (text) font where possible. Pair with \code{@end smalldisplay}.}
+\txicmd{@flushleft}{}{Left justify lines: do not fill text, retain normal margins and normal text font. Pair with \code{@end flushleft}.}
+\txicmd{@flushright}{}{Right justify lines, leaving the left end ragged: do not fill text, retain normal margins and normal text font. Pair with \code{@end flushright}.}
+\txicmd{@quotation}{}{Narrow both margins to indicate text that is quoted from another work; do normal line breaking and retain normal font. Takes optional argument of prefix text. Pair with \code{@end quotation}.}
+
+\subsection{Displays using fixed-width fonts}
+
+\txicmd{@example}{}{Begin an example. Indent text, do not fill, and select fixed-width font. Pair with \code{@end example}.}
+\txicmd{@smallexample}{}{Like \code{@example}, but where possible, print text in a smaller font. Pair with \code{@end smallexample}.}
+\txicmd{@lisp}{}{Like \code{@example}, but specifically for an example of Lisp code. Pair with \code{@end lisp}.}
+\txicmd{@smalllisp}{}{Begin an example specifically of Lisp code; same effects as \code{@smallexample}. Pair with \code{@end smalllisp}.}
+\txicmd{@verbatim}{}{Output the text of the environment exactly as is, without indentation. Pair with \code{@end verbatim}.}
+
+
+\section{Lists and tables}
+
+\txicmd{@itemize}{mark-command}{Begin an unordered list, using \code{@item} for each entry, which consist of indented paragraphs, with a mark such as \code{@bullet} inside the left margin at the beginning of each item. Pair with \code{@end itemize}.}
+\txicmd{@enumerate}{\rmbrack[number-or-letter]}{Begin a numbered list, using \code{@item} for each entry. Optionally, start list with \var{number-or-letter} and count from there; by default, number consecutively from `1'. Pair with \code{@end enumerate}.}
+\txicmd{@table}{formatting-command}{Begin a two-column table (description list), using \code{@item} for each entry. Write each first column entry on the same line as \code{@item}. \var{formatting-command} is applied to each first column entry. Pair with \code{@end table}.}
+\txicmd{@ftable}{formatting-command}{Like \code{@table}, but automatically enter each first column entry in the function index.}
+\txicmd{@vtable}{formatting-command}{Like \code{@table}, but automatically enter each first column entry in the variable index.}
+\txicmd{@multitable}{column-width-spec}{Begin multi-column table; start rows with \code{@item} or \code{@headitem}. Pair with \code{@end multitable}.}
+\txicmd{@tab}{}{Separate columns in a row of a multitable.}
+\txicmd{@item}{}{Begin an item for the list and table commands.}
+\txicmd{@itemx}{}{Used only with \code{@table}. Like \code{@item} but do not generate extra preceding vertical space. When several items have the same description, use \code{@item} for the first and \code{@itemx} for the rest.}
+\txicmd{@headitem}{}{Used only for multitables. Like \code{@item}, but indicates a heading row.}
+\txicmd{@asis}{text}{Prints \var{text} as-is; used as \var{formatting-command} for tables when no highlighting is desired.}
+
+
+\section{Floating displays}
+
+\txicmd{@float}{}{Environment within which floating material is defined. Pair with \code{@end float}.}
+\txicmd{@listoffloats}{}{Produce a list of floats for a given float type.}
+\txicmd{@caption}{}{Define the full caption for a \code{@float} anywhere in the float environment.}
+\txicmd{@shortcaption}{}{Define the short caption for a \code{@float}, used in the list of floats.}
+\txicmd{@image}{\ttbraced{filename, \rmbrack[width], \rmbrack[height], \rmbrack[alt], \rmbrack[ext]}}{Include graphics image in external \var{filename} scaled to the given width and/or height, using alt text and looking for \samp{\var{filename}.\var{ext}} first. Can occur inline or by itself on the page.}
+
+\subsection{Footnotes}
+\txicmd{@footnote}{\ttbraced{text-of-footnote}}{Produce a footnote: \var{text-of-footnote} is printed at the bottom of the page by \TeX, while Info and others may format at either (by default) the end of the current node, or in a separate node.}
+\txicmd{@footnotestyle}{style}{Specify footnote style: \samp{end} or \samp{separate}.}
+
+
+\section{Indices}
+
+\txicmd{@cindex}{entry}{Add entry to the index of concepts.}
+\txicmd{@findex}{entry}{Add entry to the index of functions.}
+\txicmd{@vindex}{entry}{Add entry to the index of variables.}
+\txicmd{@kindex}{entry}{Add entry to the index of keys.}
+\txicmd{@pindex}{entry}{Add entry to the index of programs.}
+\txicmd{@tindex}{entry}{Add entry to the index of data types.}
+\txicmd{@defcodeindex}{newidx}{Define a new index and its indexing command (namely, \code{@\var{newidx}index}). Format entries in this index with \code{@code}.}
+\txicmd{@defindex}{newidx}{Define a new index and its indexing command. Format entries as regular text.}
+\txicmd{@syncodeindex}{from-index to-index}{Merge the contents of \var{from-index} into \code{to-index}, formatting the entries in \var{from-index} with \code{@code}.}
+\txicmd{@synindex}{from-index to-index}{Merge the contents of \var{from-index} into \var{to-index}; no special formatting.}
+\txicmd{@printindex}{index-name}{Generate an alphabetized index (using two columns in a printed manual).}
+
+
+\section{Insertions within a paragraph}
+
+\subsection{Characters special to Texinfo}
+
+\txicmd{@@}{}{Insert an at sign, `@'.}
+\txicmd{@\lbracechar}{}{Insert a left brace, `$\{$'.}
+\txicmd{@\rbracechar}{}{Insert a right brace, `$\}$'.}
+\txicmd{@comma}{\ttbraced{}}{Insert a comma character; needed only when a literal comma would be an argument separator, as in \code{@xref}.}
+\txicmd{@\var{whitespace}}{}{An \code{@} followed by a space, tab, or newline produces a normal, stretchable, interword space.}
+
+\subsection{Spacing refinements}
+
+\txicmd{@:}{}{Tell \TeX\ to refrain from inserting extra whitespace after an immediately preceding period, question mark, exclamation mark, or colon, as \TeX\ normally would.}
+\txicmd{@.}{}{Produce a period that ends a sentence; typically needed after an end-of-sentence capital letter.}
+\txicmd{@?}{}{Produce a question mark that ends a sentence.}
+\txicmd{@!}{}{Produce an exclamation point that ends a sentence.}
+\txicmd{@dmn}{\ttbraced{dimension}}{Format a unit of measure, as in `12\thinspace{}pt'. Causes \TeX\ to insert a thin space before \var{dimension}. No effect in Info.}
+
+\subsection{Accents}
+
+Braces are optional for the arguments to the accent commands, with the
+exception of \code{@tieaccent}.
+
+\txicmd{@"}{c}{Generate an umlaut, \"o.}
+\txicmd{@'}{c}{Generate an acute accent, \'o.}
+\txicmd{@,}{c}{Generate a cedilla accent, \c c.}
+\txicmd{@=}{c}{Generate a macron accent, \=o.}
+\txicmd{@^}{c}{Generate a circumflex (hat) accent, \^o.}
+\txicmd{@`}{c}{Generate a grave accent, \'o.}
+\txicmd{@\tildechar}{c}{Generate a tilde accent, \~o.}
+\txicmd{@dotaccent}{c}{Generate a dot (over) accent, \.o.}
+\txicmd{@H}{c}{Generate a long Hungarian umlaut accent, \H o.}
+\txicmd{@ringaccent}{c}{Generate a ring accent, \accent23o.}
+\txicmd{@tieaccent}{\ttbraced{cc}}{Generate a tie-after accent, \t{oo}; argument must be given in braces.}
+\txicmd{@u}{c}{Generate a breve accent, \u{o}.}
+\txicmd{@ubaraccent}{c}{Generate an underbar accent, \b{o}.}
+\txicmd{@udotaccent}{c}{Generate an underdot accent, \d{o}.}
+\txicmd{@v}{c}{Generate a check (hacek) accent, \v{o}.}
+
+\subsection{Non-English characters}
+
+\txicmd{@AA\txicmdarg{\ttbraced{}}, @aa}{\ttbraced{}}{Generate uppercase \AA\ and lowercase \aa.}
+\txicmd{@AE\txicmdarg{\ttbraced{}}, @ae}{\ttbraced{}}{Generate uppercase \AE\ and lowercase \ae.}
+\txicmd{@L\txicmdarg{\ttbraced{}}, @l}{\ttbraced{}}{Generate uppercase \L\ and lowercase \l.}
+\txicmd{@O\txicmdarg{\ttbraced{}}, @o}{\ttbraced{}}{Generate uppercase \O\ and lowercase \o.}
+\txicmd{@OE\txicmdarg{\ttbraced{}}, @oe}{\ttbraced{}}{Generate uppercase \OE\ and lowercase \oe.}
+\txicmd{@exclamdown}{\ttbraced{}}{Generate an upside-down exclamation point, \raise.4ex\hbox{<}.}
+\txicmd{@questiondown}{\ttbraced{}}{Generate an upside-down question mark, \raise.4ex\hbox{?`}.}
+\txicmd{@ss}{\ttbraced{}}{Generate the German sharp-S (es-zet) letter, \ss.}
+
+\subsection{Other text characters and logos}
+
+\txicmd{@dots}{\ttbraced{}}{Generate an ellipsis, `\dots'.}
+\txicmd{@enddots}{\ttbraced{}}{Generate an end-of-sentence ellipsis, `\dots' (more following space in \TeX.)}
+\txicmd{@bullet}{\ttbraced{}}{Generate a large round dot, $\bullet$ (\samp{*} in Info).}
+\txicmd{@euro}{\ttbraced{}}{Generate the Euro currency sign, \euro.}
+\txicmd{@pounds}{\ttbraced{}}{Generate the pounds sterling currency sign, {\it\$}.}
+\txicmd{@minus}{\ttbraced{}}{Generate a minus sign, `$-$'.}
+\txicmd{@copyright}{\ttbraced{}}{Generate the copyright symbol, \copyright.}
+\txicmd{@registeredsymbol}{\ttbraced{}}{Generate the registered symbol, \registeredsymbol.}
+\txicmd{@TeX}{\ttbraced{}}{Generate the \TeX\ logo.}
+\txicmd{@LaTeX}{\ttbraced{}}{Generate the \LaTeX\ logo.}
+\txicmd{@today}{\ttbraced{}}{Insert the current date, in `1 Jan 2000' style.}
+
+\subsection{Glyphs for code examples}
+
+\txicmd{@equiv}{\ttbraced{}}{Indicate equivalence of two forms, $\equiv$.}
+\txicmd{@error}{\ttbraced{}}{Indicate an error message, \error.}
+\txicmd{@expansion}{\ttbraced{}}{Indicate the result of a macro expansion, \expansion.}
+\txicmd{@point}{\ttbraced{}}{Indicate the position of point in a buffer, \point.}
+\txicmd{@print}{\ttbraced{}}{Indicate printed output, \print.}
+\txicmd{@result}{\ttbraced{}}{Indicate the result of an expression, \result.}
+
+\subsection{GUI sequences}
+
+\txicmd{@clicksequence}{\ttbraced{action \code{@click\ttbraced{}} \var{action} \dots}}{Represent a sequence of \acro{GUI} actions or clicks.}
+\txicmd{@click}{\ttbraced{}}{Represent a single `click' in a \code{@clicksequene}.}
+\txicmd{@clickstyle}{\code{@}cmd}{Execute \var{@cmd} for each \code{@click}; default is \code{@arrow}. Empty braces usually following \code{@\var{cmd}} are omitted here.}
+\txicmd{@arrow}{\ttbraced{}}{Generate a right arrow glyph, $\rightarrow$.}
+
+\subsection{Math}
+
+\txicmd{@math}{\ttbraced{math}}{Format the given math (inline); \bschar{} becomes an escape character, and all \TeX\ math is available.}
+\txicmd{@\bschar}{}{Inside \code{@math}, generate a backslash, $\backslash$.}
+\txicmd{@geq}{\ttbraced{}}{Generate a greater-than-or-equal sign, $\geq$.}
+\txicmd{@leq}{\ttbraced{}}{Generate a less-than-or-equal sign, $\leq$.}
+
+
+\section{Making and preventing breaks}
+
+\txicmd{@*}{}{Force a line break.}
+\txicmd{@/}{}{Produces no output, but allows a line break.}
+\txicmd{@-}{}{Insert a discretionary hyphenation point.}
+\txicmd{@hyphenation}{\ttbraced{hy-phen-a-ted words}}{Explicitly define hyphenation points.}
+\txicmd{@tie}{\ttbraced{}}{Generate a normal interword space at which a line break is not allowed.}
+\txicmd{@w}{\ttbraced{text}}{Disallow line breaks within \var{text}.}
+\txicmd{@refill}{}{Does nothing (previously refilled and indented the preceding paragraph for Info).}
+
+\subsection{Vertical space}
+
+\txicmd{@sp}{n}{Skip \var{n} blank lines.}
+\txicmd{@page}{}{Start a new page in a printed manual. Ignored in other formats.}
+\txicmd{@need}{mils}{Start a new page in a printed manual if fewer than \var{mils} thousandths of an inch remain on the current page. Ignored in other formats.}
+\txicmd{@group}{}{Disallow page breaks in following text. Pair with \code{@end group}. Ignored in other formats.}
+\txicmd{@vskip}{amount}{In a printed manual, insert whitespace \var{amount}. Ignored in other formats.}
+
+
+\section{Definition commands}
+
+The \code{...x} variant of each command is analogous to \code{@itemx},
+leaving no extra space above. All definition commands must be written
+entirely on one line. Multiword arguments must be enclosed in braces.
+Descriptive text is on the following lines, ended by \samp{@end
+\var{defcmdname}}.
+
+\subsection{Function-like definitions, untyped}
+
+\txicmdx{@deffn}{category name arguments}{Format a description for a function, interactive command, or similar entity that may take arguments. Its arguments are the \var{category} of entity being described, the \var{name} of this particular entity, and the entity's \var{arguments}, if any.}
+\txicmdx{@defun}{name arguments}{Format a description for a function; equivalent to \samp{@deffn Function \dots}.}
+\txicmdx{@defmac}{name arguments}{Format a description for a macro; equivalent to \samp{@deffn Macro \dots}.}
+\txicmdx{@defspec}{name arguments}{Format a description for a special form; equivalent to \samp{@deffn \ttbraced{Special Form} \dots}.}
+
+\subsection{Function-like definitions, typed}
+
+\txicmdx{@deftypefn}{category data-type name arguments}{Like \code{@deffn}, but for typed entities.}
+\txicmdx{@deftypefun}{data-type name arguments}{Like \code{@defun}, but for typed entities; equivalent to \samp{@deftypefn Function \dots}.}
+
+\subsection{Variable-like definitions, untyped}
+
+\txicmdx{@defvr}{category name}{Format a description for any kind of variable. Its arguments are the \var{category} of the entity and the \var{name} of this particular entity.}
+\txicmdx{@defvar}{name}{Format a description for a variable; equivalent to \samp{@defvr Variable \dots}.}
+\txicmdx{@defopt}{name}{Format a description for a user option; equivalent to \samp{@defvar \ttbraced{User Option} \dots}.}
+
+\subsection{Variable-like definitions, typed}
+
+\txicmdx{@deftypevr}{category data-type name}{Like \code{@defvr}, but for typed entities.}
+\txicmdx{@deftypevar}{data-type name}{Like \code{@defvar}, but for typed entities; equivalent to \samp{@deftypevr Variable \dots}.}
+
+\subsection{Types}
+
+\txicmdx{@deftp}{category name attributes}{Format a description for a data type. Its arguments are the \var{category}, the \var{name} of the type (e.g., \samp{int}), and then the \var{attributes} of objects of that type.}
+
+\subsection{Object-oriented entities, untyped}
+
+\txicmdx{@defop}{category class name arguments}{Format a description for an operation in object-oriented programming. Its arguments are the \var{category} of the variable, the \var{class} to which it belongs, its \var{name}, and any \var{arguments}.}
+\txicmdx{@defmethod}{class name arguments}{Format a description for method \var{name}; equivalent to \samp{@defop \ttbraced{Method on} \dots}.}
+\txicmdx{@defcv}{category class name}{Format a description for a variable associated with a class in object-oriented programming.}
+\txicmdx{@defivar}{class name}{Format a description for an instance variable \var{name} in object-oriented programming; equivalent to \samp{@defcv \ttbraced{Instance Variable of} \dots}.}
+
+\subsection{Object-oriented entities, typed}
+
+\txicmdx{@deftypeop}{category class data-type name arguments}{Format a description for a typed operation in object-oriented programming.}
+\txicmdx{@deftypemethod}{class data-type name arguments}{Format a description for a typed method in object-oriented programming; equivalent to \samp{@deftypeop \ttbraced{Method on} \dots}.}
+\txicmdx{@deftypecv}{category class datatype name}{Like \code{@defcv}, but for typed class variables.}
+\txicmdx{@deftypeivar}{class data-type name}{Like \code{@defivar}, but for typed instance variables.}
+
+
+\section{Conditionally (in)visible text}
+
+\txicmd{@comment}{comment}{Begin a comment in Texinfo. The rest of the line is not visible in any output.}
+\txicmd{@c}{comment}{Synonym for \code{@comment}.}
+\txicmd{@ignore}{}{Begin text that will not appear in any output. Pair with \code{@end ignore}.}
+
+\subsection{Output formats}
+
+\txicmd{@ifdocbook}{}{Begin text to appear only in Docbook output. Pair with \code{@end ifdocbook}.}
+\txicmd{@ifhtml}{}{Begin text to appear only in HTML output. Pair with \code{@end ifhtml}.}
+\txicmd{@ifinfo}{}{Begin text to appear in both Info and (for historical compatibility) plain text output. Pair with \code{@end ifinfo}.}
+\txicmd{@ifplaintext}{}{Begin text to appear only in plain text output. Pair with \code{@end ifplaintext}.}
+\txicmd{@iftex}{}{Begin text to appear only in the \TeX\ output. Pair with \code{@end iftex}.}
+\txicmd{@ifxml}{}{Begin text that will appear only in the XML output. Pair with \tt @end ifxml.}
+\txicmd{@ifnotdocbook, @ifnothtml, @ifnotplaintext, @ifnottex, @ifnotxml}{}{Begin text to be ignored in one output format but not the others: \code{@ifnothtml} text is omitted from HTML output, etc. Pair with the corresponding \code{@end ifnot\var{format}}.}
+\txicmd{@ifnotinfo}{}{Like the other \code{@ifnot\dots} commands, but omit from plain text output as well as Info. Pair with \code{@end ifnotinfo}.}
+
+\subsection{Raw formatter text}
+
+\txicmd{@docbook}{}{Enter Docbook completely. Pair with \code{@end docbook}.}
+\txicmd{@html}{}{Enter \acro{HTML} completely. Pair with \code{@end html}.}
+\txicmd{@tex}{}{Enter \TeX\ completely (e.g., \bschar\ becomes an escape character). Pair with \code{@end tex}.}
+\txicmd{@xml}{}{Enter \acro{XML} completely. Pair with \code{@end xml}.}
+
+\subsection{Document variables}
+
+\txicmd{@set}{name \rmbrack[string]}{Define the Texinfo variable \var{name}, optionally to the value \var{string}.}
+\txicmd{@clear}{name}{Undefine the Texinfo variable \var{name}.}
+\txicmd{@value}{\ttbraced{name}}{Insert the value of the Texinfo variable \var{name}.}
+\txicmd{@ifset}{name}{If the Texinfo variable \var{name} is set, format the following text. Pair with \code{@end ifset}.}
+\txicmd{@ifclear}{flag}{If the Texinfo variable \var{name} is not set, format the following text. Pair with \code{@end ifclear}.}
+
+
+\section{Defining new Texinfo commands}
+
+\txicmd{@alias}{new\code{=}existing}{Make the command \code{@new} a synonym for the existing command \code{@existing}.}
+\txicmd{@macro}{macroname \ttbraced{\var{params}}}{Define a new Texinfo command \code{@\var{macroname}}. Pair with \code{@end macro}.}
+\txicmd{@definfoenclose}{newcmd\code{,} before\code{,} after}{Can only be used within \code{@ifinfo}; create a new command that encloses its argument in the \var{before} and \var{after} strings.}
+
+
+\section{File inclusion}
+
+\txicmd{@include}{filename}{Read the contents of Texinfo source file \var{filename}.}
+\txicmd{@verbatiminclude}{filename}{Incorporate the contents of \var{filename} in the output, exactly as is (in the fixed-width font).}
+
+
+\section{Formatting and headers/footers for \TeX}
+
+\txicmd{@finalout}{}{Tell \TeX\ to omit the large black rectangles beside over-wide lines.}
+
+\subsection{Paper sizes}
+
+\def\inch{$''$xx}
+The default paper size is \acro{US} letter-size, 8x11\inch.
+
+\txicmd{@smallbook}{}{Format for a 7x9.25\inch\ trim size.}
+\txicmd{@afourpaper, @afivepaper}{}{Format for A4 and A5 paper sizes.}
+\txicmd{@afourlatex}{}{A variant for A4 with more whitespace.}
+\txicmd{@afourwide}{}{Format for A4 in landscape.}
+\txicmd{@pagesizes}{\rmbrack[{width{\small][}, height}]}{Format for the explicitly given page dimensions, \var{width} by \var{height}.}
+
+\subsection{Page headers and footers}
+
+\def\footingheading#1#2{% #1=odd/even/every, #2=description
+\txicmd{@#1footing}{\rmbrack[left] \code{@|} \rmbrack[center] \code{@|} \rmbrack[right]}{}
+\vskip-.3\parskip
+\txicmd{@#1heading}{\rmbrack[left] \code{@|} \rmbrack[center] \code{@|} \rmbrack[right]}{\hfill Specify page footings resp.\ headings for #2.}
+\vskip+.1\parskip
+}
+
+\footingheading{odd}{odd-numbered (right-hand) pages}
+\footingheading{even}{even-numbered (left-hand) pages}
+\footingheading{every}{every page}
+
+\txicmd{@thischapter, @thischaptername, @thischapternum, @thisfile, @thispage, @thistitle}{}{These commands are only allowed in a heading or footing. They stand for, respectively, the number and name of the current chapter (in the format `Chapter~1: Title'), the current chapter name only (`Title'), the current chapter number only (`1'), the filename, the current page number, and the title of the document.}
+
+
+\section{Document preferences}
+
+It is usually best to omit any of these settings from the Texinfo
+document, thus allowing users to override the defaults when processing
+the document according to their needs.
+
+\txicmd{@setchapternewpage}{\code{on|off|odd}}{Specify whether chapters start on new pages, and if so, whether on odd-numbered (right-hand) new pages; also set the page headings accordingly.}
+\txicmd{@headings}{\code{on|off|single|double}}{Turn page headings on or off, specify single-sided or double-sided page headings for printing.}
+\txicmd{@paragraphindent}{indent}{Indent paragraphs by \var{indent} number of spaces (perhaps 0); preserve source file indentation if \var{indent} is the string \code{asis}.}
+\txicmd{@exampleindent}{indent}{Indent example-like environments by \var{indent} number of spaces (perhaps 0).}
+\txicmd{@kbdinputstyle}{style}{Specify when \code{@kbd} should use a font distinct from \code{@code}.}
+
+\section{Ending a Texinfo document}
+
+\txicmd{@bye}{}{End reading the Texinfo source. Any following text in the file is ignored.}
+
+
+\chapter{Editing Texinfo sources in Emacs}
+
+The Texinfo major mode in GNU Emacs is for editing Texinfo source files.
+To enter Texinfo mode, visit a source file with one of the supported
+extensions. This list of mode commands is from Emacs 22.1.
+
+\key{C-c C-s}{texinfo-show-structure}
+\key{C-c ]}{up-list}
+\key{C-c \rbracechar}{up-list}
+
+\key{"}{texinfo-insert-quote}
+\key{M-RET}{texinfo-insert-@item}
+\key{C-c C-o}{texinfo-insert-block}
+\key{C-c \lbracechar}{texinfo-insert-braces}
+\key{C-c C-c C-d}{texinfo-start-menu-description}
+\key{C-c C-c C-e}{texinfo-insert-@emph}
+\key{C-c C-c C-s}{texinfo-insert-@strong}
+\key{C-c C-c c}{texinfo-insert-@code}
+\key{C-c C-c d}{texinfo-insert-@dfn}
+\key{C-c C-c e}{texinfo-insert-@end}
+\key{C-c C-c f}{texinfo-insert-@file}
+\key{C-c C-c i}{texinfo-insert-@item}
+\key{C-c C-c k}{texinfo-insert-@kbd}
+\key{C-c C-c m}{texinfo-insert-@email}
+\key{C-c C-c n}{texinfo-insert-@node}
+\key{C-c C-c o}{texinfo-insert-@noindent}
+\key{C-c C-c q}{texinfo-insert-@quotation}
+\key{C-c C-c s}{texinfo-insert-@samp}
+\key{C-c C-c t}{texinfo-insert-@table}
+\key{C-c C-c u}{texinfo-insert-@uref}
+\key{C-c C-c v}{texinfo-insert-@var}
+\key{C-c C-c x}{texinfo-insert-@example}
+
+\key{C-c C-u C-a}{texinfo-all-menus-update}
+\key{C-c C-u C-e}{texinfo-every-node-update}
+\key{C-c C-u RET}{texinfo-make-menu}
+\key{C-c C-u C-n}{texinfo-update-node}
+\key{C-c C-u m}{texinfo-master-menu}
+
+\key{C-c C-e C-b}{texinfo-format-buffer}
+\key{C-c C-e C-r}{texinfo-format-region}
+
+\key{C-c RET C-b}{makeinfo-buffer}
+\key{C-c RET C-k}{kill-compilation}
+\key{C-c RET C-l}{makeinfo-recenter-compilation-buffer}
+\key{C-c RET C-r}{makeinfo-region}
+\key{M-TAB}{ispell-complete-word}
+
+\key{C-c C-t C-b}{texinfo-tex-buffer}
+\key{C-c C-t C-d}{texinfo-delete-from-print-queue}
+\key{C-c C-t TAB}{texinfo-texindex}
+\key{C-c C-t C-k}{tex-kill-job}
+\key{C-c C-t C-l}{tex-recenter-output-buffer}
+\key{C-c C-t C-p}{texinfo-tex-print}
+\key{C-c C-t C-q}{tex-show-print-queue}
+\key{C-c C-t C-r}{texinfo-tex-region}
+\key{C-c C-t C-v}{texinfo-tex-view}
+\key{C-c C-t C-x}{texinfo-quit-job}
+
+\chapter{Reading Info files}
+
+There are two main Info readers: \code{M-x info} (\code{C-h i}) in GNU
+Emacs, and the standalone \code{info} program. These basic keystrokes
+are for standalone Info, but most work in Emacs Info as well.
+
+\begininfokeys %
+\infokey q Quit Info altogether.\cr
+\infokey H Invoke the Info tutorial.\cr
+
+\infokey Up Move up one line.\cr
+\infokey Down Move down one line.\cr
+\infokey DEL Scroll backward one screenful.\cr
+\infokey SPC Scroll forward one screenful.\cr
+\infokey Home Go to the beginning of this node.\cr
+\infokey End Go to the end of this node.\cr
+
+\infokey TAB Skip to the next hypertext link.\cr
+\infokey RET Follow the hypertext link under the cursor.\cr
+\infokey l Go back to the last node seen in this window.\cr
+
+\infokey [ Go to the previous node in the document.\cr
+\infokey ] Go to the next node in the document.\cr
+\infokey p Go to the previous node on this level.\cr
+\infokey n Go to the next node on this level.\cr
+\infokey u Go up one level.\cr
+\infokey t Go to the top node of this document.\cr
+\infokey d Go to the main `directory' node.\cr
+
+\infokey 1...9 Pick the first...ninth item in this node's menu.\cr
+\infokey 0 Pick the last item in this node's menu.\cr
+\infokey m Pick a menu item specified by name.\cr
+\infokey r Follow a cross reference specified by name.\cr
+\infokey g Go to a node specified by name.\cr
+
+\infokey s Search forward for a specified string.\cr
+\infokey \lbracechar{} Search for previous occurrence.\cr
+\infokey \rbracechar{} Search for next occurrence.\cr
+\infokey i Search for a specified string in the index, and\cr
+\infokey {} select the node referenced by the first entry found.\cr
+
+\infokey C-g Cancel the current operation.\cr
+\endinfokeys
+
+The Texinfo reference manual is available via \code{info texinfo}\hfil\break
+(and at \code{http://www.gnu.org/software/texinfo/manual}).
+
+\copyrightnotice
+\bye
diff --git a/doc/stamp-1 b/doc/stamp-1
new file mode 100644
index 0000000..d5c54cf
--- /dev/null
+++ b/doc/stamp-1
@@ -0,0 +1,4 @@
+@set UPDATED 18 September 2008
+@set UPDATED-MONTH September 2008
+@set EDITION 4.13
+@set VERSION 4.13
diff --git a/doc/stamp-vti b/doc/stamp-vti
new file mode 100644
index 0000000..d5c54cf
--- /dev/null
+++ b/doc/stamp-vti
@@ -0,0 +1,4 @@
+@set UPDATED 18 September 2008
+@set UPDATED-MONTH September 2008
+@set EDITION 4.13
+@set VERSION 4.13
diff --git a/doc/texi2dvi.1 b/doc/texi2dvi.1
new file mode 100644
index 0000000..fbfc0de
--- /dev/null
+++ b/doc/texi2dvi.1
@@ -0,0 +1,187 @@
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36.
+.TH TEXI2DVI "1" "September 2008" "texi2dvi 1.135" "User Commands"
+.SH NAME
+texi2dvi \- convert Texinfo documents to DVI
+.SH SYNOPSIS
+.B texi2dvi
+[\fIOPTION\fR]... \fIFILE\fR...
+.SH DESCRIPTION
+Run each Texinfo or (La)TeX FILE through TeX in turn until all
+cross\-references are resolved, building all indices. The directory
+containing each FILE is searched for included files. The suffix of FILE
+is used to determine its language ((La)TeX or Texinfo). To process
+(e)plain TeX files, set the environment variable LATEX=tex.
+.PP
+In order to make texi2dvi a drop\-in replacement of TeX/LaTeX in AUC\-TeX,
+the FILE may also be composed of the following simple TeX commands.
+.TP
+`\einput{FILE}'
+the actual file to compile
+.TP
+`\enonstopmode'
+same as \fB\-\-batch\fR
+.PP
+Makeinfo is used to perform Texinfo macro expansion before running TeX
+when needed.
+.SS "General options:"
+.TP
+\fB\-b\fR, \fB\-\-batch\fR
+no interaction
+.TP
+\fB\-D\fR, \fB\-\-debug\fR
+turn on shell debugging (set \fB\-x\fR)
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+display this help and exit successfully
+.TP
+\fB\-o\fR, \fB\-\-output\fR=\fIOFILE\fR
+leave output in OFILE (implies \fB\-\-clean\fR);
+only one input FILE may be specified in this case
+.TP
+\fB\-q\fR, \fB\-\-quiet\fR
+no output unless errors (implies \fB\-\-batch\fR)
+.TP
+\fB\-s\fR, \fB\-\-silent\fR
+same as \fB\-\-quiet\fR
+.TP
+\fB\-v\fR, \fB\-\-version\fR
+display version information and exit successfully
+.TP
+\fB\-V\fR, \fB\-\-verbose\fR
+report on what is done
+.SS "TeX tuning:"
+.TP
+\-@
+use @input instead of \einput for preloaded Texinfo
+.TP
+\fB\-\-dvi\fR
+output a DVI file [default]
+.TP
+\fB\-\-dvipdf\fR
+output a PDF file via DVI (using dvipdf)
+.TP
+\fB\-e\fR, \fB\-E\fR, \fB\-\-expand\fR
+force macro expansion using makeinfo
+.TP
+\fB\-I\fR DIR
+search DIR for Texinfo files
+.TP
+\fB\-l\fR, \fB\-\-language\fR=\fILANG\fR
+specify LANG for FILE, either latex or texinfo
+.TP
+\fB\-\-no\-line\-error\fR
+do not pass \fB\-\-file\-line\-error\fR to TeX
+.TP
+\fB\-p\fR, \fB\-\-pdf\fR
+use pdftex or pdflatex for processing
+.TP
+\fB\-r\fR, \fB\-\-recode\fR
+call recode before TeX to translate input
+.TP
+\fB\-\-recode\-from\fR=\fIENC\fR
+recode from ENC to the @documentencoding
+.TP
+\fB\-\-src\-specials\fR
+pass \fB\-\-src\-specials\fR to TeX
+.TP
+\fB\-t\fR, \fB\-\-command\fR=\fICMD\fR
+insert CMD in copy of input file
+.TP
+or \fB\-\-texinfo\fR=\fICMD\fR
+multiple values accumulate
+.TP
+\fB\-\-translate\-file\fR=\fIFILE\fR
+use given charset translation file for TeX
+.SS "Build modes:"
+.TP
+\fB\-\-build\fR=\fIMODE\fR
+specify the treatment of auxiliary files [local]
+.TP
+\fB\-\-tidy\fR
+same as \fB\-\-build\fR=\fItidy\fR
+.TP
+\fB\-c\fR, \fB\-\-clean\fR
+same as \fB\-\-build\fR=\fIclean\fR
+.TP
+\fB\-\-build\-dir\fR=\fIDIR\fR
+specify where the tidy compilation is performed;
+implies \fB\-\-tidy\fR;
+defaults to TEXI2DVI_BUILD_DIRECTORY [.]
+.TP
+\fB\-\-mostly\-clean\fR
+remove the auxiliary files and directories
+but not the output
+.PP
+The MODE specifies where the TeX compilation takes place, and, as a
+consequence, how auxiliary files are treated. The build mode
+can also be set using the environment variable TEXI2DVI_BUILD_MODE.
+.SS "Valid MODEs are:"
+.TP
+`local'
+compile in the current directory, leaving all the auxiliary
+files around. This is the traditional TeX use.
+.TP
+`tidy'
+compile in a local *.t2d directory, where the auxiliary files
+are left. Output files are copied back to the original file.
+.TP
+`clean'
+same as `tidy', but remove the auxiliary directory afterwards.
+Every compilation therefore requires the full cycle.
+.SS "Using the `tidy' mode brings several advantages:"
+.TP
+\-
+the current directory is not cluttered with plethora of temporary files.
+.TP
+\-
+clutter can be even reduced using \fB\-\-build\-dir\fR=\fIdir\fR: all the *.t2d
+directories are stored there.
+.TP
+\-
+clutter can be reduced to zero using, e.g., \fB\-\-build\-dir=\fR/tmp/$USER.t2d
+or \fB\-\-build\-dir=\fR$HOME/.t2d.
+.TP
+\-
+the output file is updated after every succesful TeX run, for
+sake of concurrent visualization of the output. In a `local' build
+the viewer stops during the whole TeX run.
+.TP
+\-
+if the compilation fails, the previous state of the output file
+is preserved.
+.TP
+\-
+PDF and DVI compilation are kept in separate subdirectories
+preventing any possibility of auxiliary file incompatibility.
+.PP
+On the other hand, because `tidy' compilation takes place in another
+directory, occasionally TeX won't be able to find some files (e.g., when
+using \egraphicspath): in that case use \fB\-I\fR to specify the additional
+directories to consider.
+.PP
+The values of the BIBTEX, LATEX (or PDFLATEX), MAKEINDEX, MAKEINFO,
+TEX (or PDFTEX), TEXINDEX, and THUMBPDF environment variables are used
+to run those commands, if they are set. Any CMD strings are added
+after @setfilename for Texinfo input, in the first line for LaTeX input.
+.SH "REPORTING BUGS"
+Email bug reports to <bug\-texinfo@gnu.org>,
+general questions and discussion to <help\-texinfo@gnu.org>.
+Texinfo home page: http://www.gnu.org/software/texinfo/
+.SH COPYRIGHT
+Copyright \(co 2008 Free Software Foundation, Inc.
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
+.br
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+.SH "SEE ALSO"
+The full documentation for
+.B texi2dvi
+is maintained as a Texinfo manual. If the
+.B info
+and
+.B texi2dvi
+programs are properly installed at your site, the command
+.IP
+.B info texi2dvi
+.PP
+should give you access to the complete manual.
diff --git a/doc/texi2pdf.1 b/doc/texi2pdf.1
new file mode 100644
index 0000000..0319b28
--- /dev/null
+++ b/doc/texi2pdf.1
@@ -0,0 +1,187 @@
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36.
+.TH TEXI2DVI "1" "September 2008" "texi2dvi 1.135" "User Commands"
+.SH NAME
+texi2dvi \- convert Texinfo documents to PDF
+.SH SYNOPSIS
+.B texi2dvi
+[\fIOPTION\fR]... \fIFILE\fR...
+.SH DESCRIPTION
+Run each Texinfo or (La)TeX FILE through TeX in turn until all
+cross\-references are resolved, building all indices. The directory
+containing each FILE is searched for included files. The suffix of FILE
+is used to determine its language ((La)TeX or Texinfo). To process
+(e)plain TeX files, set the environment variable LATEX=tex.
+.PP
+In order to make texi2dvi a drop\-in replacement of TeX/LaTeX in AUC\-TeX,
+the FILE may also be composed of the following simple TeX commands.
+.TP
+`\einput{FILE}'
+the actual file to compile
+.TP
+`\enonstopmode'
+same as \fB\-\-batch\fR
+.PP
+Makeinfo is used to perform Texinfo macro expansion before running TeX
+when needed.
+.SS "General options:"
+.TP
+\fB\-b\fR, \fB\-\-batch\fR
+no interaction
+.TP
+\fB\-D\fR, \fB\-\-debug\fR
+turn on shell debugging (set \fB\-x\fR)
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+display this help and exit successfully
+.TP
+\fB\-o\fR, \fB\-\-output\fR=\fIOFILE\fR
+leave output in OFILE (implies \fB\-\-clean\fR);
+only one input FILE may be specified in this case
+.TP
+\fB\-q\fR, \fB\-\-quiet\fR
+no output unless errors (implies \fB\-\-batch\fR)
+.TP
+\fB\-s\fR, \fB\-\-silent\fR
+same as \fB\-\-quiet\fR
+.TP
+\fB\-v\fR, \fB\-\-version\fR
+display version information and exit successfully
+.TP
+\fB\-V\fR, \fB\-\-verbose\fR
+report on what is done
+.SS "TeX tuning:"
+.TP
+\-@
+use @input instead of \einput for preloaded Texinfo
+.TP
+\fB\-\-dvi\fR
+output a DVI file [default]
+.TP
+\fB\-\-dvipdf\fR
+output a PDF file via DVI (using dvipdf)
+.TP
+\fB\-e\fR, \fB\-E\fR, \fB\-\-expand\fR
+force macro expansion using makeinfo
+.TP
+\fB\-I\fR DIR
+search DIR for Texinfo files
+.TP
+\fB\-l\fR, \fB\-\-language\fR=\fILANG\fR
+specify LANG for FILE, either latex or texinfo
+.TP
+\fB\-\-no\-line\-error\fR
+do not pass \fB\-\-file\-line\-error\fR to TeX
+.TP
+\fB\-p\fR, \fB\-\-pdf\fR
+use pdftex or pdflatex for processing
+.TP
+\fB\-r\fR, \fB\-\-recode\fR
+call recode before TeX to translate input
+.TP
+\fB\-\-recode\-from\fR=\fIENC\fR
+recode from ENC to the @documentencoding
+.TP
+\fB\-\-src\-specials\fR
+pass \fB\-\-src\-specials\fR to TeX
+.TP
+\fB\-t\fR, \fB\-\-command\fR=\fICMD\fR
+insert CMD in copy of input file
+.TP
+or \fB\-\-texinfo\fR=\fICMD\fR
+multiple values accumulate
+.TP
+\fB\-\-translate\-file\fR=\fIFILE\fR
+use given charset translation file for TeX
+.SS "Build modes:"
+.TP
+\fB\-\-build\fR=\fIMODE\fR
+specify the treatment of auxiliary files [local]
+.TP
+\fB\-\-tidy\fR
+same as \fB\-\-build\fR=\fItidy\fR
+.TP
+\fB\-c\fR, \fB\-\-clean\fR
+same as \fB\-\-build\fR=\fIclean\fR
+.TP
+\fB\-\-build\-dir\fR=\fIDIR\fR
+specify where the tidy compilation is performed;
+implies \fB\-\-tidy\fR;
+defaults to TEXI2DVI_BUILD_DIRECTORY [.]
+.TP
+\fB\-\-mostly\-clean\fR
+remove the auxiliary files and directories
+but not the output
+.PP
+The MODE specifies where the TeX compilation takes place, and, as a
+consequence, how auxiliary files are treated. The build mode
+can also be set using the environment variable TEXI2DVI_BUILD_MODE.
+.SS "Valid MODEs are:"
+.TP
+`local'
+compile in the current directory, leaving all the auxiliary
+files around. This is the traditional TeX use.
+.TP
+`tidy'
+compile in a local *.t2d directory, where the auxiliary files
+are left. Output files are copied back to the original file.
+.TP
+`clean'
+same as `tidy', but remove the auxiliary directory afterwards.
+Every compilation therefore requires the full cycle.
+.SS "Using the `tidy' mode brings several advantages:"
+.TP
+\-
+the current directory is not cluttered with plethora of temporary files.
+.TP
+\-
+clutter can be even reduced using \fB\-\-build\-dir\fR=\fIdir\fR: all the *.t2d
+directories are stored there.
+.TP
+\-
+clutter can be reduced to zero using, e.g., \fB\-\-build\-dir=\fR/tmp/$USER.t2d
+or \fB\-\-build\-dir=\fR$HOME/.t2d.
+.TP
+\-
+the output file is updated after every succesful TeX run, for
+sake of concurrent visualization of the output. In a `local' build
+the viewer stops during the whole TeX run.
+.TP
+\-
+if the compilation fails, the previous state of the output file
+is preserved.
+.TP
+\-
+PDF and DVI compilation are kept in separate subdirectories
+preventing any possibility of auxiliary file incompatibility.
+.PP
+On the other hand, because `tidy' compilation takes place in another
+directory, occasionally TeX won't be able to find some files (e.g., when
+using \egraphicspath): in that case use \fB\-I\fR to specify the additional
+directories to consider.
+.PP
+The values of the BIBTEX, LATEX (or PDFLATEX), MAKEINDEX, MAKEINFO,
+TEX (or PDFTEX), TEXINDEX, and THUMBPDF environment variables are used
+to run those commands, if they are set. Any CMD strings are added
+after @setfilename for Texinfo input, in the first line for LaTeX input.
+.SH "REPORTING BUGS"
+Email bug reports to <bug\-texinfo@gnu.org>,
+general questions and discussion to <help\-texinfo@gnu.org>.
+Texinfo home page: http://www.gnu.org/software/texinfo/
+.SH COPYRIGHT
+Copyright \(co 2008 Free Software Foundation, Inc.
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
+.br
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+.SH "SEE ALSO"
+The full documentation for
+.B texi2dvi
+is maintained as a Texinfo manual. If the
+.B info
+and
+.B texi2dvi
+programs are properly installed at your site, the command
+.IP
+.B info texi2dvi
+.PP
+should give you access to the complete manual.
diff --git a/doc/texindex.1 b/doc/texindex.1
new file mode 100644
index 0000000..3b29d1b
--- /dev/null
+++ b/doc/texindex.1
@@ -0,0 +1,42 @@
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36.
+.TH TEXINDEX "1" "September 2008" "texindex 4.13" "User Commands"
+.SH NAME
+texindex \- sort Texinfo index files
+.SH SYNOPSIS
+.B texindex
+[\fIOPTION\fR]... \fIFILE\fR...
+.SH DESCRIPTION
+Generate a sorted index for each TeX output FILE.
+Usually FILE... is specified as `foo.??' for a document `foo.texi'.
+.SH OPTIONS
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+display this help and exit
+.TP
+\fB\-o\fR, \fB\-\-output\fR FILE
+send output to FILE
+.TP
+\fB\-\-version\fR
+display version information and exit
+.SH "REPORTING BUGS"
+Email bug reports to bug\-texinfo@gnu.org,
+general questions and discussion to help\-texinfo@gnu.org.
+Texinfo home page: http://www.gnu.org/software/texinfo/
+.SH COPYRIGHT
+Copyright \(co 2008 Free Software Foundation, Inc.
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
+.br
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+.SH "SEE ALSO"
+The full documentation for
+.B texindex
+is maintained as a Texinfo manual. If the
+.B info
+and
+.B texindex
+programs are properly installed at your site, the command
+.IP
+.B info texindex
+.PP
+should give you access to the complete manual.
diff --git a/doc/texinfo.5 b/doc/texinfo.5
new file mode 100644
index 0000000..3bdb08a
--- /dev/null
+++ b/doc/texinfo.5
@@ -0,0 +1,61 @@
+.\" texinfo(5)
+.\" $Id: texinfo.5,v 1.3 2005/01/20 22:38:32 karl Exp $
+.\"
+.\" Copyright (C) 1998, 1999, 2002 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 stated in a
+.\" translation approved by the Foundation.
+.\"
+.de EX
+.nf
+.ft CW
+.in +5
+..
+.de EE
+.in -5
+.ft R
+.fi
+..
+.TH TEXINFO 5 "GNU Texinfo" "FSF"
+.SH NAME
+texinfo \- software documentation system
+.SH DESCRIPTION
+Texinfo is a documentation system that uses a single source file to
+produce both online information and printed output. It is primarily
+designed for writing software manuals.
+.PP
+For a full description of the Texinfo language and associated tools,
+please see the Texinfo manual (written in Texinfo itself). Most likely,
+running this command from your shell:
+.EX
+info texinfo
+.EE
+or this key sequence from inside Emacs:
+.EX
+M-x info RET m texinfo RET
+.EE
+will get you there.
+.SH AVAILABILITY
+ftp://ftp.gnu.org/gnu/texinfo/
+.br
+or any GNU mirror site.
+.SH "REPORTING BUGS"
+Please send bug reports to bug-texinfo@gnu.org,
+general questions and discussion to help-texinfo@gnu.org.
+.SH "SEE ALSO"
+info(1), install-info(1), makeinfo(1), texi2dvi(1), texindex(1).
+.br
+emacs(1), tex(1).
+.br
+info(5).
diff --git a/doc/texinfo.tex b/doc/texinfo.tex
new file mode 100644
index 0000000..bac0726
--- /dev/null
+++ b/doc/texinfo.tex
@@ -0,0 +1,8997 @@
+% 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{2008-04-18.10}
+%
+% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
+% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+% 2007, 2008 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 has been our intent since Texinfo was invented.)
+%
+% Please try the latest version of texinfo.tex before submitting bug
+% reports; you can get the latest version from:
+% http://www.gnu.org/software/texinfo/ (the Texinfo home page), or
+% ftp://tug.org/tex/texinfo.tex
+% (and all CTAN mirrors, see http://www.ctan.org).
+% 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\ptexrbrace=\}
+\let\ptexslash=\/
+\let\ptexstar=\*
+\let\ptext=\t
+\let\ptextop=\top
+
+% 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\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\colonChar = `\:
+\chardef\commaChar = `\,
+\chardef\dashChar = `\-
+\chardef\dotChar = `\.
+\chardef\exclamChar= `\!
+\chardef\lquoteChar= `\`
+\chardef\questChar = `\?
+\chardef\rquoteChar= `\'
+\chardef\semiChar = `\;
+\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}
+
+% @| 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).
+%
+\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
+ }%
+ }%
+}
+
+% 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\undefined\else % etex gives us more logging
+ \tracingscantokens1
+ \tracingifs1
+ \tracinggroups1
+ \tracingnesting2
+ \tracingassigns1
+ \fi
+ \tracingcommands3 % 3 gives us more in etex
+ \errorcontextlines16
+}%
+
+% 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}
+
+% For @cropmarks command.
+% 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
+ \noexpand\or \the\toks4 \the\toks6
+ \noexpand\else \the\toks8
+ }%
+}
+% \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).
+ \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
+ \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
+ \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi
+ \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \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
+ out 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, but... --kasal, 06nov03
+ \expandafter\checkenv\csname#1\endcsname
+ \csname E#1\endcsname
+ \endgroup
+ \fi
+}
+
+\newhelp\EMsimple{Press RETURN to continue.}
+
+
+%% Simple single-character @ commands
+
+% @@ prints an @
+% Kludge this until the fonts are right (grr).
+\def\@{{\tt\char64}}
+
+% This is turned off because it was never documented
+% and you can use @w{...} around a quote to suppress ligatures.
+%% Define @` and @' to be the same as ` and '
+%% but suppressing ligatures.
+%\def\`{{`}}
+%\def\'{{'}}
+
+% Used to generate quoted braces.
+\def\mylbrace {{\tt\char123}}
+\def\myrbrace {{\tt\char125}}
+\let\{=\mylbrace
+\let\}=\myrbrace
+\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\, = \c
+\let\dotaccent = \.
+\def\ringaccent#1{{\accent23 #1}}
+\let\tieaccent = \t
+\let\ubaraccent = \b
+\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{\selectfonts\lllsize A}\vss}}%
+ \kern-.15em
+ \TeX
+}
+
+% 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\*{\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
+
+% Old definition--didn't work.
+%\parseargdef\need{\par %
+%% This method tries to make TeX break the page naturally
+%% if the depth of the box does not fit.
+%{\baselineskip=0pt%
+%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak
+%\prevdepth=-1000pt
+%}}
+
+\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'.
+%
+\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
+}
+
+% @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
+ \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
+}
+
+\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\next\centerH
+ \else
+ \let\next\centerV
+ \fi
+ \next{\hfil \ignorespaces#1\unskip \hfil}%
+}
+\def\centerH#1{%
+ {%
+ \hfil\break
+ \advance\hsize by -\leftskip
+ \advance\hsize by -\rightskip
+ \line{#1}%
+ \break
+ }%
+}
+\def\centerV#1{\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 = {}%
+}
+
+
+% @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 \ character.
+% FYI, plain.tex uses \\ as a temporary control sequence (why?), but
+% this is not advertised and we don't care. Texinfo does not
+% otherwise define @\.
+%
+% 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
+ \gdef\mathactive{%
+ \let^ = \ptexhat
+ \let< = \ptexless
+ \let> = \ptexgtr
+ \let+ = \ptexplus
+ }
+}
+
+% 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
+}
+
+% @comma{} is so commas can be inserted into text without messing up
+% Texinfo's parsing.
+%
+\let\comma = ,
+
+% @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 \undefined,
+% borrowed from ifpdf.sty.
+\ifx\pdfoutput\undefined
+\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.
+% 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).
+
+% double active backslashes.
+%
+{\catcode`\@=0 \catcode`\\=\active
+ @gdef@activebackslashdouble{%
+ @catcode`@\=@active
+ @let\=@doublebackslash}
+}
+
+% To handle parens, we must adopt a different approach, since parens are
+% not active characters. hyperref.dtx (which has the same problem as
+% us) handles it with this amazing macro to replace tokens, with minor
+% changes for Texinfo. It is included here under the GPL by permission
+% from the author, Heiko Oberdiek.
+%
+% #1 is the tokens to replace.
+% #2 is the replacement.
+% #3 is the control sequence with the string.
+%
+\def\HyPsdSubst#1#2#3{%
+ \def\HyPsdReplace##1#1##2\END{%
+ ##1%
+ \ifx\\##2\\%
+ \else
+ #2%
+ \HyReturnAfterFi{%
+ \HyPsdReplace##2\END
+ }%
+ \fi
+ }%
+ \xdef#3{\expandafter\HyPsdReplace#3#1\END}%
+}
+\long\def\HyReturnAfterFi#1\fi{\fi#1}
+
+% #1 is a control sequence in which to do the replacements.
+\def\backslashparens#1{%
+ \xdef#1{#1}% redefine it as its expansion; the definition is simply
+ % \lastnode when called from \setref -> \pdfmkdest.
+ \HyPsdSubst{(}{\realbackslash(}{#1}%
+ \HyPsdSubst{)}{\realbackslash)}{#1}%
+}
+
+\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 based on pdfcolor.tex.
+ \def\cmykDarkRed{0.28 1 1 0.35}
+ \def\cmykBlack{0 0 0 1}
+ %
+ \def\pdfsetcolor#1{\pdfliteral{#1 k}}
+ % 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{\cmykBlack}
+ \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\imagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
+ \def\imageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
+ %
+ % pdftex (and the PDF format) support .png, .jpg, .pdf (among
+ % others). Let's try in that order.
+ \let\pdfimgext=\empty
+ \begingroup
+ \openin 1 #1.png \ifeof 1
+ \openin 1 #1.jpg \ifeof 1
+ \openin 1 #1.jpeg \ifeof 1
+ \openin 1 #1.JPG \ifeof 1
+ \openin 1 #1.pdf \ifeof 1
+ \openin 1 #1.PDF \ifeof 1
+ \errhelp = \nopdfimagehelp
+ \errmessage{Could not find image file #1 for pdf}%
+ \else \gdef\pdfimgext{PDF}%
+ \fi
+ \else \gdef\pdfimgext{pdf}%
+ \fi
+ \else \gdef\pdfimgext{JPG}%
+ \fi
+ \else \gdef\pdfimgext{jpeg}%
+ \fi
+ \else \gdef\pdfimgext{jpg}%
+ \fi
+ \else \gdef\pdfimgext{png}%
+ \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 \imagewidth \fi
+ \ifdim \wd2 >0pt height \imageheight \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
+ \activebackslashdouble
+ \makevalueexpandable
+ \def\pdfdestname{#1}%
+ \backslashparens\pdfdestname
+ \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
+ }}
+ %
+ % used to mark target names; must be expandable.
+ \def\pdfmkpgn#1{#1}
+ %
+ % by default, use a color that is dark enough to print on paper as
+ % nearly black, but still distinguishable for online viewing.
+ \def\urlcolor{\cmykDarkRed}
+ \def\linkcolor{\cmykDarkRed}
+ \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.
+ \def\pdfoutlinedest{#3}%
+ \ifx\pdfoutlinedest\empty
+ \def\pdfoutlinedest{#4}%
+ \else
+ % Doubled backslashes in the name.
+ {\activebackslashdouble \xdef\pdfoutlinedest{#3}%
+ \backslashparens\pdfoutlinedest}%
+ \fi
+ %
+ % Also double the backslashes in the display string.
+ {\activebackslashdouble \xdef\pdfoutlinetext{#1}%
+ \backslashparens\pdfoutlinetext}%
+ %
+ \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}%
+ }
+ %
+ \def\pdfmakeoutlines{%
+ \begingroup
+ % Thanh's hack / proper braces in bookmarks
+ \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
+ \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
+ %
+ % Read toc silently, to get counts of subentries for \pdfoutline.
+ \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.
+ %
+ % xx to do this right, we have to translate 8-bit characters to
+ % their "best" equivalent, based on the @documentencoding. Right
+ % now, I guess we'll just let the pdf reader have its way.
+ \indexnofonts
+ \setupdatafile
+ \catcode`\\=\active \otherbackslash
+ \input \tocreadfilename
+ \endgroup
+ }
+ %
+ \def\skipspaces#1{\def\PP{#1}\def\D{|}%
+ \ifx\PP\D\let\nextsp\relax
+ \else\let\nextsp\skipspaces
+ \ifx\p\space\else\addtokens{\filename}{\PP}%
+ \advance\filenamelength by 1
+ \fi
+ \fi
+ \nextsp}
+ \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\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
+ \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
+ \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}}
+
+% 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}}
+
+
+% Default leading.
+\newdimen\textleading \textleading = 13.2pt
+
+% 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}
+%
+\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\undefined \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 #2, adding on the
+% specified font prefix (normally `cm').
+% #3 is the font's design size, #4 is a scale factor, #5 is the CMap
+% encoding (currently only OT1, OT1IT and OT1TT are allowed, pass
+% empty to omit).
+\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
+% emacs-page 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\undefined
+\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. This is 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\authorrm{\secrm}
+\def\authortt{\sectt}
+\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}
+
+% reset the current fonts
+\textfonts
+\rm
+} % end of 11pt text font size definitions
+
+
+% 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\authorrm{\secrm}
+\def\authortt{\sectt}
+\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}
+
+% reduce space between paragraphs
+\divide\parskip by 2
+
+% reset the current fonts
+\textfonts
+\rm
+} % end of 10pt text font size definitions
+
+
+% We provide the user-level command
+% @fonttextsize 10
+% (or 11) to redefine the text font size. pt is assumed.
+%
+\def\xword{10}
+\def\xiword{11}
+%
+\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{25pt}}
+\def\titlefont#1{{\titlefonts\rm #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{16pt}}
+\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}}
+
+% 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
+%
+% I wish the USA used A4 paper.
+% --karl, 24jan03.
+
+
+% Set up the default fonts, so we can use them for creating boxes.
+%
+\definetextfontsizexi
+
+% Define these so they can be easily changed for other fonts.
+\def\angleleft{$\langle$}
+\def\angleright{$\rangle$}
+
+% Count depth in font-changes, for error checks
+\newcount\fontdepth \fontdepth=0
+
+% 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}
+
+%% Add scribe-like font environments, plus @l for inline lisp (usually sans
+%% serif) and @ii for TeX italic
+
+% \smartitalic{ARG} outputs arg in italics, followed by an italic correction
+% unless the following character is such as not to need one.
+\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else
+ \ptexslash\fi\fi\fi}
+\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx}
+\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx}
+
+% like \smartslanted except unconditionally uses \ttsl.
+% @var is set to this for defun arguments.
+\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx}
+
+% like \smartslanted except unconditionally use \sl. We never want
+% ttsl for book titles, do we?
+\def\cite#1{{\sl #1}\futurelet\next\smartitalicx}
+
+\let\i=\smartitalic
+\let\slanted=\smartslanted
+\let\var=\smartslanted
+\let\dfn=\smartslanted
+\let\emph=\smartitalic
+
+% @b, explicit bold.
+\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
+
+\def\t#1{%
+ {\tt \rawbackslash \plainfrenchspacing #1}%
+ \null
+}
+\def\samp#1{`\tclose{#1}'\null}
+\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}}}}
+\def\key #1{{\nohyphenation \uppercase{#1}}\null}
+% The old definition, with no lozenge:
+%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
+\def\ctrl #1{{\tt \rawbackslash \hat}#1}
+
+% @file, @option are the same as @samp.
+\let\file=\samp
+\let\option=\samp
+
+% @code is a modification of @t,
+% which makes spaces the same size as normal in the surrounding text.
+\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
+}
+
+% We *must* turn on hyphenation at `-' and `_' in @code.
+% 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\def\code{\begingroup
+ \catcode\rquoteChar=\active \catcode\lquoteChar=\active
+ \let'\codequoteright \let`\codequoteleft
+ %
+ \catcode\dashChar=\active \catcode\underChar=\active
+ \ifallowcodebreaks
+ \let-\codedash
+ \let_\codeunder
+ \else
+ \let-\realdash
+ \let_\realunder
+ \fi
+ \codex
+ }
+}
+
+\def\realdash{-}
+\def\codedash{-\discretionary{}{}{}}
+\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{}{}{}}%
+ {\_}%
+}
+\def\codex #1{\tclose{#1}\endgroup}
+
+% An additional complication: the above will allow breaks after, e.g.,
+% each of the four underscores in __typeof__. This is undesirable in
+% some manuals, especially if they don't have long identifiers in
+% general. @allowcodebreaks provides a way to control this.
+%
+\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'}%
+ \fi\fi
+}
+
+% @kbd is like @code, except that if the argument is just one @key command,
+% then @kbd has no effect.
+
+% @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 option `\txiarg'}%
+ \fi\fi\fi
+}
+\def\worddistinct{distinct}
+\def\wordexample{example}
+\def\wordcode{code}
+
+% Default is `distinct.'
+\kbdinputstyle distinct
+
+\def\xkey{\key}
+\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
+\ifx\one\xkey\ifx\threex\three \key{#2}%
+\else{\tclose{\kbdfont\look}}\fi
+\else{\tclose{\kbdfont\look}}\fi}
+
+% For @indicateurl, @env, @command quotes seem unnecessary, so use \code.
+\let\indicateurl=\code
+\let\env=\code
+\let\command=\code
+
+% @clicksequence{File @click{} Open ...}
+\def\clicksequence#1{\begingroup #1\endgroup}
+
+% @clickstyle @arrow (by default)
+\parseargdef\clickstyle{\def\click{#1}}
+\def\click{\arrow}
+
+% @uref (abbreviation for `urlref') 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. Perhaps eventually put in
+% a hypertex \special here.
+%
+\def\uref#1{\douref #1,,,\finish}
+\def\douref#1,#2,#3,#4\finish{\begingroup
+ \unsepspaces
+ \pdfurl{#1}%
+ \setbox0 = \hbox{\ignorespaces #3}%
+ \ifdim\wd0 > 0pt
+ \unhbox0 % third arg given, show only that
+ \else
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0 > 0pt
+ \ifpdf
+ \unhbox0 % PDF: 2nd arg given, show only it
+ \else
+ \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url
+ \fi
+ \else
+ \code{#1}% only url given, so show it
+ \fi
+ \fi
+ \endlink
+\endgroup}
+
+% @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
+
+% 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 }
+
+% 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}
+
+\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par}
+
+% @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}
+
+% 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
+
+% @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
+}
+
+% @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
+}
+
+% @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
+}
+
+% Hacks for glyphs from the EC fonts similar to \euro. We don't
+% use \let for the aliases, because sometimes we redefine the original
+% macro, and the alias should reflect the redefinition.
+\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}}
+%
+\def\ecfont{%
+ % We can't distinguish serif/sanserif 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}%
+ \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
+ \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\undefined
+\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
+}
+
+%%% Macros to be used within @titlepage:
+
+\let\subtitlerm=\tenrm
+\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
+
+\def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines
+ \let\tt=\authortt}
+
+\parseargdef\title{%
+ \checkenv\titlepage
+ \leftline{\titlefonts\rm #1}
+ % 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
+ {\authorfont \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{%
+\global\evenheadline={\hfil} \global\evenfootline={\hfil}
+\global\oddheadline={\hfil} \global\oddfootline={\hfil}}
+\HEADINGSoff
+% 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\undefined
+\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
+ \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
+ \def\itemcontents{#1}%
+ % @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. Note that \everycr resets \everytab.
+\def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}%
+%
+% 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 encounter the problem it was intended to solve again.
+% --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={}%
+ \global\colcount=0 % Reset the column counter.
+ % Check for saved footnotes, etc.
+ \checkinserts
+ % Keeps underfull box messages off when table breaks over pages.
+ %\filbreak
+ % Maybe so, but it also creates really weird page breaks when the
+ % table breaks over pages. Wouldn't \vfil be better? Wait until the
+ % problem manifests itself, so it can be fixed for real --karl.
+ }%
+ }%
+ %
+ \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-\realdash \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).
+%
+\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 special treatment of `@end ifset,' call \makeond and the 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 ifclear reads 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}}
+
+% @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 \undefined
+ % 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 in case \tex is in effect and \{ is a \delimiter again.
+ % But can't use \lbracecmd and \rbracecmd because texindex assumes
+ % braces and backslashes are used only as delimiters.
+ \let\{ = \mylbrace
+ \let\} = \myrbrace
+ %
+ % 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
+ %
+ % The above 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\_%
+ %
+ % Non-English letters.
+ \definedummyword\AA
+ \definedummyword\AE
+ \definedummyword\L
+ \definedummyword\OE
+ \definedummyword\O
+ \definedummyword\aa
+ \definedummyword\ae
+ \definedummyword\l
+ \definedummyword\oe
+ \definedummyword\o
+ \definedummyword\ss
+ \definedummyword\exclamdown
+ \definedummyword\questiondown
+ \definedummyword\ordf
+ \definedummyword\ordm
+ %
+ % 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\bullet
+ \definedummyword\comma
+ \definedummyword\copyright
+ \definedummyword\registeredsymbol
+ \definedummyword\dots
+ \definedummyword\enddots
+ \definedummyword\equiv
+ \definedummyword\error
+ \definedummyword\euro
+ \definedummyword\guillemetleft
+ \definedummyword\guillemetright
+ \definedummyword\guilsinglleft
+ \definedummyword\guilsinglright
+ \definedummyword\expansion
+ \definedummyword\minus
+ \definedummyword\pounds
+ \definedummyword\point
+ \definedummyword\print
+ \definedummyword\quotedblbase
+ \definedummyword\quotedblleft
+ \definedummyword\quotedblright
+ \definedummyword\quoteleft
+ \definedummyword\quoteright
+ \definedummyword\quotesinglbase
+ \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\ringaccent
+ \definedummyword\tieaccent
+ \definedummyword\ubaraccent
+ \definedummyword\udotaccent
+ \definedummyword\dotless
+ %
+ % Texinfo font commands.
+ \definedummyword\b
+ \definedummyword\i
+ \definedummyword\r
+ \definedummyword\sc
+ \definedummyword\t
+ %
+ % Commands that take arguments.
+ \definedummyword\acronym
+ \definedummyword\cite
+ \definedummyword\code
+ \definedummyword\command
+ \definedummyword\dfn
+ \definedummyword\emph
+ \definedummyword\env
+ \definedummyword\file
+ \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
+}
+
+% \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}%
+ % Hopefully, all control words can become @asis.
+ \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\@{@}%
+ % how to handle braces?
+ \def\_{\normalunderscore}%
+ %
+ % Non-English letters.
+ \def\AA{AA}%
+ \def\AE{AE}%
+ \def\L{L}%
+ \def\OE{OE}%
+ \def\O{O}%
+ \def\aa{aa}%
+ \def\ae{ae}%
+ \def\l{l}%
+ \def\oe{oe}%
+ \def\o{o}%
+ \def\ss{ss}%
+ \def\exclamdown{!}%
+ \def\questiondown{?}%
+ \def\ordf{a}%
+ \def\ordm{o}%
+ %
+ \def\LaTeX{LaTeX}%
+ \def\TeX{TeX}%
+ %
+ % Assorted special characters.
+ % (The following {} will end up in the sort string, but that's ok.)
+ \def\bullet{bullet}%
+ \def\comma{,}%
+ \def\copyright{copyright}%
+ \def\registeredsymbol{R}%
+ \def\dots{...}%
+ \def\enddots{...}%
+ \def\equiv{==}%
+ \def\error{error}%
+ \def\euro{euro}%
+ \def\guillemetleft{<<}%
+ \def\guillemetright{>>}%
+ \def\guilsinglleft{<}%
+ \def\guilsinglright{>}%
+ \def\expansion{==>}%
+ \def\minus{-}%
+ \def\pounds{pounds}%
+ \def\point{.}%
+ \def\print{-|}%
+ \def\quotedblbase{"}%
+ \def\quotedblleft{"}%
+ \def\quotedblright{"}%
+ \def\quoteleft{`}%
+ \def\quoteright{'}%
+ \def\quotesinglbase{,}%
+ \def\result{=>}%
+ \def\textdegree{degrees}%
+ %
+ % 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
+}
+
+\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
+ %
+ % Swallow the left brace of the text (first parameter):
+ \afterassignment\doentry
+ \let\temp =
+}
+\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.
+
+% \unnumberedno is an oxymoron, of course. 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 achive this, remember the "biggest" unnum. sec. we are currently in:
+\chardef\unmlevel = \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 < \unmlevel
+ \chardef\unmlevel = \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 > \unmlevel
+ \def\headtype{U}%
+ \else
+ \chardef\unmlevel = 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
+ %
+ \message{\putwordChapter\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 apphead0 calls appendixzzz
+\def\appendixzzz#1{%
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+ \global\advance\appendixno by 1
+ \gdef\chaplevelprefix{\appendixletter.}%
+ \resetallfloatnos
+ %
+ \def\appendixnum{\putwordAppendix\space \appendixletter}%
+ \message{\appendixnum}%
+ %
+ \chapmacro{#1}{Yappendix}{\appendixletter}%
+ %
+ \global\let\section = \appendixsec
+ \global\let\subsection = \appendixsubsec
+ \global\let\subsubsection = \appendixsubsubsec
+}
+
+\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
+\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}%
+}
+
+\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz
+\def\appendixsectionzzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%
+}
+\let\appendixsec\appendixsection
+
+\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz
+\def\unnumberedseczzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%
+}
+
+% Subsections.
+\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz
+\def\numberedsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%
+}
+
+\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz
+\def\appendixsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Yappendix}%
+ {\appendixletter.\the\secno.\the\subsecno}%
+}
+
+\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
+\def\unnumberedsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Ynothing}%
+ {\the\unnumberedno.\the\secno.\the\subsecno}%
+}
+
+% Subsubsections.
+\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz
+\def\numberedsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Ynumbered}%
+ {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz
+\def\appendixsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Yappendix}%
+ {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
+\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
+
+% NOTE on use of \vbox for chapter headings, section headings, and such:
+% 1) We use \vbox rather than the earlier \line to permit
+% overlong headings to fold.
+% 2) \hyphenpenalty is set to 10000 because hyphenation in a
+% heading is obnoxious; this forbids it.
+% 3) Likewise, headings look best if no \parindent is used, and
+% if justification is not attempted. Hence \raggedright.
+
+
+\def\majorheading{%
+ {\advance\chapheadingskip by 10pt \chapbreak }%
+ \parsearg\chapheadingzzz
+}
+
+\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
+\def\chapheadingzzz#1{%
+ {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+ \parindent=0pt\raggedright
+ \rm #1\hfill}}%
+ \bigskip \par\penalty 200\relax
+ \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}
+
+%%% Define plain chapter starts, and page on/off switching for it
+% Parameter controlling skip before chapter headings (if needed)
+
+\newskip\chapheadingskip
+
+\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
+ \evenheadline={\hfil}\evenfootline={\hfil}%
+ \oddheadline={\hfil}\oddfootline={\hfil}%
+ \hbox to 0pt{}%
+ \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.
+%
+% To test against our argument.
+\def\Ynothingkeyword{Ynothing}
+\def\Yomitfromtockeyword{Yomitfromtoc}
+\def\Yappendixkeyword{Yappendix}
+%
+\def\chapmacro#1#2#3{%
+ % 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}%
+ \gdef\noexpand\thischapter{\putwordAppendix{} \noexpand\thischapternum:
+ \noexpand\thischaptername}%
+ }%
+ \else
+ \toks0={#1}%
+ \xdef\lastchapterdefs{%
+ \gdef\noexpand\thischaptername{\the\toks0}%
+ \gdef\noexpand\thischapternum{\the\chapno}%
+ \gdef\noexpand\thischapter{\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 \rm
+ %
+ % 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{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
+ \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 {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+ \parindent=0pt\raggedright
+ \rm #1\hfill}}\bigskip \par\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 {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+ \parindent=0pt
+ \hfill {\rm #1}\hfill}}\bigskip \par\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, #2 is the section level (sec/subsec/subsubsec), #3 is
+% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the
+% section number.
+%
+\def\seckeyword{sec}
+%
+\def\sectionheading#1#2#3#4{%
+ {%
+ % Switch to the right set of fonts.
+ \csname #2fonts\endcsname \rm
+ %
+ \def\sectionlevel{#2}%
+ \def\temptype{#3}%
+ %
+ % 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}%
+ \gdef\noexpand\thissection{\putwordSection{} \noexpand\thissectionnum:
+ \noexpand\thissectionname}%
+ }%
+ \fi
+ \else
+ \ifx\sectionlevel\seckeyword
+ \toks0={#1}%
+ \xdef\lastsectiondefs{%
+ \gdef\noexpand\thissectionname{\the\toks0}%
+ \gdef\noexpand\thissectionnum{#4}%
+ \gdef\noexpand\thissection{\putwordSection{} \noexpand\thissectionnum:
+ \noexpand\thissectionname}%
+ }%
+ \fi
+ \fi\fi\fi
+ %
+ % 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.
+ \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 \raggedright
+ \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.)
+ \vskip-\parskip
+ %
+ % This is purely so the last item on the list is a known \penalty >
+ % 10000. This is so \startdefun can avoid allowing breakpoints after
+ % section headings. Otherwise, it would insert a valid breakpoint between:
+ %
+ % @section sec-whatever
+ % @deffn def-whatever
+ \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\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, ...
+
+% 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.
+
+% @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 error\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}
+
+% @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 tex @ character.
+
+\envdef\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
+ \escapechar=`\\
+ %
+ \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 % 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
+ % Flag to tell @lisp, etc., not to narrow margin.
+ \let\nonarrowing = t%
+ \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.
+\def\nonfillstart{%
+ \aboveenvbreak
+ \hfuzz = 12pt % 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
+ \parindent = 0pt
+ \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
+}
+
+% 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 by one command:
+\def\makedispenv #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 synonyms:
+\def\maketwodispenvs #1#2#3{
+ \makedispenv{#1}{#3}
+ \makedispenv{#2}{#3}
+}
+
+% @lisp: indented, narrowed, typewriter font; @example: same as @lisp.
+%
+% @smallexample and @smalllisp: use smaller fonts.
+% Originally contributed by Pavel@xerox.
+%
+\maketwodispenvs {lisp}{example}{%
+ \nonfillstart
+ \tt\quoteexpand
+ \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
+ \gobble % eat return
+}
+% @display/@smalldisplay: same as @lisp except keep current font.
+%
+\makedispenv {display}{%
+ \nonfillstart
+ \gobble
+}
+
+% @format/@smallformat: same as @display except don't narrow margins.
+%
+\makedispenv{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
+ \gobble
+}
+\let\Eflushright = \afterenvbreak
+
+
+% @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.
+%
+\envdef\quotation{%
+ {\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
+ \advance\rightskip by \lispnarrowing
+ \exdentamount = \lispnarrowing
+ \else
+ \let\nonarrowing = \relax
+ \fi
+ \parsearg\quotationlabel
+}
+
+% We have retained a nonzero parskip for the environment, since we're
+% doing normal filling.
+%
+\def\Equotation{%
+ \par
+ \ifx\quotationauthor\undefined\else
+ % indent a bit.
+ \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
+ \fi
+ {\parskip=0pt \afterenvbreak}%
+}
+
+% 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
+}
+
+
+% 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\"%
+}
+%
+% [Knuth] p. 380
+\def\uncatcodespecials{%
+ \def\do##1{\catcode`##1=\other}\dospecials}
+%
+% [Knuth] pp. 380,381,391
+% Disable Spanish ligatures ?` and !` of \tt font
+\begingroup
+ \catcode`\`=\active\gdef`{\relax\lq}
+\endgroup
+%
+% 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}%
+ \catcode`\`=\active
+ \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
+%
+\def\starttabbox{\setbox0=\hbox\bgroup}
+
+% Allow an option to not replace quotes with a regular directed right
+% quote/apostrophe (char 0x27), but instead use 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
+ `%
+ \else \char'22 \fi
+ \else \char'22 \fi
+}
+%
+\begingroup
+ \catcode`\^^I=\active
+ \gdef\tabexpand{%
+ \catcode`\^^I=\active
+ \def^^I{\leavevmode\egroup
+ \dimen0=\wd0 % the width so far, or since the previous tab
+ \divide\dimen0 by\tabw
+ \multiply\dimen0 by\tabw % compute previous multiple of \tabw
+ \advance\dimen0 by\tabw % advance to next multiple of \tabw
+ \wd0=\dimen0 \box0 \starttabbox
+ }%
+ }
+ \catcode`\'=\active
+ \gdef\rquoteexpand{\catcode\rquoteChar=\active \def'{\codequoteright}}%
+ %
+ \catcode`\`=\active
+ \gdef\lquoteexpand{\catcode\lquoteChar=\active \def`{\codequoteleft}}%
+ %
+ \gdef\quoteexpand{\rquoteexpand \lquoteexpand}%
+\endgroup
+
+% start the verbatim environment.
+\def\setupverbatim{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ % Easiest (and conventionally used) font for verbatim
+ \tt
+ \def\par{\leavevmode\egroup\box0\endgraf}%
+ \catcode`\`=\active
+ \tabexpand
+ \quoteexpand
+ % 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
+ \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 minor 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
+ \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
+ \parseargusing\activeparens{\printdefunline#3}%
+ }%
+ \def#2{\dodefunx#1}%
+ \def#3%
+}
+
+%%% 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}%
+ \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 {} }
+
+%%% Type:
+% @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{%
+ % Get the values of \leftskip and \rightskip as they were outside the @def...
+ \advance\leftskip by -\defbodyindent
+ %
+ % How we'll format the type 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.
+ % 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
+ % The continuations:
+ \dimen2=\hsize \advance\dimen2 by -\defargsindent
+ % (plain.tex says that \dimen1 should be used only as global.)
+ \parshape 2 0in \dimen0 \defargsindent \dimen2
+ %
+ % Put the type name to 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}% return value type
+ \ifx\temp\empty\else \tclose{\temp} \fi
+ #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. Let's try @var for that.
+ \let\var=\ttslanted
+ #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\undefined
+ \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 \example
+ \spaceisspace
+ %
+ % Append \endinput to make sure that TeX does not see the ending newline.
+ % I've verified that it is necessary both for e-TeX and for ordinary TeX
+ % --kasal, 29nov03
+ \scantokens{#1\endinput}%
+ \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 \.
+
+% 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{%
+ \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{%
+ \scanctxt
+ \catcode`\\=\other
+ \catcode`\^^M=\other
+}
+
+\def\macrobodyctxt{%
+ \scanctxt
+ \catcode`\{=\other
+ \catcode`\}=\other
+ \catcode`\^^M=\other
+ \usembodybackslash
+}
+
+\def\macroargctxt{%
+ \scanctxt
+ \catcode`\\=\other
+}
+
+% \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\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%
+ \else
+ \expandafter\parsemargdef \argl;%
+ \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}}
+
+% 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 be ##N where N is the position in that list.
+% 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.
+
+\def\parsemargdef#1;{\paramno=0\def\paramlist{}%
+ \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,}
+\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}
+
+% These two commands read recursive and nonrecursive macro bodies.
+% (They're different since rec and nonrec macros end differently.)
+
+\long\def\parsemacbody#1@end macro%
+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+\long\def\parsermacbody#1@end rmacro%
+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+
+% This defines the macro itself. There are six cases: recursive and
+% nonrecursive macros of zero, one, 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 % many
+ \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}}%
+ \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 % many
+ \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}%
+ \fi
+ \fi}
+
+\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. Just 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, during \shipout
+ }%
+ \fi
+}
+
+% @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,,,,,,,]}
+\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
+ \unsepspaces
+ \def\printedmanual{\ignorespaces #5}%
+ \def\printedrefname{\ignorespaces #3}%
+ \setbox1=\hbox{\printedmanual\unskip}%
+ \setbox0=\hbox{\printedrefname\unskip}%
+ \ifdim \wd0 = 0pt
+ % No printed node name was explicitly given.
+ \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
+ % Use the node name inside the square brackets.
+ \def\printedrefname{\ignorespaces #1}%
+ \else
+ % Use the actual chapter/section title appear inside
+ % the square brackets. Use the real section title if we have it.
+ \ifdim \wd1 > 0pt
+ % It is in another manual, so we don't have it.
+ \def\printedrefname{\ignorespaces #1}%
+ \else
+ \ifhavexrefs
+ % We 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
+ % This expands tokens, so do it after making catcode changes, so _
+ % etc. don't get their TeX definitions.
+ \getfilename{#4}%
+ %
+ % See comments at \activebackslashdouble.
+ {\activebackslashdouble \xdef\pdfxrefdest{#1}%
+ \backslashparens\pdfxrefdest}%
+ %
+ \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\wd0 = 0pt
+ \refx{#1-snt}{}%
+ \else
+ \printedrefname
+ \fi
+ %
+ % if the user also gave the printed manual name (fifth arg), append
+ % "in MANUALNAME".
+ \ifdim \wd1 > 0pt
+ \space \putwordin{} \cite{\printedmanual}%
+ \fi
+ \else
+ % node/anchor (non-float) references.
+ %
+ % If we use \unhbox0 and \unhbox1 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 \wd1 > 0pt
+ \putwordSection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}%
+ \else
+ % _ (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 a macro 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
+ \endlink
+\endgroup}
+
+% 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
+ \message{\linenumber Undefined cross reference `#1'.}%
+ \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
+ % 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
+ \futurelet\next\fo@t
+}
+}%end \catcode `\@=11
+
+% 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\undefined
+ \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 this 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
+ \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. On the other hand, if
+ % it's at the top level, we don't want the normal paragraph indentation.
+ \noindent
+ %
+ % 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 \fi % space after the standalone image
+\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,}
+
+% @documentlanguage is usually given very early, just after
+% @setfilename. If done too late, it may not override everything
+% properly. Single argument is the language (de) or locale (de_DE)
+% abbreviation. It would be nice if we could set up a hyphenation file.
+%
+{
+ \catcode`\_ = \active
+ \globaldefs=1
+\parseargdef\documentlanguage{\begingroup
+ \let_=\normalunderscore % normal _ character for filenames
+ \tex % read txi-??.tex file in plain TeX.
+ % Read the file by the name they passed if it exists.
+ \openin 1 txi-#1.tex
+ \ifeof 1
+ \documentlanguagetrywithoutunderscore{#1_\finish}%
+ \else
+ \input txi-#1.tex
+ \fi
+ \closein 1
+ \endgroup
+\endgroup}
+}
+%
+% If they passed de_DE, and txi-de_DE.tex doesn't exist,
+% try txi-de.tex.
+%
+\def\documentlanguagetrywithoutunderscore#1_#2\finish{%
+ \openin 1 txi-#1.tex
+ \ifeof 1
+ \errhelp = \nolanghelp
+ \errmessage{Cannot read language file txi-#1.tex}%
+ \else
+ \input txi-#1.tex
+ \fi
+ \closein 1
+}
+%
+\newhelp\nolanghelp{The given language definition file cannot be found or
+is empty. Maybe you need to install it? In the current directory
+should work if nowhere else does.}
+
+% 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{~}
+ \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{\missingcharmsg{LEFT-POINTING DOUBLE ANGLE QUOTATION MARK}}
+ \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{\missingcharmsg{RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK}}
+ \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{\missingcharmsg{LATIN CAPITAL LETTER ETH}}
+ \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{\missingcharmsg{LATIN CAPITAL LETTER THORN}}
+ \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{\missingcharmsg{LATIN SMALL LETTER ETH}}
+ \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{\missingcharmsg{LATIN SMALL LETTER THORN}}
+ \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{~}
+ \gdef^^a1{\missingcharmsg{LATIN CAPITAL LETTER A WITH OGONEK}}
+ \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{\missingcharmsg{LATIN SMALL LETTER A WITH OGONEK}}
+ \gdef^^b2{\missingcharmsg{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{\missingcharmsg{LATIN CAPITAL LETTER E WITH OGONEK}}
+ \gdef^^cb{\"E}
+ \gdef^^cc{\v E}
+ \gdef^^cd{\'I}
+ \gdef^^ce{\^I}
+ \gdef^^cf{\v D}
+ %
+ \gdef^^d0{\missingcharmsg{LATIN CAPITAL LETTER D WITH STROKE}}
+ \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{\missingcharmsg{LATIN SMALL LETTER E WITH OGONEK}}
+ \gdef^^eb{\"e}
+ \gdef^^ec{\v e}
+ \gdef^^ed{\'\i}
+ \gdef^^ee{\^\i}
+ \gdef^^ef{\v d}
+ %
+ \gdef^^f0{\missingcharmsg{LATIN SMALL LETTER D WITH STROKE}}
+ \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{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{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{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{00FF}{\"y}
+
+ \DeclareUnicodeCharacter{0100}{\=A}
+ \DeclareUnicodeCharacter{0101}{\=a}
+ \DeclareUnicodeCharacter{0102}{\u{A}}
+ \DeclareUnicodeCharacter{0103}{\u{a}}
+ \DeclareUnicodeCharacter{0106}{\'C}
+ \DeclareUnicodeCharacter{0107}{\'c}
+ \DeclareUnicodeCharacter{0108}{\^C}
+ \DeclareUnicodeCharacter{0109}{\^c}
+ \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{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 so finicky about underfull hboxes, either.
+\hbadness = 2000
+
+% 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.}
+
+% Define macros to output various characters with catcode for normal text.
+\catcode`\"=\other
+\catcode`\~=\other
+\catcode`\^=\other
+\catcode`\_=\other
+\catcode`\|=\other
+\catcode`\<=\other
+\catcode`\>=\other
+\catcode`\+=\other
+\catcode`\$=\other
+\def\normaldoublequote{"}
+\def\normaltilde{~}
+\def\normalcaret{^}
+\def\normalunderscore{_}
+\def\normalverticalbar{|}
+\def\normalless{<}
+\def\normalgreater{>}
+\def\normalplus{+}
+\def\normaldollar{$}%$ font-lock fix
+
+% 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~{{\tt\char126}}
+\chardef\hat=`\^
+\catcode`\^=\active
+\def^{{\tt \hat}}
+
+\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<{{\tt \less}}
+\chardef \gtr=`\>
+\catcode`\>=\active
+\def>{{\tt \gtr}}
+\catcode`\+=\active
+\def+{{\tt \char 43}}
+\catcode`\$=\active
+\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
+
+% 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
+@def@normalbackslash{{@tt@backslashcurfont}}
+% 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.
+@gdef@rawbackslash{@let\=@backslashcurfont}
+@gdef@otherbackslash{@let\=@realbackslash}
+
+% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
+% the literal character `\'.
+%
+@def@normalturnoffactive{%
+ @let\=@normalbackslash
+ @let"=@normaldoublequote
+ @let~=@normaltilde
+ @let^=@normalcaret
+ @let_=@normalunderscore
+ @let|=@normalverticalbar
+ @let<=@normalless
+ @let>=@normalgreater
+ @let+=@normalplus
+ @let$=@normaldollar %$ font-lock fix
+ @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 look ok in all fonts, so just make them not special.
+@catcode`@& = @other
+@catcode`@# = @other
+@catcode`@% = @other
+
+
+@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
diff --git a/doc/texinfo.txi b/doc/texinfo.txi
new file mode 100644
index 0000000..374ebfd
--- /dev/null
+++ b/doc/texinfo.txi
@@ -0,0 +1,21234 @@
+\input texinfo.tex @c -*-texinfo-*-
+@c $Id: texinfo.txi,v 1.225 2008/09/07 22:47:46 karl Exp $
+@c Ordinarily, Texinfo files have the extension .texi. But texinfo.texi
+@c clashes with texinfo.tex on 8.3 filesystems, so we use texinfo.txi.
+
+@c Everything between the start/end of header lines will be passed by
+@c Emacs's {texinfo,makeinfo}-format region commands. See the `start of
+@c header' node for more info.
+@c %**start of header
+
+@c makeinfo and texinfo.tex ignore all text before @setfilename.
+@c
+@c Ordinarily, the setfilename argument ends with .info. But
+@c texinfo.info-13 is too long for 14-character filesystems.
+@setfilename texinfo
+
+@c Automake automatically updates version.texi to @set VERSION and
+@c @set UPDATED to appropriate values.
+@include version.texi
+@settitle GNU Texinfo @value{VERSION}
+
+@c Define a new index for options.
+@defcodeindex op
+@c Put everything except function (command, in this case) names in one
+@c index (arbitrarily chosen to be the concept index).
+@syncodeindex op cp
+@syncodeindex vr cp
+@syncodeindex pg cp
+
+@paragraphindent 2
+@c finalout
+
+@comment %**end of header
+
+@copying
+This manual is for GNU Texinfo (version @value{VERSION}, @value{UPDATED}),
+a documentation system that can produce both online information and a
+printed manual from a single source.
+
+Copyright @copyright{} 1988, 1990, 1991, 1992, 1993, 1995, 1996, 1997,
+1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+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.2 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 are free to copy and modify
+this GNU Manual. Buying copies from GNU Press supports the FSF in
+developing GNU and promoting software freedom.''
+@end quotation
+@end copying
+
+@dircategory Texinfo documentation system
+@direntry
+* Texinfo: (texinfo). The GNU documentation format.
+* install-info: (texinfo)Invoking install-info. Update info/dir entries.
+* texi2dvi: (texinfo)Format with texi2dvi. Print Texinfo documents.
+* texi2pdf: (texinfo)PDF Output. PDF output for Texinfo.
+* pdftexi2dvi: (texinfo)PDF Output. PDF output for Texinfo.
+* texindex: (texinfo)Format with tex/texindex. Sort Texinfo index files.
+* makeinfo: (texinfo)Invoking makeinfo. Translate Texinfo source.
+@end direntry
+
+@c Before release, run C-u C-c C-u C-a (texinfo-all-menus-update with a
+@c prefix arg). This updates the node pointers, which texinfmt.el needs.
+
+@c Set smallbook if printing in smallbook format so the example of the
+@c smallbook font is actually written using smallbook; in bigbook, a kludge
+@c is used for TeX output. Do this through the -t option to texi2dvi,
+@c so this same source can be used for other paper sizes as well.
+@c smallbook
+@c set smallbook
+@c @@clear smallbook
+
+@c If you like blank pages, add through texi2dvi -t.
+@c setchapternewpage odd
+
+@c Currently undocumented command, 5 December 1993:
+@c nwnode (Same as node, but no warnings; for `makeinfo'.)
+
+
+@shorttitlepage GNU Texinfo
+
+@titlepage
+@title Texinfo
+@subtitle The GNU Documentation Format
+@subtitle for Texinfo version @value{VERSION}, @value{UPDATED}
+
+@author Robert J. Chassell
+@author Richard M. Stallman
+
+@c Include the Distribution inside the titlepage so
+@c that headings are turned off.
+
+@page
+@vskip 0pt plus 1filll
+@insertcopying
+
+@sp 1
+Published by the Free Software Foundation @*
+51 Franklin St, Fifth Floor @*
+Boston, MA 02110-1301 @*
+USA @*
+ISBN 1-882114-67-1 @c for version 4.0, September 1999.
+@c ISBN 1-882114-65-5 is for version 3.12, March 1998.
+@c ISBN 1-882114-64-7 is for edition 2.24 of November 1996.
+@c ISBN 1-882114-63-9 is for edition 2.20 of 28 February 1995.
+
+@sp 1
+Cover art by Etienne Suvasa.
+@end titlepage
+
+
+@summarycontents
+@contents
+
+
+@ifnottex
+@node Top
+@top Texinfo
+
+This manual is for GNU Texinfo (version @value{VERSION}, @value{UPDATED}),
+a documentation system that can produce both online information and a
+printed manual from a single source.
+
+The first part of this master menu lists the major nodes in this Info
+document, including the @@-command and concept indices. The rest of
+the menu lists all the lower level nodes in the document.
+
+@end ifnottex
+
+@menu
+* Copying Conditions:: Your rights.
+* Overview:: Texinfo in brief.
+* Texinfo Mode:: Using the GNU Emacs Texinfo mode.
+* Beginning a File:: What is at the beginning of a Texinfo file?
+* Ending a File:: What is at the end of a Texinfo file?
+* Structuring:: Creating chapters, sections, appendices, etc.
+* Nodes:: Writing nodes, the basic unit of Texinfo.
+* Menus:: Writing menus.
+* Cross References:: Writing cross references.
+* Marking Text:: Marking words and phrases as code,
+ keyboard input, meta-syntactic
+ variables, and the like.
+* Quotations and Examples:: Block quotations, examples, etc.
+* Lists and Tables:: Itemized or numbered lists, and tables.
+* Special Displays:: Floating figures and footnotes.
+* Indices:: Creating indices.
+* Insertions:: Inserting @@-signs, braces, etc.
+* Breaks:: Forcing or preventing line and page breaks.
+* Definition Commands:: Describing functions and the like uniformly.
+* Conditionals:: Specifying text for only some output cases.
+* Internationalization:: Supporting languages other than English.
+* Defining New Texinfo Commands:: User-defined macros and aliases.
+* Hardcopy:: Output for paper, with @TeX{}.
+* Creating and Installing Info Files:: Details on Info output.
+* Generating HTML:: Details on HTML output.
+
+* Command List:: All the Texinfo @@-commands.
+* Tips:: Hints on how to write a Texinfo document.
+* Sample Texinfo Files:: Complete examples, including full texts.
+* Include Files:: How to incorporate other Texinfo files.
+* Headings:: How to write page headings and footings.
+* Catching Mistakes:: How to find formatting mistakes.
+* GNU Free Documentation License::Copying this manual.
+* Command and Variable Index:: A menu containing commands and variables.
+* General Index:: A menu covering many topics.
+
+@detailmenu
+ --- The Detailed Node Listing ---
+
+Overview of Texinfo
+
+* Reporting Bugs:: Submitting effective bug reports.
+* Using Texinfo:: Create printed or online output.
+* Output Formats:: Overview of the supported output formats.
+* Info Files:: What is an Info file?
+* Printed Books:: Characteristics of a printed book or manual.
+* Formatting Commands:: @@-commands are used for formatting.
+* Conventions:: General rules for writing a Texinfo file.
+* Comments:: Writing comments and ignored text in general.
+* Minimum:: What a Texinfo file must have.
+* Six Parts:: Usually, a Texinfo file has six parts.
+* Short Sample:: A short sample Texinfo file.
+* History:: Acknowledgements, contributors and genesis.
+
+Using Texinfo Mode
+
+* Texinfo Mode Overview:: How Texinfo mode can help you.
+* Emacs Editing:: Texinfo mode adds to GNU Emacs' general
+ purpose editing features.
+* Inserting:: How to insert frequently used @@-commands.
+* Showing the Structure:: How to show the structure of a file.
+* Updating Nodes and Menus:: How to update or create new nodes and menus.
+* Info Formatting:: How to format for Info.
+* Printing:: How to format and print part or all of a file.
+* Texinfo Mode Summary:: Summary of all the Texinfo mode commands.
+
+Updating Nodes and Menus
+
+* Updating Commands:: Five major updating commands.
+* Updating Requirements:: How to structure a Texinfo file for
+ using the updating command.
+* Other Updating Commands:: How to indent descriptions, insert
+ missing nodes lines, and update
+ nodes in sequence.
+
+Beginning a Texinfo File
+
+* Sample Beginning:: A sample beginning for a Texinfo file.
+* Texinfo File Header:: The first lines.
+* Document Permissions:: Ensuring your manual is free.
+* Titlepage & Copyright Page:: Creating the title and copyright pages.
+* Contents:: How to create a table of contents.
+* The Top Node:: Creating the `Top' node and master menu.
+* Global Document Commands:: Affecting formatting throughout.
+* Software Copying Permissions:: Ensure that you and others continue to
+ have the right to use and share software.
+
+Texinfo File Header
+
+* First Line:: The first line of a Texinfo file.
+* Start of Header:: Formatting a region requires this.
+* setfilename:: Tell Info the name of the Info file.
+* settitle:: Create a title for the printed work.
+* End of Header:: Formatting a region requires this.
+
+Document Permissions
+
+* copying:: Declare the document's copying permissions.
+* insertcopying:: Where to insert the permissions.
+
+Title and Copyright Pages
+
+* titlepage:: Create a title for the printed document.
+* titlefont center sp:: The @code{@@titlefont}, @code{@@center},
+ and @code{@@sp} commands.
+* title subtitle author:: The @code{@@title}, @code{@@subtitle},
+ and @code{@@author} commands.
+* Copyright:: How to write the copyright notice and
+ include copying permissions.
+* end titlepage:: Turn on page headings after the title and
+ copyright pages.
+* headings on off:: An option for turning headings on and off
+ and double or single sided printing.
+
+The `Top' Node and Master Menu
+
+* Top Node Example::
+* Master Menu Parts::
+
+Global Document Commands
+
+* documentdescription:: Document summary for the HTML output.
+* setchapternewpage:: Start chapters on right-hand pages.
+* paragraphindent:: Specify paragraph indentation.
+* firstparagraphindent:: Suppress indentation of the first paragraph.
+* exampleindent:: Specify environment indentation.
+
+Ending a Texinfo File
+
+* Printing Indices & Menus:: How to print an index in hardcopy and
+ generate index menus in Info.
+* File End:: How to mark the end of a file.
+
+Chapter Structuring
+
+* Tree Structuring:: A manual is like an upside down tree @dots{}
+* Structuring Command Types:: How to divide a manual into parts.
+* makeinfo top:: The @code{@@top} command, part of the `Top' node.
+* chapter::
+* unnumbered & appendix::
+* majorheading & chapheading::
+* section::
+* unnumberedsec appendixsec heading::
+* subsection::
+* unnumberedsubsec appendixsubsec subheading::
+* subsubsection:: Commands for the lowest level sections.
+* Raise/lower sections:: How to change commands' hierarchical level.
+
+Nodes
+
+* Two Paths:: Different commands to structure
+ Info output and printed output.
+* Node Menu Illustration:: A diagram, and sample nodes and menus.
+* node:: Creating nodes, in detail.
+* makeinfo Pointer Creation:: Letting makeinfo determine node pointers.
+* anchor:: Defining arbitrary cross-reference targets.
+
+The @code{@@node} Command
+
+* Node Names:: How to choose node and pointer names.
+* Writing a Node:: How to write an @code{@@node} line.
+* Node Line Tips:: Keep names short.
+* Node Line Requirements:: Keep names unique, without @@-commands.
+* First Node:: How to write a `Top' node.
+* makeinfo top command:: How to use the @code{@@top} command.
+
+Menus
+
+* Menu Location:: Menus go at the ends of short nodes.
+* Writing a Menu:: What is a menu?
+* Menu Parts:: A menu entry has three parts.
+* Less Cluttered Menu Entry:: Two part menu entry.
+* Menu Example:: Two and three part menu entries.
+* Other Info Files:: How to refer to a different Info file.
+
+Cross References
+
+* References:: What cross references are for.
+* Cross Reference Commands:: A summary of the different commands.
+* Cross Reference Parts:: A cross reference has several parts.
+* xref:: Begin a reference with `See' @dots{}
+* Top Node Naming:: How to refer to the beginning of another file.
+* ref:: A reference for the last part of a sentence.
+* pxref:: How to write a parenthetical cross reference.
+* inforef:: How to refer to an Info-only file.
+* uref:: How to refer to a uniform resource locator.
+* cite:: How to refer to books not in the Info system.
+
+@code{@@xref}
+
+* Reference Syntax:: What a reference looks like and requires.
+* One Argument:: @code{@@xref} with one argument.
+* Two Arguments:: @code{@@xref} with two arguments.
+* Three Arguments:: @code{@@xref} with three arguments.
+* Four and Five Arguments:: @code{@@xref} with four and five arguments.
+
+Marking Words and Phrases
+
+* Indicating:: How to indicate definitions, files, etc.
+* Emphasis:: How to emphasize text.
+
+Indicating Definitions, Commands, etc.
+
+* Useful Highlighting:: Highlighting provides useful information.
+* code:: Indicating program code.
+* kbd:: Showing keyboard input.
+* key:: Specifying keys.
+* samp:: A literal sequence of characters.
+* verb:: A verbatim sequence of characters.
+* var:: Indicating metasyntactic variables.
+* env:: Indicating environment variables.
+* file:: Indicating file names.
+* command:: Indicating command names.
+* option:: Indicating option names.
+* dfn:: Specifying definitions.
+* abbr:: Indicating abbreviations.
+* acronym:: Indicating acronyms.
+* indicateurl:: Indicating a World Wide Web reference.
+* email:: Indicating an electronic mail address.
+
+Emphasizing Text
+
+* emph & strong:: How to emphasize text in Texinfo.
+* Smallcaps:: How to use the small caps font.
+* Fonts:: Various font commands for printed output.
+
+Quotations and Examples
+
+* Block Enclosing Commands:: Different constructs for different purposes.
+* quotation:: Writing a quotation.
+* example:: Writing an example in a fixed-width font.
+* verbatim:: Writing a verbatim example.
+* verbatiminclude:: Including a file verbatim.
+* lisp:: Illustrating Lisp code.
+* small:: Examples in a smaller font.
+* display:: Writing an example in the current font.
+* format:: Writing an example without narrowed margins.
+* exdent:: Undo indentation on a line.
+* flushleft & flushright:: Pushing text flush left or flush right.
+* noindent:: Preventing paragraph indentation.
+* indent:: Forcing paragraph indentation.
+* cartouche:: Drawing rounded rectangles around examples.
+
+Lists and Tables
+
+* Introducing Lists:: Texinfo formats lists for you.
+* itemize:: How to construct a simple list.
+* enumerate:: How to construct a numbered list.
+* Two-column Tables:: How to construct a two-column table.
+* Multi-column Tables:: How to construct generalized tables.
+
+Making a Two-column Table
+
+* table:: How to construct a two-column table.
+* ftable vtable:: Automatic indexing for two-column tables.
+* itemx:: How to put more entries in the first column.
+
+@code{@@multitable}: Multi-column Tables
+
+* Multitable Column Widths:: Defining multitable column widths.
+* Multitable Rows:: Defining multitable rows, with examples.
+
+Special Displays
+
+* Floats:: Figures, tables, and the like.
+* Images:: Including graphics and images.
+* Footnotes:: Writing footnotes.
+
+Floats
+
+* float:: Producing floating material.
+* caption shortcaption:: Specifying descriptions for floats.
+* listoffloats:: A table of contents for floats.
+
+Inserting Images
+
+* Image Syntax::
+* Image Scaling::
+
+Footnotes
+
+* Footnote Commands:: How to write a footnote in Texinfo.
+* Footnote Styles:: Controlling how footnotes appear in Info.
+
+Indices
+
+* Index Entries:: Choose different words for index entries.
+* Predefined Indices:: Use different indices for different kinds
+ of entries.
+* Indexing Commands:: How to make an index entry.
+* Combining Indices:: How to combine indices.
+* New Indices:: How to define your own indices.
+
+Combining Indices
+
+* syncodeindex:: How to merge two indices, using @code{@@code}
+ font for the merged-from index.
+* synindex:: How to merge two indices, using the
+ default font of the merged-to index.
+
+Special Insertions
+
+* Atsign Braces Comma:: Inserting @@ and @{@} and ,.
+* Inserting Quote Characters:: Inserting left and right quotes, in code.
+* Inserting Space:: How to insert the right amount of space
+ within a sentence.
+* Inserting Accents:: How to insert accents and special characters.
+* Inserting Quotation Marks:: How to insert quotation marks.
+* Dots Bullets:: How to insert dots and bullets.
+* TeX and copyright:: How to insert the @TeX{} logo
+ and the copyright symbol.
+* euro:: How to insert the Euro currency symbol.
+* pounds:: How to insert the pounds currency symbol.
+* textdegree:: How to insert the degrees symbol.
+* minus:: How to insert a minus sign.
+* geq leq:: How to insert greater/less-than-or-equal signs.
+* math:: How to format a mathematical expression.
+* Click Sequences:: Inserting GUI usage sequences.
+* Glyphs:: How to indicate results of evaluation,
+ expansion of macros, errors, etc.
+
+Inserting @@ and @{@} and @comma{}
+
+* Inserting an Atsign::
+* Inserting Braces::
+* Inserting a Comma::
+
+Inserting Space
+
+* Not Ending a Sentence:: Sometimes a . doesn't end a sentence.
+* Ending a Sentence:: Sometimes it does.
+* Multiple Spaces:: Inserting multiple spaces.
+* frenchspacing:: Specifying end-of-sentence spacing.
+* dmn:: How to format a dimension.
+
+Inserting Ellipsis and Bullets
+
+* dots:: How to insert dots @dots{}
+* bullet:: How to insert a bullet.
+
+Inserting @TeX{} and Legal Symbols: @copyright{}, @registeredsymbol{}
+
+* tex:: The @TeX{} logos.
+* copyright symbol:: The copyright symbol (c in a circle).
+* registered symbol:: The registered symbol (R in a circle).
+
+Glyphs for Examples
+
+* Glyphs Summary::
+* result:: How to show the result of expression.
+* expansion:: How to indicate an expansion.
+* Print Glyph:: How to indicate printed output.
+* Error Glyph:: How to indicate an error message.
+* Equivalence:: How to indicate equivalence.
+* Point Glyph:: How to indicate the location of point.
+
+Glyphs Summary
+
+* result::
+* expansion::
+* Print Glyph::
+* Error Glyph::
+* Equivalence::
+* Point Glyph::
+
+Forcing and Preventing Breaks
+
+* Break Commands:: Summary of break-related commands.
+* Line Breaks:: Forcing line breaks.
+* - and hyphenation:: Helping @TeX{} with hyphenation points.
+* allowcodebreaks:: Controlling line breaks within @@code text.
+* w:: Preventing unwanted line breaks in text.
+* tie:: Inserting an unbreakable but varying space.
+* sp:: Inserting blank lines.
+* page:: Forcing the start of a new page.
+* group:: Preventing unwanted page breaks.
+* need:: Another way to prevent unwanted page breaks.
+
+Definition Commands
+
+* Def Cmd Template:: Writing descriptions using definition commands.
+* Def Cmd Continuation Lines:: Continuing the heading over source lines.
+* Optional Arguments:: Handling optional and repeated arguments.
+* deffnx:: Group two or more `first' lines.
+* Def Cmds in Detail:: Reference for all the definition commands.
+* Def Cmd Conventions:: Conventions for writing definitions.
+* Sample Function Definition:: An example.
+
+The Definition Commands
+
+* Functions Commands:: Commands for functions and similar entities.
+* Variables Commands:: Commands for variables and similar entities.
+* Typed Functions:: Commands for functions in typed languages.
+* Typed Variables:: Commands for variables in typed languages.
+* Data Types:: The definition command for data types.
+* Abstract Objects:: Commands for object-oriented programming.
+
+Object-Oriented Programming
+
+* Variables: Object-Oriented Variables.
+* Methods: Object-Oriented Methods.
+
+Conditionally Visible Text
+
+* Conditional Commands:: Text for a given format.
+* Conditional Not Commands:: Text for any format other than a given one.
+* Raw Formatter Commands:: Using raw formatter commands.
+* set clear value:: Variable tests and substitutions.
+* Conditional Nesting:: Using conditionals inside conditionals.
+
+@code{@@set}, @code{@@clear}, and @code{@@value}
+
+* set value:: Expand a flag variable to a string.
+* ifset ifclear:: Format a region if a flag is set.
+* value Example:: An easy way to update edition information.
+
+Internationalization
+
+* documentlanguage:: Declaring the current language.
+* documentencoding:: Declaring the input encoding.
+
+Defining New Texinfo Commands
+
+* Defining Macros:: Defining and undefining new commands.
+* Invoking Macros:: Using a macro, once you've defined it.
+* Macro Details:: Limitations of Texinfo macros.
+* alias:: Command aliases.
+* definfoenclose:: Customized highlighting.
+
+Formatting and Printing Hardcopy
+
+* Use TeX:: Use @TeX{} to format for hardcopy.
+* Format with tex/texindex:: How to format with explicit shell commands.
+* Format with texi2dvi:: A simpler way to format.
+* Print with lpr:: How to print.
+* Within Emacs:: How to format and print from an Emacs shell.
+* Texinfo Mode Printing:: How to format and print in Texinfo mode.
+* Compile-Command:: How to print using Emacs's compile command.
+* Requirements Summary:: @TeX{} formatting requirements summary.
+* Preparing for TeX:: What to do before you use @TeX{}.
+* Overfull hboxes:: What are and what to do with overfull hboxes.
+* smallbook:: How to print small format books and manuals.
+* A4 Paper:: How to print on A4 or A5 paper.
+* pagesizes:: How to print with customized page sizes.
+* Cropmarks and Magnification:: How to print marks to indicate the size
+ of pages and how to print scaled up output.
+* PDF Output:: Portable Document Format output.
+* Obtaining TeX:: How to Obtain @TeX{}.
+
+Creating and Installing Info Files
+
+* Creating an Info File::
+* Installing an Info File::
+
+Creating an Info File
+
+* makeinfo advantages:: @code{makeinfo} provides better error checking.
+* Invoking makeinfo:: How to run @code{makeinfo} from a shell.
+* makeinfo options:: Specify fill-column and other options.
+* Pointer Validation:: How to check that pointers point somewhere.
+* makeinfo in Emacs:: How to run @code{makeinfo} from Emacs.
+* texinfo-format commands:: Two Info formatting commands written
+ in Emacs Lisp are an alternative
+ to @code{makeinfo}.
+* Batch Formatting:: How to format for Info in Emacs Batch mode.
+* Tag and Split Files:: How tagged and split files help Info
+ to run better.
+
+Installing an Info File
+
+* Directory File:: The top level menu for all Info files.
+* New Info File:: Listing a new Info file.
+* Other Info Directories:: How to specify Info files that are
+ located in other directories.
+* Installing Dir Entries:: How to specify what menu entry to add
+ to the Info directory.
+* Invoking install-info:: @code{install-info} options.
+
+Generating HTML
+
+* HTML Translation:: Details of the HTML output.
+* HTML Splitting:: How HTML output is split.
+* HTML CSS:: Influencing HTML output with Cascading Style Sheets.
+* HTML Xref:: Cross-references in HTML output.
+
+HTML Cross-references
+
+* Link Basics: HTML Xref Link Basics.
+* Node Expansion: HTML Xref Node Name Expansion.
+* Command Expansion: HTML Xref Command Expansion.
+* 8-bit Expansion: HTML Xref 8-bit Character Expansion.
+* Mismatch: HTML Xref Mismatch.
+
+@@-Command List
+
+* Command Syntax:: General syntax for varieties of @@-commands.
+
+Sample Texinfo Files
+
+* Short Sample Texinfo File::
+* GNU Sample Texts::
+* Verbatim Copying License::
+* All-permissive Copying License::
+
+GNU Free Documentation License
+
+Include Files
+
+* Using Include Files:: How to use the @code{@@include} command.
+* texinfo-multiple-files-update:: How to create and update nodes and
+ menus when using included files.
+* Include Files Requirements:: @code{texinfo-multiple-files-update} needs.
+* Sample Include File:: A sample outer file with included files
+ within it; and a sample included file.
+* Include Files Evolution:: How use of the @code{@@include} command
+ has changed over time.
+
+Page Headings
+
+* Headings Introduced:: Conventions for using page headings.
+* Heading Format:: Standard page heading formats.
+* Heading Choice:: How to specify the type of page heading.
+* Custom Headings:: How to create your own headings and footings.
+
+Formatting Mistakes
+
+* makeinfo Preferred:: @code{makeinfo} finds errors.
+* Debugging with Info:: How to catch errors with Info formatting.
+* Debugging with TeX:: How to catch errors with @TeX{} formatting.
+* Using texinfo-show-structure:: How to use @code{texinfo-show-structure}.
+* Using occur:: How to list all lines containing a pattern.
+* Running Info-Validate:: How to find badly referenced nodes.
+
+Finding Badly Referenced Nodes
+
+* Using Info-validate:: How to run @code{Info-validate}.
+* Unsplit:: How to create an unsplit file.
+* Tagifying:: How to tagify a file.
+* Splitting:: How to split a file manually.
+
+@end detailmenu
+@end menu
+
+@c Reward readers for getting to the end of the menu :).
+@c Contributed by Arnold Robbins.
+@quotation
+Documentation is like sex: when it is good, it is very, very good; and
+when it is bad, it is better than nothing.
+---Dick Brandon
+@end quotation
+
+
+@node Copying Conditions
+@unnumbered Texinfo Copying Conditions
+@cindex Copying conditions
+@cindex Conditions for copying Texinfo
+
+The programs currently being distributed that relate to Texinfo include
+@code{makeinfo}, @code{info}, @code{texindex}, and @file{texinfo.tex}.
+These programs are @dfn{free}; this means that everyone is free to use
+them and free to redistribute them on a free basis. The Texinfo-related
+programs are not in the public domain; they are copyrighted and there
+are restrictions on their distribution, but these restrictions are
+designed to permit everything that a good cooperating citizen would want
+to do. What is not allowed is to try to prevent others from further
+sharing any version of these programs that they might get from you.
+
+Specifically, we want to make sure that you have the right to give away
+copies of the programs that relate to Texinfo, that you receive source
+code or else can get it if you want it, that you can change these
+programs or use pieces of them in new free programs, and that you know
+you can do these things.
+
+To make sure that everyone has such rights, we have to forbid you to
+deprive anyone else of these rights. For example, if you distribute
+copies of the Texinfo related programs, you must give the recipients all
+the rights that you have. You must make sure that they, too, receive or
+can get the source code. And you must tell them their rights.
+
+Also, for our own protection, we must make certain that everyone finds
+out that there is no warranty for the programs that relate to Texinfo.
+If these programs are modified by someone else and passed on, we want
+their recipients to know that what they have is not what we distributed,
+so that any problems introduced by others will not reflect on our
+reputation.
+
+The precise conditions of the licenses for the programs currently being
+distributed that relate to Texinfo are found in the General Public
+Licenses that accompany them. This manual specifically is covered by
+the GNU Free Documentation License (@pxref{GNU Free Documentation
+License}).
+
+
+@node Overview
+@chapter Overview of Texinfo
+@cindex Overview of Texinfo
+@cindex Texinfo overview
+
+@dfn{Texinfo}@footnote{The first syllable of ``Texinfo'' is pronounced
+like ``speck'', not ``hex''. This odd pronunciation is derived from,
+but is not the same as, the pronunciation of @TeX{}. In the word
+@TeX{}, the @samp{X} is actually the Greek letter ``chi'' rather than
+the English letter ``ex''. Pronounce @TeX{} as if the @samp{X} were the
+last sound in the name `Bach'; but pronounce Texinfo as if the @samp{x}
+were a `k'. Spell ``Texinfo'' with a capital ``T'' and the other
+letters in lower case.} is a documentation system that uses a single
+source file to produce both online information and printed output. This
+means that instead of writing two different documents, one for the
+online information and the other for a printed work, you need write only
+one document. Therefore, when the work is revised, you need revise only
+that one document.
+
+Manuals for most GNU packages are written in Texinfo, and available
+online at @url{http://www.gnu.org/doc}.
+
+@menu
+* Reporting Bugs:: Submitting effective bug reports.
+* Using Texinfo:: Create printed or online output.
+* Output Formats:: Overview of the supported output formats.
+* Info Files:: What is an Info file?
+* Printed Books:: Characteristics of a printed book or manual.
+* Formatting Commands:: @@-commands are used for formatting.
+* Conventions:: General rules for writing a Texinfo file.
+* Comments:: Writing comments and ignored text in general.
+* Minimum:: What a Texinfo file must have.
+* Six Parts:: Usually, a Texinfo file has six parts.
+* Short Sample:: A short sample Texinfo file.
+* History:: Acknowledgements, contributors and genesis.
+@end menu
+
+
+@node Reporting Bugs
+@section Reporting Bugs
+
+@cindex Bugs, reporting
+@cindex Suggestions for Texinfo, making
+@cindex Reporting bugs
+We welcome bug reports and suggestions for any aspect of the Texinfo system,
+programs, documentation, installation, anything. Please email them to
+@email{bug-texinfo@@gnu.org}. You can get the latest version of Texinfo
+from @uref{ftp://ftp.gnu.org/gnu/texinfo/} and its mirrors worldwide.
+
+@cindex Checklist for bug reports
+For bug reports, please include enough information for the maintainers
+to reproduce the problem. Generally speaking, that means:
+
+@itemize @bullet
+@item the version number of Texinfo and the program(s) or manual(s) involved.
+@item hardware and operating system names and versions.
+@item the contents of any input files necessary to reproduce the bug.
+@item a description of the problem and samples of any erroneous output.
+@item any unusual options you gave to @command{configure}.
+@item anything else that you think would be helpful.
+@end itemize
+
+When in doubt whether something is needed or not, include it. It's
+better to include too much than to leave out something important.
+
+@cindex Patches, contributing
+Patches are most welcome; if possible, please make them with
+@samp{@w{diff -c}} (@pxref{Top,, Overview, diff, Comparing and Merging
+Files}) and include @file{ChangeLog} entries (@pxref{Change Log,,,
+emacs, The GNU Emacs Manual}), and follow the existing coding style.
+
+
+@node Using Texinfo
+@section Using Texinfo
+
+@cindex Using Texinfo in general
+@cindex Texinfo, introduction to
+@cindex Introduction to Texinfo
+
+Using Texinfo, you can create a printed document (via the @TeX{}
+typesetting system) the normal features of a book, including chapters,
+sections, cross references, and indices. From the same Texinfo source
+file, you can create an Info file with special features to make
+documentation browsing easy. You can also create from that same
+source file an HTML output file suitable for use with a web browser,
+or an XML file. See the next section (@pxref{Output Formats}) for
+details and the exact commands to generate output from the source.
+
+@TeX{} works with virtually all printers; Info works with virtually all
+computer terminals; the HTML output works with virtually all web
+browsers. Thus Texinfo can be used by almost any computer user.
+
+@cindex Source file format
+A Texinfo source file is a plain ASCII file containing text
+interspersed with @dfn{@@-commands} (words preceded by an @samp{@@})
+that tell the typesetting and formatting programs what to do. You can
+edit a Texinfo file with any text editor, but it is especially
+convenient to use GNU Emacs since that editor has a special mode,
+called Texinfo mode, that provides various Texinfo-related features.
+(@xref{Texinfo Mode}.)
+
+You can use Texinfo to create both online help and printed manuals;
+moreover, Texinfo is freely redistributable. For these reasons, Texinfo
+is the official documentation format of the GNU project. More
+information is available at the @uref{http://www.gnu.org/doc/, GNU
+documentation web page}.
+
+
+@node Output Formats
+@section Output Formats
+@cindex Output formats
+@cindex Back-end output formats
+
+Here is a brief overview of the output formats currently supported by
+Texinfo.
+
+@table @asis
+@item Info
+@cindex Info output
+(Generated via @command{makeinfo}.) This format is essentially a
+plain text transliteration of the Texinfo source. It adds a few
+control characters to separate nodes and provide navigational
+information for menus, cross-references, indices, and so on. See the
+next section (@pxref{Info Files}) for more details on this format.
+The Emacs Info subsystem (@pxref{Top,,Getting Started,info, Info}),
+and the standalone @command{info} program (@pxref{Top
+,, Info Standalone, info-stnd, GNU Info}), among others, can read these
+files. @xref{Creating and Installing Info Files}.
+
+@item Plain text
+@cindex Plain text output
+(Generated via @command{makeinfo --no-headers}.) This is almost the
+same as Info output, except the navigational control characters are
+omitted. Also, standard output is used by default.
+
+@item HTML
+@cindex HTML output
+@cindex W3 consortium
+@cindex Mozilla
+@cindex Lynx
+@cindex Emacs-W3
+(Generated via @command{makeinfo --html}.) This is the Hyper Text
+Markup Language that has become the most commonly used language for
+writing documents on the World Wide Web. Web browsers, such as
+Mozilla, Lynx, and Emacs-W3, can render this language online. There
+are many versions of HTML; @command{makeinfo} tries to use a subset
+of the language that can be interpreted by any common browser. For
+details of the HTML language and much related information, see
+@uref{http://www.w3.org/MarkUp/}. @xref{Generating HTML}.
+
+@item DVI
+@cindex DVI output
+@pindex dvips
+@pindex xdvi
+(Generated via @command{texi2dvi}.) This DeVice Independent binary
+format is output by the @TeX{} typesetting program
+(@uref{http://tug.org}). This is then read by a DVI `driver', which
+writes the actual device-specific commands that can be viewed or
+printed, notably Dvips for translation to PostScript (@pxref{Invoking
+Dvips,,, dvips, Dvips}) and Xdvi for viewing on an X display
+(@uref{http://sourceforge.net/projects/xdvi/}). @xref{Hardcopy}.
+
+Be aware that the Texinfo language is very different from and much
+stricter than @TeX{}'s usual languages, plain @TeX{} and @LaTeX{}.
+For more information on @TeX{} in general, please see the book
+@cite{@TeX{} for the Impatient}, available from
+@uref{http://savannah.gnu.org/projects/teximpatient}.
+
+@item PDF
+@cindex PDF output
+@cindex Beebe, Nelson
+@pindex pdftex
+(Generated via @command{texi2dvi --pdf} or @command{texi2pdf}.) This
+format was developed by Adobe Systems for portable document
+interchange, based on their previous PostScript language. It can
+represent the exact appearance of a document, including fonts and
+graphics, and supporting arbitrary scaling. It is intended to be
+platform-independent and easily viewable, among other design goals;
+@uref{http://tug.org/TUGboat/Articles/tb22-3/tb72beebe-pdf.pdf} has
+some background. Texinfo uses the @command{pdftex} program, a variant
+of @TeX{}, to output PDF; see
+@uref{http://tug.org/applications/pdftex}. @xref{PDF Output}.
+
+@item XML
+@cindex XML output
+@cindex DTD, for Texinfo XML
+@pindex texinfo.dtd
+(Generated via @command{makeinfo --xml}.) XML is a generic syntax
+specification usable for any sort of content (see, for example,
+@uref{http://www.w3.org/XML/}). The @command{makeinfo} XML output,
+unlike all the formats above, interprets very little of the Texinfo
+source. Rather, it merely translates the Texinfo markup commands into
+XML syntax, for processing by further XML tools. The particular
+syntax output is defined in the file @file{texinfo.dtd} included in
+the Texinfo source distribution.
+
+@item Docbook
+@cindex Docbook output
+(Generated via @command{makeinfo --docbook}.) This is an XML-based
+format developed some years ago, primarily for technical
+documentation. It therefore bears some resemblance, in broad
+outlines, to Texinfo. See @uref{http://www.docbook.org}. If you want
+to convert from Docbook @emph{to} Texinfo, please see
+@uref{http://docbook2X.sourceforge.net}.
+
+@end table
+
+@cindex Man page output, not supported
+From time to time, proposals are made to generate traditional Unix man
+pages from Texinfo source. However, because man pages have a very
+strict conventional format, generating a good man page requires a
+completely different source than the typical Texinfo applications of
+writing a good user tutorial and/or a good reference manual. This
+makes generating man pages incompatible with the Texinfo design goal
+of not having to document the same information in different ways for
+different output formats. You might as well just write the man page
+directly.
+
+@pindex help2man
+@cindex O'Dea, Brendan
+Man pages still have their place, and if you wish to support them, you
+may find the program @command{help2man} to be useful; it generates a
+traditional man page from the @samp{--help} output of a program. In
+fact, this is currently used to generate man pages for the programs in
+the Texinfo distribution. It is GNU software written by Brendan
+O'Dea, available from @uref{ftp://ftp.gnu.org/gnu/help2man/}.
+
+@cindex Output formats, supporting more
+@cindex SGML-tools output format
+If you are a programmer and would like to contribute to the GNU project
+by implementing additional output formats for Texinfo, that would be
+excellent. But please do not write a separate translator texi2foo for
+your favorite format foo! That is the hard way to do the job, and makes
+extra work in subsequent maintenance, since the Texinfo language is
+continually being enhanced and updated. Instead, the best approach is
+modify @code{makeinfo} to generate the new format.
+
+
+@node Info Files
+@section Info Files
+@cindex Info files
+
+An Info file is a Texinfo file formatted so that the Info documentation
+reading program can operate on it. (@code{makeinfo}
+and @code{texinfo-format-buffer} are two commands that convert a Texinfo file
+into an Info file.)
+
+Info files are divided into pieces called @dfn{nodes}, each of which
+contains the discussion of one topic. Each node has a name, and
+contains both text for the user to read and pointers to other nodes,
+which are identified by their names. The Info program displays one node
+at a time, and provides commands with which the user can move to other
+related nodes.
+
+@xref{Top,,, info, GNU Info}, for more information about using Info.
+
+Each node of an Info file may have any number of child nodes that
+describe subtopics of the node's topic. The names of child
+nodes are listed in a @dfn{menu} within the parent node; this
+allows you to use certain Info commands to move to one of the child
+nodes. Generally, an Info file is organized like a book. If a node
+is at the logical level of a chapter, its child nodes are at the level
+of sections; likewise, the child nodes of sections are at the level
+of subsections.
+
+All the children of any one parent are linked together in a
+bidirectional chain of `Next' and `Previous' pointers. The `Next'
+pointer provides a link to the next section, and the `Previous' pointer
+provides a link to the previous section. This means that all the nodes
+that are at the level of sections within a chapter are linked together.
+Normally the order in this chain is the same as the order of the
+children in the parent's menu. Each child node records the parent node
+name as its `Up' pointer. The last child has no `Next' pointer, and the
+first child has the parent both as its `Previous' and as its `Up'
+pointer.@footnote{In some documents, the first child has no `Previous'
+pointer. Occasionally, the last child has the node name of the next
+following higher level node as its `Next' pointer.}
+
+The book-like structuring of an Info file into nodes that correspond
+to chapters, sections, and the like is a matter of convention, not a
+requirement. The `Up', `Previous', and `Next' pointers of a node can
+point to any other nodes, and a menu can contain any other nodes.
+Thus, the node structure can be any directed graph. But it is usually
+more comprehensible to follow a structure that corresponds to the
+structure of chapters and sections in a printed book or report.@refill
+
+In addition to menus and to `Next', `Previous', and `Up' pointers, Info
+provides pointers of another kind, called references, that can be
+sprinkled throughout the text. This is usually the best way to
+represent links that do not fit a hierarchical structure.@refill
+
+Usually, you will design a document so that its nodes match the
+structure of chapters and sections in the printed output. But
+occasionally there are times when this is not right for the material
+being discussed. Therefore, Texinfo uses separate commands to specify
+the node structure for the Info file and the section structure for the
+printed output.@refill
+
+Generally, you enter an Info file through a node that by convention is
+named `Top'. This node normally contains just a brief summary of the
+file's purpose, and a large menu through which the rest of the file is
+reached. From this node, you can either traverse the file
+systematically by going from node to node, or you can go to a specific
+node listed in the main menu, or you can search the index menus and then
+go directly to the node that has the information you want. Alternatively,
+with the standalone Info program, you can specify specific menu items on
+the command line (@pxref{Top,,, info, Info}).
+
+If you want to read through an Info file in sequence, as if it were a
+printed manual, you can hit @key{SPC} repeatedly, or you get the whole
+file with the advanced Info command @kbd{g *}. (@inforef{Advanced,
+Advanced Info commands, info}.)@refill
+
+@c !!! dir file may be located in one of many places:
+@c /usr/local/emacs/info mentioned in info.c DEFAULT_INFOPATH
+@c /usr/local/lib/emacs/info mentioned in info.c DEFAULT_INFOPATH
+@c /usr/gnu/info mentioned in info.c DEFAULT_INFOPATH
+@c /usr/local/info
+@c /usr/local/lib/info
+The @file{dir} file in the @file{info} directory serves as the
+departure point for the whole Info system. From it, you can reach the
+`Top' nodes of each of the documents in a complete Info system.@refill
+
+@cindex URI syntax for Info
+If you wish to refer to an Info file in a URI, you can use the
+(unofficial) syntax exemplified in the following. This works with
+Emacs/W3, for example:
+@example
+info:///usr/info/emacs#Dissociated%20Press
+info:emacs#Dissociated%20Press
+info://localhost/usr/info/emacs#Dissociated%20Press
+@end example
+
+The @command{info} program itself does not follow URIs of any kind.
+
+
+@node Printed Books
+@section Printed Books
+@cindex Printed book and manual characteristics
+@cindex Manual characteristics, printed
+@cindex Book characteristics, printed
+@cindex Texinfo printed book characteristics
+@cindex Characteristics, printed books or manuals
+
+@cindex Knuth, Donald
+A Texinfo file can be formatted and typeset as a printed book or manual.
+To do this, you need @TeX{}, a powerful, sophisticated typesetting
+program written by Donald Knuth.@footnote{You can also use the
+@pindex texi2roff@r{, unsupported software}
+@uref{ftp://tug.org/texi2roff.tar.gz, @code{texi2roff}} program if you
+do not have @TeX{}; since Texinfo is designed for use with @TeX{},
+@code{texi2roff} is not described here. @code{texi2roff} is not part of
+the standard GNU distribution and is not maintained or up-to-date with
+all the Texinfo features described in this manual.}
+
+A Texinfo-based book is similar to any other typeset, printed work: it
+can have a title page, copyright page, table of contents, and preface,
+as well as chapters, numbered or unnumbered sections and subsections,
+page headers, cross references, footnotes, and indices.@refill
+
+You can use Texinfo to write a book without ever having the intention
+of converting it into online information. You can use Texinfo for
+writing a printed novel, and even to write a printed memo, although
+this latter application is not recommended since electronic mail is so
+much easier.@refill
+
+@TeX{} is a general purpose typesetting program. Texinfo provides a
+file @file{texinfo.tex} that contains information (definitions or
+@dfn{macros}) that @TeX{} uses when it typesets a Texinfo file.
+(@file{texinfo.tex} tells @TeX{} how to convert the Texinfo @@-commands
+to @TeX{} commands, which @TeX{} can then process to create the typeset
+document.) @file{texinfo.tex} contains the specifications for printing
+a document. You can get the latest version of @file{texinfo.tex} from
+the Texinfo home page, @uref{http://www.gnu.org/software/texinfo/}.
+
+In the United States, documents are most often printed on 8.5 inch by 11
+inch pages (216@dmn{mm} by 280@dmn{mm}); this is the default size. But
+you can also print for 7 inch by 9.25 inch pages (178@dmn{mm} by
+235@dmn{mm}, the @code{@@smallbook} size; or on A4 or A5 size paper
+(@code{@@afourpaper}, @code{@@afivepaper}). (@xref{smallbook, ,
+Printing ``Small'' Books}. Also, see @ref{A4 Paper, ,Printing on A4
+Paper}.)
+
+By changing the parameters in @file{texinfo.tex}, you can change the
+size of the printed document. In addition, you can change the style in
+which the printed document is formatted; for example, you can change the
+sizes and fonts used, the amount of indentation for each paragraph, the
+degree to which words are hyphenated, and the like. By changing the
+specifications, you can make a book look dignified, old and serious, or
+light-hearted, young and cheery.
+
+@TeX{} is freely distributable. It is written in a superset of Pascal
+called WEB and can be compiled either in Pascal or (by using a
+conversion program that comes with the @TeX{} distribution) in C.
+(@xref{TeX Mode, ,@TeX{} Mode, emacs, The GNU Emacs Manual}, for information
+about @TeX{}.)@refill
+
+@TeX{} is very powerful and has a great many features. Because a
+Texinfo file must be able to present information both on a
+character-only terminal in Info form and in a typeset book, the
+formatting commands that Texinfo supports are necessarily limited.
+
+To get a copy of @TeX{}, see
+@ref{Obtaining TeX, , How to Obtain @TeX{}}.
+
+
+@node Formatting Commands
+@section @@-commands
+@cindex @@-commands
+@cindex Formatting commands
+
+In a Texinfo file, the commands that tell @TeX{} how to typeset the
+printed manual and tell @code{makeinfo} and
+@code{texinfo-format-buffer} how to create an Info file are preceded
+by @samp{@@}; they are called @dfn{@@-commands}. For example,
+@code{@@node} is the command to indicate a node and @code{@@chapter}
+is the command to indicate the start of a chapter.@refill
+
+@quotation Note
+Almost all @@ command names are entirely lower case.
+@end quotation
+
+The Texinfo @@-commands are a strictly limited set of constructs. The
+strict limits make it possible for Texinfo files to be understood both
+by @TeX{} and by the code that converts them into Info files. You can
+display Info files on any terminal that displays alphabetic and
+numeric characters. Similarly, you can print the output generated by
+@TeX{} on a wide variety of printers.@refill
+
+Depending on what they do or what arguments@footnote{The word
+@dfn{argument} comes from the way it is used in mathematics and does not
+refer to a dispute between two people; it refers to the information
+presented to the command. According to the @cite{Oxford English
+Dictionary}, the word derives from the Latin for @dfn{to make clear,
+prove}; thus it came to mean `the evidence offered as proof', which is
+to say, `the information offered', which led to its mathematical
+meaning. In its other thread of derivation, the word came to mean `to
+assert in a manner against which others may make counter assertions',
+which led to the meaning of `argument' as a dispute.} they take, you
+need to write @@-commands on lines of their own or as part of
+sentences:
+
+@itemize @bullet
+@item
+Write a command such as @code{@@quotation} at the beginning of a line as
+the only text on the line. (@code{@@quotation} begins an indented
+environment.)
+
+@item
+Write a command such as @code{@@chapter} at the beginning of a line
+followed by the command's arguments, in this case the chapter title, on
+the rest of the line. (@code{@@chapter} creates chapter titles.)@refill
+
+@item
+Write a command such as @code{@@dots@{@}} wherever you wish but usually
+within a sentence. (@code{@@dots@{@}} creates an ellipsis @dots{})@refill
+
+@item
+Write a command such as @code{@@code@{@var{sample-code}@}} wherever you
+wish (but usually within a sentence) with its argument,
+@var{sample-code} in this example, between the braces. (@code{@@code}
+marks text as being code.)@refill
+
+@item
+Write a command such as @code{@@example} on a line of its own; write the
+body-text on following lines; and write the matching @code{@@end}
+command, @code{@@end example} in this case, on a line of its own
+after the body-text. (@code{@@example} @dots{} @code{@@end example}
+indents and typesets body-text as an example.) It's usually ok to
+indent environment commands like this, but in complicated and
+hard-to-define circumstances the extra spaces cause extra space to
+appear in the output, so beware.
+@end itemize
+
+@noindent
+@cindex Braces, when to use
+As a general rule, a command requires braces if it mingles among other
+text; but it does not need braces if it starts a line of its own. The
+non-alphabetic commands, such as @code{@@:}, are exceptions to the rule;
+they do not need braces.@refill
+
+As you gain experience with Texinfo, you will rapidly learn how to
+write the different commands: the different ways to write commands
+actually make it easier to write and read Texinfo files than if all
+commands followed exactly the same syntax. @xref{Command Syntax, ,
+@@-Command Syntax}, for all the details.
+
+
+@node Conventions
+@section General Syntactic Conventions
+@cindex General syntactic conventions
+@cindex Syntactic conventions
+@cindex Conventions, syntactic
+@cindex Characters, basic input
+
+This section describes the general conventions used in all Texinfo documents.
+
+@itemize @bullet
+@item
+@cindex Source files, characters used
+All printable ASCII characters except @samp{@@}, @samp{@{} and
+@samp{@}} can appear in a Texinfo file and stand for themselves.
+@samp{@@} is the escape character which introduces commands, while
+@samp{@{} and @samp{@}} are used to surround arguments to certain
+commands. To put one of these special characters into the document, put
+an @samp{@@} character in front of it, like this: @samp{@@@@},
+@samp{@@@{}, and @samp{@@@}}.
+
+@item
+@cindex Paragraph separator
+@cindex Blank lines, as paragraph separator
+@cindex Newlines, as blank lines
+Separate paragraphs with one or more blank lines. Currently Texinfo
+only recognizes newline characters as end of line, not the CRLF
+sequence used on some systems; so a @dfn{blank line} means exactly two
+consecutive newlines. Sometimes blank lines are useful or convenient
+in other cases as well; you can use the @code{@@noindent} to inhibit
+paragraph indentation if required (@pxref{noindent,,@code{@@noindent}}).
+
+@item
+Texinfo supports the usual quotation marks used in English, and
+quotation marks used in other languages, please see @ref{Inserting
+Quotation Marks}.
+
+@item
+@cindex Multiple dashes in source
+@cindex Dashes in source
+@cindex Hyphens in source, two or three in a row
+@cindex Em dash, producing
+@cindex En dash, producing
+Use three hyphens in a row, @samp{---}, to produce a long dash---like
+this (called an @dfn{em dash}), used for punctuation in sentences.
+Use two hyphens, @samp{--}, to produce a medium dash (called an
+@dfn{en dash}), used primarily for numeric ranges, as in ``June
+25--26''. Use a single hyphen, @samp{-}, to produce a standard hyphen
+used in compound words. For display on the screen, Info reduces three
+hyphens to two and two hyphens to one (not transitively!). Of course,
+any number of hyphens in the source remain as they are in literal
+contexts, such as @code{@@code} and @code{@@example}.
+
+@item
+@cindex Tabs; don't use!
+@strong{Caution:} Last, do not use tab characters in a Texinfo file
+(except in verbatim modes)! @TeX{} uses variable-width fonts, which
+means that it is impractical at best to define a tab to work in all
+circumstances. Consequently, @TeX{} treats tabs like single spaces,
+and that is not what they look like in the source. Furthermore,
+@code{makeinfo} does nothing special with tabs, and thus a tab
+character in your input file will usually appear differently in the
+output.
+
+@noindent
+To avoid this problem, Texinfo mode in GNU Emacs inserts
+multiple spaces when you press the @key{TAB} key. Also, you can run
+@code{untabify} in Emacs to convert tabs in a region to multiple
+spaces, or use the @code{unexpand} command from the shell.
+
+@end itemize
+
+
+@node Comments
+@section Comments
+
+@cindex Comments
+@findex comment
+@findex c @r{(comment)}
+
+You can write comments in a Texinfo file that will not appear in
+either the Info file or the printed manual by using the
+@code{@@comment} command (which may be abbreviated to @code{@@c}).
+Such comments are for the person who revises the Texinfo file. All the
+text on a line that follows either @code{@@comment} or @code{@@c} is a
+comment; the rest of the line does not appear in either the Info file
+or the printed manual.
+
+Often, you can write the @code{@@comment} or @code{@@c} in the middle of
+a line, and only the text that follows after the @code{@@comment} or
+@code{@@c} command does not appear; but some commands, such as
+@code{@@settitle} and @code{@@setfilename}, work on a whole line. You
+cannot use @code{@@comment} or @code{@@c} in a line beginning with such
+a command.
+
+@cindex Ignored text
+@cindex Unprocessed text
+@findex ignore
+You can write long stretches of text that will not appear in either
+the Info file or the printed manual by using the @code{@@ignore} and
+@code{@@end ignore} commands. Write each of these commands on a line
+of its own, starting each command at the beginning of the line. Text
+between these two commands does not appear in the processed output.
+You can use @code{@@ignore} and @code{@@end ignore} for writing
+comments.
+
+Text enclosed by @code{@@ignore} or by failing @code{@@ifset} or
+@code{@@ifclear} conditions is ignored in the sense that it will not
+contribute to the formatted output. However, @TeX{} and makeinfo must
+still parse the ignored text, in order to understand when to @emph{stop}
+ignoring text from the source file; that means that you may still get
+error messages if you have invalid Texinfo commands within ignored text.
+
+
+@node Minimum
+@section What a Texinfo File Must Have
+@cindex Minimal Texinfo file (requirements)
+@cindex Must have in Texinfo file
+@cindex Required in Texinfo file
+@cindex Texinfo file minimum
+
+By convention, the name of a Texinfo file ends with (in order of
+preference) one of the extensions @file{.texinfo}, @file{.texi},
+@file{.txi}, or @file{.tex}. The longer extensions are preferred since
+they describe more clearly to a human reader the nature of the file.
+The shorter extensions are for operating systems that cannot handle long
+file names.
+
+In order to be made into a printed manual and an Info file, a Texinfo
+file @strong{must} begin with lines like this:
+
+@example
+@group
+\input texinfo
+@@setfilename @var{info-file-name}
+@@settitle @var{name-of-manual}
+@end group
+@end example
+
+@noindent
+The contents of the file follow this beginning, and then you
+@strong{must} end a Texinfo file with a line like this:
+
+@example
+@@bye
+@end example
+
+@findex \input @r{(raw @TeX{} startup)}
+@noindent
+Here's an explanation:
+
+@itemize @bullet
+@item
+The @samp{\input texinfo} line tells @TeX{} to use the
+@file{texinfo.tex} file, which tells @TeX{} how to translate the Texinfo
+@@-commands into @TeX{} typesetting commands. (Note the use of the
+backslash, @samp{\}; this is correct for @TeX{}.)
+
+@item
+The @code{@@setfilename} line provides a name for the Info file and
+tells @TeX{} to open auxiliary files. @strong{All text before
+@code{@@setfilename} is ignored!}
+
+@item
+The @code{@@settitle} line specifies a title for the page headers (or
+footers) of the printed manual, and the default document description for
+the @samp{<head>} in HTML format. Strictly speaking, @code{@@settitle}
+is optional---if you don't mind your document being titled `Untitled'.
+
+@item
+The @code{@@bye} line at the end of the file on a line of its own tells
+the formatters that the file is ended and to stop formatting.
+
+@end itemize
+
+Typically, you will not use quite such a spare format, but will include
+mode setting and start-of-header and end-of-header lines at the
+beginning of a Texinfo file, like this:
+
+@example
+@group
+\input texinfo @@c -*-texinfo-*-
+@@c %**start of header
+@@setfilename @var{info-file-name}
+@@settitle @var{name-of-manual}
+@@c %**end of header
+@end group
+@end example
+
+@noindent
+In the first line, @samp{-*-texinfo-*-} causes Emacs to switch into
+Texinfo mode when you edit the file.
+
+The @code{@@c} lines which surround the @code{@@setfilename} and
+@code{@@settitle} lines are optional, but you need them in order to
+run @TeX{} or Info on just part of the file. (@xref{Start of Header}.)
+
+Furthermore, you will usually provide a Texinfo file with a title page,
+indices, and the like, all of which are explained in this manual. But
+the minimum, which can be useful for short documents, is just the three
+lines at the beginning and the one line at the end.
+
+
+@node Six Parts
+@section Six Parts of a Texinfo File
+
+Generally, a Texinfo file contains more than the minimal beginning and
+end described in the previous section---it usually contains the six
+parts listed below. These are described fully in the following sections.
+
+@table @r
+@item 1. Header
+The @dfn{Header} names the file, tells @TeX{} which definitions file to
+use, and other such housekeeping tasks.
+
+@item 2. Summary and Copyright
+The @dfn{Summary and Copyright} segment describes the document and
+contains the copyright notice and copying permissions. This is done
+with the @code{@@copying} command.
+
+@item 3. Title and Copyright
+The @dfn{Title and Copyright} segment contains the title and copyright
+pages for the printed manual. The segment must be enclosed between
+@code{@@titlepage} and @code{@@end titlepage} commands. The title and
+copyright page appear only in the printed manual.
+
+@item 4. `Top' Node and Master Menu
+The `Top' node starts off the online output; it does not appear in the
+printed manual. We recommend including the copying permissions here as
+well as the segments above. And it contains at least a top-level menu
+listing the chapters, and possibly a @dfn{Master Menu} listing all the
+nodes in the entire document.
+
+@item 5. Body
+The @dfn{Body} of the document is typically structured like a
+traditional book or encyclopedia, but it may be free form.
+
+@item 6. End
+The @dfn{End} segment may contain commands for printing indices, and
+closes with the @code{@@bye} command on a line of its own.
+@end table
+
+
+@node Short Sample
+@section A Short Sample Texinfo File
+@cindex Sample Texinfo file, with comments
+
+Here is a very short but complete Texinfo file, in the six conventional
+parts enumerated in the previous section, so you can see how Texinfo
+source appears in practice. The first three parts of the file, from
+@samp{\input texinfo} through to @samp{@@end titlepage}, look more
+intimidating than they are: most of the material is standard
+boilerplate; when writing a manual, you simply change the names as
+appropriate.
+
+@xref{Beginning a File}, for full documentation on the commands listed
+here. @xref{GNU Sample Texts}, for the full texts to be used in GNU
+manuals.
+
+In the following, the sample text is @emph{indented}; comments on it are
+not. The complete file, without interspersed comments, is shown in
+@ref{Short Sample Texinfo File}.
+
+@subheading Part 1: Header
+
+@noindent
+The header does not appear in either the Info file or the
+printed output. It sets various parameters, including the
+name of the Info file and the title used in the header.
+
+@example
+@group
+\input texinfo @@c -*-texinfo-*-
+@@c %**start of header
+@@setfilename sample.info
+@@settitle Sample Manual 1.0
+@@c %**end of header
+@end group
+@end example
+
+@subheading Part 2: Summary Description and Copyright
+
+@noindent
+A real manual includes more text here, according to the license under
+which it is distributed. @xref{GNU Sample Texts}.
+
+@example
+@group
+@@copying
+This is a short example of a complete Texinfo file, version 1.0.
+
+Copyright @@copyright@{@} 2005 Free Software Foundation, Inc.
+@@end copying
+@end group
+@end example
+
+@subheading Part 3: Titlepage, Contents, Copyright
+
+@noindent
+The titlepage segment does not appear in the online output, only in the
+printed manual. We use the @code{@@insertcopying} command to
+include the permission text from the previous section, instead of
+writing it out again; it is output on the back of the title page. The
+@code{@@contents} command generates a table of contents.
+
+@example
+@group
+@@titlepage
+@@title Sample Title
+@end group
+
+@group
+@@c The following two commands start the copyright page.
+@@page
+@@vskip 0pt plus 1filll
+@@insertcopying
+@@end titlepage
+@end group
+
+@@c Output the table of contents at the beginning.
+@@contents
+@end example
+
+@subheading Part 4: `Top' Node and Master Menu
+
+@noindent
+The `Top' node contains the master menu for the Info file. Since the
+printed manual uses a table of contents rather than a menu, it
+excludes the `Top' node. We repeat the short description from the
+beginning of the @samp{@@copying} text, but there's no need to repeat
+the copyright information, so we don't use @samp{@@insertcopying} here.
+The @samp{@@top} command itself helps @command{makeinfo} determine the
+relationships between nodes.
+
+@example
+@@ifnottex
+@@node Top
+@@top Short Sample
+
+This is a short sample Texinfo file.
+@@end ifnottex
+
+@group
+@@menu
+* First Chapter:: The first chapter is the
+ only chapter in this sample.
+* Index:: Complete index.
+@@end menu
+@end group
+@end example
+
+
+@subheading Part 5: The Body of the Document
+
+@noindent
+The body segment contains all the text of the document, but not the
+indices or table of contents. This example illustrates a node and a
+chapter containing an enumerated list.
+
+@example
+@group
+@@node First Chapter
+@@chapter First Chapter
+
+@@cindex chapter, first
+@end group
+
+@group
+This is the first chapter.
+@@cindex index entry, another
+@end group
+
+@group
+Here is a numbered list.
+
+@@enumerate
+@@item
+This is the first item.
+
+@@item
+This is the second item.
+@@end enumerate
+@end group
+@end example
+
+
+@subheading Part 6: The End of the Document
+
+@noindent
+The end segment contains commands for generating an index in a node and
+unnumbered chapter of its own, and the @code{@@bye} command that marks
+the end of the document.
+
+@example
+@group
+@@node Index
+@@unnumbered Index
+@end group
+
+@group
+@@printindex cp
+
+@@bye
+@end group
+@end example
+
+
+@subheading Some Results
+
+Here is what the contents of the first chapter of the sample look like:
+
+@sp 1
+@need 700
+@quotation
+This is the first chapter.
+
+Here is a numbered list.
+
+@enumerate
+@item
+This is the first item.
+
+@item
+This is the second item.
+@end enumerate
+@end quotation
+
+
+@node History
+@section History
+
+@cindex Stallman, Richard M.
+@cindex Chassell, Robert J.
+@cindex Fox, Brian
+@cindex Berry, Karl
+Richard M. Stallman invented the Texinfo format, wrote the initial
+processors, and created Edition 1.0 of this manual. Robert@tie{}J.
+Chassell greatly revised and extended the manual, starting with
+Edition 1.1. Brian Fox was responsible for the standalone Texinfo
+distribution until version 3.8, and wrote the standalone
+@command{makeinfo} and @command{info} programs. Karl Berry has
+continued maintenance since Texinfo 3.8 (manual edition 2.22).
+
+@cindex Pinard, Fran@,{c}ois
+@cindex Zuhn, David D.
+@cindex Weisshaus, Melissa
+@cindex Zaretskii, Eli
+@cindex Schwab, Andreas
+@cindex Weinberg, Zack
+Our thanks go out to all who helped improve this work, particularly the
+indefatigable Eli Zaretskii and Andreas Schwab, who have provided
+patches beyond counting. Fran@,{c}ois Pinard and David@tie{}D. Zuhn,
+tirelessly recorded and reported mistakes and obscurities. Zack
+Weinberg did the impossible by implementing the macro syntax in
+@file{texinfo.tex}. Special thanks go to Melissa Weisshaus for her
+frequent reviews of nearly similar editions. Dozens of others have
+contributed patches and suggestions, they are gratefully acknowledged in
+the @file{ChangeLog} file. Our mistakes are our own.
+
+@cindex Scribe
+@cindex Reid, Brian
+@cindex History of Texinfo
+@cindex Texinfo history
+A bit of history: in the 1970's at CMU, Brian Reid developed a program
+and format named Scribe to mark up documents for printing. It used the
+@code{@@} character to introduce commands, as Texinfo does. Much more
+consequentially, it strove to describe document contents rather than
+formatting, an idea wholeheartedly adopted by Texinfo.
+
+@cindex Bolio
+@cindex Bo@TeX{}
+Meanwhile, people at MIT developed another, not too dissimilar format
+called Bolio. This then was converted to using @TeX{} as its typesetting
+language: Bo@TeX{}. The earliest Bo@TeX{} version seems to have been
+0.02 on October 31, 1984.
+
+Bo@TeX{} could only be used as a markup language for documents to be
+printed, not for online documents. Richard Stallman (RMS) worked on
+both Bolio and Bo@TeX{}. He also developed a nifty on-line help format
+called Info, and then combined Bo@TeX{} and Info to create Texinfo, a
+mark up language for text that is intended to be read both online and
+as printed hard copy.
+
+
+@node Texinfo Mode
+@chapter Using Texinfo Mode
+@cindex Texinfo mode
+@cindex Mode, using Texinfo
+@cindex GNU Emacs
+@cindex Emacs
+
+You may edit a Texinfo file with any text editor you choose. A Texinfo
+file is no different from any other ASCII file. However, GNU Emacs
+comes with a special mode, called Texinfo mode, that provides Emacs
+commands and tools to help ease your work.
+
+This chapter describes features of GNU Emacs' Texinfo mode but not any
+features of the Texinfo formatting language. So if you are reading this
+manual straight through from the beginning, you may want to skim through
+this chapter briefly and come back to it after reading succeeding
+chapters which describe the Texinfo formatting language in detail.
+
+@menu
+* Texinfo Mode Overview:: How Texinfo mode can help you.
+* Emacs Editing:: Texinfo mode adds to GNU Emacs' general
+ purpose editing features.
+* Inserting:: How to insert frequently used @@-commands.
+* Showing the Structure:: How to show the structure of a file.
+* Updating Nodes and Menus:: How to update or create new nodes and menus.
+* Info Formatting:: How to format for Info.
+* Printing:: How to format and print part or all of a file.
+* Texinfo Mode Summary:: Summary of all the Texinfo mode commands.
+@end menu
+
+@node Texinfo Mode Overview
+@section Texinfo Mode Overview
+
+Texinfo mode provides special features for working with Texinfo files.
+You can:
+
+@itemize @bullet
+@item
+Insert frequently used @@-commands. @refill
+
+@item
+Automatically create @code{@@node} lines.
+
+@item
+Show the structure of a Texinfo source file.@refill
+
+@item
+Automatically create or update the `Next',
+`Previous', and `Up' pointers of a node.
+
+@item
+Automatically create or update menus.@refill
+
+@item
+Automatically create a master menu.@refill
+
+@item
+Format a part or all of a file for Info.@refill
+
+@item
+Typeset and print part or all of a file.@refill
+@end itemize
+
+Perhaps the two most helpful features are those for inserting frequently
+used @@-commands and for creating node pointers and menus.@refill
+
+@node Emacs Editing
+@section The Usual GNU Emacs Editing Commands
+
+In most cases, the usual Text mode commands work the same in Texinfo
+mode as they do in Text mode. Texinfo mode adds new editing commands
+and tools to GNU Emacs' general purpose editing features. The major
+difference concerns filling. In Texinfo mode, the paragraph
+separation variable and syntax table are redefined so that Texinfo
+commands that should be on lines of their own are not inadvertently
+included in paragraphs. Thus, the @kbd{M-q} (@code{fill-paragraph})
+command will refill a paragraph but not mix an indexing command on a
+line adjacent to it into the paragraph.@refill
+
+In addition, Texinfo mode sets the @code{page-delimiter} variable to
+the value of @code{texinfo-chapter-level-regexp}; by default, this is
+a regular expression matching the commands for chapters and their
+equivalents, such as appendices. With this value for the page
+delimiter, you can jump from chapter title to chapter title with the
+@kbd{C-x ]} (@code{forward-page}) and @kbd{C-x [}
+(@code{backward-page}) commands and narrow to a chapter with the
+@kbd{C-x n p} (@code{narrow-to-page}) command. (@xref{Pages, , ,emacs,
+The GNU Emacs Manual}, for details about the page commands.)@refill
+
+You may name a Texinfo file however you wish, but the convention is to
+end a Texinfo file name with one of the extensions
+@file{.texinfo}, @file{.texi}, @file{.txi}, or @file{.tex}. A longer
+extension is preferred, since it is explicit, but a shorter extension
+may be necessary for operating systems that limit the length of file
+names. GNU Emacs automatically enters Texinfo mode when you visit a
+file with a @file{.texinfo}, @file{.texi} or @file{.txi}
+extension. Also, Emacs switches to Texinfo mode
+when you visit a
+file that has @samp{-*-texinfo-*-} in its first line. If ever you are
+in another mode and wish to switch to Texinfo mode, type @code{M-x
+texinfo-mode}.@refill
+
+Like all other Emacs features, you can customize or enhance Texinfo
+mode as you wish. In particular, the keybindings are very easy to
+change. The keybindings described here are the default or standard
+ones.@refill
+
+@node Inserting
+@comment node-name, next, previous, up
+@section Inserting Frequently Used Commands
+@cindex Inserting frequently used commands
+@cindex Frequently used commands, inserting
+@cindex Commands, inserting them
+
+Texinfo mode provides commands to insert various frequently used
+@@-commands into the buffer. You can use these commands to save
+keystrokes.@refill
+
+The insert commands are invoked by typing @kbd{C-c} twice and then the
+first letter of the @@-command:@refill
+
+@table @kbd
+@item C-c C-c c
+@itemx M-x texinfo-insert-@@code
+@findex texinfo-insert-@@code
+Insert @code{@@code@{@}} and put the
+cursor between the braces.@refill
+
+@item C-c C-c d
+@itemx M-x texinfo-insert-@@dfn
+@findex texinfo-insert-@@dfn
+Insert @code{@@dfn@{@}} and put the
+cursor between the braces.@refill
+
+@item C-c C-c e
+@itemx M-x texinfo-insert-@@end
+@findex texinfo-insert-@@end
+Insert @code{@@end} and attempt to insert the correct following word,
+such as @samp{example} or @samp{table}. (This command does not handle
+nested lists correctly, but inserts the word appropriate to the
+immediately preceding list.)@refill
+
+@item C-c C-c i
+@itemx M-x texinfo-insert-@@item
+@findex texinfo-insert-@@item
+Insert @code{@@item} and put the
+cursor at the beginning of the next line.@refill
+
+@item C-c C-c k
+@itemx M-x texinfo-insert-@@kbd
+@findex texinfo-insert-@@kbd
+Insert @code{@@kbd@{@}} and put the
+cursor between the braces.@refill
+
+@item C-c C-c n
+@itemx M-x texinfo-insert-@@node
+@findex texinfo-insert-@@node
+Insert @code{@@node} and a comment line
+listing the sequence for the `Next',
+`Previous', and `Up' nodes.
+Leave point after the @code{@@node}.@refill
+
+@item C-c C-c o
+@itemx M-x texinfo-insert-@@noindent
+@findex texinfo-insert-@@noindent
+Insert @code{@@noindent} and put the
+cursor at the beginning of the next line.@refill
+
+@item C-c C-c s
+@itemx M-x texinfo-insert-@@samp
+@findex texinfo-insert-@@samp
+Insert @code{@@samp@{@}} and put the
+cursor between the braces.@refill
+
+@item C-c C-c t
+@itemx M-x texinfo-insert-@@table
+@findex texinfo-insert-@@table
+Insert @code{@@table} followed by a @key{SPC}
+and leave the cursor after the @key{SPC}.@refill
+
+@item C-c C-c v
+@itemx M-x texinfo-insert-@@var
+@findex texinfo-insert-@@var
+Insert @code{@@var@{@}} and put the
+cursor between the braces.@refill
+
+@item C-c C-c x
+@itemx M-x texinfo-insert-@@example
+@findex texinfo-insert-@@example
+Insert @code{@@example} and put the
+cursor at the beginning of the next line.@refill
+
+@c M-@{ was the binding for texinfo-insert-braces;
+@c in Emacs 19, backward-paragraph will take this binding.
+@item C-c C-c @{
+@itemx M-x texinfo-insert-braces
+@findex texinfo-insert-braces
+Insert @code{@{@}} and put the cursor between the braces.@refill
+
+@item C-c @}
+@itemx C-c ]
+@itemx M-x up-list
+@findex up-list
+Move from between a pair of braces forward past the closing brace.
+Typing @kbd{C-c ]} is easier than typing @kbd{C-c @}}, which
+is, however, more mnemonic; hence the two keybindings. (Also, you can
+move out from between braces by typing @kbd{C-f}.)@refill
+@end table
+
+To put a command such as @w{@code{@@code@{@dots{}@}}} around an
+@emph{existing} word, position the cursor in front of the word and type
+@kbd{C-u 1 C-c C-c c}. This makes it easy to edit existing plain text.
+The value of the prefix argument tells Emacs how many words following
+point to include between braces---@samp{1} for one word, @samp{2} for
+two words, and so on. Use a negative argument to enclose the previous
+word or words. If you do not specify a prefix argument, Emacs inserts
+the @@-command string and positions the cursor between the braces. This
+feature works only for those @@-commands that operate on a word or words
+within one line, such as @code{@@kbd} and @code{@@var}.@refill
+
+This set of insert commands was created after analyzing the frequency
+with which different @@-commands are used in the @cite{GNU Emacs
+Manual} and the @cite{GDB Manual}. If you wish to add your own insert
+commands, you can bind a keyboard macro to a key, use abbreviations,
+or extend the code in @file{texinfo.el}.@refill
+
+@findex texinfo-start-menu-description
+@cindex Menu description, start
+@cindex Description for menu, start
+@kbd{C-c C-c C-d} (@code{texinfo-start-menu-description}) is an insert
+command that works differently from the other insert commands. It
+inserts a node's section or chapter title in the space for the
+description in a menu entry line. (A menu entry has three parts, the
+entry name, the node name, and the description. Only the node name is
+required, but a description helps explain what the node is about.
+@xref{Menu Parts, , The Parts of a Menu}.)@refill
+
+To use @code{texinfo-start-menu-description}, position point in a menu
+entry line and type @kbd{C-c C-c C-d}. The command looks for and copies
+the title that goes with the node name, and inserts the title as a
+description; it positions point at beginning of the inserted text so you
+can edit it. The function does not insert the title if the menu entry
+line already contains a description.@refill
+
+This command is only an aid to writing descriptions; it does not do the
+whole job. You must edit the inserted text since a title tends to use
+the same words as a node name but a useful description uses different
+words.@refill
+
+@node Showing the Structure
+@comment node-name, next, previous, up
+@section Showing the Section Structure of a File
+@cindex Showing the section structure of a file
+@cindex Section structure of a file, showing it
+@cindex Structure of a file, showing it
+@cindex Outline of file structure, showing it
+@cindex Contents-like outline of file structure
+@cindex File section structure, showing it
+@cindex Texinfo file section structure, showing it
+
+You can show the section structure of a Texinfo file by using the
+@kbd{C-c C-s} command (@code{texinfo-show-structure}). This command
+shows the section structure of a Texinfo file by listing the lines
+that begin with the @@-commands for @code{@@chapter},
+@code{@@section}, and the like. It constructs what amounts
+to a table of contents. These lines are displayed in another buffer
+called the @samp{*Occur*} buffer. In that buffer, you can position
+the cursor over one of the lines and use the @kbd{C-c C-c} command
+(@code{occur-mode-goto-occurrence}), to jump to the corresponding spot
+in the Texinfo file.@refill
+
+@table @kbd
+@item C-c C-s
+@itemx M-x texinfo-show-structure
+@findex texinfo-show-structure
+Show the @code{@@chapter}, @code{@@section}, and such lines of a
+Texinfo file.@refill
+
+@item C-c C-c
+@itemx M-x occur-mode-goto-occurrence
+@findex occur-mode-goto-occurrence
+Go to the line in the Texinfo file corresponding to the line under the
+cursor in the @file{*Occur*} buffer.@refill
+@end table
+
+If you call @code{texinfo-show-structure} with a prefix argument by
+typing @w{@kbd{C-u C-c C-s}}, it will list not only those lines with the
+@@-commands for @code{@@chapter}, @code{@@section}, and the like, but
+also the @code{@@node} lines. You can use @code{texinfo-show-structure}
+with a prefix argument to check whether the `Next', `Previous', and `Up'
+pointers of an @code{@@node} line are correct.
+
+Often, when you are working on a manual, you will be interested only
+in the structure of the current chapter. In this case, you can mark
+off the region of the buffer that you are interested in by using the
+@kbd{C-x n n} (@code{narrow-to-region}) command and
+@code{texinfo-show-structure} will work on only that region. To see
+the whole buffer again, use @w{@kbd{C-x n w}} (@code{widen}).
+(@xref{Narrowing, , , emacs, The GNU Emacs Manual}, for more
+information about the narrowing commands.)@refill
+
+@vindex page-delimiter
+@cindex Page delimiter in Texinfo mode
+In addition to providing the @code{texinfo-show-structure} command,
+Texinfo mode sets the value of the page delimiter variable to match
+the chapter-level @@-commands. This enables you to use the @kbd{C-x
+]} (@code{forward-page}) and @kbd{C-x [} (@code{backward-page})
+commands to move forward and backward by chapter, and to use the
+@kbd{C-x n p} (@code{narrow-to-page}) command to narrow to a chapter.
+@xref{Pages, , , emacs, The GNU Emacs Manual}, for more information
+about the page commands.@refill
+
+@node Updating Nodes and Menus
+@comment node-name, next, previous, up
+@section Updating Nodes and Menus
+@cindex Updating nodes and menus
+@cindex Create nodes, menus automatically
+@cindex Insert nodes, menus automatically
+@cindex Automatically insert nodes, menus
+
+Texinfo mode provides commands for automatically creating or updating
+menus and node pointers. The commands are called ``update'' commands
+because their most frequent use is for updating a Texinfo file after you
+have worked on it; but you can use them to insert the `Next',
+`Previous', and `Up' pointers into an @code{@@node} line that has none
+and to create menus in a file that has none.
+
+If you do not use the updating commands, you need to write menus and
+node pointers by hand, which is a tedious task.@refill
+
+@menu
+* Updating Commands:: Five major updating commands.
+* Updating Requirements:: How to structure a Texinfo file for
+ using the updating command.
+* Other Updating Commands:: How to indent descriptions, insert
+ missing nodes lines, and update
+ nodes in sequence.
+@end menu
+
+@node Updating Commands
+@subsection The Updating Commands
+
+You can use the updating commands to:@refill
+
+@itemize @bullet
+@item
+insert or update the `Next', `Previous', and `Up' pointers of a
+node,@refill
+
+@item
+insert or update the menu for a section, and@refill
+
+@item
+create a master menu for a Texinfo source file.@refill
+@end itemize
+
+You can also use the commands to update all the nodes and menus in a
+region or in a whole Texinfo file.@refill
+
+The updating commands work only with conventional Texinfo files, which
+are structured hierarchically like books. In such files, a structuring
+command line must follow closely after each @code{@@node} line, except
+for the `Top' @code{@@node} line. (A @dfn{structuring command line} is
+a line beginning with @code{@@chapter}, @code{@@section}, or other
+similar command.)
+
+You can write the structuring command line on the line that follows
+immediately after an @code{@@node} line or else on the line that
+follows after a single @code{@@comment} line or a single
+@code{@@ifinfo} line. You cannot interpose more than one line between
+the @code{@@node} line and the structuring command line; and you may
+interpose only an @code{@@comment} line or an @code{@@ifinfo} line.
+
+Commands which work on a whole buffer require that the `Top' node be
+followed by a node with an @code{@@chapter} or equivalent-level command.
+The menu updating commands will not create a main or master menu for a
+Texinfo file that has only @code{@@chapter}-level nodes! The menu
+updating commands only create menus @emph{within} nodes for lower level
+nodes. To create a menu of chapters, you must provide a `Top'
+node.
+
+The menu updating commands remove menu entries that refer to other Info
+files since they do not refer to nodes within the current buffer. This
+is a deficiency. Rather than use menu entries, you can use cross
+references to refer to other Info files. None of the updating commands
+affect cross references.@refill
+
+Texinfo mode has five updating commands that are used most often: two
+are for updating the node pointers or menu of a single node (or a
+region); two are for updating every node pointer and menu in a file;
+and one, the @code{texinfo-master-menu} command, is for creating a
+master menu for a complete file, and optionally, for updating every
+node and menu in the whole Texinfo file.@refill
+
+The @code{texinfo-master-menu} command is the primary command:@refill
+
+@table @kbd
+@item C-c C-u m
+@itemx M-x texinfo-master-menu
+@findex texinfo-master-menu
+Create or update a master menu that includes all the other menus
+(incorporating the descriptions from pre-existing menus, if
+any).@refill
+
+With an argument (prefix argument, @kbd{C-u,} if interactive), first create or
+update all the nodes and all the regular menus in the buffer before
+constructing the master menu. (@xref{The Top Node, , The Top Node and
+Master Menu}, for more about a master menu.)@refill
+
+For @code{texinfo-master-menu} to work, the Texinfo file must have a
+`Top' node and at least one subsequent node.@refill
+
+After extensively editing a Texinfo file, you can type the following:
+
+@example
+C-u M-x texinfo-master-menu
+@exdent or
+C-u C-c C-u m
+@end example
+
+@noindent
+This updates all the nodes and menus completely and all at once.@refill
+@end table
+
+The other major updating commands do smaller jobs and are designed for
+the person who updates nodes and menus as he or she writes a Texinfo
+file.@refill
+
+@need 1000
+The commands are:@refill
+
+@table @kbd
+@item C-c C-u C-n
+@itemx M-x texinfo-update-node
+@findex texinfo-update-node
+Insert the `Next', `Previous', and `Up' pointers for the node that point is
+within (i.e., for the @code{@@node} line preceding point). If the
+@code{@@node} line has pre-existing `Next', `Previous', or `Up'
+pointers in it, the old pointers are removed and new ones inserted.
+With an argument (prefix argument, @kbd{C-u}, if interactive), this command
+updates all @code{@@node} lines in the region (which is the text
+between point and mark).@refill
+
+@item C-c C-u C-m
+@itemx M-x texinfo-make-menu
+@findex texinfo-make-menu
+Create or update the menu in the node that point is within.
+With an argument (@kbd{C-u} as prefix argument, if
+interactive), the command makes or updates menus for the
+nodes which are either within or a part of the
+region.@refill
+
+Whenever @code{texinfo-make-menu} updates an existing menu, the
+descriptions from that menu are incorporated into the new menu. This
+is done by copying descriptions from the existing menu to the entries
+in the new menu that have the same node names. If the node names are
+different, the descriptions are not copied to the new menu.@refill
+
+@item C-c C-u C-e
+@itemx M-x texinfo-every-node-update
+@findex texinfo-every-node-update
+Insert or update the `Next', `Previous', and `Up' pointers for every
+node in the buffer.@refill
+
+@item C-c C-u C-a
+@itemx M-x texinfo-all-menus-update
+@findex texinfo-all-menus-update
+Create or update all the menus in the buffer. With an argument
+(@kbd{C-u} as prefix argument, if interactive), first insert
+or update all the node
+pointers before working on the menus.@refill
+
+If a master menu exists, the @code{texinfo-all-menus-update} command
+updates it; but the command does not create a new master menu if none
+already exists. (Use the @code{texinfo-master-menu} command for
+that.)@refill
+
+When working on a document that does not merit a master menu, you can
+type the following:
+
+@example
+C-u C-c C-u C-a
+@exdent or
+C-u M-x texinfo-all-menus-update
+@end example
+
+@noindent
+This updates all the nodes and menus.@refill
+@end table
+
+The @code{texinfo-column-for-description} variable specifies the
+column to which menu descriptions are indented. By default, the value
+is 32 although it can be useful to reduce it to as low as 24. You
+can set the variable via customization (@pxref{Changing an Option,,,
+emacs, The GNU Emacs Manual}) or with the @kbd{M-x set-variable}
+command (@pxref{Examining, , Examining and Setting Variables, emacs,
+The GNU Emacs Manual}).
+
+Also, the @code{texinfo-indent-menu-description} command may be used to
+indent existing menu descriptions to a specified column. Finally, if
+you wish, you can use the @code{texinfo-insert-node-lines} command to
+insert missing @code{@@node} lines into a file. (@xref{Other Updating
+Commands}, for more information.)@refill
+
+@node Updating Requirements
+@subsection Updating Requirements
+@cindex Updating requirements
+@cindex Requirements for updating commands
+
+To use the updating commands, you must organize the Texinfo file
+hierarchically with chapters, sections, subsections, and the like.
+When you construct the hierarchy of the manual, do not `jump down'
+more than one level at a time: you can follow the `Top' node with a
+chapter, but not with a section; you can follow a chapter with a
+section, but not with a subsection. However, you may `jump up' any
+number of levels at one time---for example, from a subsection to a
+chapter.@refill
+
+Each @code{@@node} line, with the exception of the line for the `Top'
+node, must be followed by a line with a structuring command such as
+@code{@@chapter}, @code{@@section}, or
+@code{@@unnumberedsubsec}.@refill
+
+Each @code{@@node} line/structuring-command line combination
+must look either like this:
+
+@example
+@group
+@@node Comments, Minimum, Conventions, Overview
+@@comment node-name, next, previous, up
+@@section Comments
+@end group
+@end example
+
+or like this (without the @code{@@comment} line):
+
+@example
+@group
+@@node Comments, Minimum, Conventions, Overview
+@@section Comments
+@end group
+@end example
+
+or like this (without the explicit node pointers):
+
+@example
+@group
+@@node Comments
+@@section Comments
+@end group
+@end example
+
+@noindent
+In this example, `Comments' is the name of both the node and the
+section. The next node is called `Minimum' and the previous node is
+called `Conventions'. The `Comments' section is within the `Overview'
+node, which is specified by the `Up' pointer. (Instead of an
+@code{@@comment} line, you may also write an @code{@@ifinfo} line.)
+
+If a file has a `Top' node, it must be called @samp{top} or @samp{Top}
+and be the first node in the file.
+
+The menu updating commands create a menu of sections within a chapter,
+a menu of subsections within a section, and so on. This means that
+you must have a `Top' node if you want a menu of chapters.@refill
+
+Incidentally, the @code{makeinfo} command will create an Info file for a
+hierarchically organized Texinfo file that lacks `Next', `Previous' and
+`Up' pointers. Thus, if you can be sure that your Texinfo file will be
+formatted with @code{makeinfo}, you have no need for the update node
+commands. (@xref{Creating an Info File}, for more information about
+@code{makeinfo}.) However, both @code{makeinfo} and the
+@code{texinfo-format-@dots{}} commands require that you insert menus in
+the file.
+
+
+@node Other Updating Commands
+@subsection Other Updating Commands
+
+In addition to the five major updating commands, Texinfo mode
+possesses several less frequently used updating commands:@refill
+
+@table @kbd
+@item M-x texinfo-insert-node-lines
+@findex texinfo-insert-node-lines
+Insert @code{@@node} lines before the @code{@@chapter},
+@code{@@section}, and other sectioning commands wherever they are
+missing throughout a region in a Texinfo file.@refill
+
+With an argument (@kbd{C-u} as prefix argument, if interactive), the
+@code{texinfo-insert-node-lines} command not only inserts
+@code{@@node} lines but also inserts the chapter or section titles as
+the names of the corresponding nodes. In addition, it inserts the
+titles as node names in pre-existing @code{@@node} lines that lack
+names. Since node names should be more concise than section or
+chapter titles, you must manually edit node names so inserted.@refill
+
+For example, the following marks a whole buffer as a region and inserts
+@code{@@node} lines and titles throughout:@refill
+
+@example
+C-x h C-u M-x texinfo-insert-node-lines
+@end example
+
+This command inserts titles as node names in @code{@@node} lines; the
+@code{texinfo-start-menu-description} command (@pxref{Inserting,
+Inserting Frequently Used Commands}) inserts titles as descriptions in
+menu entries, a different action. However, in both cases, you need to
+edit the inserted text.
+
+@item M-x texinfo-multiple-files-update
+@findex texinfo-multiple-files-update @r{(in brief)}
+Update nodes and menus in a document built from several separate files.
+With @kbd{C-u} as a prefix argument, create and insert a master menu in
+the outer file. With a numeric prefix argument, such as @kbd{C-u 2}, first
+update all the menus and all the `Next', `Previous', and `Up' pointers
+of all the included files before creating and inserting a master menu in
+the outer file. The @code{texinfo-multiple-files-update} command is
+described in the appendix on @code{@@include} files.
+@xref{texinfo-multiple-files-update}.
+
+@item M-x texinfo-indent-menu-description
+@findex texinfo-indent-menu-description
+Indent every description in the menu following point to the specified
+column. You can use this command to give yourself more space for
+descriptions. With an argument (@kbd{C-u} as prefix argument, if
+interactive), the @code{texinfo-indent-menu-description} command indents
+every description in every menu in the region. However, this command
+does not indent the second and subsequent lines of a multi-line
+description.@refill
+
+@item M-x texinfo-sequential-node-update
+@findex texinfo-sequential-node-update
+Insert the names of the nodes immediately following and preceding the
+current node as the `Next' or `Previous' pointers regardless of those
+nodes' hierarchical level. This means that the `Next' node of a
+subsection may well be the next chapter. Sequentially ordered nodes are
+useful for novels and other documents that you read through
+sequentially. (However, in Info, the @kbd{g *} command lets
+you look through the file sequentially, so sequentially ordered nodes
+are not strictly necessary.) With an argument (prefix argument, if
+interactive), the @code{texinfo-sequential-node-update} command
+sequentially updates all the nodes in the region.@refill
+@end table
+
+@node Info Formatting
+@comment node-name, next, previous, up
+@section Formatting for Info
+@cindex Formatting for Info
+@cindex Running an Info formatter
+@cindex Info formatting
+
+Texinfo mode provides several commands for formatting part or all of a
+Texinfo file for Info. Often, when you are writing a document, you
+want to format only part of a file---that is, a region.@refill
+
+You can use either the @code{texinfo-format-region} or the
+@code{makeinfo-region} command to format a region:@refill
+
+@table @kbd
+@findex texinfo-format-region
+@item C-c C-e C-r
+@itemx M-x texinfo-format-region
+@itemx C-c C-m C-r
+@itemx M-x makeinfo-region
+Format the current region for Info.@refill
+@end table
+
+You can use either the @code{texinfo-format-buffer} or the
+@code{makeinfo-buffer} command to format a whole buffer:@refill
+
+@table @kbd
+@findex texinfo-format-buffer
+@item C-c C-e C-b
+@itemx M-x texinfo-format-buffer
+@itemx C-c C-m C-b
+@itemx M-x makeinfo-buffer
+Format the current buffer for Info.@refill
+@end table
+
+@need 1000
+For example, after writing a Texinfo file, you can type the following:
+
+@example
+C-u C-c C-u m
+@exdent or
+C-u M-x texinfo-master-menu
+@end example
+
+@noindent
+This updates all the nodes and menus. Then type the following to create
+an Info file:
+
+@example
+C-c C-m C-b
+@exdent or
+M-x makeinfo-buffer
+@end example
+
+For @TeX{} or the Info formatting commands to work, the file @emph{must}
+include a line that has @code{@@setfilename} in its header.
+
+@xref{Creating an Info File}, for details about Info formatting.@refill
+
+@node Printing
+@comment node-name, next, previous, up
+@section Printing
+@cindex Formatting for printing
+@cindex Printing a region or buffer
+@cindex Region formatting and printing
+@cindex Buffer formatting and printing
+@cindex Part of file formatting and printing
+
+Typesetting and printing a Texinfo file is a multi-step process in which
+you first create a file for printing (called a DVI file), and then
+print the file. Optionally, you may also create indices. To do this,
+you must run the @code{texindex} command after first running the
+@code{tex} typesetting command; and then you must run the @code{tex}
+command again. Or else run the @code{texi2dvi} command which
+automatically creates indices as needed (@pxref{Format with texi2dvi}).
+
+Often, when you are writing a document, you want to typeset and print
+only part of a file to see what it will look like. You can use the
+@code{texinfo-tex-region} and related commands for this purpose. Use
+the @code{texinfo-tex-buffer} command to format all of a
+buffer.@refill
+
+@table @kbd
+@item C-c C-t C-b
+@itemx M-x texinfo-tex-buffer
+@findex texinfo-tex-buffer
+Run @code{texi2dvi} on the buffer. In addition to running @TeX{} on the
+buffer, this command automatically creates or updates indices as
+needed.@refill
+
+@item C-c C-t C-r
+@itemx M-x texinfo-tex-region
+@findex texinfo-tex-region
+Run @TeX{} on the region.@refill
+
+@item C-c C-t C-i
+@itemx M-x texinfo-texindex
+Run @code{texindex} to sort the indices of a Texinfo file formatted with
+@code{texinfo-tex-region}. The @code{texinfo-tex-region} command does
+not run @code{texindex} automatically; it only runs the @code{tex}
+typesetting command. You must run the @code{texinfo-tex-region} command
+a second time after sorting the raw index files with the @code{texindex}
+command. (Usually, you do not format an index when you format a region,
+only when you format a buffer. Now that the @code{texi2dvi} command
+exists, there is little or no need for this command.)@refill
+
+@item C-c C-t C-p
+@itemx M-x texinfo-tex-print
+@findex texinfo-tex-print
+Print the file (or the part of the file) previously formatted with
+@code{texinfo-tex-buffer} or @code{texinfo-tex-region}.@refill
+@end table
+
+For @code{texinfo-tex-region} or @code{texinfo-tex-buffer} to work, the
+file @emph{must} start with a @samp{\input texinfo} line and must
+include an @code{@@settitle} line. The file must end with @code{@@bye}
+on a line by itself. (When you use @code{texinfo-tex-region}, you must
+surround the @code{@@settitle} line with start-of-header and
+end-of-header lines.)@refill
+
+@xref{Hardcopy}, for a description of the other @TeX{} related
+commands, such as @code{tex-show-print-queue}.@refill
+
+@node Texinfo Mode Summary
+@comment node-name, next, previous, up
+@section Texinfo Mode Summary
+
+In Texinfo mode, each set of commands has default keybindings that
+begin with the same keys. All the commands that are custom-created
+for Texinfo mode begin with @kbd{C-c}. The keys are somewhat
+mnemonic.@refill
+
+@subheading Insert Commands
+
+The insert commands are invoked by typing @kbd{C-c} twice and then the
+first letter of the @@-command to be inserted. (It might make more
+sense mnemonically to use @kbd{C-c C-i}, for `custom insert', but
+@kbd{C-c C-c} is quick to type.)@refill
+
+@example
+C-c C-c c @r{Insert} @samp{@@code}.
+C-c C-c d @r{Insert} @samp{@@dfn}.
+C-c C-c e @r{Insert} @samp{@@end}.
+C-c C-c i @r{Insert} @samp{@@item}.
+C-c C-c n @r{Insert} @samp{@@node}.
+C-c C-c s @r{Insert} @samp{@@samp}.
+C-c C-c v @r{Insert} @samp{@@var}.
+C-c @{ @r{Insert braces.}
+C-c ]
+C-c @} @r{Move out of enclosing braces.}
+
+@group
+C-c C-c C-d @r{Insert a node's section title}
+ @r{in the space for the description}
+ @r{in a menu entry line.}
+@end group
+@end example
+
+@subheading Show Structure
+
+The @code{texinfo-show-structure} command is often used within a
+narrowed region.@refill
+
+@example
+C-c C-s @r{List all the headings.}
+@end example
+
+@subheading The Master Update Command
+
+The @code{texinfo-master-menu} command creates a master menu; and can
+be used to update every node and menu in a file as well.@refill
+
+@c Probably should use @tables in this section.
+@example
+@group
+C-c C-u m
+M-x texinfo-master-menu
+ @r{Create or update a master menu.}
+@end group
+
+@group
+C-u C-c C-u m @r{With @kbd{C-u} as a prefix argument, first}
+ @r{create or update all nodes and regular}
+ @r{menus, and then create a master menu.}
+@end group
+@end example
+
+@subheading Update Pointers
+
+The update pointer commands are invoked by typing @kbd{C-c C-u} and
+then either @kbd{C-n} for @code{texinfo-update-node} or @kbd{C-e} for
+@code{texinfo-every-node-update}.@refill
+
+@example
+C-c C-u C-n @r{Update a node.}
+C-c C-u C-e @r{Update every node in the buffer.}
+@end example
+
+@subheading Update Menus
+
+Invoke the update menu commands by typing @kbd{C-c C-u}
+and then either @kbd{C-m} for @code{texinfo-make-menu} or
+@kbd{C-a} for @code{texinfo-all-menus-update}. To update
+both nodes and menus at the same time, precede @kbd{C-c C-u
+C-a} with @kbd{C-u}.@refill
+
+@example
+C-c C-u C-m @r{Make or update a menu.}
+
+@group
+C-c C-u C-a @r{Make or update all}
+ @r{menus in a buffer.}
+@end group
+
+@group
+C-u C-c C-u C-a @r{With @kbd{C-u} as a prefix argument,}
+ @r{first create or update all nodes and}
+ @r{then create or update all menus.}
+@end group
+@end example
+
+@subheading Format for Info
+
+The Info formatting commands that are written in Emacs Lisp are
+invoked by typing @kbd{C-c C-e} and then either @kbd{C-r} for a region
+or @kbd{C-b} for the whole buffer.@refill
+
+The Info formatting commands that are written in C and based on the
+@code{makeinfo} program are invoked by typing @kbd{C-c C-m} and then
+either @kbd{C-r} for a region or @kbd{C-b} for the whole buffer.@refill
+
+@need 800
+@noindent
+Use the @code{texinfo-format@dots{}} commands:
+
+@example
+@group
+C-c C-e C-r @r{Format the region.}
+C-c C-e C-b @r{Format the buffer.}
+@end group
+@end example
+
+@need 750
+@noindent
+Use @code{makeinfo}:
+
+@example
+C-c C-m C-r @r{Format the region.}
+C-c C-m C-b @r{Format the buffer.}
+C-c C-m C-l @r{Recenter the @code{makeinfo} output buffer.}
+C-c C-m C-k @r{Kill the @code{makeinfo} formatting job.}
+@end example
+
+@subheading Typeset and Print
+
+The @TeX{} typesetting and printing commands are invoked by typing
+@kbd{C-c C-t} and then another control command: @kbd{C-r} for
+@code{texinfo-tex-region}, @kbd{C-b} for @code{texinfo-tex-buffer},
+and so on.@refill
+
+@example
+C-c C-t C-r @r{Run @TeX{} on the region.}
+C-c C-t C-b @r{Run} @code{texi2dvi} @r{on the buffer.}
+C-c C-t C-i @r{Run} @code{texindex}.
+C-c C-t C-p @r{Print the DVI file.}
+C-c C-t C-q @r{Show the print queue.}
+C-c C-t C-d @r{Delete a job from the print queue.}
+C-c C-t C-k @r{Kill the current @TeX{} formatting job.}
+C-c C-t C-x @r{Quit a currently stopped @TeX{} formatting job.}
+C-c C-t C-l @r{Recenter the output buffer.}
+@end example
+
+@subheading Other Updating Commands
+
+The remaining updating commands do not have standard keybindings because
+they are rarely used.
+
+@example
+@group
+M-x texinfo-insert-node-lines
+ @r{Insert missing @code{@@node} lines in region.}
+ @r{With @kbd{C-u} as a prefix argument,}
+ @r{use section titles as node names.}
+@end group
+
+@group
+M-x texinfo-multiple-files-update
+ @r{Update a multi-file document.}
+ @r{With @kbd{C-u 2} as a prefix argument,}
+ @r{create or update all nodes and menus}
+ @r{in all included files first.}
+@end group
+
+@group
+M-x texinfo-indent-menu-description
+ @r{Indent descriptions.}
+@end group
+
+@group
+M-x texinfo-sequential-node-update
+ @r{Insert node pointers in strict sequence.}
+@end group
+@end example
+
+
+@node Beginning a File
+@chapter Beginning a Texinfo File
+@cindex Beginning a Texinfo file
+@cindex Texinfo file beginning
+@cindex File beginning
+
+Certain pieces of information must be provided at the beginning of a
+Texinfo file, such as the name for the output file(s), the title of the
+document, and the Top node. A table of contents is also generally
+produced here.
+
+This chapter expands on the minimal complete Texinfo source file
+previously given (@pxref{Six Parts}). It describes the numerous
+commands for handling the traditional frontmatter items in Texinfo.
+
+@cindex Frontmatter, text in
+Straight text outside of any command before the Top node should be
+avoided. Such text is treated differently in the different output
+formats: visible in @TeX{} and HTML, by default not shown in Info
+readers, and so on.
+
+@menu
+* Sample Beginning:: A sample beginning for a Texinfo file.
+* Texinfo File Header:: The first lines.
+* Document Permissions:: Ensuring your manual is free.
+* Titlepage & Copyright Page:: Creating the title and copyright pages.
+* Contents:: How to create a table of contents.
+* The Top Node:: Creating the `Top' node and master menu.
+* Global Document Commands:: Affecting formatting throughout.
+* Software Copying Permissions:: Ensure that you and others continue to
+ have the right to use and share software.
+@end menu
+
+
+@node Sample Beginning
+@section Sample Texinfo File Beginning
+
+@cindex Example beginning of Texinfo file
+
+The following sample shows what is needed. The elements given here are
+explained in more detail in the following sections. Other commands are
+often included at the beginning of Texinfo files, but the ones here are
+the most critical.
+
+@xref{GNU Sample Texts}, for the full texts to be used in GNU manuals.
+
+@example
+\input texinfo @@c -*-texinfo-*-
+@@c %**start of header
+@@setfilename @var{infoname}.info
+@@settitle @var{name-of-manual} @var{version}
+@@c %**end of header
+
+@@copying
+This manual is for @var{program}, version @var{version}.
+
+Copyright @@copyright@{@} @var{years} @var{copyright-owner}.
+
+@group
+@@quotation
+Permission is granted to @dots{}
+@@end quotation
+@@end copying
+@end group
+
+@group
+@@titlepage
+@@title @var{name-of-manual-when-printed}
+@@subtitle @var{subtitle-if-any}
+@@subtitle @var{second-subtitle}
+@@author @var{author}
+@end group
+
+@group
+@@c The following two commands
+@@c start the copyright page.
+@@page
+@@vskip 0pt plus 1filll
+@@insertcopying
+@end group
+
+Published by @dots{}
+@@end titlepage
+
+@@c So the toc is printed at the start.
+@@contents
+
+@@ifnottex
+@@node Top
+@@top @var{title}
+
+This manual is for @var{program}, version @var{version}.
+@@end ifnottex
+
+@group
+@@menu
+* First Chapter:: Getting started @dots{}
+* Second Chapter:: @dots{}
+ @dots{}
+* Copying:: Your rights and freedoms.
+@@end menu
+@end group
+
+@group
+@@node First Chapter
+@@chapter First Chapter
+
+@@cindex first chapter
+@@cindex chapter, first
+@dots{}
+@end group
+@end example
+
+
+@node Texinfo File Header
+@section Texinfo File Header
+@cindex Header for Texinfo files
+@cindex Texinfo file header
+
+Texinfo files start with at least three lines that provide Info and
+@TeX{} with necessary information. These are the @code{\input texinfo}
+line, the @code{@@settitle} line, and the @code{@@setfilename} line.
+
+Also, if you want to format just part of the Texinfo file, you must
+write the @code{@@settitle} and @code{@@setfilename} lines between
+start-of-header and end-of-header lines. The start- and end-of-header
+lines are optional, but they do no harm, so you might as well always
+include them.
+
+Any command that affects document formatting as a whole makes sense to
+include in the header. @code{@@synindex} (@pxref{synindex}), for
+instance, is another command often included in the header. @xref{GNU
+Sample Texts}, for complete sample texts.
+
+Thus, the beginning of a Texinfo file generally looks like this:
+
+@example
+@group
+\input texinfo @@c -*-texinfo-*-
+@@c %**start of header
+@@setfilename sample.info
+@@settitle Sample Manual 1.0
+@@c %**end of header
+@end group
+@end example
+
+@menu
+* First Line:: The first line of a Texinfo file.
+* Start of Header:: Formatting a region requires this.
+* setfilename:: Tell Info the name of the Info file.
+* settitle:: Create a title for the printed work.
+* End of Header:: Formatting a region requires this.
+@end menu
+
+
+@node First Line
+@subsection The First Line of a Texinfo File
+@cindex First line of a Texinfo file
+@cindex Beginning line of a Texinfo file
+@cindex Header of a Texinfo file
+
+Every Texinfo file that is to be the top-level input to @TeX{} must begin
+with a line that looks like this:
+
+@example
+\input texinfo @@c -*-texinfo-*-
+@end example
+
+@noindent
+This line serves two functions:
+
+@enumerate
+@item
+When the file is processed by @TeX{}, the @samp{\input texinfo} command
+tells @TeX{} to load the macros needed for processing a Texinfo file.
+These are in a file called @file{texinfo.tex}, which should have been
+installed on your system along with either the @TeX{} or Texinfo
+software. @TeX{} uses the backslash, @samp{\}, to mark the beginning of
+a command, exactly as Texinfo uses @samp{@@}. The @file{texinfo.tex}
+file causes the switch from @samp{\} to @samp{@@}; before the switch
+occurs, @TeX{} requires @samp{\}, which is why it appears at the
+beginning of the file.
+
+@item
+When the file is edited in GNU Emacs, the @samp{-*-texinfo-*-} mode
+specification tells Emacs to use Texinfo mode.
+@end enumerate
+
+
+@node Start of Header
+@subsection Start of Header
+@cindex Start of header line
+
+A start-of-header line is a Texinfo comment that looks like this:
+
+@example
+@@c %**start of header
+@end example
+
+Write the start-of-header line on the second line of a Texinfo file.
+Follow the start-of-header line with @code{@@setfilename} and
+@code{@@settitle} lines and, optionally, with other commands that
+globally affect the document formatting, such as @code{@@synindex} or
+@code{@@footnotestyle}; and then by an end-of-header line (@pxref{End of
+Header}).
+
+The start- and end-of-header lines allow you to format only part of a
+Texinfo file for Info or printing. @xref{texinfo-format commands}.
+
+The odd string of characters, @samp{%**}, is to ensure that no other
+comment is accidentally taken for a start-of-header line. You can
+change it if you wish by setting the @code{tex-start-of-header} and/or
+@code{tex-end-of-header} Emacs variables. @xref{Texinfo Mode Printing}.
+
+
+@node setfilename
+@subsection @code{@@setfilename}: Set the output file name
+@findex setfilename
+@cindex Texinfo requires @code{@@setfilename}
+
+In order to serve as the primary input file for either @code{makeinfo}
+or @TeX{}, a Texinfo file must contain a line that looks like this:
+
+@example
+@@setfilename @var{info-file-name}
+@end example
+
+Write the @code{@@setfilename} command at the beginning of a line and
+follow it on the same line by the Info file name. Do not write anything
+else on the line; anything on the line after the command is considered
+part of the file name, including what would otherwise be a
+comment.
+
+@cindex Ignored before @code{@@setfilename}
+@cindex @samp{\input} source line ignored
+The Info formatting commands ignore everything written before the
+@code{@@setfilename} line, which is why the very first line of
+the file (the @code{\input} line) does not show up in the output.
+
+The @code{@@setfilename} line specifies the name of the output file to
+be generated. This name must be different from the name of the Texinfo
+file. There are two conventions for choosing the name: you can either
+remove the extension (such as @samp{.texi}) entirely from the input file
+name, or, preferably, replace it with the @samp{.info} extension.
+
+@cindex Length of file names
+@cindex File name collision
+@cindex Info file name, choosing
+Although an explicit @samp{.info} extension is preferable, some
+operating systems cannot handle long file names. You can run into a
+problem even when the file name you specify is itself short enough.
+This occurs because the Info formatters split a long Info file into
+short indirect subfiles, and name them by appending @samp{-1},
+@samp{-2}, @dots{}, @samp{-10}, @samp{-11}, and so on, to the original
+file name. (@xref{Tag and Split Files}.) The subfile name
+@file{texinfo.info-10}, for example, is too long for old systems with a
+14-character limit on filenames; so the Info file name for this document
+is @file{texinfo} rather than @file{texinfo.info}. When @code{makeinfo}
+is running on operating systems such as MS-DOS which impose severe
+limits on file names, it may remove some characters from the original
+file name to leave enough space for the subfile suffix, thus producing
+files named @file{texin-10}, @file{gcc.i12}, etc.
+
+When producing HTML output, @code{makeinfo} will replace any extension
+with @samp{html}, or add @samp{.html} if the given name has no
+extension.
+
+@pindex texinfo.cnf
+The @code{@@setfilename} line produces no output when you typeset a
+manual with @TeX{}, but it is nevertheless essential: it opens the
+index, cross-reference, and other auxiliary files used by Texinfo, and
+also reads @file{texinfo.cnf} if that file is present on your system
+(@pxref{Preparing for TeX,, Preparing for @TeX{}}).
+
+
+@node settitle
+@subsection @code{@@settitle}: Set the document title
+@findex settitle
+
+In order to be made into a printed manual, a Texinfo file must contain
+a line that looks like this:
+
+@example
+@@settitle @var{title}
+@end example
+
+Write the @code{@@settitle} command at the beginning of a line and
+follow it on the same line by the title. This tells @TeX{} the title to
+use in a header or footer. Do not write anything else on the line;
+anything on the line after the command is considered part of the title,
+including what would otherwise be a comment.
+
+The @code{@@settitle} command should precede everything that generates
+actual output. The best place for it is right after the
+@code{@@setfilename} command (see the previous section).
+
+@cindex <title> HTML tag
+In the HTML file produced by @command{makeinfo}, @var{title} serves as
+the document @samp{<title>}. It also becomes the default document
+description in the @samp{<head>} part (@pxref{documentdescription}).
+
+The title in the @code{@@settitle} command does not affect the title as
+it appears on the title page. Thus, the two do not need not match
+exactly. A practice we recommend is to include the version or edition
+number of the manual in the @code{@@settitle} title; on the title page,
+the version number generally appears as a @code{@@subtitle} so it would
+be omitted from the @code{@@title}. @xref{titlepage}.
+
+Conventionally, when @TeX{} formats a Texinfo file for double-sided
+output, the title is printed in the left-hand (even-numbered) page
+headings and the current chapter title is printed in the right-hand
+(odd-numbered) page headings. (@TeX{} learns the title of each chapter
+from each @code{@@chapter} command.) By default, no page footer is
+printed.
+
+Even if you are printing in a single-sided style, @TeX{} looks for an
+@code{@@settitle} command line, in case you include the manual title
+in the heading.
+
+@TeX{} prints page headings only for that text that comes after the
+@code{@@end titlepage} command in the Texinfo file, or that comes
+after an @code{@@headings} command that turns on headings.
+(@xref{headings on off, , The @code{@@headings} Command}, for more
+information.)
+
+You may, if you wish, create your own, customized headings and footings.
+@xref{Headings}, for a detailed discussion of this.
+
+
+@node End of Header
+@subsection End of Header
+@cindex End of header line
+
+Follow the header lines with an @w{end-of-header} line, which is a
+Texinfo comment that looks like this:
+
+@example
+@@c %**end of header
+@end example
+
+@xref{Start of Header}.
+
+
+@node Document Permissions
+@section Document Permissions
+@cindex Document Permissions
+@cindex Copying Permissions
+
+The copyright notice and copying permissions for a document need to
+appear in several places in the various Texinfo output formats.
+Therefore, Texinfo provides a command (@code{@@copying}) to declare
+this text once, and another command (@code{@@insertcopying}) to
+insert the text at appropriate points.
+
+@menu
+* copying:: Declare the document's copying permissions.
+* insertcopying:: Where to insert the permissions.
+@end menu
+
+
+@node copying
+@subsection @code{@@copying}: Declare Copying Permissions
+@findex copying
+
+The @code{@@copying} command should be given very early in the document;
+the recommended location is right after the header material
+(@pxref{Texinfo File Header}). It conventionally consists of a sentence
+or two about what the program is, identification of the documentation
+itself, the legal copyright line, and the copying permissions. Here is
+a skeletal example:
+
+@example
+@@copying
+This manual is for @var{program} (version @var{version}, updated
+@var{date}), which @dots{}
+
+Copyright @@copyright@{@} @var{years} @var{copyright-owner}.
+
+@@quotation
+Permission is granted to @dots{}
+@@end quotation
+@@end copying
+@end example
+
+The @code{@@quotation} has no legal significance; it's there to improve
+readability in some contexts.
+
+@xref{GNU Sample Texts}, for the full text to be used in GNU manuals.
+@xref{GNU Free Documentation License}, for the license itself under
+which GNU and other free manuals are distributed. You need to include
+the license as an appendix to your document.
+
+The text of @code{@@copying} is output as a comment at the beginning of
+Info, HTML, and XML output files. It is @emph{not} output implicitly in
+plain text or @TeX{}; it's up to you to use @code{@@insertcopying} to
+emit the copying information. See the next section for details.
+
+@findex copyright
+The @code{@@copyright@{@}} command generates a @samp{c} inside a circle
+in output formats that support this (print and HTML). In the other
+formats (Info and plain text), it generates @samp{(C)}. The copyright
+notice itself has the following legally defined sequence:
+
+@example
+Copyright @copyright{} @var{years} @var{copyright-owner}.
+@end example
+
+@cindex Copyright word, always in English
+The word `Copyright' must always be written in English, even if the
+document is otherwise written in another language. This is due to
+international law.
+
+@cindex Years, in copyright line
+The list of years should include all years in which a version was
+completed (even if it was released in a subsequent year). Ranges are
+not allowed; each year must be written out individually and in full,
+separated by commas.
+
+@cindex Copyright holder for FSF works
+@cindex Holder of copyright for FSF works
+@cindex Owner of copyright for FSF works
+The copyright owner (or owners) is whoever holds legal copyright on the
+work. In the case of works assigned to the FSF, the owner is `Free
+Software Foundation, Inc.'.
+
+The copyright `line' may actually be split across multiple lines, both
+in the source document and in the output. This often happens for
+documents with a long history, having many different years of
+publication. If you do use several lines, do not indent any of them
+(or anything else in the @code{@@copying} block) in the source file.
+
+@xref{Copyright Notices,,,maintain,GNU Maintenance Instructions}, for
+additional information.
+
+
+@node insertcopying
+@subsection @code{@@insertcopying}: Include Permissions Text
+@findex insertcopying
+@cindex Copying text, including
+@cindex Permissions text, including
+@cindex Including permissions text
+
+The @code{@@insertcopying} command is simply written on a line by
+itself, like this:
+
+@example
+@@insertcopying
+@end example
+
+This inserts the text previously defined by @code{@@copying}. To meet
+legal requirements, it must be used on the copyright page in the printed
+manual (@pxref{Copyright}).
+
+The @code{@@copying} command itself causes the permissions text to
+appear in an Info file @emph{before} the first node. The text is also
+copied into the beginning of each split Info output file, as is legally
+necessary. This location implies a human reading the manual using Info
+does @emph{not} see this text (except when using the advanced Info
+command @kbd{g *}), but this does not matter for legal purposes,
+because the text is present.
+
+Similarly, the @code{@@copying} text is automatically included at the
+beginning of each HTML output file, as an HTML comment. Again, this
+text is not visible (unless the reader views the HTML source).
+
+The permissions text defined by @code{@@copying} also appears
+automatically at the beginning of the XML output file.
+
+
+@node Titlepage & Copyright Page
+@section Title and Copyright Pages
+
+In hard copy output, the manual's name and author are usually printed on
+a title page. Copyright information is usually printed on the back of
+the title page.
+
+The title and copyright pages appear in the printed manual, but not in
+the Info file. Because of this, it is possible to use several slightly
+obscure @TeX{} typesetting commands that cannot be used in an Info file.
+In addition, this part of the beginning of a Texinfo file contains the
+text of the copying permissions that appears in the printed manual.
+
+@cindex Title page, for plain text
+@cindex Copyright page, for plain text
+You may wish to include titlepage-like information for plain text
+output. Simply place any such leading material between
+@code{@@ifplaintext} and @code{@@end ifplaintext}; @command{makeinfo}
+includes this when writing plain text (@samp{--no-headers}), along with
+an @code{@@insertcopying}.
+
+@menu
+* titlepage:: Create a title for the printed document.
+* titlefont center sp:: The @code{@@titlefont}, @code{@@center},
+ and @code{@@sp} commands.
+* title subtitle author:: The @code{@@title}, @code{@@subtitle},
+ and @code{@@author} commands.
+* Copyright:: How to write the copyright notice and
+ include copying permissions.
+* end titlepage:: Turn on page headings after the title and
+ copyright pages.
+* headings on off:: An option for turning headings on and off
+ and double or single sided printing.
+@end menu
+
+
+@node titlepage
+@subsection @code{@@titlepage}
+@cindex Title page
+@findex titlepage
+
+Start the material for the title page and following copyright page
+with @code{@@titlepage} on a line by itself and end it with
+@code{@@end titlepage} on a line by itself.
+
+The @code{@@end titlepage} command starts a new page and turns on page
+numbering. (@xref{Headings, , Page Headings}, for details about how to
+generate page headings.) All the material that you want to appear on
+unnumbered pages should be put between the @code{@@titlepage} and
+@code{@@end titlepage} commands. You can force the table of contents to
+appear there with the @code{@@setcontentsaftertitlepage} command
+(@pxref{Contents}).
+
+@findex page@r{, within @code{@@titlepage}}
+By using the @code{@@page} command you can force a page break within the
+region delineated by the @code{@@titlepage} and @code{@@end titlepage}
+commands and thereby create more than one unnumbered page. This is how
+the copyright page is produced. (The @code{@@titlepage} command might
+perhaps have been better named the @code{@@titleandadditionalpages}
+command, but that would have been rather long!)
+
+When you write a manual about a computer program, you should write the
+version of the program to which the manual applies on the title page.
+If the manual changes more frequently than the program or is independent
+of it, you should also include an edition number@footnote{We have found
+that it is helpful to refer to versions of independent manuals as
+`editions' and versions of programs as `versions'; otherwise, we find we
+are liable to confuse each other in conversation by referring to both
+the documentation and the software with the same words.} for the manual.
+This helps readers keep track of which manual is for which version of
+the program. (The `Top' node should also contain this information; see
+@ref{The Top Node}.)
+
+Texinfo provides two main methods for creating a title page. One method
+uses the @code{@@titlefont}, @code{@@sp}, and @code{@@center} commands
+to generate a title page in which the words on the page are
+centered.
+
+The second method uses the @code{@@title}, @code{@@subtitle}, and
+@code{@@author} commands to create a title page with black rules under
+the title and author lines and the subtitle text set flush to the
+right hand side of the page. With this method, you do not specify any
+of the actual formatting of the title page. You specify the text
+you want, and Texinfo does the formatting.
+
+You may use either method, or you may combine them; see the examples in
+the sections below.
+
+@findex shorttitlepage
+@cindex Bastard title page
+@cindex Title page, bastard
+For extremely simple documents, and for the bastard title page in
+traditional book frontmatter, Texinfo also provides a command
+@code{@@shorttitlepage} which takes the rest of the line as the title.
+The argument is typeset on a page by itself and followed by a blank
+page.
+
+
+@node titlefont center sp
+@subsection @code{@@titlefont}, @code{@@center}, and @code{@@sp}
+@findex titlefont
+@findex center
+@findex sp @r{(titlepage line spacing)}
+
+You can use the @code{@@titlefont}, @code{@@sp}, and @code{@@center}
+commands to create a title page for a printed document. (This is the
+first of the two methods for creating a title page in Texinfo.)
+
+Use the @code{@@titlefont} command to select a large font suitable for
+the title itself. You can use @code{@@titlefont} more than once if you
+have an especially long title.
+
+For HTML output, each @code{@@titlefont} command produces an
+@code{<h1>} heading, but the HTML document @code{<title>} is not
+affected. For that, you must put an @code{@@settitle} command before
+the @code{@@titlefont} command (@pxref{settitle}).
+
+@need 700
+For example:
+
+@example
+@@titlefont@{Texinfo@}
+@end example
+
+Use the @code{@@center} command at the beginning of a line to center
+the remaining text on that line. Thus,
+
+@example
+@@center @@titlefont@{Texinfo@}
+@end example
+
+@noindent
+centers the title, which in this example is ``Texinfo'' printed
+in the title font.
+
+Use the @code{@@sp} command to insert vertical space. For example:
+
+@example
+@@sp 2
+@end example
+
+@noindent
+This inserts two blank lines on the printed page. (@xref{sp, ,
+@code{@@sp}}, for more information about the @code{@@sp}
+command.)
+
+A template for this method looks like this:
+
+@example
+@group
+@@titlepage
+@@sp 10
+@@center @@titlefont@{@var{name-of-manual-when-printed}@}
+@@sp 2
+@@center @var{subtitle-if-any}
+@@sp 2
+@@center @var{author}
+@dots{}
+@@end titlepage
+@end group
+@end example
+
+The spacing of the example fits an 8.5 by 11 inch manual.
+
+You can in fact use these commands anywhere, not just on a title page,
+but since they are not logical markup commands, we don't recommend
+them.
+
+@node title subtitle author
+@subsection @code{@@title}, @code{@@subtitle}, and @code{@@author}
+@findex title
+@findex subtitle
+@findex author
+
+You can use the @code{@@title}, @code{@@subtitle}, and @code{@@author}
+commands to create a title page in which the vertical and horizontal
+spacing is done for you automatically. This contrasts with the method
+described in the previous section, in which the @code{@@sp} command is
+needed to adjust vertical spacing.
+
+Write the @code{@@title}, @code{@@subtitle}, or @code{@@author}
+commands at the beginning of a line followed by the title, subtitle,
+or author. These commands are only effective in @TeX{} output; it's
+an error to use them anywhere except within @code{@@titlepage}.
+
+The @code{@@title} command produces a line in which the title is set
+flush to the left-hand side of the page in a larger than normal font.
+The title is underlined with a black rule. Only a single line is
+allowed; the @code{@@*} command may not be used to break the title into
+two lines. To handle very long titles, you may find it profitable to
+use both @code{@@title} and @code{@@titlefont}; see the final example in
+this section.
+
+The @code{@@subtitle} command sets subtitles in a normal-sized font
+flush to the right-hand side of the page.
+
+The @code{@@author} command sets the names of the author or authors in
+a middle-sized font flush to the left-hand side of the page on a line
+near the bottom of the title page. The names are underlined with a
+black rule that is thinner than the rule that underlines the title.
+(The black rule only occurs if the @code{@@author} command line is
+followed by an @code{@@page} command line.)
+
+There are two ways to use the @code{@@author} command: you can write
+the name or names on the remaining part of the line that starts with
+an @code{@@author} command:
+
+@example
+@@author by Jane Smith and John Doe
+@end example
+
+@noindent
+or you can write the names one above each other by using two (or more)
+@code{@@author} commands:
+
+@example
+@group
+@@author Jane Smith
+@@author John Doe
+@end group
+@end example
+
+@noindent
+(Only the bottom name is underlined with a black rule.)
+
+@need 950
+A template for this method looks like this:
+
+@example
+@group
+@@titlepage
+@@title @var{name-of-manual-when-printed}
+@@subtitle @var{subtitle-if-any}
+@@subtitle @var{second-subtitle}
+@@author @var{author}
+@@page
+@dots{}
+@@end titlepage
+@end group
+@end example
+
+You may also combine the @code{@@titlefont} method described in the
+previous section and @code{@@title} method described in this one. This
+may be useful if you have a very long title. Here is a real-life example:
+
+@example
+@group
+@@titlepage
+@@titlefont@{GNU Software@}
+@@sp 1
+@@title for MS-Windows and MS-DOS
+@@subtitle Edition @@value@{e@} for Release @@value@{cde@}
+@@author by Daniel Hagerty, Melissa Weisshaus
+@@author and Eli Zaretskii
+@end group
+@end example
+
+@noindent
+(The use of @code{@@value} here is explained in @ref{value Example}.
+
+
+@node Copyright
+@subsection Copyright Page
+@cindex Copyright page
+@cindex Printed permissions
+@cindex Permissions, printed
+
+By international treaty, the copyright notice for a book must be either
+on the title page or on the back of the title page. When the copyright
+notice is on the back of the title page, that page is customarily not
+numbered. Therefore, in Texinfo, the information on the copyright page
+should be within @code{@@titlepage} and @code{@@end titlepage}
+commands.
+
+@findex vskip @r{@TeX{} vertical skip}
+@findex filll @r{@TeX{} dimension}
+Use the @code{@@page} command to cause a page break. To push the
+copyright notice and the other text on the copyright page towards the
+bottom of the page, use the following incantation after @code{@@page}:
+
+@example
+@@vskip 0pt plus 1filll
+@end example
+
+@noindent
+This is a @TeX{} command that is not supported by the Info formatting
+commands. The @code{@@vskip} command inserts whitespace. The @samp{0pt
+plus 1filll} means to put in zero points of mandatory whitespace, and as
+much optional whitespace as needed to push the following text to the
+bottom of the page. Note the use of three @samp{l}s in the word
+@samp{filll}; this is correct.
+
+To insert the copyright text itself, write @code{@@insertcopying}
+next (@pxref{Document Permissions}):
+
+@example
+@@insertcopying
+@end example
+
+Follow the copying text by the publisher, ISBN numbers, cover art
+credits, and other such information.
+
+Here is an example putting all this together:
+
+@example
+@@titlepage
+@dots{}
+@@page
+@@vskip 0pt plus 1filll
+@@insertcopying
+
+Published by @dots{}
+
+Cover art by @dots{}
+@@end titlepage
+@end example
+
+
+@node end titlepage
+@subsection Heading Generation
+@findex end titlepage
+@cindex Headings, page, begin to appear
+@cindex Titlepage end starts headings
+@cindex End titlepage starts headings
+
+Like all @code{@@end} commands (@pxref{Quotations and Examples}), the @code{@@end titlepage} command
+must be written at the beginning of a line by itself, with only one
+space between the @code{@@end} and the @code{titlepage}. It not only
+marks the end of the title and copyright pages, but also causes @TeX{}
+to start generating page headings and page numbers.
+
+To repeat what is said elsewhere, Texinfo has two standard page heading
+formats, one for documents which are printed on one side of each sheet of paper
+(single-sided printing), and the other for documents which are printed on both
+sides of each sheet (double-sided printing).
+You can specify these formats in different ways:
+
+@itemize @bullet
+@item
+The conventional way is to write an @code{@@setchapternewpage} command
+before the title page commands, and then have the @code{@@end
+titlepage} command start generating page headings in the manner desired.
+(@xref{setchapternewpage}.)
+
+@item
+Alternatively, you can use the @code{@@headings} command to prevent page
+headings from being generated or to start them for either single or
+double-sided printing. (Write an @code{@@headings} command immediately
+after the @code{@@end titlepage} command. @xref{headings on off, , The
+@code{@@headings} Command}, for more information.)@refill
+
+@item
+Or, you may specify your own page heading and footing format.
+@xref{Headings, , Page Headings}, for detailed
+information about page headings and footings.
+@end itemize
+
+Most documents are formatted with the standard single-sided or
+double-sided format, using @code{@@setchapternewpage odd} for
+double-sided printing and no @code{@@setchapternewpage} command for
+single-sided printing.
+
+
+@node headings on off
+@subsection The @code{@@headings} Command
+@findex headings
+
+The @code{@@headings} command is rarely used. It specifies what kind of
+page headings and footings to print on each page. Usually, this is
+controlled by the @code{@@setchapternewpage} command. You need the
+@code{@@headings} command only if the @code{@@setchapternewpage} command
+does not do what you want, or if you want to turn off predefined page
+headings prior to defining your own. Write an @code{@@headings} command
+immediately after the @code{@@end titlepage} command.
+
+You can use @code{@@headings} as follows:
+
+@table @code
+@item @@headings off
+Turn off printing of page headings.
+
+@item @@headings single
+Turn on page headings appropriate for single-sided printing.
+
+@item @@headings double
+Turn on page headings appropriate for double-sided printing.
+
+@item @@headings singleafter
+@itemx @@headings doubleafter
+Turn on @code{single} or @code{double} headings, respectively, after the
+current page is output.
+
+@item @@headings on
+Turn on page headings: @code{single} if @samp{@@setchapternewpage
+on}, @code{double} otherwise.
+@end table
+
+For example, suppose you write @code{@@setchapternewpage off} before the
+@code{@@titlepage} command to tell @TeX{} to start a new chapter on the
+same page as the end of the last chapter. This command also causes
+@TeX{} to typeset page headers for single-sided printing. To cause
+@TeX{} to typeset for double sided printing, write @code{@@headings
+double} after the @code{@@end titlepage} command.
+
+You can stop @TeX{} from generating any page headings at all by
+writing @code{@@headings off} on a line of its own immediately after the
+line containing the @code{@@end titlepage} command, like this:
+
+@example
+@@end titlepage
+@@headings off
+@end example
+
+@noindent
+The @code{@@headings off} command overrides the @code{@@end titlepage}
+command, which would otherwise cause @TeX{} to print page headings.
+
+You can also specify your own style of page heading and footing.
+@xref{Headings, , Page Headings}, for more information.
+
+
+@node Contents
+@section Generating a Table of Contents
+@cindex Table of contents
+@cindex Contents, Table of
+@cindex Short table of contents
+@findex contents
+@findex summarycontents
+@findex shortcontents
+
+The @code{@@chapter}, @code{@@section}, and other structuring commands
+(@pxref{Structuring}) supply the information to make up a
+table of contents, but they do not cause an actual table to appear in
+the manual. To do this, you must use the @code{@@contents} and/or
+@code{@@summarycontents} command(s).
+
+@table @code
+@item @@contents
+Generates a table of contents in a printed manual, including all
+chapters, sections, subsections, etc., as well as appendices and
+unnumbered chapters. Headings generated by @code{@@majorheading},
+@code{@@chapheading}, and the other @code{@@@dots{}heading} commands
+do not appear in the table of contents (@pxref{Structuring Command
+Types}).
+
+@item @@shortcontents
+@itemx @@summarycontents
+(@code{@@summarycontents} is a synonym for @code{@@shortcontents}.)
+
+Generates a short or summary table of contents that lists only the
+chapters, appendices, and unnumbered chapters. Sections, subsections
+and subsubsections are omitted. Only a long manual needs a short
+table of contents in addition to the full table of contents.
+
+@end table
+
+Both contents commands should be written on a line by themselves, and
+are best placed near the beginning of the file, after the @code{@@end
+titlepage} (@pxref{titlepage}). The contents commands automatically
+generate a chapter-like heading at the top of the first table of
+contents page, so don't include any sectioning command such as
+@code{@@unnumbered} before them.
+
+Since an Info file uses menus instead of tables of contents, the Info
+formatting commands ignore the contents commands. But the contents are
+included in plain text output (generated by @code{makeinfo
+--no-headers}), unless @code{makeinfo} is writing its output to standard
+output.
+
+When @code{makeinfo} writes a short table of contents while producing
+HTML output, the links in the short table of contents point to
+corresponding entries in the full table of contents rather than the text
+of the document. The links in the full table of contents point to the
+main text of the document.
+
+In the past, the contents commands were sometimes placed at the end of
+the file, after any indices and just before the @code{@@bye}, but we
+no longer recommend this.
+
+@findex setcontentsaftertitlepage
+@findex setshortcontentsaftertitlepage
+@cindex Contents, after title page
+@cindex Table of contents, after title page
+However, since many existing Texinfo documents still do have the
+@code{@@contents} at the end of the manual, if you are a user printing
+a manual, you may wish to force the contents to be printed after the
+title page. You can do this by specifying
+@code{@@setcontentsaftertitlepage} and/or
+@code{@@setshortcontentsaftertitlepage}. The first prints only the
+main contents after the @code{@@end titlepage}; the second prints both
+the short contents and the main contents. In either case, any
+subsequent @code{@@contents} or @code{@@shortcontents} is ignored
+(unless, erroneously, no @code{@@end titlepage} is ever encountered).
+
+You need to include the @code{@@set@dots{}contentsaftertitlepage}
+commands early in the document (just after @code{@@setfilename}, for
+example). We recommend using @command{texi2dvi} (@pxref{Format with
+texi2dvi}) to specify this without altering the source file at all. For
+example:
+@example
+texi2dvi --texinfo=@@setcontentsaftertitlepage foo.texi
+@end example
+
+
+@node The Top Node
+@section The `Top' Node and Master Menu
+@cindex Top node
+@cindex Node, `Top'
+
+The `Top' node is the node in which a reader enters an Info manual.
+As such, it should begin with a brief description of the manual
+(including the version number), and end with a master menu for the
+whole manual. Of course you should include any other general
+information you feel a reader would find helpful.
+
+@findex top
+It is conventional and desirable to write an @code{@@top} sectioning
+command line containing the title of the document immediately after
+the @code{@@node Top} line (@pxref{makeinfo top command, , The
+@code{@@top} Sectioning Command}).
+
+The contents of the `Top' node should appear only in the online output;
+none of it should appear in printed output, so enclose it between
+@code{@@ifnottex} and @code{@@end ifnottex} commands. (@TeX{} does not
+print either an @code{@@node} line or a menu; they appear only in Info;
+strictly speaking, you are not required to enclose these parts between
+@code{@@ifnottex} and @code{@@end ifnottex}, but it is simplest to do
+so. @xref{Conditionals, , Conditionally Visible Text}.)
+
+@menu
+* Top Node Example::
+* Master Menu Parts::
+@end menu
+
+
+@node Top Node Example
+@subsection Top Node Example
+
+@cindex Top node example
+
+Here is an example of a Top node.
+
+@example
+@group
+@@ifnottex
+@@node Top
+@@top Sample Title
+
+@@insertcopying
+@@end ifnottex
+@end group
+
+Additional general information.
+
+@group
+@@menu
+* First Chapter::
+* Second Chapter::
+@dots{}
+* Index::
+@end group
+@@end menu
+@end example
+
+
+@node Master Menu Parts
+@subsection Parts of a Master Menu
+@cindex Master menu
+@cindex Menu, master
+@cindex Parts of a master menu
+
+A @dfn{master menu} is a detailed main menu listing all the nodes in a
+file.
+
+A master menu is enclosed in @code{@@menu} and @code{@@end menu}
+commands and does not appear in the printed document.
+
+Generally, a master menu is divided into parts.
+
+@itemize @bullet
+@item
+The first part contains the major nodes in the Texinfo file: the nodes
+for the chapters, chapter-like sections, and the appendices.
+
+@item
+The second part contains nodes for the indices.
+
+@item
+@findex detailmenu
+@cindex Detailed menu
+The third and subsequent parts contain a listing of the other, lower
+level nodes, often ordered by chapter. This way, rather than go
+through an intermediary menu, an inquirer can go directly to a
+particular node when searching for specific information. These menu
+items are not required; add them if you think they are a
+convenience. If you do use them, put @code{@@detailmenu} before the
+first one, and @code{@@end detailmenu} after the last; otherwise,
+@code{makeinfo} will get confused.
+@end itemize
+
+Each section in the menu can be introduced by a descriptive line. So
+long as the line does not begin with an asterisk, it will not be
+treated as a menu entry. (@xref{Writing a Menu}, for more
+information.)
+
+For example, the master menu for this manual looks like the following
+(but has many more entries):
+
+@example
+@group
+@@menu
+* Copying Conditions:: Your rights.
+* Overview:: Texinfo in brief.
+@dots{}
+@end group
+@group
+* Command and Variable Index::
+* General Index::
+@end group
+
+@group
+@@detailmenu
+--- The Detailed Node Listing ---
+
+Overview of Texinfo
+
+* Reporting Bugs:: @dots{}
+@dots{}
+@end group
+
+@group
+Beginning a Texinfo File
+
+* Sample Beginning:: @dots{}
+@dots{}
+@@end detailmenu
+@@end menu
+@end group
+@end example
+
+
+@node Global Document Commands
+@section Global Document Commands
+@cindex Global Document Commands
+
+Besides the basic commands mentioned in the previous sections, here are
+additional commands which affect the document as a whole. They are
+generally all given before the Top node, if they are given at all.
+
+@menu
+* documentdescription:: Document summary for the HTML output.
+* setchapternewpage:: Start chapters on right-hand pages.
+* paragraphindent:: Specify paragraph indentation.
+* firstparagraphindent:: Suppress indentation of the first paragraph.
+* exampleindent:: Specify environment indentation.
+@end menu
+
+
+@node documentdescription
+@subsection @code{@@documentdescription}: Summary Text
+@cindex Document description
+@cindex Description of document
+@cindex Summary of document
+@cindex Abstract of document
+@cindex <meta> HTML tag, and document description
+@findex documentdescription
+
+When producing HTML output for a document, @command{makeinfo} writes a
+@samp{<meta>} element in the @samp{<head>} to give some idea of the
+content of the document. By default, this @dfn{description} is the title
+of the document, taken from the @code{@@settitle} command
+(@pxref{settitle}). To change this, use the @code{@@documentdescription}
+environment, as in:
+
+@example
+@@documentdescription
+descriptive text.
+@@end documentdescription
+@end example
+
+@noindent
+This will produce the following output in the @samp{<head>} of the HTML:
+
+@example
+<meta name=description content="descriptive text.">
+@end example
+
+@code{@@documentdescription} must be specified before the first node of
+the document.
+
+
+@node setchapternewpage
+@subsection @code{@@setchapternewpage}:
+@cindex Starting chapters
+@cindex Pages, starting odd
+@findex setchapternewpage
+
+In an officially bound book, text is usually printed on both sides of
+the paper, chapters start on right-hand pages, and right-hand pages have
+odd numbers. But in short reports, text often is printed only on one
+side of the paper. Also in short reports, chapters sometimes do not
+start on new pages, but are printed on the same page as the end of the
+preceding chapter, after a small amount of vertical whitespace.
+
+You can use the @code{@@setchapternewpage} command with various
+arguments to specify how @TeX{} should start chapters and whether it
+should format headers for printing on one or both sides of the paper
+(single-sided or double-sided printing).
+
+Write the @code{@@setchapternewpage} command at the beginning of a
+line followed by its argument.
+
+For example, you would write the following to cause each chapter to
+start on a fresh odd-numbered page:
+
+@example
+@@setchapternewpage odd
+@end example
+
+You can specify one of three alternatives with the
+@code{@@setchapternewpage} command:
+
+@table @asis
+
+@item @code{@@setchapternewpage off}
+Cause @TeX{} to typeset a new chapter on the same page as the last
+chapter, after skipping some vertical whitespace. Also, cause @TeX{} to
+format page headers for single-sided printing.
+
+@item @code{@@setchapternewpage on}
+Cause @TeX{} to start new chapters on new pages and to format page
+headers for single-sided printing. This is the form most often used for
+short reports or personal printing. This is the default.
+
+@item @code{@@setchapternewpage odd}
+Cause @TeX{} to start new chapters on new, odd-numbered pages
+(right-handed pages) and to typeset for double-sided printing. This is
+the form most often used for books and manuals.
+@end table
+
+Texinfo does not have an @code{@@setchapternewpage even} command,
+because there is no printing tradition of starting chapters or books on
+an even-numbered page.
+
+If you don't like the default headers that @code{@@setchapternewpage}
+sets, you can explicit control them with the @code{@@headings} command.
+@xref{headings on off, , The @code{@@headings} Command}.
+
+At the beginning of a manual or book, pages are not numbered---for
+example, the title and copyright pages of a book are not numbered. By
+convention, table of contents and frontmatter pages are numbered with
+roman numerals and not in sequence with the rest of the document.
+
+Since an Info file does not have pages, the @code{@@setchapternewpage}
+command has no effect on it.
+
+We recommend not including any @code{@@setchapternewpage} command in
+your manual sources at all, since the desired output is not intrinsic to
+the document. For a particular hard copy run, if you don't want the
+default option (no blank pages, same headers on all pages) use the
+@option{--texinfo} option to @command{texi2dvi} to specify the output
+you want.
+
+
+@node paragraphindent
+@subsection @code{@@paragraphindent}: Paragraph Indenting
+@cindex Indenting paragraphs, control of
+@cindex Paragraph indentation control
+@findex paragraphindent
+
+The Texinfo processors may insert whitespace at the beginning of the
+first line of each paragraph, thereby indenting that paragraph. You can
+use the @code{@@paragraphindent} command to specify this indentation.
+Write an @code{@@paragraphindent} command at the beginning of a line
+followed by either @samp{asis} or a number:
+
+@example
+@@paragraphindent @var{indent}
+@end example
+
+The indentation is according to the value of @var{indent}:
+
+@table @asis
+@item @code{asis}
+Do not change the existing indentation (not implemented in @TeX{}).
+
+@item @code{none}
+@itemx 0
+Omit all indentation.
+
+@item @var{n}
+Indent by @var{n} space characters in Info output, by @var{n} ems in
+@TeX{}.
+
+@end table
+
+The default value of @var{indent} is 3. @code{@@paragraphindent} is
+ignored for HTML output.
+
+It is best to write the @code{@@paragraphindent} command before the
+end-of-header line at the beginning of a Texinfo file, so the region
+formatting commands indent paragraphs as specified. @xref{Start of
+Header}.
+
+A peculiarity of the @code{texinfo-format-buffer} and
+@code{texinfo-format-region} commands is that they do not indent (nor
+fill) paragraphs that contain @code{@@w} or @code{@@*} commands.
+
+
+@node firstparagraphindent
+@subsection @code{@@firstparagraphindent}: Indenting After Headings
+@cindex First paragraph, suppressing indentation of
+@cindex Suppressing first paragraph indentation
+@cindex Preventing first paragraph indentation
+@cindex Indenting, suppressing of first paragraph
+@cindex Headings, indentation after
+@findex firstparagraphindent
+
+As you can see in the present manual, the first paragraph in any
+section is not indented by default. Typographically, indentation is a
+paragraph separator, which means that it is unnecessary when a new
+section begins. This indentation is controlled with the
+@code{@@firstparagraphindent} command:
+
+@example
+@@firstparagraphindent @var{word}
+@end example
+
+The first paragraph after a heading is indented according to the value
+of @var{word}:
+
+@table @asis
+@item @code{none}
+Prevents the first paragraph from being indented (default).
+This option is ignored by @command{makeinfo} if
+@code{@@paragraphindent asis} is in effect.
+
+@item @code{insert}
+Include normal paragraph indentation. This respects the paragraph
+indentation set by a @code{@@paragraphindent} command
+(@pxref{paragraphindent}).
+@end table
+
+For HTML and XML output, the @code{@@firstparagraphindent} setting is
+ignored.
+
+It is best to write the @code{@@paragraphindent} command before the
+end-of-header line at the beginning of a Texinfo file, so the region
+formatting commands indent paragraphs as specified. @xref{Start of
+Header}.
+
+
+@node exampleindent
+@subsection @code{@@exampleindent}: Environment Indenting
+@cindex Indenting environments
+@cindex Environment indentation
+@cindex Example indentation
+@findex exampleindent
+
+The Texinfo processors indent each line of @code{@@example} and similar
+environments. You can use the @code{@@exampleindent} command to specify
+this indentation. Write an @code{@@exampleindent} command at the
+beginning of a line followed by either @samp{asis} or a number:
+
+@example
+@@exampleindent @var{indent}
+@end example
+
+@code{@@exampleindent} is ignored for HTML output. Otherwise, the
+indentation is according to the value of @var{indent}:
+
+@table @asis
+@item @code{asis}
+Do not change the existing indentation (not implemented in @TeX{}).
+
+@item 0
+Omit all indentation.
+
+@item @var{n}
+Indent environments by @var{n} space characters in Info output, by
+@var{n} ems in @TeX{}.
+
+@end table
+
+The default value of @var{indent} is 5 spaces in Info, and 0.4@dmn{in}
+in @TeX{}, which is somewhat less. (The reduction is to help @TeX{}
+fit more characters onto physical lines.)
+
+It is best to write the @code{@@exampleindent} command before the
+end-of-header line at the beginning of a Texinfo file, so the region
+formatting commands indent paragraphs as specified. @xref{Start of
+Header}.
+
+
+@node Software Copying Permissions
+@section Software Copying Permissions
+@cindex Software copying permissions
+@cindex Copying software
+@cindex Distribution
+@cindex License agreement
+
+If the Texinfo file has a section containing the ``General Public
+License'' and the distribution information and a warranty disclaimer for
+the software that is documented, we recommend placing this right after
+the `Top' node. The General Public License is very important to Project
+GNU software. It ensures that you and others will continue to have a
+right to use and share the software.
+
+The copying and distribution information and the disclaimer are followed
+by an introduction or else by the first chapter of the manual.
+
+@cindex Introduction, as part of file
+Although an introduction is not a required part of a Texinfo file, it
+is very helpful. Ideally, it should state clearly and concisely what
+the file is about and who would be interested in reading it. In
+general, an introduction would follow the licensing and distribution
+information, although sometimes people put it earlier in the document.
+
+
+@node Ending a File
+@chapter Ending a Texinfo File
+@cindex Ending a Texinfo file
+@cindex Texinfo file ending
+@cindex File ending
+@findex bye
+
+The end of a Texinfo file should include commands to create indices,
+and the @code{@@bye} command to mark the last line to be processed.
+
+For example:
+
+@example
+@@node Index
+@@unnumbered Index
+
+@@printindex cp
+
+@@bye
+@end example
+
+@menu
+* Printing Indices & Menus:: How to print an index in hardcopy and
+ generate index menus in Info.
+* File End:: How to mark the end of a file.
+@end menu
+
+
+@node Printing Indices & Menus
+@section Printing Indices and Menus
+@cindex Printing an index
+@cindex Indices, printing and menus
+@cindex Generating menus with indices
+@cindex Menus generated with indices
+
+To print an index means to include it as part of a manual or Info file.
+This does not happen automatically just because you use @code{@@cindex}
+or other index-entry generating commands in the Texinfo file; those just
+cause the raw data for the index to be accumulated. To generate an
+index, you must include the @code{@@printindex} command at the place in
+the document where you want the index to appear. Also, as part of the
+process of creating a printed manual, you must run a program called
+@code{texindex} (@pxref{Hardcopy}) to sort the raw data to produce a
+sorted index file. The sorted index file is what is actually used to
+print the index.
+
+Texinfo offers six separate types of predefined index, which suffice
+in most cases. @xref{Indices}, for information on this, as well
+defining your own new indices, combining indices, and, most
+importantly advice on writing the actual index entries. This section
+focuses on printing indices, which is done with the
+@code{@@printindex} command.
+
+@findex printindex
+@code{@@printindex} takes one argument, a two-letter index
+abbreviation. It reads the corresponding sorted index file (for
+printed output), and formats it appropriately into an index.
+
+The @code{@@printindex} command does not generate a chapter heading
+for the index, since different manuals have different needs.
+Consequently, you should precede the @code{@@printindex} command with
+a suitable section or chapter command (usually @code{@@appendix} or
+@code{@@unnumbered}) to supply the chapter heading and put the index
+into the table of contents. Precede the chapter heading with an
+@code{@@node} line as usual.
+
+For example:
+
+@smallexample
+@group
+@@node Variable Index
+@@unnumbered Variable Index
+
+@@printindex vr
+@end group
+
+@group
+@@node Concept Index
+@@unnumbered Concept Index
+
+@@printindex cp
+@end group
+@end smallexample
+
+If you have more than one index, we recommend placing the concept index last.
+
+@itemize
+@item
+In printed output, @code{@@printindex} produces a traditional
+two-column index, with dot leaders between the index terms and page
+numbers.
+
+@item
+In Info output, @code{@@printindex} produces a special menu containing
+the line number of the entry, relative to the start of the node. Info
+readers can use this to go to the exact line of an entry, not just the
+containing node. (Older Info readers will just go to the node.)
+Here's an example:
+
+@smallexample
+* First index entry: Top. (line 7)
+@end smallexample
+
+@noindent The actual number of spaces is variable, to right-justify
+the line number; it's been reduced here to make the line fit in the
+printed manual.
+
+@item
+In plain text output, @code{@@printindex} produces the same menu, but
+the line numbers are relative to the start of the file, since that's
+more convenient for that format.
+
+@item
+In HTML and Docbook output, @code{@@printindex} produces links
+to the index entries.
+
+@item
+In XML output, it simply records the index to be printed.
+@end itemize
+
+It's not possible to generate an index when writing to standard
+output; @command{makeinfo} generates a warning in this case.
+
+
+@node File End
+@section @code{@@bye} File Ending
+@findex bye
+
+An @code{@@bye} command terminates Texinfo processing. None of the
+formatters read anything following @code{@@bye}. The @code{@@bye}
+command should be on a line by itself.
+
+If you wish, you may follow the @code{@@bye} line with notes. These
+notes will not be formatted and will not appear in either Info or a
+printed manual; it is as if text after @code{@@bye} were within
+@code{@@ignore} @dots{} @code{@@end ignore}. Also, you may follow the
+@code{@@bye} line with a local variables list for Emacs.
+@xref{Compile-Command, , Using Local Variables and the Compile Command},
+for more information.
+
+
+@node Structuring
+@chapter Chapter Structuring
+@cindex Chapter structuring
+@cindex Structuring of chapters
+
+The @dfn{chapter structuring} commands divide a document into a hierarchy of
+chapters, sections, subsections, and subsubsections. These commands
+generate large headings; they also provide information for the table
+of contents of a printed manual (@pxref{Contents, , Generating a Table
+of Contents}).@refill
+
+The chapter structuring commands do not create an Info node structure,
+so normally you should put an @code{@@node} command immediately before
+each chapter structuring command (@pxref{Nodes}). The only time you
+are likely to use the chapter structuring commands without using the
+node structuring commands is if you are writing a document that
+contains no cross references and will never be transformed into Info
+format.@refill
+
+It is unlikely that you will ever write a Texinfo file that is
+intended only as an Info file and not as a printable document. If you
+do, you might still use chapter structuring commands to create a
+heading at the top of each node---but you don't need to.@refill
+
+@menu
+* Tree Structuring:: A manual is like an upside down tree @dots{}
+* Structuring Command Types:: How to divide a manual into parts.
+* makeinfo top:: The @code{@@top} command, part of the `Top' node.
+* chapter::
+* unnumbered & appendix::
+* majorheading & chapheading::
+* section::
+* unnumberedsec appendixsec heading::
+* subsection::
+* unnumberedsubsec appendixsubsec subheading::
+* subsubsection:: Commands for the lowest level sections.
+* Raise/lower sections:: How to change commands' hierarchical level.
+@end menu
+
+
+@node Tree Structuring
+@section Tree Structure of Sections
+@cindex Tree structuring
+
+A Texinfo file is usually structured like a book with chapters,
+sections, subsections, and the like. This structure can be visualized
+as a tree (or rather as an upside-down tree) with the root at the top
+and the levels corresponding to chapters, sections, subsection, and
+subsubsections.@refill
+
+Here is a diagram that shows a Texinfo file with three chapters,
+each of which has two sections.@refill
+
+@example
+@group
+ Top
+ |
+ -------------------------------------
+ | | |
+ Chapter 1 Chapter 2 Chapter 3
+ | | |
+ -------- -------- --------
+ | | | | | |
+Section Section Section Section Section Section
+ 1.1 1.2 2.1 2.2 3.1 3.2
+
+@end group
+@end example
+
+In a Texinfo file that has this structure, the beginning of Chapter 2
+looks like this:@refill
+
+@example
+@group
+@@node Chapter 2, Chapter 3, Chapter 1, top
+@@chapter Chapter 2
+@end group
+@end example
+
+The chapter structuring commands are described in the sections that
+follow; the @code{@@node} and @code{@@menu} commands are described in
+following chapters. (@xref{Nodes}, and see @ref{Menus}.)@refill
+
+
+@node Structuring Command Types
+@section Structuring Command Types
+
+The chapter structuring commands fall into four groups or series, each
+of which contains structuring commands corresponding to the
+hierarchical levels of chapters, sections, subsections, and
+subsubsections.@refill
+
+The four groups are the @code{@@chapter} series, the
+@code{@@unnumbered} series, the @code{@@appendix} series, and the
+@code{@@heading} series.@refill
+
+Each command produces titles that have a different appearance on the
+printed page or Info file; only some of the commands produce
+titles that are listed in the table of contents of a printed book or
+manual.@refill
+
+@itemize @bullet
+@item
+The @code{@@chapter} and @code{@@appendix} series of commands produce
+numbered or lettered entries both in the body of a printed work and in
+its table of contents.@refill
+
+@item
+The @code{@@unnumbered} series of commands produce unnumbered entries
+both in the body of a printed work and in its table of contents. The
+@code{@@top} command, which has a special use, is a member of this
+series (@pxref{makeinfo top, , @code{@@top}}). An @code{@@unnumbered}
+section should be associated with a node and be a normal part of the
+document structure.
+
+@item
+The @code{@@heading} series of commands produce simple unnumbered
+headings that do not appear in a table of contents, are not associated
+with nodes, and cannot be cross-referenced. The heading commands
+never start a new page.
+
+@item
+The @code{@@majorheading} command is similar to @code{@@chapheading},
+except that it generates a larger vertical whitespace before the
+heading.
+
+@item
+When an @code{@@setchapternewpage} command says to do so, the
+@code{@@chapter}, @code{@@unnumbered}, and @code{@@appendix} commands
+start new pages in the printed manual; the @code{@@heading} commands
+do not.@refill
+@end itemize
+
+Here are the four groups of chapter structuring commands:
+
+@tex
+{\globaldefs = 1 \smallfonts}
+@end tex
+
+@multitable @columnfractions .19 .30 .29 .22
+@item @tab @tab @tab No new page
+@item @i{Numbered} @tab @i{Unnumbered} @tab @i{Lettered/numbered} @tab @i{Unnumbered}
+@item In contents @tab In contents @tab In contents @tab Not in contents
+@item @tab @code{@@top} @tab @tab @code{@@majorheading}
+@item @code{@@chapter} @tab @code{@@unnumbered} @tab @code{@@appendix} @tab @code{@@chapheading}
+@item @code{@@section} @tab @code{@@unnumberedsec} @tab @code{@@appendixsec} @tab @code{@@heading}
+@item @code{@@subsection} @tab @code{@@unnumberedsubsec} @tab @code{@@appendixsubsec} @tab @code{@@subheading}
+@item @code{@@subsubsection} @tab @code{@@unnumberedsubsubsec} @tab @code{@@appendixsubsubsec} @tab @code{@@subsubheading}
+@end multitable
+@tex
+{\globaldefs = 1 \textfonts}
+@end tex
+
+
+@node makeinfo top
+@section @code{@@top}
+
+The @code{@@top} command is a special sectioning command that you use
+only after an @samp{@@node Top} line at the beginning of a Texinfo file.
+The @code{@@top} command tells the @code{makeinfo} formatter which node
+is the `Top' node, so it can use it as the root of the node tree if your
+manual uses implicit node pointers. It has the same typesetting effect as
+@code{@@unnumbered} (@pxref{unnumbered & appendix, , @code{@@unnumbered}
+and @code{@@appendix}}). For detailed information, see @ref{makeinfo
+top command, , The @code{@@top} Command}.
+
+The @code{@@top} node and its menu (if any) is conventionally wrapped in
+an @code{@@ifnottex} conditional so that it will appear only in Info and
+HTML output, not @TeX{}.
+
+
+@node chapter
+@comment node-name, next, previous, up
+@section @code{@@chapter}
+@findex chapter
+
+@code{@@chapter} identifies a chapter in the document. Write the
+command at the beginning of a line and follow it on the same line by
+the title of the chapter.@refill
+
+For example, this chapter in this manual is entitled ``Chapter
+Structuring''; the @code{@@chapter} line looks like this:@refill
+
+@example
+@@chapter Chapter Structuring
+@end example
+
+In @TeX{}, the @code{@@chapter} command creates a chapter in the
+document, specifying the chapter title. The chapter is numbered
+automatically.@refill
+
+In Info, the @code{@@chapter} command causes the title to appear on a
+line by itself, with a line of asterisks inserted underneath. Thus,
+in Info, the above example produces the following output:@refill
+
+@example
+Chapter Structuring
+*******************
+@end example
+
+@findex centerchap
+Texinfo also provides a command @code{@@centerchap}, which is analogous
+to @code{@@unnumbered}, but centers its argument in the printed output.
+This kind of stylistic choice is not usually offered by Texinfo.
+@c but the Hacker's Dictionary wanted it ...
+
+
+@node unnumbered & appendix
+@section @code{@@unnumbered} and @code{@@appendix}
+@findex unnumbered
+@findex appendix
+
+Use the @code{@@unnumbered} command to create a chapter that appears
+in a printed manual without chapter numbers of any kind. Use the
+@code{@@appendix} command to create an appendix in a printed manual
+that is labelled by letter (`A', `B', @dots{}) instead of by number.
+
+Write an @code{@@appendix} or @code{@@unnumbered} command at the
+beginning of a line and follow it on the same line by the title, as
+you would if you were creating a chapter.
+
+
+@node majorheading & chapheading
+@section @code{@@majorheading}, @code{@@chapheading}
+@findex majorheading
+@findex chapheading
+
+The @code{@@majorheading} and @code{@@chapheading} commands put
+chapter-like headings in the body of a document.@refill
+
+However, neither command causes @TeX{} to produce a numbered heading
+or an entry in the table of contents; and neither command causes
+@TeX{} to start a new page in a printed manual.@refill
+
+In @TeX{}, an @code{@@majorheading} command generates a larger vertical
+whitespace before the heading than an @code{@@chapheading} command but
+is otherwise the same.
+
+In Info,
+the @code{@@majorheading} and
+@code{@@chapheading} commands are equivalent to
+@code{@@chapter}: the title is printed on a line by itself with a line
+of asterisks underneath. (@xref{chapter, , @code{@@chapter}}.)@refill
+
+
+@node section
+@section @code{@@section}
+@findex section
+
+A @code{@@section} command identifies a section within a chapter unit,
+whether created with @code{@@chapter}, @code{@@unnumbered}, or
+@code{@@appendix}, following the numbering scheme of the chapter-level
+command. Thus, within a @code{@@chapter} chapter numbered `1', the
+section is numbered like `1.2'; within an @code{@@appendix}
+``chapter'' labeled `A', the section is numbered like `A.2'; within an
+@code{@@unnumbered} chapter, the section gets no number.
+
+For example, this section is headed with an @code{@@section} command
+and looks like this in the Texinfo file:
+
+@example
+@@section @@code@{@@@@section@}
+@end example
+
+To create a section, write the @code{@@section} command at the
+beginning of a line and follow it on the same line by the section
+title. The output is underlined with @samp{=} in Info.
+
+Thus,
+
+@example
+@@section This is a section
+@end example
+
+@noindent
+might produce the following in Info:
+
+@example
+@group
+5.7 This is a section
+=====================
+@end group
+@end example
+
+
+@node unnumberedsec appendixsec heading
+@section @code{@@unnumberedsec}, @code{@@appendixsec}, @code{@@heading}
+@findex unnumberedsec
+@findex appendixsec
+@findex heading
+
+The @code{@@unnumberedsec}, @code{@@appendixsec}, and @code{@@heading}
+commands are, respectively, the unnumbered, appendix-like, and
+heading-like equivalents of the @code{@@section} command, as described
+in the previous section.
+
+@table @code
+@item @@unnumberedsec
+The @code{@@unnumberedsec} command may be used within an
+unnumbered chapter or within a regular chapter or appendix to
+provide an unnumbered section.@refill
+
+@item @@appendixsec
+@itemx @@appendixsection
+@code{@@appendixsection} is a longer spelling of the
+@code{@@appendixsec} command; the two are synonymous.@refill
+@findex appendixsection
+
+Conventionally, the @code{@@appendixsec} or @code{@@appendixsection}
+command is used only within appendices.@refill
+
+@item @@heading
+You may use the @code{@@heading} command anywhere you wish for a
+section-style heading that will not appear in the table of contents.@refill
+@end table
+
+@code{@@unnumberedsec} and @code{@@appendixsec} do not need to be used
+in ordinary circumstances, because @code{@@section} may also be used
+within @code{@@unnumbered} and @code{@@appendix} chapters; again, see
+the previous section.
+
+
+@node subsection
+@section The @code{@@subsection} Command
+@findex subsection
+
+Subsections are to sections as sections are to chapters.
+(@xref{section, , @code{@@section}}.) In Info, subsection titles are
+underlined with @samp{-}. For example,
+
+@example
+@@subsection This is a subsection
+@end example
+
+@noindent
+produces
+
+@example
+@group
+1.2.3 This is a subsection
+--------------------------
+@end group
+@end example
+
+In a printed manual, subsections are listed in the table of contents
+and are numbered three levels deep.@refill
+
+
+@node unnumberedsubsec appendixsubsec subheading
+@section The @code{@@subsection}-like Commands
+@cindex Subsection-like commands
+@findex unnumberedsubsec
+@findex appendixsubsec
+@findex subheading
+
+The @code{@@unnumberedsubsec}, @code{@@appendixsubsec}, and
+@code{@@subheading} commands are, respectively, the unnumbered,
+appendix-like, and heading-like equivalents of the @code{@@subsection}
+command. (@xref{subsection, , @code{@@subsection}}.)
+
+In Info, the @code{@@subsection}-like commands generate a title
+underlined with hyphens. In a printed manual, an @code{@@subheading}
+command produces a heading like that of a subsection except that it is
+not numbered and does not appear in the table of contents. Similarly,
+an @code{@@unnumberedsubsec} command produces an unnumbered heading like
+that of a subsection and an @code{@@appendixsubsec} command produces a
+subsection-like heading labelled with a letter and numbers; both of
+these commands produce headings that appear in the table of
+contents.
+
+@code{@@unnumberedsubsec} and @code{@@appendixsubsec} do not need to
+be used in ordinary circumstances, because @code{@@subsection} may
+also be used within sections of @code{@@unnumbered} and
+@code{@@appendix} chapters (@pxref{section,,@code{section}}).
+
+
+@node subsubsection
+@section The `subsub' Commands
+@cindex Subsub commands
+@findex subsubsection
+@findex unnumberedsubsubsec
+@findex appendixsubsubsec
+@findex subsubheading
+
+The fourth and lowest level sectioning commands in Texinfo are the
+`subsub' commands. They are:@refill
+
+@table @code
+@item @@subsubsection
+Subsubsections are to subsections as subsections are to sections.
+(@xref{subsection, , @code{@@subsection}}.) In a printed manual,
+subsubsection titles appear in the table of contents and are numbered
+four levels deep.@refill
+
+@item @@unnumberedsubsubsec
+Unnumbered subsubsection titles appear in the table of contents of a
+printed manual, but lack numbers. Otherwise, unnumbered
+subsubsections are the same as subsubsections. In Info, unnumbered
+subsubsections look exactly like ordinary subsubsections.@refill
+
+@item @@appendixsubsubsec
+Conventionally, appendix commands are used only for appendices and are
+lettered and numbered appropriately in a printed manual. They also
+appear in the table of contents. In Info, appendix subsubsections look
+exactly like ordinary subsubsections.@refill
+
+@item @@subsubheading
+The @code{@@subsubheading} command may be used anywhere that you need
+a small heading that will not appear in the table of contents. In
+Info, subsubheadings look exactly like ordinary subsubsection
+headings.@refill
+@end table
+
+@code{@@unnumberedsubsubsec} and @code{@@appendixsubsubsec} do not
+need to be used in ordinary circumstances, because
+@code{@@subsubsection} may also be used within subsections of
+@code{@@unnumbered} and @code{@@appendix} chapters
+(@pxref{section,,@code{section}}).
+
+
+In Info, `subsub' titles are underlined with periods.
+For example,@refill
+
+@example
+@@subsubsection This is a subsubsection
+@end example
+
+@noindent
+produces
+
+@example
+@group
+1.2.3.4 This is a subsubsection
+...............................
+@end group
+@end example
+
+
+@node Raise/lower sections
+@section @code{@@raisesections} and @code{@@lowersections}
+@findex raisesections
+@findex lowersections
+@cindex Raising and lowering sections
+@cindex Lowering and raising sections
+@cindex Sections, raising and lowering
+
+The @code{@@raisesections} and @code{@@lowersections} commands
+implicitly raise and lower the hierarchical level of following
+chapters, sections and the other sectioning commands.
+
+That is, the @code{@@raisesections} command changes sections to
+chapters, subsections to sections, and so on. Conversely, the
+@code{@@lowersections} command changes chapters to sections, sections
+to subsections, and so on. Thus, an @code{@@lowersections} command
+cancels an @code{@@raisesections} command, and vice versa.
+
+@cindex Include files, and section levels
+You can use @code{@@lowersections} to include text written as an outer
+or standalone Texinfo file in another Texinfo file as an inner,
+included file. Typical usage looks like this:
+
+@example
+@@lowersections
+@@include somefile.texi
+@@raisesections
+@end example
+
+@noindent (Without the @code{@@raisesections}, all the subsequent
+sections in the document would be lowered.)
+
+If the included file being lowered has a @code{@@top} node, you'll
+need to conditionalize its inclusion with a flag (@pxref{set value}).
+
+Another difficulty can arise with documents that use the (recommended)
+feature of @command{makeinfo} for implicitly determining node
+pointers. Since @command{makeinfo} must assume a hierarchically
+organized document to determine the pointers, you cannot just
+arbitrarily sprinkle @code{@@raisesections} and @code{@@lowersections}
+commands in the document. The final result has to have menus that
+take the raising and lowering into account. Therefore, as a practical
+matter, you generally only want to raise or lower large chunks,
+usually in external files as shown above.
+
+Repeated use of the commands continue to raise or lower the
+hierarchical level a step at a time. An attempt to raise above
+`chapter' reproduces chapter commands; an attempt to lower below
+`subsubsection' reproduces subsubsection commands. Also, lowered
+subsubsections and raised chapters will not work with
+@command{makeinfo}'s feature of implicitly determining node pointers,
+since the menu structure won't be correct.
+
+Write each @code{@@raisesections} and @code{@@lowersections} command
+on a line of its own.
+
+
+@node Nodes
+@chapter Nodes
+
+@dfn{Nodes} are the primary segments of a Texinfo file. They do not
+in and of themselves impose a hierarchical or any other kind of
+structure on a file. Nodes contain @dfn{node pointers} that name
+other nodes, and can contain @dfn{menus} which are lists of nodes. In
+Info, the movement commands can carry you to a pointed-to node or to a
+node listed in a menu.
+
+Node pointers and menus provide structure for Info files just as
+chapters, sections, subsections, and the like, provide structure for
+printed books.
+
+Because node names are used in cross-references, it is not desirable
+to casually change them. Such name changes invalidate references from
+other manuals, from mail archives, and so on.
+
+@menu
+* Two Paths:: Different commands to structure
+ Info output and printed output.
+* Node Menu Illustration:: A diagram, and sample nodes and menus.
+* node:: Creating nodes, in detail.
+* makeinfo Pointer Creation:: Letting makeinfo determine node pointers.
+* anchor:: Defining arbitrary cross-reference targets.
+@end menu
+
+
+@node Two Paths
+@section Two Paths
+
+The node and menu commands and the chapter structuring commands are
+technically independent of each other:
+
+@itemize @bullet
+@item
+In Info, node and menu commands provide structure. The chapter
+structuring commands generate headings with different kinds of
+underlining---asterisks for chapters, hyphens for sections, and so on;
+they do nothing else.@refill
+
+@item
+In @TeX{}, the chapter structuring commands generate chapter and section
+numbers and tables of contents. The node and menu commands provide
+information for cross references; they do nothing else.@refill
+@end itemize
+
+You can use node pointers and menus to structure an Info file any way
+you want; and you can write a Texinfo file so that its Info output has a
+different structure than its printed output. However, virtually all
+Texinfo files are written such that the structure for the Info output
+corresponds to the structure for the printed output. It is neither
+convenient nor understandable to the reader to do otherwise.@refill
+
+Generally, printed output is structured in a tree-like hierarchy in
+which the chapters are the major limbs from which the sections branch
+out. Similarly, node pointers and menus are organized to create a
+matching structure in the Info output.@refill
+
+
+@node Node Menu Illustration
+@section Node and Menu Illustration
+
+Here is a copy of the diagram shown earlier that illustrates a Texinfo
+file with three chapters, each of which contains two sections.@refill
+
+The ``root'' is at the top of the diagram and the ``leaves'' are at the
+bottom. This is how such a diagram is drawn conventionally; it
+illustrates an upside-down tree. For this reason, the root node is
+called the `Top' node, and `Up' node pointers carry you closer to the
+root.@refill
+
+@example
+@group
+ Top
+ |
+ -------------------------------------
+ | | |
+ Chapter 1 Chapter 2 Chapter 3
+ | | |
+ -------- -------- --------
+ | | | | | |
+Section Section Section Section Section Section
+ 1.1 1.2 2.1 2.2 3.1 3.2
+@end group
+@end example
+
+The fully-written command to start Chapter 2 would be this:
+
+@example
+@group
+@@node Chapter 2, Chapter 3, Chapter 1, Top
+@@comment node-name, next, previous, up
+@end group
+@end example
+
+@noindent
+This @code{@@node} line says that the name of this node is ``Chapter
+2'', the name of the `Next' node is ``Chapter 3'', the name of the
+`Previous' node is ``Chapter 1'', and the name of the `Up' node is
+``Top''. You can omit writing out these node names if your document is
+hierarchically organized (@pxref{makeinfo Pointer Creation}), but the
+pointer relationships still obtain.
+
+@quotation Note
+@strong{Please Note:} `Next' refers to the next node at the same
+hierarchical level in the manual, not necessarily to the next node
+within the Texinfo file. In the Texinfo file, the subsequent node may
+be at a lower level---a section-level node most often follows a
+chapter-level node, for example. `Next' and `Previous' refer to nodes
+at the @emph{same} hierarchical level. (The `Top' node contains the
+exception to this rule. Since the `Top' node is the only node at that
+level, `Next' refers to the first following node, which is almost always
+a chapter or chapter-level node.)@refill
+@end quotation
+
+To go to Sections 2.1 and 2.2 using Info, you need a menu inside Chapter
+2. (@xref{Menus}.) You would write the menu just
+before the beginning of Section 2.1, like this:@refill
+
+@example
+@group
+ @@menu
+ * Sect. 2.1:: Description of this section.
+ * Sect. 2.2::
+ @@end menu
+@end group
+@end example
+
+Write the node for Sect. 2.1 like this:@refill
+
+@example
+@group
+ @@node Sect. 2.1, Sect. 2.2, Chapter 2, Chapter 2
+ @@comment node-name, next, previous, up
+@end group
+@end example
+
+In Info format, the `Next' and `Previous' pointers of a node usually
+lead to other nodes at the same level---from chapter to chapter or from
+section to section (sometimes, as shown, the `Previous' pointer points
+up); an `Up' pointer usually leads to a node at the level above (closer
+to the `Top' node); and a `Menu' leads to nodes at a level below (closer
+to `leaves'). (A cross reference can point to a node at any level;
+see @ref{Cross References}.)@refill
+
+Usually, an @code{@@node} command and a chapter structuring command are
+used in sequence, along with indexing commands. (You may follow the
+@code{@@node} line with a comment line that reminds you which pointer is
+which.)@refill
+
+Here is the beginning of the chapter in this manual called ``Ending a
+Texinfo File''. This shows an @code{@@node} line followed by a comment
+line, an @code{@@chapter} line, and then by indexing lines.@refill
+
+@example
+@group
+@@node Ending a File, Structuring, Beginning a File, Top
+@@comment node-name, next, previous, up
+@@chapter Ending a Texinfo File
+@@cindex Ending a Texinfo file
+@@cindex Texinfo file ending
+@@cindex File ending
+@end group
+@end example
+
+
+@node node
+@section The @code{@@node} Command
+
+@cindex Node, defined
+@findex node
+
+A @dfn{node} is a segment of text that begins at an @code{@@node}
+command and continues until the next @code{@@node} command. The
+definition of node is different from that for chapter or section. A
+chapter may contain sections and a section may contain subsections;
+but a node cannot contain subnodes; the text of a node continues only
+until the next @code{@@node} command in the file. A node usually
+contains only one chapter structuring command, the one that follows
+the @code{@@node} line. On the other hand, in printed output nodes
+are used only for cross references, so a chapter or section may
+contain any number of nodes. Indeed, a chapter usually contains
+several nodes, one for each section, subsection, and
+subsubsection.
+
+To specify a node, write an @code{@@node} command at the beginning of
+a line, and follow it with up to four arguments, separated by commas,
+on the rest of the same line. The first argument is required; it is
+the name of this node (for details of node names, @pxref{Node Line
+Requirements}). The subsequent arguments are the names of the `Next',
+`Previous', and `Up' pointers, in that order, and may be omitted if
+your Texinfo document is hierarchically organized (@pxref{makeinfo
+Pointer Creation}).
+
+@opindex accesskey@r{, in HTML output}
+Whether the node pointers are specified implicitly or explicitly, the
+HTML output from @command{makeinfo} for each node includes links to
+the `Next', `Previous', and `Up' nodes. The HTML also uses the
+@code{accesskey} attribute with the values @samp{n}, @samp{p}, and
+@samp{u} respectively. This allows people using web browsers to
+follow the nagivation using (typically) @kbd{M-@var{letter}}, e.g.,
+@kbd{M-n} for the `Next' node, from anywhere within the node.
+
+You may insert spaces before each name on the @code{@@node} line if
+you wish; the spaces are ignored. You must write the name of the node
+and (if present) the names of the `Next', `Previous', and `Up'
+pointers all on the same line. Otherwise, the formatters fail.
+(@inforef{Top, info, info}, for more information about nodes in Info.)
+
+Usually, you write one of the chapter-structuring command lines
+immediately after an @code{@@node} line---for example, an
+@code{@@section} or @code{@@subsection} line. (@xref{Structuring
+Command Types}.)
+
+@TeX{} uses @code{@@node} lines to identify the names to use for cross
+references. For this reason, you must write @code{@@node} lines in a
+Texinfo file that you intend to format for printing, even if you do not
+intend to format it for Info. (Cross references, such as the one at the
+end of this sentence, are made with @code{@@xref} and related commands;
+see @ref{Cross References}.)
+
+@menu
+* Node Names:: How to choose node and pointer names.
+* Writing a Node:: How to write an @code{@@node} line.
+* Node Line Tips:: Keep names short.
+* Node Line Requirements:: Keep names unique, without @@-commands.
+* First Node:: How to write a `Top' node.
+* makeinfo top command:: How to use the @code{@@top} command.
+@end menu
+
+
+@node Node Names
+@subsection Choosing Node and Pointer Names
+
+@cindex Node names, choosing
+The name of a node identifies the node (for details of node names,
+@pxref{Node Line Requirements}). The pointers enable you to reach
+other nodes and consist simply of the names of those nodes.
+
+Normally, a node's `Up' pointer contains the name of the node whose
+menu mentions that node. The node's `Next' pointer contains the name
+of the node that follows the present node in that menu and its
+`Previous' pointer contains the name of the node that precedes it in
+that menu. When a node's `Previous' node is the same as its `Up'
+node, both node pointers name the same node.
+
+Usually, the first node of a Texinfo file is the `Top' node, and its
+`Up' and `Previous' pointers point to the @file{dir} file, which
+contains the main menu for all of Info.
+
+The `Top' node itself contains the main or master menu for the manual.
+Also, it is helpful to include a brief description of the manual in the
+`Top' node. @xref{First Node}, for information on how to write the
+first node of a Texinfo file.
+
+Even when you explicitly specify all pointers, that does not mean you
+can write the nodes in the Texinfo source file in an arbitrary order!
+Because @TeX{} processes the file sequentially, irrespective of node
+pointers, you must write the nodes in the order you wish them to appear
+in the output.
+
+
+@node Writing a Node
+@subsection How to Write an @code{@@node} Line
+@cindex Writing an @code{@@node} line
+@cindex @code{@@node} line writing
+@cindex Node line writing
+
+The easiest way to write an @code{@@node} line is to write @code{@@node}
+at the beginning of a line and then the name of the node, like
+this:
+
+@example
+@@node @var{node-name}
+@end example
+
+If you are using GNU Emacs, you can use the update node commands
+provided by Texinfo mode to insert the names of the pointers; or you
+can leave the pointers out of the Texinfo file and let @code{makeinfo}
+insert node pointers into the Info file it creates. (@xref{Texinfo
+Mode}, and @ref{makeinfo Pointer Creation}.)
+
+Alternatively, you can insert the `Next', `Previous', and `Up'
+pointers yourself. If you do this, you may find it helpful to use the
+Texinfo mode keyboard command @kbd{C-c C-c n}. This command inserts
+@samp{@@node} and a comment line listing the names of the pointers in
+their proper order. The comment line helps you keep track of which
+arguments are for which pointers. This comment line is especially useful
+if you are not familiar with Texinfo.
+
+The template for a fully-written-out node line with `Next', `Previous',
+and `Up' pointers looks like this:
+
+@example
+@@node @var{node-name}, @var{next}, @var{previous}, @var{up}
+@end example
+
+The @var{node-name} argument must be present, but the others are
+optional. If you wish to specify some but not others, just insert
+commas as needed, as in: @samp{@@node mynode,,,uppernode}. However,
+we recommend leaving off all the pointers and letting @code{makeinfo}
+determine them, as described above.
+
+If you wish, you can ignore @code{@@node} lines altogether in your first
+draft and then use the @code{texinfo-insert-node-lines} command to
+create @code{@@node} lines for you. However, we do not recommend this
+practice. It is better to name the node itself at the same time that
+you write a segment so you can easily make cross references. A large
+number of cross references are an especially important feature of a good
+Info file.
+
+After you have inserted an @code{@@node} line, you should immediately
+write an @@-command for the chapter or section and insert its name.
+Next (and this is important!), put in several index entries. Usually,
+you will find at least two and often as many as four or five ways of
+referring to the node in the index. Use them all. This will make it
+much easier for people to find the node.
+
+
+@node Node Line Tips
+@subsection @code{@@node} Line Tips
+
+Here are three suggestions:
+
+@itemize @bullet
+@item
+Try to pick node names that are informative but short.@refill
+
+In the Info file, the file name, node name, and pointer names are all
+inserted on one line, which may run into the right edge of the window.
+(This does not cause a problem with Info, but is ugly.)@refill
+
+@item
+Try to pick node names that differ from each other near the beginnings
+of their names. This way, it is easy to use automatic name completion in
+Info.@refill
+
+@item
+By convention, node names are capitalized just as they would be for
+section or chapter titles---initial and significant words are
+capitalized; others are not.@refill
+@end itemize
+
+
+@node Node Line Requirements
+@subsection @code{@@node} Line Requirements
+
+@cindex Node line requirements
+@cindex Restrictions on node names
+Here are several requirements for @code{@@node} lines:
+
+@itemize @bullet
+@cindex Unique nodename requirement
+@cindex Node name must be unique
+@item
+All the node names for a single Info file must be unique.
+
+Duplicates confuse the Info movement commands. This means, for
+example, that if you end every chapter with a summary, you must name
+each summary node differently. You cannot just call each one
+``Summary''. You may, however, duplicate the titles of chapters, sections,
+and the like. Thus you can end each chapter in a book with a section
+called ``Summary'', so long as the node names for those sections are all
+different.
+
+@item
+A pointer name must be the name of a node.
+
+The node to which a pointer points may come before or after the
+node containing the pointer.
+
+@cindex @@-commands in nodename
+@cindex Node name, should not contain @@-commands
+@item
+@@-commands in node names are not allowed. This includes punctuation
+characters that are escaped with a @samp{@@}, such as @code{@@} and
+@code{@{}, and accent commands such as @samp{@@'}. (For a few cases
+when this is useful, Texinfo has limited support for using
+@w{@@-commands} in node names; see @ref{Pointer Validation}.) Perhaps
+this limitation will be removed some day.
+
+@item
+@cindex Colon in nodename
+@cindex Comma in nodename
+@cindex Parentheses in nodename
+@cindex Period in nodename
+@cindex Characters, invalid in node name
+@cindex Invalid characters in node names
+@cindex Node names, invalid characters in
+Unfortunately, you cannot use periods, commas, colons or parentheses
+within a node name; these confuse the Texinfo processors. Perhaps
+this limitation will be removed some day, too.
+
+@need 700
+For example, the following is a section title in this manual:
+
+@smallexample
+@@code@{@@@@unnumberedsec@}, @@code@{@@@@appendixsec@}, @@code@{@@@@heading@}
+@end smallexample
+
+@noindent
+But the corresponding node name lacks the commas and the @@'s:
+
+@smallexample
+unnumberedsec appendixsec heading
+@end smallexample
+
+@cindex Case in node name
+@item
+Case is significant in node names.
+
+@cindex White space in node name
+@cindex Spaces in node name
+Spaces before and after names on the @samp{@@node} line are ignored,
+but spaces ``inside'' a name are significant. For example:
+
+@example
+@@node foo bar,
+@@node foo bar ,
+@@node foo bar ,
+@end example
+
+@noindent all define the same node, @samp{foo bar}. References to the
+node should all use that name, without the leading or trailing spaces,
+but with the internal spaces.
+@end itemize
+
+
+@node First Node
+@subsection The First Node
+@cindex Top node is first
+@cindex First node
+
+The first node of a Texinfo file is the @dfn{Top} node, except in an
+included file (@pxref{Include Files}). The Top node should contain a
+short summary, copying permissions, and a master menu. @xref{The Top
+Node}, for more information on the Top node contents and examples.
+
+Here is a description of the node pointers to be used in the Top node:
+
+@itemize @bullet
+
+@item
+@cindex Up node of Top node
+@cindex (dir) as Up node of Top node
+The Top node (which must be named @samp{top} or @samp{Top}) should have
+as its `Up' node the name of a node in another file, where there is a
+menu that leads to this file. Specify the file name in parentheses.
+
+Usually, all Info files are installed in the same Info directory tree;
+in this case, use @samp{(dir)} as the parent of the Top node; this is
+short for @samp{(dir)top}, and specifies the Top node in the @file{dir}
+file, which contains the main menu for the Info system as a whole.
+
+@item
+@cindex Prev node of Top node
+The `Prev' node of the Top node should also be your @samp{(dir)} file.
+
+@item
+@cindex Next node of Top node
+The `Next' node of the Top node should be the first chapter in your
+document.
+
+@end itemize
+
+@xref{Installing an Info File}, for more information about installing
+an Info file in the @file{info} directory.
+
+It is usually best to leave the pointers off entirely and let the
+tools implicitly define them, with this simple result:
+
+@example
+@@node Top
+@end example
+
+
+@node makeinfo top command
+@subsection The @code{@@top} Sectioning Command
+@findex top @r{(@@-command)}
+
+A special sectioning command, @code{@@top} should be used with the
+@code{@@node Top} line. The @code{@@top} sectioning command tells
+@code{makeinfo} that it marks the `Top' node in the file. It provides
+the information that @code{makeinfo} needs to insert node pointers
+automatically. Write the @code{@@top} command at the beginning of the
+line immediately following the @code{@@node Top} line. Write the title
+on the remaining part of the same line as the @code{@@top} command.
+
+In Info, the @code{@@top} sectioning command causes the title to appear
+on a line by itself, with a line of asterisks inserted underneath, as
+other sectioning commands do.
+
+In @TeX{} and @code{texinfo-format-buffer}, the @code{@@top}
+sectioning command is merely a synonym for @code{@@unnumbered}.
+Neither of these formatters require an @code{@@top} command, and do
+nothing special with it. You can use @code{@@chapter} or
+@code{@@unnumbered} after the @code{@@node Top} line when you use
+these formatters. Also, you can use @code{@@chapter} or
+@code{@@unnumbered} when you use the Texinfo updating commands to
+create or update pointers and menus.
+
+Thus, in practice, a Top node starts like this:
+
+@example
+@@node Top
+@@top Your Manual Title
+@end example
+
+
+@node makeinfo Pointer Creation
+@section Creating Pointers with @code{makeinfo}
+@cindex Creating pointers with @code{makeinfo}
+@cindex Pointer creation with @code{makeinfo}
+@cindex Automatic pointer creation with @code{makeinfo}
+
+The @code{makeinfo} program has a feature for automatically
+determining node pointers for a hierarchically organized document. We
+highly recommend using it.
+
+When you take advantage of this feature, you do not need to write the
+`Next', `Previous', and `Up' pointers after the name of a node.
+However, you must write a sectioning command, such as @code{@@chapter}
+or @code{@@section}, on the line immediately following each truncated
+@code{@@node} line (except that comment lines may intervene).
+
+In addition, you must follow the `Top' @code{@@node} line with a line
+beginning with @code{@@top} to mark the `Top' node in the
+file. @xref{makeinfo top, , @code{@@top}}.
+
+Finally, you must write the name of each node (except for the `Top'
+node) in a menu that is one or more hierarchical levels above the
+node's hierarchical level.
+
+@cindex Detail menu
+@findex detailmenu
+If you use a detailed menu in your master menu (@pxref{Master Menu
+Parts}), mark it with the @code{@@detailmenu @@dots@{@} @@end
+detailmenu} environment, or @command{makeinfo} will get confused,
+typically about the last and/or first node in the document.
+
+This implicit node pointer creation feature in @code{makeinfo}
+relieves you from the need to update menus and pointers manually or
+with Texinfo mode commands. (@xref{Updating Nodes and Menus}.)
+
+In most cases, you will want to take advantage of this feature and not
+redundantly specify node pointers. However, Texinfo documents are not
+required to be organized hierarchically or in fact to contain
+sectioning commands at all (for example, if you never intend the
+document to be printed). The special procedure for handling the short
+text before a menu (@pxref{Menus}) also disables this
+feature, for that group of nodes. In those cases, you will need to
+explicitly specify all pointers.
+
+@node anchor
+@section @code{@@anchor}: Defining Arbitrary Cross-reference Targets
+
+@findex anchor
+@cindex Anchors
+@cindex Cross-reference targets, arbitrary
+@cindex Targets for cross-references, arbitrary
+
+An @dfn{anchor} is a position in your document, labeled so that
+cross-references can refer to it, just as they can to nodes. You create
+an anchor with the @code{@@anchor} command, and give the label as a
+normal brace-delimited argument. For example:
+
+@example
+This marks the @@anchor@{x-spot@}spot.
+@dots{}
+@@xref@{x-spot,,the spot@}.
+@end example
+
+@noindent produces:
+
+@example
+This marks the spot.
+@dots{}
+See [the spot], page 1.
+@end example
+
+As you can see, the @code{@@anchor} command itself produces no output.
+This example defines an anchor `x-spot' just before the word `spot'.
+You can refer to it later with an @code{@@xref} or other cross-reference
+command, as shown. @xref{Cross References}, for details on the
+cross-reference commands.
+
+It is best to put @code{@@anchor} commands just before the position you
+wish to refer to; that way, the reader's eye is led on to the correct
+text when they jump to the anchor. You can put the @code{@@anchor}
+command on a line by itself if that helps readability of the source.
+Whitespace (including newlines) is ignored after @code{@@anchor}.
+
+Anchor names and node names may not conflict. Anchors and nodes are
+given similar treatment in some ways; for example, the @code{goto-node}
+command in standalone Info takes either an anchor name or a node name as
+an argument. (@xref{goto-node,,,info-stnd,GNU Info}.)
+
+Also like node names, anchor names cannot include some characters
+(@pxref{Node Line Requirements}).
+
+
+@node Menus
+@chapter Menus
+@cindex Menus
+@findex menu
+
+@dfn{Menus} contain pointers to subordinate nodes. In online output,
+you use menus to go to such nodes. Menus have no effect in printed
+manuals and do not appear in them.
+
+A node with a menu should not contain much text. If you find yourself
+writing a lot of text before a menu, we generally recommend moving
+most of the text into a new subnode---all but a paragraph or two.
+Otherwise, a reader with a terminal that displays only a few lines may
+miss the menu and its associated text. As a practical matter, it is
+best to locate a menu within 20 or so lines of the beginning of the
+node.
+
+@menu
+* Menu Location:: Menus go at the ends of short nodes.
+* Writing a Menu:: What is a menu?
+* Menu Parts:: A menu entry has three parts.
+* Less Cluttered Menu Entry:: Two part menu entry.
+* Menu Example:: Two and three part menu entries.
+* Other Info Files:: How to refer to a different Info file.
+@end menu
+
+
+@node Menu Location
+@section Menu Location
+@cindex Menu location
+@cindex Location of menus
+
+A menu must be located at the end of a node, without any regular text
+or additional commands between the @code{@@end menu} and the beginning
+of the next node. (As a consequence, there may be at most one menu in
+a node.)
+
+@cindex Info format, and menus
+This is actually a useful restriction, since a reader who uses the
+menu could easily miss any such text. Technically, it is necessary
+because in Info format, there is no marker for the end of a menu, so
+Info-reading programs would have no way to know when the menu ends and
+normal text resumes.
+
+@cindex Hierarchical documents, and menus
+Technically, menus can carry you to any node, regardless of the
+structure of the document; even to nodes in a different Info file.
+However, we do not recommend ever making use of this, because the
+@command{makeinfo} implicit pointer creation feature (@pxref{makeinfo
+Pointer Creation}) and GNU Emacs Texinfo mode updating commands work
+only to create menus of subordinate nodes in a hierarchically
+structured document. Instead, use cross references to refer to
+arbitrary nodes.
+
+In the past, we recommended using a @samp{@@heading} command within an
+@code{@@ifinfo} conditional instead of the normal sectioning commands
+after a very short node with a menu. This had the advantage of making
+the printed output look better, because there was no very short text
+between two headings on the page. But this also does not work with
+@command{makeinfo}'s implicit pointer creation, and it also makes the
+XML output incorrect, since it does not reflect the true document
+structure. So, regrettably, we can no longer recommend this.
+
+
+@node Writing a Menu
+@section Writing a Menu
+@cindex Writing a menu
+@cindex Menu writing
+
+A menu consists of an @code{@@menu} command on a line by itself
+followed by menu entry lines or menu comment lines and then by an
+@code{@@end menu} command on a line by itself.
+
+A menu looks like this:
+
+@example
+@group
+@@menu
+Larger Units of Text
+
+* Files:: All about handling files.
+* Multiples: Buffers. Multiple buffers; editing
+ several files at once.
+@@end menu
+@end group
+@end example
+
+In a menu, every line that begins with an @w{@samp{* }} is a @dfn{menu
+entry}. (Note the space after the asterisk.) A line that does not
+start with an @w{@samp{* }} may also appear in a menu. Such a line is
+not a menu entry but is a menu comment line that appears in the Info
+file. In the example above, the line @samp{Larger Units of Text} is a
+menu comment line; the two lines starting with @w{@samp{* }} are menu
+@cindex Spaces, in menus
+entries. Space characters in a menu are preserved as-is; this allows
+you to format the menu as you wish.
+
+@opindex accesskey@r{, in HTML output}
+In the HTML output from @command{makeinfo}, the @code{accesskey}
+attribute is used with the values @samp{1}@dots{}@samp{9} for the
+first nine entries. This allows people using web browsers to follow
+the first menu entries using (typically) @kbd{M-@var{digit}}, e.g.,
+@kbd{M-1} for the first entry.
+
+
+@node Menu Parts
+@section The Parts of a Menu
+@cindex Parts of a menu
+@cindex Menu parts
+@cindex @code{@@menu} parts
+
+A menu entry has three parts, only the second of which is required:
+
+@enumerate
+@item
+The menu entry name (optional).
+
+@item
+The name of the node (required).
+
+@item
+A description of the item (optional).
+@end enumerate
+
+The template for a generic menu entry looks like this (but see the
+next section for one more possibility):
+
+@example
+* @var{menu-entry-name}: @var{node-name}. @var{description}
+@end example
+
+Follow the menu entry name with a single colon and follow the node name
+with tab, comma, newline, or the two characters period and space
+(@samp{. }).
+
+In Info, a user selects a node with the @kbd{m} (@code{Info-menu})
+command. The menu entry name is what the user types after the @kbd{m}
+command.
+
+The third part of a menu entry is a descriptive phrase or sentence.
+Menu entry names and node names are often short; the description
+explains to the reader what the node is about. A useful description
+complements the node name rather than repeats it. The description,
+which is optional, can spread over two or more lines; if it does, some
+authors prefer to indent the second line while others prefer to align it
+with the first (and all others). It's up to you.
+
+
+@node Less Cluttered Menu Entry
+@section Less Cluttered Menu Entry
+@cindex Two part menu entry
+@cindex Double-colon menu entries
+@cindex Menu entries with two colons
+@cindex Less cluttered menu entry
+@cindex Uncluttered menu entry
+
+When the menu entry name and node name are the same, you can write
+the name immediately after the asterisk and space at the beginning of
+the line and follow the name with two colons.
+
+@need 800
+For example, write
+
+@example
+* Name:: @var{description}
+@end example
+
+@need 800
+@noindent
+instead of
+
+@example
+* Name: Name. @var{description}
+@end example
+
+You should indeed use the node name for the menu entry name whenever
+possible, since it reduces visual clutter in the menu.
+
+
+@node Menu Example
+@section A Menu Example
+@cindex Menu example
+@cindex Example menu
+
+A menu looks like this in Texinfo:@refill
+
+@example
+@group
+@@menu
+* menu entry name: Node name. A short description.
+* Node name:: This form is preferred.
+@@end menu
+@end group
+@end example
+
+@need 800
+@noindent
+This produces:
+
+@example
+@group
+* menu:
+
+* menu entry name: Node name. A short description.
+* Node name:: This form is preferred.
+@end group
+@end example
+
+@need 700
+Here is an example as you might see it in a Texinfo file:@refill
+
+@example
+@group
+@@menu
+Larger Units of Text
+
+* Files:: All about handling files.
+* Multiples: Buffers. Multiple buffers; editing
+ several files at once.
+@@end menu
+@end group
+@end example
+
+@need 800
+@noindent
+This produces:
+
+@example
+@group
+* menu:
+Larger Units of Text
+
+* Files:: All about handling files.
+* Multiples: Buffers. Multiple buffers; editing
+ several files at once.
+@end group
+@end example
+
+In this example, the menu has two entries. @samp{Files} is both a menu
+entry name and the name of the node referred to by that name.
+@samp{Multiples} is the menu entry name; it refers to the node named
+@samp{Buffers}. The line @samp{Larger Units of Text} is a comment; it
+appears in the menu, but is not an entry.@refill
+
+Since no file name is specified with either @samp{Files} or
+@samp{Buffers}, they must be the names of nodes in the same Info file
+(@pxref{Other Info Files, , Referring to Other Info Files}).@refill
+
+@node Other Info Files
+@comment node-name, next, previous, up
+@section Referring to Other Info Files
+@cindex Referring to other Info files
+@cindex Nodes in other Info files
+@cindex Other Info files' nodes
+@cindex Going to other Info files' nodes
+@cindex Info; other files' nodes
+
+You can create a menu entry that enables a reader in Info to go to a
+node in another Info file by writing the file name in parentheses just
+before the node name. In this case, you should use the three-part menu
+entry format, which saves the reader from having to type the file
+name.@refill
+
+@need 800
+The format looks like this:@refill
+
+@example
+@group
+@@menu
+* @var{first-entry-name}:(@var{filename})@var{nodename}. @var{description}
+* @var{second-entry-name}:(@var{filename})@var{second-node}. @var{description}
+@@end menu
+@end group
+@end example
+
+For example, to refer directly to the @samp{Outlining} and
+@samp{Rebinding} nodes in the @cite{Emacs Manual}, you would write a
+menu like this:@refill
+
+@example
+@group
+@@menu
+* Outlining: (emacs)Outline Mode. The major mode for
+ editing outlines.
+* Rebinding: (emacs)Rebinding. How to redefine the
+ meaning of a key.
+@@end menu
+@end group
+@end example
+
+If you do not list the node name, but only name the file, then Info
+presumes that you are referring to the `Top' node.@refill
+
+The @file{dir} file that contains the main menu for Info has menu
+entries that list only file names. These take you directly to the `Top'
+nodes of each Info document. (@xref{Installing an Info File}.)
+
+@need 700
+For example:
+
+@example
+@group
+* Info: (info). Documentation browsing system.
+* Emacs: (emacs). The extensible, self-documenting
+ text editor.
+@end group
+@end example
+
+@noindent
+(The @file{dir} top level directory for the Info system is an Info file,
+not a Texinfo file, but a menu entry looks the same in both types of
+file.)@refill
+
+The GNU Emacs Texinfo mode menu updating commands only work with nodes
+within the current buffer, so you cannot use them to create menus that
+refer to other files. You must write such menus by hand.
+
+
+@node Cross References
+@chapter Cross References
+@cindex Making cross references
+@cindex Cross references
+@cindex References
+
+@dfn{Cross references} are used to refer the reader to other parts of the
+same or different Texinfo files. In Texinfo, nodes and anchors are the
+places to which cross references can refer.
+
+@menu
+* References:: What cross references are for.
+* Cross Reference Commands:: A summary of the different commands.
+* Cross Reference Parts:: A cross reference has several parts.
+* xref:: Begin a reference with `See' @dots{}
+* Top Node Naming:: How to refer to the beginning of another file.
+* ref:: A reference for the last part of a sentence.
+* pxref:: How to write a parenthetical cross reference.
+* inforef:: How to refer to an Info-only file.
+* uref:: How to refer to a uniform resource locator.
+* cite:: How to refer to books not in the Info system.
+@end menu
+
+@node References
+@section What References Are For
+
+Often, but not always, a printed document should be designed so that
+it can be read sequentially. People tire of flipping back and forth
+to find information that should be presented to them as they need
+it.@refill
+
+However, in any document, some information will be too detailed for
+the current context, or incidental to it; use cross references to
+provide access to such information. Also, an online help system or a
+reference manual is not like a novel; few read such documents in
+sequence from beginning to end. Instead, people look up what they
+need. For this reason, such creations should contain many cross
+references to help readers find other information that they may not
+have read.@refill
+
+In a printed manual, a cross reference results in a page reference,
+unless it is to another manual altogether, in which case the cross
+reference names that manual.@refill
+
+In Info, a cross reference results in an entry that you can follow
+using the Info @samp{f} command. (@inforef{Help-Xref, Following
+cross-references, info}.)
+
+The various cross reference commands use nodes (or anchors,
+@pxref{anchor,,@code{@@anchor}}) to define cross reference locations.
+This is evident in Info, in which a cross reference takes you to the
+specified location. @TeX{} also uses nodes to define cross reference
+locations, but the action is less obvious. When @TeX{} generates a DVI
+file, it records each node's page number and uses the page numbers in making
+references. Thus, if you are writing a manual that will only be
+printed, and will not be used online, you must nonetheless write
+@code{@@node} lines to name the places to which you make cross
+references.@refill
+
+@need 800
+@node Cross Reference Commands
+@comment node-name, next, previous, up
+@section Different Cross Reference Commands
+@cindex Different cross reference commands
+
+There are four different cross reference commands:@refill
+
+@table @code
+@item @@xref
+Used to start a sentence in the printed manual saying @w{`See @dots{}'}
+or an Info cross-reference saying @samp{*Note @var{name}: @var{node}.}.
+
+@item @@ref
+Used within or, more often, at the end of a sentence; same as
+@code{@@xref} for Info; produces just the reference in the printed
+manual without a preceding `See'.@refill
+
+@item @@pxref
+Used within parentheses to make a reference that suits both an Info
+file and a printed book. Starts with a lower case `see' within the
+printed manual. (@samp{p} is for `parenthesis'.)@refill
+
+@item @@inforef
+Used to make a reference to an Info file for which there is no printed
+manual.@refill
+@end table
+
+@noindent
+(The @code{@@cite} command is used to make references to books and
+manuals for which there is no corresponding Info file and, therefore,
+no node to which to point. @xref{cite, , @code{@@cite}}.)@refill
+
+@node Cross Reference Parts
+@comment node-name, next, previous, up
+@section Parts of a Cross Reference
+@cindex Cross reference parts
+@cindex Parts of a cross reference
+
+A cross reference command requires only one argument, which is the
+name of the node to which it refers. But a cross reference command
+may contain up to four additional arguments. By using these
+arguments, you can provide a cross reference name for Info, a topic
+description or section title for the printed output, the name of a
+different Info file, and the name of a different printed
+manual.@refill
+
+Here is a simple cross reference example:@refill
+
+@example
+@@xref@{Node name@}.
+@end example
+
+@noindent
+which produces
+
+@example
+*Note Node name::.
+@end example
+
+@noindent
+and
+
+@quotation
+See Section @var{nnn} [Node name], page @var{ppp}.
+@end quotation
+
+@need 700
+Here is an example of a full five-part cross reference:@refill
+
+@example
+@group
+@@xref@{Node name, Cross Reference Name, Particular Topic,
+info-file-name, A Printed Manual@}, for details.
+@end group
+@end example
+
+@noindent
+which produces
+
+@example
+*Note Cross Reference Name: (info-file-name)Node name,
+for details.
+@end example
+
+@noindent
+in Info and
+
+@quotation
+See section ``Particular Topic'' in @i{A Printed Manual}, for details.
+@end quotation
+
+@noindent
+in a printed book.
+
+The five possible arguments for a cross reference are:@refill
+
+@enumerate
+@item
+The node or anchor name (required). This is the location to which the
+cross reference takes you. In a printed document, the location of the
+node provides the page reference only for references within the same
+document.@refill
+
+@item
+The cross reference name for the Info reference, if it is to be
+different from the node name or the topic description. If you
+include this argument, it becomes the first part of the cross reference.
+It is usually omitted; then the topic description (third argument) is
+used if it was specified; if that was omitted as well, the node name
+is used.
+
+@item
+A topic description or section name. Often, this is the title of the
+section. This is used as the name of the reference in the printed
+manual. If omitted, the node name is used.@refill
+
+@item
+The name of the Info file in which the reference is located, if it is
+different from the current file. You need not include any @samp{.info}
+suffix on the file name, since Info readers try appending it
+automatically.
+
+@item
+The name of a printed manual from a different Texinfo file.@refill
+@end enumerate
+
+The template for a full five argument cross reference looks like
+this:@refill
+
+@example
+@group
+@@xref@{@var{node-name}, @var{cross-reference-name}, @var{title-or-topic},
+@var{info-file-name}, @var{printed-manual-title}@}.
+@end group
+@end example
+
+Cross references with one, two, three, four, and five arguments are
+described separately following the description of @code{@@xref}.@refill
+
+Write a node name in a cross reference in exactly the same way as in
+the @code{@@node} line, including the same capitalization; otherwise, the
+formatters may not find the reference.@refill
+
+You can write cross reference commands within a paragraph, but note
+how Info and @TeX{} format the output of each of the various commands:
+write @code{@@xref} at the beginning of a sentence; write
+@code{@@pxref} only within parentheses, and so on.@refill
+
+@node xref
+@comment node-name, next, previous, up
+@section @code{@@xref}
+@findex xref
+@cindex Cross references using @code{@@xref}
+@cindex References using @code{@@xref}
+
+The @code{@@xref} command generates a cross reference for the
+beginning of a sentence. The Info formatting commands convert it into
+an Info cross reference, which the Info @samp{f} command can use to
+bring you directly to another node. The @TeX{} typesetting commands
+convert it into a page reference, or a reference to another book or
+manual.@refill
+
+@menu
+* Reference Syntax:: What a reference looks like and requires.
+* One Argument:: @code{@@xref} with one argument.
+* Two Arguments:: @code{@@xref} with two arguments.
+* Three Arguments:: @code{@@xref} with three arguments.
+* Four and Five Arguments:: @code{@@xref} with four and five arguments.
+@end menu
+
+@node Reference Syntax
+@subsection What a Reference Looks Like and Requires
+
+Most often, an Info cross reference looks like this:@refill
+
+@example
+*Note @var{node-name}::.
+@end example
+
+@noindent
+or like this
+
+@example
+*Note @var{cross-reference-name}: @var{node-name}.
+@end example
+
+@noindent
+In @TeX{}, a cross reference looks like this:
+
+@quotation
+See Section @var{section-number} [@var{node-name}], page @var{page}.
+@end quotation
+
+@noindent
+or like this
+
+@quotation
+See Section @var{section-number} [@var{title-or-topic}], page @var{page}.
+@end quotation
+
+The @code{@@xref} command does not generate a period or comma to end
+the cross reference in either the Info file or the printed output.
+You must write that period or comma yourself; otherwise, Info will not
+recognize the end of the reference. (The @code{@@pxref} command works
+differently. @xref{pxref, , @code{@@pxref}}.)@refill
+
+@quotation Caution
+A period or comma @strong{must} follow the closing
+brace of an @code{@@xref}. It is required to terminate the cross
+reference. This period or comma will appear in the output, both in
+the Info file and in the printed manual.@refill
+@end quotation
+
+@code{@@xref} must refer to an Info node by name. Use @code{@@node}
+to define the node (@pxref{Writing a Node}).@refill
+
+@code{@@xref} is followed by several arguments inside braces, separated by
+commas. Whitespace before and after these commas is ignored.@refill
+
+A cross reference requires only the name of a node; but it may contain
+up to four additional arguments. Each of these variations produces a
+cross reference that looks somewhat different.@refill
+
+@quotation Note
+Commas separate arguments in a cross reference;
+avoid including them in the title or other part lest the formatters
+mistake them for separators.@refill
+@end quotation
+
+@node One Argument
+@subsection @code{@@xref} with One Argument
+
+The simplest form of @code{@@xref} takes one argument, the name of
+another node in the same Info file. The Info formatters produce
+output that the Info readers can use to jump to the reference; @TeX{}
+produces output that specifies the page and section number for you.@refill
+
+@need 700
+@noindent
+For example,
+
+@example
+@@xref@{Tropical Storms@}.
+@end example
+
+@noindent
+produces
+
+@example
+*Note Tropical Storms::.
+@end example
+
+@noindent
+and
+
+@quotation
+See Section 3.1 [Tropical Storms], page 24.
+@end quotation
+
+@noindent
+(Note that in the preceding example the closing brace is followed by a
+period.)@refill
+
+You can write a clause after the cross reference, like this:@refill
+
+@example
+@@xref@{Tropical Storms@}, for more info.
+@end example
+
+@noindent
+which produces
+
+@example
+*Note Tropical Storms::, for more info.
+@end example
+
+@noindent
+and
+
+@quotation
+See Section 3.1 [Tropical Storms], page 24, for more info.
+@end quotation
+
+@noindent
+(Note that in the preceding example the closing brace is followed by a
+comma, and then by the clause, which is followed by a period.)@refill
+
+@node Two Arguments
+@subsection @code{@@xref} with Two Arguments
+
+With two arguments, the second is used as the name of the Info cross
+reference, while the first is still the name of the node to which the
+cross reference points.@refill
+
+@need 750
+@noindent
+The template is like this:
+
+@example
+@@xref@{@var{node-name}, @var{cross-reference-name}@}.
+@end example
+
+@need 700
+@noindent
+For example,
+
+@example
+@@xref@{Electrical Effects, Lightning@}.
+@end example
+
+@noindent
+produces:
+
+@example
+*Note Lightning: Electrical Effects.
+@end example
+
+@noindent
+and
+
+@quotation
+See Section 5.2 [Electrical Effects], page 57.
+@end quotation
+
+@noindent
+(Note that in the preceding example the closing brace is followed by a
+period; and that the node name is printed, not the cross reference name.)
+
+You can write a clause after the cross reference, like this:@refill
+
+@example
+@@xref@{Electrical Effects, Lightning@}, for more info.
+@end example
+
+@noindent
+which produces
+@example
+*Note Lightning: Electrical Effects, for more info.
+@end example
+
+@noindent
+and
+
+@quotation
+See Section 5.2 [Electrical Effects], page 57, for more info.
+@end quotation
+
+@noindent
+(Note that in the preceding example the closing brace is followed by a
+comma, and then by the clause, which is followed by a period.)@refill
+
+@node Three Arguments
+@subsection @code{@@xref} with Three Arguments
+
+A third argument replaces the node name in the @TeX{} output. The third
+argument should be the name of the section in the printed output, or
+else state the topic discussed by that section. Often, you will want to
+use initial upper case letters so it will be easier to read when the
+reference is printed. Use a third argument when the node name is
+unsuitable because of syntax or meaning.@refill
+
+Remember to avoid placing a comma within the title or topic section of
+a cross reference, or within any other section. The formatters divide
+cross references into arguments according to the commas; a comma
+within a title or other section will divide it into two arguments. In
+a reference, you need to write a title such as ``Clouds, Mist, and
+Fog'' without the commas.@refill
+
+Also, remember to write a comma or period after the closing brace of an
+@code{@@xref} to terminate the cross reference. In the following
+examples, a clause follows a terminating comma.@refill
+
+
+@need 750
+@noindent
+The template is like this:
+
+@example
+@group
+@@xref@{@var{node-name}, @var{cross-reference-name}, @var{title-or-topic}@}.
+@end group
+@end example
+
+@need 700
+@noindent
+For example,
+
+@example
+@group
+@@xref@{Electrical Effects, Lightning, Thunder and Lightning@},
+for details.
+@end group
+@end example
+
+@noindent
+produces
+
+@example
+*Note Lightning: Electrical Effects, for details.
+@end example
+
+@noindent
+and
+
+@quotation
+See Section 5.2 [Thunder and Lightning], page 57, for details.
+@end quotation
+
+If a third argument is given and the second one is empty, then the
+third argument serves both. (Note how two commas, side by side, mark
+the empty second argument.)@refill
+
+@example
+@group
+@@xref@{Electrical Effects, , Thunder and Lightning@},
+for details.
+@end group
+@end example
+
+@noindent
+produces
+
+@example
+*Note Thunder and Lightning: Electrical Effects, for details.
+@end example
+
+@noindent
+and
+
+@quotation
+See Section 5.2 [Thunder and Lightning], page 57, for details.
+@end quotation
+
+As a practical matter, it is often best to write cross references with
+just the first argument if the node name and the section title are the
+same, and with the first and third arguments if the node name and title
+are different.@refill
+
+Here are several examples from @cite{The GNU Awk User's Guide}:@refill
+
+@smallexample
+@@xref@{Sample Program@}.
+@@xref@{Glossary@}.
+@@xref@{Case-sensitivity, ,Case-sensitivity in Matching@}.
+@@xref@{Close Output, , Closing Output Files and Pipes@},
+ for more information.
+@@xref@{Regexp, , Regular Expressions as Patterns@}.
+@end smallexample
+
+@node Four and Five Arguments
+@subsection @code{@@xref} with Four and Five Arguments
+
+In a cross reference, a fourth argument specifies the name of another
+Info file, different from the file in which the reference appears, and
+a fifth argument specifies its title as a printed manual.@refill
+
+Remember that a comma or period must follow the closing brace of an
+@code{@@xref} command to terminate the cross reference. In the
+following examples, a clause follows a terminating comma.@refill
+
+@need 800
+@noindent
+The template is:
+
+@example
+@group
+@@xref@{@var{node-name}, @var{cross-reference-name}, @var{title-or-topic},
+@var{info-file-name}, @var{printed-manual-title}@}.
+@end group
+@end example
+
+@need 700
+@noindent
+For example,
+
+@example
+@@xref@{Electrical Effects, Lightning, Thunder and Lightning,
+weather, An Introduction to Meteorology@}, for details.
+@end example
+
+@noindent
+produces
+
+@example
+*Note Lightning: (weather)Electrical Effects, for details.
+@end example
+
+@noindent
+The name of the Info file is enclosed in parentheses and precedes
+the name of the node.
+
+@noindent
+In a printed manual, the reference looks like this:@refill
+
+@quotation
+See section ``Thunder and Lightning'' in @i{An Introduction to
+Meteorology}, for details.
+@end quotation
+
+@noindent
+The title of the printed manual is typeset in italics; and the
+reference lacks a page number since @TeX{} cannot know to which page a
+reference refers when that reference is to another manual.@refill
+
+Often, you will leave out the second argument when you use the long
+version of @code{@@xref}. In this case, the third argument, the topic
+description, will be used as the cross reference name in Info.@refill
+
+@noindent
+The template looks like this:
+
+@example
+@@xref@{@var{node-name}, , @var{title-or-topic}, @var{info-file-name},
+@var{printed-manual-title}@}, for details.
+@end example
+
+@noindent
+which produces
+
+@example
+*Note @var{title-or-topic}: (@var{info-file-name})@var{node-name}, for details.
+@end example
+
+@noindent
+and
+
+@quotation
+See section @var{title-or-topic} in @var{printed-manual-title}, for details.
+@end quotation
+
+@need 700
+@noindent
+For example,
+
+@example
+@@xref@{Electrical Effects, , Thunder and Lightning,
+weather, An Introduction to Meteorology@}, for details.
+@end example
+
+@noindent
+produces
+
+@example
+@group
+*Note Thunder and Lightning: (weather)Electrical Effects,
+for details.
+@end group
+@end example
+
+@noindent
+and
+
+@quotation
+See section ``Thunder and Lightning'' in @i{An Introduction to
+Meteorology}, for details.
+@end quotation
+
+On rare occasions, you may want to refer to another Info file that
+is within a single printed manual---when multiple Texinfo files are
+incorporated into the same @TeX{} run but make separate Info files.
+In this case, you need to specify only the fourth argument, and not
+the fifth.@refill
+
+@node Top Node Naming
+@section Naming a `Top' Node
+@cindex Naming a `Top' Node in references
+@cindex @samp{@r{Top}} node naming for references
+
+In a cross reference, you must always name a node. This means that in
+order to refer to a whole manual, you must identify the `Top' node by
+writing it as the first argument to the @code{@@xref} command. (This
+is different from the way you write a menu entry; see @ref{Other Info
+Files, , Referring to Other Info Files}.) At the same time, to
+provide a meaningful section topic or title in the printed cross
+reference (instead of the word `Top'), you must write an appropriate
+entry for the third argument to the @code{@@xref} command.
+@refill
+
+@noindent
+Thus, to make a cross reference to @cite{The GNU Make Manual},
+write:@refill
+
+@example
+@@xref@{Top, , Overview, make, The GNU Make Manual@}.
+@end example
+
+@noindent
+which produces
+
+@example
+*Note Overview: (make)Top.
+@end example
+
+@noindent
+and
+
+@quotation
+See section ``Overview'' in @i{The GNU Make Manual}.
+@end quotation
+
+@noindent
+In this example, @samp{Top} is the name of the first node, and
+@samp{Overview} is the name of the first section of the manual.
+
+
+@node ref
+@section @code{@@ref}
+@cindex Cross references using @code{@@ref}
+@cindex References using @code{@@ref}
+@findex ref
+
+@code{@@ref} is nearly the same as @code{@@xref} except that it does
+not generate a `See' in the printed output, just the reference itself.
+This makes it useful as the last part of a sentence.
+
+@noindent For example,
+
+@cindex Hurricanes
+@example
+For more information, @@pxref@{This@}, and @@ref@{That@}.
+@end example
+
+@noindent produces in Info:
+
+@example
+For more information, *note This::, and *note That::.
+@end example
+
+@noindent and in printed output:
+
+@quotation
+For more information, see Section 1.1 [This], page 1,
+and Section 1.2 [That], page 2.
+@end quotation
+
+The @code{@@ref} command sometimes tempts writers to express
+themselves in a manner that is suitable for a printed manual but looks
+awkward in the Info format. Bear in mind that your audience will be
+using both the printed and the Info format. For example:
+
+@cindex Sea surges
+@example
+Sea surges are described in @@ref@{Hurricanes@}.
+@end example
+
+@noindent looks ok in the printed output:
+
+@quotation
+Sea surges are described in Section 6.7 [Hurricanes], page 72.
+@end quotation
+
+@noindent but is awkward to read in Info, ``note'' being a verb:
+
+@example
+Sea surges are described in *note Hurricanes::.
+@end example
+
+You should write a period or comma immediately after an @code{@@ref}
+command with two or more arguments. If there is no such following
+punctuation, @command{makeinfo} will generate a (grammatically
+incorrect) period in the Info output; otherwise, the cross-reference
+would fail completely, due to the current syntax of Info format.
+
+In general, it is best to use @code{@@ref} only when you need some
+word other than ``see'' to precede the reference. When ``see'' (or
+``See'') is ok, @code{@@xref} and @code{@@pxref} are preferable.
+
+
+@node pxref
+@section @code{@@pxref}
+@cindex Cross references using @code{@@pxref}
+@cindex References using @code{@@pxref}
+@findex pxref
+
+The parenthetical reference command, @code{@@pxref}, is nearly the
+same as @code{@@xref}, but it is best used at the end of a sentence or
+before a closing parenthesis. The command differs from @code{@@xref}
+in two ways:
+
+@enumerate
+@item
+@TeX{} typesets the reference for the printed manual with a lower case
+`see' rather than an upper case `See'.
+
+@item
+The Info formatting commands automatically end the reference with a
+closing colon or period, if necessary.
+@end enumerate
+
+@code{@@pxref} is designed so that the output looks right and works
+right at the end of a sentence or parenthetical phrase, both in
+printed output and in an Info file. In a printed manual, a closing
+comma or period should not follow a cross reference within
+parentheses; such punctuation is wrong. But in an Info file, suitable
+closing punctuation must follow the cross reference so Info can
+recognize its end. @code{@@pxref} spares you the need to use
+complicated methods to put a terminator into one form of the output
+and not the other.
+
+@noindent
+With one argument, a parenthetical cross reference looks like this:
+
+@cindex Flooding
+@example
+@dots{} storms cause flooding (@@pxref@{Hurricanes@}) @dots{}
+@end example
+
+@need 800
+@noindent
+which produces
+
+@example
+@group
+@dots{} storms cause flooding (*note Hurricanes::) @dots{}
+@end group
+@end example
+
+@noindent
+and
+
+@quotation
+@dots{} storms cause flooding (see Section 6.7 [Hurricanes], page 72) @dots{}
+@end quotation
+
+With two arguments, a parenthetical cross reference has this template:
+
+@example
+@dots{} (@@pxref@{@var{node-name}, @var{cross-reference-name}@}) @dots{}
+@end example
+
+@noindent
+which produces
+
+@example
+@dots{} (*note @var{cross-reference-name}: @var{node-name}.) @dots{}
+@end example
+
+@noindent
+and
+
+@quotation
+@dots{} (see Section @var{nnn} [@var{node-name}], page @var{ppp}) @dots{}
+@end quotation
+
+@code{@@pxref} can be used with up to five arguments, just like
+@code{@@xref} (@pxref{xref, , @code{@@xref}}).
+
+In past versions of Texinfo, it was not allowed to write punctuation
+after a @code{@@pxref}, so it could be used @emph{only} before a right
+parenthesis. This is no longer the case, so now it can be used (for
+example) at the end of a sentence, where a lowercase ``see'' works
+best. For instance:
+
+@example
+@dots{} For more information, @@pxref@{More@}.
+@end example
+
+@noindent
+which outputs (in Info):
+
+@example
+@dots{} For more information, *note More::.
+@end example
+
+@noindent
+This works fine. @code{@@pxref} should only be followed by a comma,
+period, or right parenthesis; in other cases, @command{makeinfo} has
+to insert a period to make the cross-reference work correctly in Info,
+and that period looks wrong.
+
+As a matter of general style, @code{@@pxref} is best used at the ends
+of sentences. Although it technically works in the middle of a
+sentence, that location breaks up the flow of reading.
+
+
+@node inforef
+@section @code{@@inforef}
+@cindex Cross references using @code{@@inforef}
+@cindex References using @code{@@inforef}
+@findex inforef
+
+@code{@@inforef} is used for making cross references to Info
+documents---even from a printed manual. This might be because you
+want to refer to conditional @code{@@ifinfo} text
+(@pxref{Conditionals}), or because printed output is not available
+(perhaps because there is no Texinfo source), among other
+possibilities.
+
+The command takes either two or three arguments, in the following
+order:@refill
+
+@enumerate
+@item
+The node name.
+
+@item
+The cross reference name (optional).
+
+@item
+The Info file name.
+@end enumerate
+
+@noindent
+Separate the arguments with commas, as with @code{@@xref}. Also, you
+must terminate the reference with a comma or period after the
+@samp{@}}, as you do with @code{@@xref}.@refill
+
+@noindent
+The template is:
+
+@example
+@@inforef@{@var{node-name}, @var{cross-reference-name}, @var{info-file-name}@},
+@end example
+
+@need 800
+@noindent
+For example,
+
+@example
+@group
+@@inforef@{Advanced, Advanced Info commands, info@},
+for more information.
+@end group
+@end example
+
+@need 800
+@noindent
+produces (in Info):
+
+@example
+@group
+*Note Advanced Info commands: (info)Advanced,
+for more information.
+@end group
+@end example
+
+@need 800
+@noindent
+and (in the printed output):
+
+@quotation
+See Info file @file{info}, node @samp{Advanced}, for more information.
+@end quotation
+
+(This particular example is not realistic, since the Info manual is
+written in Texinfo, so all formats are available.)
+
+The converse of @code{@@inforef} is @code{@@cite}, which is used to
+refer to printed works for which no Info form exists. @xref{cite, ,
+@code{@@cite}}.
+
+
+@node uref
+@section @code{@@url}, @code{@@uref@{@var{url}[, @var{text}][, @var{replacement}]@}}
+@findex uref
+@cindex Uniform resource locator, referring to
+@cindex URL, referring to
+
+@cindex @code{href}, producing HTML
+@code{@@uref} produces a reference to a uniform resource locator (url).
+It takes one mandatory argument, the url, and two optional arguments
+which control the text that is displayed. In HTML output, @code{@@uref}
+produces a link you can follow.
+
+@code{@@url} is a synonym for @code{@@uref}. Originally, @code{@@url}
+had the meaning of @code{@@indicateurl}
+(@pxref{indicateurl,,@code{@@indicateurl}}), but in actual practice it
+was misused the vast majority of the time. So we've changed the
+meaning.
+
+The second argument, if specified, is the text to display (the default
+is the url itself); in Info and DVI output, but not in HTML output, the
+url is also output.
+
+@cindex Man page, reference to
+The third argument, if specified, is the text to display, but in this
+case the url is @emph{not} output in any format. This is useful when
+the text is already sufficiently referential, as in a man page. If
+the third argument is given, the second argument is ignored.
+
+If the url is long enough to cause problems with line breaking, you
+may find it useful to insert @code{@@/} at places where a line break
+would be acceptable (after @samp{/} characters, for instance). This
+tells @TeX{} to allow (but not force) a line break at those places.
+@xref{Line Breaks}.
+
+Here is an example of the simple one argument form, where the url is
+both the target and the text of the link:
+
+@example
+The official GNU ftp site is @@uref@{ftp://ftp.gnu.org/gnu@}.
+@end example
+
+@noindent produces:
+@display
+The official GNU ftp site is @uref{ftp://ftp.gnu.org/gnu}.
+@end display
+
+
+An example of the two-argument form:
+@example
+The official @@uref@{ftp://ftp.gnu.org/gnu, GNU ftp site@}
+holds programs and texts.
+@end example
+
+@noindent produces:
+@display
+The official @uref{ftp://ftp.gnu.org/gnu, GNU ftp site}
+holds programs and texts.
+@end display
+
+@noindent that is, the Info output is this:
+@example
+The official GNU ftp site (ftp://ftp.gnu.org/gnu)
+holds programs and texts.
+@end example
+
+@noindent and the HTML output is this:
+@example
+The official <a href="ftp://ftp.gnu.org/gnu">GNU ftp site</a>
+holds programs and texts.
+@end example
+
+
+An example of the three-argument form:
+@example
+The @@uref@{/man.cgi/1/ls,,ls@} program @dots{}
+@end example
+
+@noindent produces:
+@display
+The @uref{/man.cgi/1/ls,,ls} program @dots{}
+@end display
+
+@noindent but with HTML:
+@example
+The <a href="/man.cgi/1/ls">ls</a> program @dots{}
+@end example
+
+To merely indicate a url without creating a link people can follow, use
+@code{@@indicateurl} (@pxref{indicateurl, @code{@@indicateurl}}).
+
+Some people prefer to display url's in the unambiguous format:
+
+@display
+<URL:http://@var{host}/@var{path}>
+@end display
+
+@noindent
+@cindex <URL: convention, not used
+You can use this form in the input file if you wish. We feel it's not
+necessary to include the @samp{<URL:} and @samp{>} in the output,
+since any software that tries to detect url's in text already has to
+detect them without the @samp{<URL:} to be useful.
+
+
+@node cite
+@section @code{@@cite}@{@var{reference}@}
+@findex cite
+
+Use the @code{@@cite} command for the name of a book that lacks a
+companion Info file. The command produces italics in the printed
+manual, and quotation marks in the Info file.
+
+If a book is written in Texinfo, it is better to use a cross reference
+command since a reader can easily follow such a reference in Info.
+@xref{xref, , @code{@@xref}}.
+
+
+@node Marking Text
+@chapter Marking Words and Phrases
+@cindex Paragraph, marking text within
+@cindex Marking words and phrases
+@cindex Words and phrases, marking them
+@cindex Marking text within a paragraph
+@cindex Text, marking up
+
+In Texinfo, you can mark words and phrases in a variety of ways.
+The Texinfo formatters use this information to determine how to
+highlight the text.
+You can specify, for example, whether a word or phrase is a
+defining occurrence, a metasyntactic variable, or a symbol used in a
+program. Also, you can emphasize text, in several different ways.
+
+@menu
+* Indicating:: How to indicate definitions, files, etc.
+* Emphasis:: How to emphasize text.
+@end menu
+
+
+@node Indicating
+@section Indicating Definitions, Commands, etc.
+@cindex Highlighting text
+@cindex Indicating commands, definitions, etc.
+
+Texinfo has commands for indicating just what kind of object a piece of
+text refers to. For example, metasyntactic variables are marked by
+@code{@@var}, and code by @code{@@code}. Since the pieces of text are
+labelled by commands that tell what kind of object they are, it is easy
+to change the way the Texinfo formatters prepare such text. (Texinfo is
+an @emph{intentional} formatting language rather than a @emph{typesetting}
+formatting language.)@refill
+
+For example, in a printed manual,
+code is usually illustrated in a typewriter font;
+@code{@@code} tells @TeX{} to typeset this text in this font. But it
+would be easy to change the way @TeX{} highlights code to use another
+font, and this change would not affect how keystroke examples are
+highlighted. If straight typesetting commands were used in the body
+of the file and you wanted to make a change, you would need to check
+every single occurrence to make sure that you were changing code and
+not something else that should not be changed.@refill
+
+@menu
+* Useful Highlighting:: Highlighting provides useful information.
+* code:: Indicating program code.
+* kbd:: Showing keyboard input.
+* key:: Specifying keys.
+* samp:: Indicating a literal sequence of characters.
+* verb:: Indicating a verbatim sequence of characters.
+* var:: Indicating metasyntactic variables.
+* env:: Indicating environment variables.
+* file:: Indicating file names.
+* command:: Indicating command names.
+* option:: Indicating option names.
+* dfn:: Specifying definitions.
+* abbr:: Indicating abbreviations.
+* acronym:: Indicating acronyms.
+* indicateurl:: Indicating an example URL.
+* email:: Indicating an electronic mail address.
+@end menu
+
+
+@node Useful Highlighting
+@subsection Highlighting Commands are Useful
+
+The highlighting commands can be used to extract useful information
+from the file, such as lists of functions or file names. It is
+possible, for example, to write a program in Emacs Lisp (or a keyboard
+macro) to insert an index entry after every paragraph that contains
+words or phrases marked by a specified command. You could do this to
+construct an index of functions if you had not already made the
+entries.@refill
+
+The commands serve a variety of purposes:@refill
+
+@table @code
+@item @@code@{@var{sample-code}@}
+Indicate text that is a literal example of a piece of a program.
+@xref{code,,@code{@@code}}.
+
+@item @@kbd@{@var{keyboard-characters}@}
+Indicate keyboard input.
+@xref{kbd,,@code{@@kbd}}.
+
+@item @@key@{@var{key-name}@}
+Indicate the conventional name for a key on a keyboard.
+@xref{key,,@code{@@key}}.
+
+@item @@samp@{@var{text}@}
+Indicate text that is a literal example of a sequence of characters.
+@xref{samp,,@code{@@samp}}.
+
+@item @@verb@{@var{text}@}
+Write a verbatim sequence of characters.
+@xref{verb,,@code{@@verb}}.
+
+@item @@var@{@var{metasyntactic-variable}@}
+Indicate a metasyntactic variable.
+@xref{var,,@code{@@var}}.
+
+@item @@env@{@var{environment-variable}@}
+Indicate an environment variable.
+@xref{env,,@code{@@env}}.
+
+@item @@file@{@var{file-name}@}
+Indicate the name of a file.
+@xref{file,,@code{@@file}}.
+
+@item @@command@{@var{command-name}@}
+Indicate the name of a command.
+@xref{command,,@code{@@command}}.
+
+@item @@option@{@var{option}@}
+Indicate a command-line option.
+@xref{option,,@code{@@option}}.
+
+@item @@dfn@{@var{term}@}
+Indicate the introductory or defining use of a term.
+@xref{dfn,,@code{@@dfn}}.
+
+@item @@cite@{@var{reference}@}
+Indicate the name of a book.
+@xref{cite,,@code{@@cite}}.
+
+@item @@abbr@{@var{abbreviation}@}
+Indicate an abbreviation, such as `Comput.'.
+
+@item @@acronym@{@var{acronym}@}
+Indicate an acronym.
+@xref{acronym,,@code{@@acronym}}.
+
+@item @@indicateurl@{@var{uniform-resource-locator}@}
+Indicate an example (that is, nonfunctional) uniform resource locator.
+@xref{indicateurl,,@code{@@indicateurl}}. (Use @code{@@url}
+(@pxref{uref,,@code{@@url}}) for live url's.)
+
+@item @@email@{@var{email-address}[, @var{displayed-text}]@}
+Indicate an electronic mail address.
+@xref{email,,@code{@@email}}.
+
+@ignore
+@item @@ctrl@{@var{ctrl-char}@}
+Use for an ASCII control character.
+@end ignore
+@end table
+
+
+@node code
+@subsection @code{@@code}@{@var{sample-code}@}
+@findex code
+
+@cindex Syntactic tokens, indicating
+Use the @code{@@code} command to indicate text that is a piece of a
+program and which consists of entire syntactic tokens. Enclose the
+text in braces.
+
+@cindex Expressions in a program, indicating
+@cindex Keywords, indicating
+@cindex Reserved words, indicating
+Thus, you should use @code{@@code} for an expression in a program, for
+the name of a variable or function used in a program, or for a
+keyword in a programming language.
+
+Use @code{@@code} for command names in languages that resemble
+programming languages, such as Texinfo. For example, @code{@@code} and
+@code{@@samp} are produced by writing @samp{@@code@{@@@@code@}} and
+@samp{@@code@{@@@@samp@}} in the Texinfo source, respectively.
+
+@cindex Case, not altering in @code{@@code}
+It is incorrect to alter the case of a word inside an @code{@@code}
+command when it appears at the beginning of a sentence. Most computer
+languages are case sensitive. In C, for example, @code{Printf} is
+different from the identifier @code{printf}, and most likely is a
+misspelling of it. Even in languages which are not case sensitive, it
+is confusing to a human reader to see identifiers spelled in different
+ways. Pick one spelling and always use that. If you do not want to
+start a sentence with a command name written all in lower case, you
+should rearrange the sentence.
+
+In the printed manual, @code{@@code} causes @TeX{} to typeset the
+argument in a typewriter face. In the Info file, it causes the Info
+formatting commands to use single quotation marks around the text.
+For example,
+
+@example
+The function returns @@code@{nil@}.
+@end example
+
+@noindent
+produces this:
+
+@quotation
+The function returns @code{nil}.
+@end quotation
+
+@iftex
+@noindent
+and this in the Info file:
+@example
+The function returns `nil'.
+@end example
+@end iftex
+
+Here are some cases for which it is preferable @emph{not} to use @code{@@code}:
+
+@itemize @bullet
+@item
+For shell command names such as @command{ls} (use @code{@@command}).
+
+@item
+For shell options such as @samp{-c} when such options stand alone (use
+@code{@@option}).
+
+@item
+Also, an entire shell command often looks better if written using
+@code{@@samp} rather than @code{@@code}. In this case, the rule is to
+choose the more pleasing format.
+
+@item
+For environment variable such as @env{TEXINPUTS} (use @code{@@env}).
+
+@item
+For a string of characters shorter than a syntactic token. For example,
+if you are writing about @samp{goto-ch}, which is just a part of the
+name for the @code{goto-char} Emacs Lisp function, you should use
+@code{@@samp}.
+
+@item
+In general, when writing about the characters used in a token; for
+example, do not use @code{@@code} when you are explaining what letters
+or printable symbols can be used in the names of functions. (Use
+@code{@@samp}.) Also, you should not use @code{@@code} to mark text
+that is considered input to programs unless the input is written in a
+language that is like a programming language. For example, you should
+not use @code{@@code} for the keystroke commands of GNU Emacs (use
+@code{@@kbd} instead) although you may use @code{@@code} for the names
+of the Emacs Lisp functions that the keystroke commands invoke.
+
+@end itemize
+
+Since @code{@@command}, @code{@@option}, and @code{@@env} were
+introduced relatively recently, it is acceptable to use @code{@@code} or
+@code{@@samp} for command names, options, and environment variables.
+The new commands allow you to express the markup more precisely, but
+there is no real harm in using the older commands, and of course the
+long-standing manuals do so.
+
+Ordinarily, @TeX{} will consider breaking lines at @samp{-} and
+@samp{_} characters within @code{@@code} and related commands. This
+can be controlled with @code{@@allowcodebreaks}
+(@pxref{allowcodebreaks,,@code{@@allowcodebreaks}}).
+
+
+@node kbd
+@subsection @code{@@kbd}@{@var{keyboard-characters}@}
+@findex kbd
+@cindex Keyboard input
+
+Use the @code{@@kbd} command for characters of input to be typed by
+users. For example, to refer to the characters @kbd{M-a}, write:
+
+@example
+@@kbd@{M-a@}
+@end example
+
+@noindent
+and to refer to the characters @kbd{M-x shell}, write:
+
+@example
+@@kbd@{M-x shell@}
+@end example
+
+@cindex User input
+@cindex Slanted typewriter font, for @code{@@kbd}
+By default, the @code{@@kbd} command produces a different font
+(slanted typewriter instead of normal typewriter) in the printed
+manual, so users can distinguish the characters that they are supposed
+to type from those that the computer outputs.
+
+In Info output, @code{@@kbd} is usually the same as @code{@@code},
+producing `quotes' around its argument. However, in typewriter-like
+contexts such as the @code{@@example} environment (@pxref{example})
+and @code{@@code} command itself, the quotes are omitted, since Info
+format cannot use distinguishing fonts.
+
+@findex kbdinputstyle
+Since the usage of @code{@@kbd} varies from manual to manual, you can
+control the font switching with the @code{@@kbdinputstyle} command.
+This command has no effect on Info output. Write this command at the
+beginning of a line with a single word as an argument, one of the
+following:
+
+@vindex distinct@r{, value for @code{@@kbdinputstyle}}
+@vindex example@r{, value for @code{@@kbdinputstyle}}
+@vindex code@r{, value for @code{@@kbdinputstyle}}
+@table @samp
+@item code
+Always use the same font for @code{@@kbd} as @code{@@code}.
+@item example
+Use the distinguishing font for @code{@@kbd} only in @code{@@example}
+and similar environments.
+@item distinct
+(the default) Always use the distinguishing font for @code{@@kbd}.
+@end table
+
+You can embed another @@-command inside the braces of an @code{@@kbd}
+command. Here, for example, is the way to describe a command that
+would be described more verbosely as ``press the @samp{r} key and then
+press the @key{RETURN} key'':
+
+@example
+@@kbd@{r @@key@{RET@}@}
+@end example
+
+@noindent
+This produces: @kbd{r @key{RET}}. (The present manual uses the
+default for @code{@@kbdinputstyle}.)
+
+You also use the @code{@@kbd} command if you are spelling out the letters
+you type; for example:
+
+@example
+To give the @@code@{logout@} command,
+type the characters @@kbd@{l o g o u t @@key@{RET@}@}.
+@end example
+
+@noindent
+This produces:
+
+@quotation
+To give the @code{logout} command,
+type the characters @kbd{l o g o u t @key{RET}}.
+@end quotation
+
+(Also, this example shows that you can add spaces for clarity. If you
+explicitly want to mention a space character as one of the characters of
+input, write @kbd{@@key@{SPC@}} for it.)@refill
+
+
+@node key
+@subsection @code{@@key}@{@var{key-name}@}
+@findex key
+
+Use the @code{@@key} command for the conventional name for a key on a
+keyboard, as in:@refill
+
+@example
+@@key@{RET@}
+@end example
+
+You can use the @code{@@key} command within the argument of an
+@code{@@kbd} command when the sequence of characters to be typed
+includes one or more keys that are described by name.@refill
+
+For example, to produce @kbd{C-x @key{ESC}} and @kbd{M-@key{TAB}} you
+would type:
+
+@example
+@@kbd@{C-x @@key@{ESC@}@}
+@@kbd@{M-@@key@{TAB@}@}
+@end example
+
+Here is a list of the recommended names for keys:
+@cindex Recommended names for keys
+@cindex Keys, recommended names
+@cindex Names recommended for keys
+@cindex Abbreviations for keys
+
+@quotation
+@table @t
+@item SPC
+Space
+@item RET
+Return
+@item LFD
+Linefeed (however, since most keyboards nowadays do not have a Linefeed key,
+it might be better to call this character @kbd{C-j})
+@item TAB
+Tab
+@item BS
+Backspace
+@item ESC
+Escape
+@item DELETE
+Delete
+@item SHIFT
+Shift
+@item CTRL
+Control
+@item META
+Meta
+@end table
+@end quotation
+
+@cindex META key
+There are subtleties to handling words like `meta' or `ctrl' that are
+names of modifier keys. When mentioning a character in which the
+modifier key is used, such as @kbd{Meta-a}, use the @code{@@kbd} command
+alone; do not use the @code{@@key} command; but when you are referring
+to the modifier key in isolation, use the @code{@@key} command. For
+example, write @samp{@@kbd@{Meta-a@}} to produce @kbd{Meta-a} and
+@samp{@@key@{META@}} to produce @key{META}.
+
+As a convention in GNU manuals, @code{@@key} should not be used in
+index entries.
+
+
+@node samp
+@subsection @code{@@samp}@{@var{text}@}
+@findex samp
+
+Use the @code{@@samp} command to indicate text that is a literal example
+or `sample' of a sequence of characters in a file, string, pattern, etc.
+Enclose the text in braces. The argument appears within single
+quotation marks in both the Info file and the printed manual; in
+addition, it is printed in a fixed-width font.@refill
+
+@example
+To match @@samp@{foo@} at the end of the line,
+use the regexp @@samp@{foo$@}.
+@end example
+
+@noindent
+produces
+
+@quotation
+To match @samp{foo} at the end of the line, use the regexp
+@samp{foo$}.@refill
+@end quotation
+
+Any time you are referring to single characters, you should use
+@code{@@samp} unless @code{@@kbd} or @code{@@key} is more appropriate.
+Also, you may use @code{@@samp} for entire statements in C and for entire
+shell commands---in this case, @code{@@samp} often looks better than
+@code{@@code}. Basically, @code{@@samp} is a catchall for whatever is
+not covered by @code{@@code}, @code{@@kbd}, or @code{@@key}.@refill
+
+Only include punctuation marks within braces if they are part of the
+string you are specifying. Write punctuation marks outside the braces
+if those punctuation marks are part of the English text that surrounds
+the string. In the following sentence, for example, the commas and
+period are outside of the braces:@refill
+
+@example
+@group
+In English, the vowels are @@samp@{a@}, @@samp@{e@},
+@@samp@{i@}, @@samp@{o@}, @@samp@{u@}, and sometimes
+@@samp@{y@}.
+@end group
+@end example
+
+@noindent
+This produces:
+
+@quotation
+In English, the vowels are @samp{a}, @samp{e},
+@samp{i}, @samp{o}, @samp{u}, and sometimes
+@samp{y}.
+@end quotation
+
+
+@node verb
+@subsection @code{@@verb}@{<char>@var{text}<char>@}
+@findex verb
+@cindex Verbatim in-line text
+
+@cindex Delimiter character, for verbatim
+Use the @code{@@verb} command to print a verbatim sequence of
+characters.
+
+Like @LaTeX{}'s @code{\verb} command, the verbatim text can be quoted using
+any unique delimiter character. Enclose the verbatim text, including the
+delimiters, in braces. Text is printed in a fixed-width font:
+
+@example
+How many @@verb@{|@@|@}-escapes does one need to print this
+@@verb@{.@@a @@b @@c.@} string or @@verb@{+@@'e@?`@!`@{@}\+@} this?
+@end example
+
+@noindent
+produces
+
+@example
+How many @verb{|@|}-escapes does one need to print this
+@verb{.@a @b @c.} string or these @verb{+@'e?`{}!`\+} this?
+@end example
+
+This is in contrast to @code{@@samp} (see the previous section),
+@code{@@code}, and similar commands; in those cases, the argument is
+normal Texinfo text, where the three characters @code{@@@{@}} are
+special. With @code{@@verb}, nothing is special except the delimiter
+character you choose.
+
+It is not reliable to use @code{@@verb} inside other Texinfo
+constructs. In particular, it does not work to use @code{@@verb} in
+anything related to cross-referencing, such as section titles or
+figure captions.
+
+
+@node var
+@subsection @code{@@var}@{@var{metasyntactic-variable}@}
+@findex var
+
+Use the @code{@@var} command to indicate metasyntactic variables. A
+@dfn{metasyntactic variable} is something that stands for another piece of
+text. For example, you should use a metasyntactic variable in the
+documentation of a function to describe the arguments that are passed
+to that function.@refill
+
+Do not use @code{@@var} for the names of particular variables in
+programming languages. These are specific names from a program, so
+@code{@@code} is correct for them (@pxref{code}). For example, the
+Emacs Lisp variable @code{texinfo-tex-command} is not a metasyntactic
+variable; it is properly formatted using @code{@@code}.
+
+Do not use @code{@@var} for environment variables either; @code{@@env}
+is correct for them (see the next section).
+
+The effect of @code{@@var} in the Info file is to change the case of the
+argument to all upper case. In the printed manual and HTML output, the
+argument is printed in slanted type.
+
+@need 700
+For example,
+
+@example
+To delete file @@var@{filename@},
+type @@samp@{rm @@var@{filename@}@}.
+@end example
+
+@noindent
+produces
+
+@quotation
+To delete file @var{filename}, type @samp{rm @var{filename}}.
+@end quotation
+
+@noindent
+(Note that @code{@@var} may appear inside @code{@@code},
+@code{@@samp}, @code{@@file}, etc.)@refill
+
+Write a metasyntactic variable all in lower case without spaces, and
+use hyphens to make it more readable. Thus, the Texinfo source for
+the illustration of how to begin a Texinfo manual looks like
+this:@refill
+
+@example
+@group
+\input texinfo
+@@@@setfilename @@var@{info-file-name@}
+@@@@settitle @@var@{name-of-manual@}
+@end group
+@end example
+
+@noindent
+This produces:
+
+@example
+@group
+\input texinfo
+@@setfilename @var{info-file-name}
+@@settitle @var{name-of-manual}
+@end group
+@end example
+
+In some documentation styles, metasyntactic variables are shown with
+angle brackets, for example:@refill
+
+@example
+@dots{}, type rm <filename>
+@end example
+
+@noindent
+However, that is not the style that Texinfo uses. (You can, of
+course, modify the sources to @file{texinfo.tex} and the Info formatting commands
+to output the @code{<@dots{}>} format if you wish.)@refill
+
+
+@node env
+@subsection @code{@@env}@{@var{environment-variable}@}
+@findex env
+
+Use the @code{@@env} command to indicate environment variables, as used
+by many operating systems, including GNU. Do not use it for
+metasyntactic variables; use @code{@@var} instead (see the previous
+section).
+
+@code{@@env} is equivalent to @code{@@code} in its effects.
+For example:
+
+@example
+The @@env@{PATH@} environment variable @dots{}
+@end example
+@noindent produces
+@quotation
+The @env{PATH} environment variable @dots{}
+@end quotation
+
+
+@node file
+@subsection @code{@@file}@{@var{file-name}@}
+@findex file
+
+Use the @code{@@file} command to indicate text that is the name of a
+file, buffer, or directory, or is the name of a node in Info. You can
+also use the command for file name suffixes. Do not use @code{@@file}
+for symbols in a programming language; use @code{@@code}.
+
+Currently, @code{@@file} is equivalent to @code{@@samp} in its effects.
+For example,@refill
+
+@example
+The @@file@{.el@} files are in
+the @@file@{/usr/local/emacs/lisp@} directory.
+@end example
+
+@noindent
+produces
+
+@quotation
+The @file{.el} files are in
+the @file{/usr/local/emacs/lisp} directory.
+@end quotation
+
+
+@node command
+@subsection @code{@@command}@{@var{command-name}@}
+@findex command
+@cindex Command names, indicating
+@cindex Program names, indicating
+
+Use the @code{@@commannd} command to indicate command names, such as
+@command{ls} or @command{cc}.
+
+@code{@@command} is equivalent to @code{@@code} in its effects.
+For example:
+
+@example
+The command @@command@{ls@} lists directory contents.
+@end example
+@noindent produces
+@quotation
+The command @command{ls} lists directory contents.
+@end quotation
+
+You should write the name of a program in the ordinary text font, rather
+than using @code{@@command}, if you regard it as a new English word,
+such as `Emacs' or `Bison'.
+
+When writing an entire shell command invocation, as in @samp{ls -l},
+you should use either @code{@@samp} or @code{@@code} at your discretion.
+
+
+@node option
+@subsection @code{@@option}@{@var{option-name}@}
+@findex option
+
+Use the @code{@@option} command to indicate a command-line option; for
+example, @option{-l} or @option{--version} or
+@option{--output=@var{filename}}.
+
+@code{@@option} is equivalent to @code{@@samp} in its effects.
+For example:
+
+@example
+The option @@option@{-l@} produces a long listing.
+@end example
+@noindent produces
+@quotation
+The option @option{-l} produces a long listing.
+@end quotation
+
+In tables, putting options inside @code{@@code} produces a
+more pleasing effect.
+
+@node dfn
+@comment node-name, next, previous, up
+@subsection @code{@@dfn}@{@var{term}@}
+@findex dfn
+
+Use the @code{@@dfn} command to identify the introductory or defining
+use of a technical term. Use the command only in passages whose
+purpose is to introduce a term which will be used again or which the
+reader ought to know. Mere passing mention of a term for the first
+time does not deserve @code{@@dfn}. The command generates italics in
+the printed manual, and double quotation marks in the Info file. For
+example:@refill
+
+@example
+Getting rid of a file is called @@dfn@{deleting@} it.
+@end example
+
+@noindent
+produces
+
+@quotation
+Getting rid of a file is called @dfn{deleting} it.
+@end quotation
+
+As a general rule, a sentence containing the defining occurrence of a
+term should be a definition of the term. The sentence does not need
+to say explicitly that it is a definition, but it should contain the
+information of a definition---it should make the meaning clear.
+
+@ignore
+@c node ctrl, , cite, Indicating
+@comment node-name, next, previous, up
+@c subsection @code{@@ctrl}@{@var{ctrl-char}@}
+@findex ctrl
+
+The @code{@@ctrl} command is seldom used. It describes an ASCII
+control character by inserting the actual character into the Info
+file.
+
+Usually, in Texinfo, you talk what you type as keyboard entry by
+describing it with @code{@@kbd}: thus, @samp{@@kbd@{C-a@}} for
+@kbd{C-a}. Use @code{@@kbd} in this way when talking about a control
+character that is typed on the keyboard by the user. When talking
+about a control character appearing in a file or a string, do not use
+@code{@@kbd} since the control character is not typed. Also, do not
+use @samp{C-} but spell out @code{control-}, as in @samp{control-a},
+to make it easier for a reader to understand.@refill
+
+@code{@@ctrl} is an idea from the beginnings of Texinfo which may not
+really fit in to the scheme of things. But there may be times when
+you want to use the command. The pattern is
+@code{@@ctrl@{@var{ch}@}}, where @var{ch} is an ASCII character
+whose control-equivalent is wanted. For example, to specify
+@samp{control-f}, you would enter@refill
+
+@example
+@@ctrl@{f@}
+@end example
+
+@noindent
+produces
+
+@quotation
+@ctrl{f}
+@end quotation
+
+In the Info file, this generates the specified control character, output
+literally into the file. This is done so a user can copy the specified
+control character (along with whatever else he or she wants) into another
+Emacs buffer and use it. Since the `control-h',`control-i', and
+`control-j' characters are formatting characters, they should not be
+indicated with @code{@@ctrl}.@refill
+
+In a printed manual, @code{@@ctrl} generates text to describe or
+identify that control character: an uparrow followed by the character
+@var{ch}.@refill
+@end ignore
+
+
+@node abbr
+@subsection @code{@@abbr}@{@var{abbreviation}[, @var{meaning}]@}
+@findex abbr
+
+@cindex Abbreviations, tagging
+You can use the @code{@@abbr} command for general abbreviations. The
+abbreviation is given as the single argument in braces, as in
+@samp{@@abbr@{Comput.@}}. As a matter of style, or for particular
+abbreviations, you may prefer to omit periods, as in
+@samp{@@abbr@{Mr@} Stallman}.
+
+@code{@@abbr} accepts an optional second argument, intended to be used
+for the meaning of the abbreviation.
+
+If the abbreviation ends with a lowercase letter and a period, and is
+not at the end of a sentence, and has no second argument, remember to
+use the @code{@@.} command (@pxref{Not Ending a
+Sentence}) to get the correct spacing. However, you do not have to
+use @code{@@.} within the abbreviation itself; Texinfo automatically
+assumes periods within the abbreviation do not end a sentence.
+
+@cindex <abbr> and <abbrev> tags
+In @TeX{} and in the Info output, the first argument is printed as-is;
+if the second argument is present, it is printed in parentheses after
+the abbreviation. In HTML and XML, the @code{<abbr>} tag is
+used; in Docbook, the @code{<abbrev>} tag is used. For instance:
+
+@example
+@@abbr@{Comput. J., Computer Journal@}
+@end example
+
+@noindent produces:
+
+@display
+@abbr{Comput. J., Computer Journal}
+@end display
+
+For abbreviations consisting of all capital letters, you may prefer to
+use the @code{@@acronym} command instead. See the next section for
+more on the usage of these two commands.
+
+
+@node acronym
+@subsection @code{@@acronym}@{@var{acronym}[, @var{meaning}]@}
+@findex acronym
+
+@cindex NASA, as acronym
+@cindex Acronyms, tagging
+Use the @code{@@acronym} command for abbreviations written in all
+capital letters, such as `@acronym{NASA}'. The abbreviation is given as
+the single argument in braces, as in @samp{@@acronym@{NASA@}}. As
+a matter of style, or for particular acronyms, you may prefer to
+use periods, as in @samp{@@acronym@{N.A.S.A.@}}.
+
+@code{@@acronym} accepts an optional second argument, intended to be
+used for the meaning of the acronym.
+
+If the acronym is at the end of a sentence, and if there is no second
+argument, remember to use the @code{@@.} or similar command
+(@pxref{Ending a Sentence}) to get the correct spacing.
+
+@cindex <acronym> tag
+In @TeX{}, the acronym is printed in slightly smaller font. In the
+Info output, the argument is printed as-is. In either format, if the
+second argument is present, it is printed in parentheses after the
+acronym. In HTML, Docbook, and XML, the @code{<acronym>} tag is
+used.
+
+For instance (since GNU is a recursive acronym, we use
+@code{@@acronym} recursively):
+
+@example
+@@acronym@{GNU, @@acronym@{GNU@}'s Not Unix@}
+@end example
+
+@noindent produces:
+
+@display
+@acronym{GNU, @acronym{GNU}'s Not Unix}
+@end display
+
+@cindex Family names, in all capitals
+In some circumstances, it is conventional to print family names in all
+capitals. Don't use @code{@@acronym} for this, since a name is not an
+acronym. Use @code{@@sc} instead (@pxref{Smallcaps}).
+
+@code{@@abbr} and @code{@@acronym} are closely related commands: they
+both signal to the reader that a shortened form is being used, and
+possibly give a meaning. When choosing whether to use these two
+commands, please bear the following in mind.
+
+@itemize @minus
+@item
+In standard English usage, acronyms are a subset of abbreviations:
+they include pronounceable words like `@acronym{NATO}', `radar', and
+`snafu', and some sources also include syllable acronyms like
+`Usenet', hybrids like `@acronym{SIGGRAPH}', and unpronounceable
+initialisms like `@acronym{FBI}'.
+
+@item
+In Texinfo, an acronym (but not an abbreviation) should consist only
+of capital letters and periods, no lowercase.
+
+@item
+In @TeX{}, an acronym (but not an abbreviation) is printed in a
+slightly smaller font.
+
+@item
+Some browsers place a dotted bottom border under abbreviations but not
+acronyms.
+
+@item
+It's not essential to use either of these commands for all
+abbreviations; use your judgment. Text is perfectly readable without
+them.
+
+@end itemize
+
+
+@node indicateurl
+@subsection @code{@@indicateurl}@{@var{uniform-resource-locator}@}
+@findex indicateurl
+@cindex Uniform resource locator, indicating
+@cindex URL, indicating
+
+Use the @code{@@indicateurl} command to indicate a uniform resource
+locator on the World Wide Web. This is analogous to @code{@@file},
+@code{@@var}, etc., and is purely for markup purposes. It does not
+produce a link you can follow in HTML output (use the @code{@@uref}
+command for that, @pxref{uref,, @code{@@uref}}). It is useful for
+url's which do not actually exist. For example:
+
+@example
+For example, the url might be @@indicateurl@{http://example.org/path@}.
+@end example
+
+@noindent which produces:
+
+@display
+For example, the url might be @indicateurl{http://example.org/path}.
+@end display
+
+
+@node email
+@subsection @code{@@email}@{@var{email-address}[, @var{displayed-text}]@}
+@findex email
+
+Use the @code{@@email} command to indicate an electronic mail address.
+It takes one mandatory argument, the address, and one optional argument, the
+text to display (the default is the address itself).
+
+@cindex Mailto link
+In Info, the address is shown in angle brackets, preceded by the text
+to display if any. In @TeX{}, the angle brackets are omitted. In
+HTML output, @code{@@email} produces a @samp{mailto} link that usually
+brings up a mail composition window. For example:
+
+@example
+Send bug reports to @@email@{bug-texinfo@@@@gnu.org@},
+suggestions to the @@email@{bug-texinfo@@@@gnu.org, same place@}.
+@end example
+@noindent produces
+@display
+Send bug reports to @email{bug-texinfo@@gnu.org},
+suggestions to the @email{bug-texinfo@@gnu.org, same place}.
+@end display
+
+
+@node Emphasis
+@section Emphasizing Text
+@cindex Emphasizing text
+
+Usually, Texinfo changes the font to mark words in the text according to
+what category the words belong to; an example is the @code{@@code} command.
+Most often, this is the best way to mark words.
+However, sometimes you will want to emphasize text without indicating a
+category. Texinfo has two commands to do this. Also, Texinfo has
+several commands that specify the font in which @TeX{} will typeset
+text. These commands have no effect on Info and only one of them,
+the @code{@@r} command, has any regular use.@refill
+
+@menu
+* emph & strong:: How to emphasize text in Texinfo.
+* Smallcaps:: How to use the small caps font.
+* Fonts:: Various font commands for printed output.
+@end menu
+
+@node emph & strong
+@subsection @code{@@emph}@{@var{text}@} and @code{@@strong}@{@var{text}@}
+@cindex Emphasizing text, font for
+@findex emph
+@findex strong
+
+The @code{@@emph} and @code{@@strong} commands are for emphasis;
+@code{@@strong} is stronger. In printed output, @code{@@emph} produces
+@emph{italics} and @code{@@strong} produces @strong{bold}.
+
+For example,
+
+@example
+@group
+@@strong@{Caution:@} @@samp@{rm * .[^.]*@}
+removes @@emph@{all@} files in the directory.
+@end group
+@end example
+
+@noindent
+produces the following in printed output and HTML:
+
+@quotation
+@strong{Caution}: @samp{rm * .[^.]*}
+removes @emph{all} files in the directory.
+@end quotation
+
+@noindent
+and the following in Info:
+
+@example
+*Caution:* `rm * .[^.]*' removes _all_
+files in the directory.
+@end example
+
+The @code{@@strong} command is seldom used except to mark what is, in
+effect, a typographical element, such as the word `Caution' in the
+preceding example.
+
+In the Info output, @code{@@emph} surrounds the text with underscores
+(@samp{_}), and @code{@@strong} puts asterisks around the text.
+
+@quotation Caution
+Do not use @code{@@strong} with the word @samp{Note}; Info will
+mistake the combination for a cross reference. (It's usually
+redundant, anyway.) Use a phrase such as @strong{Please notice} or
+@strong{Caution} instead, or the optional argument to
+@code{@@quotation}---@samp{Note} is allowable there.
+@end quotation
+
+
+@node Smallcaps
+@subsection @code{@@sc}@{@var{text}@}: The Small Caps Font
+@cindex Small caps font
+@findex sc @r{(small caps font)}
+
+Use the @samp{@@sc} command to set text in @sc{a small caps font}
+(where possible). Write the text you want to be in small caps between
+braces in lower case, like this:
+
+@example
+Richard @@sc@{Stallman@} founded @@acronym@{GNU@}.
+@end example
+
+@noindent
+This produces:
+
+@display
+Richard @sc{Stallman} founded @acronym{GNU}.
+@end display
+
+As shown here, we recommend using @code{@@acronym} for actual
+acronyms (@pxref{acronym}), and reserving @code{@@sc} for special
+cases where you want small caps. The output is not the same
+(@code{@@acronym} prints in a smaller text font, not the small caps
+font), but more importantly it describes the actual text more
+accurately.
+
+Family names are one case where small capitals are sometimes desirable,
+also as shown here.
+
+@cindex <small> tag
+@TeX{} typesets any uppercase letters between the braces of an
+@code{@@sc} command in full-size capitals; only lowercase letters are
+printed in the small caps font. In the Info output, the argument to
+@code{@@sc} is printed in all upper case. In HTML, the argument is
+uppercased and the output marked with the @code{<small>} tag to reduce
+the font size.
+
+Since it's redundant to mark all-uppercase text with @code{@@sc},
+@command{makeinfo} warns about such usage.
+
+We recommend using regular mixed case wherever possible.
+
+
+@node Fonts
+@subsection Fonts for Printing, Not Info
+@cindex Fonts for printing, not Info
+
+@findex fonttextsize
+@cindex Font size, reducing
+@cindex Reducing font size
+@cindex Smaller fonts
+Texinfo provides one command to change the size of the main body font
+in the @TeX{} output for a document: @code{@@fonttextsize}. It has no
+effect at all in other output. It takes a single argument on the
+remainder of the line, which must be either @samp{10} or @samp{11}.
+For example:
+
+@example
+@@fonttextsize 10
+@end example
+
+@cindex Printing cost, reducing
+The effect is to reduce the body font to a 10@dmn{pt} size (the
+default is 11@dmn{pt}). Fonts for other elements, such as sections
+and chapters, are reduced accordingly. This should only be used in
+conjunction with @code{@@smallbook} (@pxref{smallbook,,Printing
+``Small'' Books}) or similar, since 10@dmn{pt} fonts on standard paper
+(8.5x11 or A4) are too small. One reason to use this command is to
+save pages, and hence printing cost, for physical books.
+
+Texinfo does not at present have commands to switch the font family
+to use, or more general size-changing commands.
+
+@cindex Styles, font
+Texinfo also provides a number of font commands that specify font changes
+in the printed manual and (where possible) in the HTML output, but
+have no effect in the Info file. All the commands apply to an
+argument that follows, surrounded by braces.
+
+@table @code
+@item @@b
+@findex b @r{(bold font)}
+@cindex Bold font
+selects @b{bold} face;
+
+@item @@i
+@findex i @r{(italic font)}
+@cindex Italic font
+selects an @i{italic} font;
+
+@item @@r
+@findex r @r{(roman font)}
+@cindex Roman font
+@cindex Default font
+selects a @r{roman} font, which is the usual font in which text is
+printed. It may or may not be seriffed.
+
+@item @@sansserif
+@findex sansserif @r{(sans serif font)}
+@cindex Sans serif font
+selects a @sansserif{sans serif} font;
+
+@item @@slanted
+@findex slanted @r{(slanted font)}
+@cindex Slanted font
+@cindex Oblique font
+selects a @slanted{slanted} font;
+
+@item @@t
+@findex t @r{(typewriter font)}
+@cindex Monospace font
+@cindex Fixed-width font
+@cindex Typewriter font
+selects the @t{fixed-width}, typewriter-style font used by @code{@@code};
+
+@end table
+
+(The commands with longer names were invented much later than the
+others, at which time it did not seem desirable to use very short
+names for such an infrequently needed feature.)
+
+@cindex <lineannotation> Docbook tag
+Only the @code{@@r} command has much use: in example-like
+environments, you can use the @code{@@r} command to write comments in
+the standard roman font instead of the fixed-width font. This looks
+better in printed output, and produces a @code{<lineannotation>} tag
+in Docbook output.
+
+For example,
+
+@example
+@group
+@@lisp
+(+ 2 2) ; @@r@{Add two plus two.@}
+@@end lisp
+@end group
+@end example
+
+@noindent
+produces
+
+@lisp
+(+ 2 2) ; @r{Add two plus two.}
+@end lisp
+
+In general, you should avoid using the other font commands. Some of
+them are only useful when documenting functionality of specific font
+effects, such as in @TeX{} and related packages.
+
+
+@node Quotations and Examples
+@chapter Quotations and Examples
+
+Quotations and examples are blocks of text consisting of one or more
+whole paragraphs that are set off from the bulk of the text and
+treated differently. They are usually indented in the output.
+
+@findex end
+In Texinfo, you always begin a quotation or example by writing an
+@@-command at the beginning of a line by itself, and end it by writing
+an @code{@@end} command that is also at the beginning of a line by
+itself. For instance, you begin an example by writing @code{@@example}
+by itself at the beginning of a line and end the example by writing
+@code{@@end example} on a line by itself, at the beginning of that
+line, and with only one space between the @code{@@end} and the
+@code{example}.
+
+@menu
+* Block Enclosing Commands:: Different constructs for different purposes.
+* quotation:: Writing a quotation.
+* example:: Writing an example in a fixed-width font.
+* verbatim:: Writing a verbatim example.
+* verbatiminclude:: Including a file verbatim.
+* lisp:: Illustrating Lisp code.
+* small:: Examples in a smaller font.
+* display:: Writing an example in the current font.
+* format:: Writing an example without narrowed margins.
+* exdent:: Undo indentation on a line.
+* flushleft & flushright:: Pushing text flush left or flush right.
+* noindent:: Preventing paragraph indentation.
+* indent:: Forcing paragraph indentation.
+* cartouche:: Drawing rounded rectangles around examples.
+@end menu
+
+
+@node Block Enclosing Commands
+@section Block Enclosing Commands
+
+Here are commands for quotations and examples, explained further in the
+following sections:
+
+@table @code
+@item @@quotation
+Indicate text that is quoted. The text is filled, indented (from both
+margins), and printed in a roman font by default.
+
+@item @@example
+Illustrate code, commands, and the like. The text is printed
+in a fixed-width font, and indented but not filled.
+
+@item @@verbatim
+Mark a piece of text that is to be printed verbatim; no character
+substitutions are made and all commands are ignored, until the next
+@code{@@end verbatim}. The text is printed in a fixed-width font,
+and not indented or filled. Extra spaces and blank lines are
+significant, and tabs are expanded.
+
+@item @@smallexample
+Same as @code{@@example}, except that in @TeX{} this command typesets
+text in a smaller font.
+
+@item @@lisp
+Like @code{@@example}, but specifically for illustrating Lisp code. The
+text is printed in a fixed-width font, and indented but not filled.
+
+@item @@smalllisp
+Is to @code{@@lisp} as @code{@@smallexample} is to @code{@@example}.
+
+@item @@display
+Display illustrative text. The text is indented but not filled, and
+no font is selected (so, by default, the font is roman).@refill
+
+@item @@smalldisplay
+Is to @code{@@display} as @code{@@smallexample} is to @code{@@example}.
+
+@item @@format
+Like @code{@@display} (the text is not filled and no font is selected),
+but the text is not indented.
+
+@item @@smallformat
+Is to @code{@@format} as @code{@@smallexample} is to @code{@@example}.
+@end table
+
+The @code{@@exdent} command is used within the above constructs to
+undo the indentation of a line.
+
+The @code{@@flushleft} and @code{@@flushright} commands are used to line
+up the left or right margins of unfilled text.@refill
+
+The @code{@@noindent} command may be used after one of the above
+constructs to prevent the following text from being indented as a new
+paragraph.
+
+You can use the @code{@@cartouche} environment around one of the above
+constructs to highlight the example or quotation by drawing a box with
+rounded corners around it. @xref{cartouche, , Drawing Cartouches Around
+Examples}.
+
+
+@node quotation
+@section @code{@@quotation}: Block quotations
+@cindex Quotations
+@findex quotation
+
+The text of a quotation is processed normally (regular font, text is
+filled) except that:
+
+@itemize @bullet
+@item
+the margins are closer to the center of the page, so the whole of the
+quotation is indented;
+
+@item
+and the first lines of paragraphs are indented no more than other lines.
+
+@end itemize
+
+@quotation
+This is an example of text written between an @code{@@quotation}
+command and an @code{@@end quotation} command. An @code{@@quotation}
+command is most often used to indicate text that is excerpted from
+another (real or hypothetical) printed work.
+@end quotation
+
+Write an @code{@@quotation} command as text on a line by itself. This
+line will disappear from the output. Mark the end of the quotation
+with a line beginning with and containing only @code{@@end quotation}.
+The @code{@@end quotation} line will likewise disappear from the
+output.
+
+@code{@@quotation} takes one optional argument, given on the remainder
+of the line. This text, if present, is included at the beginning of
+the quotation in bold or otherwise emphasized, and followed with a
+@samp{:}. For example:
+
+@example
+@@quotation Note
+This is
+a foo.
+@@end quotation
+@end example
+
+@noindent
+produces
+
+@quotation Note
+This is
+a foo.
+@end quotation
+
+If the @code{@@quotation} argument is exactly one of these words:
+
+@example
+Caution Important Note Tip Warning
+@end example
+
+@cindex <note> Docbook tag
+@cindex <blockquote> HTML tag
+@noindent then the Docbook output uses corresponding special tags
+(@code{<note>}, etc.) instead of the default @code{<blockquote>}.
+HTML output always uses @code{<blockquote>}.
+
+
+@node example
+@section @code{@@example}: Example Text
+@cindex Examples, formatting them
+@cindex Formatting examples
+@findex example
+
+The @code{@@example} environment is used to indicate an example that
+is not part of the running text, such as computer input or output.
+Write an @code{@@example} command at the beginning of a line by
+itself. Mark the end of the example with an @code{@@end example}
+command, also written at the beginning of a line by itself.
+
+An @code{@@example} environment has the following characteristics:
+
+@itemize
+@item Each line in the input file is a line in the output; that is,
+the source text is not filled as it normally is.
+@item Extra spaces and blank lines are significant.
+@item The output is indented.
+@item The output uses a fixed-width font.
+@item Texinfo commands @emph{are} expanded; if you want the output to
+be the input verbatim, use the @code{@@verbatim} environment instead
+(@pxref{verbatim,,@code{@@verbatim}}).
+@end itemize
+
+For example,
+
+@example
+@@example
+cp foo @@var@{dest1@}; \
+ cp foo @@var@{dest2@}
+@@end example
+@end example
+
+@noindent
+produces
+
+@example
+cp foo @var{dest1}; \
+ cp foo @var{dest2}
+@end example
+
+The lines containing @code{@@example} and @code{@@end example} will
+disappear from the output. To make the output look good, you should
+put a blank line before the @code{@@example} and another blank line
+after the @code{@@end example}. Blank lines inside the beginning
+@code{@@example} and the ending @code{@@end example}, on the other
+hand, do appear in the output.
+
+@quotation Caution
+Do not use tabs in the lines of an example! (Or anywhere else in
+Texinfo, except in verbatim environments.) @TeX{} treats tabs as
+single spaces, and that is not what they look like. In Emacs, you can
+use @kbd{M-x untabify} to convert tabs in a region to multiple spaces.
+@end quotation
+
+Examples are often, logically speaking, ``in the middle'' of a
+paragraph, and the text that continues afterwards should not be
+indented, as in the example above. The @code{@@noindent} command
+prevents a piece of text from being indented as if it were a new
+paragraph (@pxref{noindent,,@code{@@noindent}}.
+
+If you want to embed code fragments within sentences, instead of
+displaying them, use the @code{@@code} command or its relatives
+(@pxref{code,,@code{@@code}}).
+
+If you wish to write a ``comment'' on a line of an example in the
+normal roman font, you can use the @code{@@r} command (@pxref{Fonts}).
+
+
+@node verbatim
+@section @code{@@verbatim}: Literal Text
+@findex verbatim
+@cindex Verbatim environment
+
+Use the @code{@@verbatim} environment for printing of text that may
+contain special characters or commands that should not be interpreted,
+such as computer input or output (@code{@@example} interprets its text
+as regular Texinfo commands). This is especially useful for including automatically
+generated files in a Texinfo manual.
+
+In general, the output will be just the same as the input. No
+character substitutions are made, e.g., all spaces and blank lines are
+significant, including tabs. In the printed manual, the text is
+typeset in a fixed-width font, and not indented or filled.
+
+Write a @code{@@verbatim} command at the beginning of a line by itself.
+This line will disappear from the output. Mark the end of the verbatim
+block with a @code{@@end verbatim} command, also written at the
+beginning of a line by itself. The @code{@@end verbatim} will also
+disappear from the output.
+
+For example:
+@c oops, got to trick this a bit: can't use @end verbatim inside @verbatim
+
+@example
+@exdent @t{@@verbatim}
+@exdent @t{@{}
+@exdent @key{TAB}@t{@@command with strange characters: @@'e}
+@exdent @t{expand@key{TAB}me}
+@exdent @t{@}}
+@exdent @t{@@end verbatim}
+@end example
+
+@noindent
+This produces:
+
+@verbatim
+{
+ @command with strange characters: @'e
+expand me
+}
+@end verbatim
+
+Since the lines containing @code{@@verbatim} and @code{@@end verbatim}
+produce no output, typically you should put a blank line before the
+@code{@@verbatim} and another blank line after the @code{@@end
+verbatim}. Blank lines between the beginning @code{@@verbatim} and
+the ending @code{@@end verbatim} will appear in the output.
+
+@cindex Verbatim, small
+@cindex Small verbatim
+You can get a ``small'' verbatim by enclosing the @code{@@verbatim} in
+an @code{@@smallformat} environment, as shown here:
+
+@c more cheating ...
+@smallexample
+@exdent @t{@@smallformat}
+@exdent @t{@@verbatim}
+@exdent @t{... still verbatim, but in a smaller font ...}
+@exdent @t{@@end verbatim}
+@exdent @t{@@end smallformat}
+@end smallexample
+
+Finally, a word of warning: it is not reliable to use
+@code{@@verbatim} inside other Texinfo constructs.
+
+
+@node verbatiminclude
+@section @code{@@verbatiminclude} @var{file}: Include a File Verbatim
+@cindex Verbatim, include file
+@cindex Including a file verbatim
+@findex verbatiminclude
+
+You can include the exact contents of a file in the document with the
+@code{@@verbatiminclude} command:
+
+@example
+@@verbatiminclude @var{filename}
+@end example
+
+The contents of @var{filename} is printed in a verbatim environment
+(@pxref{verbatim,,@code{@@verbatim}}). Generally, the file is printed
+exactly as it is, with all special characters and white space
+retained. No indentation is added; if you want indentation, enclose
+the @code{@@verbatiminclude} within @code{@@example}
+(@pxref{example,,@code{@@example}}).
+
+The name of the file is taken literally, with a single exception:
+@code{@@value@{@var{var}@}} references are expanded. This makes it
+possible to include files in other directories within a distribution,
+for instance:
+
+@example
+@@verbatiminclude @@value@{top_srcdir@}/NEWS
+@end example
+
+@noindent (You still have to get @code{top_srcdir} defined in the
+first place.)
+
+For a method on printing the file contents in a smaller font size, see
+the end of the previous section on @code{@@verbatim}.
+
+
+@node lisp
+@section @code{@@lisp}: Marking a Lisp Example
+@findex lisp
+@cindex Lisp example
+
+The @code{@@lisp} command is used for Lisp code. It is synonymous
+with the @code{@@example} command.
+
+@lisp
+This is an example of text written between an
+@code{@@lisp} command and an @code{@@end lisp} command.
+@end lisp
+
+Use @code{@@lisp} instead of @code{@@example} to preserve information
+regarding the nature of the example. This is useful, for example, if
+you write a function that evaluates only and all the Lisp code in a
+Texinfo file. Then you can use the Texinfo file as a Lisp
+library.@footnote{It would be straightforward to extend Texinfo to work
+in a similar fashion for C, Fortran, or other languages.}
+
+Mark the end of @code{@@lisp} with @code{@@end lisp} on a line by
+itself.
+
+
+@node small
+@section @code{@@small@dots{}} Block Commands
+@cindex Small examples
+@cindex Examples in smaller fonts
+@cindex Lisp examples in smaller fonts
+@findex smalldisplay
+@findex smallexample
+@findex smallformat
+@findex smalllisp
+
+In addition to the regular @code{@@example} and @code{@@lisp} commands,
+Texinfo has ``small'' example-style commands. These are
+@code{@@smalldisplay}, @code{@@smallexample}, @code{@@smallformat}, and
+@code{@@smalllisp}.
+
+In Info, the @code{@@small@dots{}} commands are equivalent to their
+non-small companion commands.
+
+In @TeX{}, however, the @code{@@small@dots{}} commands typeset text in
+a smaller font than the non-small example commands. Consequently,
+many examples containing long lines fit on a page without needing to
+be shortened.
+
+Mark the end of an @code{@@small@dots{}} block with a corresponding
+@code{@@end small@dots{}}. For example, pair @code{@@smallexample} with
+@code{@@end smallexample}.
+
+Here is an example of the font used by the @code{@@small@dots{}}
+commands (in Info, the output will be the same as usual):
+
+@smallexample
+@dots{} to make sure that you have the freedom to
+distribute copies of free software (and charge for
+this service if you wish), that you receive source
+code or can get it if you want it, that you can
+change the software or use pieces of it in new free
+programs; and that you know you can do these things.
+@end smallexample
+
+The @code{@@small@dots{}} commands make it easier to prepare manuals
+without forcing you to edit examples by hand to fit them onto narrower
+pages.
+
+As a general rule, a printed document looks much better if you use
+only one of (for instance) @code{@@example} or @code{@@smallexample}
+consistently within a chapter.
+
+
+@node display
+@section @code{@@display} and @code{@@smalldisplay}
+@cindex Display formatting
+@findex display
+
+The @code{@@display} command begins a kind of example, where each line
+of input produces a line of output, and the output is indented. It is
+thus like the @code{@@example} command except that, in a printed
+manual, @code{@@display} does not select the fixed-width font. In
+fact, it does not specify the font at all, so that the text appears in
+the same font it would have appeared in without the @code{@@display}
+command.
+
+@display
+This is an example of text written between an @code{@@display} command
+and an @code{@@end display} command. The @code{@@display} command
+indents the text, but does not fill it.
+@end display
+
+@findex smalldisplay
+Texinfo also provides a command @code{@@smalldisplay}, which is like
+@code{@@display} but uses a smaller font in @code{@@smallbook} format.
+@xref{small}.
+
+The @code{@@table} command (@pxref{table}) does not work inside
+@code{@@display}. Since @code{@@display} is line-oriented, it doesn't
+make sense to use them together. If you want to indent a table, try
+@code{@@quotation} (@pxref{quotation}).
+
+
+@node format
+@section @code{@@format} and @code{@@smallformat}
+@findex format
+
+The @code{@@format} command is similar to @code{@@example} except
+that, in the printed manual, @code{@@format} does not select the
+fixed-width font and does not narrow the margins.
+
+@format
+This is an example of text written between an @code{@@format} command
+and an @code{@@end format} command. As you can see
+from this example,
+the @code{@@format} command does not fill the text.
+@end format
+
+@findex smallformat
+Texinfo also provides a command @code{@@smallformat}, which is like
+@code{@@format} but uses a smaller font in @code{@@smallbook} format.
+@xref{small}.
+
+
+
+@node exdent
+@section @code{@@exdent}: Undoing a Line's Indentation
+@cindex Indentation undoing
+@findex exdent
+
+The @code{@@exdent} command removes any indentation a line might have.
+The command is written at the beginning of a line and applies only to
+the text that follows the command that is on the same line. Do not use
+braces around the text. In a printed manual, the text on an
+@code{@@exdent} line is printed in the roman font.@refill
+
+@code{@@exdent} is usually used within examples. Thus,@refill
+
+@example
+@group
+@@example
+This line follows an @@@@example command.
+@@exdent This line is exdented.
+This line follows the exdented line.
+The @@@@end example comes on the next line.
+@@end example
+@end group
+@end example
+
+@noindent
+produces
+
+@example
+@group
+This line follows an @@example command.
+@exdent This line is exdented.
+This line follows the exdented line.
+The @@end example comes on the next line.
+@end group
+@end example
+
+In practice, the @code{@@exdent} command is rarely used.
+Usually, you un-indent text by ending the example and
+returning the page to its normal width.@refill
+
+
+@node flushleft & flushright
+@section @code{@@flushleft} and @code{@@flushright}
+@findex flushleft
+@findex flushright
+@cindex Ragged right
+@cindex Ragged left
+
+The @code{@@flushleft} and @code{@@flushright} commands line up the
+ends of lines on the left and right margins of a page,
+but do not fill the text. The commands are written on lines of their
+own, without braces. The @code{@@flushleft} and @code{@@flushright}
+commands are ended by @code{@@end flushleft} and @code{@@end
+flushright} commands on lines of their own.@refill
+
+@need 1500
+For example,
+
+@example
+@group
+@@flushleft
+This text is
+written flushleft.
+@@end flushleft
+@end group
+@end example
+
+@noindent
+produces
+
+@quotation
+@flushleft
+This text is
+written flushleft.
+@end flushleft
+@end quotation
+
+
+@code{@@flushright} produces the type of indentation often used in the
+return address of letters. For example,
+
+@example
+@group
+@@flushright
+Here is an example of text written
+flushright. The @@code@{@@flushright@} command
+right justifies every line but leaves the
+left end ragged.
+@@end flushright
+@end group
+@end example
+
+@noindent
+produces
+
+@flushright
+Here is an example of text written
+flushright. The @code{@@flushright} command
+right justifies every line but leaves the
+left end ragged.
+@end flushright
+
+
+@node noindent
+@section @code{@@noindent}: Omitting Indentation
+@cindex Omitting indentation
+@cindex Suppressing indentation
+@cindex Indentation, omitting
+@findex noindent
+
+An example or other inclusion can break a paragraph into segments.
+Ordinarily, the formatters indent text that follows an example as a new
+paragraph. You can prevent this on a case-by-case basis by writing
+@code{@@noindent} at the beginning of a line, preceding the continuation
+text. You can also disable indentation for all paragraphs globally with
+@code{@@paragraphindent} (@pxref{paragraphindent, Paragraph Indenting}).
+
+It is best to write @code{@@noindent} on a line by itself, since in most
+environments, spaces following the command will not be ignored. It's ok
+to use it at the beginning of a line, with text following, outside of
+any environment.
+
+@need 1500
+For example:
+
+@example
+@group
+@@example
+This is an example
+@@end example
+
+@@noindent
+This line is not indented. As you can see, the
+beginning of the line is fully flush left with the line
+that follows after it. (This whole example is between
+@@code@{@@@@display@} and @@code@{@@@@end display@}.)
+@end group
+@end example
+
+@noindent produces:
+
+@display
+
+@example
+This is an example
+@end example
+
+@noindent
+This line is not indented. As you can see, the
+beginning of the line is fully flush left with the line
+that follows after it. (This whole example is between
+@code{@@display} and @code{@@end display}.)
+
+@end display
+
+To adjust the number of blank lines properly in the Info file output,
+remember that the line containing @code{@@noindent} does not generate a
+blank line, and neither does the @code{@@end example} line.
+
+In the Texinfo source file for this manual, each line that says
+`produces' is preceded by @code{@@noindent}.
+
+Do not put braces after an @code{@@noindent} command; they are not
+necessary, since @code{@@noindent} is a command used outside of
+paragraphs (@pxref{Command Syntax}).
+
+
+@node indent
+@section @code{@@indent}: Forcing Indentation
+@cindex Forcing indentation
+@cindex Inserting indentation
+@cindex Indentation, forcing
+@findex indent
+
+@indent
+To complement the @code{@@noindent} command (see the previous
+section), Texinfo provides the @code{@@indent} command that forces a
+paragraph to be indented. This paragraph, for instance, is indented
+using an @code{@@indent} command. The first paragraph of a section is
+the most likely place to use @code{@@indent}, to override the normal
+behavior of no indentation there (@pxref{paragraphindent}).
+
+It is best to write @code{@@indent} on a line by itself, since in most
+environments, spaces following the command will not be ignored. The
+@code{@@indent} line will not generate a blank line in the Info output
+within an environment.
+
+However, it is ok to use it at the beginning of a line, with text
+following, outside of any environment.
+
+Do not put braces after an @code{@@indent} command; they are not
+necessary, since @code{@@indent} is a command used outside of
+paragraphs (@pxref{Command Syntax}).
+
+
+@node cartouche
+@section @code{@@cartouche}: Rounded Rectangles Around Examples
+@findex cartouche
+@cindex Box with rounded corners
+@cindex Rounded rectangles, around examples
+
+In a printed manual, the @code{@@cartouche} command draws a box with
+rounded corners around its contents. In HTML, a normal rectangle is
+drawn (that's the best HTML can do). @code{@@cartouche} has no effect
+in Info output.
+
+You can use this command to further highlight an example or quotation.
+For instance, you could write a manual in which one type of example is
+surrounded by a cartouche for emphasis.
+
+For example,
+
+@example
+@@cartouche
+@@example
+% pwd
+/usr/local/share/emacs
+@@end example
+@@end cartouche
+@end example
+
+@noindent
+surrounds the two-line example with a box with rounded corners, in the
+printed manual.
+
+The output from the example looks like this (if you're reading this in
+Info, you'll see the @code{@@cartouche} had no effect):
+
+@cartouche
+@example
+% pwd
+/usr/local/info
+@end example
+@end cartouche
+
+For proper output in HTML, it's necessary to put the
+@code{@@cartouche} around the @code{@@example}, and not the other way
+around. This limitation of @command{makeinfo} may be removed one day.
+
+@code{@@cartouche} also implies @code{@@group} (@pxref{group}).
+
+@node Lists and Tables
+@chapter Lists and Tables
+@cindex Making lists and tables
+@cindex Lists and tables, making
+@cindex Tables and lists, making
+
+Texinfo has several ways of making lists and tables. Lists can be
+bulleted or numbered; two-column tables can highlight the items in
+the first column; multi-column tables are also supported.
+
+@menu
+* Introducing Lists:: Texinfo formats lists for you.
+* itemize:: How to construct a simple list.
+* enumerate:: How to construct a numbered list.
+* Two-column Tables:: How to construct a two-column table.
+* Multi-column Tables:: How to construct generalized tables.
+@end menu
+
+@node Introducing Lists
+@section Introducing Lists
+
+Texinfo automatically indents the text in lists or tables, and numbers
+an enumerated list. This last feature is useful if you modify the
+list, since you do not need to renumber it yourself.@refill
+
+Numbered lists and tables begin with the appropriate @@-command at the
+beginning of a line, and end with the corresponding @code{@@end}
+command on a line by itself. The table and itemized-list commands
+also require that you write formatting information on the same line as
+the beginning @@-command.@refill
+
+Begin an enumerated list, for example, with an @code{@@enumerate}
+command and end the list with an @code{@@end enumerate} command.
+Begin an itemized list with an @code{@@itemize} command, followed on
+the same line by a formatting command such as @code{@@bullet}, and end
+the list with an @code{@@end itemize} command.@refill
+@findex end
+
+Precede each element of a list with an @code{@@item} or @code{@@itemx}
+command.@refill
+
+@sp 1
+@noindent
+Here is an itemized list of the different kinds of table and lists:@refill
+
+@itemize @bullet
+@item
+Itemized lists with and without bullets.
+
+@item
+Enumerated lists, using numbers or letters.
+
+@item
+Two-column tables with highlighting.
+@end itemize
+
+@sp 1
+@noindent
+Here is an enumerated list with the same items:@refill
+
+@enumerate
+@item
+Itemized lists with and without bullets.
+
+@item
+Enumerated lists, using numbers or letters.
+
+@item
+Two-column tables with highlighting.
+@end enumerate
+
+@sp 1
+@noindent
+And here is a two-column table with the same items and their
+@w{@@-commands}:@refill
+
+@table @code
+@item @@itemize
+Itemized lists with and without bullets.
+
+@item @@enumerate
+Enumerated lists, using numbers or letters.
+
+@item @@table
+@itemx @@ftable
+@itemx @@vtable
+Two-column tables, optionally with indexing.
+@end table
+
+
+@node itemize
+@section @code{@@itemize}: Making an Itemized List
+@cindex Itemization
+@findex itemize
+
+The @code{@@itemize} command produces sequences of indented
+paragraphs, with a bullet or other mark inside the left margin
+at the beginning of each paragraph for which such a mark is desired.@refill
+
+@cindex @code{@@w}, for blank items
+Begin an itemized list by writing @code{@@itemize} at the beginning of
+a line. Follow the command, on the same line, with a character or a
+Texinfo command that generates a mark. Usually, you will write
+@code{@@bullet} after @code{@@itemize}, but you can use
+@code{@@minus}, or any command or character that results in a single
+character in the Info file. If you don't want any mark at all, use
+@code{@@w}. (When you write the mark command such as
+@code{@@bullet} after an @code{@@itemize} command, you may omit the
+@samp{@{@}}.) If you don't specify a mark command, the default is
+@code{@@bullet}.
+
+Write the text of the indented paragraphs themselves after the
+@code{@@itemize}, up to another line that says @code{@@end
+itemize}.@refill
+
+@findex item
+At the beginning of each paragraph for which a mark in the margin is
+desired, write a line that starts with @code{@@item}. It is ok to
+have text following the @code{@@item}.
+
+Usually, you should put a blank line before an @code{@@item}. This
+puts a blank line in the Info file. (@TeX{} inserts the proper
+interline whitespace in either case.) Except when the entries are
+very brief, these blank lines make the list look better.@refill
+
+Here is an example of the use of @code{@@itemize}, followed by the
+output it produces. @code{@@bullet} produces an @samp{*} in Info and a
+round dot in @TeX{}.
+
+@example
+@group
+@@itemize @@bullet
+@@item
+Some text for foo.
+
+@@item
+Some text
+for bar.
+@@end itemize
+@end group
+@end example
+
+@noindent
+This produces:
+
+@quotation
+@itemize @bullet
+@item
+Some text for foo.
+
+@item
+Some text
+for bar.
+@end itemize
+@end quotation
+
+Itemized lists may be embedded within other itemized lists. Here is a
+list marked with dashes embedded in a list marked with bullets:@refill
+
+@example
+@group
+@@itemize @@bullet
+@@item
+First item.
+
+@@itemize @@minus
+@@item
+Inner item.
+
+@@item
+Second inner item.
+@@end itemize
+
+@@item
+Second outer item.
+@@end itemize
+@end group
+@end example
+
+@noindent
+This produces:
+
+@quotation
+@itemize @bullet
+@item
+First item.
+
+@itemize @minus
+@item
+Inner item.
+
+@item
+Second inner item.
+@end itemize
+
+@item
+Second outer item.
+@end itemize
+@end quotation
+
+
+@node enumerate
+@section @code{@@enumerate}: Making a Numbered or Lettered List
+@cindex Enumeration
+@findex enumerate
+
+@code{@@enumerate} is like @code{@@itemize} (@pxref{itemize,,
+@code{@@itemize}}), except that the labels on the items are
+successive integers or letters instead of bullets.
+
+Write the @code{@@enumerate} command at the beginning of a line. The
+command does not require an argument, but accepts either a number or a
+letter as an option. Without an argument, @code{@@enumerate} starts the
+list with the number @samp{1}. With a numeric argument, such as
+@samp{3}, the command starts the list with that number. With an upper
+or lower case letter, such as @samp{a} or @samp{A}, the command starts
+the list with that letter.
+
+Write the text of the enumerated list in the same way as an itemized
+list: write a line starting with @code{@@item} at the beginning of
+each paragraph that you want enumerated. It is ok to have text
+following the @code{@@item}.
+
+You should put a blank line between entries in the list.
+This generally makes it easier to read the Info file.
+
+@need 1500
+Here is an example of @code{@@enumerate} without an argument:
+
+@example
+@group
+@@enumerate
+@@item
+Underlying causes.
+
+@@item
+Proximate causes.
+@@end enumerate
+@end group
+@end example
+
+@noindent
+This produces:
+
+@enumerate
+@item
+Underlying causes.
+
+@item
+Proximate causes.
+@end enumerate
+@sp 1
+Here is an example with an argument of @kbd{3}:@refill
+@sp 1
+@example
+@group
+@@enumerate 3
+@@item
+Predisposing causes.
+
+@@item
+Precipitating causes.
+
+@@item
+Perpetuating causes.
+@@end enumerate
+@end group
+@end example
+
+@noindent
+This produces:
+
+@enumerate 3
+@item
+Predisposing causes.
+
+@item
+Precipitating causes.
+
+@item
+Perpetuating causes.
+@end enumerate
+@sp 1
+Here is a brief summary of the alternatives. The summary is constructed
+using @code{@@enumerate} with an argument of @kbd{a}.@refill
+@sp 1
+@enumerate a
+@item
+@code{@@enumerate}
+
+Without an argument, produce a numbered list, starting with the number
+1.@refill
+
+@item
+@code{@@enumerate @var{positive-integer}}
+
+With a (positive) numeric argument, start a numbered list with that
+number. You can use this to continue a list that you interrupted with
+other text.@refill
+
+@item
+@code{@@enumerate @var{upper-case-letter}}
+
+With an upper case letter as argument, start a list
+in which each item is marked
+by a letter, beginning with that upper case letter.@refill
+
+@item
+@code{@@enumerate @var{lower-case-letter}}
+
+With a lower case letter as argument, start a list
+in which each item is marked by
+a letter, beginning with that lower case letter.@refill
+@end enumerate
+
+You can also nest enumerated lists, as in an outline.@refill
+
+@node Two-column Tables
+@section Making a Two-column Table
+@cindex Tables, making two-column
+@findex table
+
+@code{@@table} is similar to @code{@@itemize} (@pxref{itemize,,
+@code{@@itemize}}), but allows you to specify a name or heading line for
+each item. The @code{@@table} command is used to produce two-column
+tables, and is especially useful for glossaries, explanatory
+exhibits, and command-line option summaries.
+
+@menu
+* table:: How to construct a two-column table.
+* ftable vtable:: Automatic indexing for two-column tables.
+* itemx:: How to put more entries in the first column.
+@end menu
+
+@node table
+@subsection Using the @code{@@table} Command
+
+@cindex Definition lists, typesetting
+Use the @code{@@table} command to produce two-column tables. It is
+usually listed for ``definition lists'' of various sorts, where you
+have a list of terms and a brief text with each one.
+
+Write the @code{@@table} command at the beginning of a line, after a
+blank line, and follow it on the same line with an argument that is a
+Texinfo ``indicating'' command such as @code{@@code}, @code{@@samp},
+@code{@@var}, @code{@@option}, or @code{@@kbd} (@pxref{Indicating}).
+
+This command will be applied to the text that goes into the first
+column of each item and thus determines how it will be highlighted.
+For example, @code{@@table @@code} will cause the text in the first
+column to be output as if it @code{@@code} command.
+
+@findex asis
+You may also use the @code{@@asis} command as an argument to
+@code{@@table}. @code{@@asis} is a command that does nothing; if you
+use this command after @code{@@table}, the first column entries are
+output without added highlighting (``as is'').
+
+The @code{@@table} command works with other commands besides those
+explicitly mentioned here. However, you can only use commands that
+normally take arguments in braces. (In this case, however, you use
+the command name without an argument, because the subsequent
+@code{@@item}'s will supply the argument.)
+
+@findex item
+Begin each table entry with an @code{@@item} command at the beginning
+of a line. Write the first column text on the same line as the
+@code{@@item} command. Write the second column text on the line
+following the @code{@@item} line and on subsequent lines. (You do not
+need to type anything for an empty second column entry.) You may
+write as many lines of supporting text as you wish, even several
+paragraphs. But only the text on the same line as the @code{@@item}
+will be placed in the first column (including any footnotes).
+
+Normally, you should put a blank line before an @code{@@item} line.
+This puts a blank line in the Info file. Except when the entries are
+very brief, a blank line looks better.
+
+End the table with a line consisting of @code{@@end table}, followed
+by a blank line. @TeX{} will always start a new paragraph after the
+table, so the blank line is needed for the Info output to be analogous.
+
+@need 1500
+The following table, for example, highlights the text in the first
+column with an @code{@@samp} command:
+
+@example
+@group
+@@table @@samp
+@@item foo
+This is the text for
+@@samp@{foo@}.
+
+@@item bar
+Text for @@samp@{bar@}.
+@@end table
+@end group
+@end example
+
+@noindent
+This produces:
+
+@table @samp
+@item foo
+This is the text for
+@samp{foo}.
+@item bar
+Text for @samp{bar}.
+@end table
+
+If you want to list two or more named items with a single block of
+text, use the @code{@@itemx} command. (@xref{itemx,,@code{@@itemx}}.)
+
+
+@node ftable vtable
+@subsection @code{@@ftable} and @code{@@vtable}
+@cindex Tables with indexes
+@cindex Indexing table entries automatically
+@findex ftable
+@findex vtable
+
+The @code{@@ftable} and @code{@@vtable} commands are the same as the
+@code{@@table} command except that @code{@@ftable} automatically enters
+each of the items in the first column of the table into the index of
+functions and @code{@@vtable} automatically enters each of the items in
+the first column of the table into the index of variables. This
+simplifies the task of creating indices. Only the items on the same
+line as the @code{@@item} commands are indexed, and they are indexed in
+exactly the form that they appear on that line. @xref{Indices},
+for more information about indices.@refill
+
+Begin a two-column table using @code{@@ftable} or @code{@@vtable} by
+writing the @@-command at the beginning of a line, followed on the same
+line by an argument that is a Texinfo command such as @code{@@code},
+exactly as you would for an @code{@@table} command; and end the table
+with an @code{@@end ftable} or @code{@@end vtable} command on a line by
+itself.
+
+See the example for @code{@@table} in the previous section.
+
+@node itemx
+@subsection @code{@@itemx}
+@cindex Two named items for @code{@@table}
+@findex itemx
+
+Use the @code{@@itemx} command inside a table when you have two or more
+first column entries for the same item, each of which should appear on a
+line of its own.
+
+Use @code{@@item} for the first entry, and @code{@@itemx} for all
+subsequent entries; @code{@@itemx} must always follow an @code{@@item}
+command, with no blank line intervening.
+
+The @code{@@itemx} command works exactly like @code{@@item} except
+that it does not generate extra vertical space above the first column
+text. If you have multiple consecutive @code{@@itemx} commands, do
+not insert any blank lines between them.
+
+For example,
+
+@example
+@group
+@@table @@code
+@@item upcase
+@@itemx downcase
+These two functions accept a character or a string as
+argument, and return the corresponding upper case (lower
+case) character or string.
+@@end table
+@end group
+@end example
+
+@noindent
+This produces:
+
+@table @code
+@item upcase
+@itemx downcase
+These two functions accept a character or a string as
+argument, and return the corresponding upper case (lower
+case) character or string.@refill
+@end table
+
+@noindent
+(Note also that this example illustrates multi-line supporting text in
+a two-column table.)@refill
+
+
+@node Multi-column Tables
+@section @code{@@multitable}: Multi-column Tables
+@cindex Tables, making multi-column
+@findex multitable
+
+@code{@@multitable} allows you to construct tables with any number of
+columns, with each column having any width you like.
+
+You define the column widths on the @code{@@multitable} line itself, and
+write each row of the actual table following an @code{@@item} command,
+with columns separated by an @code{@@tab} command. Finally, @code{@@end
+multitable} completes the table. Details in the sections below.
+
+@menu
+* Multitable Column Widths:: Defining multitable column widths.
+* Multitable Rows:: Defining multitable rows, with examples.
+@end menu
+
+@node Multitable Column Widths
+@subsection Multitable Column Widths
+@cindex Multitable column widths
+@cindex Column widths, defining for multitables
+@cindex Widths, defining multitable column
+
+You can define the column widths for a multitable in two ways: as
+fractions of the line length; or with a prototype row. Mixing the two
+methods is not supported. In either case, the widths are defined
+entirely on the same line as the @code{@@multitable} command.
+
+@enumerate
+@item
+@findex columnfractions
+@cindex Line length, column widths as fraction of
+To specify column widths as fractions of the line length, write
+@code{@@columnfractions} and the decimal numbers (presumably less than
+1; a leading zero is allowed and ignored) after the
+@code{@@multitable} command, as in:
+
+@example
+@@multitable @@columnfractions .33 .33 .33
+@end example
+
+The fractions need not add up exactly to 1.0, as these do not. This
+allows you to produce tables that do not need the full line length.
+
+@item
+@cindex Prototype row, column widths defined by
+To specify a prototype row, write the longest entry for each column
+enclosed in braces after the @code{@@multitable} command. For example:
+
+@example
+@@multitable @{some text for column one@} @{for column two@}
+@end example
+
+@noindent
+The first column will then have the width of the typeset `some text for
+column one', and the second column the width of `for column two'.
+
+The prototype entries need not appear in the table itself.
+
+Although we used simple text in this example, the prototype entries can
+contain Texinfo commands; markup commands such as @code{@@code} are
+particularly likely to be useful.
+
+@end enumerate
+
+
+@node Multitable Rows
+@subsection Multitable Rows
+@cindex Multitable rows
+@cindex Rows, of a multitable
+
+@findex item
+@findex tab
+After the @code{@@multitable} command defining the column widths (see
+the previous section), you begin each row in the body of a multitable
+with @code{@@item}, and separate the column entries with @code{@@tab}.
+Line breaks are not special within the table body, and you may break
+input lines in your source file as necessary.
+
+@findex headitem
+@cindex Heading row, in table
+@cindex <thead> HTML tag
+You can also use @code{@@headitem} instead of @code{@@item} to produce
+a @dfn{heading row}. The @TeX{} output for such a row is in bold, and
+the HTML, XML, and Docbook output uses the @code{<thead>} tag. In
+Info, the heading row is followed by a separator line made of dashes
+(@samp{-} characters).
+
+Here is a complete example of a multi-column table (the text is from
+@cite{The GNU Emacs Manual}, @pxref{Split Window,, Splitting Windows,
+emacs, The GNU Emacs Manual}):
+
+@example
+@@multitable @@columnfractions .15 .45 .4
+@@headitem Key @@tab Command @@tab Description
+@@item C-x 2
+@@tab @@code@{split-window-vertically@}
+@@tab Split the selected window into two windows,
+with one above the other.
+@@item C-x 3
+@@tab @@code@{split-window-horizontally@}
+@@tab Split the selected window into two windows
+positioned side by side.
+@@item C-Mouse-2
+@@tab
+@@tab In the mode line or scroll bar of a window,
+split that window.
+@@end multitable
+@end example
+
+@noindent produces:
+
+@multitable @columnfractions .15 .45 .4
+@headitem Key @tab Command @tab Description
+@item C-x 2
+@tab @code{split-window-vertically}
+@tab Split the selected window into two windows,
+with one above the other.
+@item C-x 3
+@tab @code{split-window-horizontally}
+@tab Split the selected window into two windows
+positioned side by side.
+@item C-Mouse-2
+@tab
+@tab In the mode line or scroll bar of a window,
+split that window.
+@end multitable
+
+
+@node Special Displays
+@chapter Special Displays
+@cindex Special displays
+
+The commands in this chapter allow you to write text that is specially
+displayed (output format permitting), outside of the normal document
+flow.
+
+One set of such commands is for creating ``floats'', that is, figures,
+tables, and the like, set off from the main text, possibly numbered,
+captioned, and/or referred to from elsewhere in the document. Images
+are often included in these displays.
+
+Another group of commands is for creating footnotes in Texinfo.
+
+@menu
+* Floats:: Figures, tables, and the like.
+* Images:: Including graphics and images.
+* Footnotes:: Writing footnotes.
+@end menu
+
+
+@node Floats
+@section Floats
+@cindex Floats, in general
+
+A @dfn{float} is a display which is set off from the main text. It is
+typically labelled as being a ``Figure'', ``Table'', ``Example'', or
+some similar type.
+
+@cindex Floating, not yet implemented
+A float is so-named because, in principle, it can be moved to the
+bottom or top of the current page, or to a following page, in the
+printed output. (Floating does not make sense in other output
+formats.) In the present version of Texinfo, however, this floating
+is unfortunately not yet implemented. Instead, the floating material
+is simply output at the current location, more or less as if it were
+an @code{@@group} (@pxref{group,,@code{@@group}}).
+
+@menu
+* float:: Producing floating material.
+* caption shortcaption:: Specifying descriptions for floats.
+* listoffloats:: A table of contents for floats.
+@end menu
+
+
+@node float
+@subsection @code{@@float} [@var{type}][,@var{label}]: Floating Material
+@findex float
+@cindex Float environment
+
+To produce floating material, enclose the material you want to be
+displayed separate between @code{@@float} and @code{@@end float}
+commands, on lines by themselves.
+
+Floating material uses @code{@@image} to display an already-existing
+graphic (@pxref{Images}), or @code{@@multitable} to display a table
+(@pxref{Multi-column Tables}). However, the contents of the float can
+be anything. Here's an example with simple text:
+
+@example
+@@float Figure,fig:ex1
+This is an example float.
+@@end float
+@end example
+
+@noindent And the output:
+
+@float Figure,fig:ex1
+This is an example float.
+@end float
+
+As shown in the example, @code{@@float} takes two arguments (separated
+by a comma), @var{type} and @var{label}. Both are optional.
+
+@table @var
+@item type
+Specifies the sort of float this is; typically a word such as
+``Figure'', ``Table'', etc. If not given, and @var{label} is, any
+cross-referencing will simply use a bare number.
+
+@item label
+Specifies a cross-reference label for this float. If given, this
+float is automatically given a number, and will appear in any
+@code{@@listoffloats} output (@pxref{listoffloats}). Cross-references
+to @var{label} are allowed.
+
+@cindex Floats, making unnumbered
+@cindex Unnumbered float, creating
+On the other hand, if @var{label} is not given, then the float will
+not be numbered and consequently will not appear in the
+@code{@@listoffloats} output or be cross-referenceable.
+@end table
+
+@noindent Normally, you specify both @var{type} and @var{label}, to get a
+labeled and numbered float.
+
+@cindex Floats, numbering of
+@cindex Numbering of floats
+In Texinfo, all floats are numbered the same way: with the chapter
+number (or appendix letter), a period, and the float number, which
+simply counts 1, 2, 3, @dots{}, and is reset at each chapter. Each
+float type is counted independently.
+
+Floats within an @code{@@unnumbered} are numbered, or outside of any
+chapter, are simply numbered consecutively from 1.
+
+These numbering conventions are not, at present, changeable.
+
+
+@node caption shortcaption
+@subsection @code{@@caption} & @code{@@shortcaption}
+@findex caption
+@findex shortcaption
+@cindex Captions, for floats
+@cindex Short captions, for lists of floats
+
+You may write an @code{@@caption} anywhere within a @code{@@float}
+environment, to define a caption for the float. It is not allowed in
+any other context. @code{@@caption} takes a single argument, enclosed
+in braces. Here's an example:
+
+@example
+@@float
+An example float, with caption.
+@@caption@{Caption for example float.@}
+@@end float
+@end example
+
+@noindent The output is:
+
+@float
+An example float, with caption.
+@caption{Caption for example float.}
+@end float
+
+@code{@@caption} can appear anywhere within the float; it is not
+processed until the @code{@@end float}. The caption text is usually a
+sentence or two, but may consist of several paragraphs if necessary.
+
+In the output, the caption always appears below the float; this is not
+currently changeable. It is preceded by the float type and/or number,
+as specified to the @code{@@float} command (see the previous section).
+
+The @code{@@shortcaption} command likewise may be used only within
+@code{@@float}, and takes a single argument in braces. The short
+caption text is used instead of the caption text in a list of floats
+(see the next section). Thus, you can write a long caption for the
+main document, and a short title to appear in the list of floats. For
+example:
+
+@example
+@@float
+... as above ...
+@@shortcaption@{Text for list of floats.@}
+@@end float
+@end example
+
+The text for @code{@@caption} and @code{@@shortcaption} may not
+contain comments (@code{@@c}), verbatim text (@code{@@verb}),
+environments such as @code{@@example}, or other complex constructs.
+
+
+@node listoffloats
+@subsection @code{@@listoffloats}: Tables of Contents for Floats
+@findex listoffloats
+@cindex List of floats
+@cindex Floats, list of
+@cindex Table of contents, for floats
+
+You can write a @code{@@listoffloats} command to generate a list of
+floats for a given float type (@pxref{float}), analogous to the
+document's overall table of contents. Typically, it is written in its
+own @code{@@unnumbered} node to provide a heading and structure,
+rather like @code{@@printindex} (@pxref{Printing Indices & Menus}).
+
+@code{@@listoffloats} takes one optional argument, the float type.
+Here's an example:
+
+@example
+@@node List of Figures
+@@unnumbered List of Figures
+@@listoffloats Figure
+@end example
+
+@noindent And the output from @code{@@listoffloats}:
+
+@display
+@listoffloats Figure
+@end display
+
+Without any argument, @code{@@listoffloats} generates a list of
+floats for which no float type was specified, i.e., no first argument
+to the @code{@@float} command (@pxref{float}).
+
+Each line in the list of floats contains the float type (if any),
+the float number, and the caption, if any---the @code{@@shortcaption}
+argument, if it was specified, else the @code{@@caption} argument.
+In Info, the result is a menu where each float can be selected. In
+HTML, each line is a link to the float. In printed output, the page
+number is included.
+
+Unnumbered floats (those without cross-reference labels) are omitted
+from the list of floats.
+
+
+@node Images
+@section Inserting Images
+
+@cindex Images, inserting
+@cindex Pictures, inserting
+@findex image
+
+You can insert an image given in an external file with the
+@code{@@image} command. Although images can be used anywhere,
+including the middle of a paragraph, we describe them in this chapter
+since they are most often part of a displayed figure or example.
+
+@menu
+* Image Syntax::
+* Image Scaling::
+@end menu
+
+
+@node Image Syntax
+@subsection Image Syntax
+
+Here is the synopsis of the @code{@@image} command:
+
+@example
+@@image@{@var{filename}@r{[,} @var{width}@r{[,} @var{height}@r{[,} @var{alttext}@r{[, }@var{extension}@r{]]]]}@}
+@end example
+
+@cindex Formats for images
+@cindex Image formats
+The @var{filename} argument is mandatory, and must not have an
+extension, because the different processors support different formats:
+
+@itemize @bullet
+@item
+@pindex eps image format
+@TeX{} reads the file @file{@var{filename}.eps} (Encapsulated PostScript
+format).
+@item
+@pindex pdftex@r{, and images}
+@pindex png image format
+@pindex jpeg image format
+@pindex pdf image inclusions
+pdf@TeX{} reads @file{@var{filename}.png}, @file{@var{filename}.jpg},
+@file{@var{filename}.jpeg}, or @file{@var{filename}.pdf} (in that
+order). It also tries uppercase versions of the extensions. The PDF
+format cannot support EPS images, so they must be converted first.
+@item
+@code{makeinfo} includes @file{@var{filename}.txt} verbatim for
+Info output (more or less as if it was an @code{@@example}).
+@item
+@code{makeinfo} uses the optional fifth argument @var{extension} to
+@code{@@image} for the filename extension, if it is specified. For example:
+
+@pindex XPM image format
+@example
+@@image@{foo,,,,.xpm@}
+@end example
+
+@noindent
+will cause @code{makeinfo} to look for @file{foo.xpm} before any others.
+
+@end itemize
+
+The @var{width} and @var{height} arguments are described in the next
+section.
+
+For @TeX{} output, if an image is the only thing in a paragraph it
+will ordinarily be displayed on a line by itself, respecting the
+current environment indentation, but without the normal paragraph
+indentation. If you want it centered, use @code{@@center}
+(@pxref{titlefont center sp,,@code{@@titlefont @@center @@sp}}).
+
+@cindex Alt attribute for images
+@cindex Images, alternate text for
+@findex - (in image alt string)
+For HTML output, @code{makeinfo} sets the @dfn{alt attribute} for
+inline images to the optional @var{alttext} (fourth) argument to
+@code{@@image}, if supplied. If not supplied, @code{makeinfo} uses
+the full file name of the image being displayed. The @var{alttext} is
+taken as Texinfo text, so special characters such as @samp{"} and
+@samp{<} and @samp{&} are escaped in the HTML and XML output; also,
+you can get an empty @code{alt} string with @code{@@-} (a command
+that produces no output; @pxref{- and hyphenation}).
+
+For Info output, the @code{alt} string is also processed as Texinfo
+text and output. In this case, @samp{\} is escaped as @samp{\\} and
+@samp{"} as @samp{\"}; no other escapes are done.
+
+@cindex PNG image format
+@cindex JPEG image format
+If you do not supply the optional @var{extension} (fifth) argument,
+@code{makeinfo} first tries @file{@var{filename}.png}; if that does
+not exist, it tries @file{@var{filename}.jpg}. If that does not exist
+either, it complains.
+
+In Info output, @code{makeinfo} writes a reference to the binary image
+file (trying @var{filename} suffixed with @file{@var{extension}},
+@file{@var{.extension}}, @file{.png}, or @file{.jpg}, in that order)
+if one exists. It also literally includes the @file{.txt} file if one
+exists. This way, Info readers which can display images (such as the
+Emacs Info browser, running under X) can do so, whereas Info readers
+which can only use text (such as the standalone Info reader) can
+display the textual version.
+
+@cindex @samp{^@@^H} for images in Info
+The implementation of this is to put the following construct into the
+Info output:
+
+@example
+^@@^H[image src="@var{binaryfile}" text="@var{txtfile}"
+ alt="@var{alttext} ... ^@@^H]
+@end example
+
+@noindent where @samp{^@@} and @samp{^H} stand for the actual null and
+backspace control characters. If one of the files is not present, the
+corresponding argument is omitted.
+
+The reason for mentioning this here is that older Info browsers (this
+feature was introduced in Texinfo version 4.6) will display the above
+literally, which, although not pretty, should not be harmful.
+
+
+@node Image Scaling
+@subsection Image Scaling
+
+@cindex Images, scaling
+@cindex Scaling images
+@cindex Width of images
+@cindex Height of images
+@cindex Aspect ratio of images
+@cindex Distorting images
+The optional @var{width} and @var{height} arguments to the
+@code{@@image} command (see the previous section) specify the size to
+scale the image to. They are ignored for Info output. If neither is
+specified, the image is presented in its natural size (given in the
+file); if only one is specified, the other is scaled proportionately;
+and if both are specified, both are respected, thus possibly distorting
+the original image by changing its aspect ratio.
+
+@cindex Dimensions and image sizes
+The @var{width} and @var{height} may be specified using any valid @TeX{}
+dimension, namely:
+
+@table @asis
+@item pt
+@cindex Points (dimension)
+point (72.27pt = 1in)
+@item pc
+@cindex Picas
+pica (1pc = 12pt)
+@item bp
+@cindex Big points
+big point (72bp = 1in)
+@item in
+@cindex Inches
+inch
+@item cm
+@cindex Centimeters
+centimeter (2.54cm = 1in)
+@item mm
+@cindex Millimeters
+millimeter (10mm = 1cm)
+@item dd
+@cindex Did@^ot points
+did@^ot point (1157dd = 1238pt)
+@item cc
+@cindex Ciceros
+cicero (1cc = 12dd)
+@item sp
+@cindex Scaled points
+scaled point (65536sp = 1pt)
+@end table
+
+@pindex ridt.eps
+For example, the following will scale a file @file{ridt.eps} to one
+inch vertically, with the width scaled proportionately:
+
+@example
+@@image@{ridt,,1in@}
+@end example
+
+@pindex epsf.tex
+For @code{@@image} to work with @TeX{}, the file @file{epsf.tex} must be
+installed somewhere that @TeX{} can find it. (The standard location is
+@file{@var{texmf}/tex/generic/dvips/epsf.tex}, where @var{texmf} is a
+root of your @TeX{} directory tree.) This file is included in the
+Texinfo distribution and is also available from
+@uref{ftp://tug.org/tex/epsf.tex}, among other places.
+
+@code{@@image} can be used within a line as well as for displayed
+figures. Therefore, if you intend it to be displayed, be sure to leave
+a blank line before the command, or the output will run into the
+preceding text.
+
+Image scaling is presently implemented only in @TeX{}, not in HTML or
+any other sort of output.
+
+
+@node Footnotes
+@section Footnotes
+@cindex Footnotes
+@findex footnote
+
+A @dfn{footnote} is for a reference that documents or elucidates the
+primary text.@footnote{A footnote should complement or expand upon
+the primary text, but a reader should not need to read a footnote to
+understand the primary text. For a thorough discussion of footnotes,
+see @cite{The Chicago Manual of Style}, which is published by the
+University of Chicago Press.} Footnotes are distracting; use them
+sparingly, if at all. Standard bibliographical references are better
+placed in a bibliography at the end of a document than in footnotes
+throughout.
+
+@menu
+* Footnote Commands:: How to write a footnote in Texinfo.
+* Footnote Styles:: Controlling how footnotes appear in Info.
+@end menu
+
+
+@node Footnote Commands
+@subsection Footnote Commands
+
+In Texinfo, footnotes are created with the @code{@@footnote} command.
+This command is followed immediately by a left brace, then by the text
+of the footnote, and then by a terminating right brace. Footnotes may
+be of any length (they will be broken across pages if necessary), but
+are usually short. The template is:
+
+@example
+ordinary text@@footnote@{@var{text of footnote}@}
+@end example
+
+As shown here, the @code{@@footnote} command should come right after the
+text being footnoted, with no intervening space; otherwise, the footnote
+marker might end up starting a line.
+
+For example, this clause is followed by a sample footnote@footnote{Here
+is the sample footnote.}; in the Texinfo source, it looks like
+this:
+
+@example
+@dots{}a sample footnote@@footnote@{Here is the sample
+footnote.@}; in the Texinfo source@dots{}
+@end example
+
+As you can see, the source includes two punctuation marks next to each
+other; in this case, @samp{.@};} is the sequence. This is normal (the
+first ends the footnote and the second belongs to the sentence being
+footnoted), so don't worry that it looks odd.
+
+In a printed manual or book, the reference mark for a footnote is a
+small, superscripted number; the text of the footnote appears at the
+bottom of the page, below a horizontal line.
+
+In Info, the reference mark for a footnote is a pair of parentheses
+with the footnote number between them, like this: @samp{(1)}. The
+reference mark is followed by a cross-reference link to the footnote's
+text.
+
+In the HTML output, footnote references are marked with a small,
+superscripted number which is rendered as a hypertext link to the
+footnote text.
+
+By the way, footnotes in the argument of an @code{@@item} command for a
+@code{@@table} must be on the same line as the @code{@@item}
+(as usual). @xref{Two-column Tables}.
+
+
+@node Footnote Styles
+@subsection Footnote Styles
+
+Info has two footnote styles, which determine where the text of the
+footnote is located:
+
+@itemize @bullet
+@cindex @samp{@r{End}} node footnote style
+@item
+In the `End' node style, all the footnotes for a single node
+are placed at the end of that node. The footnotes are separated from
+the rest of the node by a line of dashes with the word
+@samp{Footnotes} within it. Each footnote begins with an
+@samp{(@var{n})} reference mark.
+
+@need 700
+@noindent
+Here is an example of a single footnote in the end of node style:@refill
+
+@example
+@group
+--------- Footnotes ---------
+
+(1) Here is a sample footnote.
+@end group
+@end example
+
+@cindex @samp{@r{Separate}} footnote style
+@item
+In the `Separate' node style, all the footnotes for a single
+node are placed in an automatically constructed node of
+their own. In this style, a ``footnote reference'' follows
+each @samp{(@var{n})} reference mark in the body of the
+node. The footnote reference is actually a cross reference
+which you use to reach the footnote node.
+
+The name of the node with the footnotes is constructed
+by appending @w{@samp{-Footnotes}} to the name of the node
+that contains the footnotes. (Consequently, the footnotes'
+node for the @file{Footnotes} node is
+@w{@file{Footnotes-Footnotes}}!) The footnotes' node has an
+`Up' node pointer that leads back to its parent node.
+
+@noindent
+Here is how the first footnote in this manual looks after being
+formatted for Info in the separate node style:
+
+@smallexample
+@group
+File: texinfo.info Node: Overview-Footnotes, Up: Overview
+
+(1) The first syllable of "Texinfo" is pronounced like "speck", not
+"hex". @dots{}
+@end group
+@end smallexample
+@end itemize
+
+Unless your document has long and important footnotes (as in, say,
+Gibbon's @cite{Decline and Fall @dots{}}), we recommend the @samp{end}
+style, as it is simpler for readers to follow.
+
+@findex footnotestyle
+Use the @code{@@footnotestyle} command to specify an Info file's
+footnote style. Write this command at the beginning of a line followed
+by an argument, either @samp{end} for the end node style or
+@samp{separate} for the separate node style.
+
+@need 700
+For example,
+
+@example
+@@footnotestyle end
+@end example
+@noindent
+or
+@example
+@@footnotestyle separate
+@end example
+
+Write an @code{@@footnotestyle} command before or shortly after the
+end-of-header line at the beginning of a Texinfo file. (If you
+include the @code{@@footnotestyle} command between the start-of-header
+and end-of-header lines, the region formatting commands will format
+footnotes as specified.)@refill
+
+If you do not specify a footnote style, the formatting commands use
+their default style. Currently, @code{texinfo-format-buffer} and
+@code{texinfo-format-region} use the `separate' style and
+@code{makeinfo} uses the `end' style.
+
+
+@node Indices
+@chapter Indices
+@cindex Indices
+
+Using Texinfo, you can generate indices without having to sort and
+collate entries manually. In an index, the entries are listed in
+alphabetical order, together with information on how to find the
+discussion of each entry. In a printed manual, this information
+consists of page numbers. In an Info file, this information is a menu
+entry leading to the first node referenced.
+
+Texinfo provides several predefined kinds of index: an index
+for functions, an index for variables, an index for concepts, and so
+on. You can combine indices or use them for other than their
+canonical purpose. Lastly, you can define your own new indices.
+
+@xref{Printing Indices & Menus}, for information on how to print
+indices.
+
+@menu
+* Index Entries:: Choose different words for index entries.
+* Predefined Indices:: Use different indices for different kinds
+ of entries.
+* Indexing Commands:: How to make an index entry.
+* Combining Indices:: How to combine indices.
+* New Indices:: How to define your own indices.
+@end menu
+
+
+@node Index Entries
+@section Making Index Entries
+@cindex Index entries, making
+@cindex Entries, making index
+
+When you are making index entries, it is good practice to think of the
+different ways people may look for something. Different people
+@emph{do not} think of the same words when they look something up. A
+helpful index will have items indexed under all the different words
+that people may use. For example, one reader may think it obvious that
+the two-letter names for indices should be listed under ``Indices,
+two-letter names'', since the word ``Index'' is the general concept.
+But another reader may remember the specific concept of two-letter
+names and search for the entry listed as ``Two letter names for
+indices''. A good index will have both entries and will help both
+readers.@refill
+
+Like typesetting, the construction of an index is a highly skilled,
+professional art, the subtleties of which are not appreciated until you
+need to do it yourself.@refill
+
+@xref{Printing Indices & Menus}, for information about printing an index
+at the end of a book or creating an index menu in an Info file.@refill
+
+
+@node Predefined Indices
+@section Predefined Indices
+
+Texinfo provides six predefined indices. Here are their nominal
+meanings, abbreviations, and the corresponding index entry commands:
+
+@table @samp
+@item cp
+@cindex @code{cp} (concept) index
+(@code{@@cindex}) concept index, for general concepts.
+@item fn
+@cindex @code{fn} (function) index
+(@code{@@findex}) function index, for function and function-like
+names (such as entry points of libraries).
+@item ky
+@cindex @code{ky} (keystroke) index
+(@code{@@kindex}) keystroke index, for keyboard commands.
+@item pg
+@cindex @code{pg} (program) index
+(@code{@@pindex}) program index, for names of programs.
+@item tp
+@cindex @code{tp} (data type) index
+(@code{@@tindex}) data type index, for type names (such as structures
+defined in header files).
+@item vr
+@cindex @code{vr} (variable) index
+(@code{@@vindex}) variable index, for variable names (such as global
+variables of libraries).
+@end table
+
+@noindent
+Not every manual needs all of these, and most manuals use only two or
+three at most. The present manual, for example, has two indices: a
+concept index and an @@-command index (that is actually the function
+index but is called a command index in the chapter heading).
+
+You are not required to use the predefined indices strictly for their
+canonical purposes. For example, suppose you wish to index some C
+preprocessor macros. You could put them in the function index along
+with actual functions, just by writing @code{@@findex} commands for
+them; then, when you print the ``Function Index'' as an unnumbered
+chapter, you could give it the title `Function and Macro Index' and
+all will be consistent for the reader.
+
+On the other hand, it is best not to stray too far from the meaning of
+the predefined indices. Otherwise, in the event that your text is
+combined with other text from other manuals, the index entries will
+not match up. Instead, define your own new index (@pxref{New
+Indices}).
+
+We recommend having a single index in the final document whenever
+possible, however many source indices you use, since then readers have
+only one place to look. Two or more source indices can be combined
+into one output index using the @code{@@synindex} or
+@code{@@syncodeindex} commands (@pxref{Combining Indices}).
+
+
+@node Indexing Commands
+@section Defining the Entries of an Index
+@cindex Defining indexing entries
+@cindex Index entries
+@cindex Entries for an index
+@cindex Specifying index entries
+@cindex Creating index entries
+
+The data to make an index come from many individual indexing commands
+scattered throughout the Texinfo source file. Each command says to add
+one entry to a particular index; after formatting, the index will give
+the current page number or node name as the reference.@refill
+
+An index entry consists of an indexing command at the beginning of a
+line followed, on the rest of the line, by the entry.@refill
+
+For example, this section begins with the following five entries for
+the concept index:@refill
+
+@example
+@@cindex Defining indexing entries
+@@cindex Index entries, defining
+@@cindex Entries for an index
+@@cindex Specifying index entries
+@@cindex Creating index entries
+@end example
+
+Each predefined index has its own indexing command---@code{@@cindex}
+for the concept index, @code{@@findex} for the function index, and so
+on, as listed in the previous section.
+
+@cindex Writing index entries
+@cindex Index entry writing
+Concept index entries consist of text. The best way to write an index
+is to choose entries that are terse yet clear. If you can do this,
+the index often looks better if the entries are not capitalized, but
+written just as they would appear in the middle of a sentence.
+(Capitalize proper names and acronyms that always call for upper case
+letters.) This is the case convention we use in most GNU manuals'
+indices.
+
+If you don't see how to make an entry terse yet clear, make it longer
+and clear---not terse and confusing. If many of the entries are several
+words long, the index may look better if you use a different convention:
+to capitalize the first word of each entry. But do not capitalize a
+case-sensitive name such as a C or Lisp function name or a shell
+command; that would be a spelling error.
+
+Whichever case convention you use, please use it consistently!
+
+Entries in indices other than the concept index are symbol names in
+programming languages, or program names; these names are usually
+case-sensitive, so use upper and lower case as required for them.
+
+@cindex Index font types
+By default, entries for a concept index are printed in a small roman
+font and entries for the other indices are printed in a small
+@code{@@code} font. You may change the way part of an entry is
+printed with the usual Texinfo commands, such as @code{@@file} for
+file names (@pxref{Marking Text}), and @code{@@r} for the normal roman
+font (@pxref{Fonts}).
+
+@quotation Caution
+Do not use a colon in an index entry. In Info, a colon separates the
+menu entry name from the node name, so a colon in the entry itself
+confuses Info. @xref{Menu Parts}, for more information about the
+structure of a menu entry.
+@end quotation
+
+
+@node Combining Indices
+@section Combining Indices
+@cindex Combining indices
+@cindex Indices, combining them
+
+Sometimes you will want to combine two disparate indices such as
+functions and concepts, perhaps because you have few enough entries
+that a separate index would look silly.
+
+You could put functions into the concept index by writing
+@code{@@cindex} commands for them instead of @code{@@findex} commands,
+and produce a consistent manual by printing the concept index with the
+title `Function and Concept Index' and not printing the `Function
+Index' at all; but this is not a robust procedure. It works only if
+your document is never included as part of another document that is
+designed to have a separate function index; if your document were to
+be included with such a document, the functions from your document and
+those from the other would not end up together. Also, to make your
+function names appear in the right font in the concept index, you
+would need to enclose every one of them between the braces of
+@code{@@code}.
+
+@menu
+* syncodeindex:: How to merge two indices, using @code{@@code}
+ font for the merged-from index.
+* synindex:: How to merge two indices, using the
+ default font of the merged-to index.
+@end menu
+
+@node syncodeindex
+@subsection @code{@@syncodeindex}
+@findex syncodeindex
+
+When you want to combine functions and concepts into one index, you
+should index the functions with @code{@@findex} and index the concepts
+with @code{@@cindex}, and use the @code{@@syncodeindex} command to
+redirect the function index entries into the concept index.@refill
+
+The @code{@@syncodeindex} command takes two arguments; they are the name
+of the index to redirect, and the name of the index to redirect it to.
+The template looks like this:@refill
+
+@example
+@@syncodeindex @var{from} @var{to}
+@end example
+
+@cindex Predefined names for indices
+@cindex Two letter names for indices
+@cindex Indices, two letter names
+@cindex Names for indices
+For this purpose, the indices are given two-letter names:@refill
+
+@table @samp
+@item cp
+concept index
+@item fn
+function index
+@item vr
+variable index
+@item ky
+key index
+@item pg
+program index
+@item tp
+data type index
+@end table
+
+Write an @code{@@syncodeindex} command before or shortly after the
+end-of-header line at the beginning of a Texinfo file. For example,
+to merge a function index with a concept index, write the
+following:@refill
+
+@example
+@@syncodeindex fn cp
+@end example
+
+@noindent
+This will cause all entries designated for the function index to merge
+in with the concept index instead.@refill
+
+To merge both a variables index and a function index into a concept
+index, write the following:@refill
+
+@example
+@group
+@@syncodeindex vr cp
+@@syncodeindex fn cp
+@end group
+@end example
+
+@cindex Fonts for indices
+The @code{@@syncodeindex} command puts all the entries from the `from'
+index (the redirected index) into the @code{@@code} font, overriding
+whatever default font is used by the index to which the entries are
+now directed. This way, if you direct function names from a function
+index into a concept index, all the function names are printed in the
+@code{@@code} font as you would expect.@refill
+
+@node synindex
+@subsection @code{@@synindex}
+@findex synindex
+
+The @code{@@synindex} command is nearly the same as the
+@code{@@syncodeindex} command, except that it does not put the
+`from' index entries into the @code{@@code} font; rather it puts
+them in the roman font. Thus, you use @code{@@synindex} when you
+merge a concept index into a function index.@refill
+
+@xref{Printing Indices & Menus}, for information about printing an index
+at the end of a book or creating an index menu in an Info file.@refill
+
+
+@node New Indices
+@section Defining New Indices
+@cindex Defining new indices
+@cindex Indices, defining new
+@cindex New index defining
+@findex defindex
+@findex defcodeindex
+
+In addition to the predefined indices, you may use the
+@code{@@defindex} and @code{@@defcodeindex} commands to define new
+indices. These commands create new indexing @@-commands with which
+you mark index entries. The @code{@@defindex} command is used like
+this:
+
+@example
+@@defindex @var{name}
+@end example
+
+The name of an index should be a two letter word, such as @samp{au}.
+For example:
+
+@example
+@@defindex au
+@end example
+
+This defines a new index, called the @samp{au} index. At the same
+time, it creates a new indexing command, @code{@@auindex}, that you
+can use to make index entries. Use this new indexing command just as
+you would use a predefined indexing command.
+
+For example, here is a section heading followed by a concept index
+entry and two @samp{au} index entries.
+
+@example
+@@section Cognitive Semantics
+@@cindex kinesthetic image schemas
+@@auindex Johnson, Mark
+@@auindex Lakoff, George
+@end example
+
+@noindent
+(Evidently, @samp{au} serves here as an abbreviation for ``author''.)
+
+In general, Texinfo constructs the new indexing command by
+concatenating the name of the index with @samp{index}; thus, defining
+an @samp{xy} index leads to the automatic creation of an
+@code{@@xyindex} command.
+
+Use the @code{@@printindex} command to print the index, as you do with
+the predefined indices. For example:
+
+@example
+@group
+@@node Author Index
+@@unnumbered Author Index
+
+@@printindex au
+@end group
+@end example
+
+The @code{@@defcodeindex} is like the @code{@@defindex} command,
+except that, in the printed output, it prints entries in an
+@code{@@code} font by default instead of a roman font.
+
+You should define new indices before the end-of-header line of a
+Texinfo file, and (of course) before any @code{@@synindex} or
+@code{@@syncodeindex} commands (@pxref{Texinfo File Header}).
+
+
+@node Insertions
+@chapter Special Insertions
+@cindex Inserting special characters and symbols
+@cindex Special insertions
+
+Texinfo provides several commands for inserting characters that have
+special meaning in Texinfo, such as braces, and for other graphic
+elements that do not correspond to simple characters you can type.
+
+@iftex
+These are:
+
+@itemize @bullet
+@item @samp{@@} and braces and commas.
+@item Whitespace within and around a sentence.
+@item Accents.
+@item Dots and bullets.
+@item The @TeX{} logo and the copyright symbol.
+@item The euro and pounds currency symbols.
+@item The degrees symbol.
+@item The minus sign.
+@item Mathematical expressions.
+@item Glyphs for evaluation, macros, errors, etc.
+@item Footnotes.
+@item Images.
+@end itemize
+@end iftex
+
+@menu
+* Atsign Braces Comma:: Inserting @@ and @{@} and ,.
+* Inserting Quote Characters:: Inserting left and right quotes, in code.
+* Inserting Space:: How to insert the right amount of space
+ within a sentence.
+* Inserting Accents:: How to insert accents and special characters.
+* Inserting Quotation Marks:: How to insert quotation marks.
+* Dots Bullets:: How to insert dots and bullets.
+* TeX and copyright:: How to insert the @TeX{} logo
+ and the copyright symbol.
+* euro:: How to insert the Euro currency symbol.
+* pounds:: How to insert the pounds currency symbol.
+* textdegree:: How to insert the degrees symbol.
+* minus:: How to insert a minus sign.
+* geq leq:: How to insert greater/less-than-or-equal signs.
+* math:: How to format a mathematical expression.
+* Click Sequences:: Inserting GUI usage sequences.
+* Glyphs:: How to indicate results of evaluation,
+ expansion of macros, errors, etc.
+@end menu
+
+
+@node Atsign Braces Comma
+@section Inserting @@ and @{@} and @comma{}
+@cindex Special characters, inserting
+@cindex Commands to insert special characters
+
+@samp{@@} and curly braces are special characters in Texinfo. To insert
+these characters so they appear in text, you must put an @samp{@@} in
+front of these characters to prevent Texinfo from misinterpreting
+them.
+
+The comma `,' is a special character only in one uncommon context:
+it separates arguments to commands that take multiple arguments.
+
+@menu
+* Inserting an Atsign::
+* Inserting Braces::
+* Inserting a Comma::
+@end menu
+
+
+@node Inserting an Atsign
+@subsection Inserting `@@' with @code{@@@@}
+@findex @@ @r{(literal @samp{@@})}
+@cindex Inserting @@ @r{(literal @samp{@@})}
+
+@code{@@@@} stands for a single @samp{@@} in either printed or Info
+output.
+
+Do not put braces after an @code{@@@@} command.
+
+
+@node Inserting Braces
+@subsection Inserting `@{' and `@}' with @code{@@@{} and @code{@@@}}
+@cindex Braces, inserting
+@findex @{ @r{(literal @samp{@{})}
+@findex @} @r{(literal @samp{@}})}
+
+@code{@@@{} stands for a single @samp{@{} in either printed or Info
+output.
+
+@code{@@@}} stands for a single @samp{@}} in either printed or Info
+output.
+
+Do not put braces after either an @code{@@@{} or an @code{@@@}}
+command.
+
+
+@node Inserting a Comma
+@subsection Inserting `,' with @code{@@comma@{@}}
+@cindex Commas, inserting
+@findex comma
+
+Ordinarily, a comma `,' is a normal character that can be simply typed
+in your input where you need it.
+
+However, Texinfo uses the comma as a special character in one uncommon
+context: some commands, such as @code{@@acronym} (@pxref{acronym}) and
+@code{@@xref} (@pxref{Cross References}), as well as user-defined
+macros (@pxref{Defining Macros}), can take more than one argument. In
+these cases, the comma character is used to separate arguments.
+
+Since a comma character would confuse Texinfo's parsing for these
+commands, you must use the command @samp{@@comma@{@}} instead if you want
+to pass an actual comma. Here are some examples:
+
+@example
+@@acronym@{ABC, A Bizarre @@comma@{@}@}
+@@xref@{Comma,, The @@comma@{@} symbol@}
+@@mymac@{One argument@@comma@{@} containing a comma@}
+@end example
+
+Although @comma{} can be used nearly anywhere, there is no need for it
+anywhere except in this unusual case.
+
+
+@node Inserting Quote Characters
+@section Inserting Quote Characters
+
+@cindex Inserting quote characters
+@cindex Quote characters, inserting
+
+As explained in the early section on general Texinfo input conventions
+(@pxref{Conventions}), Texinfo source files use the ASCII character
+@code{`} (96 decimal) to produce a left quote (`), and ASCII @code{'}
+(39 decimal) to produce a right quote ('). Doubling these input
+characters (@code{``} and @code{''}) produces double quotes (`` and
+''). These are the conventions used by @TeX{}.
+
+This works all right for text. However, in examples of computer code,
+readers are especially likely to cut and paste the text
+verbatim---and, unfortunately, some document viewers will mangle these
+characters. (The free PDF reader @command{xpdf} works fine, but other
+PDF readers, both free and nonfree, have problems.)
+
+If this is a concern for your document, Texinfo provides two special
+settings via @code{@@set}:
+
+@table @code
+@item @@set txicodequoteundirected
+causes the output for the @code{'} character to be the undirected
+single quote, like this:
+@set txicodequoteundirected
+@code{'}.
+@clear txicodequoteundirected
+
+@item @@set txicodequotebacktick
+Cause the output for the @code{`} character to be the standalone grave
+accent, like this:
+@set txicodequotebacktick
+@code{`}.
+@clear txicodequotebacktick
+
+@end table
+
+@code{xyza`'bc}
+
+If you want these settings for only part of the document,
+@code{@@clear} will restore the normal behavior, as in
+@code{@@clear@tie{}txicodequoteundirected}.
+
+These settings affect @code{@@code}, @code{@@example}, and
+@code{@@verbatim}; they do not affect @code{@@samp}. (@xref{Useful
+Highlighting}.)
+
+
+@node Inserting Space
+@section Inserting Space
+
+@cindex Inserting space
+@cindex Spacing, inserting
+The following sections describe commands that control spacing of various
+kinds within and after sentences.
+
+@menu
+* Not Ending a Sentence:: Sometimes a . doesn't end a sentence.
+* Ending a Sentence:: Sometimes it does.
+* Multiple Spaces:: Inserting multiple spaces.
+* frenchspacing:: Specifying end-of-sentence spacing.
+* dmn:: How to format a dimension.
+@end menu
+
+
+@node Not Ending a Sentence
+@subsection Not Ending a Sentence
+
+@cindex Not ending a sentence
+@cindex Sentence non-ending punctuation
+@cindex Periods, inserting
+Depending on whether a period or exclamation point or question mark is
+inside or at the end of a sentence, less or more space is inserted after
+a period in a typeset manual. Since it is not always possible
+to determine when a period ends a sentence and when it is used
+in an abbreviation, special commands are needed in some circumstances.
+Usually, Texinfo can guess how to handle periods, so you do not need to
+use the special commands; you just enter a period as you would if you
+were using a typewriter, which means you put two spaces after the
+period, question mark, or exclamation mark that ends a sentence.
+
+@findex <colon> @r{(suppress end-of-sentence space)}
+Use the @code{@@:}@: command after a period, question mark,
+exclamation mark, or colon that should not be followed by extra space.
+For example, use @code{@@:}@: after periods that end abbreviations
+which are not at the ends of sentences.
+
+For example,
+
+@example
+foo vs.@@: bar
+foo vs. bar
+@end example
+
+@noindent
+@ifnottex
+produces
+@end ifnottex
+@iftex
+produces the following. If you look carefully at this printed output,
+you will see a little extraneous space after @samp{vs.}@: in the second
+line.
+@end iftex
+
+@quotation
+foo vs.@: bar @*
+foo vs. bar
+@end quotation
+
+@noindent
+@code{@@:} has no effect on the Info and HTML output. In Docbook and
+XML, the previous punctuation character (.?!:) is output as an entity
+instead of as the normal character: @samp{&period; &quest; &excl;
+&colon;}. This gives further processors a chance to notice and not
+add the usual extra space.
+
+Do not put braces after @code{@@:} (or any non-alphabetic command).
+
+
+@node Ending a Sentence
+@subsection Ending a Sentence
+
+@cindex Ending a Sentence
+@cindex Sentence ending punctuation
+
+@findex . @r{(end of sentence)}
+@findex ! @r{(end of sentence)}
+@findex ? @r{(end of sentence)}
+Use @code{@@.}@: instead of a period, @code{@@!}@: instead of an
+exclamation point, and @code{@@?}@: instead of a question mark at the end
+of a sentence that ends with a capital letter. Otherwise, @TeX{}
+will think the letter is an abbreviation and will not insert the correct
+end-of-sentence spacing. Here is an example:
+
+@example
+Give it to M.I.B. and to M.E.W@@. Also, give it to R.J.C@@.
+Give it to M.I.B. and to M.E.W. Also, give it to R.J.C.
+@end example
+
+@noindent
+@ifnottex
+produces
+@end ifnottex
+@iftex
+produces the following. If you look carefully at this printed output,
+you will see a little more whitespace after the @samp{W} in the first
+line.
+@end iftex
+
+@quotation
+Give it to M.I.B. and to M.E.W@. Also, give it to R.J.C@.@*
+Give it to M.I.B. and to M.E.W. Also, give it to R.J.C.
+@end quotation
+
+In the Info file output, @code{@@.}@: is equivalent to a simple
+@samp{.}; likewise for @code{@@!}@: and @code{@@?}@:.
+
+The meanings of @code{@@:} and @code{@@.}@: in Texinfo are designed to
+work well with the Emacs sentence motion commands (@pxref{Sentences,,,
+emacs, The GNU Emacs Manual}).
+
+Do not put braces after any of these commands.
+
+
+@node Multiple Spaces
+@subsection Multiple Spaces
+
+@cindex Multiple spaces
+@cindex Whitespace, inserting
+@cindex Space, inserting horizontal
+@findex <space>
+@findex <tab>
+@findex <newline>
+
+Ordinarily, @TeX{} collapses multiple whitespace characters (space, tab,
+and newline) into a single space. Info output, on the other hand,
+preserves whitespace as you type it, except for changing a newline into
+a space; this is why it is important to put two spaces at the end of
+sentences in Texinfo documents.
+
+Occasionally, you may want to actually insert several consecutive
+spaces, either for purposes of example (what your program does with
+multiple spaces as input), or merely for purposes of appearance in
+headings or lists. Texinfo supports three commands:
+@code{@@@kbd{SPACE}}, @code{@@@kbd{TAB}}, and @code{@@@kbd{NL}}, all of
+which insert a single space into the output. (Here,
+@code{@@@kbd{SPACE}} represents an @samp{@@} character followed by a
+space, i.e., @samp{@@ }, and @kbd{TAB} and @kbd{NL} represent the tab
+character and end-of-line, i.e., when @samp{@@} is the last character on
+a line.)
+
+For example,
+@example
+Spacey@@ @@ @@ @@
+example.
+@end example
+
+@noindent produces
+
+@example
+Spacey@ @ @ @
+example.
+@end example
+
+Other possible uses of @code{@@@kbd{SPACE}} have been subsumed by
+@code{@@multitable} (@pxref{Multi-column Tables}).
+
+Do not follow any of these commands with braces.
+
+To produce a non-breakable space, see @ref{tie, @code{@@tie}}.
+
+
+@node frenchspacing
+@subsection @code{@@frenchspacing} @var{val}: Control sentence spacing
+@findex frenchspacing
+@cindex French spacing
+@cindex Sentences, spacing after
+@cindex Space, after sentences
+
+In American typography, it is traditional and correct to put extra
+space at the end of a sentence, after a semi-colon, and so on. This
+is the default in Texinfo. In French typography (and many others),
+this extra space is wrong; all spaces are uniform.
+
+Therefore Texinfo provides the @code{@@frenchspacing} command to
+control the spacing after punctuation. It reads the rest of the line
+as its argument, which must be the single word @samp{on} or @samp{off}
+(always these words, regardless of the language) of the document.
+Here is an example:
+
+@example
+@@frenchspacing on
+This is text. Two sentences. Three sentences. French spacing.
+
+@@frenchspacing off
+This is text. Two sentences. Three sentences. Non-French spacing.
+@end example
+
+@noindent produces (there will be no difference in Info):
+
+@frenchspacing on
+This is text. Two sentences. Three sentences. French spacing.
+
+@frenchspacing off
+This is text. Two sentences. Three sentences. Non-French spacing.
+
+@code{@@frenchspacing} mainly affects the printed output, including
+the output after @code{@@.}, @code{@@!}, and @code{@@?} (@pxref{Ending
+a Sentence}).
+
+In Info, usually space characters in the input are written unaltered
+to the output, and @code{@@frenchspacing} does not change this. It
+does change the one case where @command{makeinfo} outputs a space on
+its own: when a sentence ends at a newline in the source. Here's an
+example:
+
+@example
+Some sentence.
+Next sentence.
+@end example
+
+@noindent produces in Info output, with @code{@@frenchspacing off}
+(the default), two spaces between the sentences:
+
+@example
+Some sentence. Next sentence.
+@end example
+
+@noindent With @code{@@frenchspacing on}, @command{makeinfo} outputs
+only a single space:
+
+@example
+Some sentence. Next sentence.
+@end example
+
+@code{@@frenchspacing} has no effect on the HTML or Docbook output;
+for XML, it outputs a transliteration of itself (@pxref{Output
+Formats}).
+
+
+@node dmn
+@subsection @code{@@dmn}@{@var{dimension}@}: Format a Dimension
+@cindex Thin space between number, dimension
+@cindex Dimension formatting
+@cindex Format a dimension
+@findex dmn
+
+At times, you may want to write @samp{12@dmn{pt}} or
+@samp{8.5@dmn{in}} with little or no space between the number and the
+abbreviation for the dimension. You can use the @code{@@dmn} command
+to do this. On seeing the command, @TeX{} inserts just enough space
+for proper typesetting; the Info formatting commands insert no space
+at all, since the Info file does not require it.
+
+To use the @code{@@dmn} command, write the number and then follow it
+immediately, with no intervening space, by @code{@@dmn}, and then by
+the dimension within braces. For example,
+
+@example
+A4 paper is 8.27@@dmn@{in@} wide.
+@end example
+
+@noindent
+produces
+
+@quotation
+A4 paper is 8.27@dmn{in} wide.
+@end quotation
+
+Not everyone uses this style. Some people prefer @w{@samp{8.27 in.@@:}}
+or @w{@samp{8.27 inches}} to @samp{8.27@@dmn@{in@}} in the Texinfo file.
+In these cases, however, the formatters may insert a line break between
+the number and the dimension, so use @code{@@w} (@pxref{w}). Also, if
+you write a period after an abbreviation within a sentence, you should
+write @samp{@@:} after the period to prevent @TeX{} from inserting extra
+whitespace, as shown here. @xref{Not Ending a Sentence}.
+
+
+@node Inserting Accents
+@section Inserting Accents
+
+@cindex Inserting accents
+@cindex Accents, inserting
+@cindex Floating accents, inserting
+
+Here is a table with the commands Texinfo provides for inserting
+floating accents. They all need an argument, the character to accent,
+which can either be given in braces as usual (@code{@@'@{e@}}), or, as
+a special case, the braces can be omitted, in which case the argument
+is the next character (@code{@@'e}). This is to make the source as
+convenient as possible to type and read, since accented characters are
+very common in some languages.
+
+If the command is alphabetic, such as @code{@@dotaccent}, then there
+must be a space between the command name and argument if braces are
+not used. If the command is non-alphabetic, such as @code{@@'}, then
+there must @emph{not} be a space; the argument is the very next
+character.
+
+Exception: the argument to @code{@@tieaccent} must be enclosed in
+braces (since it is two characters instead of one).
+
+@findex documentencoding
+To get the true accented characters output in Info, not just the ASCII
+transliterations, it is necessary to specify @code{@@documentencoding}
+with an encoding which supports the required characters
+(@pxref{documentencoding,,@code{@@documentencoding}}). In this case,
+you can also use non-ASCII (e.g., pre-accented) characters in the
+source file.
+
+@findex " @r{(umlaut accent)}
+@cindex Umlaut accent
+@findex ' @r{(umlaut accent)}
+@cindex Acute accent
+@findex = @r{(macron accent)}
+@cindex Macron accent
+@findex ^ @r{(circumflex accent)}
+@cindex Circumflex accent
+@findex ` @r{(grave accent)}
+@cindex Grave accent
+@findex ~ @r{(tilde accent)}
+@cindex Tilde accent
+@findex , @r{(cedilla accent)}
+@cindex Cedilla accent
+@findex dotaccent
+@cindex Dot accent
+@findex H @r{(Hungarian umlaut accent)}
+@cindex Hungarian umlaut accent
+@findex ringaccent
+@cindex Ring accent
+@findex tieaccent
+@cindex Tie-after accent
+@findex u @r{(breve accent)}
+@cindex Breve accent
+@findex ubaraccent
+@cindex Underbar accent
+@findex udotaccent
+@cindex Underdot accent
+@findex v @r{(check accent)}
+@cindex Hacek accent
+@cindex Check accent
+@cindex Caron accent
+@multitable {@t{@@questiondown@{@}}} {Output} {hacek/check/caron accent}
+@headitem Command @tab Output @tab What
+@item @t{@@"o} @tab @"o @tab umlaut accent
+@item @t{@@'o} @tab @'o @tab acute accent
+@item @t{@@,@{c@}} @tab @,{c} @tab cedilla accent
+@item @t{@@=o} @tab @=o @tab macron/overbar accent
+@item @t{@@^o} @tab @^o @tab circumflex accent
+@item @t{@@`o} @tab @`o @tab grave accent
+@item @t{@@~o} @tab @~o @tab tilde accent
+@item @t{@@dotaccent@{o@}} @tab @dotaccent{o} @tab overdot accent
+@item @t{@@H@{o@}} @tab @H{o} @tab long Hungarian umlaut
+@item @t{@@ringaccent@{o@}} @tab @ringaccent{o} @tab ring accent
+@item @t{@@tieaccent@{oo@}} @tab @tieaccent{oo} @tab tie-after accent
+@item @t{@@u@{o@}} @tab @u{o} @tab breve accent
+@item @t{@@ubaraccent@{o@}} @tab @ubaraccent{o} @tab underbar accent
+@item @t{@@udotaccent@{o@}} @tab @udotaccent{o} @tab underdot accent
+@item @t{@@v@{o@}} @tab @v{o} @tab hacek/check/caron accent
+@end multitable
+
+This table lists the Texinfo commands for inserting other characters
+commonly used in languages other than English.
+
+@findex questiondown
+@cindex @questiondown{}
+@findex exclamdown
+@cindex @exclamdown{}
+@findex aa
+@cindex @aa{}
+@findex AA
+@cindex @AA{}
+@findex ae
+@cindex @ae{}
+@findex AE
+@cindex @AE{}
+@findex dotless
+@cindex @dotless{i} (dotless i)
+@cindex @dotless{j} (dotless j)
+@cindex Dotless i, j
+@findex l
+@cindex @l{}
+@findex L
+@cindex @L{}
+@findex o
+@cindex @o{}
+@findex O
+@cindex @O{}
+@findex oe
+@cindex @oe{}
+@findex OE
+@cindex @OE{}
+@cindex Romance ordinals
+@cindex Ordinals, Romance
+@cindex Feminine ordinal
+@findex ordf
+@cindex @ordf{}
+@cindex Masculine ordinal
+@findex ordm
+@cindex @ordm{}
+@findex ss
+@cindex @ss{}
+@cindex Es-zet
+@cindex Sharp S
+@cindex German S
+@multitable {@t{@@questiondown@{@}}} {oe OE} {es-zet or sharp S}
+@item @t{@@exclamdown@{@}} @tab @exclamdown{} @tab upside-down !
+@item @t{@@questiondown@{@}} @tab @questiondown{} @tab upside-down ?
+@item @t{@@aa@{@} @@AA@{@}} @tab @aa{} @AA{} @tab a,A with circle
+@item @t{@@ae@{@} @@AE@{@}} @tab @ae{} @AE{} @tab ae,AE ligatures
+@item @t{@@dotless@{i@}} @tab @dotless{i} @tab dotless i
+@item @t{@@dotless@{j@}} @tab @dotless{j} @tab dotless j
+@item @t{@@l@{@} @@L@{@}} @tab @l{} @L{} @tab suppressed-L,l
+@item @t{@@o@{@} @@O@{@}} @tab @o{} @O{} @tab O,o with slash
+@item @t{@@oe@{@} @@OE@{@}} @tab @oe{} @OE{} @tab oe,OE ligatures
+@item @t{@@ordf@{@} @@ordm@{@}} @tab @ordf{} @ordm{} @tab Spanish ordinals
+@item @t{@@ss@{@}} @tab @ss{} @tab es-zet or sharp S
+@end multitable
+
+
+@node Inserting Quotation Marks
+@section Inserting Quotation Marks
+@cindex Inserting quotation marks
+@cindex Quotation marks, inserting
+
+@cindex Quotation characters (`'), in source
+Use doubled single-quote characters to begin and end quotations:
+@w{@t{`@w{}`@dots{}'@w{}'}}. @TeX{} converts two single quotes to
+left- and right-hand doubled quotation marks,
+@c this comes out as "like this" in Info, which is just confusing.
+@iftex
+``like this'',
+@end iftex
+and Info converts doubled single-quote characters to ASCII
+double-quotes: @w{@t{`@w{}`@dots{}'@w{}'}} becomes @w{@t{"@dots{}"}}.
+
+You may occasionally need to produce two consecutive single quotes;
+for example, in documenting a computer language such as Maxima where
+@t{'@w{}'} is a valid command. You can do this with the input
+@t{'@@w@{@}'}; the empty @code{@@w} command stops the combination into
+the double-quote characters.
+
+@cindex Unicode quotation characters
+@cindex Grave accent, vs. left quote
+The left quote character (@t{`}, ASCII code 96) used in Texinfo is a
+grave accent in ANSI and ISO character set standards. We use it as a
+quote character because that is how @TeX{} is set up, by default.
+
+Texinfo supports several other quotation marks used in languages other
+than English. Below is a table with the commands Texinfo provides for
+inserting quotation marks.
+
+@findex documentencoding
+@cindex UTF-8
+@cindex ISO 8859-15
+@cindex Latin 9
+@cindex ISO 8859-1
+@cindex Latin 1
+In order to get the symbols for the quotation marks in encoded Info
+output, it is necessary to specify @code{@@documentencoding UTF-8}.
+(@xref{documentencoding,,@code{@@documentencoding}}.) Double
+guillemets are also present in ISO 8859-1 (aka Latin@tie{}1) and ISO
+8859-15 (aka Latin@tie{}9).
+
+@cindex European Computer Modern fonts
+@cindex EC fonts
+The standard @TeX{} fonts support the usual quotation marks used in
+English (the ones produced with single and doubled ASCII
+single-quotes). For the other quotation marks, @TeX{} uses European
+Computer Modern (EC) fonts (@file{ecrm1000} and other variants).
+These fonts are freely available, of course; you can download them
+from @url{http://@/www.ctan.org/@/tex-archive/@/fonts/ec}, among other
+places.
+
+@cindex CM-Super fonts
+The free EC fonts are bitmap fonts created with Metafont. Especially
+for on-line viewing, Type@tie{}1 (vector) versions of the fonts are
+preferable; these are available in the CM-Super font package
+(@url{http://@/www.ctan.org/@/tex-archive/@/fonts/@/ps-type1/@/cm-super}).
+
+Both distributions include installation instructions.
+
+@cindex Single quotation marks
+@cindex Double quotation marks
+@cindex Left quotation marks
+@cindex Right quotation marks
+@findex quotedblleft
+@cindex ``
+@findex quoteleft
+@cindex `
+@findex quotedblright
+@cindex ''
+@findex quoteright
+@cindex '
+@cindex Double low-9 quotation mark
+@cindex Single low-9 quotation mark
+@findex quotedblbase
+@cindex @quotedblbase{} (double low-9 quotation mark)
+@findex quotesinglbase
+@cindex @quotesinglbase{} (single low-9 quotation mark)
+@cindex Angle quotation marks
+@cindex Guillemets
+@cindex Guillemots
+@cindex French quotation marks
+@cindex Quotation marks, French
+@cindex German quotation marks
+@cindex Quotation marks, German
+@cindex Double guillemets
+@cindex Single guillemets
+@cindex Double angle quotation marks
+@cindex Single angle quotation marks
+@cindex Left-pointing angle quotation marks
+@cindex Right-pointing angle quotation marks
+@cindex Double left-pointing angle quotation mark
+@cindex Double right-pointing angle quotation mark
+@cindex Single left-pointing angle quotation mark
+@cindex Single right-pointing angle quotation mark
+@findex guillemetleft
+@findex guillemotleft
+@cindex @guillemetleft{}
+@findex guillemetright
+@findex guillemotright
+@cindex @guillemetright{}
+@findex guilsinglleft
+@cindex @guilsinglleft{}
+@findex guilsinglright
+@cindex @guilsinglright{}
+@multitable {@t{@@quotedblright@{@} '@w{}'}} {Glyph} {Right-pointing double angle quotation mark (U+00BB)}
+@headitem Command @tab Glyph @tab Unicode name (point)
+@item @verb{.@quotedblleft{} ``.} @tab @quotedblleft{} @tab Left double quotation mark (U+201C)
+@item @verb{.@quotedblright{} ''.} @tab @quotedblright{} @tab Right double quotation mark (U+201D)
+@item @verb{.@quoteleft{} `.} @tab @quoteleft{} @tab Left single quotation mark (U+2018)
+@item @verb{.@quoteright{} '.} @tab @quoteright{} @tab Right single quotation mark (U+2019)
+@item @t{@@quotedblbase@{@}} @tab @quotedblbase{} @tab Double low-9 quotation mark (U+201E)
+@item @t{@@quotesinglbase@{@}} @tab @quotesinglbase{} @tab Single low-9 quotation mark (U+201A)
+@item @t{@@guillemetleft@{@}} @tab @guillemetleft{} @tab Left-pointing double angle quotation mark (U+00AB)
+@item @t{@@guillemetright@{@}} @tab @guillemetright{} @tab Right-pointing double angle quotation mark (U+00BB)
+@item @t{@@guilsinglleft@{@}} @tab @guilsinglleft{} @tab Single left-pointing angle quotation mark (U+2039)
+@item @t{@@guilsinglright@{@}} @tab @guilsinglright{} @tab Single right-pointing angle quotation mark (U+203A)
+@end multitable
+
+For the double angle quotation marks, Adobe and @LaTeX{} glyph names
+are also supported: @code{@@guillemotleft} and
+@code{@@guillemotright}. These names are actually incorrect; a
+``guillemot'' is a bird species (a type of auk).
+
+Traditions for quotation mark usage vary to a great extent between
+languages (@url{http://@/en.wikipedia.org/@/wiki/@/Quotation_mark%2C_non-English_usage@/#Overview}).
+Texinfo does not provide commands for typesetting quotation marks
+according to the numerous traditions. Therefore, you have to choose
+the commands appropriate for the language of your manual. Sometimes
+aliases (@pxref{alias,,@code{@@alias}}) can simplify the usage and
+make the source code more readable. For example, in German,
+@code{@@quotedblbase} is used for the left double quote, and the right
+double quote is actually @code{@@quotedblleft}, which is
+counter-intuitive. Thus, in this case the following aliases would be
+convenient:
+
+@example
+@@alias lgqq = quotedblbase
+@@alias rgqq = quotedblleft
+@end example
+
+
+@node Dots Bullets
+@section Inserting Ellipsis and Bullets
+@cindex Dots, inserting
+@cindex Bullets, inserting
+@cindex Ellipsis, inserting
+@cindex Inserting ellipsis
+@cindex Inserting dots
+@cindex Special typesetting commands
+@cindex Typesetting commands for dots, etc.
+
+An @dfn{ellipsis} (a line of dots) is not typeset as a string of
+periods, so a special command is used for ellipsis in Texinfo. The
+@code{@@bullet} command is special, too. Each of these commands is
+followed by a pair of braces, @samp{@{@}}, without any whitespace
+between the name of the command and the braces. (You need to use braces
+with these commands because you can use them next to other text; without
+the braces, the formatters would be confused. @xref{Command Syntax, ,
+@@-Command Syntax}, for further information.)@refill
+
+@menu
+* dots:: How to insert dots @dots{}
+* bullet:: How to insert a bullet.
+@end menu
+
+
+@node dots
+@subsection @code{@@dots}@{@} (@dots{}) and @code{@@enddots}@{@} (@enddots{})
+@findex dots
+@findex enddots
+@cindex Inserting dots
+@cindex Dots, inserting
+
+Use the @code{@@dots@{@}} command to generate an ellipsis, which is
+three dots in a row, appropriately spaced @dots{} like so. Do
+not simply write three periods in the input file; that would work for
+the Info file output, but would produce the wrong amount of space
+between the periods in the printed manual.
+
+Similarly, the @code{@@enddots@{@}} command generates an
+end-of-sentence ellipsis, which has different spacing afterwards,
+@enddots{} Look closely to see the difference.
+
+@iftex
+Here is an ellipsis: @dots{}
+Here are three periods in a row: ...
+
+In printed output, the three periods in a row are much closer together than
+the dots in the ellipsis.
+@end iftex
+
+
+@node bullet
+@subsection @code{@@bullet}@{@} (@bullet{})
+@findex bullet
+
+Use the @code{@@bullet@{@}} command to generate a large round dot, or
+the closest possible thing to one. In Info, an asterisk is used.@refill
+
+Here is a bullet: @bullet{}
+
+When you use @code{@@bullet} in @code{@@itemize}, you do not need to
+type the braces, because @code{@@itemize} supplies them.
+(@xref{itemize, , @code{@@itemize}}.)@refill
+
+
+@node TeX and copyright
+@section Inserting @TeX{} and Legal Symbols: @copyright{}, @registeredsymbol{}
+
+The logo `@TeX{}' is typeset in a special fashion and it needs an
+@@-command. The copyright and registered symbols, `@copyright{}' and
+`@registeredsymbol{}', is also special. Each of these commands is
+followed by a pair of braces, @samp{@{@}}, without any whitespace
+between the name of the command and the braces.
+
+@menu
+* tex:: The @TeX{} logos.
+* copyright symbol:: The copyright symbol (c in a circle).
+* registered symbol:: The registered symbol (R in a circle).
+@end menu
+
+
+@node tex
+@subsection @code{@@TeX}@{@} (@TeX{}) and @code{@@LaTeX}@{@} (@LaTeX{})
+@findex TeX
+@findex LaTeX
+@cindex Logos, @TeX{}
+@cindex @TeX{} logo
+@cindex @LaTeX{} logo
+
+Use the @code{@@TeX@{@}} command to generate `@TeX{}'. In a printed
+manual, this is a special logo that is different from three ordinary
+letters. In Info, it just looks like @samp{TeX}.
+
+Similarly, use the @code{@@LaTeX@{@}} command to generate `@LaTeX{}',
+which is even more special in printed manuals (and different from the
+incorrect @code{La@@TeX@{@}}. In Info, the result is just
+@samp{LaTeX}. (@LaTeX{} is another macro package built on top of
+@TeX{}, very loosely analogous to Texinfo in that it emphasizes
+logical structure, but much (much) larger.)
+
+The spelling of these commands are unusual among Texinfo commands in
+that they use both uppercase and lowercase letters.
+
+
+@node copyright symbol
+@subsection @code{@@copyright@{@}} (@copyright{})
+@findex copyright
+@cindex Copyright symbol
+
+Use the @code{@@copyright@{@}} command to generate the copyright
+symbol, `@copyright{}'. Where possible, this is a @samp{c}
+inside a circle; in Info, this is @samp{(C)}.
+
+
+@node registered symbol
+@subsection @code{@@registeredsymbol@{@}} (@registeredsymbol{})
+@findex registeredsymbol
+@cindex Registered symbol
+
+Use the @code{@@registeredsymbol@{@}} command to generate the
+registered symbol, `@registeredsymbol{}'. Where possible, this is an
+@samp{R} inside a circle; in Info, this is @samp{(R)}.
+
+
+@node euro
+@section @code{@@euro}@{@} (@euro{}): Euro Currency Symbol
+@findex euro
+@cindex Euro symbol
+
+Use the @code{@@euro@{@}} command to generate `@euro{}'. Where
+possible, this is the symbol for the Euro currency, invented as part
+of the European economic unification. In plain Info, it is the word
+@samp{Euro }. A trailing space is included in the text
+transliteration since typically no space is desired after the symbol,
+so it would be inappropriate to have a space in the source document.
+
+Texinfo cannot magically synthesize support for the Euro symbol where
+the underlying system (fonts, software, whatever) does not support
+it. Therefore, in many cases it is preferable to use the word
+``Euro''. (In banking circles, the abbreviation for the Euro is EUR.)
+
+@cindex ISO 8859-15
+@cindex Latin 9
+In order to get the Euro symbol in encoded Info output, for example,
+it is necessary to specify @code{@@documentencoding ISO-8859-15}.
+(@xref{documentencoding,,@code{@@documentencoding}}.) The Euro symbol
+is in ISO 8859-15 (aka Latin@tie{}9), and is @emph{not} in the more
+widely-used and supported ISO 8859-1 (Latin@tie{}1).
+
+@pindex feymr10
+@cindex Euro font
+The Euro symbol does not exist in the standard @TeX{} fonts (which
+were designed before the Euro was legislated into existence).
+Therefore, @TeX{} uses an additional font, named @code{feymr10} (along
+with other variables). It is freely available, of course; you can
+download it from @url{http://www.ctan.org/tex-archive/fonts/eurosym},
+among other places. The distribution includes installation
+instructions.
+
+
+@node pounds
+@section @code{@@pounds}@{@} (@pounds{}): Pounds Sterling
+@findex pounds
+@cindex Pounds symbol
+
+Use the @code{@@pounds@{@}} command to generate `@pounds{}'. Where
+possible, this is the symbol for the currency pounds sterling. In
+Info, it is a @samp{#}.
+
+
+@node textdegree
+@section @code{@@textdegree}@{@} (@textdegree{}): Degrees Symbol
+@findex textdegree
+@cindex Degree symbol
+
+Use the @code{@@textdegree@{@}} command to generate `@textdegree{}'.
+Where possible, this is the normal symbol for degrees. In plain text
+and Info output, it is an @samp{o}.
+
+
+@node minus
+@section @code{@@minus}@{@} (@minus{}): Inserting a Minus Sign
+@findex minus
+@cindex Minus sign
+
+@cindex Em dash, compared to minus sign
+@cindex Hyphen, compared to minus
+Use the @code{@@minus@{@}} command to generate a minus sign. In a
+fixed-width font, this is a single hyphen, but in a proportional font,
+the symbol is the customary length for a minus sign---a little longer
+than a hyphen, shorter than an em-dash:
+
+@display
+@samp{@minus{}} is a minus sign generated with @samp{@@minus@{@}},
+
+`-' is a hyphen generated with the character @samp{-},
+
+`---' is an em-dash for text.
+@end display
+
+@noindent
+In the fixed-width font used by Info, @code{@@minus@{@}} is the same
+as a hyphen.
+
+You should not use @code{@@minus@{@}} inside @code{@@code} or
+@code{@@example} because the width distinction is not made in the
+fixed-width font they use.
+
+When you use @code{@@minus} to specify the mark beginning each entry in
+an itemized list, you do not need to type the braces
+(@pxref{itemize, , @code{@@itemize}}).
+
+
+@node geq leq
+@section @code{@@geq@{@}} (@geq{}) and @code{@@leq@{@}} (@leq{}): Inserting relations
+@findex geq
+@findex leq
+
+Use the @code{@@geq@{@}} and @code{@@geq@{@}} commands to generate
+greater-than-or-equal and less-than-equal-signs, `@geq{}' and
+`@leq{}'. In plain text and Info output, these are the ASCII
+sequences @samp{>=} and @samp{<=}. The
+
+
+@node math
+@section @code{@@math}: Inserting Mathematical Expressions
+@findex math
+@cindex Mathematical expressions
+@cindex Formulas, mathematical
+
+You can write a short mathematical expression with the @code{@@math}
+command. Write the mathematical expression between braces, like this:
+
+@example
+@@math@{(a + b)(a + b) = a^2 + 2ab + b^2@}
+@end example
+
+@iftex
+@noindent This produces the following in @TeX{}:
+
+@display
+@math{(a + b)(a + b) = a^2 + 2ab + b^2}
+@end display
+
+@noindent and the following in other formats:
+@end iftex
+@ifnottex
+@noindent This produces the following in Info and HTML:
+@end ifnottex
+
+@example
+(a + b)(a + b) = a^2 + 2ab + b^2
+@end example
+
+The @code{@@math} command has no special effect on the Info and HTML
+output. @command{makeinfo} expands any @code{@@}-commands as usual,
+but it does not try to produce good mathematical formatting in any
+way.
+
+However, as far as the @TeX{} output is concerned, plain @TeX{}
+mathematical commands are allowed in @code{@@math}, starting with
+@samp{\}, and the plain @TeX{} math characters like @samp{^} and
+@samp{_} are also recognized. In essence, @code{@@math} drops you
+into plain @TeX{} math mode.
+
+This allows you to conveniently write superscripts and subscripts (as
+in the above example), and also to use all the plain @TeX{} math
+control sequences for symbols, functions, and so on, and thus get
+proper formatting in the @TeX{} output, at least.
+
+It's best to use @samp{\} instead of @samp{@@} for any such
+mathematical commands; otherwise, @command{makeinfo} will complain.
+On the other hand, input with matching (but unescaped) braces, such as
+@samp{k_@{75@}}, is allowed inside @code{@@math}, although
+@command{makeinfo} would complain about the bare braces in regular
+input.
+
+Here's an example:
+
+@example
+@@math@{\sin 2\pi \equiv \cos 3\pi@}
+@end example
+
+@iftex
+@noindent which looks like this in @TeX{}:
+@display
+@math{\sin 2\pi \equiv \cos 3\pi}
+@end display
+
+@noindent and
+@end iftex
+@noindent which looks like the input in Info and HTML:
+@example
+\sin 2\pi \equiv \cos 3\pi
+@end example
+
+@findex \ @r{(literal \ in @code{@@math})}
+Since @samp{\} is an escape character inside @code{@@math}, you can use
+@code{@@\} to get a literal backslash (@code{\\} will work in @TeX{},
+but you'd get the literal @samp{\\} in Info). @code{@@\} is not
+defined outside of @code{@@math}, since a @samp{\} ordinarily produces a
+literal @samp{\}.
+
+@cindex Displayed equations
+@cindex Equations, displayed
+For displayed equations, you must at present use @TeX{} directly
+(@pxref{Raw Formatter Commands}).
+
+
+@node Click Sequences
+@section Click Sequences
+@cindex Click sequences
+@cindex Sequence of clicks
+@cindex GUI click sequence
+
+@findex clicksequence
+When documenting graphical interfaces, it is necessary to describe
+sequences such as `Click on @samp{File}, then choose @samp{Open}, then
+@dots{}'. Texinfo offers commands @code{@@clicksequence} and
+@code{click} to represent this, typically used like this:
+
+@example
+@dots{} @@clicksequence@{File @@click@{@} Open@} @dots{}
+@end example
+
+@noindent
+which produces:
+
+@display
+@dots{} @clicksequence{File @click{} Open} @dots{}
+@end display
+
+@findex click
+@findex arrow
+The @code{@@click} command produces a simple right arrow (@samp{->} in
+Info) by default; this glyph is also available independently via the
+command @code{@@arrow@{@}}.
+
+@findex clickstyle
+You can change the glyph produced by @code{@@click} with the command
+@code{@@clickstyle}, which takes a command name as its single argument
+on the rest of the line, much like @code{@@itemize} and friends
+(@pxref{itemize,,@code{@@itemize}}). The command should produce a
+glyph, and the usual empty braces @samp{@{@}} are omitted. Here's an
+example:
+
+@example
+@@clickstyle @@result
+@dots{} @@clicksequence@{File @@click@{@} Open@} @dots{}
+@end example
+
+@noindent
+now produces:
+
+@display
+@clickstyle @result
+@dots{} @clicksequence{File @click{} Open} @dots{}
+@end display
+
+
+@node Glyphs
+@section Glyphs for Examples
+@cindex Glyphs
+@cindex Examples, glyphs for
+
+In Texinfo, code is often illustrated in examples that are delimited
+by @code{@@example} and @code{@@end example}, or by @code{@@lisp} and
+@code{@@end lisp}. In such examples, you can indicate the results of
+evaluation or an expansion using @samp{@result{}} or
+@samp{@expansion{}}. Likewise, there are commands to insert glyphs
+to indicate
+printed output, error messages, equivalence of expressions, and the
+location of point.
+
+The glyph-insertion commands do not need to be used within an example, but
+most often they are. Every glyph-insertion command is followed by a pair of
+left- and right-hand braces.@refill
+
+@menu
+* Glyphs Summary::
+* result:: How to show the result of expression.
+* expansion:: How to indicate an expansion.
+* Print Glyph:: How to indicate printed output.
+* Error Glyph:: How to indicate an error message.
+* Equivalence:: How to indicate equivalence.
+* Point Glyph:: How to indicate the location of point.
+@end menu
+
+
+@node Glyphs Summary
+@subsection Glyphs Summary
+
+Here are the different glyph commands:@refill
+
+@table @asis
+@item @result{}
+@code{@@result@{@}} points to the result of an expression.@refill
+
+@item @expansion{}
+@code{@@expansion@{@}} shows the results of a macro expansion.@refill
+
+@item @print{}
+@code{@@print@{@}} indicates printed output.@refill
+
+@item @error{}
+@code{@@error@{@}} indicates that the following text is an error
+message.@refill
+
+@item @equiv{}
+@code{@@equiv@{@}} indicates the exact equivalence of two forms.@refill
+
+@item @point{}
+@code{@@point@{@}} shows the location of point.@refill
+@end table
+
+@menu
+* result::
+* expansion::
+* Print Glyph::
+* Error Glyph::
+* Equivalence::
+* Point Glyph::
+@end menu
+
+
+@node result
+@subsection @code{@@result@{@}} (@result{}): Indicating Evaluation
+@cindex Result of an expression
+@cindex Indicating evaluation
+@cindex Evaluation glyph
+@cindex Value of an expression, indicating
+@findex result
+
+Use the @code{@@result@{@}} command to indicate the result of
+evaluating an expression.@refill
+
+@iftex
+The @code{@@result@{@}} command is displayed as @samp{@result{}} in
+the printed output and as @samp{=>} in other formats.
+@end iftex
+@ifnottex
+The @code{@@result@{@}} command is displayed as @samp{@result{}} in
+Info and HTML and as a true double stemmed arrow in the printed output.
+@end ifnottex
+
+Thus, the following,
+
+@lisp
+(cdr '(1 2 3))
+ @result{} (2 3)
+@end lisp
+
+@noindent
+may be read as ``@code{(cdr '(1 2 3))} evaluates to @code{(2 3)}''.
+
+
+@node expansion
+@subsection @code{@@expansion@{@}} (@expansion{}): Indicating an Expansion
+@cindex Expansion, indicating
+@cindex Macro expansion, indicating
+@findex expansion
+
+When an expression is a macro call, it expands into a new expression.
+You can indicate the result of the expansion with the
+@code{@@expansion@{@}} command.@refill
+
+@iftex
+The @code{@@expansion@{@}} command is displayed as @samp{@expansion{}}
+in the printed output and as @samp{==>} in other formats.
+@end iftex
+@ifnottex
+The @code{@@expansion@{@}} command is displayed as @samp{@expansion{}}
+in Info and HTML, and as a long arrow with a flat base in the printed
+output.
+@end ifnottex
+
+@need 700
+For example, the following
+
+@example
+@group
+@@lisp
+(third '(a b c))
+ @@expansion@{@} (car (cdr (cdr '(a b c))))
+ @@result@{@} c
+@@end lisp
+@end group
+@end example
+
+@noindent
+produces
+
+@lisp
+@group
+(third '(a b c))
+ @expansion{} (car (cdr (cdr '(a b c))))
+ @result{} c
+@end group
+@end lisp
+
+@noindent
+which may be read as:
+
+@quotation
+@code{(third '(a b c))} expands to @code{(car (cdr (cdr '(a b c))))};
+the result of evaluating the expression is @code{c}.
+@end quotation
+
+@noindent
+Often, as in this case, an example looks better if the
+@code{@@expansion@{@}} and @code{@@result@{@}} commands are indented.
+
+
+@node Print Glyph
+@subsection @code{@@print@{@}} (@print{}): Indicating Printed Output
+@cindex Printed output, indicating
+@findex print
+
+Sometimes an expression will print output during its execution. You
+can indicate the printed output with the @code{@@print@{@}} command.@refill
+
+@iftex
+The @code{@@print@{@}} command is displayed as @samp{-|} in Info and
+HTML and as @samp{@print{}} in the printed output.
+@end iftex
+@ifnottex
+The @code{@@print@{@}} command is displayed as @samp{@print{}} in Info
+and HTML and (similarly) as a horizontal dash butting against a
+vertical bar in the printed output.
+@end ifnottex
+
+In the following example, the printed text is indicated with
+@samp{@print{}}, and the value of the expression follows on the
+last line.
+
+@lisp
+@group
+(progn (print 'foo) (print 'bar))
+ @print{} foo
+ @print{} bar
+ @result{} bar
+@end group
+@end lisp
+
+@noindent
+In a Texinfo source file, this example is written as follows:
+
+@lisp
+@group
+@@lisp
+(progn (print 'foo) (print 'bar))
+ @@print@{@} foo
+ @@print@{@} bar
+ @@result@{@} bar
+@@end lisp
+@end group
+@end lisp
+
+
+@node Error Glyph
+@subsection @code{@@error@{@}} (@error{}): Indicating an Error Message
+@cindex Error message, indicating
+@findex error
+
+A piece of code may cause an error when you evaluate it. You can
+designate the error message with the @code{@@error@{@}} command.@refill
+
+@iftex
+The @code{@@error@{@}} command is displayed as @samp{error-->} in Info
+and HTML and as @samp{@error{}} in the printed output.
+@end iftex
+@ifnottex
+The @code{@@error@{@}} command is displayed as @samp{@error{}} in Info
+and HTML and as the word `error' in a box in the printed output.
+@end ifnottex
+
+@need 700
+Thus,
+
+@example
+@@lisp
+(+ 23 'x)
+@@error@{@} Wrong type argument: integer-or-marker-p, x
+@@end lisp
+@end example
+
+@noindent
+produces
+
+@lisp
+(+ 23 'x)
+@error{} Wrong type argument: integer-or-marker-p, x
+@end lisp
+
+@noindent
+This indicates that the following error message is printed
+when you evaluate the expression:
+
+@lisp
+Wrong type argument: integer-or-marker-p, x
+@end lisp
+
+@samp{@error{}} itself is not part of the error message.
+
+
+@node Equivalence
+@subsection @code{@@equiv@{@}} (@equiv{}): Indicating Equivalence
+@cindex Equivalence, indicating
+@findex equiv
+
+Sometimes two expressions produce identical results. You can indicate the
+exact equivalence of two forms with the @code{@@equiv@{@}} command.@refill
+
+@iftex
+The @code{@@equiv@{@}} command is displayed as @samp{==} in Info and
+HTML and as @samp{@equiv{}} in the printed output.
+@end iftex
+@ifnottex
+The @code{@@equiv@{@}} command is displayed as @samp{@equiv{}} in Info
+and HTML and as a standard mathematical equivalence sign (three
+parallel horizontal lines) in the printed output.
+@end ifnottex
+
+Thus,
+
+@example
+@@lisp
+(make-sparse-keymap) @@equiv@{@} (list 'keymap)
+@@end lisp
+@end example
+
+@noindent
+produces
+
+@lisp
+(make-sparse-keymap) @equiv{} (list 'keymap)
+@end lisp
+
+@noindent
+This indicates that evaluating @code{(make-sparse-keymap)} produces
+identical results to evaluating @code{(list 'keymap)}.
+
+
+@node Point Glyph
+@subsection @code{@@point@{@}} (@point{}): Indicating Point in a Buffer
+@cindex Point, indicating in a buffer
+@findex point
+
+Sometimes you need to show an example of text in an Emacs buffer. In
+such examples, the convention is to include the entire contents of the
+buffer in question between two lines of dashes containing the buffer
+name.@refill
+
+You can use the @samp{@@point@{@}} command to show the location of point
+in the text in the buffer. (The symbol for point, of course, is not
+part of the text in the buffer; it indicates the place @emph{between}
+two characters where point is located.)@refill
+
+@iftex
+The @code{@@point@{@}} command is displayed as @samp{-!-} in Info and
+HTML and as @samp{@point{}} in the printed output.
+@end iftex
+@ifnottex
+The @code{@@point@{@}} command is displayed as @samp{@point{}} in Info
+and HTML and as a small five pointed star in the printed
+output.
+@end ifnottex
+
+The following example shows the contents of buffer @file{foo} before
+and after evaluating a Lisp command to insert the word @code{changed}.@refill
+
+@example
+@group
+---------- Buffer: foo ----------
+This is the @point{}contents of foo.
+---------- Buffer: foo ----------
+
+@end group
+@end example
+
+@example
+@group
+(insert "changed ")
+ @result{} nil
+---------- Buffer: foo ----------
+This is the changed @point{}contents of foo.
+---------- Buffer: foo ----------
+
+@end group
+@end example
+
+In a Texinfo source file, the example is written like this:@refill
+
+@example
+@@example
+---------- Buffer: foo ----------
+This is the @@point@{@}contents of foo.
+---------- Buffer: foo ----------
+
+(insert "changed ")
+ @@result@{@} nil
+---------- Buffer: foo ----------
+This is the changed @@point@{@}contents of foo.
+---------- Buffer: foo ----------
+@@end example
+@end example
+
+
+@node Breaks
+@chapter Forcing and Preventing Breaks
+@cindex Forcing line and page breaks
+@cindex Making line and page breaks
+@cindex Preventing line and page breaks
+
+@cindex Line breaks
+Usually, a Texinfo file is processed both by @TeX{} and by one of the
+Info formatting commands. Line, paragraph, or page breaks sometimes
+occur in the `wrong' place in one or other form of output. You must
+ensure that text looks right both in the printed manual and in the
+Info file.
+
+@cindex White space, excessive
+@cindex Page breaks
+For example, in a printed manual, page breaks may occur awkwardly in
+the middle of an example; to prevent this, you can hold text together
+using a grouping command that keeps the text from being split across
+two pages. Conversely, you may want to force a page break where none
+would occur normally. Fortunately, problems like these do not often
+arise. When they do, use the break, break prevention, or pagination
+commands.
+
+@menu
+* Break Commands:: Summary of break-related commands.
+* Line Breaks:: Forcing line breaks.
+* - and hyphenation:: Helping @TeX{} with hyphenation points.
+* allowcodebreaks:: Controlling line breaks within @@code text.
+* w:: Preventing unwanted line breaks in text.
+* tie:: Inserting an unbreakable but varying space.
+* sp:: Inserting blank lines.
+* page:: Forcing the start of a new page.
+* group:: Preventing unwanted page breaks.
+* need:: Another way to prevent unwanted page breaks.
+@end menu
+
+
+@node Break Commands
+@section Break Commands
+
+The break commands create or allow line and paragraph breaks:
+
+@table @code
+@item @@*
+Force a line break.
+
+@item @@sp @var{n}
+Skip @var{n} blank lines.
+
+@item @@-
+Insert a discretionary hyphen.
+
+@item @@hyphenation@{@var{hy-phen-a-ted words}@}
+Define hyphen points in @var{hy-phen-a-ted words}.
+@end table
+
+These commands hold text together on a single line:
+
+@table @code
+@item @@w@{@var{text}@}
+Prevent @var{text} from being split and hyphenated across two lines.
+@item @@tie@{@}
+Insert a normal interword space at which a line break may not occur.
+@end table
+@iftex
+@sp 1
+@end iftex
+
+The pagination commands apply only to printed output, since Info
+files do not have pages.
+
+@table @code
+@item @@page
+Start a new page in the printed manual.
+
+@item @@group
+Hold text together that must appear on one printed page.
+
+@item @@need @var{mils}
+Start a new printed page if not enough space on this one.
+@end table
+
+
+@node Line Breaks
+@section @code{@@*} and @code{@@/}: Generate and Allow Line Breaks
+@findex * @r{(force line break)}
+@findex / @r{(allow line break)}
+@cindex Line breaks
+@cindex Breaks in a line
+@cindex Force line break
+@cindex Allow line break
+
+The @code{@@*} command forces a line break in both the printed manual and
+in Info. The @code{@@/} command allows a line break (printed manual only).
+
+Here is an example with @code{@@*}:
+
+@example
+This line @@* is broken @@*in two places.
+@end example
+
+@noindent produces
+
+@example
+@group
+This line
+is broken
+in two places.
+@end group
+@end example
+
+The @code{@@/} command can be useful within a url
+(@pxref{uref,,@code{@@uref}}), which tend to be long and are otherwise
+unbreakable. For example:
+
+@example
+The official Texinfo home page is on the GNU web site:
+@@uref@{http://www.gnu.org/@@/software/@@/gnu/@@/texinfo@}.
+@end example
+
+@noindent produces
+
+@display
+The official Texinfo home page is on the GNU web site:
+@uref{http://www.gnu.org/@/software/@/gnu/@/texinfo}.
+@end display
+
+@noindent Without the @code{@@/} commands, @TeX{} would have nowhere to
+break the line. @code{@@/} has no effect in the online output.
+
+
+@node - and hyphenation
+@section @code{@@-} and @code{@@hyphenation}: Helping @TeX{} Hyphenate
+
+@findex - @r{(discretionary hyphen)}
+@findex hyphenation
+@cindex Hyphenation, helping @TeX{} do
+@cindex Fine-tuning, and hyphenation
+
+Although @TeX{}'s hyphenation algorithm is generally pretty good, it
+does miss useful hyphenation points from time to time. (Or, far more
+rarely, insert an incorrect hyphenation.) So, for documents with an
+unusual vocabulary or when fine-tuning for a printed edition, you may
+wish to help @TeX{} out. Texinfo supports two commands for this:
+
+@table @code
+@item @@-
+Insert a discretionary hyphen, i.e., a place where @TeX{} can (but does
+not have to) hyphenate. This is especially useful when you notice an
+overfull hbox is due to @TeX{} missing a hyphenation (@pxref{Overfull
+hboxes}). @TeX{} will not insert any hyphenation points itself into a
+word containing @code{@@-}.
+
+@item @@hyphenation@{@var{hy-phen-a-ted words}@}
+Tell @TeX{} how to hyphenate @var{hy-phen-a-ted words}. As shown, you
+put a @samp{-} at each hyphenation point. For example:
+@example
+@@hyphenation@{man-u-script man-u-scripts@}
+@end example
+@noindent @TeX{} only uses the specified hyphenation points when the
+words match exactly, so give all necessary variants, such as plurals.
+@end table
+
+Info, HTML, and other non-@TeX{} output is not hyphenated, so none of
+these commands have any effect there.
+
+
+@node allowcodebreaks
+@section @code{@@allowcodebreaks}: Control Line Breaks in @code{@@code}
+
+@findex allowcodebreaks
+@cindex Breaks, within @code{@@code}
+@cindex -, breakpoint within @code{@@code}
+@cindex Hyphen, breakpoint within @code{@@code}
+@cindex Dash, breakpoint within @code{@@code}
+@cindex _, breakpoint within @code{@@code}
+@cindex Underscore, breakpoint within @code{@@code}
+
+Ordinarily, @TeX{} will consider breaking lines at @samp{-} and
+@samp{_} characters within @code{@@code} and related commands
+(@pxref{code,,@code{@@code}}), more or less as if they were ``empty''
+hyphenation points.
+
+This is necessary as many manuals, especially for Lisp-family
+languages, must document very long identifiers. On the other hand,
+other manuals don't have this problems, and you may not wish to allow
+a line break at the underscore in, for example, @code{SIZE_MAX}, or
+even worse, after any of the four underscores in @code{__typeof__}.
+
+So Texinfo provides this command:
+
+@example
+@@allowcodebreaks false
+@end example
+
+@noindent to prevent @TeX{} from breaking at @samp{-} or @samp{_} within
+@code{@@code}. You can go back to allowing such breaks with
+@code{@@allowcodebreaks true}. Write these commands on lines by
+themselves.
+
+These commands can be given anywhere in the document. For example,
+you may have just one problematic paragraph where you need to turn off
+the breaks, but want them in general, or vice versa.
+
+This command has no effect in Info, HTML, and other non-@TeX{} output.
+
+
+@node w
+@section @code{@@w}@{@var{text}@}: Prevent Line Breaks
+@findex w @r{(prevent line break)}
+@cindex Line breaks, preventing
+
+@code{@@w@{@var{text}@}} outputs @var{text} and prohibits line breaks
+within @var{text}, for both @TeX{} and @command{makeinfo}.
+
+@cindex Non-breakable space, fixed
+@cindex Unbreakable space, fixed
+Thus, you can use @code{@@w} to produce a non-breakable space, fixed at
+the width of a normal interword space:
+
+@example
+@@w@{ @} @@w@{ @} @@w@{ @} indentation.
+@end example
+
+@noindent produces:
+
+@display
+@w{ } @w{ } @w{ } indentation.
+@end display
+
+The space from @code{@@w@{@w{ }@}}, as well as being non-breakable,
+also will not stretch or shrink. Sometimes that is what you want, for
+instance if you're doing manual indenting. However, usually you want
+a normal interword space that does stretch and shrink (in the printed
+output); see the @code{@@tie} command in the next section.
+
+@cindex Hyphenation, preventing
+You can also use the @code{@@w} command to prevent @TeX{} from
+automatically hyphenating a long name or phrase that happens to fall
+near the end of a line. @command{makeinfo} does not ever hyphenate
+words.
+
+@cindex Keyword expansion, preventing
+@cindex Version control keywords, preventing expansion of
+@cindex $Id expansion, preventing
+You can also use @code{@@w} to avoid unwanted keyword expansion in
+source control systems. For example, to literally write @t{@w{$}Id$}
+in your document, use @code{@@w@{$@}Id$}.
+
+
+@node tie
+@section @code{@@tie@{@}}: Inserting an Unbreakable Space
+@findex tie @r{(unbreakable interword space)}
+@cindex Tied space
+@cindex Non-breakable space, variable
+@cindex Unbreakable space, variable
+
+The @code{@@tie@{@}} command produces a normal interword space at which
+a line break may not occur. Always write it with following (empty)
+braces, as usual for commands used within a paragraph. Here's an
+example:
+
+@example
+@@TeX@{@} was written by Donald E.@@tie@{@}Knuth.
+@end example
+
+@noindent produces:
+
+@display
+@TeX{} was written by Donald E.@tie{}Knuth.
+@end display
+
+There are two important differences between @code{@@tie@{@}} and
+@code{@@w@{@w{ }@}}:
+
+@itemize
+@item
+The space produced by @code{@@tie@{@}} will stretch and shrink slightly
+along with the normal interword spaces in the paragraph; the space
+produced by @code{@@w@{@w{ }@}} will not vary.
+
+@item
+@code{@@tie@{@}} allows hyphenation of the surrounding words, while
+@code{@@w@{@w{ }@}} inhibits hyphenation of those words (for @TeX{}nical
+reasons, namely that it produces an @samp{\hbox}).
+
+@end itemize
+
+
+@node sp
+@section @code{@@sp} @var{n}: Insert Blank Lines
+@findex sp @r{(line spacing)}
+@cindex Space, inserting vertical
+@cindex Blank lines
+@cindex Line spacing
+
+A line beginning with and containing only @code{@@sp @var{n}}
+generates @var{n} blank lines of space in both the printed manual and
+the Info file. @code{@@sp} also forces a paragraph break. For
+example,
+
+@example
+@@sp 2
+@end example
+
+@noindent
+generates two blank lines.
+
+The @code{@@sp} command is most often used in the title page.@refill
+
+@ignore
+@c node br, page, sp, Breaks
+@comment node-name, next, previous, up
+@c section @code{@@br}: Generate Paragraph Breaks
+@findex br @r{(paragraph breaks)}
+@cindex Paragraph breaks
+@cindex Breaks in a paragraph
+
+The @code{@@br} command forces a paragraph break. It inserts a blank
+line. You can use the command within or at the end of a line. If
+used within a line, the @code{@@br@{@}} command must be followed by
+left and right braces (as shown here) to mark the end of the
+command.@refill
+
+@need 700
+For example,
+
+@example
+@group
+This line @@br@{@}contains and is ended by paragraph breaks@@br
+and is followed by another line.
+@end group
+@end example
+
+@noindent
+produces
+
+@example
+@group
+This line
+
+contains and is ended by paragraph breaks
+
+and is followed by another line.
+@end group
+@end example
+
+The @code{@@br} command is seldom used.
+@end ignore
+
+
+@node page
+@section @code{@@page}: Start a New Page
+@cindex Page breaks
+@findex page
+
+A line containing only @code{@@page} starts a new page in a printed
+manual. The command has no effect on Info files since they are not
+paginated. An @code{@@page} command is often used in the @code{@@titlepage}
+section of a Texinfo file to start the copyright page.
+
+
+@node group
+@comment node-name, next, previous, up
+@section @code{@@group}: Prevent Page Breaks
+@cindex Group (hold text together vertically)
+@cindex Holding text together vertically
+@cindex Vertically holding text together
+@findex group
+
+The @code{@@group} command (on a line by itself) is used inside an
+@code{@@example} or similar construct to begin an unsplittable vertical
+group, which will appear entirely on one page in the printed output.
+The group is terminated by a line containing only @code{@@end group}.
+These two lines produce no output of their own, and in the Info file
+output they have no effect at all.@refill
+
+@c Once said that these environments
+@c turn off vertical spacing between ``paragraphs''.
+@c Also, quotation used to work, but doesn't in texinfo-2.72
+Although @code{@@group} would make sense conceptually in a wide
+variety of contexts, its current implementation works reliably only
+within @code{@@example} and variants, and within @code{@@display},
+@code{@@format}, @code{@@flushleft} and @code{@@flushright}.
+@xref{Quotations and Examples}. (What all these commands have in
+common is that each line of input produces a line of output.) In
+other contexts, @code{@@group} can cause anomalous vertical
+spacing.@refill
+
+@need 750
+This formatting requirement means that you should write:
+
+@example
+@group
+@@example
+@@group
+@dots{}
+@@end group
+@@end example
+@end group
+@end example
+
+@noindent
+with the @code{@@group} and @code{@@end group} commands inside the
+@code{@@example} and @code{@@end example} commands.
+
+The @code{@@group} command is most often used to hold an example
+together on one page. In this Texinfo manual, more than 100 examples
+contain text that is enclosed between @code{@@group} and @code{@@end
+group}.
+
+If you forget to end a group, you may get strange and unfathomable
+error messages when you run @TeX{}. This is because @TeX{} keeps
+trying to put the rest of the Texinfo file onto the one page and does
+not start to generate error messages until it has processed
+considerable text. It is a good rule of thumb to look for a missing
+@code{@@end group} if you get incomprehensible error messages in
+@TeX{}.@refill
+
+@node need
+@comment node-name, next, previous, up
+@section @code{@@need @var{mils}}: Prevent Page Breaks
+@cindex Need space at page bottom
+@findex need
+
+A line containing only @code{@@need @var{n}} starts
+a new page in a printed manual if fewer than @var{n} mils (thousandths
+of an inch) remain on the current page. Do not use
+braces around the argument @var{n}. The @code{@@need} command has no
+effect on Info files since they are not paginated.@refill
+
+@need 800
+This paragraph is preceded by an @code{@@need} command that tells
+@TeX{} to start a new page if fewer than 800 mils (eight-tenths
+inch) remain on the page. It looks like this:@refill
+
+@example
+@group
+@@need 800
+This paragraph is preceded by @dots{}
+@end group
+@end example
+
+The @code{@@need} command is useful for preventing orphans (single
+lines at the bottoms of printed pages).@refill
+
+
+@node Definition Commands
+@chapter Definition Commands
+@cindex Definition commands
+
+The @code{@@deffn} command and the other @dfn{definition commands}
+enable you to describe functions, variables, macros, commands, user
+options, special forms and other such artifacts in a uniform
+format.@refill
+
+In the Info file, a definition causes the entity
+category---`Function', `Variable', or whatever---to appear at the
+beginning of the first line of the definition, followed by the
+entity's name and arguments. In the printed manual, the command
+causes @TeX{} to print the entity's name and its arguments on the left
+margin and print the category next to the right margin. In both
+output formats, the body of the definition is indented. Also, the
+name of the entity is entered into the appropriate index:
+@code{@@deffn} enters the name into the index of functions,
+@code{@@defvr} enters it into the index of variables, and so
+on (@pxref{Predefined Indices}).
+
+A manual need not and should not contain more than one definition for
+a given name. An appendix containing a summary should use
+@code{@@table} rather than the definition commands.@refill
+
+@menu
+* Def Cmd Template:: Writing descriptions using definition commands.
+* Def Cmd Continuation Lines:: Continuing the heading over source lines.
+* Optional Arguments:: Handling optional and repeated arguments.
+* deffnx:: Group two or more `first' lines.
+* Def Cmds in Detail:: Reference for all the definition commands.
+* Def Cmd Conventions:: Conventions for writing definitions.
+* Sample Function Definition:: An example.
+@end menu
+
+
+@node Def Cmd Template
+@section The Template for a Definition
+@cindex Definition template
+@cindex Template for a definition
+
+The @code{@@deffn} command is used for definitions of entities that
+resemble functions. To write a definition using the @code{@@deffn}
+command, write the @code{@@deffn} command at the beginning of a line
+and follow it on the same line by the category of the entity, the name
+of the entity itself, and its arguments (if any). Then write the body
+of the definition on succeeding lines. (You may embed examples in the
+body.) Finally, end the definition with an @code{@@end deffn} command
+written on a line of its own.
+
+The other definition commands follow the same format: a line with the
+@code{@@def@dots{}} command and whatever arguments are appropriate for
+that command; the body of the definition; and a corresponding
+@code{@@end} line.
+
+The template for a definition looks like this:
+
+@example
+@group
+@@deffn @var{category} @var{name} @var{arguments}@dots{}
+@var{body-of-definition}
+@@end deffn
+@end group
+@end example
+
+@need 700
+@noindent
+For example,
+
+@example
+@group
+@@deffn Command forward-word count
+This command moves point forward @@var@{count@} words
+(or backward if @@var@{count@} is negative). @dots{}
+@@end deffn
+@end group
+@end example
+
+@noindent
+produces
+
+@quotation
+@deffn Command forward-word count
+This command moves point forward @var{count} words
+(or backward if @var{count} is negative). @dots{}
+@end deffn
+@end quotation
+
+Capitalize the category name like a title. If the name of the
+category contains spaces, as in the phrase `Interactive Command',
+enclose it in braces. For example:
+
+@example
+@group
+@@deffn @{Interactive Command@} isearch-forward
+@dots{}
+@@end deffn
+@end group
+@end example
+
+@noindent
+Otherwise, the second word will be mistaken for the name of the
+entity. As a general rule, when any of the arguments in the heading
+line @emph{except} the last one are more than one word, you need to
+enclose them in braces. This may also be necessary if the text
+contains commands, for example, @samp{@{declaraci@@'on@}} if you are
+writing in Spanish.
+
+Some of the definition commands are more general than others. The
+@code{@@deffn} command, for example, is the general definition command
+for functions and the like---for entities that may take arguments.
+When you use this command, you specify the category to which the
+entity belongs. Three predefined, specialized variations
+(@code{@@defun}, @code{@@defmac}, and @code{@@defspec}) specify the
+category for you: ``Function'', ``Macro'', and ``Special Form''
+respectively. (In Lisp, a special form is an entity much like a
+function.) Similarly, the general @code{@@defvr} command is
+accompanied by several specialized variations for describing
+particular kinds of variables.
+
+@xref{Sample Function Definition}, for a detailed example of a
+function definition, including the use of @code{@@example} inside the
+definition.
+
+@cindex Macros in definition commands
+Unfortunately, due to implementation difficulties, macros are not expanded
+in @code{@@deffn} and all the other definition commands.
+
+
+@node Def Cmd Continuation Lines
+@section Definition Command Continuation Lines
+@cindex Continuation lines in definition commands
+@cindex Definition command headings, continuing
+@cindex @samp{@@} as continuation in definition commands
+
+The heading line of a definition command can get very long.
+Therefore, Texinfo has a special syntax allowing them to be continued
+over multiple lines of the source file: a lone @samp{@@} at the end of
+each line to be continued. Here's an example:
+
+@example
+@@defun fn-name @@
+ arg1 arg2 arg3
+This is the basic continued defun.
+@@end defun
+@end example
+
+@noindent produces:
+
+@defun fn-name @
+ arg1 arg2 arg3
+This is the basic continued defun.
+@end defun
+
+@noindent
+As you can see, the continued lines are combined, as if they had been
+typed on one source line.
+
+Although this example only shows a one-line continuation,
+continuations may extend over any number of lines; simply put an
+@code{@@} at the end of each line to be continued.
+
+The @code{@@} character does not have to be the last character on the
+physical line: whitespace is allowed (and ignored) afterwards.
+
+@cindex Whitespace, collapsed around continuations
+@cindex Collapsing whitespace around continuations
+In general, any number of spaces or tabs around the @code{@@}
+continuation character, both on the line with the @code{@@} and on the
+continued line, are collapsed into a single space. There is one
+exception: the Texinfo processors will not fully collapse whitespace
+around a continuation inside braces. For example:
+
+@example
+@@deffn @{Category @@
+ Name@} @dots{}
+@end example
+
+@noindent The output (not shown) has excess space between `Category'
+and `Name'. In this case, simply elide any unwanted whitespace in
+your input, or put the continuation @code{@@} outside braces.
+
+@code{@@} does not (currently) function as a continuation character in
+@emph{any} other context. Ordinarily, @samp{@@} followed by a
+whitespace character (space, tab, newline) produces a normal interword
+space (@pxref{Multiple Spaces}).
+
+
+@node Optional Arguments
+@section Optional and Repeated Arguments
+@cindex Optional and repeated arguments
+@cindex Repeated and optional arguments
+@cindex Arguments, repeated and optional
+@cindex Syntax, optional & repeated arguments
+@cindex Meta-syntactic chars for arguments
+
+Some entities take optional or repeated arguments, which may be
+specified by a distinctive glyph that uses square brackets and
+ellipses. For @w{example}, a special form often breaks its argument list
+into separate arguments in more complicated ways than a
+straightforward function.
+
+@c This is consistent with Emacs Lisp Reference manual
+An argument enclosed within square brackets is optional.
+Thus, [@var{optional-arg}] means that @var{optional-arg} is optional.
+An argument followed by an ellipsis is optional
+and may be repeated more than once.
+@c This is consistent with Emacs Lisp Reference manual
+Thus, @var{repeated-args}@samp{@dots{}} stands for zero or more
+arguments. Parentheses are used when several arguments are grouped
+into additional levels of list structure in Lisp.
+
+Here is the @code{@@defspec} line of an example of an imaginary
+special form:
+
+@quotation
+@defspec foobar (@var{var} [@var{from} @var{to} [@var{inc}]]) @var{body}@dots{}
+@end defspec
+@tex
+\vskip \parskip
+@end tex
+@end quotation
+
+@noindent
+In this example, the arguments @var{from} and @var{to} are optional,
+but must both be present or both absent. If they are present,
+@var{inc} may optionally be specified as well. These arguments are
+grouped with the argument @var{var} into a list, to distinguish them
+from @var{body}, which includes all remaining elements of the
+form.@refill
+
+In a Texinfo source file, this @code{@@defspec} line is written like
+this (except it would not be split over two lines, as it is in this
+example).@refill
+
+@example
+@group
+@@defspec foobar (@@var@{var@} [@@var@{from@} @@var@{to@}
+ [@@var@{inc@}]]) @@var@{body@}@@dots@{@}
+@end group
+@end example
+
+@noindent
+The function is listed in the Command and Variable Index under
+@samp{foobar}.@refill
+
+
+@node deffnx
+@section Two or More `First' Lines
+@cindex Two `First' Lines for @code{@@deffn}
+@cindex Grouping two definitions together
+@cindex Definitions grouped together
+@findex deffnx
+
+To create two or more `first' or header lines for a definition, follow
+the first @code{@@deffn} line by a line beginning with @code{@@deffnx}.
+The @code{@@deffnx} command works exactly like @code{@@deffn}
+except that it does not generate extra vertical white space between it
+and the preceding line.@refill
+
+@need 1000
+For example,
+
+@example
+@group
+@@deffn @{Interactive Command@} isearch-forward
+@@deffnx @{Interactive Command@} isearch-backward
+These two search commands are similar except @dots{}
+@@end deffn
+@end group
+@end example
+
+@noindent
+produces
+
+@deffn {Interactive Command} isearch-forward
+@deffnx {Interactive Command} isearch-backward
+These two search commands are similar except @dots{}
+@end deffn
+
+Each definition command has an `x' form: @code{@@defunx},
+@code{@@defvrx}, @code{@@deftypefunx}, etc.
+
+The `x' forms work similarly to @code{@@itemx} (@pxref{itemx}).
+
+
+@node Def Cmds in Detail
+@section The Definition Commands
+
+Texinfo provides more than a dozen definition commands, all of which
+are described in this section.@refill
+
+The definition commands automatically enter the name of the entity in
+the appropriate index: for example, @code{@@deffn}, @code{@@defun},
+and @code{@@defmac} enter function names in the index of functions;
+@code{@@defvr} and @code{@@defvar} enter variable names in the index
+of variables.@refill
+
+Although the examples that follow mostly illustrate Lisp, the commands
+can be used for other programming languages.@refill
+
+@menu
+* Functions Commands:: Commands for functions and similar entities.
+* Variables Commands:: Commands for variables and similar entities.
+* Typed Functions:: Commands for functions in typed languages.
+* Typed Variables:: Commands for variables in typed languages.
+* Data Types:: The definition command for data types.
+* Abstract Objects:: Commands for object-oriented programming.
+@end menu
+
+@node Functions Commands
+@subsection Functions and Similar Entities
+
+This section describes the commands for describing functions and similar
+entities:@refill
+
+@table @code
+@findex deffn
+@item @@deffn @var{category} @var{name} @var{arguments}@dots{}
+The @code{@@deffn} command is the general definition command for
+functions, interactive commands, and similar entities that may take
+arguments. You must choose a term to describe the category of entity
+being defined; for example, ``Function'' could be used if the entity is
+a function. The @code{@@deffn} command is written at the beginning of a
+line and is followed on the same line by the category of entity being
+described, the name of this particular entity, and its arguments, if
+any. Terminate the definition with @code{@@end deffn} on a line of its
+own.@refill
+
+@need 750
+For example, here is a definition:
+
+@example
+@group
+@@deffn Command forward-char nchars
+Move point forward @@var@{nchars@} characters.
+@@end deffn
+@end group
+@end example
+
+@noindent
+This shows a rather terse definition for a ``command'' named
+@code{forward-char} with one argument, @var{nchars}.
+
+@code{@@deffn} and prints argument names such as @var{nchars} in slanted
+type in the printed output, because we think of these names as
+metasyntactic variables---they stand for the actual argument values.
+Within the text of the description, however, write an argument name
+explicitly with @code{@@var} to refer to the value of the argument.
+In the example above, we used @samp{@@var@{nchars@}} in this way.
+
+In the unusual case when an argument name contains @samp{--}, or
+another character sequence which is treated specially
+(@pxref{Conventions}), use @code{@@var} around the argument. This
+causes the name to be printed in slanted typewriter, instead of the
+regular slanted font, exactly as input.
+@c except for ?` and !`, but we won't explain that.
+
+The template for @code{@@deffn} is:
+
+@example
+@group
+@@deffn @var{category} @var{name} @var{arguments}@dots{}
+@var{body-of-definition}
+@@end deffn
+@end group
+@end example
+
+@findex defun
+@item @@defun @var{name} @var{arguments}@dots{}
+The @code{@@defun} command is the definition command for functions.
+@code{@@defun} is equivalent to @samp{@@deffn Function @dots{}}.
+Terminate the definition with @code{@@end defun} on a line of its own.
+Thus, the template is:
+
+@example
+@group
+@@defun @var{function-name} @var{arguments}@dots{}
+@var{body-of-definition}
+@@end defun
+@end group
+@end example
+
+@findex defmac
+@item @@defmac @var{name} @var{arguments}@dots{}
+The @code{@@defmac} command is the definition command for macros.
+@code{@@defmac} is equivalent to @samp{@@deffn Macro @dots{}} and
+works like @code{@@defun}.
+
+@findex defspec
+@item @@defspec @var{name} @var{arguments}@dots{}
+The @code{@@defspec} command is the definition command for special
+forms. (In Lisp, a special form is an entity much like a function,
+@pxref{Special Forms,,, elisp, GNU Emacs Lisp Reference Manual}.)
+@code{@@defspec} is equivalent to @samp{@@deffn @{Special Form@}
+@dots{}} and works like @code{@@defun}.
+@end table
+
+All these commands create entries in the index of functions.
+
+
+@node Variables Commands
+@subsection Variables and Similar Entities
+
+Here are the commands for defining variables and similar
+entities:@refill
+
+@table @code
+@findex defvr
+@item @@defvr @var{category} @var{name}
+The @code{@@defvr} command is a general definition command for
+something like a variable---an entity that records a value. You must
+choose a term to describe the category of entity being defined; for
+example, ``Variable'' could be used if the entity is a variable.
+Write the @code{@@defvr} command at the beginning of a line and
+follow it on the same line by the category of the entity and the
+name of the entity.
+
+Capitalize the category name like a title. If the name of the category
+contains spaces, as in the name ``User Option'', enclose it in braces.
+Otherwise, the second word will be mistaken for the name of the entity.
+For example,
+
+@example
+@group
+@@defvr @{User Option@} fill-column
+This buffer-local variable specifies
+the maximum width of filled lines.
+@dots{}
+@@end defvr
+@end group
+@end example
+
+Terminate the definition with @code{@@end defvr} on a line of its
+own.@refill
+
+The template is:
+
+@example
+@group
+@@defvr @var{category} @var{name}
+@var{body-of-definition}
+@@end defvr
+@end group
+@end example
+
+@code{@@defvr} creates an entry in the index of variables for @var{name}.
+
+@findex defvar
+@item @@defvar @var{name}
+The @code{@@defvar} command is the definition command for variables.
+@code{@@defvar} is equivalent to @samp{@@defvr Variable
+@dots{}}.@refill
+
+@need 750
+For example:
+
+@example
+@group
+@@defvar kill-ring
+@dots{}
+@@end defvar
+@end group
+@end example
+
+The template is:
+
+@example
+@group
+@@defvar @var{name}
+@var{body-of-definition}
+@@end defvar
+@end group
+@end example
+
+@code{@@defvar} creates an entry in the index of variables for
+@var{name}.@refill
+
+@findex defopt
+@item @@defopt @var{name}
+@cindex User options, marking
+The @code{@@defopt} command is the definition command for @dfn{user
+options}, i.e., variables intended for users to change according to
+taste; Emacs has many such (@pxref{Variables,,, emacs, The GNU Emacs
+Manual}). @code{@@defopt} is equivalent to @samp{@@defvr @{User
+Option@} @dots{}} and works like @code{@@defvar}. It creates an entry
+in the index of variables.
+@end table
+
+
+@node Typed Functions
+@subsection Functions in Typed Languages
+
+The @code{@@deftypefn} command and its variations are for describing
+functions in languages in which you must declare types of variables and
+functions, such as C and C++.
+
+@table @code
+@findex deftypefn
+@item @@deftypefn @var{category} @var{data-type} @var{name} @var{arguments}@dots{}
+The @code{@@deftypefn} command is the general definition command for
+functions and similar entities that may take arguments and that are
+typed. The @code{@@deftypefn} command is written at the beginning of
+a line and is followed on the same line by the category of entity
+being described, the type of the returned value, the name of this
+particular entity, and its arguments, if any.@refill
+
+@need 800
+@noindent
+For example,
+
+@example
+@group
+@@deftypefn @{Library Function@} int foobar
+ (int @@var@{foo@}, float @@var@{bar@})
+@dots{}
+@@end deftypefn
+@end group
+@end example
+
+@need 1000
+@noindent
+(where the text before the ``@dots{}'', shown above as two lines, would
+actually be a single line in a real Texinfo file) produces the following
+in Info:
+
+@smallexample
+@group
+-- Library Function: int foobar (int FOO, float BAR)
+@dots{}
+@end group
+@end smallexample
+@iftex
+
+In a printed manual, it produces:
+
+@quotation
+@deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar})
+@dots{}
+@end deftypefn
+@end quotation
+@end iftex
+
+This means that @code{foobar} is a ``library function'' that returns an
+@code{int}, and its arguments are @var{foo} (an @code{int}) and
+@var{bar} (a @code{float}).@refill
+
+Since in typed languages, the actual names of the arguments are
+typically scattered among data type names and keywords, Texinfo cannot
+find them without help. You can either (a)@tie{}write everything
+as straight text, and it will be printed in slanted type; (b)@tie{}use
+@code{@@var} for the variable names, which will uppercase the
+variable names in Info and use the slanted typewriter font in printed
+output; (c)@tie{}use @code{@@var} for the variable names and
+@code{@@code} for the type names and keywords, which will be dutifully
+obeyed.
+
+The template for @code{@@deftypefn} is:@refill
+
+@example
+@group
+@@deftypefn @var{category} @var{data-type} @var{name} @var{arguments} @dots{}
+@var{body-of-description}
+@@end deftypefn
+@end group
+@end example
+
+@noindent
+Note that if the @var{category} or @var{data type} is more than one
+word then it must be enclosed in braces to make it a single argument.@refill
+
+If you are describing a procedure in a language that has packages,
+such as Ada, you might consider using @code{@@deftypefn} in a manner
+somewhat contrary to the convention described in the preceding
+paragraphs. For example:
+
+@example
+@group
+@@deftypefn stacks private push @@
+ (@@var@{s@}:in out stack; @@
+ @@var@{n@}:in integer)
+@dots{}
+@@end deftypefn
+@end group
+@end example
+
+@noindent
+(The @code{@@deftypefn} arguments are shown using continuations
+(@pxref{Def Cmd Continuation Lines}), but could be on a single line in
+a real Texinfo file.)
+
+In this instance, the procedure is classified as belonging to the
+package @code{stacks} rather than classified as a `procedure' and its
+data type is described as @code{private}. (The name of the procedure
+is @code{push}, and its arguments are @var{s} and @var{n}.)@refill
+
+@code{@@deftypefn} creates an entry in the index of functions for
+@var{name}.
+
+@item @@deftypefun @var{data-type} @var{name} @var{arguments}@dots{}
+@findex deftypefun
+The @code{@@deftypefun} command is the specialized definition command
+for functions in typed languages. The command is equivalent to
+@samp{@@deftypefn Function @dots{}}. The template is:
+
+@example
+@group
+@@deftypefun @var{type} @var{name} @var{arguments}@dots{}
+@var{body-of-description}
+@@end deftypefun
+@end group
+@end example
+
+@code{@@deftypefun} creates an entry in the index of functions for
+@var{name}.
+
+@end table
+
+
+@node Typed Variables
+@subsection Variables in Typed Languages
+
+Variables in typed languages are handled in a manner similar to
+functions in typed languages. @xref{Typed Functions}. The general
+definition command @code{@@deftypevr} corresponds to
+@code{@@deftypefn} and the specialized definition command
+@code{@@deftypevar} corresponds to @code{@@deftypefun}.@refill
+
+@table @code
+@findex deftypevr
+@item @@deftypevr @var{category} @var{data-type} @var{name}
+The @code{@@deftypevr} command is the general definition command for
+something like a variable in a typed language---an entity that records
+a value. You must choose a term to describe the category of the
+entity being defined; for example, ``Variable'' could be used if the
+entity is a variable.@refill
+
+The @code{@@deftypevr} command is written at the beginning of a line
+and is followed on the same line by the category of the entity
+being described, the data type, and the name of this particular
+entity.@refill
+
+@need 800
+@noindent
+For example:
+
+@example
+@group
+@@deftypevr @{Global Flag@} int enable
+@dots{}
+@@end deftypevr
+@end group
+@end example
+
+@noindent
+produces the following in Info:
+
+@example
+@group
+-- Global Flag: int enable
+@dots{}
+@end group
+@end example
+@iftex
+
+@noindent
+and the following in a printed manual:
+
+@quotation
+@deftypevr {Global Flag} int enable
+@dots{}
+@end deftypevr
+@end quotation
+@end iftex
+
+@need 800
+The template is:
+
+@example
+@@deftypevr @var{category} @var{data-type} @var{name}
+@var{body-of-description}
+@@end deftypevr
+@end example
+
+@findex deftypevar
+@item @@deftypevar @var{data-type} @var{name}
+The @code{@@deftypevar} command is the specialized definition command
+for variables in typed languages. @code{@@deftypevar} is equivalent
+to @samp{@@deftypevr Variable @dots{}}. The template is:
+
+@example
+@group
+@@deftypevar @var{data-type} @var{name}
+@var{body-of-description}
+@@end deftypevar
+@end group
+@end example
+@end table
+
+These commands create entries in the index of variables.
+
+@node Data Types
+@subsection Data Types
+
+Here is the command for data types:@refill
+
+@table @code
+@findex deftp
+@item @@deftp @var{category} @var{name} @var{attributes}@dots{}
+The @code{@@deftp} command is the generic definition command for data
+types. The command is written at the beginning of a line and is
+followed on the same line by the category, by the name of the type
+(which is a word like @code{int} or @code{float}), and then by names of
+attributes of objects of that type. Thus, you could use this command
+for describing @code{int} or @code{float}, in which case you could use
+@code{data type} as the category. (A data type is a category of
+certain objects for purposes of deciding which operations can be
+performed on them.)@refill
+
+In Lisp, for example, @dfn{pair} names a particular data
+type, and an object of that type has two slots called the
+@sc{car} and the @sc{cdr}. Here is how you would write the first line
+of a definition of @code{pair}.@refill
+
+@example
+@group
+@@deftp @{Data type@} pair car cdr
+@dots{}
+@@end deftp
+@end group
+@end example
+
+@need 950
+The template is:
+
+@example
+@group
+@@deftp @var{category} @var{name-of-type} @var{attributes}@dots{}
+@var{body-of-definition}
+@@end deftp
+@end group
+@end example
+
+@code{@@deftp} creates an entry in the index of data types.
+@end table
+
+
+@node Abstract Objects
+@subsection Object-Oriented Programming
+
+@cindex Object-oriented programming
+
+Here are the commands for formatting descriptions about abstract
+objects, such as are used in object-oriented programming. A class is
+a defined type of abstract object. An instance of a class is a
+particular object that has the type of the class. An instance
+variable is a variable that belongs to the class but for which each
+instance has its own value.
+
+@menu
+* Variables: Object-Oriented Variables.
+* Methods: Object-Oriented Methods.
+@end menu
+
+
+@node Object-Oriented Variables
+@subsubsection Object-Oriented Variables
+
+@cindex Variables, object-oriented
+
+These commands allow you to define different sorts of variables in
+object-oriented programming languages.
+
+@table @code
+@item @@defcv @var{category} @var{class} @var{name}
+@findex defcv
+The @code{@@defcv} command is the general definition command for
+variables associated with classes in object-oriented programming. The
+@code{@@defcv} command is followed by three arguments: the category of
+thing being defined, the class to which it belongs, and its
+name. For instance:
+
+@example
+@group
+@@defcv @{Class Option@} Window border-pattern
+@dots{}
+@@end defcv
+@end group
+@end example
+
+@noindent produces:
+@defcv {Class Option} Window border-pattern
+@dots{}
+@end defcv
+
+@code{@@defcv} creates an entry in the index of variables.
+
+@item @@deftypecv @var{category} @var{class} @var{data-type} @var{name}
+@findex deftypecv
+The @code{@@deftypecv} command is the definition command for typed
+class variables in object-oriented programming. It is analogous to
+@code{@@defcv} with the addition of the @var{data-type} parameter to
+specify the type of the instance variable. Ordinarily, the data type
+is a programming language construct that should be marked with
+@code{@@code}. For instance:
+
+@example
+@group
+@@deftypecv @{Class Option@} Window @@code@{int@} border-pattern
+@dots{}
+@@end deftypecv
+@end group
+@end example
+
+@noindent produces:
+
+@deftypecv {Class Option} Window @code{int} border-pattern
+@dots{}
+@end deftypecv
+
+@code{@@deftypecv} creates an entry in the index of variables.
+
+@item @@defivar @var{class} @var{name}
+@findex defivar
+The @code{@@defivar} command is the definition command for instance
+variables in object-oriented programming. @code{@@defivar} is
+equivalent to @samp{@@defcv @{Instance Variable@} @dots{}}. For
+instance:
+
+@example
+@group
+@@defivar Window border-pattern
+@dots{}
+@@end defivar
+@end group
+@end example
+
+@noindent produces:
+
+@defivar Window border-pattern
+@dots{}
+@end defivar
+
+@code{@@defivar} creates an entry in the index of variables.
+
+@item @@deftypeivar @var{class} @var{data-type} @var{name}
+@findex deftypeivar
+The @code{@@deftypeivar} command is the definition command for typed
+instance variables in object-oriented programming. It is analogous to
+@code{@@defivar} with the addition of the @var{data-type} parameter to
+specify the type of the instance variable. Ordinarily, the data type
+is a programming language construct that should be marked with
+@code{@@code}. For instance:
+
+@example
+@group
+@@deftypeivar Window @@code@{int@} border-pattern
+@dots{}
+@@end deftypeivar
+@end group
+@end example
+
+@noindent produces:
+
+@deftypeivar Window @code{int} border-pattern
+@dots{}
+@end deftypeivar
+
+@code{@@deftypeivar} creates an entry in the index of variables.
+
+@end table
+
+@node Object-Oriented Methods
+@subsubsection Object-Oriented Methods
+
+@cindex Methods, object-oriented
+
+These commands allow you to define different sorts of function-like
+entities resembling methods in object-oriented programming languages.
+These entities take arguments, as functions do, but are associated with
+particular classes of objects.
+
+@table @code
+
+@findex defop
+@item @@defop @var{category} @var{class} @var{name} @var{arguments}@dots{}
+The @code{@@defop} command is the general definition command for these
+method-like entities.
+
+For example, some systems have constructs called @dfn{wrappers} that
+are associated with classes as methods are, but that act more like
+macros than like functions. You could use @code{@@defop Wrapper} to
+describe one of these.@refill
+
+Sometimes it is useful to distinguish methods and @dfn{operations}.
+You can think of an operation as the specification for a method.
+Thus, a window system might specify that all window classes have a
+method named @code{expose}; we would say that this window system
+defines an @code{expose} operation on windows in general. Typically,
+the operation has a name and also specifies the pattern of arguments;
+all methods that implement the operation must accept the same
+arguments, since applications that use the operation do so without
+knowing which method will implement it.@refill
+
+Often it makes more sense to document operations than methods. For
+example, window application developers need to know about the
+@code{expose} operation, but need not be concerned with whether a
+given class of windows has its own method to implement this operation.
+To describe this operation, you would write:@refill
+
+@example
+@@defop Operation windows expose
+@end example
+
+The @code{@@defop} command is written at the beginning of a line and
+is followed on the same line by the overall name of the category of
+operation, the name of the class of the operation, the name of the
+operation, and its arguments, if any.@refill
+
+The template is:
+@example
+@group
+@@defop @var{category} @var{class} @var{name} @var{arguments}@dots{}
+@var{body-of-definition}
+@@end defop
+@end group
+@end example
+
+@code{@@defop} creates an entry, such as `@code{expose} on
+@code{windows}', in the index of functions.@refill
+
+@findex deftypeop
+@item @@deftypeop @var{category} @var{class} @var{data-type} @var{name} @var{arguments}@dots{}
+The @code{@@deftypeop} command is the definition command for typed
+operations in object-oriented programming. It is similar to
+@code{@@defop} with the addition of the @var{data-type} parameter to
+specify the return type of the method. @code{@@deftypeop} creates an
+entry in the index of functions.
+
+@item @@defmethod @var{class} @var{name} @var{arguments}@dots{}
+@findex defmethod
+The @code{@@defmethod} command is the definition command for methods
+in object-oriented programming. A method is a kind of function that
+implements an operation for a particular class of objects and its
+subclasses.
+@ignore
+@c ADR: Who cares?!?
+@c KB: Oh, I don't know, I think this info is crucial!
+In the Lisp Machine, methods actually were functions, but
+they were usually defined with @code{defmethod}.
+@end ignore
+
+@code{@@defmethod} is equivalent to @samp{@@defop Method @dots{}}.
+The command is written at the beginning of a line and is followed by
+the name of the class of the method, the name of the method, and its
+arguments, if any.@refill
+
+@noindent
+For example:
+@example
+@group
+@@defmethod @code{bar-class} bar-method argument
+@dots{}
+@@end defmethod
+@end group
+@end example
+
+@noindent
+illustrates the definition for a method called @code{bar-method} of
+the class @code{bar-class}. The method takes an argument.
+
+@code{@@defmethod} creates an entry in the index of functions.
+
+@item @@deftypemethod @var{class} @var{data-type} @var{name} @var{arguments}@dots{}
+@findex defmethod
+The @code{@@deftypemethod} command is the definition command for methods
+in object-oriented typed languages, such as C++ and Java. It is similar
+to the @code{@@defmethod} command with the addition of the
+@var{data-type} parameter to specify the return type of the method.
+@code{@@deftypemethod} creates an entry in the index of functions.
+
+@end table
+
+
+@node Def Cmd Conventions
+@section Conventions for Writing Definitions
+@cindex Definition conventions
+@cindex Conventions for writing definitions
+
+When you write a definition using @code{@@deffn}, @code{@@defun}, or
+one of the other definition commands, please take care to use
+arguments that indicate the meaning, as with the @var{count} argument
+to the @code{forward-word} function. Also, if the name of an argument
+contains the name of a type, such as @var{integer}, take care that the
+argument actually is of that type.@refill
+
+
+@node Sample Function Definition
+@section A Sample Function Definition
+@cindex Function definitions
+@cindex Command definitions
+@cindex Macro definitions
+@cindex Sample function definition
+
+A function definition uses the @code{@@defun} and @code{@@end defun}
+commands. The name of the function follows immediately after the
+@code{@@defun} command and it is followed, on the same line, by the
+parameter list.@refill
+
+Here is a definition from @ref{Calling Functions,,, elisp, The GNU Emacs
+Lisp Reference Manual}.
+
+@quotation
+@defun apply function &rest arguments
+@code{apply} calls @var{function} with @var{arguments}, just
+like @code{funcall} but with one difference: the last of
+@var{arguments} is a list of arguments to give to
+@var{function}, rather than a single argument. We also say
+that this list is @dfn{appended} to the other arguments.
+
+@code{apply} returns the result of calling @var{function}.
+As with @code{funcall}, @var{function} must either be a Lisp
+function or a primitive function; special forms and macros
+do not make sense in @code{apply}.
+
+@example
+(setq f 'list)
+ @result{} list
+(apply f 'x 'y 'z)
+@error{} Wrong type argument: listp, z
+(apply '+ 1 2 '(3 4))
+ @result{} 10
+(apply '+ '(1 2 3 4))
+ @result{} 10
+
+(apply 'append '((a b c) nil (x y z) nil))
+ @result{} (a b c x y z)
+@end example
+
+An interesting example of using @code{apply} is found in the description
+of @code{mapcar}.@refill
+@end defun
+@end quotation
+
+@need 1200
+In the Texinfo source file, this example looks like this:
+
+@example
+@group
+@@defun apply function &rest arguments
+@@code@{apply@} calls @@var@{function@} with
+@@var@{arguments@}, just like @@code@{funcall@} but with one
+difference: the last of @@var@{arguments@} is a list of
+arguments to give to @@var@{function@}, rather than a single
+argument. We also say that this list is @@dfn@{appended@}
+to the other arguments.
+@end group
+
+@group
+@@code@{apply@} returns the result of calling
+@@var@{function@}. As with @@code@{funcall@},
+@@var@{function@} must either be a Lisp function or a
+primitive function; special forms and macros do not make
+sense in @@code@{apply@}.
+@end group
+
+@group
+@@example
+(setq f 'list)
+ @@result@{@} list
+(apply f 'x 'y 'z)
+@@error@{@} Wrong type argument: listp, z
+(apply '+ 1 2 '(3 4))
+ @@result@{@} 10
+(apply '+ '(1 2 3 4))
+ @@result@{@} 10
+
+(apply 'append '((a b c) nil (x y z) nil))
+ @@result@{@} (a b c x y z)
+@@end example
+@end group
+
+@group
+An interesting example of using @@code@{apply@} is found
+in the description of @@code@{mapcar@}.
+@@end defun
+@end group
+@end example
+
+@noindent
+In this manual, this function is listed in the Command and Variable
+Index under @code{apply}.@refill
+
+Ordinary variables and user options are described using a format like
+that for functions except that variables do not take arguments.
+
+
+@node Conditionals
+@chapter Conditionally Visible Text
+@cindex Conditionally visible text
+@cindex Text, conditionally visible
+@cindex Visibility of conditional text
+@cindex If text conditionally visible
+
+The @dfn{conditional commands} allow you to use different text for
+different output formats, or for general conditions that you define.
+For example, you can use them to specify different text for the
+printed manual and the Info output.
+
+The conditional commands comprise the following categories.
+
+@itemize @bullet
+@item
+Commands specific to an output format (Info, @TeX{}, HTML, @dots{}).
+
+@item
+Commands specific to any output format @emph{other} than a given
+one (not Info, not @TeX{}, @dots{}).
+
+@item
+`Raw' formatter text for any output format, passed straight
+through with no interpretation of @@-commands.
+
+@item
+Format-independent variable substitutions, and testing if a variable
+is set or clear.
+
+@end itemize
+
+@menu
+* Conditional Commands:: Text for a given format.
+* Conditional Not Commands:: Text for any format other than a given one.
+* Raw Formatter Commands:: Using raw formatter commands.
+* set clear value:: Variable tests and substitutions.
+* Conditional Nesting:: Using conditionals inside conditionals.
+@end menu
+
+
+@node Conditional Commands
+@section Conditional Commands
+
+Texinfo has an @code{@@if@var{format}} environment for each output
+format, to allow conditional inclusion of text for a particular output
+format.
+
+@findex ifinfo
+@code{@@ifinfo} begins segments of text that should be ignored by
+@TeX{} when it typesets the printed manual, and by @command{makeinfo}
+when not producing Info output. The segment of text appears only in
+the Info file and, for historical compatibility, the plain text
+output.
+
+@findex ifdocbook
+@findex ifhtml
+@findex ifplaintext
+@findex iftex
+@findex ifxml
+The environments for the other formats are analogous:
+
+@table @code
+@item @@ifdocbook @dots{} @@end ifdocbook
+Text to appear only in the Docbook output.
+
+@item @@ifhtml @dots{} @@end ifhtml
+Text to appear only in the HTML output.
+
+@item @@ifplaintext @dots{} @@end ifplaintext
+Text to appear only in the plain text output.
+
+@item @@iftex @dots{} @@end iftex
+Text to appear only in the printed manual.
+
+@item @@ifxml @dots{} @@end ifxml
+Text to appear only in the XML output.
+@end table
+
+The @code{@@if@dots{}} and @code{@@end if@dots{}} commands must appear
+on lines by themselves in your source file.
+
+Here is an example showing all these conditionals:
+
+@example
+@@iftex
+This text will appear only in the printed manual.
+@@end iftex
+@@ifinfo
+However, this text will appear only in Info and plain text.
+@@end ifinfo
+@@ifhtml
+And this text will only appear in HTML.
+@@end ifhtml
+@@ifplaintext
+Whereas this text will only appear in plain text.
+@@end ifplaintext
+@@ifxml
+Notwithstanding that this will only appear in XML.
+@@end ifxml
+@@ifdocbook
+Nevertheless, this will only appear in Docbook.
+@@end ifdocbook
+@end example
+
+@noindent
+The preceding example produces the following line:
+
+@iftex
+This text will appear only in the printed manual.
+@end iftex
+@ifinfo
+However, this text will appear only in Info and plain text.
+@end ifinfo
+@ifhtml
+And this text will only appear in HTML.
+@end ifhtml
+@ifplaintext
+Whereas this text will only appear in plain text.
+@end ifplaintext
+@ifxml
+Notwithstanding that this will only appear in XML.
+@end ifxml
+@ifdocbook
+Nevertheless, this will only appear in Docbook.
+@end ifdocbook
+
+@noindent
+Notice that you only see one of the input lines, depending on which
+version of the manual you are reading.
+
+
+@node Conditional Not Commands
+@section Conditional Not Commands
+@findex ifnotdocbook
+@findex ifnothtml
+@findex ifnotinfo
+@findex ifnotplaintext
+@findex ifnottex
+@findex ifnotxml
+
+You can specify text to be included in any output format @emph{other}
+than a given one with the @code{@@ifnot@dots{}} environments:
+
+@example
+@@ifnotdocbook @dots{} @@end ifnotdocbook
+@@ifnothtml @dots{} @@end ifnothtml
+@@ifnotinfo @dots{} @@end ifnotinfo
+@@ifnotplaintext @dots{} @@end ifnotplaintext
+@@ifnottex @dots{} @@end ifnottex
+@@ifnotxml @dots{} @@end ifnotxml
+@end example
+
+@noindent
+The @code{@@ifnot@dots{}} command and the @code{@@end} command must
+appear on lines by themselves in your actual source file.
+
+If the output file is being made in the given format, the
+region is @emph{ignored}. Otherwise, it is included.
+
+There is one exception (for historical compatibility):
+@code{@@ifnotinfo} text is omitted for both Info and plain text
+output, not just Info. To specify text which appears only in Info and
+not in plain text, use @code{@@ifnotplaintext}, like this:
+
+@example
+@@ifinfo
+@@ifnotplaintext
+This will be in Info, but not plain text.
+@@end ifnotplaintext
+@@end ifinfo
+@end example
+
+The regions delimited by these commands are ordinary Texinfo source as
+with @code{@@iftex}, not raw formatter source as with @code{@@tex}
+(@pxref{Raw Formatter Commands}).
+
+
+@node Raw Formatter Commands
+@section Raw Formatter Commands
+@cindex Raw formatter commands
+@cindex @TeX{} commands, using ordinary
+@cindex Ordinary @TeX{} commands, using
+@cindex Commands using raw @TeX{}
+@cindex Docbook, including raw
+@cindex HTML, including raw
+@cindex XML, including raw
+@cindex Plain @TeX{}
+
+Inside a region delineated by @code{@@iftex} and @code{@@end iftex},
+you can embed some raw @TeX{} commands. The Texinfo processors will
+ignore such a region unless @TeX{} output is being produced. You can
+write the @TeX{} commands as you would write them in a normal @TeX{}
+file, except that you must replace the @samp{\} used by @TeX{} with an
+@samp{@@}. For example, in the @code{@@titlepage} section of a
+Texinfo file, you can use the @TeX{} command @code{@@vskip} to format
+the copyright page. (The @code{@@titlepage} command causes Info to
+ignore the region automatically, as it does with the @code{@@iftex}
+command.)
+
+However, most features of plain @TeX{} will not work within
+@code{@@iftex}, as they are overridden by Texinfo features. The
+purpose of @code{@@iftex} is to provide conditional processing for the
+Texinfo source, not provide access to underlying formatting features.
+
+@findex tex
+You can enter plain @TeX{} completely, and use @samp{\} in the @TeX{}
+commands, by delineating a region with the @code{@@tex} and @code{@@end
+tex} commands. All plain @TeX{} commands and category codes are
+restored within an @code{@@tex} region. The sole exception is that the
+@code{@@} character still introduces a command, so that @code{@@end tex}
+can be recognized properly. As with @code{@@iftex}, Texinfo
+processors will ignore such a region unless @TeX{} output is being produced.
+
+@findex \gdef @r{within @code{@@tex}}
+In complex cases, you may wish to define new @TeX{} macros within
+@code{@@tex}. You must use @code{\gdef} to do this, not @code{\def},
+because @code{@@tex} regions are processed in a @TeX{} group.
+
+@cindex Mathematical expressions
+As an example, here is a mathematical expression written in plain @TeX{}:
+
+@example
+@@tex
+$$ \chi^2 = \sum_@{i=1@}^N
+ \left (y_i - (a + b x_i)
+ \over \sigma_i\right)^2 $$
+@@end tex
+@end example
+
+@noindent
+The output of this example will appear only in a printed manual. If
+you are reading this in Info, you will not see the equation that appears
+in the printed manual.
+@iftex
+In a printed manual, the above expression looks like
+this:
+@end iftex
+
+@tex
+$$ \chi^2 = \sum_{i=1}^N
+ \left(y_i - (a + b x_i)
+ \over \sigma_i\right)^2 $$
+@end tex
+
+@findex ifhtml
+@findex html
+Analogously, you can use @code{@@ifhtml @dots{} @@end ifhtml} to delimit
+a region to be included in HTML output only, and @code{@@html @dots{}
+@@end html} for a region of raw HTML.
+
+@findex ifxml
+@findex xml
+Likewise, you can use @code{@@ifxml @dots{} @@end ifxml} to delimit
+a region to be included in XML output only, and @code{@@xml @dots{}
+@@end xml} for a region of raw XML.
+
+@findex ifdocbook
+@findex docbook
+Again likewise, you can use @code{@@ifdocbook @dots{} @@end ifdocbook}
+to delimit a region to be included in Docbook output only, and
+@code{@@docbook @dots{} @@end docbook} for a region of raw Docbook.
+
+In all cases, the exception to the raw processing is that @code{@@} is
+still an escape character, so the @code{@@end} command can be
+recognized.
+
+
+@node set clear value
+@section @code{@@set}, @code{@@clear}, and @code{@@value}
+
+You can direct the Texinfo formatting commands to format or ignore parts
+of a Texinfo file with the @code{@@set}, @code{@@clear}, @code{@@ifset},
+and @code{@@ifclear} commands.
+
+Here are brief descriptions of these commands, see the following
+sections for more details:
+
+@table @code
+@item @@set @var{flag} [@var{value}]
+Set the variable @var{flag}, to the optional @var{value} if specified.
+
+@item @@clear @var{flag}
+Undefine the variable @var{flag}, whether or not it was previously defined.
+
+@item @@ifset @var{flag}
+If @var{flag} is set, text through the next @code{@@end ifset} command
+is formatted. If @var{flag} is clear, text through the following
+@code{@@end ifset} command is ignored.
+
+@item @@ifclear @var{flag}
+If @var{flag} is set, text through the next @code{@@end ifclear} command
+is ignored. If @var{flag} is clear, text through the following
+@code{@@end ifclear} command is formatted.
+@end table
+
+@menu
+* set value:: Expand a flag variable to a string.
+* ifset ifclear:: Format a region if a flag is set.
+* value Example:: An easy way to update edition information.
+@end menu
+
+
+@node set value
+@subsection @code{@@set} and @code{@@value}
+@findex set
+@findex value
+@findex clear
+
+You use the @code{@@set} command to specify a value for a flag, which
+is later expanded by the @code{@@value} command.
+
+A @dfn{flag} (aka @dfn{variable}) is an identifier. It is best to use
+only letters and numerals in a flag name, not @samp{-} or
+@samp{_}---they will work in some contexts, but not all, due to
+limitations in @TeX{}.
+
+The value is the remainder of the input line, and can contain anything.
+
+Write the @code{@@set} command like this:
+
+@example
+@@set foo This is a string.
+@end example
+
+@noindent
+This sets the value of the flag @code{foo} to ``This is a string.''.
+
+The Texinfo formatters then replace an @code{@@value@{@var{flag}@}}
+command with the string to which @var{flag} is set. Thus, when
+@code{foo} is set as shown above, the Texinfo formatters convert this:
+
+@example
+@group
+@@value@{foo@}
+@exdent @r{to this:}
+This is a string.
+@end group
+@end example
+
+You can write an @code{@@value} command within a paragraph; but you
+must write an @code{@@set} command on a line of its own.
+
+If you write the @code{@@set} command like this:
+
+@example
+@@set foo
+@end example
+
+@noindent
+without specifying a string, the value of @code{foo} is the empty string.
+
+If you clear a previously set flag with @code{@@clear @var{flag}}, a
+subsequent @code{@@value@{flag@}} command will report an error.
+
+For example, if you set @code{foo} as follows:
+
+@example
+@@set howmuch very, very, very
+@end example
+
+@noindent
+then the formatters transform
+
+@example
+@group
+It is a @@value@{howmuch@} wet day.
+@exdent @r{into}
+It is a very, very, very wet day.
+@end group
+@end example
+
+If you write
+
+@example
+@@clear howmuch
+@end example
+
+@noindent
+then the formatters transform
+
+@example
+@group
+It is a @@value@{howmuch@} wet day.
+@exdent @r{into}
+It is a @{No value for "howmuch"@} wet day.
+@end group
+@end example
+
+
+@node ifset ifclear
+@subsection @code{@@ifset} and @code{@@ifclear}
+
+@findex ifset
+When a @var{flag} is set, the Texinfo formatting commands format text
+between subsequent pairs of @code{@@ifset @var{flag}} and @code{@@end
+ifset} commands. When the @var{flag} is cleared, the Texinfo formatting
+commands do @emph{not} format the text. @code{@@ifclear} operates
+analogously.
+
+Write the conditionally formatted text between @code{@@ifset @var{flag}}
+and @code{@@end ifset} commands, like this:
+
+@example
+@group
+@@ifset @var{flag}
+@var{conditional-text}
+@@end ifset
+@end group
+@end example
+
+For example, you can create one document that has two variants, such as
+a manual for a `large' and `small' model:
+
+@cindex Shrubbery
+@example
+You can use this machine to dig up shrubs
+without hurting them.
+
+@@set large
+
+@@ifset large
+It can also dig up fully grown trees.
+@@end ifset
+
+Remember to replant promptly @dots{}
+@end example
+
+@noindent
+In the example, the formatting commands will format the text between
+@code{@@ifset large} and @code{@@end ifset} because the @code{large}
+flag is set.
+
+When @var{flag} is cleared, the Texinfo formatting commands do
+@emph{not} format the text between @code{@@ifset @var{flag}} and
+@code{@@end ifset}; that text is ignored and does not appear in either
+printed or Info output.
+
+For example, if you clear the flag of the preceding example by writing
+an @code{@@clear large} command after the @code{@@set large} command
+(but before the conditional text), then the Texinfo formatting commands
+ignore the text between the @code{@@ifset large} and @code{@@end ifset}
+commands. In the formatted output, that text does not appear; in both
+printed and Info output, you see only the lines that say, ``You can use
+this machine to dig up shrubs without hurting them. Remember to replant
+promptly @dots{}''.
+
+@findex ifclear
+If a flag is cleared with an @code{@@clear @var{flag}} command, then
+the formatting commands format text between subsequent pairs of
+@code{@@ifclear} and @code{@@end ifclear} commands. But if the flag
+is set with @code{@@set @var{flag}}, then the formatting commands do
+@emph{not} format text between an @code{@@ifclear} and an @code{@@end
+ifclear} command; rather, they ignore that text. An @code{@@ifclear}
+command looks like this:
+
+@example
+@@ifclear @var{flag}
+@end example
+
+
+@node value Example
+@subsection @code{@@value} Example
+
+You can use the @code{@@value} command to minimize the number of
+places you need to change when you record an update to a manual.
+@xref{GNU Sample Texts}, for the full text of an example of using this
+to work with Automake distributions.
+
+This example is adapted from @ref{Top,, Overview, make, The GNU Make
+Manual}.
+
+@enumerate
+@item
+Set the flags:
+
+@example
+@group
+@@set EDITION 0.35 Beta
+@@set VERSION 3.63 Beta
+@@set UPDATED 14 August 1992
+@@set UPDATE-MONTH August 1992
+@end group
+@end example
+
+@item
+Write text for the @code{@@copying} section (@pxref{copying}):
+
+@example
+@group
+@@copying
+This is Edition @@value@{EDITION@},
+last updated @@value@{UPDATED@},
+of @@cite@{The GNU Make Manual@},
+for @@code@{make@}, version @@value@{VERSION@}.
+
+Copyright @dots{}
+
+Permission is granted @dots{}
+@@end copying
+@end group
+@end example
+
+@item
+Write text for the title page, for people reading the printed manual:
+
+@example
+@group
+@@titlepage
+@@title GNU Make
+@@subtitle A Program for Directing Recompilation
+@@subtitle Edition @@value@{EDITION@}, @dots{}
+@@subtitle @@value@{UPDATE-MONTH@}
+@@page
+@@insertcopying
+@dots{}
+@@end titlepage
+@end group
+@end example
+
+@noindent
+(On a printed cover, a date listing the month and the year looks less
+fussy than a date listing the day as well as the month and year.)
+
+@item
+Write text for the Top node, for people reading the Info file:
+
+@example
+@group
+@@ifnottex
+@@node Top
+@@top Make
+
+@@insertcopying
+@dots{}
+@@end ifnottex
+@end group
+@end example
+
+After you format the manual, the @code{@@value} constructs have been
+expanded, so the output contains text like this:
+
+@example
+@group
+This is Edition 0.35 Beta, last updated 14 August 1992,
+of `The GNU Make Manual', for `make', Version 3.63 Beta.
+@end group
+@end example
+@end enumerate
+
+When you update the manual, you change only the values of the flags; you
+do not need to edit the three sections.
+
+
+@node Conditional Nesting
+@section Conditional Nesting
+@cindex Conditionals, nested
+@cindex Nesting conditionals
+
+Conditionals can be nested; however, the details are a little tricky.
+The difficulty comes with failing conditionals, such as
+@code{@@ifhtml} when HTML is not being produced, where the included
+text is to be ignored. However, it is not to be @emph{completely}
+ignored, since it is useful to have one @code{@@ifset} inside another,
+for example---that is a way to include text only if two conditions are
+met. Here's an example:
+
+@example
+@@ifset somevar
+@@ifset anothervar
+Both somevar and anothervar are set.
+@@end ifset
+@@ifclear anothervar
+Somevar is set, anothervar is not.
+@@end ifclear
+@@end ifset
+@end example
+
+Technically, Texinfo requires that for a failing conditional, the
+ignored text must be properly nested with respect to that failing
+conditional. Unfortunately, it's not always feasible to check that
+@emph{all} conditionals are properly nested, because then the
+processors could have to fully interpret the ignored text, which
+defeats the purpose of the command. Here's an example illustrating
+these rules:
+
+@example
+@@ifset a
+@@ifset b
+@@ifclear ok - ok, ignored
+@@end junky - ok, ignored
+@@end ifset
+@@c WRONG - missing @@end ifset.
+@end example
+
+Finally, as mentioned above, all conditional commands must be on lines
+by themselves, with no text (even spaces) before or after. Otherwise,
+the processors cannot reliably determine which commands to consider
+for nesting purposes.
+
+
+@node Internationalization
+@chapter Internationalization
+
+@cindex Internationalization
+Texinfo has some support for writing in languages other than English,
+although this area still needs considerable work.
+
+For a list of the various accented and special characters Texinfo
+supports, see @ref{Inserting Accents}.
+
+@menu
+* documentlanguage:: Declaring the current language.
+* documentencoding:: Declaring the input encoding.
+@end menu
+
+
+@node documentlanguage
+@section @code{@@documentlanguage @var{ll}[_@var{cc}]}: Set the Document Language
+
+@findex documentlanguage
+@cindex Language, declaring
+@cindex Locale, declaring
+@cindex Document language, declaring
+
+The @code{@@documentlanguage} command declares the current document
+locale. Write it on a line by itself, near the beginning of the
+file, but after @code{@@setfilename}
+(@pxref{setfilename,,@code{@@setfilename}}):
+
+@example
+@@documentlanguage @var{ll}[_@var{cc}]
+@end example
+
+Include a two-letter ISO@tie{}639-2 language code (@var{ll}) following
+the command name, optionally followed by an underscore and two-letter
+ISO@tie{}3166 two-letter country code (@var{cc}). If you have a
+multilingual document, the intent is to be able to use this command
+multiple times, to declare each language change. If the command is
+not used at all, the default is @code{en_US} for US English.
+
+As with GNU Gettext (@pxref{Top,,,gettext, Gettext}), if the country
+code is omitted, the main dialect is assumed where possible. For
+example, @code{de} is equivalent to @code{de_DE} (German as spoken in
+Germany).
+
+@cindex Document strings, translation of
+For Info and other online output, this command changes the translation
+of various @dfn{document strings} such as ``see'' in cross-references
+(@pxref{Cross References}), ``Function' in defuns (@pxref{Definition
+Commands}), and so on. Some strings, such as ``Node:'', ``Next:'',
+``Menu:'', etc., are keywords in Info output, so are not translated
+there; they are translated in other output formats.
+
+@cindex @file{txi-@var{cc}.tex}
+For @TeX{}, this command causes a file @file{txi-@var{locale}.tex} to
+be read (if it exists). If @code{@@setdocumentlanguage} argument
+contains the optional @samp{_@var{cc}} suffix, this is tried first.
+For example, with @code{@@setdocumentlanguage de_DE}, @TeX{} first
+looks for @file{txi-de_DE.tex}, then @file{txi-de.tex}.
+
+Such a @file{txi-*} file is intended to redefine the various English
+words used in @TeX{} output, such as `Chapter', `See', and so on. We
+are aware that individual words like these cannot always be translated
+in isolation, and that a very different strategy would be required for
+ideographic (among other) scripts. Help in improving Texinfo's
+language support is welcome.
+
+@cindex Hyphenation patterns, language-dependent
+It would also be desirable for this command to also change @TeX{}'s
+ideas of the current hyphenation patterns (via the @TeX{} primitive
+@code{\language}), but this is unfortunately not currently
+implemented.
+
+In September 2006, the W3C Internationalization Activity released a
+new recommendation for specifying languages:
+@url{http://www.rfc-editor.org/rfc/bcp/bcp47.txt}. When Gettext
+supports this new scheme, Texinfo will too.
+
+@cindex ISO 639-2 language codes
+@cindex ISO 3166 country codes
+@cindex Language codes
+@cindex Country codes
+Since the lists of language codes and country codes are updated
+relatively frequently, we don't attempt to list them here. The valid
+language codes are on the official home page for ISO@tie{}639,
+@url{http://www.loc.gov/standards/iso639-2/}. The country codes and
+the official web site for ISO@tie{}3166 can be found via
+@url{http://en.wikipedia.org/wiki/ISO_3166}.
+
+
+@node documentencoding
+@section @code{@@documentencoding @var{enc}}: Set Input Encoding
+
+@findex documentencoding
+@cindex Encoding, declaring
+@cindex Input encoding, declaring
+@cindex Character set, declaring
+@cindex Document input encoding
+
+The @code{@@documentencoding} command declares the input document
+encoding. Write it on a line by itself, with a valid encoding
+specification following, near the beginning of the file but after
+@code{@@setfilename} (@pxref{setfilename,,@code{@@setfilename}}):
+
+@example
+@@documentencoding @var{enc}
+@end example
+
+At present, Texinfo supports only these encodings:
+
+@table @code
+@item US-ASCII
+This has no particular effect, but it's included for completeness.
+
+@itemx UTF-8
+The vast global character encoding, expressed in 8-bit bytes.
+The Texinfo processors have no deep knowledge of Unicode; for the most
+part, they just pass along the input they are given to the output.
+
+@itemx ISO-8859-1
+@itemx ISO-8859-15
+@item ISO-8859-2
+These specify the standard encodings for Western European (the first
+two) and Eastern European languages (the third), respectively. ISO
+8859-15 replaces some little-used characters from 8859-1 (e.g.,
+precomposed fractions) with more commonly needed ones, such as the
+Euro symbol (@euro{}).
+
+A full description of the encodings is beyond our scope here;
+one useful reference is @uref{http://czyborra.com/charsets/iso8859.html}.
+
+@item koi8-r
+This is the commonly used encoding for the Russian language.
+
+@item koi8-u
+This is the commonly used encoding for the Ukrainian language.
+
+@end table
+
+Specifying an encoding @var{enc} has the following effects:
+
+@opindex --enable-encoding
+@cindex Local Variables: section, for encoding
+@cindex Info output, and encoding
+In Info output, unless the option @option{--disable-encoding} is given
+to @command{makeinfo}, a so-called `Local Variables' section
+(@pxref{File Variables,,,emacs,The GNU Emacs Manual}) is output
+including @var{enc}. This allows Info readers to set the encoding
+appropriately.
+
+@example
+Local Variables:
+coding: @var{enc}
+End:
+@end example
+
+Also, in Info and plain text output (barring
+@option{--disable-encoding}), accent constructs and special
+characters, such as @code{@@'e}, are output as the actual 8-bit
+character in the given encoding.
+
+@cindex HTML output, and encodings
+@cindex @code{http-equiv}, and charset specification
+@cindex @code{<meta>} HTML tag, and charset specification
+In HTML output, a @samp{<meta>} tag is output, in the @samp{<head>}
+section of the HTML, that specifies @var{enc}. Web servers and
+browsers cooperate to use this information so the correct encoding is
+used to display the page, if supported by the system.
+
+@example
+<meta http-equiv="Content-Type" content="text/html;
+ charset=@var{enc}">
+@end example
+
+In split HTML output, if @option{--transliterate-file-names} is
+given (@pxref{HTML Xref 8-bit Character Expansion}), the names of HTML
+files are formed by transliteration of the corresponding node names,
+using the specified encoding.
+
+In XML and Docbook output, the given document encoding is written in
+the output file as usual with those formats.
+
+In @TeX{} output, the characters which are supported in the standard
+Computer Modern fonts are output accordingly. (For example, this
+means using constructed accents rather than precomposed glyphs.)
+Using a missing character generates a warning message, as does
+specifying an unimplemented encoding.
+
+
+@node Defining New Texinfo Commands
+@chapter Defining New Texinfo Commands
+@cindex Macros
+@cindex Defining new Texinfo commands
+@cindex New Texinfo commands, defining
+@cindex Texinfo commands, defining new
+@cindex User-defined Texinfo commands
+
+Texinfo provides several ways to define new commands:
+
+@itemize @bullet
+@item
+A Texinfo @dfn{macro} allows you to define a new Texinfo command as any
+sequence of text and/or existing commands (including other macros). The
+macro can have any number of @dfn{parameters}---text you supply each
+time you use the macro.
+
+Incidentally, these macros have nothing to do with the @code{@@defmac}
+command, which is for documenting macros in the subject of the manual
+(@pxref{Def Cmd Template}).
+
+@item
+@samp{@@alias} is a convenient way to define a new name for an existing
+command.
+
+@item
+@samp{@@definfoenclose} allows you to define new commands with
+customized output in the Info file.
+
+@end itemize
+
+@menu
+* Defining Macros:: Defining and undefining new commands.
+* Invoking Macros:: Using a macro, once you've defined it.
+* Macro Details:: Limitations of Texinfo macros.
+* alias:: Command aliases.
+* definfoenclose:: Customized highlighting.
+@end menu
+
+
+@node Defining Macros
+@section Defining Macros
+@cindex Defining macros
+@cindex Macro definitions
+
+@findex macro
+You use the Texinfo @code{@@macro} command to define a macro, like this:
+
+@example
+@@macro @var{macroname}@{@var{param1}, @var{param2}, @dots{}@}
+@var{text} @dots{} \@var{param1}\ @dots{}
+@@end macro
+@end example
+
+The @dfn{parameters} @var{param1}, @var{param2}, @dots{} correspond to
+arguments supplied when the macro is subsequently used in the document
+(described in the next section).
+
+@cindex Macro names, valid characters in
+@cindex Names of macros, valid characters of
+For a macro to work consistently with @TeX{}, @var{macroname} must
+consist entirely of letters: no digits, hyphens, underscores, or other
+special characters. So, we recommend using only letters. However,
+@command{makeinfo} will accept anything except @samp{@{@}_^=};
+@samp{_} and @samp{^} are excluded so that macros can be called in
+@code{@@math} mode without a following space
+(@pxref{math,,@code{@@math}}).
+
+If a macro needs no parameters, you can define it either with an empty
+list (@samp{@@macro foo @{@}}) or with no braces at all (@samp{@@macro
+foo}).
+
+@cindex Body of a macro
+@cindex Mutually recursive macros
+@cindex Recursion, mutual
+The definition or @dfn{body} of the macro can contain most Texinfo
+commands, including previously-defined macros. Not-yet-defined macro
+invocations are not allowed; thus, it is not possible to have mutually
+recursive Texinfo macros. Also, a macro definition that defines another
+macro does not work in @TeX{} due to limitations in the design of
+@code{@@macro}.
+
+@cindex Parameters to macros
+In the macro body, instances of a parameter name surrounded by
+backslashes, as in @samp{\@var{param1}\} in the example above, are
+replaced by the corresponding argument from the macro invocation. You
+can use parameter names any number of times in the body, including zero.
+
+@cindex Backslash in macros
+To get a single @samp{\} in the macro expansion, use @samp{\\}. Any
+other use of @samp{\} in the body yields a warning.
+
+@cindex Spaces in macros
+@cindex Whitespace in macros
+The newlines after the @code{@@macro} line and before the @code{@@end
+macro} line are ignored, that is, not included in the macro body. All
+other whitespace is treated according to the usual Texinfo rules.
+
+@cindex Recursive macro invocations
+@findex rmacro
+To allow a macro to be used recursively, that is, in an argument to a
+call to itself, you must define it with @samp{@@rmacro}, like this:
+
+@example
+@@rmacro rmac @{arg@}
+a\arg\b
+@@end rmacro
+@dots{}
+@@rmac@{1@@rmac@{text@}2@}
+@end example
+
+This produces the output `a1atextb2b'. With @samp{@@macro} instead of
+@samp{@@rmacro}, an error message is given.
+
+@findex unmacro
+@cindex Macros, undefining
+@cindex Undefining macros
+You can undefine a macro @var{foo} with @code{@@unmacro @var{foo}}.
+It is not an error to undefine a macro that is already undefined.
+For example:
+
+@example
+@@unmacro foo
+@end example
+
+
+@node Invoking Macros
+@section Invoking Macros
+@cindex Invoking macros
+@cindex Expanding macros
+@cindex Running macros
+@cindex Macro invocation
+
+After a macro is defined (see the previous section), you can use
+(@dfn{invoke}) it in your document like this:
+
+@example
+@@@var{macroname} @{@var{arg1}, @var{arg2}, @dots{}@}
+@end example
+
+@noindent and the result will be just as if you typed the body of
+@var{macroname} at that spot. For example:
+
+@example
+@@macro foo @{p, q@}
+Together: \p\ & \q\.
+@@end macro
+@@foo@{a, b@}
+@end example
+
+@noindent produces:
+
+@display
+Together: a & b.
+@end display
+
+@cindex Backslash, and macros
+Thus, the arguments and parameters are separated by commas and delimited
+by braces; any whitespace after (but not before) a comma is ignored.
+The braces are required in the invocation (but not the definition), even
+when the macro takes no arguments, consistent with all other Texinfo
+commands. For example:
+
+@example
+@@macro argless @{@}
+No arguments here.
+@@end macro
+@@argless@{@}
+@end example
+
+@noindent produces:
+
+@display
+No arguments here.
+@end display
+
+@cindex Comma, in macro arguments
+Passing strings containing commas as macro arguments requires special
+care, since they should be properly @dfn{quoted} to prevent
+@command{makeinfo} from confusing them with argument separators. To
+manually quote a comma, prepend it with a backslash character, like
+this: @code{\,}. Alternatively, use the @code{@@comma} command
+(@pxref{Inserting a Comma}). However, to facilitate use of macros,
+@command{makeinfo} implements a set of rules called @dfn{automatic
+quoting}:
+
+@enumerate 1
+@item If a macro takes only one argument, all commas in its invocation
+are quoted by default. For example:
+
+@example
+@group
+@@macro FIXME@{text@}
+@@strong@{FIXME: \text\@}
+@@end macro
+
+@@FIXME@{A nice feature, though it can be dangerous.@}
+@end group
+@end example
+
+@noindent
+will produce the following output
+
+@example
+@strong{FIXME: A nice feature, though it can be dangerous.}
+@end example
+
+And indeed, it can. Namely, @command{makeinfo}
+does not control number of arguments passed to one-argument
+macros, so be careful when you invoke them.
+
+@item If a macro invocation includes another command (including a
+recursive invocation of itself), any commas in the nested command
+invocation(s) are quoted by default. For example, in
+
+@example
+@@say@{@@strong@{Yes, I do@}, person one@}
+@end example
+
+the comma after @samp{Yes} is implicitly quoted. Here's another
+example, with a recursive macro:
+
+@example
+@group
+@@rmacro cat@{a,b@}
+\a\\b\
+@@end rmacro
+
+@@cat@{@@cat@{foo, bar@}, baz@}
+@end group
+@end example
+
+@noindent
+will produce the string @samp{foobarbaz}.
+
+@item Otherwise, a comma should be explicitly quoted, as above, to be
+treated as a part of an argument.
+@end enumerate
+
+@cindex Braces, in macro arguments
+Other characters that need to be quoted in macro arguments are
+curly braces and backslash. For example
+
+@example
+@@@var{macname} @{\\\@{\@}\,@}
+@end example
+
+@noindent
+will pass the (almost certainly error-producing) argument
+@samp{\@{@},} to @var{macname}. However, commas in parameters, even
+if escaped by a backslash, might cause trouble in @TeX{}.
+
+If the macro is defined to take a single argument, and is invoked
+without any braces, the entire rest of the line after the macro name is
+supplied as the argument. For example:
+
+@example
+@@macro bar @{p@}
+Twice: \p\ & \p\.
+@@end macro
+@@bar aah
+@end example
+
+@noindent produces:
+
+@c Sorry for cheating, but let's not require macros to process the manual.
+@display
+Twice: aah & aah.
+@end display
+
+If the macro is defined to take a single argument, and is invoked with
+braces, the braced text is passed as the argument, regardless of
+commas. For example:
+
+@example
+@@macro bar @{p@}
+Twice: \p\ & \p\.
+@@end macro
+@@bar@{a,b@}
+@end example
+
+@noindent produces:
+
+@display
+Twice: a,b & a,b.
+@end display
+
+
+@node Macro Details
+@section Macro Details and Caveats
+@cindex Macro details
+@cindex Details of macro usage
+@cindex Caveats for macro usage
+
+Due to unavoidable limitations, certain macro-related constructs cause
+problems with @TeX{}. If you get macro-related errors when producing
+the printed version of a manual, try expanding the macros with
+@command{makeinfo} by invoking @command{texi2dvi} with the @samp{-E}
+option (@pxref{Format with texi2dvi}).
+
+@itemize @bullet
+@item
+As mentioned earlier, macro names must consist entirely of letters.
+
+@item
+It is not advisable to redefine any @TeX{} primitive, plain, or
+Texinfo command name as a macro. Unfortunately this is a very large
+set of names, and the possible resulting errors are unpredictable.
+
+@item
+All macros are expanded inside at least one @TeX{} group. This means
+that @code{@@set} and other such commands have no effect inside a
+macro.
+
+@item
+Commas in macro arguments, even if escaped by a backslash, don't
+always work.
+
+@item
+Macro arguments cannot cross lines.
+
+@item
+It is (usually) best to avoid comments inside macro definitions, but
+see the next item.
+
+@item
+Macros containing a command which must be on a line by itself, such as
+a conditional, cannot be invoked in the middle of a line. In general,
+the interaction of newlines in the macro definitions and invocations
+depends on the precise commands and context. You may be able to work
+around some problems with judicious use of @code{@@c}. Suppose you
+define a macro that is always intended to be used on a line by itself:
+
+@example
+@@macro linemac
+@@cindex whatever
+@@c
+@@end macro
+...
+foo
+@@linemac
+bar
+@end example
+
+Without the @code{@@c}, there will be an unwanted blank line between
+the @samp{@@cindex whatever} and the @samp{bar} (one newline comes
+from the macro definition, one from after the invocation), causing a
+paragraph break.
+
+On the other hand, you wouldn't want the @code{@@c} if the macro was
+sometimes invoked in the middle of a line (the text after the
+invocation would be treated as a comment).
+
+@item
+In general, you can't arbitrarily substitute a macro call for Texinfo
+command arguments, even when the text is the same. It might work with
+some commands, it fails with others. Best not to do it at all. For
+instance, this fails:
+
+@example
+@@macro offmacro
+off
+@@end macro
+@@headings @@offmacro
+@end example
+
+@noindent
+You would expect this to be equivalent to @code{@@headings off}, but
+for @TeX{}nical reasons, it fails with a mysterious error message
+(@code{Paragraph ended before @@headings was complete}).
+
+@item
+Macros cannot define macros in the natural way. To do this, you must
+use conditionals and raw @TeX{}. For example:
+
+@example
+@@ifnottex
+@@macro ctor @{name, arg@}
+@@macro \name\
+something involving \arg\ somehow
+@@end macro
+@@end macro
+@@end ifnottex
+@@tex
+\gdef\ctor#1@{\ctorx#1,@}
+\gdef\ctorx#1,#2,@{\def#1@{something involving #2 somehow@}@}
+@@end tex
+@end example
+
+@end itemize
+
+The @command{makeinfo} implementation also has limitations:
+
+@itemize
+@item
+@code{@@verbatim} and macros do not mix; for instance, you can't start
+a verbatim block inside a macro and end it outside.
+(@xref{verbatim}.) Starting any environment inside a macro and ending
+it outside may or may not work, for that matter.
+
+@item
+Macros that completely define macros are ok, but it's not possible to
+have incorrectly nested macro definitions. That is, @code{@@macro}
+and @code{@@end macro} (likewise for @code{@@rmacro}) must be
+correctly paired. For example, you cannot start a macro definition
+within a macro, and then end the nested definition outside the macro.
+
+@item
+@code{@@rmacro} is a kludge.
+
+@end itemize
+
+One more limitation is common to both implementations: white space is
+ignored at the beginnings of lines.
+
+Future major revisions of Texinfo may ease some of these limitations
+(by introducing a new macro syntax).
+
+
+@node alias
+@section @samp{@@alias @var{new}=@var{existing}}
+@cindex Aliases, command
+@cindex Command aliases
+@findex alias
+
+The @samp{@@alias} command defines a new command to be just like an
+existing one. This is useful for defining additional markup names, thus
+preserving semantic information in the input even though the output
+result may be the same.
+
+Write the @samp{@@alias} command on a line by itself, followed by the
+new command name, an equals sign, and the existing command name.
+Whitespace around the equals sign is ignored. Thus:
+@example
+@@alias @var{new} = @var{existing}
+@end example
+
+For example, if your document contains citations for both books and
+some other media (movies, for example), you might like to define a
+macro @code{@@moviecite@{@}} that does the same thing as an ordinary
+@code{@@cite@{@}} but conveys the extra semantic information as well.
+You'd do this as follows:
+
+@example
+@@alias moviecite = cite
+@end example
+
+Macros do not always have the same effect as aliases, due to vagaries
+of argument parsing. Also, aliases are much simpler to define than
+macros. So the command is not redundant. (It was also heavily used
+in the Jargon File!)
+
+Aliases must not be recursive, directly or indirectly.
+
+It is not advisable to redefine any @TeX{} primitive, plain, or
+Texinfo command name as an alias. Unfortunately this is a very large
+set of names, and the possible resulting errors are completely random.
+
+
+@node definfoenclose
+@section @samp{definfoenclose}: Customized Highlighting
+@cindex Highlighting, customized
+@cindex Customized highlighting
+@findex definfoenclose
+
+A @code{@@definfoenclose} command may be used to define a highlighting
+command for Info, but not for @TeX{}. A command defined using
+@code{@@definfoenclose} marks text by enclosing it in strings that
+precede and follow the text. You can use this to get closer control of
+your Info output.
+
+Presumably, if you define a command with @code{@@definfoenclose} for Info,
+you will create a corresponding command for @TeX{}, either in
+@file{texinfo.tex}, @file{texinfo.cnf}, or within an @samp{@@iftex} in
+your document.
+
+Write a @code{@@definfoenclose} command on a line and follow it with
+three arguments separated by commas. The first argument to
+@code{@@definfoenclose} is the @@-command name (without the @code{@@});
+the second argument is the Info start delimiter string; and the third
+argument is the Info end delimiter string. The latter two arguments
+enclose the highlighted text in the Info file. A delimiter string may
+contain spaces. Neither the start nor end delimiter is required. If
+you do not want a start delimiter but do want an end delimiter, you must
+follow the command name with two commas in a row; otherwise, the Info
+formatting commands will naturally misinterpret the end delimiter string
+you intended as the start delimiter string.
+
+If you do a @code{@@definfoenclose} on the name of a predefined macro
+(such as @code{@@emph}, @code{@@strong}, @code{@@t}, or @code{@@i}), the
+enclosure definition will override the built-in definition.
+
+An enclosure command defined this way takes one argument in braces; this
+is intended for new markup commands (@pxref{Marking Text}).
+
+@findex phoo
+For example, you can write:
+
+@example
+@@definfoenclose phoo,//,\\
+@end example
+
+@noindent
+near the beginning of a Texinfo file to define @code{@@phoo} as an Info
+formatting command that inserts `//' before and `\\' after the argument
+to @code{@@phoo}. You can then write @code{@@phoo@{bar@}} wherever you
+want `//bar\\' highlighted in Info.
+
+Also, for @TeX{} formatting, you could write
+
+@example
+@@iftex
+@@global@@let@@phoo=@@i
+@@end iftex
+@end example
+
+@noindent
+to define @code{@@phoo} as a command that causes @TeX{} to typeset the
+argument to @code{@@phoo} in italics.
+
+Each definition applies to its own formatter: one for @TeX{}, the other
+for @code{texinfo-format-buffer} or @code{texinfo-format-region}. The
+@code{@@definfoenclose} command need not be within @samp{@@ifinfo}, but
+the raw @TeX{} commands do need to be in @samp{@@iftex}.
+
+@findex headword
+Here is another example: write
+
+@example
+@@definfoenclose headword, , :
+@end example
+
+@noindent
+near the beginning of the file, to define @code{@@headword} as an Info
+formatting command that inserts nothing before and a colon after the
+argument to @code{@@headword}.
+
+@samp{@@definfoenclose} definitions must not be recursive, directly or
+indirectly.
+
+
+@node Hardcopy
+@chapter Formatting and Printing Hardcopy
+@cindex Format and print hardcopy
+@cindex Printing hardcopy
+@cindex Hardcopy, printing it
+@cindex Making a printed manual
+@cindex Sorting indices
+@cindex Indices, sorting
+@cindex @TeX{} index sorting
+@pindex texindex
+
+There are three major shell commands for making a printed manual from a
+Texinfo file: one for converting the Texinfo file into a file that will be
+printed, a second for sorting indices, and a third for printing the
+formatted document. When you use the shell commands, you can either
+work directly in the operating system shell or work within a shell
+inside GNU Emacs.
+
+If you are using GNU Emacs, you can use commands provided by Texinfo
+mode instead of shell commands. In addition to the three commands to
+format a file, sort the indices, and print the result, Texinfo mode
+offers key bindings for commands to recenter the output buffer, show the
+print queue, and delete a job from the print queue.
+
+@menu
+* Use TeX:: Use @TeX{} to format for hardcopy.
+* Format with tex/texindex:: How to format with explicit shell commands.
+* Format with texi2dvi:: A simpler way to format.
+* Print with lpr:: How to print.
+* Within Emacs:: How to format and print from an Emacs shell.
+* Texinfo Mode Printing:: How to format and print in Texinfo mode.
+* Compile-Command:: How to print using Emacs's compile command.
+* Requirements Summary:: @TeX{} formatting requirements summary.
+* Preparing for TeX:: What to do before you use @TeX{}.
+* Overfull hboxes:: What are and what to do with overfull hboxes.
+* smallbook:: How to print small format books and manuals.
+* A4 Paper:: How to print on A4 or A5 paper.
+* pagesizes:: How to print with customized page sizes.
+* Cropmarks and Magnification:: How to print marks to indicate the size
+ of pages and how to print scaled up output.
+* PDF Output:: Portable Document Format output.
+* Obtaining TeX:: How to Obtain @TeX{}.
+@end menu
+
+@node Use TeX
+@section Use @TeX{}
+
+The typesetting program called @TeX{} is used for formatting a Texinfo
+file. @TeX{} is a very powerful typesetting program and, if used correctly,
+does an exceptionally good job. (@xref{Obtaining TeX, , How to Obtain
+@TeX{}}, for information on how to obtain @TeX{}.)
+
+The standalone @code{makeinfo} program and Emacs functions
+@code{texinfo-format-region} and @code{texinfo-format-buffer} commands
+read the very same @@-commands in the Texinfo file as does @TeX{}, but
+process them differently to make an Info file (@pxref{Creating an Info
+File}).
+
+
+@node Format with tex/texindex
+@section Format with @code{tex} and @code{texindex}
+@cindex Shell formatting with @code{tex} and @code{texindex}
+@cindex Formatting with @code{tex} and @code{texindex}
+@cindex DVI file
+
+You can format the Texinfo file with the shell command @code{tex}
+followed by the name of the Texinfo file. For example:
+
+@example
+tex foo.texi
+@end example
+
+@noindent @TeX{} will produce a @dfn{DVI file} as well as several auxiliary
+files containing information for indices, cross references, etc. The
+DVI file (for @dfn{DeVice Independent} file) can be printed on virtually
+any device (see the following sections).
+
+@pindex texindex
+The @code{tex} formatting command itself does not sort the indices; it
+writes an output file of unsorted index data. To generate a printed
+index after running the @command{tex} command, you first need a sorted
+index to work from. The @command{texindex} command sorts indices.
+(The source file @file{texindex.c} comes as part of the standard
+Texinfo distribution, among other places.) (@command{texi2dvi} runs
+@command{tex} and @command{texindex} as necessary.)
+
+@cindex Names of index files
+@cindex Index file names
+The @code{tex} formatting command outputs unsorted index files under
+names that obey a standard convention: the name of your main input file
+with any @samp{.tex} (or similar, @pxref{tex invocation,,, web2c,
+Web2c}) extension removed, followed by the two letter names of indices.
+For example, the raw index output files for the input file
+@file{foo.texinfo} would be @file{foo.cp}, @file{foo.vr}, @file{foo.fn},
+@file{foo.tp}, @file{foo.pg} and @file{foo.ky}. Those are exactly the
+arguments to give to @code{texindex}.
+
+@need 1000
+@cindex Wildcards
+@cindex Globbing
+Instead of specifying all the unsorted index file names explicitly, you
+can use @samp{??} as shell wildcards and give the command in this
+form:
+
+@example
+texindex foo.??
+@end example
+
+@noindent
+This command will run @code{texindex} on all the unsorted index files,
+including any that you have defined yourself using @code{@@defindex}
+or @code{@@defcodeindex}. (You may execute @samp{texindex foo.??}
+even if there are similarly named files with two letter extensions
+that are not index files, such as @samp{foo.el}. The @code{texindex}
+command reports but otherwise ignores such files.)
+
+For each file specified, @code{texindex} generates a sorted index file
+whose name is made by appending @samp{s} to the input file name. The
+@code{@@printindex} command looks for a file with that name
+(@pxref{Printing Indices & Menus}). @code{texindex} does not alter the
+raw index output file.
+
+After you have sorted the indices, you need to rerun @code{tex} on the
+Texinfo file. This regenerates the DVI file, this time with
+up-to-date index entries.
+
+Finally, you may need to run @code{tex} one more time, to get the page
+numbers in the cross-references correct.
+
+To summarize, this is a five step process:
+
+@enumerate
+@item
+Run @code{tex} on your Texinfo file. This generates a DVI file (with
+undefined cross-references and no indices), and the raw index files
+(with two letter extensions).
+
+@item
+Run @code{texindex} on the raw index files. This creates the
+corresponding sorted index files (with three letter extensions).
+
+@item
+Run @code{tex} again on your Texinfo file. This regenerates the DVI
+file, this time with indices and defined cross-references, but with page
+numbers for the cross-references from last time, generally incorrect.
+
+@item
+Sort the indices again, with @code{texindex}.
+
+@item
+Run @code{tex} one last time. This time the correct page numbers are
+written for the cross-references.
+@end enumerate
+
+@pindex texi2dvi
+Alternatively, it's a one-step process: run @code{texi2dvi}
+(@pxref{Format with texi2dvi}).
+
+You need not run @code{texindex} each time after you run @code{tex}. If
+you do not, on the next run, the @code{tex} formatting command will use
+whatever sorted index files happen to exist from the previous use of
+@code{texindex}. This is usually ok while you are debugging.
+
+@cindex Auxiliary files, avoiding
+@findex novalidate
+@cindex Pointer validation, suppressing
+@cindex Chapters, formatting one at a time
+Sometimes you may wish to print a document while you know it is
+incomplete, or to print just one chapter of a document. In that case,
+the usual auxiliary files that @TeX{} creates and warnings @TeX{} gives
+when cross-references are not satisfied are just nuisances. You can
+avoid them with the @code{@@novalidate} command, which you must give
+@emph{before} the @code{@@setfilename} command
+(@pxref{setfilename,,@code{@@setfilename}}). Thus, the beginning of
+your file would look approximately like this:
+
+@example
+\input texinfo
+@@novalidate
+@@setfilename myfile.info
+@dots{}
+@end example
+
+@noindent @code{@@novalidate} also turns off validation in
+@code{makeinfo}, just like its @code{--no-validate} option
+(@pxref{Pointer Validation}).
+
+
+@node Format with texi2dvi
+@section Format with @code{texi2dvi}
+@pindex texi2dvi @r{(shell script)}
+
+The @code{texi2dvi} command automatically runs both @TeX{} and
+@command{texindex} as many times as necessary to produce a DVI file
+with sorted indices and all cross-references resolved. It is
+therefore simpler than manually executing the
+@code{tex}---@code{texindex}---@code{tex}---@code{tex} sequence
+described in the previous section.
+
+To run @code{texi2dvi} on an input file @file{foo.texi}, do this (where
+@samp{prompt$ } is your shell prompt):
+
+@example
+prompt$ @kbd{texi2dvi foo.texi}
+@end example
+
+As shown in this example, the input filenames to @code{texi2dvi} must
+include any extension (@samp{.texi}, @samp{.texinfo}, etc.). Under
+MS-DOS and perhaps in other circumstances, you may need to run @samp{sh
+texi2dvi foo.texi} instead of relying on the operating system to invoke
+the shell on the @samp{texi2dvi} script.
+
+@opindex --command @r{(@command{texi2dvi})}
+One useful option to @code{texi2dvi} is @samp{--command=@var{cmd}}.
+This inserts @var{cmd} on a line by itself after the
+@code{@@setfilename} in a temporary copy of the input file before
+running @TeX{}. With this, you can specify different printing
+formats, such as @code{@@smallbook} (@pxref{smallbook}),
+@code{@@afourpaper} (@pxref{A4 Paper}), or @code{@@pagesizes}
+(@pxref{pagesizes}), without actually changing the document source.
+(You can also do this on a site-wide basis with @file{texinfo.cnf};
+@pxref{Preparing for TeX,,Preparing for @TeX{}}).
+
+@opindex --pdf @r{(@command{texi2dvi})}
+With the @option{--pdf} option, @command{texi2dvi} produces PDF output
+instead of DVI (@pxref{PDF Output}), by running @command{pdftex}
+instead of @command{tex}. Alternatively, the command
+@command{texi2pdf} is an abbreviation for running @samp{texi2dvi
+--pdf}. The command @command{pdftexi2dvi} is also supported as a
+convenience to AUC-@TeX{} users, since the latter merely prepends
+@samp{pdf} to DVI producing tools to have PDF producing tools.
+
+@cindex @LaTeX{}, processing with @command{texi2dvi}
+@command{texi2dvi} can also be used to process @LaTeX{} files; simply
+run @samp{texi2dvi filename.ext}.
+
+@opindex --language @r{(@command{texi2dvi})}
+Normally @command{texi2dvi} is able to guess the input file language
+by its contents and file name suffix. If, however, it fails to do so
+you can specify the input language using
+@option{--language=@var{lang}} command line option, where @var{lang}
+is either @samp{latex} or @samp{texinfo}.
+
+@command{texi2dvi} will use @command{etex} (or @command{pdfetex}) if
+they are available; these extended versions of @TeX{} are not
+required, and the DVI (or PDF) output is identical, but they simplify
+the @TeX{} programming in some cases, and provide additional tracing
+information when debugging @file{texinfo.tex}.
+
+@opindex --translate-file @r{(@command{texi2dvi})}
+Several options are provided for handling documents, written in
+character sets other than ASCII. The
+@option{--translate-file=@var{file}} option instructs
+@command{texi2dvi} to translate input into internal @TeX{} character
+set using @dfn{translation file} @var{file} (@pxref{TCX files, TCX
+files, TCX files: Character translations, web2c, Web2c: A @TeX{}
+implementation}).
+
+@opindex --recode @r{(@command{texi2dvi})}
+The options @option{--recode} and @option{--recode-from=@var{enc}}
+allow conversion of an input document before running @TeX{}. The
+@option{--recode} option recodes the document from encoding specified
+by @samp{@@documentencoding} command
+(@pxref{documentencoding,,@code{documentencoding}}) to plain 7-bit
+@samp{texinfo} encoding.
+
+@opindex --recode-from @r{(@command{texi2dvi})}
+The option @option{--recode-from=@var{enc}} recodes the document from
+@var{enc} encoding to the encoding specified by
+@samp{@@documentencoding}. This is useful, for example, if the
+document is written in @samp{UTF-8} encoding and an equivalent 8-bit
+encoding is supported by @command{makeinfo}.
+
+Both @option{--recode} and @option{--recode-from=@var{enc}} use
+@command{recode} utility to perform the conversion. If
+@command{recode} fails to process the file, @command{texi2dvi} prints
+a warning and continues using unmodified input file.
+
+For a list of other options, run @samp{texi2dvi --help}.
+
+
+@node Print with lpr
+@section Shell Print Using @code{lpr -d}
+@pindex lpr @r{(DVI print command)}
+
+The precise command to print a DVI file depends on your system
+installation. Two common ones are @samp{dvips foo.dvi -o} and @samp{lpr
+-d foo.dvi}.
+
+For example, the following commands will (perhaps) suffice to sort the
+indices, format, and print the @cite{Bison Manual}:
+
+@example
+@group
+tex bison.texinfo
+texindex bison.??
+tex bison.texinfo
+lpr -d bison.dvi
+@end group
+@end example
+
+@noindent
+(Remember that the shell commands may be different at your site; but
+these are commonly used versions.)
+
+Using the @code{texi2dvi} shell script (see the previous section):
+
+@example
+@group
+texi2dvi bison.texinfo
+lpr -d bison.dvi
+# or perhaps dvips bison.dvi -o
+@end group
+@end example
+
+@cindex Shell printing, on MS-DOS/MS-Windows
+@cindex Printing DVI files, on MS-DOS/MS-Windows
+@pindex lpr@r{-d, replacements on MS-DOS/MS-Windows}
+@code{lpr} is a standard program on Unix systems, but it is usually
+absent on MS-DOS/MS-Windows. Some network packages come with a
+program named @code{lpr}, but these are usually limited to sending files
+to a print server over the network, and generally don't support the
+@samp{-d} option. If you are unfortunate enough to work on one of these
+systems, you have several alternative ways of printing DVI files:
+
+@itemize @bullet{}
+@item Find and install a Unix-like @code{lpr} program, or its clone.
+If you can do that, you will be able to print DVI files just like
+described above.
+
+@item Send the DVI files to a network printer queue for DVI files.
+Some network printers have special queues for printing DVI files. You
+should be able to set up your network software to send files to that
+queue. In some cases, the version of @code{lpr} which comes with your
+network software will have a special option to send a file to specific
+queues, like this:
+
+@example
+lpr -Qdvi -hprint.server.domain bison.dvi
+@end example
+
+@item Convert the DVI file to a Postscript or PCL file and send it to your
+local printer. @xref{Invoking Dvips,,, dvips, Dvips}, and the man
+pages for @code{dvilj}, for detailed description of these tools. Once
+the DVI file is converted to the format your local printer understands
+directly, just send it to the appropriate port, usually @samp{PRN}.
+@end itemize
+
+
+@node Within Emacs
+@section From an Emacs Shell
+@cindex Print, format from Emacs shell
+@cindex Format, print from Emacs shell
+@cindex Shell, format, print from
+@cindex Emacs shell, format, print from
+@cindex GNU Emacs shell, format, print from
+
+You can give formatting and printing commands from a shell within GNU
+Emacs. To create a shell within Emacs, type @kbd{M-x shell}. In this
+shell, you can format and print the document. @xref{Hardcopy, , Format
+and Print Hardcopy}, for details.
+
+You can switch to and from the shell buffer while @code{tex} is
+running and do other editing. If you are formatting a long document
+on a slow machine, this can be very convenient.@refill
+
+You can also use @code{texi2dvi} from an Emacs shell. For example,
+here is how to use @code{texi2dvi} to format and print @cite{Using and
+Porting GNU CC} from a shell within Emacs:
+
+@example
+@group
+texi2dvi gcc.texinfo
+lpr -d gcc.dvi
+@end group
+@end example
+
+See the next section for more information about formatting
+and printing in Texinfo mode.
+
+
+@node Texinfo Mode Printing
+@section Formatting and Printing in Texinfo Mode
+@cindex Region printing in Texinfo mode
+@cindex Format and print in Texinfo mode
+@cindex Print and format in Texinfo mode
+
+Texinfo mode provides several predefined key commands for @TeX{}
+formatting and printing. These include commands for sorting indices,
+looking at the printer queue, killing the formatting job, and
+recentering the display of the buffer in which the operations
+occur.@refill
+
+@table @kbd
+@item C-c C-t C-b
+@itemx M-x texinfo-tex-buffer
+Run @code{texi2dvi} on the current buffer.@refill
+
+@item C-c C-t C-r
+@itemx M-x texinfo-tex-region
+Run @TeX{} on the current region.@refill
+
+@item C-c C-t C-i
+@itemx M-x texinfo-texindex
+Sort the indices of a Texinfo file formatted with
+@code{texinfo-tex-region}.@refill
+
+@item C-c C-t C-p
+@itemx M-x texinfo-tex-print
+Print a DVI file that was made with @code{texinfo-tex-region} or
+@code{texinfo-tex-buffer}.@refill
+
+@item C-c C-t C-q
+@itemx M-x tex-show-print-queue
+Show the print queue.@refill
+
+@item C-c C-t C-d
+@itemx M-x texinfo-delete-from-print-queue
+Delete a job from the print queue; you will be prompted for the job
+number shown by a preceding @kbd{C-c C-t C-q} command
+(@code{texinfo-show-tex-print-queue}).@refill
+
+@item C-c C-t C-k
+@itemx M-x tex-kill-job
+Kill the currently running @TeX{} job started by either
+@code{texinfo-tex-region} or @code{texinfo-tex-buffer}, or any other
+process running in the Texinfo shell buffer.@refill
+
+@item C-c C-t C-x
+@itemx M-x texinfo-quit-job
+Quit a @TeX{} formatting job that has stopped because of an error by
+sending an @key{x} to it. When you do this, @TeX{} preserves a record
+of what it did in a @file{.log} file.@refill
+
+@item C-c C-t C-l
+@itemx M-x tex-recenter-output-buffer
+Redisplay the shell buffer in which the @TeX{} printing and formatting
+commands are run to show its most recent output.@refill
+@end table
+
+@need 1000
+Thus, the usual sequence of commands for formatting a buffer is as
+follows (with comments to the right):@refill
+
+@example
+@group
+C-c C-t C-b @r{Run @code{texi2dvi} on the buffer.}
+C-c C-t C-p @r{Print the DVI file.}
+C-c C-t C-q @r{Display the printer queue.}
+@end group
+@end example
+
+The Texinfo mode @TeX{} formatting commands start a subshell in Emacs
+called the @file{*tex-shell*}. The @code{texinfo-tex-command},
+@code{texinfo-texindex-command}, and @code{tex-dvi-print-command}
+commands are all run in this shell.
+
+You can watch the commands operate in the @samp{*tex-shell*} buffer,
+and you can switch to and from and use the @samp{*tex-shell*} buffer
+as you would any other shell buffer.@refill
+
+@need 1500
+The formatting and print commands depend on the values of several variables.
+The default values are:@refill
+
+@example
+@group
+ @r{Variable} @r{Default value}
+
+texinfo-texi2dvi-command "texi2dvi"
+texinfo-tex-command "tex"
+texinfo-texindex-command "texindex"
+texinfo-delete-from-print-queue-command "lprm"
+texinfo-tex-trailer "@@bye"
+tex-start-of-header "%**start"
+tex-end-of-header "%**end"
+tex-dvi-print-command "lpr -d"
+tex-show-queue-command "lpq"
+@end group
+@end example
+
+You can change the values of these variables with the @kbd{M-x
+set-variable} command (@pxref{Examining, , Examining and Setting
+Variables, emacs, The GNU Emacs Manual}), or with your @file{.emacs}
+initialization file (@pxref{Init File, , , emacs, The GNU Emacs
+Manual}).
+
+@cindex Customize Emacs package (@t{Development/Docs/Texinfo})
+Beginning with version 20, GNU Emacs offers a user-friendly interface,
+called @dfn{Customize}, for changing values of user-definable variables.
+@xref{Easy Customization, , Easy Customization Interface, emacs, The GNU
+Emacs Manual}, for more details about this. The Texinfo variables can
+be found in the @samp{Development/Docs/Texinfo} group, once you invoke
+the @kbd{M-x customize} command.
+
+
+@node Compile-Command
+@section Using the Local Variables List
+@cindex Local variables
+@cindex Compile command for formatting
+@cindex Format with the compile command
+
+Yet another way to apply the @TeX{} formatting command to a Texinfo file
+is to put that command in a @dfn{local variables list} at the end of the
+Texinfo file. You can then specify the @code{tex} or @code{texi2dvi}
+commands as a @code{compile-command} and have Emacs run it by typing
+@kbd{M-x compile}. This creates a special shell called the
+@file{*compilation*} buffer in which Emacs runs the compile command.
+For example, at the end of the @file{gdb.texinfo} file, after the
+@code{@@bye}, you could put the following:@refill
+
+@example
+@group
+Local Variables:
+compile-command: "texi2dvi gdb.texinfo"
+End:
+@end group
+@end example
+
+@noindent
+This technique is most often used by programmers who also compile programs
+this way; see @ref{Compilation, , , emacs, The GNU Emacs Manual}.@refill
+
+
+@node Requirements Summary
+@section @TeX{} Formatting Requirements Summary
+@cindex Requirements for formatting
+@cindex Minimal requirements for formatting
+@cindex Formatting requirements
+
+Every Texinfo file that is to be input to @TeX{} must begin with a
+@code{\input} command and must contain an @code{@@setfilename} command:
+
+@example
+\input texinfo
+@@setfilename @var{arg-not-used-by-@TeX{}}
+@end example
+
+@noindent
+The first command instructs @TeX{} to load the macros it needs to
+process a Texinfo file and the second command opens auxiliary files.
+
+Every Texinfo file must end with a line that terminates @TeX{}'s
+processing and forces out unfinished pages:
+
+@example
+@@bye
+@end example
+
+Strictly speaking, these lines are all a Texinfo file needs to be
+processed successfully by @TeX{}.
+
+Usually, however, the beginning includes an @code{@@settitle} command to
+define the title of the printed manual, an @code{@@setchapternewpage}
+command, a title page, a copyright page, and permissions. Besides an
+@code{@@bye}, the end of a file usually includes indices and a table of
+contents. (And of course most manuals contain a body of text as well.)
+
+For more information, see:
+
+@itemize @bullet
+@item @ref{settitle, , @code{@@settitle}}.
+@item @ref{setchapternewpage, , @code{@@setchapternewpage}}.
+@item @ref{Headings, ,Page Headings}.
+@item @ref{Titlepage & Copyright Page}.
+@item @ref{Printing Indices & Menus}.
+@item @ref{Contents}.
+@end itemize
+
+
+@node Preparing for TeX
+@section Preparing for @TeX{}
+@cindex Preparing for @TeX{}
+@cindex @TeX{} input initialization
+@cindex @b{.profile} initialization file
+@cindex @b{.cshrc} initialization file
+@cindex Initialization file for @TeX{} input
+
+@TeX{} needs to know where to find the @file{texinfo.tex} file that the
+@samp{\input texinfo} command on the first line reads. The
+@file{texinfo.tex} file tells @TeX{} how to handle @@-commands; it is
+included in all standard GNU distributions. The latest version is
+always available from the Texinfo source repository:
+@smalldisplay
+@uref{http://savannah.gnu.org/cgi-bin/viewcvs/texinfo/texinfo/doc/texinfo.tex?rev=HEAD}
+@end smalldisplay
+
+@pindex texinfo.tex@r{, installing}
+
+Usually, the installer has put the @file{texinfo.tex} file in the
+default directory that contains @TeX{} macros when GNU Texinfo, Emacs or
+other GNU software is installed. In this case, @TeX{} will find the
+file and you do not need to do anything special. If this has not been
+done, you can put @file{texinfo.tex} in the current directory when you
+run @TeX{}, and @TeX{} will find it there.
+
+@pindex epsf.tex@r{, installing}
+Also, you should install @file{epsf.tex}, if it is not already installed
+from another distribution. More details are at the end of the description
+of the @code{@@image} command (@pxref{Images}).
+
+@cindex European Computer Modern fonts, installing
+@cindex EC fonts, installing
+@cindex CM-Super fonts, installing
+To be able to use quotation marks other than those used in English
+you'll need to install European Computer Modern fonts and optionally
+CM-Super fonts, unless they are already installed (@pxref{Inserting
+Quotation Marks}).
+
+@pindex feymr10@r{, installing}
+@cindex Euro font, installing
+If you intend to use the @code{@@euro} command, you should install the
+Euro font, if it is not already installed. @xref{euro}.
+
+@pindex texinfo.cnf @r{installation}
+@cindex Customizing of @TeX{} for Texinfo
+@cindex Site-wide Texinfo configuration file
+Optionally, you may create an additional @file{texinfo.cnf}, and install
+it as well. This file is read by @TeX{} when the @code{@@setfilename}
+command is executed (@pxref{setfilename,, @code{@@setfilename}}). You can put any
+commands you like there, according to local site-wide conventions. They
+will be read by @TeX{} when processing any Texinfo document. For
+example, if @file{texinfo.cnf} contains the line @samp{@@afourpaper}
+(@pxref{A4 Paper}), then all Texinfo documents will be processed with
+that page size in effect. If you have nothing to put in
+@file{texinfo.cnf}, you do not need to create it.
+
+@cindex Environment variable @code{TEXINPUTS}
+@vindex TEXINPUTS
+If neither of the above locations for these system files suffice for
+you, you can specify the directories explicitly. For
+@file{texinfo.tex}, you can do this by writing the complete path for the
+file after the @code{\input} command. Another way, that works for both
+@file{texinfo.tex} and @file{texinfo.cnf} (and any other file @TeX{}
+might read), is to set the @code{TEXINPUTS} environment variable in your
+@file{.cshrc} or @file{.profile} file.
+
+Which you use of @file{.cshrc} or @file{.profile} depends on
+whether you use a Bourne shell-compatible (@code{sh}, @code{bash},
+@code{ksh}, @dots{}) or C shell-compatible (@code{csh}, @code{tcsh})
+command interpreter. The latter read the @file{.cshrc} file for
+initialization information, and the former read @file{.profile}.
+
+In a @file{.cshrc} file, you could use the following @code{csh} command
+sequence:
+
+@example
+setenv TEXINPUTS .:/home/me/mylib:
+@end example
+
+@need 1000
+In a @file{.profile} file, you could use the following @code{sh} command
+sequence:
+
+@example
+@group
+TEXINPUTS=.:/home/me/mylib:
+export TEXINPUTS
+@end group
+@end example
+
+On MS-DOS/MS-Windows, you would say it like this@footnote{Note the use
+of the @samp{;} character, instead of @samp{:}, as directory separator
+on these systems.}:
+
+@example
+@group
+set TEXINPUTS=.;d:/home/me/mylib;c:
+@end group
+@end example
+
+@noindent
+It is customary for DOS/Windows users to put such commands in the
+@file{autoexec.bat} file, or in the Windows Registry.
+
+@noindent
+These settings would cause @TeX{} to look for @file{\input} file first
+in the current directory, indicated by the @samp{.}, then in a
+hypothetical user @samp{me}'s @file{mylib} directory, and finally in
+the system directories. (A leading, trailing, or doubled @samp{:}
+indicates searching the system directories at that point.)
+
+@cindex Dumping a .fmt file
+@cindex Format file, dumping
+Finally, you may wish to dump a @file{.fmt} file (@pxref{Memory dumps,,,
+web2c, Web2c}) so that @TeX{} can load Texinfo faster. (The
+disadvantage is that then updating @file{texinfo.tex} requires
+redumping.) You can do this by running this command, assuming
+@file{epsf.tex} is findable by @TeX{}:
+
+@example
+initex texinfo @@dump
+@end example
+
+@noindent
+(@code{dump} is a @TeX{} primitive.) Then, move @file{texinfo.fmt} to
+wherever your @code{.fmt} files are found; typically, this will be in the
+subdirectory @file{web2c} of your @TeX{} installation.
+
+
+@node Overfull hboxes
+@section Overfull ``hboxes''
+@cindex Overfull @samp{hboxes}
+@cindex @samp{hboxes}, overfull
+@cindex Final output
+
+@TeX{} is sometimes unable to typeset a line without extending it into
+the right margin. This can occur when @TeX{} comes upon what it
+interprets as a long word that it cannot hyphenate, such as an
+electronic mail network address or a very long title. When this
+happens, @TeX{} prints an error message like this:
+
+@example
+Overfull @@hbox (20.76302pt too wide)
+@end example
+
+@findex hbox
+@noindent
+(In @TeX{}, lines are in ``horizontal boxes'', hence the term, ``hbox''.
+@samp{@@hbox} is a @TeX{} primitive not needed in the Texinfo language.)
+
+@TeX{} also provides the line number in the Texinfo source file and
+the text of the offending line, which is marked at all the places that
+@TeX{} considered hyphenation.
+@xref{Debugging with TeX, , Catching Errors with @TeX{} Formatting},
+for more information about typesetting errors.
+
+If the Texinfo file has an overfull hbox, you can rewrite the sentence
+so the overfull hbox does not occur, or you can decide to leave it. A
+small excursion into the right margin often does not matter and may not
+even be noticeable.
+
+If you have many overfull boxes and/or an antipathy to rewriting, you
+can coerce @TeX{} into greatly increasing the allowable interword
+spacing, thus (if you're lucky) avoiding many of the bad line breaks,
+like this:
+
+@findex \emergencystretch
+@example
+@@tex
+\global\emergencystretch = .9\hsize
+@@end tex
+@end example
+
+@noindent
+(You should adjust the fraction as needed.) This huge value for
+@code{\emergencystretch} cannot be the default, since then the typeset
+output would generally be of noticeably lower quality; the default
+is @samp{.15\hsize}. @code{\hsize} is the @TeX{} dimension
+containing the current line width.
+
+@cindex Black rectangle in hardcopy
+@cindex Rectangle, black in hardcopy
+@cindex Box, ugly black in hardcopy
+@cindex Ugly black rectangles in hardcopy
+For what overfull boxes you have, however, @TeX{} will print a large,
+ugly, black rectangle beside the line that contains the overfull hbox
+unless told otherwise. This is so you will notice the location of the
+problem if you are correcting a draft.
+
+@findex finalout
+To prevent such a monstrosity from marring your final printout, write
+the following in the beginning of the Texinfo file on a line of its own,
+before the @code{@@titlepage} command:
+
+@example
+@@finalout
+@end example
+
+
+@node smallbook
+@section Printing ``Small'' Books
+@findex smallbook
+@cindex Small book size
+@cindex Book, printing small
+@cindex Page sizes for books
+@cindex Size of printed book
+
+By default, @TeX{} typesets pages for printing in an 8.5 by 11 inch
+format. However, you can direct @TeX{} to typeset a document in a 7 by
+9.25 inch format that is suitable for bound books by inserting the
+following command on a line by itself at the beginning of the Texinfo
+file, before the title page:@refill
+
+@example
+@@smallbook
+@end example
+
+@noindent
+(Since many books are about 7 by 9.25 inches, this command might better
+have been called the @code{@@regularbooksize} command, but it came to be
+called the @code{@@smallbook} command by comparison to the 8.5 by 11
+inch format.)
+
+If you write the @code{@@smallbook} command between the
+start-of-header and end-of-header lines, the Texinfo mode @TeX{}
+region formatting command, @code{texinfo-tex-region}, will format the
+region in ``small'' book size (@pxref{Start of Header}).@refill
+
+@xref{small}, for information about
+commands that make it easier to produce examples for a smaller manual.
+
+@xref{Format with texi2dvi}, and @ref{Preparing for TeX,,Preparing for
+@TeX{}}, for other ways to format with @code{@@smallbook} that do not
+require changing the source file.
+
+
+@node A4 Paper
+@section Printing on A4 Paper
+@cindex A4 paper, printing on
+@cindex A5 paper, printing on
+@cindex Paper size, A4
+@cindex European A4 paper
+@findex afourpaper
+
+You can tell @TeX{} to format a document for printing on European size
+A4 paper (or A5) with the @code{@@afourpaper} (or @code{@@afivepaper})
+command. Write the command on a line by itself near the beginning of
+the Texinfo file, before the title page. For example, this is how you
+would write the header for this manual:
+
+@example
+@group
+\input texinfo @@c -*-texinfo-*-
+@@c %**start of header
+@@setfilename texinfo
+@@settitle Texinfo
+@@afourpaper
+@@c %**end of header
+@end group
+@end example
+
+@xref{Format with texi2dvi}, and @ref{Preparing for TeX,,Preparing for
+@TeX{}}, for other ways to format for different paper sizes that do not
+require changing the source file.
+
+@findex afourlatex
+@findex afourwide
+You may or may not prefer the formatting that results from the command
+@code{@@afourlatex}. There's also @code{@@afourwide} for A4 paper in
+wide format.
+
+@node pagesizes
+@section @code{@@pagesizes} [@var{width}][, @var{height}]: Custom Page Sizes
+@findex pagesizes
+@cindex Custom page sizes
+@cindex Page sizes, customized
+@cindex Text width and height
+@cindex Width of text area
+@cindex Height of text area
+@cindex Depth of text area
+
+You can explicitly specify the height and (optionally) width of the main
+text area on the page with the @code{@@pagesizes} command. Write this
+on a line by itself near the beginning of the Texinfo file, before the
+title page. The height comes first, then the width if desired,
+separated by a comma. Examples:
+
+@example
+@@pagesizes 200mm,150mm @c for b5 paper
+@end example
+@noindent and
+@example
+@@pagesizes 11.5in @c for legal paper
+@end example
+
+@cindex B5 paper, printing on
+@cindex Legal paper, printing on
+This would be reasonable for printing on B5-size paper. To emphasize,
+this command specifies the size of the @emph{text area}, not the size of
+the paper (which is 250@dmn{mm} by 177@dmn{mm} for B5, 14@dmn{in} by
+8.5@dmn{in} for legal).
+
+@cindex Margins on page, not controllable
+To make more elaborate changes, such as changing any of the page
+margins, you must define a new command in @file{texinfo.tex} (or
+@file{texinfo.cnf}, @pxref{Preparing for TeX,,Preparing for @TeX{}}).
+
+@xref{Format with texi2dvi}, and @ref{Preparing for TeX,,Preparing for
+@TeX{}}, for other ways to specify @code{@@pagesizes} that do not
+require changing the source file.
+
+@code{@@pagesizes} is ignored by @code{makeinfo}.
+
+
+@node Cropmarks and Magnification
+@section Cropmarks and Magnification
+@findex cropmarks
+@cindex Cropmarks for printing
+@cindex Printing cropmarks
+You can (attempt to) direct @TeX{} to print cropmarks at the corners of
+pages with the @code{@@cropmarks} command. Write the @code{@@cropmarks}
+command on a line by itself between @code{@@iftex} and @code{@@end
+iftex} lines near the beginning of the Texinfo file, before the title
+page, like this:@refill
+
+@example
+@group
+@@iftex
+@@cropmarks
+@@end iftex
+@end group
+@end example
+
+This command is mainly for printers that typeset several pages on one
+sheet of film; but you can attempt to use it to mark the corners of a
+book set to 7 by 9.25 inches with the @code{@@smallbook} command.
+(Printers will not produce cropmarks for regular sized output that is
+printed on regular sized paper.) Since different printing machines work
+in different ways, you should explore the use of this command with a
+spirit of adventure. You may have to redefine the command in
+@file{texinfo.tex}.
+
+@findex \mag @r{(raw @TeX{} magnification)}
+@cindex Magnified printing
+@cindex Larger or smaller pages
+You can attempt to direct @TeX{} to typeset pages larger or smaller than
+usual with the @code{\mag} @TeX{} command. Everything that is typeset
+is scaled proportionally larger or smaller. (@code{\mag} stands for
+``magnification''.) This is @emph{not} a Texinfo @@-command, but is a
+plain @TeX{} command that is prefixed with a backslash. You have to
+write this command between @code{@@tex} and @code{@@end tex}
+(@pxref{Raw Formatter Commands}).
+
+Follow the @code{\mag} command with an @samp{=} and then a number that
+is 1000 times the magnification you desire. For example, to print pages
+at 1.2 normal size, write the following near the beginning of the
+Texinfo file, before the title page:
+
+@example
+@group
+@@tex
+\mag=1200
+@@end tex
+@end group
+@end example
+
+With some printing technologies, you can print normal-sized copies that
+look better than usual by giving a larger-than-normal master to your
+print shop. They do the reduction, thus effectively increasing the
+resolution.
+
+Depending on your system, DVI files prepared with a
+nonstandard-@code{\mag} may not print or may print only with certain
+magnifications. Be prepared to experiment.
+
+
+@node PDF Output
+@section PDF Output
+@cindex PDF output
+
+@pindex pdftex
+The simplest way to generate PDF output from Texinfo source is to run
+the convenience script @command{texi2pdf} (or @command{pdftexi2dvi});
+this simply executes the @command{texi2dvi} script with the
+@option{--pdf} option (@pxref{Format with texi2dvi}). If for some
+reason you want to process the document by hand, simply run the
+@command{pdftex} program instead of plain @command{tex}. That is, run
+@samp{pdftex foo.texi} instead of @samp{tex foo.texi}.
+
+@dfn{PDF} stands for `Portable Document Format'. It was invented by
+Adobe Systems some years ago for document interchange, based on their
+PostScript language. Related links:
+
+@itemize
+@item
+GNU GV, a @uref{http://www.foolabs.com/xpdf/, Ghostscript-based PDF
+reader}. (It can also preview PostScript documents.)
+
+@item
+A freely available standalone @uref{http://www.foolabs.com/xpdf/,
+PDF reader} for the X window system.
+
+@item
+@uref{http://partners.adobe.com/asn/acrobat/sdk/public/docs/, PDF definition}.
+
+@end itemize
+
+At present, Texinfo does not provide
+@samp{@@ifpdf} or @samp{@@pdf} commands as for the other output
+formats, since PDF documents contain many internal links that would be
+hard or impossible to get right at the Texinfo source level.
+
+PDF files require special software to be displayed, unlike the plain
+ASCII formats (Info, HTML) that Texinfo supports. They also tend to
+be much larger than the DVI files output by @TeX{} by default.
+Nevertheless, a PDF file does define an actual typeset document in a
+self-contained file, so it has its place.
+
+
+@node Obtaining TeX
+@section How to Obtain @TeX{}
+@cindex Obtaining @TeX{}
+@cindex @TeX{}, how to obtain
+
+@c !!! Here is information about obtaining TeX. Update it whenever.
+@c !!! Also consider updating TeX.README on ftp.gnu.org.
+@c Updated by RJC on 1 March 1995, conversation with MacKay.
+@c Updated by kb@cs.umb.edu on 29 July 1996.
+@c Updated by kb@cs.umb.edu on 25 April 1997.
+@c Updated by kb@cs.umb.edu on 27 February 1998.
+@TeX{} is freely redistributable. You can obtain @TeX{} for Unix
+systems via anonymous ftp or on physical media. The core material
+consists of the Web2c @TeX{} distribution (@uref{http://tug.org/web2c}).
+
+Instructions for retrieval by anonymous ftp and information on other
+available distributions:
+@uref{http://tug.org/unixtex.ftp}.
+
+The Free Software Foundation provides a core distribution on its Source
+Code CD-ROM suitable for printing Texinfo manuals. To order it, contact:
+
+@display
+@group
+Free Software Foundation, Inc.
+51 Franklin St, Fifth Floor
+Boston, MA @ @ 02110-1301
+USA
+Telephone: @w{+1-617-542-5942}
+Fax: (including Japan) @w{+1-617-542-2652}
+Free Dial Fax (in Japan):
+@w{ } @w{ } @w{ } 0031-13-2473 (KDD)
+@w{ } @w{ } @w{ } 0066-3382-0158 (IDC)
+Electronic mail: @code{gnu@@gnu.org}
+@end group
+@end display
+
+Many other @TeX{} distributions are available; see
+@uref{http://tug.org/}.
+
+
+@node Creating and Installing Info Files
+@chapter Creating and Installing Info Files
+
+This chapter describes how to create and install Info files. @xref{Info
+Files}, for general information about the file format itself.
+
+@menu
+* Creating an Info File::
+* Installing an Info File::
+@end menu
+
+
+@node Creating an Info File
+@section Creating an Info File
+@cindex Creating an Info file
+@cindex Info, creating an online file
+@cindex Formatting a file for Info
+
+@code{makeinfo} is a program that converts a Texinfo file into an Info
+file, HTML file, or plain text. @code{texinfo-format-region} and
+@code{texinfo-format-buffer} are GNU Emacs functions that convert
+Texinfo to Info.
+
+For information on installing the Info file in the Info system,
+@pxref{Installing an Info File}.
+
+@menu
+* makeinfo advantages:: @code{makeinfo} provides better error checking.
+* Invoking makeinfo:: How to run @code{makeinfo} from a shell.
+* makeinfo options:: Specify fill-column and other options.
+* Pointer Validation:: How to check that pointers point somewhere.
+* makeinfo in Emacs:: How to run @code{makeinfo} from Emacs.
+* texinfo-format commands:: Two Info formatting commands written
+ in Emacs Lisp are an alternative
+ to @code{makeinfo}.
+* Batch Formatting:: How to format for Info in Emacs Batch mode.
+* Tag and Split Files:: How tagged and split files help Info
+ to run better.
+@end menu
+
+
+@node makeinfo advantages
+@subsection @code{makeinfo} Preferred
+
+The @code{makeinfo} utility creates an Info file from a Texinfo source
+file more quickly than either of the Emacs formatting commands and
+provides better error messages. We recommend it. @code{makeinfo} is a
+C program that is independent of Emacs. You do not need to run Emacs to
+use @code{makeinfo}, which means you can use @code{makeinfo} on machines
+that are too small to run Emacs. You can run @code{makeinfo} in any one
+of three ways: from an operating system shell, from a shell inside
+Emacs, or by typing the @kbd{C-c C-m C-r} or the @kbd{C-c C-m C-b}
+command in Texinfo mode in Emacs.
+
+The @code{texinfo-format-region} and the @code{texinfo-format-buffer}
+commands are useful if you cannot run @code{makeinfo}. Also, in some
+circumstances, they format short regions or buffers more quickly than
+@code{makeinfo}.
+
+
+@node Invoking makeinfo
+@subsection Running @code{makeinfo} from a Shell
+@pindex makeinfo
+
+To create an Info file from a Texinfo file, invoke @command{makeinfo}
+followed by the name of the Texinfo file. Thus, to create the Info
+file for Bison, type the following to the shell:
+
+@example
+makeinfo bison.texinfo
+@end example
+
+(You can run a shell inside Emacs by typing @kbd{M-x shell}.)
+
+@command{makeinfo} has many options to control its actions and output;
+see the next section.
+
+You can give @command{makeinfo} more than one input file name; each is
+processed in turn. If an input file name is @samp{-}, or no input
+file names are given at all, standard input is read.
+
+
+@node makeinfo options
+@subsection Options for @code{makeinfo}
+@cindex @code{makeinfo} options
+@cindex Options for @code{makeinfo}
+
+The @command{makeinfo} program accepts many options. Perhaps the most
+commonly needed are those that change the output format. By default,
+@command{makeinfo} outputs Info files.
+
+Each command line option is a word preceded by @samp{--} or a letter
+preceded by @samp{-}. You can use abbreviations for the long option
+names as long as they are unique.
+
+For example, you could use the following shell command to create an Info
+file for @file{bison.texinfo} in which each line is filled to only 68
+columns:
+
+@example
+makeinfo --fill-column=68 bison.texinfo
+@end example
+
+You can write two or more options in sequence, like this:@refill
+
+@example
+makeinfo --no-split --fill-column=70 @dots{}
+@end example
+
+@noindent
+This would keep the Info file together as one possibly very long
+file and would also set the fill column to 70.
+
+The options are:
+
+@table @code
+
+@item -D @var{var}
+@opindex -D @var{var}
+Cause the variable @var{var} to be defined. This is equivalent to
+@code{@@set @var{var}} in the Texinfo file (@pxref{set clear value}).
+
+@item --commands-in-node-names
+@opindex --commands-in-node-names
+Allow @code{@@}-commands in node names. This is not recommended, as it
+can probably never be implemented in @TeX{}. It also makes
+@code{makeinfo} much slower. Also, this option is ignored when
+@samp{--no-validate} is used. @xref{Pointer Validation}, for more
+details.
+
+@item --css-include=@var{file}
+@opindex --css-include
+Include the contents of @var{file}, which should contain cascading
+style sheets specifications, in the @samp{<style>} block of the HTML
+output. @xref{HTML CSS}. If @var{file} is @samp{-}, read standard
+input.
+
+@item --css-ref=@var{url}
+@opindex --css-ref
+In HTML mode, add a @samp{<link>} tag to the HTML output which
+references a cascading style sheet at @var{url}. This allows using
+standalone style sheets.
+
+@item --disable-encoding
+@itemx --enable-encoding
+@opindex --disable-encoding
+@opindex --enable-encoding
+By default, or with @option{--enable-encoding}, output accented and
+special characters in Info or plain text output based on
+@samp{@@documentencoding}. With @option{--disable-encoding}, 7-bit
+ASCII transliterations are output.
+@xref{documentencoding,,@code{documentencoding}}, and @ref{Inserting
+Accents}.
+
+@item --docbook
+@opindex --docbook
+Generate Docbook output rather than Info.
+
+@item --document-language=@var{lang}
+@opindex --document-language
+@vindex LANG
+Use @var{lang} to translate Texinfo keywords which end up in the
+output document. The default is the locale specified by the
+@code{@@documentlanguage} command if there is one
+(@pxref{documentlanguage}).
+
+@item --error-limit=@var{limit}
+@itemx -e @var{limit}
+@opindex --error-limit=@var{limit}
+@opindex -e @var{limit}
+Set the maximum number of errors that @code{makeinfo} will report
+before exiting (on the assumption that continuing would be useless);
+default 100.
+
+@item --fill-column=@var{width}
+@itemx -f @var{width}
+@opindex --fill-column=@var{width}
+@opindex -f @var{width}
+Specify the maximum number of columns in a line; this is the right-hand
+edge of a line. Paragraphs that are filled will be filled to this
+width. (Filling is the process of breaking up and connecting lines so
+that lines are the same length as or shorter than the number specified
+as the fill column. Lines are broken between words.) The default value
+is 72. Ignored with @samp{--html}.
+
+@item --footnote-style=@var{style}
+@itemx -s @var{style}
+@opindex --footnote-style=@var{style}
+@opindex -s @var{style}
+Set the footnote style to @var{style}, either @samp{end} for the end
+node style (the default) or @samp{separate} for the separate node style.
+The value set by this option overrides the value set in a Texinfo file
+by an @code{@@footnotestyle} command (@pxref{Footnotes}). When the
+footnote style is @samp{separate}, @code{makeinfo} makes a new node
+containing the footnotes found in the current node. When the footnote
+style is @samp{end}, @code{makeinfo} places the footnote references at
+the end of the current node. Ignored with @samp{--html}.
+
+@item --force
+@itemx -F
+@opindex --force
+@opindex -F
+Ordinarily, if the input file has errors, the output files are not
+created. With this option, they are preserved.
+
+@item --help
+@itemx -h
+@opindex --help
+@opindex -h
+Print a usage message listing all available options, then exit successfully.
+
+@item --html
+@opindex --html
+Generate HTML output rather than Info. @xref{Generating HTML}. By
+default, the HTML output is split into one output file per Texinfo
+source node, and the split output is written into a subdirectory with
+the name of the top-level info file.
+
+@item -I @var{dir}
+@opindex -I @var{dir}
+Append @var{dir} to the directory search list for finding files that
+are included using the @code{@@include} command. By default,
+@code{makeinfo} searches only the current directory. If @var{dir} is
+not given, the current directory @file{.} is appended. Note that
+@var{dir} can actually be a list of several directories separated by the
+usual path separator character (@samp{:} on Unix, @samp{;} on
+MS-DOS/MS-Windows).
+
+@item --ifdocbook
+@opindex --ifdocbook
+@itemx --ifhtml
+@opindex --ifhtml
+@itemx --ifinfo
+@opindex --ifinfo
+@itemx --ifplaintext
+@opindex --ifplaintext
+@itemx --iftex
+@opindex --iftex
+@itemx --ifxml
+@opindex --ifxml
+For the specified format, process @samp{@@if@var{format}} and
+@samp{@@@var{format}} commands even if not generating the given output
+format. For instance, if @option{--iftex} is specified, then
+@samp{@@iftex} and @samp{@@tex} blocks will be read.
+
+@item --internal-links=@var{file}
+@opindex --internal-links=@var{file}
+In HTML mode, output a tab separated file containing three columns:
+the internal link to an indexed item or item in the table of contents,
+the name of the index (or "toc") in which it occurs, and the term
+which was indexed or entered.
+
+@item --macro-expand=@var{file}
+@itemx -E @var{file}
+@opindex --macro-expand=@var{file}
+@opindex -E @var{file}
+Output the Texinfo source with all the macros expanded to the named
+file. Normally, the results of macro expansion are used internally by
+@code{makeinfo} and then discarded. This option is used by
+@command{texi2dvi}.
+
+@item --no-headers
+@item --plaintext
+@opindex --no-headers
+@opindex --plaintext
+@cindex Plain text output
+@cindex ASCII text output
+@cindex Generating plain text files
+@cindex @file{INSTALL} file, generating
+@cindex Node separators, omitting
+@cindex Menus, omitting
+Do not include menus or node separator lines in the output, and
+implicitly @option{--enable-encoding} (see above). This results in a
+simple plain text file that you can (for example) send in email
+without complications, or include in a distribution (as in an
+@file{INSTALL} file).
+
+@cindex Navigation links, omitting
+For HTML output, likewise omit menus. And if @samp{--no-split} is also
+specified, do not include a navigation links at the top of each node
+(these are never included in the default case of split output).
+@xref{Generating HTML}.
+
+In both cases, ignore @code{@@setfilename} and write to standard
+output by default---can be overridden with @option{-o}.
+
+@item --no-ifdocbook
+@opindex --no-ifdocbook
+@itemx --no-ifhtml
+@opindex --no-ifhtml
+@itemx --no-ifinfo
+@opindex --no-ifinfo
+@itemx --no-ifplaintext
+@opindex --no-ifplaintext
+@itemx --no-iftex
+@opindex --no-iftex
+@itemx --no-ifxml
+@opindex --no-ifxml
+Do not process @samp{@@if@var{format}} and @samp{@@@var{format}}
+commands, and do process @samp{@@ifnot@var{format}}, even if
+generating the given format. For instance, if @option{--no-ifhtml} is
+specified, then @samp{@@ifhtml} and @samp{@@html} blocks will not be
+read, and @samp{@@ifnothtml} blocks will be.
+
+@item --no-number-footnotes
+@opindex --no-number-footnotes
+Suppress automatic footnote numbering. By default, @code{makeinfo}
+numbers each footnote sequentially in a single node, resetting the
+current footnote number to 1 at the start of each node.
+
+@item --no-number-sections
+@opindex --no-number-sections
+Do not output chapter, section, and appendix numbers.
+You need to specify this if your manual is not hierarchically-structured.
+
+@item --no-split
+@opindex --no-split
+@cindex Splitting of output files
+@cindex Output file splitting
+Suppress the splitting stage of @code{makeinfo}. By default, large
+output files (where the size is greater than 70k bytes) are split into
+smaller subfiles. For Info output, each one is approximately 50k bytes.
+For HTML output, each file contains one node (@pxref{Generating HTML}).
+
+@item --no-pointer-validate
+@itemx --no-validate
+@opindex --no-pointer-validate
+@opindex --no-validate
+@cindex Pointer validation, suppressing
+Suppress the pointer-validation phase of @code{makeinfo}---a dangerous
+thing to do. This can also be done with the @code{@@novalidate}
+command (@pxref{Use TeX,,Use @TeX{}}). Normally, after a Texinfo file
+is processed, some consistency checks are made to ensure that cross
+references can be resolved, etc. @xref{Pointer Validation}.
+
+@item --no-warn
+@opindex --no-warn
+Suppress warning messages (but @emph{not} error messages).
+
+@item --number-sections
+@opindex --number-sections
+Output chapter, section, and appendix numbers as in printed manuals.
+This is the default. It works only with hierarchically-structured
+manuals.
+
+@item --output=@var{file}
+@itemx -o @var{file}
+@opindex --output=@var{file}
+@opindex -o @var{file}
+Specify that the output should be directed to @var{file} and not to the
+file name specified in the @code{@@setfilename} command found in the
+Texinfo source (@pxref{setfilename}). If @var{file} is @samp{-}, output
+goes to standard output and @samp{--no-split} is implied. For split
+HTML output, @var{file} is the name for the directory into which all
+HTML nodes are written (@pxref{Generating HTML}).
+
+@item -P @var{dir}
+@opindex -P @var{dir}
+Prepend @var{dir} to the directory search list for @code{@@include}.
+If @var{dir} is not given, the current directory @file{.} is prepended.
+See @samp{-I} for more details.
+
+@item --paragraph-indent=@var{indent}
+@itemx -p @var{indent}
+@opindex --paragraph-indent=@var{indent}
+@opindex -p @var{indent}
+Set the paragraph indentation style to @var{indent}. The value set by
+this option overrides the value set in a Texinfo file by an
+@code{@@paragraphindent} command (@pxref{paragraphindent}). The value
+of @var{indent} is interpreted as follows:
+
+@table @asis
+@item @samp{asis}
+Preserve any existing indentation at the starts of paragraphs.
+
+@item @samp{0} or @samp{none}
+Delete any existing indentation.
+
+@item @var{num}
+Indent each paragraph by @var{num} spaces.
+@end table
+
+@item --split-size=@var{num}
+@opindex --split-size=@var{num}
+Keep Info files to at most @var{num} characters; default is 300,000.
+
+@item --transliterate-file-names
+@opindex --transliterate-file-names
+Enable transliteration of 8-bit characters in node names for the
+purpose of file name creation. @xref{HTML Xref 8-bit Character Expansion}.
+
+@item -U @var{var}
+Cause @var{var} to be undefined. This is equivalent to
+@code{@@clear @var{var}} in the Texinfo file (@pxref{set clear value}).
+
+@item --verbose
+@opindex --verbose
+Cause @code{makeinfo} to display messages saying what it is doing.
+Normally, @code{makeinfo} only outputs messages if there are errors or
+warnings.
+
+@item --version
+@itemx -V
+@opindex --version
+@opindex -V
+Print the version number, then exit successfully.
+
+@item --xml
+@opindex --xml
+Generate XML output rather than Info.
+
+@end table
+
+@vindex TEXINFO_OUTPUT_FORMAT
+@cindex Environment variable @code{TEXINFO_OUTPUT_FORMAT}
+@command{makeinfo} also reads the environment variable
+@env{TEXINFO_OUTPUT_FORMAT} to determine the output format, if not
+overridden by a command line option. The possible values are:
+
+@example
+docbook html info plaintext xml
+@end example
+
+If not set, Info output is the default.
+
+
+@node Pointer Validation
+@subsection Pointer Validation
+@cindex Pointer validation with @code{makeinfo}
+@cindex Validation of pointers
+
+If you do not suppress pointer validation with the @samp{--no-validate}
+option or the @code{@@novalidate} command in the source file (@pxref{Use
+TeX,,Use @TeX{}}), @code{makeinfo} will check the validity of the final
+Info file. Mostly, this means ensuring that nodes you have referenced
+really exist. Here is a complete list of what is checked:
+
+@enumerate
+@item
+If a `Next', `Previous', or `Up' node reference is a reference to a
+node in the current file and is not an external reference such as to
+@file{(dir)}, then the referenced node must exist.@refill
+
+@item
+In every node, if the `Previous' node is different from the `Up' node,
+then the node pointed to by the `Previous' field must have a `Next'
+field which points back to this node.@refill
+
+@item
+Every node except the `Top' node must have an `Up' pointer.@refill
+
+@item
+The node referenced by an `Up' pointer must itself reference the current
+node through a menu item, unless the node referenced by `Up'
+has the form `(@var{file})'.
+
+@item
+If the `Next' reference of a node is not the same as the `Next' reference
+of the `Up' reference, then the node referenced by the `Next' pointer
+must have a `Previous' pointer that points back to the current node.
+This rule allows the last node in a section to point to the first node
+of the next chapter.@refill
+
+@item
+Every node except `Top' should be referenced by at least one other node,
+either via the `Previous' or `Next' links, or via a menu or a
+cross-reference.@refill
+@end enumerate
+
+@cindex @@-commands in @@node, limited support
+Some Texinfo documents might fail during the validation phase because
+they use commands like @code{@@value} and @code{@@definfoenclose} in
+node definitions and cross-references inconsistently. (Your best bet
+is to avoid using @@-commands in node names.) Consider the
+following example:
+
+@example
+@group
+@@set nodename Node 1
+
+@@node @@value@{nodename@}, Node 2, Top, Top
+
+This is node 1.
+
+@@node Node 2, , Node 1, Top
+
+This is node 2.
+@end group
+@end example
+
+@noindent
+Here, the node ``Node 1'' was referenced both verbatim and through
+@code{@@value}.
+
+By default, @code{makeinfo} fails such cases, because node names are not
+fully expanded until they are written to the output file. You should
+always try to reference nodes consistently; e.g., in the above example,
+the second @code{@@node} line should have also used @code{@@value}.
+However, if, for some reason, you @emph{must} reference node names
+inconsistently, and @code{makeinfo} fails to validate the file, you can
+use the @samp{--commands-in-node-names} option to force @code{makeinfo}
+to perform the expensive expansion of all node names it finds in the
+document. This might considerably slow down the program, though;
+twofold increase in conversion time was measured for large documents
+such as the Jargon file.
+
+@cindex @@value in @@node lines
+The support for @code{@@}-commands in @code{@@node} directives is not
+general enough to be freely used. For example, if the example above
+redefined @code{nodename} somewhere in the document, @code{makeinfo}
+will fail to convert it, even if invoked with the
+@samp{--commands-in-node-names} option.
+
+@samp{--commands-in-node-names} has no effect if the @samp{--no-validate}
+option is given.
+
+
+@node makeinfo in Emacs
+@subsection Running @code{makeinfo} Within Emacs
+@cindex Running @code{makeinfo} in Emacs
+@cindex @code{makeinfo} inside Emacs
+@cindex Shell, running @code{makeinfo} in
+
+You can run @code{makeinfo} in GNU Emacs Texinfo mode by using either the
+@code{makeinfo-region} or the @code{makeinfo-buffer} commands. In
+Texinfo mode, the commands are bound to @kbd{C-c C-m C-r} and @kbd{C-c
+C-m C-b} by default.@refill
+
+@table @kbd
+@item C-c C-m C-r
+@itemx M-x makeinfo-region
+Format the current region for Info.@refill
+@findex makeinfo-region
+
+@item C-c C-m C-b
+@itemx M-x makeinfo-buffer
+Format the current buffer for Info.@refill
+@findex makeinfo-buffer
+@end table
+
+When you invoke @code{makeinfo-region} the output goes to a temporary
+buffer. When you invoke @code{makeinfo-buffer} output goes to the
+file set with @code{@@setfilename} (@pxref{setfilename}).
+
+The Emacs @code{makeinfo-region} and @code{makeinfo-buffer} commands
+run the @code{makeinfo} program in a temporary shell buffer. If
+@code{makeinfo} finds any errors, Emacs displays the error messages in
+the temporary buffer.@refill
+
+@cindex Errors, parsing
+@cindex Parsing errors
+@findex next-error
+You can parse the error messages by typing @kbd{C-x `}
+(@code{next-error}). This causes Emacs to go to and position the
+cursor on the line in the Texinfo source that @code{makeinfo} thinks
+caused the error. @xref{Compilation, , Running @code{make} or
+Compilers Generally, emacs, The GNU Emacs Manual}, for more
+information about using the @code{next-error} command.@refill
+
+In addition, you can kill the shell in which the @code{makeinfo}
+command is running or make the shell buffer display its most recent
+output.@refill
+
+@table @kbd
+@item C-c C-m C-k
+@itemx M-x makeinfo-kill-job
+@findex makeinfo-kill-job
+Kill the current running @code{makeinfo} job
+(from @code{makeinfo-region} or @code{makeinfo-buffer}).@refill
+
+@item C-c C-m C-l
+@itemx M-x makeinfo-recenter-output-buffer
+@findex makeinfo-recenter-output-buffer
+Redisplay the @code{makeinfo} shell buffer to display its most recent
+output.@refill
+@end table
+
+@noindent
+(Note that the parallel commands for killing and recentering a @TeX{}
+job are @kbd{C-c C-t C-k} and @kbd{C-c C-t C-l}. @xref{Texinfo Mode
+Printing}.)@refill
+
+You can specify options for @code{makeinfo} by setting the
+@code{makeinfo-options} variable with either the @kbd{M-x
+customize} or the @kbd{M-x set-variable} command, or by setting the
+variable in your @file{.emacs} initialization file.
+
+For example, you could write the following in your @file{.emacs} file:@refill
+
+@example
+@group
+(setq makeinfo-options
+ "--paragraph-indent=0 --no-split
+ --fill-column=70 --verbose")
+@end group
+@end example
+
+@noindent
+@c If you write these three cross references using xref, you see
+@c three references to the same named manual, which looks strange.
+@iftex
+For more information, see @ref{makeinfo options, , Options for
+@code{makeinfo}}, as well as ``Easy Customization Interface,'' ``Examining
+and Setting Variables,'' and ``Init File'' in @cite{The GNU Emacs
+Manual}.
+@end iftex
+@ifnottex
+For more information, see@*
+@ref{Easy Customization, , Easy Customization Interface, emacs, The GNU Emacs Manual},@*
+@ref{Examining, , Examining and Setting Variables, emacs, The GNU Emacs Manual},@*
+@ref{Init File, , , emacs, The GNU Emacs Manual}, and@*
+@ref{makeinfo options, , Options for @code{makeinfo}}.
+@end ifnottex
+
+@node texinfo-format commands
+@subsection The @code{texinfo-format@dots{}} Commands
+
+In GNU Emacs in Texinfo mode, you can format part or all of a Texinfo
+file with the @code{texinfo-format-region} command. This formats the
+current region and displays the formatted text in a temporary buffer
+called @samp{*Info Region*}.@refill
+
+Similarly, you can format a buffer with the
+@code{texinfo-format-buffer} command. This command creates a new
+buffer and generates the Info file in it. Typing @kbd{C-x C-s} will
+save the Info file under the name specified by the
+@code{@@setfilename} line which must be near the beginning of the
+Texinfo file.@refill
+
+@table @kbd
+@item C-c C-e C-r
+@itemx @code{texinfo-format-region}
+@findex texinfo-format-region
+Format the current region for Info.
+
+@item C-c C-e C-b
+@itemx @code{texinfo-format-buffer}
+@findex texinfo-format-buffer
+Format the current buffer for Info.
+@end table
+
+The @code{texinfo-format-region} and @code{texinfo-format-buffer}
+commands provide you with some error checking, and other functions can
+provide you with further help in finding formatting errors. These
+procedures are described in an appendix; see @ref{Catching Mistakes}.
+However, the @code{makeinfo} program is often faster and
+provides better error checking (@pxref{makeinfo in Emacs}).@refill
+
+@node Batch Formatting
+@comment node-name, next, previous, up
+@subsection Batch Formatting
+@cindex Batch formatting for Info
+@cindex Info batch formatting
+
+You can format Texinfo files for Info using @code{batch-texinfo-format}
+and Emacs Batch mode. You can run Emacs in Batch mode from any shell,
+including a shell inside of Emacs. (@xref{Command Arguments,,,
+emacs, The GNU Emacs Manual}.)
+
+Here is a shell command to format all the files that end in
+@file{.texinfo} in the current directory:
+
+@example
+emacs -batch -funcall batch-texinfo-format *.texinfo
+@end example
+
+@noindent
+Emacs processes all the files listed on the command line, even if an
+error occurs while attempting to format some of them.@refill
+
+Run @code{batch-texinfo-format} only with Emacs in Batch mode as shown;
+it is not interactive. It kills the Batch mode Emacs on completion.@refill
+
+@code{batch-texinfo-format} is convenient if you lack @code{makeinfo}
+and want to format several Texinfo files at once. When you use Batch
+mode, you create a new Emacs process. This frees your current Emacs, so
+you can continue working in it. (When you run
+@code{texinfo-format-region} or @code{texinfo-format-buffer}, you cannot
+use that Emacs for anything else until the command finishes.)@refill
+
+@node Tag and Split Files
+@comment node-name, next, previous, up
+@subsection Tag Files and Split Files
+@cindex Making a tag table automatically
+@cindex Tag table, making automatically
+
+If a Texinfo file has more than 30,000 bytes,
+@code{texinfo-format-buffer} automatically creates a tag table
+for its Info file; @code{makeinfo} always creates a tag table. With
+a @dfn{tag table}, Info can jump to new nodes more quickly than it can
+otherwise.@refill
+
+@cindex Indirect subfiles
+In addition, if the Texinfo file contains more than about 300,000
+bytes, @code{texinfo-format-buffer} and @code{makeinfo} split the
+large Info file into shorter @dfn{indirect} subfiles of about 300,000
+bytes each. Big files are split into smaller files so that Emacs does
+not need to make a large buffer to hold the whole of a large Info
+file; instead, Emacs allocates just enough memory for the small, split-off
+file that is needed at the time. This way, Emacs avoids wasting
+memory when you run Info. (Before splitting was implemented, Info
+files were always kept short and @dfn{include files} were designed as
+a way to create a single, large printed manual out of the smaller Info
+files. @xref{Include Files}, for more information. Include files are
+still used for very large documents, such as @cite{The Emacs Lisp
+Reference Manual}, in which each chapter is a separate file.)@refill
+
+When a file is split, Info itself makes use of a shortened version of
+the original file that contains just the tag table and references to
+the files that were split off. The split-off files are called
+@dfn{indirect} files.@refill
+
+The split-off files have names that are created by appending @w{@samp{-1}},
+@w{@samp{-2}}, @w{@samp{-3}} and so on to the file name specified by the
+@code{@@setfilename} command. The shortened version of the original file
+continues to have the name specified by @code{@@setfilename}.@refill
+
+At one stage in writing this document, for example, the Info file was saved
+as the file @file{test-texinfo} and that file looked like this:@refill
+
+@example
+@group
+Info file: test-texinfo, -*-Text-*-
+produced by texinfo-format-buffer
+from file: new-texinfo-manual.texinfo
+
+^_
+Indirect:
+test-texinfo-1: 102
+test-texinfo-2: 50422
+@end group
+@group
+test-texinfo-3: 101300
+^_^L
+Tag table:
+(Indirect)
+Node: overview^?104
+Node: info file^?1271
+@end group
+@group
+Node: printed manual^?4853
+Node: conventions^?6855
+@dots{}
+@end group
+@end example
+
+@noindent
+(But @file{test-texinfo} had far more nodes than are shown here.) Each of
+the split-off, indirect files, @file{test-texinfo-1},
+@file{test-texinfo-2}, and @file{test-texinfo-3}, is listed in this file
+after the line that says @samp{Indirect:}. The tag table is listed after
+the line that says @samp{Tag table:}. @refill
+
+In the list of indirect files, the number following the file name
+records the cumulative number of bytes in the preceding indirect files,
+not counting the file list itself, the tag table, or the permissions
+text in each file. In the tag table, the number following the node name
+records the location of the beginning of the node, in bytes from the
+beginning of the (unsplit) output.
+
+If you are using @code{texinfo-format-buffer} to create Info files,
+you may want to run the @code{Info-validate} command. (The
+@code{makeinfo} command does such a good job on its own, you do not
+need @code{Info-validate}.) However, you cannot run the @kbd{M-x
+Info-validate} node-checking command on indirect files. For
+information on how to prevent files from being split and how to
+validate the structure of the nodes, see @ref{Using Info-validate}.
+
+
+@node Installing an Info File
+@section Installing an Info File
+@cindex Installing an Info file
+@cindex Info file installation
+@cindex @file{dir} directory for Info installation
+
+Info files are usually kept in the @file{info} directory. You can read
+Info files using the standalone Info program or the Info reader built
+into Emacs. (@inforef{Top, info, info}, for an introduction to Info.)
+
+@menu
+* Directory File:: The top level menu for all Info files.
+* New Info File:: Listing a new Info file.
+* Other Info Directories:: How to specify Info files that are
+ located in other directories.
+* Installing Dir Entries:: How to specify what menu entry to add
+ to the Info directory.
+* Invoking install-info:: @code{install-info} options.
+@end menu
+
+
+@node Directory File
+@subsection The Directory File @file{dir}
+
+For Info to work, the @file{info} directory must contain a file that
+serves as a top level directory for the Info system. By convention,
+this file is called @file{dir}. (You can find the location of this file
+within Emacs by typing @kbd{C-h i} to enter Info and then typing
+@kbd{C-x C-f} to see the pathname to the @file{info} directory.)
+
+The @file{dir} file is itself an Info file. It contains the top level
+menu for all the Info files in the system. The menu looks like
+this:@refill
+
+@example
+@group
+* Menu:
+* Info: (info). Documentation browsing system.
+* Emacs: (emacs). The extensible, self-documenting
+ text editor.
+* Texinfo: (texinfo). With one source file, make
+ either a printed manual using
+ @@TeX@{@} or an Info file.
+@dots{}
+@end group
+@end example
+
+Each of these menu entries points to the `Top' node of the Info file
+that is named in parentheses. (The menu entry does not need to
+specify the `Top' node, since Info goes to the `Top' node if no node
+name is mentioned. @xref{Other Info Files, , Nodes in Other Info
+Files}.)@refill
+
+Thus, the @samp{Info} entry points to the `Top' node of the
+@file{info} file and the @samp{Emacs} entry points to the `Top' node
+of the @file{emacs} file.@refill
+
+In each of the Info files, the `Up' pointer of the `Top' node refers
+back to the @code{dir} file. For example, the line for the `Top'
+node of the Emacs manual looks like this in Info:@refill
+
+@example
+File: emacs Node: Top, Up: (DIR), Next: Distrib
+@end example
+
+@noindent
+In this case, the @file{dir} file name is written in upper case
+letters---it can be written in either upper or lower case. This is not
+true in general, it is a special case for @file{dir}.
+
+
+@node New Info File
+@subsection Listing a New Info File
+@cindex Adding a new Info file
+@cindex Listing a new Info file
+@cindex New Info file, listing it in @file{dir} file
+@cindex Info file, listing a new
+@cindex @file{dir} file listing
+
+To add a new Info file to your system, you must write a menu entry to
+add to the menu in the @file{dir} file in the @file{info} directory.
+For example, if you were adding documentation for GDB, you would write
+the following new entry:@refill
+
+@example
+* GDB: (gdb). The source-level C debugger.
+@end example
+
+@noindent
+The first part of the menu entry is the menu entry name, followed by a
+colon. The second part is the name of the Info file, in parentheses,
+followed by a period. The third part is the description.
+
+The name of an Info file often has a @file{.info} extension. Thus, the
+Info file for GDB might be called either @file{gdb} or @file{gdb.info}.
+The Info reader programs automatically try the file name both with and
+without @file{.info}@footnote{On MS-DOS/MS-Windows systems, Info will
+try the @file{.inf} extension as well.}; so it is better to avoid
+clutter and not to write @samp{.info} explicitly in the menu entry. For
+example, the GDB menu entry should use just @samp{gdb} for the file
+name, not @samp{gdb.info}.
+
+
+@node Other Info Directories
+@subsection Info Files in Other Directories
+@cindex Installing Info in another directory
+@cindex Info installed in another directory
+@cindex Another Info directory
+@cindex @file{dir} files and Info directories
+
+If an Info file is not in the @file{info} directory, there are three
+ways to specify its location:@refill
+
+@enumerate
+@item
+Write the pathname in the @file{dir} file as the second part of the menu.
+
+@item
+If you are using Emacs, list the name of the file in a second @file{dir}
+file, in its directory; and then add the name of that directory to the
+@code{Info-directory-list} variable in your personal or site
+initialization file.
+
+This variable tells Emacs where to look for @file{dir} files (the files
+must be named @file{dir}). Emacs merges the files named @file{dir} from
+each of the listed directories. (In Emacs version 18, you can set the
+@code{Info-directory} variable to the name of only one
+directory.)@refill
+
+@item
+Specify the Info directory name in the @code{INFOPATH} environment
+variable in your @file{.profile} or @file{.cshrc} initialization file.
+(Only you and others who set this environment variable will be able to
+find Info files whose location is specified this way.)
+@end enumerate
+
+For example, to reach a test file in the @file{/home/bob/info}
+directory, you could add an entry like this to the menu in the
+standard @file{dir} file:@refill
+
+@example
+* Test: (/home/bob/info/info-test). Bob's own test file.
+@end example
+
+@noindent
+In this case, the absolute file name of the @file{info-test} file is
+written as the second part of the menu entry.@refill
+
+Alternatively, you could write the following in your @file{.emacs} file:
+
+@vindex Info-directory-list
+@example
+@group
+(require 'info)
+(setq Info-directory-list
+ (cons (expand-file-name "/home/bob/info")
+ Info-directory-list))
+@end group
+@end example
+
+This tells Emacs to merge the system @file{dir} file with the @file{dir}
+file in @file{/home/bob/info}. Thus, Info will list the
+@file{/home/bob/info/info-test} file as a menu entry in the
+@file{/home/bob/info/dir} file. Emacs does the merging only when
+@kbd{M-x info} is first run, so if you want to set
+@code{Info-directory-list} in an Emacs session where you've already run
+@code{info}, you must @code{(setq Info-dir-contents nil)} to force Emacs
+to recompose the @file{dir} file.
+
+@vindex INFOPATH
+@cindex Environment variable @code{INFOPATH}
+Finally, you can tell Info where to look by setting the @code{INFOPATH}
+environment variable in your shell startup file, such as @file{.cshrc},
+@file{.profile} or @file{autoexec.bat}. If you use a Bourne-compatible
+shell such as @code{sh} or @code{bash} for your shell command
+interpreter, you set the @code{INFOPATH} environment variable in the
+@file{.profile} initialization file; but if you use @code{csh} or
+@code{tcsh}, you set the variable in the @file{.cshrc} initialization
+file. On MS-DOS/MS-Windows systems, you must set @code{INFOPATH} in
+your @file{autoexec.bat} file or in the Registry. Each type of shell
+uses a different syntax.
+
+@itemize @bullet
+@item
+In a @file{.cshrc} file, you could set the @code{INFOPATH}
+variable as follows:@refill
+
+@smallexample
+setenv INFOPATH .:~/info:/usr/local/emacs/info
+@end smallexample
+
+@item
+In a @file{.profile} file, you would achieve the same effect by
+writing:@refill
+
+@smallexample
+INFOPATH=.:$HOME/info:/usr/local/emacs/info
+export INFOPATH
+@end smallexample
+
+@item
+@pindex autoexec.bat
+In a @file{autoexec.bat} file, you write this command@footnote{Note the
+use of @samp{;} as the directory separator, and a different syntax for
+using values of other environment variables.}:
+
+@smallexample
+set INFOPATH=.;%HOME%/info;c:/usr/local/emacs/info
+@end smallexample
+@end itemize
+
+@noindent
+The @samp{.} indicates the current directory as usual. Emacs uses the
+@code{INFOPATH} environment variable to initialize the value of Emacs's
+own @code{Info-directory-list} variable. The stand-alone Info reader
+merges any files named @file{dir} in any directory listed in the
+@env{INFOPATH} variable into a single menu presented to you in the node
+called @samp{(dir)Top}.
+
+@cindex Colon, last in @env{INFOPATH}
+However you set @env{INFOPATH}, if its last character is a
+colon@footnote{On MS-DOS/MS-Windows systems, use semi-colon instead.}, this
+is replaced by the default (compiled-in) path. This gives you a way to
+augment the default path with new directories without having to list all
+the standard places. For example (using @code{sh} syntax):
+
+@example
+INFOPATH=/local/info:
+export INFOPATH
+@end example
+
+@noindent
+will search @file{/local/info} first, then the standard directories.
+Leading or doubled colons are not treated specially.
+
+@cindex @file{dir} file, creating your own
+When you create your own @file{dir} file for use with
+@code{Info-directory-list} or @env{INFOPATH}, it's easiest to start by
+copying an existing @file{dir} file and replace all the text after the
+@samp{* Menu:} with your desired entries. That way, the punctuation and
+special CTRL-_ characters that Info needs will be present.
+
+
+@node Installing Dir Entries
+@subsection Installing Info Directory Files
+
+When you install an Info file onto your system, you can use the program
+@code{install-info} to update the Info directory file @file{dir}.
+Normally the makefile for the package runs @code{install-info}, just
+after copying the Info file into its proper installed location.
+
+@findex dircategory
+@findex direntry
+In order for the Info file to work with @code{install-info}, you include
+the commands @code{@@dircategory} and
+@code{@@direntry}@dots{}@code{@@end direntry} in the Texinfo source
+file. Use @code{@@direntry} to specify the menu entries to add to the
+Info directory file, and use @code{@@dircategory} to specify which part
+of the Info directory to put it in. Here is how these commands are used
+in this manual:
+
+@smallexample
+@@dircategory Texinfo documentation system
+@@direntry
+* Texinfo: (texinfo). The GNU documentation format.
+* install-info: (texinfo)Invoking install-info. @dots{}
+@dots{}
+@@end direntry
+@end smallexample
+
+Here's what this produces in the Info file:
+
+@smallexample
+INFO-DIR-SECTION Texinfo documentation system
+START-INFO-DIR-ENTRY
+* Texinfo: (texinfo). The GNU documentation format.
+* install-info: (texinfo)Invoking install-info. @dots{}
+@dots{}
+END-INFO-DIR-ENTRY
+@end smallexample
+
+@noindent
+The @code{install-info} program sees these lines in the Info file, and
+that is how it knows what to do.
+
+Always use the @code{@@direntry} and @code{@@dircategory} commands near
+the beginning of the Texinfo input, before the first @code{@@node}
+command. If you use them later on in the input, @code{install-info}
+will not notice them.
+
+@code{install-info} will automatically reformat the description of the
+menu entries it is adding. As a matter of convention, the description
+of the main entry (above, @samp{The GNU documentation format}) should
+start at column 32, starting at zero (as in
+@code{what-cursor-position} in Emacs). This will make it align with
+most others. Description for individual utilities best start in
+column 48, where possible. For more information about formatting see
+the @samp{--calign}, @samp{--align}, and @samp{--max-width} options in
+@ref{Invoking install-info}.
+
+If you use @code{@@dircategory} more than once in the Texinfo source,
+each usage specifies the `current' category; any subsequent
+@code{@@direntry} commands will add to that category.
+
+@cindex Free Software Directory
+@cindex Dir categories, choosing
+@cindex Categories, choosing
+When choosing a category name for the @code{@@dircategory} command, we
+recommend consulting the @uref{http://www.gnu.org/directory,
+Free Software Directory}. If your program is not listed there,
+or listed incorrectly or incompletely, please report the situation to
+the directory maintainers (@email{bug-directory@@gnu.org}) so that the
+category names can be kept in sync.
+
+Here are a few examples (see the @file{util/dir-example} file in the
+Texinfo distribution for large sample @code{dir} file):
+
+@display
+Emacs
+Localization
+Printing
+Software development
+Software libraries
+Text creation and manipulation
+@end display
+
+@cindex Invoking nodes, including in dir file
+Each `Invoking' node for every program installed should have a
+corresponding @code{@@direntry}. This lets users easily find the
+documentation for the different programs they can run, as with the
+traditional @command{man} system.
+
+
+@node Invoking install-info
+@subsection Invoking @command{install-info}
+@pindex install-info
+
+@code{install-info} inserts menu entries from an Info file into the
+top-level @file{dir} file in the Info system (see the previous sections
+for an explanation of how the @file{dir} file works). @code{install-info}
+also removes menu entries from the @file{dir} file. It's most often
+run as part of software installation, or when constructing a @file{dir} file
+for all manuals on a system. Synopsis:
+
+@example
+install-info [@var{option}]@dots{} [@var{info-file} [@var{dir-file}]]
+@end example
+
+If @var{info-file} or @var{dir-file} are not specified, the options
+(described below) that define them must be. There are no compile-time
+defaults, and standard input is never used. @code{install-info} can
+read only one Info file and write only one @file{dir} file per invocation.
+
+@cindex @file{dir}, created by @code{install-info}
+If @var{dir-file} (however specified) does not exist,
+@code{install-info} creates it if possible (with no entries).
+
+@cindex Compressed dir files, reading
+@cindex Bzipped dir files, reading
+@cindex LZMA-compressed dir files, reading
+@cindex Dir files, compressed
+If any input file is compressed with @code{gzip} (@pxref{Top,,,gzip,
+Gzip}), @code{install-info} automatically uncompresses it
+for reading. And if @var{dir-file} is compressed, @code{install-info}
+also automatically leaves it compressed after writing any changes.
+If @var{dir-file} itself does not exist, @code{install-info} tries to
+open @file{@var{dir-file}.gz}, @file{@var{dir-file}.bz2}, and
+@file{@var{dir-file}.lzma}, in that order.
+
+Options:
+
+@table @code
+@item --add-once
+Specifies that the entry or entries will only be put into a single section.
+
+@item --align=@var{column}
+@opindex --align=@var{column}
+Specifies the column that the second and subsequent lines of menu entry's
+description will be formatted to begin at. The default for this option is
+@samp{35}. It is used in conjunction with the @samp{--max-width} option.
+@var{column} starts counting at 1.
+
+@item --append-new-sections
+Instead of alphabetizing new sections, place them at the end of the DIR file.
+
+@item --calign=@var{column}
+@opindex --calign=@var{column}
+Specifies the column that the first line of menu entry's description will
+be formatted to begin at. The default for this option is @samp{33}. It is
+used in conjunction with the @samp{--max-width} option.
+When the name of the menu entry exceeds this column, entry's description
+will start on the following line.
+@var{column} starts counting at 1.
+
+@item --debug
+@opindex --debug
+Report what is being done.
+
+@item --delete
+@opindex --delete
+Delete the entries in @var{info-file} from @var{dir-file}. The file
+name in the entry in @var{dir-file} must be @var{info-file} (except for
+an optional @samp{.info} in either one). Don't insert any new entries.
+Any empty sections that result from the removal are also removed.
+
+@item --description=@var{text}
+@opindex --description=@var{text}
+Specify the explanatory portion of the menu entry. If you don't specify
+a description (either via @samp{--entry}, @samp{--item} or this option),
+the description is taken from the Info file itself.
+
+@item --dir-file=@var{name}
+@opindex --dir-file=@var{name}
+Specify file name of the Info directory file. This is equivalent to
+using the @var{dir-file} argument.
+
+@item --dry-run
+@opindex --dry-run
+Same as @samp{--test}.
+
+@item --entry=@var{text}
+@opindex --entry=@var{text}
+Insert @var{text} as an Info directory entry; @var{text} should have the
+form of an Info menu item line plus zero or more extra lines starting
+with whitespace. If you specify more than one entry, they are all
+added. If you don't specify any entries, they are determined from
+information in the Info file itself.
+
+@item --help
+@opindex --help
+Display a usage message with basic usage and all available options,
+then exit successfully.
+
+@item --info-file=@var{file}
+@opindex --info-file=@var{file}
+Specify Info file to install in the directory. This is
+equivalent to using the @var{info-file} argument.
+
+@item --info-dir=@var{dir}
+@opindex --info-dir=@var{dir}
+Specify the directory where the directory file @file{dir} resides.
+Equivalent to @samp{--dir-file=@var{dir}/dir}.
+
+@item --infodir=@var{dir}
+@opindex --infodir=@var{dir}
+Same as @samp{--info-dir}.
+
+@item --item=@var{text}
+@opindex --item=@var{text}
+Same as @samp{--entry=@var{text}}. An Info directory entry is actually
+a menu item.
+
+@item --keep-old
+@opindex --keep-old
+Do not replace pre-existing menu entries. When @samp{--remove} is specified,
+this option means that empty sections are not removed.
+
+@item --max-width=@var{column}
+@opindex --max-width=@var{column}
+Specifies the column that the menu entry's description will be word-wrapped
+at. @var{column} starts counting at 1.
+
+@item --maxwidth=@var{column}
+@opindex --maxwidth=@var{column}
+Same as @samp{--max-width}.
+
+@item --menuentry=@var{text}
+@opindex --menuentry=@var{text}
+Same as @samp{--name}.
+
+@item --name=@var{text}
+@opindex --name=@var{text}
+Specify the name portion of the menu entry. If the @var{text} does
+not start with an asterisk @samp{*}, it is presumed to be the text
+after the @samp{*} and before the parentheses that specify the Info
+file. Otherwise @var{text} is taken verbatim, and is taken as
+defining the text up to and including the first period (a space is
+appended if necessary). If you don't specify the name (either via
+@samp{--entry}, @samp{--item} or this option), it is taken from the
+Info file itself. If the Info does not contain the name, the basename
+of the Info file is used.
+
+@item --no-indent
+@opindex --no-indent
+Suppress formatting of new entries into the @file{dir} file.
+
+@item --quiet
+@opindex --quiet
+@itemx --silent
+@opindex --silent
+Suppress warnings, etc., for silent operation.
+
+@item --remove
+@opindex --remove
+Same as @samp{--delete}.
+
+@item --remove-exactly
+@opindex --remove-exactly
+Also like @samp{--delete}, but only entries if the Info file name
+matches exactly; @code{.info} and/or @code{.gz} suffixes are
+@emph{not} ignored.
+
+@item --section=@var{sec}
+@opindex --section=@var{sec}
+Put this file's entries in section @var{sec} of the directory. If you
+specify more than one section, all the entries are added in each of the
+sections. If you don't specify any sections, they are determined from
+information in the Info file itself. If the Info file doesn't specify
+a section, the menu entries are put into the Miscellaneous section.
+
+@item --section @var{regex} @var{sec}
+@opindex --section @var{regex} @var{sec}
+Same as @samp{--regex=@var{regex} --section=@var{sec} --add-once}.
+
+@code{install-info} tries to detect when this alternate syntax is used,
+but does not always guess correctly. Here is the heuristic that
+@code{install-info} uses:
+@enumerate
+@item
+If the second argument to @code{--section} starts with a hyphen, the
+original syntax is presumed.
+@item
+If the second argument to @code{--section} is a file that can be
+opened, the original syntax is presumed.
+@item
+Otherwise the alternate syntax is used.
+@end enumerate
+
+When heuristic fails because your section title starts with a hyphen, or it
+happens to be a filename that can be opened, the syntax should be changed
+to @samp{--regex=@var{regex} --section=@var{sec} --add-once}.
+
+
+@item --regex=@var{regex}
+@opindex --regex=@var{regex}
+Put this file's entries into any section that matches @var{regex}. If
+more than one section matches, all of the entries are added in each of the
+sections. Specify @var{regex} using basic regular expression syntax, more
+or less as used with @command{grep}, for example.
+
+@item --test
+@opindex --test
+Suppress updating of the directory file.
+
+@item --version
+@opindex --version
+@cindex Version number, for install-info
+Display version information and exit successfully.
+
+@end table
+
+
+@node Generating HTML
+@chapter Generating HTML
+@cindex HTML output
+
+@command{makeinfo} generates Info output by default, but given the
+@option{--html} option, it will generate HTML, for web browsers and
+other programs. This chapter gives some details on such HTML output.
+
+
+@command{makeinfo} can also write in XML and Docbook format, but we do
+not as yet describe these further. @xref{Output Formats}, for a brief
+overview of all the output formats.
+
+@menu
+* HTML Translation:: Details of the HTML output.
+* HTML Splitting:: How HTML output is split.
+* HTML CSS:: Influencing HTML output with Cascading Style Sheets.
+* HTML Xref:: Cross-references in HTML output.
+@end menu
+
+
+@node HTML Translation
+@section HTML Translation
+
+@command{makeinfo} will include segments of Texinfo source between
+@code{@@ifhtml} and @code{@@end ifhtml} in the HTML output (but not
+any of the other conditionals, by default). Source between
+@code{@@html} and @code{@@end html} is passed without change to the
+output (i.e., suppressing the normal escaping of input @samp{<},
+@samp{>} and @samp{&} characters which have special significance in
+HTML). @xref{Conditional Commands}.
+
+@opindex --footnote-style@r{, ignored in HTML output}
+The @option{--footnote-style} option is currently ignored for HTML output;
+footnotes are always linked to the end of the output file.
+
+@cindex Navigation bar, in HTML output
+By default, a navigation bar is inserted at the start of each node,
+analogous to Info output. The @samp{--no-headers} option suppresses
+this if used with @samp{--no-split}. Header @code{<link>} elements in
+split output can support info-like navigation with browsers like Lynx
+and @w{Emacs W3} which implement this HTML@tie{}1.0 feature.
+
+@cindex HTML output, browser compatibility of
+The HTML generated is mostly standard (i.e., HTML@tie{}2.0, RFC-1866).
+One exception is that HTML@tie{}3.2 tables are generated from the
+@code{@@multitable} command, but tagged to degrade as well as possible
+in browsers without table support. The HTML@tie{}4 @samp{lang}
+attribute on the @samp{<html>} attribute is also used. (Please report
+output from an error-free run of @code{makeinfo} which has browser
+portability problems as a bug.)
+
+
+@node HTML Splitting
+@section HTML Splitting
+@cindex Split HTML output
+@cindex HTML output, split
+
+When splitting output (which is the default), @command{makeinfo}
+writes HTML output into (generally) one output file per Texinfo source
+@code{@@node}.
+
+The output file name is the node name with special characters replaced
+by @samp{-}'s, so it can work as a filename. In the unusual case of
+two different nodes having the same name after this treatment, they
+are written consecutively to the same file, with HTML anchors so each
+can be referred to separately. If @command{makeinfo} is run on a
+system which does not distinguish case in filenames, nodes which are
+the same except for case will also be folded into the same output
+file.
+
+When splitting, the HTML output files are written into a subdirectory,
+with the name chosen as follows:
+@enumerate
+@item
+@command{makeinfo} first tries the subdirectory with the base name
+from @code{@@setfilename} (that is, any extension is removed). For
+example, HTML output for @code{@@setfilename gcc.info} would be
+written into a subdirectory named @samp{gcc}.
+
+@item
+If that directory cannot be created for any reason, then
+@command{makeinfo} tries appending @samp{.html} to the directory name.
+For example, output for @code{@@setfilename texinfo} would be written
+to @samp{texinfo.html}.
+
+@item
+If the @samp{@var{name}.html} directory can't be
+created either, @code{makeinfo} gives up.
+
+@end enumerate
+
+@noindent In any case, the top-level output file within the directory
+is always named @samp{index.html}.
+
+Monolithic output (@code{--no-split}) is named according to
+@code{@@setfilename} (with any @samp{.info} extension is replaced with
+@samp{.html}) or @code{--output} (the argument is used literally).
+
+
+@node HTML CSS
+@section HTML CSS
+@cindex HTML, and CSS
+@cindex CSS, and HTML output
+@cindex Cascading Style Sheets, and HTML output
+
+Cascading Style Sheets (CSS for short) is an Internet standard for
+influencing the display of HTML documents: see
+@uref{http://www.w3.org/Style/CSS/}.
+
+By default, @command{makeinfo} includes a few simple CSS commands to
+better implement the appearance of some of the environments. Here
+are two of them, as an example:
+
+@example
+pre.display @{ font-family:inherit @}
+pre.smalldisplay @{ font-family:inherit; font-size:smaller @}
+@end example
+
+A full explanation of CSS is (far) beyond this manual; please see the
+reference above. In brief, however, this specification tells the web
+browser to use a `smaller' font size for @code{@@smalldisplay} text,
+and to use the `inherited' font (generally a regular roman typeface)
+for both @code{@@smalldisplay} and @code{@@display}. By default, the
+HTML @samp{<pre>} command uses a monospaced font.
+
+You can influence the CSS in the HTML output with two
+@command{makeinfo} options: @option{--css-include=@var{file}} and
+@option{--css-ref=@var{url}}.
+
+The option @option{--css-ref=@var{url}} adds to each output HTML file
+a @samp{<link>} tag referencing a CSS at the given @var{url}. This
+allows using external style sheets.
+
+The option @option{--css-include=@var{file}} includes the contents
+@var{file} in the HTML output, as you might expect. However, the
+details are somewhat tricky, as described in the following, to provide
+maximum flexibility.
+
+@cindex @@import specifications, in CSS files
+The CSS file may begin with so-called @samp{@@import} directives,
+which link to external CSS specifications for browsers to use when
+interpreting the document. Again, a full description is beyond our
+scope here, but we'll describe how they work syntactically, so we can
+explain how @command{makeinfo} handles them.
+
+@cindex Comments, in CSS files
+There can be more than one @samp{@@import}, but they have to come
+first in the file, with only whitespace and comments interspersed, no
+normal definitions. (Technical exception: an @samp{@@charset}
+directive may precede the @samp{@@import}'s. This does not alter
+@command{makeinfo}'s behavior, it just copies the @samp{@@charset} if
+present.) Comments in CSS files are delimited by @samp{/* ... */}, as
+in C. An @samp{@@import} directive must be in one of these two forms:
+
+@example
+@@import url(http://example.org/foo.css);
+@@import "http://example.net/bar.css";
+@end example
+
+As far as @command{makeinfo} is concerned, the crucial characters are
+the @samp{@@} at the beginning and the semicolon terminating the
+directive. When reading the CSS file, it simply copies any such
+@samp{@@}-directive into the output, as follows:
+
+@itemize
+@item If @var{file} contains only normal CSS declarations, it is
+included after @command{makeinfo}'s default CSS, thus overriding it.
+
+@item If @var{file} begins with @samp{@@import} specifications (see
+below), then the @samp{import}'s are included first (they have to come
+first, according to the standard), and then @command{makeinfo}'s
+default CSS is included. If you need to override @command{makeinfo}'s
+defaults from an @samp{@@import}, you can do so with the @samp{!@:
+important} CSS construct, as in:
+@example
+pre.smallexample @{ font-size: inherit ! important @}
+@end example
+
+@item If @var{file} contains both @samp{@@import} and inline CSS
+specifications, the @samp{@@import}'s are included first, then
+@command{makeinfo}'s defaults, and lastly the inline CSS from
+@var{file}.
+
+@item Any @@-directive other than @samp{@@import} and @samp{@@charset}
+is treated as a CSS declaration, meaning @command{makeinfo} includes
+its default CSS and then the rest of the file.
+
+@end itemize
+
+If the CSS file is malformed or erroneous, @command{makeinfo}'s output
+is unspecified. @command{makeinfo} does not try to interpret the
+meaning of the CSS file in any way; it just looks for the special
+@samp{@@} and @samp{;} characters and blindly copies the text into the
+output. Comments in the CSS file may or may not be included in the
+output.
+
+
+@node HTML Xref
+@section HTML Cross-references
+@cindex HTML cross-references
+@cindex Cross-references, in HTML output
+
+Cross-references between Texinfo manuals in HTML format amount, in the
+end, to a standard HTML @code{<a>} link, but the details are
+unfortunately complex. This section describes the algorithm used in
+detail, so that Texinfo can cooperate with other programs, such as
+@command{texi2html}, by writing mutually compatible HTML files.
+
+This algorithm may or may not be used for links @emph{within} HTML
+output for a Texinfo file. Since no issues of compatibility arise in
+such cases, we do not need to specify this.
+
+We try to support references to such ``external'' manuals in both
+monolithic and split forms. A @dfn{monolithic} (mono) manual is
+entirely contained in one file, and a @dfn{split} manual has a file
+for each node. (@xref{HTML Splitting}.)
+
+@cindex Dumas, Patrice
+Acknowledgement: this algorithm was primarily devised by Patrice Dumas
+in 2003--04.
+
+@menu
+* Link Basics: HTML Xref Link Basics.
+* Node Expansion: HTML Xref Node Name Expansion.
+* Command Expansion: HTML Xref Command Expansion.
+* 8-bit Expansion: HTML Xref 8-bit Character Expansion.
+* Mismatch: HTML Xref Mismatch.
+@end menu
+
+
+@node HTML Xref Link Basics
+@subsection HTML Cross-reference Link Basics
+@cindex HTML cross-reference link basics
+
+For our purposes, an HTML link consists of four components: a host
+name, a directory part, a file part, and a target part. We
+always assume the @code{http} protocol. For example:
+
+@example
+http://@var{host}/@var{dir}/@var{file}.html#@var{target}
+@end example
+
+The information to construct a link comes from the node name and
+manual name in the cross-reference command in the Texinfo source
+(@pxref{Cross References}), and from @dfn{external information}, which
+is currently simply hardwired. In the future, it may come from an
+external data file.
+
+We now consider each part in turn.
+
+The @var{host} is hardwired to be the local host. This could either
+be the literal string @samp{localhost}, or, according to the rules for
+HTML links, the @samp{http://localhost/} could be omitted entirely.
+
+The @var{dir} and @var{file} parts are more complicated, and depend on
+the relative split/mono nature of both the manual being processed and
+the manual that the cross-reference refers to. The underlying idea is
+that there is one directory for Texinfo manuals in HTML, and a given
+@var{manual} is either available as a monolithic file
+@file{@var{manual}.html}, or a split subdirectory
+@file{@var{manual}/*.html}. Here are the cases:
+
+@itemize @bullet
+@item
+If the present manual is split, and the referent manual is also split,
+the directory is @samp{../@var{referent/}} and the file is the
+expanded node name (described later).
+
+@item
+If the present manual is split, and the referent manual is mono, the
+directory is @samp{../} and the file is @file{@var{referent}.html}.
+
+@item
+If the present manual is mono, and the referent manual is split, the
+directory is @file{@var{referent}/} and the file is the expanded node
+name.
+
+@item
+If the present manual is mono, and the referent manual is also mono,
+the directory is @file{./} (or just the empty string), and the file is
+@file{@var{referent}.html}.
+
+@end itemize
+
+One exception: the algorithm for node name expansion prefixes the
+string @samp{g_t} when the node name begins with a non-letter. This
+kludge (due to XHTML rules) is not necessary for filenames, and is
+therefore omitted.
+
+Any directory part in the filename argument of the source
+cross-reference command is ignored. Thus, @code{@@xref@{,,,../foo@}}
+and @code{@@xref@{,,,foo@}} both use @samp{foo} as the manual name.
+This is because any such attempted hardwiring of the directory is very
+unlikely to be useful for both Info and HTML output.
+
+Finally, the @var{target} part is always the expanded node name.
+
+Whether the present manual is split or mono is determined by user
+option; @command{makeinfo} defaults to split, with the
+@option{--no-split} option overriding this.
+
+Whether the referent manual is split or mono is another bit of the
+external information. For now, @command{makeinfo} simply assumes the
+referent manual is the same as the present manual.
+
+There can be a mismatch between the format of the referent manual that
+the generating software assumes, and the format it's actually present
+in. @xref{HTML Xref Mismatch}.
+
+
+@node HTML Xref Node Name Expansion
+@subsection HTML Cross-reference Node Name Expansion
+@cindex HTML cross-reference node name expansion
+@cindex node name expansion, in HTML cross-references
+@cindex expansion, of node names in HTML cross-references
+
+As mentioned in the previous section, the key part of the HTML
+cross-reference algorithm is the conversion of node names in the
+Texinfo source into strings suitable for XHTML identifiers and
+filenames. The restrictions are similar for each: plain ASCII
+letters, numbers, and the @samp{-} and @samp{_} characters are all
+that can be used. (Although HTML anchors can contain most characters,
+XHTML is more restrictive.)
+
+Cross-references in Texinfo can actually refer either to nodes or
+anchors (@pxref{anchor}), but anchors are treated identically to nodes
+in this context, so we'll continue to say ``node'' names for
+simplicity.
+
+(@@-commands and 8-bit characters are not presently handled by
+@command{makeinfo} for HTML cross-references. See the next section.)
+
+A special exception: the Top node (@pxref{The Top Node}) is always
+mapped to the file @file{index.html}, to match web server software.
+However, the HTML @emph{target} is @samp{Top}. Thus (in the split case):
+
+@example
+@@xref@{Top, Introduction,, emacs, The GNU Emacs Manual@}.
+@result{} <a href="emacs/index.html#Top">
+@end example
+
+@enumerate
+@item
+The standard ASCII letters (a-z and A-Z) are not modified. All other
+characters are changed as specified below.
+
+@item
+The standard ASCII numbers (0-9) are not modified except when a number
+is the first character of the node name. In that case, see below.
+
+@item
+Multiple consecutive space, tab and newline characters are transformed
+into just one space. (It's not possible to have newlines in node
+names with the current implementation, but we specify it anyway, just
+in case.)
+
+@item
+Leading and trailing spaces are removed.
+
+@item
+After the above has been applied, each remaining space character is
+converted into a @samp{-} character.
+
+@item
+Other ASCII 7-bit characters are transformed into @samp{_00@var{xx}},
+where @var{xx} is the ASCII character code in (lowercase) hexadecimal.
+This includes @samp{_}, which is mapped to @samp{_005f}.
+
+@item
+If the node name does not begin with a letter, the literal string
+@samp{g_t} is prefixed to the result. (Due to the rules above, that
+string can never occur otherwise; it is an arbitrary choice, standing
+for ``GNU Texinfo''.) This is necessary because XHTML requires that
+identifiers begin with a letter.
+
+@end enumerate
+
+For example:
+
+@example
+@@node A node --- with _'%
+@result{} A-node-_002d_002d_002d-with-_005f_0027_0025
+@end example
+
+Notice in particular:
+
+@itemize @bullet
+@item @samp{_} @result{} @samp{_005f}
+@item @samp{-} @result{} @samp{_002d}
+@item @samp{A node} @result{} @samp{A-node}
+@end itemize
+
+On case-folding computer systems, nodes differing only by case will be
+mapped to the same file.
+
+In particular, as mentioned above, Top always maps to the file
+@file{index.html}. Thus, on a case-folding system, Top and a node
+named `Index' will both be written to @file{index.html}.
+
+Fortunately, the targets serve to distinguish these cases, since HTML
+target names are always case-sensitive, independent of operating
+system.
+
+
+@node HTML Xref Command Expansion
+@subsection HTML Cross-reference Command Expansion
+@cindex HTML cross-reference command expansion
+
+In standard Texinfo, node names may not contain @@-commands.
+@command{makeinfo} has an option @option{--commands-in-node-names}
+which partially supports it (@pxref{Invoking makeinfo}), but it is not
+robust and not recommended.
+
+Thus, @command{makeinfo} does not fully implement this part of the
+HTML cross-reference algorithm, but it is documented here for the sake
+of completeness.
+
+First, comments are removed.
+
+Next, any @code{@@value} commands (@pxref{set value}) and macro invocations
+(@pxref{Invoking Macros}) are fully expanded.
+
+Then, for the following commands, the command name and braces are removed,
+the text of the argument is recursively transformed:
+@example
+@@asis @@b @@cite @@code @@command @@dfn @@dmn @@dotless
+@@emph @@env @@file @@indicateurl @@kbd @@key
+@@samp @@sc @@slanted @@strong @@t @@var @@w
+@end example
+
+@noindent For @code{@@sc}, any letters are capitalized.
+
+The following commands are replaced by constant text, as shown. If
+any of these commands have non-empty arguments, as in
+@code{@@TeX@{bad@}}, it is an error, and the result is unspecified.
+`(space)' means a space character, `(nothing)' means the empty string,
+etc. The notation `U+@var{xxxx}' means Unicode code point @var{xxxx}
+(in hex, as usual). There are further transformations of many of
+these expansions for the final file or target name, such as space
+characters to @samp{-}, etc., according to the other rules.
+
+@multitable @columnfractions .3 .5
+@item @code{@@(newline)} @tab (space)
+@item @code{@@(space)} @tab (space)
+@item @code{@@(tab)} @tab (space)
+@item @code{@@!} @tab @samp{!}
+@item @code{@@*} @tab (space)
+@item @code{@@-} @tab (nothing)
+@item @code{@@.} @tab @samp{.}
+@item @code{@@:} @tab (nothing)
+@item @code{@@?} @tab @samp{?}
+@item @code{@@@@} @tab @samp{@@}
+@item @code{@@@{} @tab @samp{@{}
+@item @code{@@@}} @tab @samp{@}}
+@item @code{@@LaTeX} @tab @samp{LaTeX}
+@item @code{@@TeX} @tab @samp{TeX}
+@item @code{@@arrow} @tab U+2192
+@item @code{@@bullet} @tab U+2022
+@item @code{@@comma} @tab @samp{,}
+@item @code{@@copyright} @tab U+00A9
+@item @code{@@dots} @tab U+2026
+@item @code{@@enddots} @tab @samp{...}
+@item @code{@@equiv} @tab U+2261
+@item @code{@@error} @tab @samp{error-->}
+@item @code{@@euro} @tab U+20AC
+@item @code{@@exclamdown} @tab U+00A1
+@item @code{@@expansion} @tab U+2192
+@item @code{@@geq} @tab U+2265
+@item @code{@@leq} @tab U+2264
+@item @code{@@minus} @tab U+2212
+@item @code{@@ordf} @tab U+00AA
+@item @code{@@ordm} @tab U+00BA
+@item @code{@@point} @tab U+2605
+@item @code{@@pounds} @tab U+00A3
+@item @code{@@print} @tab U+22A3
+@item @code{@@questiondown} @tab U+00BF
+@item @code{@@registeredsymbol} @tab U+00AE
+@item @code{@@result} @tab U+21D2
+@item @code{@@textdegree} @tab U+00B0
+@item @code{@@tie} @tab (space)
+@end multitable
+
+Quotation mark commands are likewise replaced by their Unicode values
+(@pxref{Inserting Quotation Marks}).
+
+An @code{@@acronym} or @code{@@abbr} command is replaced by the first
+argument, followed by the second argument in parentheses, if present.
+@xref{acronym}.
+
+An @code{@@email} command is replaced by the @var{text} argument if
+present, else the address. @xref{email}.
+
+An @code{@@image} command is replaced by the filename (first)
+argument. @xref{Images}.
+
+A @code{@@verb} command is replaced by its transformed argument.
+@xref{verb}.
+
+Any other command is an error, and the result is unspecified.
+
+
+@node HTML Xref 8-bit Character Expansion
+@subsection HTML Cross-reference 8-bit Character Expansion
+@cindex HTML cross-reference 8-bit character expansion
+@cindex 8-bit characters, in HTML cross-references
+@cindex Expansion of 8-bit characters in HTML cross-references
+@cindex Transliteration of 8-bit characters in HTML cross-references
+
+Usually, characters other than plain 7-bit ASCII are transformed into
+the corresponding Unicode code point(s) in Normalization Form C, which
+uses precomposed characters where available. (This is the
+normalization form recommended by the W3C and other bodies.) This
+holds when that code point is 0xffff or less, as it almost always is.
+
+These will then be further transformed by the rules above into the
+string @samp{_@var{xxxx}}, where @var{xxxx} is the code point in hex.
+
+For example, combining this rule and the previous section:
+
+@example
+@@node @@b@{A@} @@TeX@{@} @@u@{B@} @@point@{@}@@enddots@{@}
+@result{} A-TeX-B_0306-_2605_002e_002e_002e
+@end example
+
+Notice: 1)@tie{}@code{@@enddots} expands to three periods which in
+turn expands to three @samp{_002e}'s; 2)@tie{}@code{@@u@{B@}} is a `B'
+with a breve accent, which does not exist as a pre-accented Unicode
+character, therefore expands to @samp{B_0306} (B with combining
+breve).
+
+When the Unicode code point is above 0xffff, the transformation is
+@samp{__@var{xxxxxx}}, that is, two leading underscores followed by
+six hex digits. Since Unicode has declared that their highest code
+point is 0x10ffff, this is sufficient. (We felt it was better to
+define this extra escape than to always use six hex digits, since the
+first two would nearly always be zeros.)
+
+This method works fine if the node name consists mostly of ASCII
+characters and contains only few 8-bit ones. If the document is
+written in a language whose script is not based on the Latin alphabet
+(such as, e.g. Ukrainian), it will create file names consisting
+entirely of @samp{_@var{xxxx}} notations, which is inconvenient.
+
+To handle such cases, @command{makeinfo} offers
+@option{--transliterate-file-names} command line option. This option
+enables @dfn{transliteration} of node names into ASCII characters for
+the purposes of file name creation and referencing. The
+transliteration is based on phonetic principle, which makes the
+produced file names easily readable.
+
+For the definition of Unicode Normalization Form C, see Unicode report
+UAX#15, @uref{http://www.unicode.org/reports/tr15/}. Many related
+documents and implementations are available elsewhere on the web.
+
+
+@node HTML Xref Mismatch
+@subsection HTML Cross-reference Mismatch
+@cindex HTML cross-reference mismatch
+@cindex Mismatched HTML cross-reference source and target
+
+As mentioned earlier (@pxref{HTML Xref Link Basics}), the generating
+software has to guess whether a given manual being cross-referenced is
+available in split or monolithic form---and, inevitably, it might
+guess wrong. However, it is possible when the referent manual itself
+is generated, it is possible to handle at least some mismatches.
+
+In the case where we assume the referent is split, but it is actually
+available in mono, the only recourse would be to generate a
+@file{manual/} subdirectory full of HTML files which redirect back to
+the monolithic @file{manual.html}. Since this is essentially the same
+as a split manual in the first place, it's not very appealing.
+
+On the other hand, in the case where we assume the referent is mono,
+but it is actually available in split, it is possible to use
+JavaScript to redirect from the putatively monolithic
+@file{manual.html} to the different @file{manual/node.html} files.
+Here's an example:
+
+@example
+function redirect() @{
+ switch (location.hash) @{
+ case "#Node1":
+ location.replace("manual/Node1.html#Node1"); break;
+ case "#Node2" :
+ location.replace("manual/Node2.html#Node2"); break;
+ @dots{}
+ default:;
+ @}
+@}
+@end example
+
+Then, in the @code{<body>} tag of @file{manual.html}:
+
+@example
+<body onLoad="redirect();">
+@end example
+
+Once again, this is something the software which generated the
+@emph{referent} manual has to do in advance, it's not something the
+software generating the actual cross-reference in the present manual
+can control.
+
+Ultimately, we hope to allow for an external configuration file to
+control which manuals are available from where, and how.
+
+
+@ignore
+-- not yet --
+
+external information
+--------------------
+
+The information for the reference is searched in the file
+`htmlxref.cnf' present in the following directories:
+<srcdir>/.texinfo/, ~/.texinfo/, SYSCONFDIR/texinfo/,
+DATADIR/texinfo/
+The first match should be used.
+
+The file is line-oriented, with the following format:
+ <manualname> <whitespace> <keyword> <whitespace> <urlprefix>
+with <keyword> being "mono" or "split". Thus
+texinfo split http://www.gnu.org/software/texinfo/manual/texinfo/html_node/
+texinfo mono http://www.gnu.org/software/texinfo/manual/texinfo/texinfo.html
+
+If the keyword is 'split', that is the target is split, the urlprefix gives
+the directory and host name.
+If the keyword is 'mono', that is the target is mono, the urlprefix gives
+directory, host and file name.
+
+'#' followed by a space begins comments. '#' followed by another character
+cannot begin comments as there are # in urls.
+
+@end ignore
+
+
+@node Command List
+@appendix @@-Command List
+@cindex Alphabetical @@-command list
+@cindex List of @@-commands
+@cindex @@-command list
+@cindex Reference to @@-commands
+
+Here is an alphabetical list of the @@-commands in Texinfo. Square
+brackets, @t{[}@w{ }@t{]}, indicate optional arguments; an ellipsis,
+@samp{@dots{}}, indicates repeated text.
+
+More specifics on the general syntax of different @@-commands are
+given in the section below.
+
+@menu
+* Command Syntax:: General syntax for varieties of @@-commands.
+@end menu
+
+@sp 1
+@table @code
+@item @@@var{whitespace}
+An @code{@@} followed by a space, tab, or newline produces a normal,
+stretchable, interword space. @xref{Multiple Spaces}.
+
+@item @@!
+Produce an exclamation point that ends a sentence (usually after an
+end-of-sentence capital letter). @xref{Ending a Sentence}.
+
+@item @@"
+@itemx @@'
+Generate an umlaut or acute accent, respectively, over the next
+character, as in @"o and @'o. @xref{Inserting Accents}.
+
+@item @@*
+Force a line break. @xref{Line Breaks}.
+
+@item @@,@{@var{c}@}
+Generate a cedilla accent under @var{c}, as in @,{c}. @xref{Inserting
+Accents}.
+
+@item @@-
+Insert a discretionary hyphenation point. @xref{- and hyphenation}.
+
+@item @@.
+Produce a period that ends a sentence (usually after an
+end-of-sentence capital letter). @xref{Ending a Sentence}.
+
+@item @@/
+Produces no output, but allows a line break. @xref{Line Breaks}.
+
+@item @@:
+Tell @TeX{} to refrain from inserting extra whitespace after an
+immediately preceding period, question mark, exclamation mark, or
+colon, as @TeX{} normally would. @xref{Not Ending a Sentence}.
+
+@item @@=
+Generate a macron (bar) accent over the next character, as in @=o.
+@xref{Inserting Accents}.
+
+@item @@?
+Produce a question mark that ends a sentence (usually after an
+end-of-sentence capital letter). @xref{Ending a Sentence}.
+
+@item @@@@
+Stands for an at sign, @samp{@@}.
+@xref{Atsign Braces Comma, , Inserting @@ and @{@} and @comma{}}.
+
+@item @@\
+Stands for a backslash (@samp{\}) inside @code{@@math}.
+@xref{math,,@code{math}}.
+
+@item @@^
+@itemx @@`
+Generate a circumflex (hat) or grave accent, respectively, over the next
+character, as in @^o and @`e.
+@xref{Inserting Accents}.
+
+@item @@@{
+Stands for a left brace, @samp{@{}.
+@xref{Atsign Braces Comma, , Inserting @@ and @{@} and @comma{}}.
+
+@item @@@}
+Stands for a right-hand brace, @samp{@}}.@*
+@xref{Atsign Braces Comma, , Inserting @@ and @{@} and @comma{}}.
+
+@item @@~
+Generate a tilde accent over the next character, as in @~N.
+@xref{Inserting Accents}.
+
+@item @@AA@{@}
+@itemx @@aa@{@}
+Generate the uppercase and lowercase Scandinavian A-ring letters,
+respectively: @AA{}, @aa{}. @xref{Inserting Accents}.
+
+@item @@abbr@{@var{abbreviation}@}
+Indicate a general abbreviation, such as `Comput.'. @xref{abbr,,
+@code{abbr}}.
+
+@item @@acronym@{@var{acronym}@}
+Indicate an acronym in all capital letters, such as `NASA'.
+@xref{acronym,, @code{acronym}}.
+
+@item @@AE@{@}
+@itemx @@ae@{@}
+Generate the uppercase and lowercase AE ligatures, respectively:
+@AE{}, @ae{}. @xref{Inserting Accents}.
+
+@itemx @@afivepaper
+Change page dimensions for the A5 paper size. @xref{A4 Paper}.
+
+@item @@afourlatex
+@itemx @@afourpaper
+@itemx @@afourwide
+Change page dimensions for the A4 paper size. @xref{A4 Paper}.
+
+@item @@alias @var{new}=@var{existing}
+Make the command @samp{@@@var{new}} a synonym for the existing command
+@samp{@@@var{existing}}. @xref{alias}.
+
+@item @@anchor@{@var{name}@}
+Define @var{name} as the current location for use as a cross-reference
+target. @xref{anchor,, @code{@@anchor}}.
+
+@item @@appendix @var{title}
+Begin an appendix. The title appears in the table of contents. In
+Info, the title is underlined with asterisks. @xref{unnumbered &
+appendix, , The @code{@@unnumbered} and @code{@@appendix} Commands}.
+
+@item @@appendixsec @var{title}
+@itemx @@appendixsection @var{title}
+Begin an appendix section within an appendix. The section title
+appears in the table of contents. In Info, the title is underlined
+with equal signs. @code{@@appendixsection} is a longer spelling of
+the @code{@@appendixsec} command. @xref{unnumberedsec appendixsec
+heading, , Section Commands}.
+
+@item @@appendixsubsec @var{title}
+Begin an appendix subsection. The title appears in the table of
+contents. In Info, the title is underlined with hyphens.
+@xref{unnumberedsubsec appendixsubsec subheading, , Subsection
+Commands}.
+
+@item @@appendixsubsubsec @var{title}
+Begin an appendix subsubsection. The title appears in the table of
+contents. In Info, the title is underlined with periods.
+@xref{subsubsection,, The `subsub' Commands}.
+
+@item @@arrow@{@}
+Generate a right arrow glyph: @samp{@arrow{}}. Used by default
+for @code{@@click}. @xref{Click Sequences}.
+
+@item @@asis
+Used following @code{@@table}, @code{@@ftable}, and @code{@@vtable} to
+print the table's first column without highlighting (``as is'').
+@xref{Two-column Tables}.
+
+@item @@author @var{author}
+Typeset @var{author} flushleft and underline it. @xref{title
+subtitle author, , The @code{@@title} and @code{@@author}
+Commands}.@refill
+
+@item @@b@{@var{text}@}
+Set @var{text} in a @b{bold} font. No effect in Info. @xref{Fonts}.
+
+@ignore
+@item @@br
+Force a paragraph break. If used within a line, follow @code{@@br}
+with braces. @xref{br, , @code{@@br}}.@refill
+@end ignore
+
+@item @@bullet@{@}
+Generate a large round dot, @bullet{} (@samp{*} in Info). Often used
+with @code{@@table}. @xref{bullet, , @code{@@bullet}}.
+
+@item @@bye
+Stop formatting a file. The formatters do not see anything in the
+input file following @code{@@bye}. @xref{Ending a File}.
+
+@item @@c @var{comment}
+Begin a comment in Texinfo. The rest of the line does not appear in
+any output. A synonym for
+@code{@@comment}. @xref{Comments}.
+
+@item @@caption
+Define the full caption for a @code{@@float}. @xref{caption shortcaption}.
+
+@item @@cartouche
+Highlight an example or quotation by drawing a box with rounded
+corners around it. Pair with @code{@@end cartouche}. No effect in
+Info. @xref{cartouche, , Drawing Cartouches Around Examples}.)@refill
+
+@item @@center @var{line-of-text}
+Center the line of text following the command.
+@xref{titlefont center sp, , @code{@@center}}.@refill
+
+@item @@centerchap @var{line-of-text}
+Like @code{@@chapter}, but centers the chapter title. @xref{chapter,,
+@code{@@chapter}}.
+
+@item @@chapheading @var{title}
+Print an unnumbered chapter-like heading, but omit from the table of
+contents. In Info, the title is underlined with asterisks.
+@xref{majorheading & chapheading, , @code{@@majorheading} and
+@code{@@chapheading}}.
+
+@item @@chapter @var{title}
+Begin a numbered chapter. The chapter title appears in the table of
+contents. In Info, the title is underlined with asterisks.
+@xref{chapter, , @code{@@chapter}}.
+
+@item @@cindex @var{entry}
+Add @var{entry} to the index of concepts. @xref{Index Entries, ,
+Defining the Entries of an Index}.@refill
+
+@item @@cite@{@var{reference}@}
+Highlight the name of a book or other reference that has no companion
+Info file. @xref{cite, , @code{@@cite}}.
+
+@item @@click@{@}
+Represent a single ``click'' in a GUI. Used within
+@code{@@clicksequence}. @xref{Click Sequences}.
+
+@item @@clicksequence@{@var{action} @@click@{@} @var{action}@}
+Represent a sequence of clicks in a GUI. @xref{Click Sequences}.
+
+@item @@clickstyle @@@var{cmd}
+Execute @@@var{cmd} for each @code{@@click}; the default is
+@code{@@arrow}. The usual following empty braces on @@@var{cmd} are
+omitted. @xref{Click Sequences}.
+
+@item @@clear @var{flag}
+Unset @var{flag}, preventing the Texinfo formatting commands from
+formatting text between subsequent pairs of @code{@@ifset @var{flag}}
+and @code{@@end ifset} commands, and preventing
+@code{@@value@{@var{flag}@}} from expanding to the value to which
+@var{flag} is set.
+@xref{set clear value, , @code{@@set} @code{@@clear} @code{@@value}}.@refill
+
+@item @@code@{@var{sample-code}@}
+Indicate an expression, a syntactically complete token of a program,
+or a program name. Unquoted in Info output. @xref{code, ,
+@code{@@code}}.
+
+@item @@comma@{@}
+Insert a comma `,' character; only needed when a literal comma would
+be taken as an argument separator. @xref{Inserting a Comma}.
+
+@item @@command@{@var{command-name}@}
+Indicate a command name, such as @command{ls}.
+@xref{command,, @code{@@command}}.
+
+@item @@comment @var{comment}
+Begin a comment in Texinfo. The rest of the line does not appear in
+any output. A synonym for @code{@@c}.
+@xref{Comments}.
+
+@item @@contents
+Print a complete table of contents. Has no effect in Info, which uses
+menus instead. @xref{Contents, , Generating a Table of
+Contents}.@refill
+
+@item @@copyright@{@}
+Generate the copyright symbol @copyright{}. @xref{copyright symbol,,
+@code{@@copyright@{@}}}.
+
+@ignore
+@item @@ctrl@{@var{ctrl-char}@}
+Describe an ASCII control character. Insert actual control character
+into Info file. @xref{ctrl, , @code{@@ctrl}}.
+@end ignore
+
+@item @@defcodeindex @var{index-name}
+Define a new index and its indexing command. Print entries in an
+@code{@@code} font. @xref{New Indices, , Defining New Indices}.
+
+@item @@defcv @var{category} @var{class} @var{name}
+@itemx @@defcvx @var{category} @var{class} @var{name}
+Format a description for a variable associated with a class in
+object-oriented programming. Takes three arguments: the category of
+thing being defined, the class to which it belongs, and its name.
+@xref{Definition Commands}, and @ref{deffnx,, Def Cmds in Detail}.
+
+@item @@deffn @var{category} @var{name} @var{arguments}@dots{}
+@itemx @@deffnx @var{category} @var{name} @var{arguments}@dots{}
+Format a description for a function, interactive command, or similar
+entity that may take arguments. @code{@@deffn} takes as arguments the
+category of entity being described, the name of this particular
+entity, and its arguments, if any. @xref{Definition Commands}.@refill
+
+@item @@defindex @var{index-name}
+Define a new index and its indexing command. Print entries in a roman
+font. @xref{New Indices, , Defining New Indices}.@refill
+
+@item @@definfoenclose @var{newcmd}, @var{before}, @var{after}
+Must be used within @code{@@ifinfo}; create a new command
+@code{@@@var{newcmd}} for Info that marks text by enclosing it in
+strings that precede and follow the text. @xref{definfoenclose}.
+
+@item @@defivar @var{class} @var{instance-variable-name}
+@itemx @@defivarx @var{class} @var{instance-variable-name}
+Format a description for an instance variable in object-oriented
+programming. The command is equivalent to @samp{@@defcv @{Instance
+Variable@} @dots{}}. @xref{Definition Commands}, and @ref{deffnx,,
+Def Cmds in Detail}.
+
+@item @@defmac @var{macroname} @var{arguments}@dots{}
+@itemx @@defmacx @var{macroname} @var{arguments}@dots{}
+Format a description for a macro; equivalent to @samp{@@deffn Macro
+@dots{}}. @xref{Definition Commands}, and @ref{deffnx,, Def Cmds in
+Detail}.
+
+@item @@defmethod @var{class} @var{method-name} @var{arguments}@dots{}
+@itemx @@defmethodx @var{class} @var{method-name} @var{arguments}@dots{}
+Format a description for a method in object-oriented programming;
+equivalent to @samp{@@defop Method @dots{}}. @xref{Definition
+Commands}, and @ref{deffnx,, Def Cmds in Detail}.
+
+@item @@defop @var{category} @var{class} @var{name} @var{arguments}@dots{}
+@itemx @@defopx @var{category} @var{class} @var{name} @var{arguments}@dots{}
+Format a description for an operation in object-oriented programming.
+@code{@@defop} takes as arguments the name of the category of
+operation, the name of the operation's class, the name of the
+operation, and its arguments, if any. @xref{Definition Commands}, and
+@ref{Abstract Objects}.
+
+@item @@defopt @var{option-name}
+@itemx @@defoptx @var{option-name}
+Format a description for a user option; equivalent to @samp{@@defvr
+@{User Option@} @dots{}}. @xref{Definition Commands}, and
+@ref{deffnx,, Def Cmds in Detail}.
+
+@item @@defspec @var{special-form-name} @var{arguments}@dots{}
+@itemx @@defspecx @var{special-form-name} @var{arguments}@dots{}
+Format a description for a special form; equivalent to @samp{@@deffn
+@{Special Form@} @dots{}}. @xref{Definition Commands}, and
+@ref{deffnx,, Def Cmds in Detail}.
+
+@item @@deftp @var{category} @var{name-of-type} @var{attributes}@dots{}
+@itemx @@deftpx @var{category} @var{name-of-type} @var{attributes}@dots{}
+Format a description for a data type; its arguments are the category,
+the name of the type (e.g., @samp{int}) , and then the names of
+attributes of objects of that type. @xref{Definition Commands}, and
+@ref{Data Types}.
+
+@item @@deftypecv @var{category} @var{class} @var{data-type} @var{name}
+@itemx @@deftypecvx @var{category} @var{class} @var{data-type} @var{name}
+Format a description for a typed class variable in object-oriented programming.
+@xref{Definition Commands}, and @ref{Abstract Objects}.
+
+@item @@deftypefn @var{category} @var{data-type} @var{name} @var{arguments}@dots{}
+@itemx @@deftypefnx @var{category} @var{data-type} @var{name} @var{arguments}@dots{}
+Format a description for a function or similar entity that may take
+arguments and that is typed. @code{@@deftypefn} takes as arguments the
+category of entity being described, the type, the name of the
+entity, and its arguments, if any. @xref{Definition Commands}, and
+@ref{deffnx,, Def Cmds in Detail}.
+
+@item @@deftypefun @var{data-type} @var{function-name} @var{arguments}@dots{}
+@itemx @@deftypefunx @var{data-type} @var{function-name} @var{arguments}@dots{}
+Format a description for a function in a typed language.
+The command is equivalent to @samp{@@deftypefn Function @dots{}}.
+@xref{Definition Commands}, and @ref{deffnx,, Def Cmds in Detail}.
+
+@item @@deftypeivar @var{class} @var{data-type} @var{variable-name}
+@itemx @@deftypeivarx @var{class} @var{data-type} @var{variable-name}
+Format a description for a typed instance variable in object-oriented
+programming. @xref{Definition Commands}, and @ref{Abstract Objects}.
+
+@item @@deftypemethod @var{class} @var{data-type} @var{method-name} @var{arguments}@dots{}
+@itemx @@deftypemethodx @var{class} @var{data-type} @var{method-name} @var{arguments}@dots{}
+Format a description for a typed method in object-oriented programming.
+@xref{Definition Commands}, and @ref{deffnx,, Def Cmds in Detail}.
+
+@item @@deftypeop @var{category} @var{class} @var{data-type} @var{name} @var{arguments}@dots{}
+@itemx @@deftypeopx @var{category} @var{class} @var{data-type} @var{name} @var{arguments}@dots{}
+Format a description for a typed operation in object-oriented programming.
+@xref{Definition Commands}, and @ref{Abstract Objects}.
+
+@item @@deftypevar @var{data-type} @var{variable-name}
+@itemx @@deftypevarx @var{data-type} @var{variable-name}
+Format a description for a variable in a typed language. The command is
+equivalent to @samp{@@deftypevr Variable @dots{}}. @xref{Definition
+Commands}, and @ref{deffnx,, Def Cmds in Detail}.
+
+@item @@deftypevr @var{category} @var{data-type} @var{name}
+@itemx @@deftypevrx @var{category} @var{data-type} @var{name}
+Format a description for something like a variable in a typed
+language---an entity that records a value. Takes as arguments the
+category of entity being described, the type, and the name of the
+entity. @xref{Definition Commands}, and @ref{deffnx,, Def Cmds in
+Detail}.
+
+@item @@defun @var{function-name} @var{arguments}@dots{}
+@itemx @@defunx @var{function-name} @var{arguments}@dots{}
+Format a description for a function; equivalent to
+@samp{@@deffn Function @dots{}}. @xref{Definition Commands}, and
+@ref{deffnx,, Def Cmds in Detail}.
+
+@item @@defvar @var{variable-name}
+@itemx @@defvarx @var{variable-name}
+Format a description for a variable; equivalent to @samp{@@defvr
+Variable @dots{}}. @xref{Definition Commands}, and @ref{deffnx,, Def
+Cmds in Detail}.
+
+@item @@defvr @var{category} @var{name}
+@itemx @@defvrx @var{category} @var{name}
+Format a description for any kind of variable. @code{@@defvr} takes
+as arguments the category of the entity and the name of the entity.
+@xref{Definition Commands},
+and @ref{deffnx,, Def Cmds in Detail}.
+
+@item @@detailmenu
+Mark the (optional) detailed node listing in a master menu.
+@xref{Master Menu Parts}.
+
+@item @@dfn@{@var{term}@}
+Indicate the introductory or defining use of a term. @xref{dfn, ,
+@code{@@dfn}}.
+
+@item @@dircategory @var{dirpart}
+Specify a part of the Info directory menu where this file's entry should
+go. @xref{Installing Dir Entries}.
+
+@item @@direntry
+Begin the Info directory menu entry for this file. Pair with
+@code{@@end direntry}. @xref{Installing Dir Entries}.
+
+@item @@display
+Begin a kind of example. Like @code{@@example} (indent text, do not
+fill), but do not select a new font. Pair with @code{@@end display}.
+@xref{display, , @code{@@display}}.
+
+@item @@dmn@{@var{dimension}@}
+Format a unit of measure, as in 12@dmn{pt}. Causes @TeX{} to insert a
+thin space before @var{dimension}. No effect in Info.
+@xref{dmn, , @code{@@dmn}}.
+
+@item @@docbook
+Enter Docbook completely. Pair with @code{@@end docbook}. @xref{Raw
+Formatter Commands}.
+
+@item @@documentdescription
+Set the document description text, included in the HTML output. Pair
+with @code{@@end documentdescription}. @xref{documentdescription,,
+@code{@@documentdescription}}.
+
+@item @@documentencoding @var{enc}
+Declare the input encoding to be @var{enc}.
+@xref{documentencoding,, @code{@@documentencoding}}.
+
+@item @@documentlanguage @var{CC}
+Declare the document language as the two-character ISO-639 abbreviation
+@var{CC}. @xref{documentlanguage,, @code{@@documentlanguage}}.
+
+@item @@dotaccent@{@var{c}@}
+Generate a dot accent over the character @var{c}, as in @dotaccent{o}.
+@xref{Inserting Accents}.
+
+@item @@dots@{@}
+Generate an ellipsis, @samp{@dots{}}.
+@xref{dots, , @code{@@dots}}.@refill
+
+@item @@email@{@var{address}[, @var{displayed-text}]@}
+Indicate an electronic mail address.
+@xref{email, , @code{@@email}}.
+
+@item @@emph@{@var{text}@}
+Emphasize @var{text}, by using @emph{italics} where possible, and
+enclosing in asterisks in Info. @xref{Emphasis, , Emphasizing Text}.
+
+@item @@end @var{environment}
+Ends @var{environment}, as in @samp{@@end example}. @xref{Formatting
+Commands,,@@-commands}.
+
+@item @@env@{@var{environment-variable}@}
+Indicate an environment variable name, such as @env{PATH}.
+@xref{env,, @code{@@env}}.
+
+@item @@enddots@{@}
+Generate an end-of-sentence ellipsis, like this: @enddots{}
+@xref{dots,,@code{@@dots@{@}}}.
+
+@item @@enumerate [@var{number-or-letter}]
+Begin a numbered list, using @code{@@item} for each entry.
+Optionally, start list with @var{number-or-letter}. Pair with
+@code{@@end enumerate}. @xref{enumerate, ,
+@code{@@enumerate}}.@refill
+
+@item @@equiv@{@}
+Indicate to the reader the exact equivalence of two forms with a
+glyph: @samp{@equiv{}}. @xref{Equivalence}.@refill
+
+@item @@euro@{@}
+Generate the Euro currency sign.
+@xref{euro,,@code{@@euro@{@}}}.
+
+@item @@error@{@}
+Indicate to the reader with a glyph that the following text is
+an error message: @samp{@error{}}. @xref{Error Glyph}.@refill
+
+@item @@evenfooting [@var{left}] @@| [@var{center}] @@| [@var{right}]
+@itemx @@evenheading [@var{left}] @@| [@var{center}] @@| [@var{right}]
+Specify page footings resp.@: headings for even-numbered (left-hand)
+pages. @xref{Custom Headings, ,
+How to Make Your Own Headings}.@refill
+
+@item @@everyfooting [@var{left}] @@| [@var{center}] @@| [@var{right}]
+@itemx @@everyheading [@var{left}] @@| [@var{center}] @@| [@var{right}]
+Specify page footings resp.@: headings for every page. Not relevant to
+Info. @xref{Custom Headings, , How to Make Your Own Headings}.
+
+@item @@example
+Begin an example. Indent text, do not fill, and select fixed-width
+font. Pair with @code{@@end example}. @xref{example,, @code{@@example}}.
+
+@item @@exampleindent @var{indent}
+Indent example-like environments by @var{indent} number of spaces
+(perhaps 0). @xref{exampleindent,, Paragraph Indenting}.
+
+@item @@exclamdown@{@}
+Generate an upside-down exclamation point. @xref{Inserting Accents}.
+
+@item @@exdent @var{line-of-text}
+Remove any indentation a line might have. @xref{exdent, ,
+Undoing the Indentation of a Line}.@refill
+
+@item @@expansion@{@}
+Indicate the result of a macro expansion to the reader with a special
+glyph: @samp{@expansion{}}.
+@xref{expansion, , @expansion{} Indicating an Expansion}.@refill
+
+@item @@file@{@var{filename}@}
+Highlight the name of a file, buffer, node, directory, etc. @xref{file, ,
+@code{@@file}}.
+
+@item @@finalout
+Prevent @TeX{} from printing large black warning rectangles beside
+over-wide lines. @xref{Overfull hboxes}.@refill
+
+@item @@findex @var{entry}
+Add @var{entry} to the index of functions. @xref{Index Entries, ,
+Defining the Entries of an Index}.@refill
+
+@item @@float
+Environment to define floating material. Pair with @code{@@end float}.
+@xref{Floats}.
+
+@item @@flushleft
+@itemx @@flushright
+Do not fill text; left (right) justify every line while leaving the
+right (left) end ragged. Leave font as is. Pair with @code{@@end
+flushleft} (@code{@@end flushright}). @code{@@flushright} analogous.
+@xref{flushleft & flushright, , @code{@@flushleft} and
+@code{@@flushright}}.
+
+@item @@footnote@{@var{text-of-footnote}@}
+Enter a footnote. Footnote text is printed at the bottom of the page
+by @TeX{}; Info may format in either `End' node or `Separate' node style.
+@xref{Footnotes}.
+
+@item @@footnotestyle @var{style}
+Specify an Info file's footnote style, either @samp{end} for the end
+node style or @samp{separate} for the separate node style.
+@xref{Footnotes}.
+
+@item @@format
+Begin a kind of example. Like @code{@@display}, but do not indent.
+Pair with @code{@@end format}. @xref{example,, @code{@@example}}.
+
+@item @@ftable @var{formatting-command}
+Begin a two-column table, using @code{@@item} for each entry.
+Automatically enter each of the items in the first column into the
+index of functions. Pair with @code{@@end ftable}. The same as
+@code{@@table}, except for indexing. @xref{ftable vtable, ,
+@code{@@ftable} and @code{@@vtable}}.@refill
+
+@item @@geq@{@}
+Generate a greater-than-or-equal sign, `@geq{}'. @xref{geq leq}.
+
+@item @@group
+Disallow page breaks within following text. Pair with @code{@@end
+group}. Ignored in Info. @xref{group, , @code{@@group}}.
+
+@item @@H@{@var{c}@}
+Generate the long Hungarian umlaut accent over @var{c}, as in @H{o}.
+
+@item @@heading @var{title}
+Print an unnumbered section-like heading, but omit from the table of
+contents. In Info, the title is underlined with equal signs.
+@xref{unnumberedsec appendixsec heading, , Section Commands}.
+
+@item @@headings @var{on-off-single-double}
+Turn page headings on or off, and/or specify single-sided or double-sided
+page headings for printing. @xref{headings on off, , The
+@code{@@headings} Command}.
+
+@item @@headitem
+Begin a heading row in a multitable. @xref{Multitable Rows}.
+
+@item @@html
+Enter HTML completely. Pair with @code{@@end html}. @xref{Raw
+Formatter Commands}.
+
+@item @@hyphenation@{@var{hy-phen-a-ted words}@}
+Explicitly define hyphenation points. @xref{- and hyphenation,,
+@code{@@-} and @code{@@hyphenation}}.
+
+@item @@i@{@var{text}@}
+Set @var{text} in an @i{italic} font. No effect in Info. @xref{Fonts}.
+
+@item @@ifclear @var{txivar}
+If the Texinfo variable @var{txivar} is not set, format the following
+text. Pair with @code{@@end ifclear}. @xref{set clear value, ,
+@code{@@set} @code{@@clear} @code{@@value}}.
+
+@item @@ifdocbook
+@itemx @@ifhtml
+@itemx @@ifinfo
+Begin text that will appear only in the given output format.
+@code{@@ifinfo} output appears in both Info and (for historical
+compatibility) plain text output. Pair with @code{@@end ifdocbook}
+resp.@: @code{@@end ifhtml} resp.@: @code{@@end ifinfo}.
+@xref{Conditionals}.
+
+@item @@ifnotdocbook
+@itemx @@ifnothtml
+@itemx @@ifnotplaintext
+@itemx @@ifnottex
+@itemx @@ifnotxml
+Begin text to be ignored in one output format but not the others.
+@code{@@ifnothtml} text is omitted from HTML output, etc. Pair with
+the corresponding @code{@@end ifnot@var{format}}.
+@xref{Conditionals}.
+
+@itemx @@ifnotinfo
+Begin text to appear in output other than Info and (for historical
+compatibility) plain text. Pair with @code{@@end ifnotinfo}.
+@xref{Conditionals}.
+
+@item @@ifplaintext
+Begin text that will appear only in the plain text output.
+Pair with @code{@@end ifplaintext}. @xref{Conditionals}.
+
+@item @@ifset @var{txivar}
+If the Texinfo variable @var{txivar} is set, format the following
+text. Pair with @code{@@end ifset}. @xref{set clear value, ,
+@code{@@set} @code{@@clear} @code{@@value}}.
+
+@item @@iftex
+Begin text to appear only in the @TeX{} output. Pair with @code{@@end
+iftex}. @xref{Conditionals, , Conditionally Visible Text}.@refill
+
+@item @@ifxml
+Begin text that will appear only in the XML output. Pair with
+@code{@@end ifxml}. @xref{Conditionals}.
+
+@item @@ignore
+Begin text that will not appear in any output. Pair with @code{@@end
+ignore}. @xref{Comments, , Comments and Ignored Text}.
+
+@item @@image@{@var{filename}, [@var{width}], [@var{height}], [@var{alt}], [@var{ext}]@}
+Include graphics image in external @var{filename} scaled to the given
+@var{width} and/or @var{height}, using @var{alt} text and looking for
+@samp{@var{filename}.@var{ext}} in HTML. @xref{Images}.
+
+@item @@include @var{filename}
+Read the contents of Texinfo source file @var{filename}. @xref{Include Files}.
+
+@item @@indicateurl@{@var{indicateurl}@}
+Indicate text that is a uniform resource locator for the World Wide
+Web. @xref{indicateurl, , @code{@@indicateurl}}.
+
+@item @@inforef@{@var{node-name}, [@var{entry-name}], @var{info-file-name}@}
+Make a cross reference to an Info file for which there is no printed
+manual. @xref{inforef, , Cross references using
+@code{@@inforef}}.@refill
+
+@item \input @var{macro-definitions-file}
+Use the specified macro definitions file. This command is used only
+in the first line of a Texinfo file to cause @TeX{} to make use of the
+@file{texinfo} macro definitions file. The backslash in @code{\input}
+is used instead of an @code{@@} because @TeX{} does not
+recognize @code{@@} until after it has read the definitions file.
+@xref{Texinfo File Header}.
+
+@item @@item
+Indicate the beginning of a marked paragraph for @code{@@itemize} and
+@code{@@enumerate}; indicate the beginning of the text of a first column
+entry for @code{@@table}, @code{@@ftable}, and @code{@@vtable}.
+@xref{Lists and Tables}.
+
+@item @@itemize @var{mark-generating-character-or-command}
+Begin an unordered list: indented paragraphs with a mark, such as
+@code{@@bullet}, inside the left margin at the beginning of each
+item. Pair with @code{@@end itemize}. @xref{itemize, ,
+@code{@@itemize}}.
+
+@item @@itemx
+Like @code{@@item} but do not generate extra vertical space above the
+item text. Thus, when several items have the same description, use
+@code{@@item} for the first and @code{@@itemx} for the others.
+@xref{itemx, , @code{@@itemx}}.
+
+@item @@kbd@{@var{keyboard-characters}@}
+Indicate characters of input to be typed by users. @xref{kbd, ,
+@code{@@kbd}}.
+
+@item @@kbdinputstyle @var{style}
+Specify when @code{@@kbd} should use a font distinct from
+@code{@@code}. @xref{kbd, , @code{@@kbd}}.
+
+@item @@key@{@var{key-name}@}
+Indicate the name of a key on a keyboard. @xref{key, , @code{@@key}}.
+
+@item @@kindex @var{entry}
+Add @var{entry} to the index of keys.
+@xref{Index Entries, , Defining the Entries of an Index}.@refill
+
+@item @@L@{@}
+@itemx @@l@{@}
+Generate the uppercase and lowercase Polish suppressed-L letters,
+respectively: @L{}, @l{}.
+
+@item @@LaTeX@{@}
+Generate the @LaTeX{} logo. @xref{tex, , @TeX{} and @LaTeX{}}.
+
+@item @@leq@{@}
+Generate a less-than-or-equal sign, `@leq{}'. @xref{geq leq}.
+
+@item @@lisp
+Begin an example of Lisp code. Indent text, do not fill, and select
+fixed-width font. Pair with @code{@@end lisp}. @xref{lisp, , @code{@@lisp}}.
+
+@item @@listoffloats
+Produce a table-of-contents-like listing of @code{@@float}s.
+@xref{listoffloats}.
+
+@item @@lowersections
+Change subsequent chapters to sections, sections to subsections, and so
+on. @xref{Raise/lower sections, , @code{@@raisesections} and
+@code{@@lowersections}}.@refill
+
+@item @@macro @var{macroname} @{@var{params}@}
+Define a new Texinfo command @code{@@@var{macroname}@{@var{params}@}}.
+Pair with @code{@@end macro}. @xref{Defining Macros}.
+
+@item @@majorheading @var{title}
+Print an unnumbered chapter-like heading, but omit from
+the table of contents. This generates more vertical whitespace before
+the heading than the @code{@@chapheading} command. @xref{majorheading
+& chapheading, , @code{@@majorheading} and @code{@@chapheading}}.
+
+@item @@math@{@var{mathematical-expression}@}
+Format a mathematical expression.
+@xref{math, , @code{@@math}: Inserting Mathematical Expressions}.
+
+@item @@menu
+Mark the beginning of a menu of nodes. No effect in a printed manual.
+Pair with @code{@@end menu}. @xref{Menus}.
+
+@item @@minus@{@}
+Generate a minus sign, `@minus{}'. @xref{minus, , @code{@@minus}}.
+
+@item @@multitable @var{column-width-spec}
+Begin a multi-column table. Begin each row with @code{@@item} or
+@code{@@headitem}, and separate columns with @code{@@tab}. Pair with
+@code{@@end multitable}. @xref{Multitable Column Widths}.
+
+@item @@need @var{n}
+Start a new page in a printed manual if fewer than @var{n} mils
+(thousandths of an inch) remain on the current page. @xref{need, ,
+@code{@@need}}.
+
+@item @@node @var{name}, @var{next}, @var{previous}, @var{up}
+Begin a new node. @xref{node, , @code{@@node}}.
+
+@item @@noindent
+Prevent text from being indented as if it were a new paragraph.
+@xref{noindent, , @code{@@noindent}}.
+
+@item @@novalidate
+Suppress validation of node references and omit creation of auxiliary
+files with @TeX{}. Use before @code{@@setfilename}. @xref{Pointer
+Validation}.
+
+@item @@O@{@}
+@itemx @@o@{@}
+Generate the uppercase and lowercase O-with-slash letters, respectively:
+@O{}, @o{}.
+
+@item @@oddfooting [@var{left}] @@| [@var{center}] @@| [@var{right}]
+@itemx @@oddheading [@var{left}] @@| [@var{center}] @@| [@var{right}]
+Specify page footings resp.@: headings for odd-numbered (right-hand)
+pages. @xref{Custom Headings, ,
+How to Make Your Own Headings}.@refill
+
+@item @@OE@{@}
+@itemx @@oe@{@}
+Generate the uppercase and lowercase OE ligatures, respectively:
+@OE{}, @oe{}. @xref{Inserting Accents}.
+
+@item @@option@{@var{option-name}@}
+Indicate a command-line option, such as @option{-l} or @option{--help}.
+@xref{option,, @code{@@option}}.
+
+@item @@page
+Start a new page in a printed manual. No effect in Info.
+@xref{page, , @code{@@page}}.@refill
+
+@item @@pagesizes [@var{width}][, @var{height}]
+Change page dimensions. @xref{pagesizes}.
+
+@item @@paragraphindent @var{indent}
+Indent paragraphs by @var{indent} number of spaces (perhaps 0); preserve
+source file indentation if @var{indent} is @code{asis}.
+@xref{paragraphindent,, Paragraph Indenting}.
+
+@item @@pindex @var{entry}
+Add @var{entry} to the index of programs. @xref{Index Entries, , Defining
+the Entries of an Index}.@refill
+
+@item @@point@{@}
+Indicate the position of point in a buffer to the reader with a
+glyph: @samp{@point{}}. @xref{Point Glyph, , Indicating
+Point in a Buffer}.@refill
+
+@item @@pounds@{@}
+Generate the pounds sterling currency sign.
+@xref{pounds,,@code{@@pounds@{@}}}.
+
+@item @@print@{@}
+Indicate printed output to the reader with a glyph:
+@samp{@print{}}. @xref{Print Glyph}.@refill
+
+@item @@printindex @var{index-name}
+Generate the alphabetized index for @var{index-name} (using two columns in a printed
+manual). @xref{Printing Indices & Menus}.
+
+@item @@pxref@{@var{node}, [@var{entry}], [@var{node-title}], [@var{info-file}], [@var{manual}]@}
+Make a reference that starts with a lower case `see' in a printed
+manual. Use within parentheses only. Only the first argument is
+mandatory. @xref{pxref, , @code{@@pxref}}.
+
+@item @@questiondown@{@}
+Generate an upside-down question mark. @xref{Inserting Accents}.
+
+@item @@quotation
+Narrow the margins to indicate text that is quoted from another work.
+Takes optional argument of prefix text. Pair with @code{@@end
+quotation}. @xref{quotation, , @code{@@quotation}}.
+
+@item @@r@{@var{text}@}
+Set @var{text} in the regular @r{roman} font. No effect in Info.
+@xref{Fonts}.
+
+@item @@raisesections
+Change subsequent sections to chapters, subsections to sections, and so
+on. @xref{Raise/lower sections, , @code{@@raisesections} and
+@code{@@lowersections}}.@refill
+
+@item @@ref@{@var{node}, [@var{entry}], [@var{node-title}], [@var{info-file}], [@var{manual}]@}
+Make a plain reference that does not start with any special text.
+Follow command with a punctuation mark. Only the first argument is
+mandatory. @xref{ref, , @code{@@ref}}.
+
+@item @@refill
+This command used to refill and indent the paragraph after all the
+other processing has been done. It is no longer needed, since all
+formatters now automatically refill as needed, but you may still see
+it in the source to some manuals, as it does no harm.
+
+@item @@registeredsymbol@{@}
+Generate the legal symbol @registeredsymbol{}. @xref{registered
+symbol,, @code{@@registeredsymbol@{@}}}.
+
+@item @@result@{@}
+Indicate the result of an expression to the reader with a special
+glyph: @samp{@result{}}. @xref{result, , @code{@@result}}.@refill
+
+@item @@ringaccent@{@var{c}@}
+Generate a ring accent over the next character, as in @ringaccent{o}.
+@xref{Inserting Accents}.
+
+@item @@samp@{@var{text}@}
+Indicate a literal example of a sequence of characters, in general.
+Quoted in Info output. @xref{samp, , @code{@@samp}}.
+
+@item @@sansserif@{@var{text}@}
+Set @var{text} in a @sansserif{sans serif} font if possible. No
+effect in Info. @xref{Fonts}.
+
+@item @@sc@{@var{text}@}
+Set @var{text} in a small caps font in printed output, and uppercase
+in Info. @xref{Smallcaps}.
+
+@item @@section @var{title}
+Begin a section within a chapter. The section title appears in the
+table of contents. In Info, the title is underlined with equal signs.
+Within @code{@@chapter} and @code{@@appendix}, the section title is
+numbered; within @code{@@unnumbered}, the section is unnumbered.
+@xref{section, , @code{@@section}}.
+
+@item @@set @var{txivar} [@var{string}]
+Define the Texinfo variable @var{txivar}, optionally to the value
+@var{string}. @xref{set clear value, , @code{@@set} @code{@@clear}
+@code{@@value}}.
+
+@item @@setchapternewpage @var{on-off-odd}
+Specify whether chapters start on new pages, and if so, whether on
+odd-numbered (right-hand) new pages. @xref{setchapternewpage, ,
+@code{@@setchapternewpage}}.
+
+@item @@setcontentsaftertitlepage
+Put the table of contents after the @samp{@@end titlepage} even if the
+@code{@@contents} command is at the end. @xref{Contents}.
+
+@item @@setfilename @var{info-file-name}
+Provide a name to be used for the output files. This command is essential
+for @TeX{} formatting as well, even though it produces no output of
+its own. @xref{setfilename, , @code{@@setfilename}}.
+
+@item @@setshortcontentsaftertitlepage
+Place the short table of contents after the @samp{@@end titlepage}
+command even if the @code{@@shortcontents} command is at the end.
+@xref{Contents}.
+
+@item @@settitle @var{title}
+Specify the title for page headers in a printed manual, and the
+default document description for HTML @samp{<head>}. @xref{settitle,,
+@code{@@settitle}}.
+
+@item @@shortcaption
+Define the short caption for a @code{@@float}. @xref{caption shortcaption}.
+
+@item @@shortcontents
+Print a short table of contents, with chapter-level entries only. Not
+relevant to Info, which uses menus rather than tables of contents.
+@xref{Contents, , Generating a Table of Contents}.
+
+@item @@shorttitlepage @var{title}
+Generate a minimal title page. @xref{titlepage,,@code{@@titlepage}}.
+
+@item @@slanted@{@var{text}@}
+Set @var{text} in a @slanted{slanted} font if possible. No effect
+in Info. @xref{Fonts}.
+
+@item @@smallbook
+Cause @TeX{} to produce a printed manual in a 7 by 9.25 inch format
+rather than the regular 8.5 by 11 inch format. @xref{smallbook, ,
+Printing Small Books}. Also, see @ref{small}.
+
+@item @@smalldisplay
+Begin a kind of example. Like @code{@@smallexample} (narrow margins, no
+filling), but do not select the fixed-width font. Pair with @code{@@end
+smalldisplay}. @xref{small}.
+
+@item @@smallexample
+Begin an example. Do not fill, select fixed-width font, narrow the
+margins. Where possible, print text in a smaller font than with
+@code{@@example}. Pair with @code{@@end smallexample}. @xref{small}.
+
+@item @@smallformat
+Begin a kind of example. Like @code{@@smalldisplay}, but do not narrow
+the margins. Pair with @code{@@end smallformat}. @xref{small}.
+
+@item @@smalllisp
+Begin an example of Lisp code. Same as @code{@@smallexample}. Pair
+with @code{@@end smalllisp}. @xref{small}.
+
+@item @@sp @var{n}
+Skip @var{n} blank lines. @xref{sp, , @code{@@sp}}.@refill
+
+@item @@ss@{@}
+Generate the German sharp-S es-zet letter, @ss{}. @xref{Inserting Accents}.
+
+@item @@strong @{@var{text}@}
+Emphasize @var{text} more strongly than @code{@@emph}, by using
+@strong{boldface} where possible; enclosed in asterisks in Info.
+@xref{emph & strong, , Emphasizing Text}.
+
+@item @@subheading @var{title}
+Print an unnumbered subsection-like heading, but omit from the table
+of contents of a printed manual. In Info, the title is underlined
+with hyphens. @xref{unnumberedsubsec appendixsubsec subheading, ,
+@code{@@unnumberedsubsec} @code{@@appendixsubsec}
+@code{@@subheading}}.
+
+@item @@subsection @var{title}
+Begin a subsection within a section. The subsection title appears in
+the table of contents. In Info, the title is underlined with hyphens.
+Same context-dependent numbering as @code{@@section}. @xref{subsection, ,
+@code{@@subsection}}.
+
+@item @@subsubheading @var{title}
+Print an unnumbered subsubsection-like heading, but omit from the
+table of contents of a printed manual. In Info, the title is
+underlined with periods. @xref{subsubsection, , The `subsub'
+Commands}.
+
+@item @@subsubsection @var{title}
+Begin a subsubsection within a subsection. The subsubsection title
+appears in the table of contents. In Info, the title is underlined
+with periods. Same context-dependent numbering as @code{@@section}.
+@xref{subsubsection, , The `subsub' Commands}.
+
+@item @@subtitle @var{title}
+In a printed manual, set a subtitle in a normal sized font flush to
+the right-hand side of the page. Not relevant to Info, which does not
+have title pages. @xref{title subtitle author, , @code{@@title}
+@code{@@subtitle} and @code{@@author} Commands}.
+
+@item @@summarycontents
+Print a short table of contents. Synonym for @code{@@shortcontents}.
+@xref{Contents, , Generating a Table of Contents}.
+
+@item @@syncodeindex @var{from-index} @var{to-index}
+Merge the index named in the first argument into the index named in
+the second argument, formatting the entries from the first index with
+@code{@@code} . @xref{Combining Indices}.@refill
+
+@item @@synindex @var{from-index} @var{to-index}
+Merge the index named in the first argument into the index named in
+the second argument. Do not change the font of @var{from-index}
+entries. @xref{Combining Indices}.
+
+@item @@t@{@var{text}@}
+Set @var{text} in a @t{fixed-width}, typewriter-like font. No effect
+in Info. @xref{Fonts}.
+
+@item @@tab
+Separate columns in a row of a multitable. @xref{Multitable Rows}.
+
+@item @@table @var{formatting-command}
+Begin a two-column table (description list), using @code{@@item} for
+each entry. Write each first column entry on the same line as
+@code{@@item}. First column entries are printed in the font resulting
+from @var{formatting-command}. Pair with @code{@@end table}.
+@xref{Two-column Tables, , Making a Two-column Table}. Also see
+@ref{ftable vtable, , @code{@@ftable} and @code{@@vtable}}, and
+@ref{itemx, , @code{@@itemx}}.
+
+@item @@TeX@{@}
+Generate the @TeX{} logo. @xref{tex, , @TeX{} and @LaTeX{}}.
+
+@item @@tex
+Enter @TeX{} completely. Pair with @code{@@end tex}. @xref{Raw
+Formatter Commands}.
+
+@item @@thischapter
+@itemx @@thischaptername
+@itemx @@thischapternum
+@itemx @@thisfile
+@itemx @@thispage
+@itemx @@thistitle
+Only allowed in a heading or footing. Stands for, respectively, the
+number and name of the current chapter (in the format `Chapter 1:
+Title'), the current chapter name only, the current chapter number
+only, the filename, the current page number, and the title of the
+document, respectively. @xref{Custom Headings, , How to Make Your Own
+Headings}.
+
+@item @@tie@{@}
+Generate a normal interword space at which a line break is not allowed.
+@xref{tie,, @code{@@tie@{@}}}.
+
+@item @@tieaccent@{@var{cc}@}
+Generate a tie-after accent over the next two characters @var{cc}, as in
+`@tieaccent{oo}'. @xref{Inserting Accents}.
+
+@item @@tindex @var{entry}
+Add @var{entry} to the index of data types. @xref{Index Entries, ,
+Defining the Entries of an Index}.@refill
+
+@item @@title @var{title}
+In a printed manual, set a title flush to the left-hand side of the
+page in a larger than normal font and underline it with a black rule.
+Not relevant to Info, which does not have title pages. @xref{title
+subtitle author, , The @code{@@title} @code{@@subtitle} and
+@code{@@author} Commands}.@refill
+
+@item @@titlefont@{@var{text}@}
+In a printed manual, print @var{text} in a larger than normal font.
+@xref{titlefont center sp, , The @code{@@titlefont} @code{@@center}
+and @code{@@sp} Commands}.
+
+@item @@titlepage
+Begin the title page. Write the command on a line of its own, paired
+with @code{@@end titlepage}. Nothing between @code{@@titlepage} and
+@code{@@end titlepage} appears in Info. @xref{titlepage, ,
+@code{@@titlepage}}.@refill
+
+@item @@today@{@}
+Insert the current date, in `1 Jan 1900' style. @xref{Custom
+Headings, , How to Make Your Own Headings}.@refill
+
+@item @@top @var{title}
+Mark the topmost @code{@@node} in the file, which must be defined on
+the line immediately preceding the @code{@@top} command. The title is
+formatted as a chapter-level heading. The entire top node, including
+the @code{@@node} and @code{@@top} lines, are normally enclosed with
+@code{@@ifnottex ... @@end ifnottex}. In @TeX{} and
+@code{texinfo-format-buffer}, the @code{@@top} command is merely a
+synonym for @code{@@unnumbered}. @xref{makeinfo Pointer Creation, ,
+Creating Pointers with @code{makeinfo}}.
+
+@item @@u@{@var{c}@}
+@itemx @@ubaraccent@{@var{c}@}
+@itemx @@udotaccent@{@var{c}@}
+Generate a breve, underbar, or underdot accent, respectively, over or
+under the character @var{c}, as in @u{o}, @ubaraccent{o},
+@udotaccent{o}. @xref{Inserting Accents}.
+
+@item @@unnumbered @var{title}
+Begin a chapter that appears without chapter numbers of any kind. The
+title appears in the table of contents. In Info, the title is
+underlined with asterisks. @xref{unnumbered & appendix, ,
+@code{@@unnumbered} and @code{@@appendix}}.
+
+@item @@unnumberedsec @var{title}
+Begin a section that appears without section numbers of any kind. The
+title appears in the table of contents of a printed manual. In Info,
+the title is underlined with equal signs. @xref{unnumberedsec
+appendixsec heading, , Section Commands}.
+
+@item @@unnumberedsubsec @var{title}
+Begin an unnumbered subsection. The title appears in the table of
+contents. In Info, the title is underlined with hyphens.
+@xref{unnumberedsubsec appendixsubsec subheading, ,
+@code{@@unnumberedsubsec} @code{@@appendixsubsec}
+@code{@@subheading}}.
+
+@item @@unnumberedsubsubsec @var{title}
+Begin an unnumbered subsubsection. The title appears in the table of
+contents. In Info, the title is underlined with periods.
+@xref{subsubsection, , The `subsub' Commands}.
+
+@item @@uref@{@var{url}[, @var{displayed-text}][, @var{replacement}@}
+@itemx @@url@{@var{url}[, @var{displayed-text}][, @var{replacement}@}
+Define a cross reference to an external uniform resource locator,
+e.g., for the World Wide Web. @xref{uref, , @code{@@uref}}.
+
+@item @@v@{@var{c}@}
+Generate check accent over the character @var{c}, as in @v{o}.
+@xref{Inserting Accents}.
+
+@item @@value@{@var{txivar}@}
+Insert the value, if any, of the Texinfo variable @var{txivar},
+previously defined by @code{@@set}. @xref{set clear value, ,
+@code{@@set} @code{@@clear} @code{@@value}}.
+
+@item @@var@{@var{metasyntactic-variable}@}
+Highlight a metasyntactic variable, which is something that stands for
+another piece of text. @xref{var, , Indicating Metasyntactic
+Variables}.
+
+@item @@verb@{@var{delim} @var{literal} @var{delim}@}
+Output @var{literal}, delimited by the single character @var{delim},
+exactly as is (in the fixed-width font), including any whitespace or
+Texinfo special characters. @xref{verb,,@code{verb}}.
+
+@item @@verbatim
+Output the text of the environment exactly as is (in the fixed-width
+font). Pair with @code{@@end verbatim}. @xref{verbatim,,@code{verbatim}}.
+
+@item @@verbatiminclude @var{filename}
+Output the contents of @var{filename} exactly as is (in the fixed-width font).
+@xref{verbatiminclude,,@code{verbatiminclude}}.
+
+@item @@vindex @var{entry}
+Add @var{entry} to the index of variables. @xref{Index Entries, ,
+Defining the Entries of an Index}.@refill
+
+@item @@vskip @var{amount}
+In a printed manual, insert whitespace so as to push text on the
+remainder of the page towards the bottom of the page. Used in
+formatting the copyright page with the argument @samp{0pt plus
+1filll}. (Note spelling of @samp{filll}.) @code{@@vskip} may be used
+only in contexts ignored for Info. @xref{Copyright}.
+
+@item @@vtable @var{formatting-command}
+Begin a two-column table, using @code{@@item} for each entry.
+Automatically enter each of the items in the first column into the
+index of variables. Pair with @code{@@end vtable}. The same as
+@code{@@table}, except for indexing. @xref{ftable vtable, ,
+@code{@@ftable} and @code{@@vtable}}.@refill
+
+@item @@w@{@var{text}@}
+Disallow line breaks within @var{text}. @xref{w, , @code{@@w}}.
+
+@item @@xml
+Enter XML completely. Pair with @code{@@end xml}. @xref{Raw
+Formatter Commands}.
+
+@item @@xref@{@var{node}, [@var{entry}], [@var{node-title}], [@var{info-file}], [@var{manual}]@}
+Make a reference that starts with `See' in a printed manual. Follow
+command with a punctuation mark. Only the first argument is
+mandatory. @xref{xref, , @code{@@xref}}.
+
+@end table
+
+
+@node Command Syntax
+@section @@-Command Syntax
+@cindex @@-command syntax
+@cindex Syntax, of @@-commands
+@cindex Command syntax
+
+The character @samp{@@} is used to start special Texinfo commands.
+(It has the same meaning that @samp{\} has in plain @TeX{}.) Texinfo
+has four types of @@-command:@refill
+
+@table @asis
+@item 1. Non-alphabetic commands.
+These commands consist of an @@ followed by a punctuation mark or
+other character that is not part of the alphabet. Non-alphabetic
+commands are almost always part of the text within a paragraph. The
+non-alphabetic commands include @code{@@@@}, @code{@@@{}, @code{@@@}},
+@code{@@.}, @code{@@@kbd{SPACE}}, most of the accent commands, and
+many more.
+
+@item 2. Alphabetic commands that do not require arguments.
+These commands start with @@ followed by a word followed by left- and
+right-hand braces. These commands insert special symbols in the
+document; they do not require arguments. For example,
+@code{@@dots@{@}} @result{} @samp{@dots{}}, @code{@@equiv@{@}}
+@result{} @samp{@equiv{}}, @code{@@TeX@{@}} @result{} `@TeX{}',
+and @code{@@bullet@{@}} @result{} @samp{@bullet{}}.@refill
+
+@item 3. Alphabetic commands that require arguments within braces.
+These commands start with @@ followed by a letter or a word, followed by an
+argument within braces. For example, the command @code{@@dfn} indicates
+the introductory or defining use of a term; it is used as follows: @samp{In
+Texinfo, @@@@-commands are @@dfn@{mark-up@} commands.}@refill
+
+@item 4. Alphabetic commands that occupy an entire line.
+These commands occupy an entire line. The line starts with @@,
+followed by the name of the command (a word); for example, @code{@@center}
+or @code{@@cindex}. If no argument is needed, the word is followed by
+the end of the line. If there is an argument, it is separated from
+the command name by a space. Braces are not used.@refill
+@end table
+
+@cindex Braces and argument syntax
+Thus, the alphabetic commands fall into classes that have
+different argument syntaxes. You cannot tell to which class a command
+belongs by the appearance of its name, but you can tell by the
+command's meaning: if the command stands for a glyph, it is in
+class 2 and does not require an argument; if it makes sense to use the
+command together with other text as part of a paragraph, the command
+is in class 3 and must be followed by an argument in braces;
+otherwise, it is in class 4 and uses the rest of the line as its
+argument.@refill
+
+The purpose of having a different syntax for commands of classes 3 and
+4 is to make Texinfo files easier to read, and also to help the GNU
+Emacs paragraph and filling commands work properly. There is only one
+exception to this rule: the command @code{@@refill}, which is always
+used at the end of a paragraph immediately following the final period
+or other punctuation character. @code{@@refill} takes no argument and
+does @emph{not} require braces. @code{@@refill} never confuses the
+Emacs paragraph commands because it cannot appear at the beginning of
+a line. It is also no longer needed, since all formatters now refill
+paragraphs automatically.
+
+
+@node Tips
+@appendix Tips and Hints
+
+Here are some tips for writing Texinfo documentation:@refill
+
+@cindex Tips
+@cindex Usage tips
+@cindex Hints
+@itemize @bullet
+@item
+Write in the present tense, not in the past or the future.
+
+@item
+Write actively! For example, write ``We recommend that @dots{}'' rather
+than ``It is recommended that @dots{}''.
+
+@item
+Use 70 or 72 as your fill column. Longer lines are hard to read.
+
+@item
+Include a copyright notice and copying permissions.
+@end itemize
+
+@subsubheading Index, Index, Index!
+
+Write many index entries, in different ways.
+Readers like indices; they are helpful and convenient.
+
+Although it is easiest to write index entries as you write the body of
+the text, some people prefer to write entries afterwards. In either
+case, write an entry before the paragraph to which it applies. This
+way, an index entry points to the first page of a paragraph that is
+split across pages.
+
+Here are more hints we have found valuable:
+
+@itemize @bullet
+@item
+Write each index entry differently, so each entry refers to a different
+place in the document.
+
+@item
+Write index entries only where a topic is discussed significantly. For
+example, it is not useful to index ``debugging information'' in a
+chapter on reporting bugs. Someone who wants to know about debugging
+information will certainly not find it in that chapter.
+
+@item
+Consistently capitalize the first word of every concept index entry,
+or else consistently use lower case. Terse entries often call for
+lower case; longer entries for capitalization. Whichever case
+convention you use, please use one or the other consistently! Mixing
+the two styles looks bad.
+
+@item
+Always capitalize or use upper case for those words in an index for
+which this is proper, such as names of countries or acronyms. Always
+use the appropriate case for case-sensitive names, such as those in C or
+Lisp.
+
+@item
+Write the indexing commands that refer to a whole section immediately
+after the section command, and write the indexing commands that refer to
+a paragraph before that paragraph.
+
+In the example that follows, a blank line comes after the index
+entry for ``Leaping'':
+
+@example
+@group
+@@section The Dog and the Fox
+@@cindex Jumping, in general
+@@cindex Leaping
+
+@@cindex Dog, lazy, jumped over
+@@cindex Lazy dog jumped over
+@@cindex Fox, jumps over dog
+@@cindex Quick fox jumps over dog
+The quick brown fox jumps over the lazy dog.
+@end group
+@end example
+
+@noindent
+(Note that the example shows entries for the same concept that are
+written in different ways---@samp{Lazy dog}, and @samp{Dog, lazy}---so
+readers can look up the concept in different ways.)
+@end itemize
+
+@subsubheading Blank Lines
+
+@itemize @bullet
+@item
+Insert a blank line between a sectioning command and the first following
+sentence or paragraph, or between the indexing commands associated with
+the sectioning command and the first following sentence or paragraph, as
+shown in the tip on indexing. Otherwise, a formatter may fold title and
+paragraph together.
+
+@item
+Always insert a blank line before an @code{@@table} command and after an
+@code{@@end table} command; but never insert a blank line after an
+@code{@@table} command or before an @code{@@end table} command.
+
+@need 1000
+For example,
+
+@example
+@group
+Types of fox:
+
+@@table @@samp
+@@item Quick
+Jump over lazy dogs.
+@end group
+
+@group
+@@item Brown
+Also jump over lazy dogs.
+@@end table
+
+@end group
+@group
+@@noindent
+On the other hand, @dots{}
+@end group
+@end example
+
+Insert blank lines before and after @code{@@itemize} @dots{} @code{@@end
+itemize} and @code{@@enumerate} @dots{} @code{@@end enumerate} in the
+same way.
+@end itemize
+
+@subsubheading Complete Phrases
+
+Complete phrases are easier to read than @dots{}
+
+@itemize @bullet
+@item
+Write entries in an itemized list as complete sentences; or at least, as
+complete phrases. Incomplete expressions @dots{} awkward @dots{} like
+this.
+
+@item
+Write the prefatory sentence or phrase for a multi-item list or table as
+a complete expression. Do not write ``You can set:''; instead, write
+``You can set these variables:''. The former expression sounds cut off.
+@end itemize
+
+@subsubheading Editions, Dates and Versions
+
+Include edition numbers, version numbers, and dates in the
+@code{@@copying} text (for people reading the Texinfo file, and for the
+legal copyright in the output files). Then use @code{@@insertcopying}
+in the @code{@@titlepage} section (for people reading the printed
+output) and the Top node (for people reading the online output).
+
+It is easiest to do this using @code{@@set} and @code{@@value}.
+@xref{value Example, , @code{@@value} Example}, and @ref{GNU Sample Texts}.
+
+
+@subsubheading Definition Commands
+
+Definition commands are @code{@@deffn}, @code{@@defun},
+@code{@@defmac}, and the like, and enable you to write descriptions in
+a uniform format.@refill
+
+@itemize @bullet
+@item
+Write just one definition command for each entity you define with a
+definition command. The automatic indexing feature creates an index
+entry that leads the reader to the definition.
+
+@item
+Use @code{@@table} @dots{} @code{@@end table} in an appendix that
+contains a summary of functions, not @code{@@deffn} or other definition
+commands.
+@end itemize
+
+@subsubheading Capitalization
+
+@itemize @bullet
+@item
+Capitalize ``Texinfo''; it is a name. Do not write the @samp{x} or
+@samp{i} in upper case.
+
+@item
+Capitalize ``Info''; it is a name.
+
+@item
+Write @TeX{} using the @code{@@TeX@{@}} command. Note the uppercase
+@samp{T} and @samp{X}. This command causes the formatters to
+typeset the name according to the wishes of Donald Knuth, who wrote
+@TeX{}.
+@end itemize
+
+@subsubheading Spaces
+
+Do not use spaces to format a Texinfo file, except inside of
+@code{@@example} @dots{} @code{@@end example} and other literal
+environments and commands.
+
+@need 700
+For example, @TeX{} fills the following:
+
+@example
+@group
+ @@kbd@{C-x v@}
+ @@kbd@{M-x vc-next-action@}
+ Perform the next logical operation
+ on the version-controlled file
+ corresponding to the current buffer.
+@end group
+@end example
+
+@need 950
+@noindent
+so it looks like this:
+
+@iftex
+@quotation
+ @kbd{C-x v}
+ @kbd{M-x vc-next-action}
+ Perform the next logical operation on the version-controlled file
+ corresponding to the current buffer.
+@end quotation
+@end iftex
+@ifnottex
+@quotation
+`C-x v' `M-x vc-next-action' Perform the next logical operation on the
+version-controlled file corresponding to the current buffer.
+@end quotation
+@end ifnottex
+
+@noindent
+In this case, the text should be formatted with
+@code{@@table}, @code{@@item}, and @code{@@itemx}, to create a table.
+
+
+@subsubheading @@code, @@samp, @@var, and @samp{---}
+
+@itemize @bullet
+@item
+Use @code{@@code} around Lisp symbols, including command names.
+For example,
+
+@example
+The main function is @@code@{vc-next-action@}, @dots{}
+@end example
+
+@item
+Avoid putting letters such as @samp{s} immediately after an
+@samp{@@code}. Such letters look bad.
+
+@item
+Use @code{@@var} around meta-variables. Do not write angle brackets
+around them.
+
+@item
+Use three hyphens in a row, @samp{---}, to indicate a long dash. @TeX{}
+typesets these as a long dash and the Info formatters reduce three
+hyphens to two.
+@end itemize
+
+@subsubheading Periods Outside of Quotes
+
+Place periods and other punctuation marks @emph{outside} of quotations,
+unless the punctuation is part of the quotation. This practice goes
+against publishing conventions in the United States, but enables the
+reader to distinguish between the contents of the quotation and the
+whole passage.
+
+For example, you should write the following sentence with the period
+outside the end quotation marks:
+
+@example
+Evidently, @samp{au} is an abbreviation for ``author''.
+@end example
+
+@noindent
+since @samp{au} does @emph{not} serve as an abbreviation for
+@samp{author.} (with a period following the word).
+
+@subsubheading Introducing New Terms
+
+@itemize @bullet
+@item
+Introduce new terms so that a reader who does not know them can
+understand them from context; or write a definition for the term.
+
+For example, in the following, the terms ``check in'', ``register'' and
+``delta'' are all appearing for the first time; the example sentence should be
+rewritten so they are understandable.
+
+@quotation
+The major function assists you in checking in a file to your
+version control system and registering successive sets of changes to
+it as deltas.
+@end quotation
+
+@item
+Use the @code{@@dfn} command around a word being introduced, to indicate
+that the reader should not expect to know the meaning already, and
+should expect to learn the meaning from this passage.
+@end itemize
+
+@subsubheading @@pxref
+
+@c !!! maybe include this in the tips on pxref
+@ignore
+By the way, it is okay to use pxref with something else in front of
+it within the parens, as long as the pxref is followed by the close
+paren, and the material inside the parens is not part of a larger
+sentence. Also, you can use xref inside parens as part of a complete
+sentence so long as you terminate the cross reference with punctuation.
+@end ignore
+Absolutely never use @code{@@pxref} except in the special context for
+which it is designed: inside parentheses, with the closing parenthesis
+following immediately after the closing brace. One formatter
+automatically inserts closing punctuation and the other does not. This
+means that the output looks right both in printed output and in an Info
+file, but only when the command is used inside parentheses.
+
+@subsubheading Invoking from a Shell
+
+You can invoke programs such as Emacs, GCC, and @code{gawk} from a
+shell. The documentation for each program should contain a section that
+describes this. Unfortunately, if the node names and titles for these
+sections are all different, they are difficult for users to find.
+
+So, there is a convention to name such sections with a phrase beginning
+with the word `Invoking', as in `Invoking Emacs'; this way, users can
+find the section easily.
+
+
+@subsubheading ANSI C Syntax
+
+When you use @code{@@example} to describe a C function's calling
+conventions, use the ANSI C syntax, like this:@refill
+
+@example
+void dld_init (char *@@var@{path@});
+@end example
+
+@noindent
+And in the subsequent discussion, refer to the argument values by
+writing the same argument names, again highlighted with
+@code{@@var}.@refill
+
+@need 800
+Avoid the obsolete style that looks like this:@refill
+
+@example
+#include <dld.h>
+
+dld_init (path)
+char *path;
+@end example
+
+Also, it is best to avoid writing @code{#include} above the
+declaration just to indicate that the function is declared in a
+header file. The practice may give the misimpression that the
+@code{#include} belongs near the declaration of the function. Either
+state explicitly which header file holds the declaration or, better
+yet, name the header file used for a group of functions at the
+beginning of the section that describes the functions.@refill
+
+@subsubheading Bad Examples
+
+Here are several examples of bad writing to avoid:
+
+In this example, say, `` @dots{} you must @code{@@dfn}@{check
+in@} the new version.'' That flows better.
+
+@quotation
+When you are done editing the file, you must perform a
+@code{@@dfn}@{check in@}.
+@end quotation
+
+In the following example, say, ``@dots{} makes a unified interface such as VC
+mode possible.''
+
+@quotation
+SCCS, RCS and other version-control systems all perform similar
+functions in broadly similar ways (it is this resemblance which makes
+a unified control mode like this possible).
+@end quotation
+
+And in this example, you should specify what `it' refers to:
+
+@quotation
+If you are working with other people, it assists in coordinating
+everyone's changes so they do not step on each other.
+@end quotation
+
+@subsubheading And Finally @dots{}
+
+@itemize @bullet
+@item
+Pronounce @TeX{} as if the @samp{X} were a Greek `chi', as the last
+sound in the name `Bach'. But pronounce Texinfo as in `speck':
+``teckinfo''.
+
+@item
+Write notes for yourself at the very end of a Texinfo file after the
+@code{@@bye}. None of the formatters process text after the
+@code{@@bye}; it is as if the text were within @code{@@ignore} @dots{}
+@code{@@end ignore}.
+@end itemize
+
+
+@node Sample Texinfo Files
+@appendix Sample Texinfo Files
+@cindex Sample Texinfo files
+
+The first example is from the first chapter (@pxref{Short Sample}),
+given here in its entirety, without commentary. The second
+includes the full texts to be used in GNU manuals.
+
+@menu
+* Short Sample Texinfo File::
+* GNU Sample Texts::
+* Verbatim Copying License::
+* All-permissive Copying License::
+@end menu
+
+
+@node Short Sample Texinfo File
+@section Short Sample
+@cindex Sample Texinfo file, no comments
+
+Here is a complete, short sample Texinfo file, without any commentary.
+You can see this file, with comments, in the first chapter. @xref{Short
+Sample}.
+
+In a nutshell: The @command{makeinfo} program transforms a Texinfo
+source file such as this into an Info file or HTML; and @TeX{} typesets
+it for a printed manual.
+
+
+@sp 1
+@example
+\input texinfo @@c -*-texinfo-*-
+@@c %**start of header
+@@setfilename sample.info
+@@settitle Sample Manual 1.0
+@@c %**end of header
+
+@@copying
+This is a short example of a complete Texinfo file.
+
+Copyright @copyright{} 2005 Free Software Foundation, Inc.
+@@end copying
+
+@@titlepage
+@@title Sample Title
+@@page
+@@vskip 0pt plus 1filll
+@@insertcopying
+@@end titlepage
+
+@@c Output the table of the contents at the beginning.
+@@contents
+
+@@ifnottex
+@@node Top
+@@top GNU Sample
+
+@@insertcopying
+@@end ifnottex
+
+@@menu
+* First Chapter:: The first chapter is the
+ only chapter in this sample.
+* Index:: Complete index.
+@@end menu
+
+
+@@node First Chapter
+@@chapter First Chapter
+
+@@cindex chapter, first
+
+This is the first chapter.
+@@cindex index entry, another
+
+Here is a numbered list.
+
+@@enumerate
+@@item
+This is the first item.
+
+@@item
+This is the second item.
+@@end enumerate
+
+
+@@node Index
+@@unnumbered Index
+
+@@printindex cp
+
+@@bye
+@end example
+
+
+@node GNU Sample Texts
+@section GNU Sample Texts
+
+@cindex GNU sample texts
+@cindex Sample texts, GNU
+@cindex Full texts, GNU
+
+Following is a sample Texinfo document with the full texts that should
+be used in GNU manuals.
+
+As well as the legal texts, it also serves as a practical example of how
+many elements in a GNU system can affect the manual. If you're not
+familiar with all these different elements, don't worry. They're not
+required and a perfectly good manual can be written without them.
+They're included here nonetheless because many manuals do (or could)
+benefit from them.
+
+@xref{Short Sample}, for a minimal example of a Texinfo file.
+@xref{Beginning a File}, for a full explanation of that minimal
+example.
+
+Here are some notes on the example:
+
+@itemize @bullet
+@item
+@cindex $Id
+@cindex CVS $Id
+@cindex RCS $Id
+@cindex Documentation identification
+@cindex Identification of documentation
+The @samp{$Id:} comment is for the CVS (@pxref{Top,, Overview, cvs,
+Concurrent Versions System}) or RCS
+(@url{http://www.gnu.org/software/rcs}) version control systems, which
+expand it into a string such as:
+@example
+$Id: texinfo.txi,v 1.225 2008/09/07 22:47:46 karl Exp $
+@end example
+(This is useful in all sources that use version control, not just manuals.)
+You may wish to include the @samp{$Id:} comment in the @code{@@copying}
+text, if you want a completely unambiguous reference to the
+documentation version.
+
+If you want to literally write @t{@w{$}Id$}, use @code{@@w}:
+@code{@@w@{$@}Id$}. Unfortunately, this technique does not currently
+work in plain text output, since it's not clear what should be done.
+We hope to find a solution in a future release.
+
+@item
+@pindex automake@r{, and version info}
+@vindex UPDATED @r{Automake variable}
+@vindex VERSION @r{Automake variable}
+@pindex time-stamp.el
+The @file{version.texi} in the @code{@@include} command is maintained
+automatically by Automake (@pxref{Top,, Introduction, automake, GNU
+Automake}). It sets the @samp{VERSION} and @samp{UPDATED} values used
+elsewhere. If your distribution doesn't use Automake, but you do use
+Emacs, you may find the time-stamp.el package helpful (@pxref{Time
+Stamps,,,emacs,The GNU Emacs Manual}).
+
+@item
+The @code{@@syncodeindex} command reflects the recommendation to use
+only one index where possible, to make it easier for readers to look up
+index entries.
+
+@item
+The @code{@@dircategory} is for constructing the Info directory.
+@xref{Installing Dir Entries}, which includes a variety of recommended
+category names.
+
+@item
+The `Invoking' node is a GNU standard to help users find the basic
+information about command-line usage of a given program. @xref{Manual
+Structure Details,,,standards, GNU Coding Standards}.
+
+@item
+@cindex GNU Free Documentation License, including entire
+@cindex Free Documentation License, including entire
+It is best to include the entire GNU Free Documentation License in a GNU
+manual, unless the manual is only a few pages long. Of course this
+sample is even shorter than that, but it includes the FDL anyway in
+order to show one conventional way to do so. The @file{fdl.texi} file
+is available on the GNU machines and in the Texinfo and other GNU
+source distributions.
+
+The FDL provides for omitting itself under certain conditions, but in
+that case the sample texts given here have to be modified. @xref{GNU
+Free Documentation License}.
+
+@item
+If the FSF is not the copyright holder, then use the appropriate name.
+
+@item
+If your manual is not published on paper by the FSF, then omit the
+last sentence in the Back-Cover Text that talks about copies from GNU
+Press.
+
+@item
+If your manual has Invariant Sections (again, see the license itself
+for details), then change the text here accordingly.
+
+@item
+For documents that express your personal views, feelings or experiences,
+it is more appropriate to use a license permitting only verbatim
+copying, rather than the FDL. @xref{Verbatim Copying License}.
+
+@end itemize
+
+Here is the sample document:
+
+@verbatim
+\input texinfo @c -*-texinfo-*-
+@comment $Id: texinfo.txi,v 1.225 2008/09/07 22:47:46 karl Exp $
+@comment %**start of header
+@setfilename sample.info
+@include version.texi
+@settitle GNU Sample @value{VERSION}
+@syncodeindex pg cp
+@comment %**end of header
+@copying
+This manual is for GNU Sample (version @value{VERSION}, @value{UPDATED}),
+which is an example in the Texinfo documentation.
+
+Copyright @copyright{} 2007 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.2 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
+
+@dircategory Texinfo documentation system
+@direntry
+* sample: (sample)Invoking sample.
+@end direntry
+
+@titlepage
+@title GNU Sample
+@subtitle for version @value{VERSION}, @value{UPDATED}
+@author A.U. Thor (@email{bug-texinfo@@gnu.org})
+@page
+@vskip 0pt plus 1filll
+@insertcopying
+@end titlepage
+
+@contents
+
+@ifnottex
+@node Top
+@top GNU Sample
+
+This manual is for GNU Sample (version @value{VERSION}, @value{UPDATED}).
+@end ifnottex
+
+@menu
+* Invoking sample::
+* Copying This Manual::
+* Index::
+@end menu
+
+
+@node Invoking sample
+@chapter Invoking sample
+
+@pindex sample
+@cindex invoking @command{sample}
+
+This is a sample manual. There is no sample program to
+invoke, but if there was, you could see its basic usage
+and command line options here.
+
+
+@node GNU Free Documentation License
+@appendix GNU Free Documentation License
+
+@include fdl.texi
+
+
+@node Index
+@unnumbered Index
+
+@printindex cp
+
+@bye
+@end verbatim
+
+
+@node Verbatim Copying License
+@section Verbatim Copying License
+
+@cindex Verbatim copying license
+@cindex License for verbatim copying
+
+For software manuals and other documentation, it is important to use a
+license permitting free redistribution and updating, so that when a free
+program is changed, the documentation can be updated as well.
+
+On the other hand, for documents that express your personal views,
+feelings or experiences, it is more appropriate to use a license
+permitting only verbatim copying.
+
+Here is sample text for such a license permitting verbatim copying only.
+This is just the license text itself. For a complete sample document,
+see the previous sections.
+
+@verbatim
+@copying
+This document is a sample for allowing verbatim copying only.
+
+Copyright @copyright{} 2005 Free Software Foundation, Inc.
+
+@quotation
+Permission is granted to make and distribute verbatim copies
+of this entire document without royalty provided the
+copyright notice and this permission notice are preserved.
+@end quotation
+@end copying
+@end verbatim
+
+
+@node All-permissive Copying License
+@section All-permissive Copying License
+
+@cindex All-permissive copying license
+@cindex License for all-permissive copying
+
+For software manuals and other documentation, it is important to use a
+license permitting free redistribution and updating, so that when a free
+program is changed, the documentation can be updated as well.
+
+On the other hand, for small supporting files, short manuals (under 300
+lines long) and rough documentation (README files, INSTALL files, etc.),
+the full FDL would be overkill. They can use a simple all-permissive
+license.
+
+Here is sample text for such an all-permissive license. This is just
+the license text itself. For a complete sample document, see the
+previous sections.
+
+@example
+Copyright @copyright{} 2005 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.
+@end example
+
+
+@node Include Files
+@appendix Include Files
+@cindex Include files
+
+When @TeX{} or an Info formatting command sees an @code{@@include}
+command in a Texinfo file, it processes the contents of the file named
+by the command and incorporates them into the DVI or Info file being
+created. Index entries from the included file are incorporated into
+the indices of the output file.
+
+Include files let you keep a single large document as a collection of
+conveniently small parts.
+
+@menu
+* Using Include Files:: How to use the @code{@@include} command.
+* texinfo-multiple-files-update:: How to create and update nodes and
+ menus when using included files.
+* Include Files Requirements:: @code{texinfo-multiple-files-update} needs.
+* Sample Include File:: A sample outer file with included files
+ within it; and a sample included file.
+* Include Files Evolution:: How use of the @code{@@include} command
+ has changed over time.
+@end menu
+
+@node Using Include Files
+@section How to Use Include Files
+@findex include
+
+To include another file within a Texinfo file, write the
+@code{@@include} command at the beginning of a line and follow it on
+the same line by the name of a file to be included. For example:
+
+@example
+@@include buffers.texi
+@end example
+
+The name of the file is taken literally, with a single exception:
+@code{@@value@{@var{var}@}} references are expanded. This makes it
+possible to reliably include files in other directories in a
+distribution. @xref{verbatiminclude,,@code{@@verbatiminclude}}, for
+an example.
+
+An included file should simply be a segment of text that you expect to
+be included as is into the overall or @dfn{outer} Texinfo file; it
+should not contain the standard beginning and end parts of a Texinfo
+file. In particular, you should not start an included file with a
+line saying @samp{\input texinfo}; if you do, that phrase is inserted
+into the output file as is. Likewise, you should not end an included
+file with an @code{@@bye} command; nothing after @code{@@bye} is
+formatted.
+
+In the past, you were required to write an @code{@@setfilename} line at the
+beginning of an included file, but no longer. Now, it does not matter
+whether you write such a line. If an @code{@@setfilename} line exists
+in an included file, it is ignored.@refill
+
+Conventionally, an included file begins with an @code{@@node} line that
+is followed by an @code{@@chapter} line. Each included file is one
+chapter. This makes it easy to use the regular node and menu creating
+and updating commands to create the node pointers and menus within the
+included file. However, the simple Emacs node and menu creating and
+updating commands do not work with multiple Texinfo files. Thus you
+cannot use these commands to fill in the `Next', `Previous', and `Up'
+pointers of the @code{@@node} line that begins the included file. Also,
+you cannot use the regular commands to create a master menu for the
+whole file. Either you must insert the menus and the `Next',
+`Previous', and `Up' pointers by hand, or you must use the GNU Emacs
+Texinfo mode command, @code{texinfo-multiple-files-update}, that is
+designed for @code{@@include} files.@refill
+
+When an included file does not have any node lines in it, the
+multiple files update command does not try to create a menu entry
+for it. Consequently, you can include any file, such as a
+version or an update file without node lines, not just files that
+are chapters. Small includable files like this are created by
+Automake (@pxref{GNU Sample Texts}).
+
+
+@node texinfo-multiple-files-update
+@section @code{texinfo-multiple-files-update}
+@findex texinfo-multiple-files-update
+
+GNU Emacs Texinfo mode provides the @code{texinfo-multiple-files-update}
+command. This command creates or updates `Next', `Previous', and `Up'
+pointers of included files as well as those in the outer or overall
+Texinfo file, and it creates or updates a main menu in the outer file.
+Depending whether you call it with optional arguments, the command
+updates only the pointers in the first @code{@@node} line of the
+included files or all of them:@refill
+
+@table @kbd
+@item M-x texinfo-multiple-files-update
+Called without any arguments:@refill
+
+@itemize @minus
+@item
+Create or update the `Next', `Previous', and `Up' pointers of the
+first @code{@@node} line in each file included in an outer or overall
+Texinfo file.@refill
+
+@item
+Create or update the `Top' level node pointers of the outer or
+overall file.@refill
+
+@item
+Create or update a main menu in the outer file.@refill
+@end itemize
+
+@item C-u M-x texinfo-multiple-files-update
+Called with @kbd{C-u} as a prefix argument:
+
+@itemize @minus{}
+@item
+Create or update pointers in the first @code{@@node} line in each
+included file.
+
+@item
+Create or update the `Top' level node pointers of the outer file.
+
+@item
+Create and insert a master menu in the outer file. The master menu
+is made from all the menus in all the included files.@refill
+@end itemize
+
+@item C-u 8 M-x texinfo-multiple-files-update
+Called with a numeric prefix argument, such as @kbd{C-u 8}:
+
+@itemize @minus
+@item
+Create or update @strong{all} the `Next', `Previous', and `Up' pointers
+of all the included files.@refill
+
+@item
+Create or update @strong{all} the menus of all the included
+files.@refill
+
+@item
+Create or update the `Top' level node pointers of the outer or
+overall file.@refill
+
+@item
+And then create a master menu in the outer file. This is similar to
+invoking @code{texinfo-master-menu} with an argument when you are
+working with just one file.@refill
+@end itemize
+@end table
+
+Note the use of the prefix argument in interactive use: with a regular
+prefix argument, just @w{@kbd{C-u}}, the
+@code{texinfo-multiple-files-update} command inserts a master menu;
+with a numeric prefix argument, such as @kbd{C-u 8}, the command
+updates @strong{every} pointer and menu in @strong{all} the files and then inserts a
+master menu.@refill
+
+
+@node Include Files Requirements
+@section Include Files Requirements
+@cindex Include files requirements
+@cindex Requirements for include files
+
+If you plan to use the @code{texinfo-multiple-files-update} command,
+the outer Texinfo file that lists included files within it should
+contain nothing but the beginning and end parts of a Texinfo file, and
+a number of @code{@@include} commands listing the included files. It
+should not even include indices, which should be listed in an included
+file of their own.@refill
+
+Moreover, each of the included files must contain exactly one highest
+level node (conventionally, @code{@@chapter} or equivalent),
+and this node must be the first node in the included file.
+Furthermore, each of these highest level nodes in each included file
+must be at the same hierarchical level in the file structure.
+Usually, each is an @code{@@chapter}, an @code{@@appendix}, or an
+@code{@@unnumbered} node. Thus, normally, each included file contains
+one, and only one, chapter or equivalent-level node.@refill
+
+The outer file should contain only @emph{one} node, the `Top' node. It
+should @emph{not} contain any nodes besides the single `Top' node. The
+@code{texinfo-multiple-files-update} command will not process
+them.@refill
+
+
+@node Sample Include File
+@section Sample File with @code{@@include}
+@cindex Sample @code{@@include} file
+@cindex Include file sample
+@cindex @code{@@include} file sample
+
+Here is an example of an outer Texinfo file with @code{@@include} files
+within it before running @code{texinfo-multiple-files-update}, which
+would insert a main or master menu:
+
+@example
+@group
+\input texinfo @@c -*-texinfo-*-
+@c %**start of header
+@@setfilename include-example.info
+@@settitle Include Example
+@c %**end of header
+@end group
+
+... @xref{Sample Texinfo Files}, for
+examples of the rest of the frontmatter ...
+
+@group
+@@ifnottex
+@@node Top
+@@top Include Example
+@@end ifnottex
+@end group
+
+@group
+@@include foo.texinfo
+@@include bar.texinfo
+@@include concept-index.texinfo
+@@bye
+@end group
+@end example
+
+An included file, such as @file{foo.texinfo}, might look like this:
+
+@example
+@group
+@@node First
+@@chapter First Chapter
+
+Contents of first chapter @dots{}
+@end group
+@end example
+
+The full contents of @file{concept-index.texinfo} might be as simple as this:
+
+@example
+@group
+@@node Concept Index
+@@unnumbered Concept Index
+
+@@printindex cp
+@end group
+@end example
+
+The outer Texinfo source file for @cite{The GNU Emacs Lisp Reference
+Manual} is named @file{elisp.texi}. This outer file contains a master
+menu with 417 entries and a list of 41 @code{@@include}
+files.
+
+
+@node Include Files Evolution
+@section Evolution of Include Files
+
+When Info was first created, it was customary to create many small
+Info files on one subject. Each Info file was formatted from its own
+Texinfo source file. This custom meant that Emacs did not need to
+make a large buffer to hold the whole of a large Info file when
+someone wanted information; instead, Emacs allocated just enough
+memory for the small Info file that contained the particular
+information sought. This way, Emacs could avoid wasting memory.@refill
+
+References from one file to another were made by referring to the file
+name as well as the node name. (@xref{Other Info Files, , Referring to
+Other Info Files}. Also, see @ref{Four and Five Arguments, ,
+@code{@@xref} with Four and Five Arguments}.)@refill
+
+Include files were designed primarily as a way to create a single,
+large printed manual out of several smaller Info files. In a printed
+manual, all the references were within the same document, so @TeX{}
+could automatically determine the references' page numbers. The Info
+formatting commands used include files only for creating joint
+indices; each of the individual Texinfo files had to be formatted for
+Info individually. (Each, therefore, required its own
+@code{@@setfilename} line.)@refill
+
+However, because large Info files are now split automatically, it is
+no longer necessary to keep them small.@refill
+
+Nowadays, multiple Texinfo files are used mostly for large documents,
+such as @cite{The GNU Emacs Lisp Reference Manual}, and for projects
+in which several different people write different sections of a
+document simultaneously.@refill
+
+In addition, the Info formatting commands have been extended to work
+with the @code{@@include} command so as to create a single large Info
+file that is split into smaller files if necessary. This means that
+you can write menus and cross references without naming the different
+Texinfo files.@refill
+
+
+@node Headings
+@appendix Page Headings
+@cindex Headings
+@cindex Footings
+@cindex Page numbering
+@cindex Page headings
+@cindex Formatting headings and footings
+
+Most printed manuals contain headings along the top of every page
+except the title and copyright pages. Some manuals also contain
+footings. (Headings and footings have no meaning to Info, which is
+not paginated.)@refill
+
+@menu
+* Headings Introduced:: Conventions for using page headings.
+* Heading Format:: Standard page heading formats.
+* Heading Choice:: How to specify the type of page heading.
+* Custom Headings:: How to create your own headings and footings.
+@end menu
+
+@node Headings Introduced
+@section Headings Introduced
+
+Texinfo provides standard page heading formats for manuals that are
+printed on one side of each sheet of paper and for manuals that are
+printed on both sides of the paper. Typically, you will use these
+formats, but you can specify your own format if you wish.@refill
+
+In addition, you can specify whether chapters should begin on a new
+page, or merely continue the same page as the previous chapter; and if
+chapters begin on new pages, you can specify whether they must be
+odd-numbered pages.@refill
+
+By convention, a book is printed on both sides of each sheet of paper.
+When you open a book, the right-hand page is odd-numbered, and
+chapters begin on right-hand pages---a preceding left-hand page is
+left blank if necessary. Reports, however, are often printed on just
+one side of paper, and chapters begin on a fresh page immediately
+following the end of the preceding chapter. In short or informal
+reports, chapters often do not begin on a new page at all, but are
+separated from the preceding text by a small amount of whitespace.@refill
+
+The @code{@@setchapternewpage} command controls whether chapters begin
+on new pages, and whether one of the standard heading formats is used.
+In addition, Texinfo has several heading and footing commands that you
+can use to generate your own heading and footing formats.@refill
+
+In Texinfo, headings and footings are single lines at the tops and
+bottoms of pages; you cannot create multiline headings or footings.
+Each header or footer line is divided into three parts: a left part, a
+middle part, and a right part. Any part, or a whole line, may be left
+blank. Text for the left part of a header or footer line is set
+flushleft; text for the middle part is centered; and, text for the
+right part is set flushright.@refill
+
+@node Heading Format
+@comment node-name, next, previous, up
+@section Standard Heading Formats
+
+Texinfo provides two standard heading formats, one for manuals printed
+on one side of each sheet of paper, and the other for manuals printed
+on both sides of the paper.
+
+By default, nothing is specified for the footing of a Texinfo file,
+so the footing remains blank.@refill
+
+The standard format for single-sided printing consists of a header
+line in which the left-hand part contains the name of the chapter, the
+central part is blank, and the right-hand part contains the page
+number.@refill
+
+@need 950
+A single-sided page looks like this:
+
+@example
+@group
+ _______________________
+ | |
+ | chapter page number |
+ | |
+ | Start of text ... |
+ | ... |
+ | |
+@end group
+@end example
+
+The standard format for two-sided printing depends on whether the page
+number is even or odd. By convention, even-numbered pages are on the
+left- and odd-numbered pages are on the right. (@TeX{} will adjust the
+widths of the left- and right-hand margins. Usually, widths are
+correct, but during double-sided printing, it is wise to check that
+pages will bind properly---sometimes a printer will produce output in
+which the even-numbered pages have a larger right-hand margin than the
+odd-numbered pages.)@refill
+
+In the standard double-sided format, the left part of the left-hand
+(even-numbered) page contains the page number, the central part is
+blank, and the right part contains the title (specified by the
+@code{@@settitle} command). The left part of the right-hand
+(odd-numbered) page contains the name of the chapter, the central part
+is blank, and the right part contains the page number.@refill
+
+@need 750
+Two pages, side by side as in an open book, look like this:@refill
+
+@example
+@group
+ _______________________ _______________________
+ | | | |
+ | page number title | | chapter page number |
+ | | | |
+ | Start of text ... | | More text ... |
+ | ... | | ... |
+ | | | |
+@end group
+@end example
+
+@noindent
+The chapter name is preceded by the word ``Chapter'', the chapter number
+and a colon. This makes it easier to keep track of where you are in the
+manual.@refill
+
+@node Heading Choice
+@comment node-name, next, previous, up
+@section Specifying the Type of Heading
+
+@TeX{} does not begin to generate page headings for a standard Texinfo
+file until it reaches the @code{@@end titlepage} command. Thus, the
+title and copyright pages are not numbered. The @code{@@end
+titlepage} command causes @TeX{} to begin to generate page headings
+according to a standard format specified by the
+@code{@@setchapternewpage} command that precedes the
+@code{@@titlepage} section.@refill
+
+@need 1000
+There are four possibilities:@refill
+
+@table @asis
+@item No @code{@@setchapternewpage} command
+Cause @TeX{} to specify the single-sided heading format, with chapters
+on new pages. This is the same as @code{@@setchapternewpage on}.@refill
+
+@item @code{@@setchapternewpage on}
+Specify the single-sided heading format, with chapters on new pages.@refill
+
+@item @code{@@setchapternewpage off}
+Cause @TeX{} to start a new chapter on the same page as the last page of
+the preceding chapter, after skipping some vertical whitespace. Also
+cause @TeX{} to typeset for single-sided printing. (You can override
+the headers format with the @code{@@headings double} command; see
+@ref{headings on off, , The @code{@@headings} Command}.)@refill
+
+@item @code{@@setchapternewpage odd}
+Specify the double-sided heading format, with chapters on new pages.@refill
+@end table
+
+@noindent
+Texinfo lacks an @code{@@setchapternewpage even} command.@refill
+
+@node Custom Headings
+@comment node-name, next, previous, up
+@section How to Make Your Own Headings
+
+You can use the standard headings provided with Texinfo or specify
+your own. By default, Texinfo has no footers, so if you specify them,
+the available page size for the main text will be slightly reduced.
+
+Texinfo provides six commands for specifying headings and
+footings:
+@itemize @bullet
+@item
+@code{@@everyheading} @code{@@everyfooting} generate page headers and
+footers that are the same for both even- and odd-numbered pages.
+@item
+@code{@@evenheading} and @code{@@evenfooting} command generate headers
+and footers for even-numbered (left-hand) pages.
+@item
+@code{@@oddheading} and @code{@@oddfooting} generate headers and footers
+for odd-numbered (right-hand) pages.
+@end itemize
+
+Write custom heading specifications in the Texinfo file immediately
+after the @code{@@end titlepage} command.
+You must cancel the predefined heading commands with the
+@code{@@headings off} command before defining your own
+specifications.
+
+@need 1000
+Here is how to tell @TeX{} to place the chapter name at the left, the
+page number in the center, and the date at the right of every header
+for both even- and odd-numbered pages:
+
+@example
+@group
+@@headings off
+@@everyheading @@thischapter @@| @@thispage @@| @@today@{@}
+@end group
+@end example
+
+@noindent
+You need to divide the left part from the central part and the central
+part from the right part by inserting @samp{@@|} between parts.
+Otherwise, the specification command will not be able to tell where
+the text for one part ends and the next part begins.
+
+Each part can contain text or @@-commands. The text
+is printed as if the part were within an ordinary paragraph in the
+body of the page. The @@-commands replace
+themselves with the page number, date, chapter name, or
+whatever.
+
+@need 950
+Here are the six heading and footing commands:
+
+@table @code
+@item @@everyheading @var{left} @@| @var{center} @@| @var{right}
+@itemx @@everyfooting @var{left} @@| @var{center} @@| @var{right}
+@findex everyheading
+@findex everyfooting
+The `every' commands specify the format for both even- and odd-numbered
+pages. These commands are for documents that are printed on one side
+of each sheet of paper, or for documents in which you want symmetrical
+headers or footers.
+
+@item @@evenheading @var{left} @@| @var{center} @@| @var{right}
+@itemx @@oddheading @var{left} @@| @var{center} @@| @var{right}
+@itemx @@evenfooting @var{left} @@| @var{center} @@| @var{right}
+@itemx @@oddfooting @var{left} @@| @var{center} @@| @var{right}
+@findex evenheading
+@findex evenfooting
+@findex oddheading
+@findex oddfooting
+The `even' and `odd' commands specify the format for even-numbered
+pages and odd-numbered pages. These commands are for books and
+manuals that are printed on both sides of each sheet of paper.
+@end table
+
+Use the @samp{@@this@dots{}} series of @@-commands to
+provide the names of chapters
+and sections and the page number. You can use the
+@samp{@@this@dots{}} commands in the left, center, or right portions
+of headers and footers, or anywhere else in a Texinfo file so long as
+they are between @code{@@iftex} and @code{@@end iftex} commands.
+
+@need 1000
+Here are the @samp{@@this@dots{}} commands:
+
+@table @code
+@item @@thispage
+@findex thispage
+Expands to the current page number.
+
+@item @@thissectionname
+@findex thissectionname
+Expands to the name of the current section.
+
+@item @@thissectionnum
+@findex thissectionnum
+Expands to the number of the current section.
+
+@item @@thissection
+@findex thissection
+Expands to the number and name of the current section, in the format
+`Section 1: Title'.
+
+@item @@thischaptername
+@findex thischaptername
+Expands to the name of the current chapter.
+
+@item @@thischapternum
+@findex thischapternum
+Expands to the number of the current chapter, or letter of the current
+appendix.
+
+@item @@thischapter
+@findex thischapter
+Expands to the number and name of the current
+chapter, in the format `Chapter 1: Title'.
+
+@item @@thistitle
+@findex thistitle
+Expands to the name of the document, as specified by the
+@code{@@settitle} command.
+
+@item @@thisfile
+@findex thisfile
+For @code{@@include} files only: expands to the name of the current
+@code{@@include} file. If the current Texinfo source file is not an
+@code{@@include} file, this command has no effect. This command does
+@emph{not} provide the name of the current Texinfo source file unless
+it is an @code{@@include} file. (@xref{Include Files}, for more
+information about @code{@@include} files.)
+@end table
+
+@noindent
+You can also use the @code{@@today@{@}} command, which expands to the
+current date, in `1 Jan 1900' format.
+@findex today
+
+Other @@-commands and text are printed in a header or footer just as
+if they were in the body of a page. It is useful to incorporate text,
+particularly when you are writing drafts:
+
+@example
+@group
+@@headings off
+@@everyheading @@emph@{Draft!@} @@| @@thispage @@| @@thischapter
+@@everyfooting @@| @@| Version: 0.27: @@today@{@}
+@end group
+@end example
+
+Beware of overlong titles: they may overlap another part of the
+header or footer and blot it out.
+
+If you have very short chapters and/or sections, several of them can
+appear on a single page. You can specify which chapters and sections
+you want @code{@@thischapter}, @code{@@thissection} and other such
+macros to refer to on such pages as follows:
+
+@table @code
+@item @@everyheadingmarks @var{ref}
+@itemx @@everyfootingmarks @var{ref}
+@findex everyheadingmarks
+@findex everyfootingmarks
+The @var{ref} argument can be either @code{top} (the @code{@@this...}
+commands will refer to the chapter/section at the top of a page) or
+@code{bottom} (the commands will reflect the situation at the bottom
+of a page). These @samp{@@every...} commands specify what to do on
+both even- and odd-numbered pages.
+
+@item @@evenheadingmarks @var{ref}
+@itemx @@oddheadingmarks @var{ref}
+@itemx @@evenfootingmarks @var{ref}
+@itemx @@oddfootingmarks @var{ref}
+@findex evenheadingmarks
+@findex oddheadingmarks
+@findex evenfootingmarks
+@findex oddfootingmarks
+These @samp{@@even...} and @samp{@@odd...} commands specify what to do
+on only even- or odd-numbered pages, respectively. The @var{ref}
+argument is the same as with the @samp{@@every...} commands.
+@end table
+
+Write these commands immediately after the @code{@@...contents}
+commands, or after the @code{@@end titlepage} command if you don't
+have a table of contents or if it is printed at the end of your
+manual.
+
+By default the @code{@@this...} commands reflect the situation at the
+bottom of a page both in headings and in footings.
+
+
+@node Catching Mistakes
+@appendix Formatting Mistakes
+@cindex Structure, catching mistakes in
+@cindex Nodes, catching mistakes
+@cindex Catching mistakes
+@cindex Correcting mistakes
+@cindex Mistakes, catching
+@cindex Problems, catching
+@cindex Debugging the Texinfo structure
+
+Besides mistakes in the content of your documentation, there are two
+kinds of mistake you can make with Texinfo: you can make mistakes with
+@@-commands, and you can make mistakes with the structure of the nodes
+and chapters.
+
+Emacs has two tools for catching the @@-command mistakes and two for
+catching structuring mistakes.@refill
+
+For finding problems with @@-commands, you can run @TeX{} or a region
+formatting command on the region that has a problem; indeed, you can
+run these commands on each region as you write it.@refill
+
+For finding problems with the structure of nodes and chapters, you can use
+@kbd{C-c C-s} (@code{texinfo-show-structure}) and the related @code{occur}
+command and you can use the @kbd{M-x Info-validate} command.@refill
+
+@menu
+* makeinfo Preferred:: @code{makeinfo} finds errors.
+* Debugging with Info:: How to catch errors with Info formatting.
+* Debugging with TeX:: How to catch errors with @TeX{} formatting.
+* Using texinfo-show-structure:: How to use @code{texinfo-show-structure}.
+* Using occur:: How to list all lines containing a pattern.
+* Running Info-Validate:: How to find badly referenced nodes.
+@end menu
+
+
+@node makeinfo Preferred
+@section @code{makeinfo} Find Errors
+
+The @code{makeinfo} program does an excellent job of catching errors
+and reporting them---far better than @code{texinfo-format-region} or
+@code{texinfo-format-buffer}. In addition, the various functions for
+automatically creating and updating node pointers and menus remove
+many opportunities for human error.@refill
+
+If you can, use the updating commands to create and insert pointers
+and menus. These prevent many errors. Then use @code{makeinfo} (or
+its Texinfo mode manifestations, @code{makeinfo-region} and
+@code{makeinfo-buffer}) to format your file and check for other
+errors. This is the best way to work with Texinfo. But if you
+cannot use @code{makeinfo}, or your problem is very puzzling, then you
+may want to use the tools described in this appendix.@refill
+
+@node Debugging with Info
+@comment node-name, next, previous, up
+@section Catching Errors with Info Formatting
+@cindex Catching errors with Info formatting
+@cindex Debugging with Info formatting
+
+After you have written part of a Texinfo file, you can use the
+@code{texinfo-format-region} or the @code{makeinfo-region} command to
+see whether the region formats properly.@refill
+
+Most likely, however, you are reading this section because for some
+reason you cannot use the @code{makeinfo-region} command; therefore, the
+rest of this section presumes that you are using
+@code{texinfo-format-region}.@refill
+
+If you have made a mistake with an @@-command,
+@code{texinfo-format-region} will stop processing at or after the
+error and display an error message. To see where in the buffer the
+error occurred, switch to the @samp{*Info Region*} buffer; the cursor
+will be in a position that is after the location of the error. Also,
+the text will not be formatted after the place where the error
+occurred (or more precisely, where it was detected).@refill
+
+For example, if you accidentally end a menu with the command @code{@@end
+menus} with an `s' on the end, instead of with @code{@@end menu}, you
+will see an error message that says:@refill
+
+@example
+@@end menus is not handled by texinfo
+@end example
+
+@noindent
+The cursor will stop at the point in the buffer where the error
+occurs, or not long after it. The buffer will look like this:@refill
+
+@example
+@group
+---------- Buffer: *Info Region* ----------
+* Menu:
+
+* Using texinfo-show-structure:: How to use
+ `texinfo-show-structure'
+ to catch mistakes.
+* Running Info-Validate:: How to check for
+ unreferenced nodes.
+@@end menus
+@point{}
+---------- Buffer: *Info Region* ----------
+@end group
+@end example
+
+The @code{texinfo-format-region} command sometimes provides slightly
+odd error messages. For example, the following cross reference fails to format:@refill
+
+@example
+(@@xref@{Catching Mistakes, for more info.)
+@end example
+
+@noindent
+In this case, @code{texinfo-format-region} detects the missing closing
+brace but displays a message that says @samp{Unbalanced parentheses}
+rather than @samp{Unbalanced braces}. This is because the formatting
+command looks for mismatches between braces as if they were
+parentheses.@refill
+
+Sometimes @code{texinfo-format-region} fails to detect mistakes. For
+example, in the following, the closing brace is swapped with the
+closing parenthesis:@refill
+
+@example
+(@@xref@{Catching Mistakes), for more info.@}
+@end example
+
+@noindent
+Formatting produces:
+@example
+(*Note for more info.: Catching Mistakes)
+@end example
+
+The only way for you to detect this error is to realize that the
+reference should have looked like this:@refill
+
+@example
+(*Note Catching Mistakes::, for more info.)
+@end example
+
+Incidentally, if you are reading this node in Info and type @kbd{f
+@key{RET}} (@code{Info-follow-reference}), you will generate an error
+message that says:
+
+@example
+No such node: "Catching Mistakes) The only way @dots{}
+@end example
+
+@noindent
+This is because Info perceives the example of the error as the first
+cross reference in this node and if you type a @key{RET} immediately
+after typing the Info @kbd{f} command, Info will attempt to go to the
+referenced node. If you type @kbd{f catch @key{TAB} @key{RET}}, Info
+will complete the node name of the correctly written example and take
+you to the `Catching Mistakes' node. (If you try this, you can return
+from the `Catching Mistakes' node by typing @kbd{l}
+(@code{Info-last}).)
+
+@c !!! section on using Elisp debugger ignored.
+@ignore
+Sometimes @code{texinfo-format-region} will stop long after the
+original error; this is because it does not discover the problem until
+then. In this case, you will need to backtrack.@refill
+
+@c menu
+@c * Using the Emacs Lisp Debugger:: How to use the Emacs Lisp debugger.
+@c end menu
+
+@c node Using the Emacs Lisp Debugger
+@c appendixsubsec Using the Emacs Lisp Debugger
+@c index Using the Emacs Lisp debugger
+@c index Emacs Lisp debugger
+@c index Debugger, using the Emacs Lisp
+
+If an error is especially elusive, you can turn on the Emacs Lisp
+debugger and look at the backtrace; this tells you where in the
+@code{texinfo-format-region} function the problem occurred. You can
+turn on the debugger with the command:@refill
+
+@example
+M-x set-variable @key{RET} debug-on-error @key{RET} t @key{RET}
+@end example
+
+@noindent
+and turn it off with
+
+@example
+M-x set-variable @key{RET} debug-on-error @key{RET} nil @key{RET}
+@end example
+
+Often, when you are using the debugger, it is easier to follow what is
+going on if you use the Emacs Lisp files that are not byte-compiled.
+The byte-compiled sources send octal numbers to the debugger that may
+look mysterious. To use the uncompiled source files, load
+@file{texinfmt.el} and @file{texinfo.el} with the @kbd{M-x load-file}
+command.@refill
+
+The debugger will not catch an error if @code{texinfo-format-region}
+does not detect one. In the example shown above,
+@code{texinfo-format-region} did not find the error when the whole
+list was formatted, but only when part of the list was formatted.
+When @code{texinfo-format-region} did not find an error, the debugger
+did not find one either. @refill
+
+However, when @code{texinfo-format-region} did report an error, it
+invoked the debugger. This is the backtrace it produced:@refill
+
+@example
+---------- Buffer: *Backtrace* ----------
+Signalling: (search-failed "[@},]")
+ re-search-forward("[@},]")
+ (while ...)
+ (let ...)
+ texinfo-format-parse-args()
+ (let ...)
+ texinfo-format-xref()
+ funcall(texinfo-format-xref)
+ (if ...)
+ (let ...)
+ (if ...)
+ (while ...)
+ texinfo-format-scan()
+ (save-excursion ...)
+ (let ...)
+ texinfo-format-region(103370 103631)
+* call-interactively(texinfo-format-region)
+---------- Buffer: *Backtrace* ----------
+@end example
+
+The backtrace is read from the bottom up.
+@code{texinfo-format-region} was called interactively; and it, in
+turn, called various functions, including @code{texinfo-format-scan},
+@code{texinfo-format-xref} and @code{texinfo-format-parse-args}.
+Inside the function @code{texinfo-format-parse-args}, the function
+@code{re-search-forward} was called; it was this function that could
+not find the missing right-hand brace.@refill
+
+@xref{Lisp Debug, , Debugging Emacs Lisp, emacs, The GNU Emacs
+Manual}, for more information.@refill
+@end ignore
+
+@node Debugging with TeX
+@comment node-name, next, previous, up
+@section Catching Errors with @TeX{} Formatting
+@cindex Catching errors with @TeX{} formatting
+@cindex Debugging with @TeX{} formatting
+
+You can also catch mistakes when you format a file with @TeX{}.@refill
+
+Usually, you will want to do this after you have run
+@code{texinfo-format-buffer} (or, better, @code{makeinfo-buffer}) on
+the same file, because @code{texinfo-format-buffer} sometimes displays
+error messages that make more sense than @TeX{}. (@xref{Debugging
+with Info}, for more information.)@refill
+
+For example, @TeX{} was run on a Texinfo file, part of which is shown
+here:@refill
+
+@example
+---------- Buffer: texinfo.texi ----------
+name of the Texinfo file as an extension. The
+@@samp@{??@} are `wildcards' that cause the shell to
+substitute all the raw index files. (@@xref@{sorting
+indices, for more information about sorting
+indices.)@@refill
+---------- Buffer: texinfo.texi ----------
+@end example
+
+@noindent
+(The cross reference lacks a closing brace.)
+@TeX{} produced the following output, after which it stopped:@refill
+
+@example
+---------- Buffer: *tex-shell* ----------
+Runaway argument?
+@{sorting indices, for more information about sorting
+indices.) @@refill @@ETC.
+! Paragraph ended before @@xref was complete.
+<to be read again>
+ @@par
+l.27
+
+?
+---------- Buffer: *tex-shell* ----------
+@end example
+
+In this case, @TeX{} produced an accurate and
+understandable error message:
+
+@example
+Paragraph ended before @@xref was complete.
+@end example
+
+@noindent
+@samp{@@par} is an internal @TeX{} command of no relevance to Texinfo.
+@samp{l.27} means that @TeX{} detected the problem on line 27 of the
+Texinfo file. The @samp{?} is the prompt @TeX{} uses in this
+circumstance.@refill
+
+Unfortunately, @TeX{} is not always so helpful, and sometimes you must
+truly be a Sherlock Holmes to discover what went wrong.@refill
+
+In any case, if you run into a problem like this, you can do one of three
+things.@refill
+
+@enumerate
+@item
+You can tell @TeX{} to continue running and ignore just this error by
+typing @key{RET} at the @samp{?} prompt.@refill
+
+@item
+You can tell @TeX{} to continue running and to ignore all errors as best
+it can by typing @kbd{r @key{RET}} at the @samp{?} prompt.@refill
+
+This is often the best thing to do. However, beware: the one error
+may produce a cascade of additional error messages as its consequences
+are felt through the rest of the file. To stop @TeX{} when it is
+producing such an avalanche of error messages, type @kbd{C-c} (or
+@kbd{C-c C-c}, if you are running a shell inside Emacs).
+
+@item
+You can tell @TeX{} to stop this run by typing @kbd{x @key{RET}}
+at the @samp{?} prompt.@refill
+@end enumerate
+
+If you are running @TeX{} inside Emacs, you need to switch to the shell
+buffer and line at which @TeX{} offers the @samp{?} prompt.
+
+Sometimes @TeX{} will format a file without producing error messages even
+though there is a problem. This usually occurs if a command is not ended
+but @TeX{} is able to continue processing anyhow. For example, if you fail
+to end an itemized list with the @code{@@end itemize} command, @TeX{} will
+write a DVI file that you can print out. The only error message that
+@TeX{} will give you is the somewhat mysterious comment that@refill
+
+@example
+(@@end occurred inside a group at level 1)
+@end example
+
+@noindent
+However, if you print the DVI file, you will find that the text
+of the file that follows the itemized list is entirely indented as if
+it were part of the last item in the itemized list. The error message
+is the way @TeX{} says that it expected to find an @code{@@end}
+command somewhere in the file; but that it could not determine where
+it was needed.@refill
+
+Another source of notoriously hard-to-find errors is a missing
+@code{@@end group} command. If you ever are stumped by
+incomprehensible errors, look for a missing @code{@@end group} command
+first.@refill
+
+If the Texinfo file lacks header lines,
+@TeX{} may stop in the
+beginning of its run and display output that looks like the following.
+The @samp{*} indicates that @TeX{} is waiting for input.@refill
+
+@example
+This is TeX, Version 3.14159 (Web2c 7.0)
+(test.texinfo [1])
+*
+@end example
+
+@noindent
+In this case, simply type @kbd{\end @key{RET}} after the asterisk. Then
+write the header lines in the Texinfo file and run the @TeX{} command
+again. (Note the use of the backslash, @samp{\}. @TeX{} uses @samp{\}
+instead of @samp{@@}; and in this circumstance, you are working
+directly with @TeX{}, not with Texinfo.)@refill
+
+@node Using texinfo-show-structure
+@comment node-name, next, previous, up
+@section Using @code{texinfo-show-structure}
+@cindex Showing the structure of a file
+@findex texinfo-show-structure
+
+It is not always easy to keep track of the nodes, chapters, sections, and
+subsections of a Texinfo file. This is especially true if you are revising
+or adding to a Texinfo file that someone else has written.@refill
+
+In GNU Emacs, in Texinfo mode, the @code{texinfo-show-structure}
+command lists all the lines that begin with the @@-commands that
+specify the structure: @code{@@chapter}, @code{@@section},
+@code{@@appendix}, and so on. With an argument (@w{@kbd{C-u}}
+as prefix argument, if interactive),
+the command also shows the @code{@@node} lines. The
+@code{texinfo-show-structure} command is bound to @kbd{C-c C-s} in
+Texinfo mode, by default.@refill
+
+The lines are displayed in a buffer called the @samp{*Occur*} buffer,
+indented by hierarchical level. For example, here is a part of what was
+produced by running @code{texinfo-show-structure} on this manual:@refill
+
+@example
+@group
+Lines matching "^@@\\(chapter \\|sect\\|subs\\|subh\\|
+unnum\\|major\\|chapheading \\|heading \\|appendix\\)"
+in buffer texinfo.texi.
+@dots{}
+4177:@@chapter Nodes
+4198: @@heading Two Paths
+4231: @@section Node and Menu Illustration
+4337: @@section The @@code@{@@@@node@} Command
+4393: @@subheading Choosing Node and Pointer Names
+4417: @@subsection How to Write an @@code@{@@@@node@} Line
+4469: @@subsection @@code@{@@@@node@} Line Tips
+@dots{}
+@end group
+@end example
+
+This says that lines 4337, 4393, and 4417 of @file{texinfo.texi} begin
+with the @code{@@section}, @code{@@subheading}, and @code{@@subsection}
+commands respectively. If you move your cursor into the @samp{*Occur*}
+window, you can position the cursor over one of the lines and use the
+@kbd{C-c C-c} command (@code{occur-mode-goto-occurrence}), to jump to
+the corresponding spot in the Texinfo file. @xref{Other Repeating
+Search, , Using Occur, emacs, The GNU Emacs Manual}, for more
+information about @code{occur-mode-goto-occurrence}.@refill
+
+The first line in the @samp{*Occur*} window describes the @dfn{regular
+expression} specified by @var{texinfo-heading-pattern}. This regular
+expression is the pattern that @code{texinfo-show-structure} looks for.
+@xref{Regexps, , Using Regular Expressions, emacs, The GNU Emacs Manual},
+for more information.@refill
+
+When you invoke the @code{texinfo-show-structure} command, Emacs will
+display the structure of the whole buffer. If you want to see the
+structure of just a part of the buffer, of one chapter, for example,
+use the @kbd{C-x n n} (@code{narrow-to-region}) command to mark the
+region. (@xref{Narrowing, , , emacs, The GNU Emacs Manual}.) This is
+how the example used above was generated. (To see the whole buffer
+again, use @kbd{C-x n w} (@code{widen}).)@refill
+
+If you call @code{texinfo-show-structure} with a prefix argument by
+typing @w{@kbd{C-u C-c C-s}}, it will list lines beginning with
+@code{@@node} as well as the lines beginning with the @@-sign commands
+for @code{@@chapter}, @code{@@section}, and the like.@refill
+
+You can remind yourself of the structure of a Texinfo file by looking at
+the list in the @samp{*Occur*} window; and if you have mis-named a node
+or left out a section, you can correct the mistake.@refill
+
+@node Using occur
+@comment node-name, next, previous, up
+@section Using @code{occur}
+@cindex Occurrences, listing with @code{@@occur}
+@findex occur
+
+Sometimes the @code{texinfo-show-structure} command produces too much
+information. Perhaps you want to remind yourself of the overall structure
+of a Texinfo file, and are overwhelmed by the detailed list produced by
+@code{texinfo-show-structure}. In this case, you can use the @code{occur}
+command directly. To do this, type@refill
+
+@example
+@kbd{M-x occur}
+@end example
+
+@noindent
+and then, when prompted, type a @dfn{regexp}, a regular expression for
+the pattern you want to match. (@xref{Regexps, , Regular Expressions,
+emacs, The GNU Emacs Manual}.) The @code{occur} command works from
+the current location of the cursor in the buffer to the end of the
+buffer. If you want to run @code{occur} on the whole buffer, place
+the cursor at the beginning of the buffer.@refill
+
+For example, to see all the lines that contain the word
+@samp{@@chapter} in them, just type @samp{@@chapter}. This will
+produce a list of the chapters. It will also list all the sentences
+with @samp{@@chapter} in the middle of the line.@refill
+
+If you want to see only those lines that start with the word
+@samp{@@chapter}, type @samp{^@@chapter} when prompted by
+@code{occur}. If you want to see all the lines that end with a word
+or phrase, end the last word with a @samp{$}; for example,
+@samp{catching mistakes$}. This can be helpful when you want to see
+all the nodes that are part of the same chapter or section and
+therefore have the same `Up' pointer.@refill
+
+@xref{Other Repeating Search, , Using Occur, emacs , The GNU Emacs Manual},
+for more information.@refill
+
+@node Running Info-Validate
+@comment node-name, next, previous, up
+@section Finding Badly Referenced Nodes
+@findex Info-validate
+@cindex Nodes, checking for badly referenced
+@cindex Checking for badly referenced nodes
+@cindex Looking for badly referenced nodes
+@cindex Finding badly referenced nodes
+@cindex Badly referenced nodes
+
+You can use the @code{Info-validate} command to check whether any of
+the `Next', `Previous', `Up' or other node pointers fail to point to a
+node. This command checks that every node pointer points to an
+existing node. The @code{Info-validate} command works only on Info
+files, not on Texinfo files.@refill
+
+The @code{makeinfo} program validates pointers automatically, so you
+do not need to use the @code{Info-validate} command if you are using
+@code{makeinfo}. You only may need to use @code{Info-validate} if you
+are unable to run @code{makeinfo} and instead must create an Info file
+using @code{texinfo-format-region} or @code{texinfo-format-buffer}, or
+if you write an Info file from scratch.@refill
+
+@menu
+* Using Info-validate:: How to run @code{Info-validate}.
+* Unsplit:: How to create an unsplit file.
+* Tagifying:: How to tagify a file.
+* Splitting:: How to split a file manually.
+@end menu
+
+@node Using Info-validate
+@subsection Running @code{Info-validate}
+@cindex Running @code{Info-validate}
+@cindex Info validating a large file
+@cindex Validating a large file
+
+To use @code{Info-validate}, visit the Info file you wish to check and
+type:@refill
+
+@example
+M-x Info-validate
+@end example
+
+@noindent
+Note that the @code{Info-validate} command requires an upper case
+`I'. You may also need to create a tag table before running
+@code{Info-validate}. @xref{Tagifying}.
+
+If your file is valid, you will receive a message that says ``File appears
+valid''. However, if you have a pointer that does not point to a node,
+error messages will be displayed in a buffer called @samp{*problems in
+info file*}.@refill
+
+For example, @code{Info-validate} was run on a test file that contained
+only the first node of this manual. One of the messages said:@refill
+
+@example
+In node "Overview", invalid Next: Texinfo Mode
+@end example
+
+@noindent
+This meant that the node called @samp{Overview} had a `Next' pointer that
+did not point to anything (which was true in this case, since the test file
+had only one node in it).@refill
+
+Now suppose we add a node named @samp{Texinfo Mode} to our test case
+but we do not specify a `Previous' for this node. Then we will get
+the following error message:@refill
+
+@example
+In node "Texinfo Mode", should have Previous: Overview
+@end example
+
+@noindent
+This is because every `Next' pointer should be matched by a
+`Previous' (in the node where the `Next' points) which points back.@refill
+
+@code{Info-validate} also checks that all menu entries and cross references
+point to actual nodes.@refill
+
+@code{Info-validate} requires a tag table and does not work with files
+that have been split. (The @code{texinfo-format-buffer} command
+automatically splits large files.) In order to use @code{Info-validate}
+on a large file, you must run @code{texinfo-format-buffer} with an
+argument so that it does not split the Info file; and you must create a
+tag table for the unsplit file.
+
+@node Unsplit
+@comment node-name, next, previous, up
+@subsection Creating an Unsplit File
+@cindex Creating an unsplit file
+@cindex Unsplit file creation
+
+You can run @code{Info-validate} only on a single Info file that has a
+tag table. The command will not work on the indirect subfiles that
+are generated when a master file is split. If you have a large file
+(longer than 300,000 bytes or so), you need to run the
+@code{texinfo-format-buffer} or @code{makeinfo-buffer} command in such
+a way that it does not create indirect subfiles. You will also need
+to create a tag table for the Info file. After you have done this,
+you can run @code{Info-validate} and look for badly referenced
+nodes.@refill
+
+The first step is to create an unsplit Info file. To prevent
+@code{texinfo-format-buffer} from splitting a Texinfo file into
+smaller Info files, give a prefix to the @kbd{M-x
+texinfo-format-buffer} command:@refill
+
+@example
+C-u M-x texinfo-format-buffer
+@end example
+
+@noindent
+or else
+
+@example
+C-u C-c C-e C-b
+@end example
+
+@noindent
+When you do this, Texinfo will not split the file and will not create
+a tag table for it. @refill
+@cindex Making a tag table manually
+@cindex Tag table, making manually
+
+@node Tagifying
+@subsection Tagifying a File
+
+After creating an unsplit Info file, you must create a tag table for
+it. Visit the Info file you wish to tagify and type:@refill
+
+@example
+M-x Info-tagify
+@end example
+
+@noindent
+(Note the upper case @samp{I} in @code{Info-tagify}.) This creates an
+Info file with a tag table that you can validate.@refill
+
+The third step is to validate the Info file:@refill
+
+@example
+M-x Info-validate
+@end example
+
+@noindent
+(Note the upper case @samp{I} in @code{Info-validate}.)
+In brief, the steps are:@refill
+
+@example
+@group
+C-u M-x texinfo-format-buffer
+M-x Info-tagify
+M-x Info-validate
+@end group
+@end example
+
+After you have validated the node structure, you can rerun
+@code{texinfo-format-buffer} in the normal way so it will construct a
+tag table and split the file automatically, or you can make the tag
+table and split the file manually.@refill
+
+@node Splitting
+@comment node-name, next, previous, up
+@subsection Splitting a File Manually
+@cindex Splitting an Info file manually
+@cindex Info file, splitting manually
+
+You should split a large file or else let the
+@code{texinfo-format-buffer} or @code{makeinfo-buffer} command do it
+for you automatically. (Generally you will let one of the formatting
+commands do this job for you. @xref{Creating an Info File}.)@refill
+
+The split-off files are called the indirect subfiles.@refill
+
+Info files are split to save memory. With smaller files, Emacs does not
+have make such a large buffer to hold the information.@refill
+
+If an Info file has more than 30 nodes, you should also make a tag
+table for it. @xref{Using Info-validate}, for information
+about creating a tag table. (Again, tag tables are usually created
+automatically by the formatting command; you only need to create a tag
+table yourself if you are doing the job manually. Most likely, you
+will do this for a large, unsplit file on which you have run
+@code{Info-validate}.)@refill
+
+@c Info-split is autoloaded in `loaddefs.el' in Emacs 18.51
+@ignore
+Before running @code{Info-split}, you need to load the @code{info} library
+into Emacs by giving the command @kbd{M-x load-library @key{RET} info
+@key{RET}}.
+@end ignore
+
+Visit the Info file you wish to tagify and split and type the two
+commands:@refill
+
+@example
+M-x Info-tagify
+M-x Info-split
+@end example
+
+@noindent
+(Note that the @samp{I} in @samp{Info} is upper case.)@refill
+
+When you use the @code{Info-split} command, the buffer is modified into a
+(small) Info file which lists the indirect subfiles. This file should be
+saved in place of the original visited file. The indirect subfiles are
+written in the same directory the original file is in, with names generated
+by appending @samp{-} and a number to the original file name.@refill
+
+The primary file still functions as an Info file, but it contains just
+the tag table and a directory of subfiles.@refill
+
+
+@ignore
+The simple description in the command summary seems sufficient to me
+these days, so ignore this appendix. --karl, 13mar04.
+
+@node Refilling Paragraphs
+@appendix Refilling Paragraphs
+@cindex Refilling paragraphs
+@cindex Filling paragraphs
+@cindex Paragraphs, filling
+@findex refill
+
+The @code{@@refill} command refills and, optionally, indents the first
+line of a paragraph.@footnote{Perhaps the command should have been
+called the @code{@@refillandindent} command, but @code{@@refill} is
+shorter and the name was chosen before indenting was possible.} The
+@code{@@refill} command is no longer important, but we describe it here
+because you once needed it. You will see it in many old Texinfo
+files.@refill
+
+Without refilling, paragraphs containing long @@-constructs may look
+bad after formatting because the formatter removes @@-commands and
+shortens some lines more than others. In the past, neither the
+@code{texinfo-format-region} command nor the
+@code{texinfo-format-buffer} command refilled paragraphs
+automatically. The @code{@@refill} command had to be written at the
+end of every paragraph to cause these formatters to fill them. (Both
+@TeX{} and @code{makeinfo} have always refilled paragraphs
+automatically.) Now, all the Info formatters automatically fill and
+indent those paragraphs that need to be filled and indented.@refill
+
+The @code{@@refill} command causes @code{texinfo-format-region} and
+@code{texinfo-format-buffer} to refill a paragraph in the Info file
+@emph{after} all the other processing has been done. For this reason,
+you can not use @code{@@refill} with a paragraph containing either
+@code{@@*} or @code{@@w@{ @dots{} @}} since the refilling action will
+override those two commands.@refill
+
+The @code{texinfo-format-region} and @code{texinfo-format-buffer}
+commands now automatically append @code{@@refill} to the end of each
+paragraph that should be filled. They do not append @code{@@refill} to
+the ends of paragraphs that contain @code{@@*} or @w{@code{@@w@{ @dots{}@}}}
+and therefore do not refill or indent them.@refill
+
+@end ignore
+
+
+@c These are no longer ``new'', and the explanations
+@c are all given elsewhere anyway, I think. --karl, 25apr97.
+@c So ignore the entire appendix.
+@ignore
+@c node New Features, Command and Variable Index, Obtaining TeX, Top
+@c appendix Second Edition Features
+
+@tex
+% Widen the space for the first column so three control-character
+% strings fit in the first column. Switched back to default .8in
+% value at end of chapter.
+\global\tableindent=1.0in
+@end tex
+
+The second edition of the Texinfo manual describes more than 20 new
+Texinfo mode commands and more than 50 previously undocumented Texinfo
+@@-commands. This edition is more than twice the length of the first
+edition.@refill
+
+Here is a brief description of the new commands.@refill
+
+@c menu
+* New Texinfo Mode Commands:: The updating commands are especially useful.
+* New Commands:: Many newly described @@-commands.
+@c end menu
+
+@c node New Texinfo Mode Commands, New Commands, Obtaining TeX, Obtaining TeX
+@c appendixsec New Texinfo Mode Commands
+
+Texinfo mode provides commands and features especially designed for
+working with Texinfo files. More than 20 new commands have been
+added, including commands for automatically creating and updating
+both nodes and menus. This is a tedious task when done by hand.@refill
+
+The keybindings are intended to be somewhat mnemonic.@refill
+
+@c subheading Update all nodes and menus
+
+The @code{texinfo-master-menu} command is the primary command:
+
+@table @kbd
+@item C-c C-u m
+@itemx M-x texinfo-master-menu
+Create or update a master menu.
+With @kbd{C-u} as a prefix argument,
+first create or update all nodes
+and regular menus.
+@end table
+
+@c subheading Update Pointers
+
+@noindent
+Create or update `Next', `Previous', and `Up' node pointers.@refill
+
+@noindent
+@xref{Updating Nodes and Menus}.
+
+@table @kbd
+@item C-c C-u C-n
+@itemx M-x texinfo-update-node
+Update a node.
+
+@item C-c C-u C-e
+@itemx M-x texinfo-every-node-update
+Update every node in the buffer.
+@end table
+
+@c subheading Update Menus
+
+@noindent
+Create or update menus.@refill
+
+@noindent
+@xref{Updating Nodes and Menus}.
+
+@table @kbd
+@item C-c C-u C-m
+@itemx M-x texinfo-make-menu
+Make or update a menu.
+
+@item C-c C-u C-a
+@itemx M-x texinfo-all-menus-update
+Make or update all the menus in a buffer.
+With @kbd{C-u} as a prefix argument,
+first update all the nodes.
+@end table
+
+@c subheading Insert Title as Description
+
+@noindent
+Insert a node's chapter or section title in the space for the
+description in a menu entry line; position point so you can edit the
+insert. (This command works somewhat differently than the other
+insertion commands, which insert only a predefined string.)@refill
+
+@noindent
+@xref{Inserting, Inserting Frequently Used Commands}.
+
+@table @kbd
+@item C-c C-c C-d
+Insert title.
+@end table
+
+@c subheading Format for Info
+
+@noindent
+Provide keybindings both for the Info formatting commands that are
+written in Emacs Lisp and for @code{makeinfo} that is written in
+C.@refill
+
+@noindent
+@xref{Info Formatting}.
+
+@noindent
+Use the Emacs lisp @code{texinfo-format@dots{}} commands:
+
+@table @kbd
+@item C-c C-e C-r
+Format the region.
+
+@item C-c C-e C-b
+Format the buffer.
+@end table
+
+@noindent
+Use @code{makeinfo}:
+
+@table @kbd
+@item C-c C-m C-r
+Format the region.
+
+@item C-c C-m C-b
+Format the buffer.
+
+@item C-c C-m C-l
+Recenter the @code{makeinfo} output buffer.
+
+@item C-c C-m C-k
+Kill the @code{makeinfo} formatting job.
+@end table
+
+@c subheading Typeset and Print
+
+@noindent
+Typeset and print Texinfo documents from within Emacs.
+
+@noindent
+@xref{Printing}.
+
+@table @kbd
+@item C-c C-t C-b
+Run @code{texi2dvi} on the buffer.
+
+@item C-c C-t C-r
+Run @TeX{} on the region.
+
+@item C-c C-t C-i
+Run @code{texindex}.
+
+@item C-c C-t C-p
+Print the DVI file.
+
+@item C-c C-t C-q
+Show the print queue.
+
+@item C-c C-t C-d
+Delete a job from the print queue.
+
+@item C-c C-t C-k
+Kill the current @TeX{} formatting job.
+
+@item C-c C-t C-x
+Quit a currently stopped @TeX{} formatting job.
+
+@item C-c C-t C-l
+Recenter the output buffer.
+@end table
+
+@c subheading Other Updating Commands
+
+@noindent
+The ``other updating commands'' do not have standard keybindings because
+they are used less frequently.@refill
+
+@noindent
+@xref{Other Updating Commands}.
+
+@table @kbd
+@item M-x texinfo-insert-node-lines
+Insert missing @code{@@node} lines using
+section titles as node names.
+
+@item M-x texinfo-multiple-files-update
+Update a multi-file document.
+With a numeric prefix, such as @kbd{C-u 8},
+update @strong{every} pointer and
+menu in @strong{all} the files and
+then insert a master menu.
+
+@item M-x texinfo-indent-menu-description
+Indent descriptions in menus.
+
+@item M-x texinfo-sequential-node-update
+Insert node pointers in strict sequence.
+@end table
+
+@c no.de New Commands, , New Texinfo Mode Commands, Obtaining TeX
+@c appendix.sec New Texinfo @@-Commands
+
+The second edition of the Texinfo manual describes more than 50
+commands that were not described in the first edition. A third or so
+of these commands existed in Texinfo but were not documented in the
+manual; the others are new. Here is a listing, with brief
+descriptions of them:@refill
+
+@c subheading Indexing
+
+@noindent
+Create your own index, and merge indices.@refill
+
+@noindent
+@xref{Indices}.
+
+@table @kbd
+@item @@defindex @var{index-name}
+Define a new index and its indexing command.
+See also the @code{@@defcodeindex} command.
+
+@c written verbosely to avoid overfull hbox
+@item @@synindex @var{from-index} @var{into-index}
+Merge the @var{from-index} index into the @var{into-index} index.
+See also the @code{@@syncodeindex} command.
+@end table
+
+@c subheading Definitions
+
+@noindent
+Describe functions, variables, macros,
+commands, user options, special forms, and other such artifacts in a
+uniform format.@refill
+
+@noindent
+@xref{Definition Commands}.
+
+@table @kbd
+@item @@deffn @var{category} @var{name} @var{arguments}@dots{}
+Format a description for functions, interactive
+commands, and similar entities.
+
+@item @@defvr, @@defop, @dots{}
+15 other related commands.
+@end table
+
+@c subheading Glyphs
+
+@noindent
+Indicate the results of evaluation, expansion,
+printed output, an error message, equivalence of expressions, and the
+location of point.@refill
+
+@noindent
+@xref{Glyphs}.
+
+@table @kbd
+@item @@equiv@{@}
+@itemx @equiv{}
+Equivalence:
+
+@item @@error@{@}
+@itemx @error{}
+Error message
+
+@item @@expansion@{@}
+@itemx @expansion{}
+Macro expansion
+
+@item @@point@{@}
+@itemx @point{}
+Position of point
+
+@item @@print@{@}
+@itemx @print{}
+Printed output
+
+@item @@result@{@}
+@itemx @result{}
+Result of an expression
+@end table
+
+@c subheading Page Headings
+
+@noindent
+Customize page headings.
+
+@noindent
+@xref{Headings}.
+
+@table @kbd
+@item @@headings @var{on-off-single-double}
+Headings on or off, single, or double-sided.
+
+@item @@evenfooting [@var{left}] @@| [@var{center}] @@| [@var{right}]
+Footings for even-numbered (left-hand) pages.
+
+@item @@evenheading, @@everyheading, @@oddheading, @dots{}
+Five other related commands.
+
+@item @@thischapter
+Insert name of chapter and chapter number.
+
+@item @@thischaptername, @@thisfile, @@thistitle, @@thispage
+Related commands.
+@end table
+
+@c subheading Formatting
+
+@noindent
+Format blocks of text.
+
+@noindent
+@xref{Quotations and Examples}, and@*
+@ref{Lists and Tables, , Making Lists and Tables}.
+
+@table @kbd
+@item @@cartouche
+Draw rounded box surrounding text (no effect in Info).
+
+@item @@enumerate @var{optional-arg}
+Enumerate a list with letters or numbers.
+
+@item @@exdent @var{line-of-text}
+Remove indentation.
+
+@item @@flushleft
+Left justify.
+
+@item @@flushright
+Right justify.
+
+@item @@format
+Do not narrow nor change font.
+
+@item @@ftable @var{formatting-command}
+@itemx @@vtable @var{formatting-command}
+Two-column table with indexing.
+
+@item @@lisp
+For an example of Lisp code.
+
+@item @@smallexample
+@itemx @@smalllisp
+Like @@table and @@lisp, but for (originally) @@smallbook.
+@end table
+
+@c subheading Conditionals
+
+@noindent
+Conditionally format text.
+
+@noindent
+@xref{set clear value, , @code{@@set} @code{@@clear} @code{@@value}}.@refill
+
+@table @kbd
+@item @@set @var{flag} [@var{string}]
+Set a flag. Optionally, set value
+of @var{flag} to @var{string}.
+
+@item @@clear @var{flag}
+Clear a flag.
+
+@item @@value@{@var{flag}@}
+Replace with value to which @var{flag} is set.
+
+@item @@ifset @var{flag}
+Format, if @var{flag} is set.
+
+@item @@ifclear @var{flag}
+Ignore, if @var{flag} is set.
+@end table
+
+@c subheading @@heading series for Titles
+
+@noindent
+Produce unnumbered headings that do not appear in a table of contents.
+
+@noindent
+@xref{Structuring}.
+
+@table @kbd
+@item @@heading @var{title}
+Unnumbered section-like heading not listed
+in the table of contents of a printed manual.
+
+@item @@chapheading, @@majorheading, @@c subheading, @@subsubheading
+Related commands.
+@end table
+
+@need 1000
+@c subheading Font commands
+
+@need 1000
+@noindent
+@xref{Smallcaps}, and @*
+@ref{Fonts}.
+
+@table @kbd
+@item @@r@{@var{text}@}
+Print in roman font.
+
+@item @@sc@{@var{text}@}
+Print in @sc{small caps} font.
+@end table
+
+@c subheading Miscellaneous
+
+@noindent
+See @ref{title subtitle author, , @code{@@title} @code{@@subtitle} and @code{@@author} Commands},@*
+see @ref{Customized Highlighting},@*
+see @ref{Overfull hboxes},@*
+see @ref{Footnotes},@*
+see @ref{dmn, , Format a Dimension},@*
+see @ref{Raise/lower sections, , @code{@@raisesections} and @code{@@lowersections}},@*
+see @ref{math, , @code{@@math}: Inserting Mathematical Expressions}.@*
+see @ref{minus, , Inserting a Minus Sign},@*
+see @ref{paragraphindent, , Paragraph Indenting},@*
+see @ref{Cross Reference Commands},@*
+see @ref{title subtitle author, , @code{@@title} @code{@@subtitle} and @code{@@author}}, and@*
+see @ref{Custom Headings, , How to Make Your Own Headings}.
+
+@table @kbd
+@item @@author @var{author}
+Typeset author's name.
+
+@c @item @@definfoenclose @var{new-command}, @var{before}, @var{after},
+@c Define a highlighting command for Info. (Info only.)
+
+@item @@finalout
+Produce cleaner printed output.
+
+@item @@footnotestyle @var{end-or-separate}
+Specify footnote style, either @samp{end} or @samp{separate}.
+@xref{Footnote Styles}.
+
+@item @@dmn@{@var{dimension}@}
+Format a dimension.
+
+@item @@global@@let@var{new-cmd}=@var{existing-cmd}
+Define a highlighting command for @TeX{}. (@TeX{} only.)
+
+@item @@lowersections
+Reduce hierarchical level of sectioning commands.
+
+@item @@math@{@var{mathematical-expression}@}
+Format a mathematical expression.
+
+@item @@minus@{@}
+Generate a minus sign.
+
+@item @@paragraphindent @var{asis-or-number}
+Specify paragraph indentation.
+
+@item @@raisesections
+Raise hierarchical level of sectioning commands.
+
+@item @@ref@{@var{node-name}, @r{[}@var{entry}@r{]}, @r{[}@var{topic-or-title}@r{]}, @r{[}@var{info-file}@r{]}, @r{[}@var{manual}@r{]}@}
+Make a reference. In the printed manual, the
+reference does not start with the word `see'.
+
+@item @@title @var{title}
+Typeset @var{title} in the alternative
+title page format.
+
+@item @@subtitle @var{subtitle}
+Typeset @var{subtitle} in the alternative
+title page format.
+
+@item @@today@{@}
+Insert the current date.
+@end table
+@tex
+% Switch width of first column of tables back to default value
+\global\tableindent=.8in
+@end tex
+@end ignore
+
+
+@node GNU Free Documentation License
+@appendix GNU Free Documentation License
+
+@include fdl.texi
+
+
+@node Command and Variable Index
+@unnumbered Command and Variable Index
+
+This is an alphabetical list of all the @@-commands, assorted Emacs Lisp
+functions, and several variables. To make the list easier to use, the
+commands are listed without their preceding @samp{@@}.@refill
+
+@printindex fn
+
+
+@node General Index
+@unnumbered General Index
+
+@printindex cp
+
+
+@bye
diff --git a/doc/txi-cs.tex b/doc/txi-cs.tex
new file mode 100644
index 0000000..999e404
--- /dev/null
+++ b/doc/txi-cs.tex
@@ -0,0 +1,73 @@
+% $Id: txi-cs.tex,v 1.5 2007/07/01 19:06:03 karl Exp $
+% Czech translation for texinfo.tex.
+%
+% Copyright (C) 1999, 2000, 2007 Free Software Foundation.
+%
+% Authors:
+% Vladimir Michl <Vladimir.Michl@mujweb.cz>
+% Stepan Kasal <kasal@ucw.cz>
+%
+% 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/>.
+%
+\gdef\putwordAppendix{Pøílohy}
+\gdef\putwordChapter{Kapitola}
+\gdef\putwordfile{soubor}
+\gdef\putwordin{v~knize}
+\gdef\putwordIndexIsEmpty{(Rejstøík je prázdný.)}
+\gdef\putwordIndexNonexistent{(Rejstøík neexistuje.)}
+\gdef\putwordInfo{Info}
+\gdef\putwordInstanceVariableof{Promìnná pro instance tøídy}
+\gdef\putwordMethodon{Metoda tøídy}
+\gdef\putwordNoTitle{Bez nadpisu}
+\gdef\putwordof{tøídy}
+\global\let\putwordon\putwordof
+\gdef\putwordpage{stránka}
+\gdef\putwordsection{oddíl}
+\gdef\putwordSection{Oddíl}
+\gdef\putwordsee{viz}
+\gdef\putwordSee{Viz}
+\gdef\putwordShortTOC{Struèný obsah}
+\gdef\putwordTOC{Obsah}
+%
+\gdef\putwordMJan{ledna}
+\gdef\putwordMFeb{února}
+\gdef\putwordMMar{bøezna}
+\gdef\putwordMApr{dubna}
+\gdef\putwordMMai{kvìtna}
+\gdef\putwordMJun{èervna}
+\gdef\putwordMJul{èervence}
+\gdef\putwordMAug{srpna}
+\gdef\putwordMSep{záøí}
+\gdef\putwordMOct{øíjna}
+\gdef\putwordMNov{listopadu}
+\gdef\putwordMDec{prosince}
+%
+\gdef\putwordDefmac{Makro}
+\gdef\putwordDefspec{Speciální forma}
+\gdef\putwordDefvar{Promìnná}
+\gdef\putwordDefopt{Volby}
+\gdef\putwordDeffunc{Funkce}
+%
+% Redefine \today to produce Czech
+% preferred dates such as 28. januar 1999.
+%
+\gdef\today{%
+ \number\day.\nobreak\space
+ \ifcase\month
+ \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
+ \or\putwordMMai\or\putwordMJun\or\putwordMJul\or\putwordMAug
+ \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
+ \fi
+ \penalty3000\relax\space\number\year}
+%
diff --git a/doc/txi-de.tex b/doc/txi-de.tex
new file mode 100644
index 0000000..275429b
--- /dev/null
+++ b/doc/txi-de.tex
@@ -0,0 +1,78 @@
+% txi-de.tex -- adaptation to German for texinfo.tex.
+% $Id: txi-de.tex,v 1.7 2007/07/01 22:32:12 karl Exp $
+%
+% Copyright (C) 1999, 2007 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 Karl Heinz Marbaise, 18. January 1999, <kama@hippo.fido.de>
+%%
+%% german translation of the used words.
+%% Don't use checking because if it is our turn they have
+%% been defined.
+\gdef\putwordAppendix{Anhang}
+\gdef\putwordChapter{Kapitel}
+\gdef\putwordfile{Datei}
+\gdef\putwordin{in}
+\gdef\putwordInfo{Info}
+\gdef\putwordMethodon{Methode von}
+\gdef\putwordon{auf}
+\gdef\putwordof{von}
+\gdef\putwordpage{Seite}
+\gdef\putwordsection{Abschnitt}
+\gdef\putwordSection{Abschnitt}
+\gdef\putwordsee{siehe}
+\gdef\putwordSee{Siehe}
+\gdef\putwordShortTOC{Kurzverzeichnis}
+\gdef\putwordTOC{Inhaltsverzeichnis}
+%%
+\gdef\putwordNoTitle{Kein Titel}
+%%
+%% New defintion for the output of months.
+\gdef\putwordMJan{Januar}
+\gdef\putwordMFeb{Februar}
+\gdef\putwordMMar{M\"arz}
+\gdef\putwordMApr{April}
+\gdef\putwordMMai{Mai}
+\gdef\putwordMJun{Juni}
+\gdef\putwordMJul{Juli}
+\gdef\putwordMAug{August}
+\gdef\putwordMSep{September}
+\gdef\putwordMOct{Oktober}
+\gdef\putwordMNov{November}
+\gdef\putwordMDec{Dezember}
+%%
+%% some hyphenation for german language. Might be changed.
+\hyphenation{An-hang}
+%%\hyphenation{mini-buf-fer mini-buf-fers}
+%%\hyphenation{eshell}
+%%\hyphenation{white-space}
+%%
+%% Index handling should also work correct in german
+\gdef\putwordIndexNonexistent{(Index ist nicht vorhanden)}
+\gdef\putwordIndexIsEmpty{(Der Index ist leer)}
+%%
+%% \defmac
+\gdef\putwordDefmac{Makro}
+%% \defspec
+\gdef\putwordDefspec{Spezial Form}
+%% \defivar
+\gdef\putwordDefivar{exemplar Variable}
+%% \defvar leave unchanged because no difference in
+%% writing but in phonectics.
+\gdef\putwordDefvar{Variable}
+%% \defopt
+\gdef\putwordDefopt{Benutzer Option}
+%% \deffun
+\gdef\putwordDeffunc{Funktion}
diff --git a/doc/txi-en.tex b/doc/txi-en.tex
new file mode 100644
index 0000000..a81001c
--- /dev/null
+++ b/doc/txi-en.tex
@@ -0,0 +1,68 @@
+% English non-translation for texinfo.tex. This is read when a source
+% document says @documentlanguage en (which might happen after another
+% @documentlanguage). The actual values are the same as defaults.
+% $Id: txi-en.tex,v 1.5 2007/07/01 19:06:03 karl Exp $
+%
+% Copyright (C) 1999, 2007 Free Software Foundation.
+%
+% 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/>.
+
+\gdef\putwordAppendix{Appendix}
+\gdef\putwordChapter{Chapter}
+\gdef\putwordfile{file}
+\gdef\putwordin{in}
+\gdef\putwordIndexIsEmpty{(Index is empty)}
+\gdef\putwordIndexNonexistent{(Index is nonexistent)}
+\gdef\putwordInfo{Info}
+\gdef\putwordInstanceVariableof{Instance Variable of}
+\gdef\putwordMethodon{Method on}
+\gdef\putwordNoTitle{No Title}
+\gdef\putwordof{of}
+\gdef\putwordon{on}
+\gdef\putwordpage{page}
+\gdef\putwordsection{section}
+\gdef\putwordSection{Section}
+\gdef\putwordsee{see}
+\gdef\putwordSee{See}
+\gdef\putwordShortTOC{Short Contents}
+\gdef\putwordTOC{Table of Contents}
+%
+\gdef\putwordMJan{January}
+\gdef\putwordMFeb{February}
+\gdef\putwordMMar{March}
+\gdef\putwordMApr{April}
+\gdef\putwordMMay{May}
+\gdef\putwordMJun{June}
+\gdef\putwordMJul{July}
+\gdef\putwordMAug{August}
+\gdef\putwordMSep{September}
+\gdef\putwordMOct{October}
+\gdef\putwordMNov{November}
+\gdef\putwordMDec{December}
+%
+\gdef\putwordDefmac{Macro}
+\gdef\putwordDefspec{Special Form}
+\gdef\putwordDefvar{Variable}
+\gdef\putwordDefopt{User Option}
+\gdef\putwordDeffunc{Function}
+
+% Produces Day Month Year style of output.
+\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}
diff --git a/doc/txi-es.tex b/doc/txi-es.tex
new file mode 100644
index 0000000..54b3998
--- /dev/null
+++ b/doc/txi-es.tex
@@ -0,0 +1,59 @@
+% txi-es.tex -- TeX macros to handle Spanish language documents.
+%
+% Copyright (C) 1999, 2007 by Adrian Perez Jorge
+%
+% This txi-es.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 txi-es.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/>.
+%
+% Set up fixed words for Spanish.
+%
+
+\gdef\putwordAppendix{Ap\'endice}
+\gdef\putwordChapter{Cap\'{\char16{}}tulo}
+\gdef\putwordfile{archivo}
+\gdef\putwordIndexIsEmpty{(El \'Indice est\'a vac\'{\char16{}}o)}
+\gdef\putwordIndexNonexistent{(No existe el \'Indice)}
+\gdef\putwordInfo{Info}
+\gdef\putwordMethodon{M\'etodo de}
+\gdef\putwordNoTitle{Sin T\'{\char{16}}tulo}
+\gdef\putwordof{de}
+\gdef\putwordon{de}
+\gdef\putwordpage{p\'agina}
+\gdef\putwordsection{secci\'on}
+\gdef\putwordSection{Secci\'on}
+\gdef\putwordsee{v\'ease}
+\gdef\putwordSee{V\'ease}
+\gdef\putwordShortTOC{Resumen del Contenido}
+\gdef\putwordTOC{\'Indice General}
+%
+\gdef\putwordMJan{enero}
+\gdef\putwordMFeb{febrero}
+\gdef\putwordMMar{marzo}
+\gdef\putwordMApr{abril}
+\gdef\putwordMMay{mayo}
+\gdef\putwordMJun{junio}
+\gdef\putwordMJul{julio}
+\gdef\putwordMAug{agosto}
+\gdef\putwordMSep{septiembre}
+\gdef\putwordMOct{octubre}
+\gdef\putwordMNov{noviembre}
+\gdef\putwordMDec{diciembre}
+%
+\gdef\putwordDefmac{Macro}
+\gdef\putwordDefspec{Forma Especial}
+\gdef\putwordDefivar{Variable de Instancia}
+\gdef\putwordDefvar{Variable}
+\gdef\putwordDefopt{Opci\'on de Usuario}
+\gdef\putwordDeffunc{Funci\'on}
+
+\endinput
diff --git a/doc/txi-fr.tex b/doc/txi-fr.tex
new file mode 100644
index 0000000..c8665cf
--- /dev/null
+++ b/doc/txi-fr.tex
@@ -0,0 +1,72 @@
+% txi-fr.tex -- TeX macros to handle French language for texinfo.tex documents.
+% $Id: txi-fr.tex,v 1.5 2007/07/01 19:06:03 karl Exp $
+%
+% Copyright (C) 1999, 2007 Free Software Foundation.
+%
+% 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/>.
+
+% Set up fixed words for French.
+% Translated by Laurent Bourbeau <bourbeau@progiciels-bpi.ca>
+% Translation date: le 10 décembre 1999.
+% Transmitted to: Karl Berry <karl@cs.umb.edu>
+
+\gdef\putwordAppendix{Annexe}
+\gdef\putwordChapter{Chapitre}
+\gdef\putwordfile{fichier}
+\gdef\putwordin{dans}
+\gdef\putwordIndexIsEmpty{(Index est vide)}
+\gdef\putwordIndexNonexistent{(Index n'existe pas)}
+\gdef\putwordInfo{Info}
+\gdef\putwordInstanceVariableof{Variable d'instance de}
+\gdef\putwordMethodon{M\'ethode sur}
+\gdef\putwordNoTitle{Sans Titre}
+\gdef\putwordof{de}
+\gdef\putwordon{sur}
+\gdef\putwordpage{page}
+\gdef\putwordsection{section}
+\gdef\putwordSection{Section}
+\gdef\putwordsee{voir}
+\gdef\putwordSee{Voir}
+\gdef\putwordShortTOC{Sommaire}
+\gdef\putwordTOC{Table des mati\`eres}
+%
+\gdef\putwordMJan{janvier}
+\gdef\putwordMFeb{f\'evrier}
+\gdef\putwordMMar{mars}
+\gdef\putwordMApr{avril}
+\gdef\putwordMMay{mai}
+\gdef\putwordMJun{juin}
+\gdef\putwordMJul{juillet}
+\gdef\putwordMAug{ao\^ut}
+\gdef\putwordMSep{septembre}
+\gdef\putwordMOct{octobre}
+\gdef\putwordMNov{novembre}
+\gdef\putwordMDec{d\'ecembre}
+%
+\gdef\putwordDefmac{Macro}
+\gdef\putwordDefspec{Forme Sp\'eciale}
+\gdef\putwordDefvar{Variable}
+\gdef\putwordDefopt{Option de l'usager}
+\gdef\putwordDeffunc{Fonction}
+
+% Produces Day Month Year style of output.
+% French datation - for instance: 10 janvier 2000.
+\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}
diff --git a/doc/txi-it.tex b/doc/txi-it.tex
new file mode 100644
index 0000000..6ba6bd8
--- /dev/null
+++ b/doc/txi-it.tex
@@ -0,0 +1,68 @@
+% English non-translation for texinfo.tex. This is read when a source
+% document says @documentlanguage en (which might happen after another
+% @documentlanguage). The actual values are the same as defaults.
+% $Id: txi-it.tex,v 1.5 2007/07/01 19:06:04 karl Exp $
+%
+% Copyright (C) 1999, 2007 Free Software Foundation.
+%
+% 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/>.
+
+\gdef\putwordAppendix{Appendice}
+\gdef\putwordChapter{Capitolo}
+\gdef\putwordfile{file}
+\gdef\putwordin{in}
+\gdef\putwordIndexIsEmpty{(L'indice \'e vuoto)}
+\gdef\putwordIndexNonexistent{(L'indice non esiste)}
+\gdef\putwordInfo{Info}
+\gdef\putwordInstanceVariableof{Variabile di istanza di}
+\gdef\putwordMethodon{Metodo di}
+\gdef\putwordNoTitle{Nessun titolo}
+\gdef\putwordof{di}
+\gdef\putwordon{su}
+\gdef\putwordpage{pagina}
+\gdef\putwordsection{sezione}
+\gdef\putwordSection{Sezione}
+\gdef\putwordsee{vedi}
+\gdef\putwordSee{Vedi}
+\gdef\putwordShortTOC{Sommario abbreviato}
+\gdef\putwordTOC{Sommario}
+%
+\gdef\putwordMJan{Gennaio}
+\gdef\putwordMFeb{Febbraio}
+\gdef\putwordMMar{Marzo}
+\gdef\putwordMApr{Aprile}
+\gdef\putwordMMay{Maggio}
+\gdef\putwordMJun{Giugno}
+\gdef\putwordMJul{Luglio}
+\gdef\putwordMAug{Agosto}
+\gdef\putwordMSep{Settembre}
+\gdef\putwordMOct{Ottobre}
+\gdef\putwordMNov{Novembre}
+\gdef\putwordMDec{Dicembre}
+%
+\gdef\putwordDefmac{Macro}
+\gdef\putwordDefspec{Forma speciale}
+\gdef\putwordDefvar{Variabile}
+\gdef\putwordDefopt{Opzione}
+\gdef\putwordDeffunc{Funzione}
+
+% Produces Day Month Year style of output.
+\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}
diff --git a/doc/txi-nb.tex b/doc/txi-nb.tex
new file mode 100644
index 0000000..9007d15
--- /dev/null
+++ b/doc/txi-nb.tex
@@ -0,0 +1,67 @@
+% Norwegian translation for texinfo.tex (1999-10-29, GNU Texinfo 4.0).
+% Enables the use of words like Kapittel instead of Chapter, etc.
+%
+% Copyright (C) 1999, 2007 Trond Endrest=F8l <endrestol@hotmail.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 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/>.
+%
+\gdef\putwordAppendix{Vedlegg}
+\gdef\putwordChapter{Kapittel}
+\gdef\putwordfile{fil}
+\gdef\putwordIndexIsEmpty{(Indeks er tom)}
+\gdef\putwordIndexNonexistent{(Indeks eksisterer ikke)}
+\gdef\putwordInfo{Info}
+\gdef\putwordMethodon{Metode p\aa}
+\gdef\putwordNoTitle{Ingen tittel}
+\gdef\putwordof{av}
+\gdef\putwordon{p\aa}
+\gdef\putwordpage{side}
+\gdef\putwordsection{avsnitt}
+\gdef\putwordSection{Avsnitt}
+\gdef\putwordsee{se}
+\gdef\putwordSee{Se}
+\gdef\putwordShortTOC{Kort innholdsfortegnelse}
+\gdef\putwordTOC{Innholdsfortegnelse}
+%
+\gdef\putwordMJan{januar}
+\gdef\putwordMFeb{februar}
+\gdef\putwordMMar{mars}
+\gdef\putwordMApr{april}
+\gdef\putwordMMay{mai}
+\gdef\putwordMJun{juni}
+\gdef\putwordMJul{juli}
+\gdef\putwordMAug{august}
+\gdef\putwordMSep{september}
+\gdef\putwordMOct{oktober}
+\gdef\putwordMNov{november}
+\gdef\putwordMDec{desember}
+%
+\gdef\putwordDefmac{Makro}
+\gdef\putwordDefspec{Spesiell form}
+\gdef\putwordDefivar{Forekomstvariabel}
+\gdef\putwordDefvar{Variabel}
+\gdef\putwordDefopt{Brukervalg}
+\gdef\putwordDeffunc{Funksjon}
+%
+% Redefine \today to produce Norwegian
+% preferred dates such as 28. januar 1999.
+%
+\gdef\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}
diff --git a/doc/txi-nl.tex b/doc/txi-nl.tex
new file mode 100644
index 0000000..9cdfbe8
--- /dev/null
+++ b/doc/txi-nl.tex
@@ -0,0 +1,67 @@
+% Dutch translation for texinfo.tex.
+% $Id: txi-nl.tex,v 1.5 2007/07/01 19:06:04 karl Exp $
+%
+% Copyright (C) 1999, 2007 Free Software Foundation.
+%
+% 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/>.
+
+% Set up fixed words if not already set.
+\gdef\putwordAppendix{Appendix}
+\gdef\putwordChapter{Hoofdstuk}
+\gdef\putwordfile{bestand}
+\gdef\putwordin{in}
+\gdef\putwordIndexIsEmpty{(Index is leeg)}
+\gdef\putwordIndexNonexistent{(Index bestaat niet)}
+\gdef\putwordInfo{Info}
+\gdef\putwordInstanceVariableof{Instantie Variabele van}
+\gdef\putwordMethodon{Methode van}
+\gdef\putwordNoTitle{Geen titel}
+\gdef\putwordof{van}
+\gdef\putwordon{op}
+\gdef\putwordpage{pagina}
+\gdef\putwordsection{sectie}
+\gdef\putwordSection{Sectie}
+\gdef\putwordsee{zie}
+\gdef\putwordSee{Zie}
+\gdef\putwordShortTOC{Korte inhoudsopgave}
+\gdef\putwordTOC{Inhoudsopgave}
+%
+\gdef\putwordMJan{Januari}
+\gdef\putwordMFeb{Februari}
+\gdef\putwordMMar{Maart}
+\gdef\putwordMApr{April}
+\gdef\putwordMMay{Mei}
+\gdef\putwordMJun{Juni}
+\gdef\putwordMJul{Juli}
+\gdef\putwordMAug{Augustus}
+\gdef\putwordMSep{September}
+\gdef\putwordMOct{Oktober}
+\gdef\putwordMNov{November}
+\gdef\putwordMDec{December}
+%
+\gdef\putwordDefmac{Macro}
+\gdef\putwordDefspec{Speciale Vorm}
+\gdef\putwordDefvar{Variabele}
+\gdef\putwordDefopt{Gebruikers optie}
+\gdef\putwordDeffunc{Functie}
+
+% Produces Day Month Year style of output.
+\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}
diff --git a/doc/txi-pl.tex b/doc/txi-pl.tex
new file mode 100644
index 0000000..5b33489
--- /dev/null
+++ b/doc/txi-pl.tex
@@ -0,0 +1,70 @@
+% txi-pl.tex -- adaptation to Polish for texinfo.tex.
+% $Id: txi-pl.tex,v 1.6 2007/07/01 19:06:04 karl Exp $
+%
+% Copyright (C) 2003, 2006, 2007 Free Software Foundation.
+%
+% 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 Wojciech Polak <polak@gnu.org> on 29-03-2003.
+% Modified by Staszek Wawrykiewicz <staw@gust.org.pl> on 01-04-2003.
+%
+\gdef\putwordAppendix{Suplement}
+\gdef\putwordChapter{Rozdzia³}
+\gdef\putwordfile{plik}
+\gdef\putwordin{w}
+\gdef\putwordIndexIsEmpty{(Skorowidz jest pusty)}
+\gdef\putwordIndexNonexistent{(Brak skorowidza)}
+\gdef\putwordInfo{Info}
+\gdef\putwordInstanceVariableof{Przyk³adowa zmienna}
+\gdef\putwordMethodon{Metoda}
+\gdef\putwordNoTitle{Brak tytu³u}
+\gdef\putwordof{z}
+\gdef\putwordon{na}
+\gdef\putwordpage{strona}
+\gdef\putwordsection{czê¶æ}
+\gdef\putwordSection{Czê¶æ}
+\gdef\putwordsee{zobacz}
+\gdef\putwordSee{Zobacz}
+\gdef\putwordShortTOC{Krótka zawarto¶æ}
+\gdef\putwordTOC{Spis tre¶ci}
+%
+\gdef\putwordMJan{stycznia}
+\gdef\putwordMFeb{lutego}
+\gdef\putwordMMar{marca}
+\gdef\putwordMApr{kwietnia}
+\gdef\putwordMMay{maja}
+\gdef\putwordMJun{czerwca}
+\gdef\putwordMJul{lipca}
+\gdef\putwordMAug{sierpnia}
+\gdef\putwordMSep{wrze¶nia}
+\gdef\putwordMOct{pa¼dziernika}
+\gdef\putwordMNov{listopada}
+\gdef\putwordMDec{grudnia}
+%
+\gdef\putwordDefmac{Makro}
+\gdef\putwordDefspec{Specjalna forma}
+\gdef\putwordDefvar{Zmienna}
+\gdef\putwordDefopt{Opcja u¿ytkownika}
+\gdef\putwordDeffunc{Funkcja}
+%
+% Produces Day Month Year style of output.
+%
+\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}
diff --git a/doc/txi-pt.tex b/doc/txi-pt.tex
new file mode 100644
index 0000000..4a61765
--- /dev/null
+++ b/doc/txi-pt.tex
@@ -0,0 +1,68 @@
+% txi-pt.tex -- adaptation to Portuguese for texinfo.tex.
+%
+% Copyright (C) 1999, 2007 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 Lalo Martins <lalo@webcom.com> at 05 August 1999
+%%
+%% Portuguese translation of the used words.
+\gdef\putwordAppendix{Ap\^endice}
+\gdef\putwordChapter{Cap\'\ptexi tulo}
+\gdef\putwordfile{Data}
+\gdef\putwordin{em}
+\gdef\putwordInfo{Info}
+\gdef\putwordMethodon{M\'etodo de}
+\gdef\putwordon{em}
+\gdef\putwordof{de}
+\gdef\putwordpage{P\'agina}
+\gdef\putwordsection{se\,c\~ao}
+\gdef\putwordSection{Se\,c\~ao}
+\gdef\putwordsee{veja}
+\gdef\putwordSee{Veja}
+\gdef\putwordShortTOC{Breve Sum\'ario}
+\gdef\putwordTOC{Sum\'ario}
+%%
+\gdef\putwordNoTitle{Sem T\'\ptexi tulo}
+%%
+%% New defintion for the output of months.
+\gdef\putwordMJan{Janeiro}
+\gdef\putwordMFeb{Fevereiro}
+\gdef\putwordMMar{Mar\,co}
+\gdef\putwordMApr{Abril}
+\gdef\putwordMMai{Maio}
+\gdef\putwordMJun{Junho}
+\gdef\putwordMJul{Julho}
+\gdef\putwordMAug{Agosto}
+\gdef\putwordMSep{Setembro}
+\gdef\putwordMOct{Outubro}
+\gdef\putwordMNov{Novembro}
+\gdef\putwordMDec{Dezembro}
+%%
+%% Index handling should also work correct in german
+\gdef\putwordIndexNonexistent{(\'Indice inexistente)}
+\gdef\putwordIndexIsEmpty{(\'Indice vazio)}
+%%
+%% \defmac
+\gdef\putwordDefmac{Macro}
+%% \defspec
+\gdef\putwordDefspec{Forma Especial}
+%% \defivar
+\gdef\putwordDefivar{Vari\'avel de Inst\^ancia}
+%% \defvar
+\gdef\putwordDefvar{Vari\'avel}
+%% \defopt
+\gdef\putwordDefopt{Op\,c\~ao de Usu\'ario}
+%% \deffun
+\gdef\putwordDeffunc{Fun\,c\~ao}
diff --git a/doc/txi-ru.tex b/doc/txi-ru.tex
new file mode 100644
index 0000000..5dd80f6
--- /dev/null
+++ b/doc/txi-ru.tex
@@ -0,0 +1,71 @@
+% Russian translation for texinfo.tex.
+%
+% Copyright (C) 2005, 2007 Free Software Foundation.
+%
+% Author:
+% Sergey Poznyakoff
+%
+% 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 plainenc
+%
+\gdef\putwordAppendix{ðÒÉÌÏÖÅÎÉÅ}
+\gdef\putwordChapter{çÌÁ×Á}
+\gdef\putwordfile{ÆÁÊÌ}
+\gdef\putwordin{×}
+\gdef\putwordIndexIsEmpty{(éÎÄÅËÓ ÐÕÓÔ)}
+\gdef\putwordIndexNonexistent{(éÎÄÅËÓ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ)}
+\gdef\putwordInfo{Info}
+\gdef\putwordInstanceVariableof{ðÅÒÅÍÅÎÎÁÑ ËÌÁÓÓÁ} % hmm ??
+\gdef\putwordMethodon{íÅÔÏÄ}
+\gdef\putwordNoTitle{âÅÚ ÚÁÇÌÁ×ÉÑ}
+\gdef\putwordof{ÄÌÑ} % (??) ëÁÔÅÇÏÒÉÑ X ÄÌÑ ËÌÁÓÓÁ Y
+\gdef\putwordon{ÎÁÄ} % ïÐÅÒÁÃÉÑ ÎÁÄ ...
+\gdef\putwordpage{ÓÔÒÁÎÉÃÁ}
+\gdef\putwordsection{ÒÁÚÄÅÌ}
+\gdef\putwordSection{òÁÚÄÅÌ}
+\gdef\putwordsee{ÓÍ.}
+\gdef\putwordSee{óÍ.}
+\gdef\putwordShortTOC{ëÒÁÔËÏÅ ÏÇÌÁ×ÌÅÎÉÅ}
+\gdef\putwordTOC{ïÇÌÁ×ÌÅÎÉÅ}
+%
+%% íÅÓÑÃÙ ÉÓÐÏÌØÚÕÀÔÓÑ ÔÏÌØËÏ × ÒÏÄÉÔÅÌØÎÏÍ ÐÁÄÅÖÅ (ÓÍ. ÎÉÖÅ today)
+\gdef\putwordMJan{ÑÎ×ÁÒÑ}
+\gdef\putwordMFeb{ÆÅ×ÒÁÌÑ}
+\gdef\putwordMMar{ÍÁÒÔÁ}
+\gdef\putwordMApr{ÁÐÒÅÌÑ}
+\gdef\putwordMMay{ÍÁÑ}
+\gdef\putwordMJun{ÉÀÎØ}
+\gdef\putwordMJul{ÉÀÌÑ}
+\gdef\putwordMAug{Á×ÇÕÓÔÁ}
+\gdef\putwordMSep{ÓÅÎÔÑÂÒÑ}
+\gdef\putwordMOct{ÏËÔÑÂÒÑ}
+\gdef\putwordMNov{ÎÏÑÂÒÑ}
+\gdef\putwordMDec{ÄÅËÁÂÒÑ}
+%
+\gdef\putwordDefmac{íÁËÒÏÏÐÒÅÄÅÌÅÎÉÅ}
+\gdef\putwordDefspec{ïÓÏÂÁÑ ÆÏÒÍÁ}
+\gdef\putwordDefvar{ðÅÒÅÍÅÎÎÁÑ}
+\gdef\putwordDefopt{ïÐÃÉÑ ÐÏÌØÚÏ×ÁÔÅÌÑ}
+\gdef\putwordDeffunc{æÕÎËÃÉÑ}
+
+% Produces Day Month Year style of output.
+\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}
diff --git a/doc/txi-sr.tex b/doc/txi-sr.tex
new file mode 100644
index 0000000..9141a4b
--- /dev/null
+++ b/doc/txi-sr.tex
@@ -0,0 +1,67 @@
+% Serbian-latin translation for texinfo.tex.
+%
+% Copyright (C) 2005, 2007 Free Software Foundation.
+%
+% 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/>.
+%
+% Created by Predrag Rakic.
+
+\gdef\putwordAppendix{Prilog}
+\gdef\putwordChapter{Glava}
+\gdef\putwordfile{datoteka}
+\gdef\putwordin{u}
+\gdef\putwordIndexIsEmpty{(Indeks je prazan)}
+\gdef\putwordIndexNonexistent{(Indeks ne postoji)}
+\gdef\putwordInfo{Info}
+\gdef\putwordInstanceVariableof{Atribut klase}
+\gdef\putwordMethodon{Metod klase}
+\gdef\putwordNoTitle{Bez naslova}
+\gdef\putwordof{}
+\gdef\putwordon{}
+\gdef\putwordpage{strana}
+\gdef\putwordsection{poglavlje}
+\gdef\putwordSection{Poglavlje}
+\gdef\putwordsee{vidi}
+\gdef\putwordSee{Vidi}
+\gdef\putwordShortTOC{Kratak sadr\v{z}aj}
+\gdef\putwordTOC{Sadr\v{z}aj}
+%
+\gdef\putwordMJan{Januar}
+\gdef\putwordMFeb{Februar}
+\gdef\putwordMMar{Mart}
+\gdef\putwordMApr{April}
+\gdef\putwordMMay{Maj}
+\gdef\putwordMJun{Jun}
+\gdef\putwordMJul{Jul}
+\gdef\putwordMAug{Avgust}
+\gdef\putwordMSep{Septembar}
+\gdef\putwordMOct{Oktobar}
+\gdef\putwordMNov{Novembar}
+\gdef\putwordMDec{Decembar}
+%
+\gdef\putwordDefmac{Makro}
+\gdef\putwordDefspec{Posebna forma}
+\gdef\putwordDefvar{Promenljiva}
+\gdef\putwordDefopt{Korisni\v{c}ka opcija}
+\gdef\putwordDeffunc{Funkcija}
+
+% Produces Day Month Year style of output.
+\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}
diff --git a/doc/txi-tr.tex b/doc/txi-tr.tex
new file mode 100644
index 0000000..0bd7fcb
--- /dev/null
+++ b/doc/txi-tr.tex
@@ -0,0 +1,81 @@
+% txi-tr.tex -- adaptation to Turkish for texinfo.tex.
+% $Id: txi-tr.tex,v 1.7 2007/07/01 22:32:12 karl Exp $
+%
+% Copyright (C) 2003, 2007 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 Alper Ersoy, 5 January 2003, <aersoy@tfz.net>
+%
+%%
+%% Turkish translations of the used words.
+%%
+%%
+\gdef\putwordAppendix{Ek}
+\gdef\putwordChapter{Kesim}
+\gdef\putwordfile{dosya}
+\gdef\putwordInfo{Bilgi}
+\gdef\putwordpage{Sayfa}
+\gdef\putwordsection{b\"ol\"um}
+\gdef\putwordSection{B\"ol\"um}
+\gdef\putwordsee{bkz.}
+\gdef\putwordSee{Bkz.}
+\gdef\putwordShortTOC{\dotaccent{I}\,cindekiler (K\dotless{i}saca)}
+\gdef\putwordTOC{\dotaccent{I}\,cindekiler}
+%%
+%% This one really sucks :\
+\gdef\putwordMethodon{S\dotless{i}n\dotless{i}f:}
+%%
+%% I could not translate these ones, need examples :\
+%% If anybody out there is using these in turkish, please
+%% don't hesitate to send me patches ;)
+\gdef\putwordin{in}
+\gdef\putwordon{on}
+\gdef\putwordof{of}
+%%
+%%
+\gdef\putwordNoTitle{Ba\,sl\dotless{i}s\dotless{i}z}
+\gdef\putwordIndexNonexistent{(Dizin bulunmamakta)}
+\gdef\putwordIndexIsEmpty{(Dizin bo\,s)}
+%%
+%% Months
+\gdef\putwordMJan{Ocak}
+\gdef\putwordMFeb{\,Subat}
+\gdef\putwordMMar{Mart}
+\gdef\putwordMApr{Nisan}
+\gdef\putwordMMai{May\dotless{i}s}
+\gdef\putwordMJun{Haziran}
+\gdef\putwordMJul{Temmuz}
+\gdef\putwordMAug{A\u{g}ustos}
+\gdef\putwordMSep{Eyl\"ul}
+\gdef\putwordMOct{Ekim}
+\gdef\putwordMNov{Kas\dotless{i}m}
+\gdef\putwordMDec{Aral\dotless{i}k}
+%%
+%% Definitions
+\gdef\putwordDefmac{Makro}
+\gdef\putwordDefspec{\"Ozel Yap\dotless{i}}
+\gdef\putwordDefopt{Se\,cenek}
+\gdef\putwordDefvar{De\u{g}i\,sken}
+\gdef\putwordDeffunc{Fonksiyon}
+%%
+% Produces Day Month Year style of output.
+\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}
diff --git a/doc/txi-uk.tex b/doc/txi-uk.tex
new file mode 100644
index 0000000..8eb8cfa
--- /dev/null
+++ b/doc/txi-uk.tex
@@ -0,0 +1,68 @@
+% Ukrainian translation for texinfo.tex.
+%
+% Copyright (C) 2005, 2007 Free Software Foundation.
+%
+% Author:
+% Sergey Poznyakoff
+%
+% 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/>.
+
+\gdef\putwordAppendix{äÏÄÁÔÏË}
+\gdef\putwordChapter{òÏÚĦÌ}
+\gdef\putwordfile{ÆÁÊÌ}
+\gdef\putwordin{×}
+\gdef\putwordIndexIsEmpty{(¶ÎÄÅËÓ ÐÕÓÔÉÊ)}
+\gdef\putwordIndexNonexistent{(¶ÎÄÅËÓ ÎÅ ¦ÓÎÕ¤)}
+\gdef\putwordInfo{ÆÁÊÌ Info}
+\gdef\putwordInstanceVariableof{úͦÎÎÁ ËÌÁÓÕ}
+\gdef\putwordMethodon{íÅÔÏÄ }
+\gdef\putwordNoTitle{îÅÍÁ¤ ÎÁÚ×É}
+\gdef\putwordof{ÄÌÑ} % ??
+\gdef\putwordon{Ú} % ïÐÅÒÁÃ¦Ñ Ú ËÌÁÓÏÍ ...
+\gdef\putwordpage{ÓÔÏÒ¦ÎËÁ}
+\gdef\putwordsection{ÞÁÓÔÉÎÁ}
+\gdef\putwordSection{þÁÓÔÉÎÁ}
+\gdef\putwordsee{ÄÉ×.}
+\gdef\putwordSee{äÉ×.}
+\gdef\putwordShortTOC{ëÏÒÏÔËÉÊ ÚͦÓÔ}
+\gdef\putwordTOC{úͦÓÔ}
+%
+\gdef\putwordMJan{Ó¦ÞÎÑ}
+\gdef\putwordMFeb{ÌÀÔÏÇÏ}
+\gdef\putwordMMar{ÂÅÒÅÚÎÑ}
+\gdef\putwordMApr{ËצÔÎÑ}
+\gdef\putwordMMay{ÔÒÁ×ÎÑ}
+\gdef\putwordMJun{ÞÅÒ×ÎÑ}
+\gdef\putwordMJul{ÌÉÐÎÑ}
+\gdef\putwordMAug{ÓÅÒÐÎÑ}
+\gdef\putwordMSep{×ÅÒÅÓÎÑ}
+\gdef\putwordMOct{ÖÏ×ÔÎÑ}
+\gdef\putwordMNov{ÌÉÓÔÏÐÁÄÁ}
+\gdef\putwordMDec{ÇÒÕÄÎÑ}
+%
+\gdef\putwordDefmac{íÁËÒÏÓ}
+\gdef\putwordDefspec{óÐÅæÁÌØÎÁ ÆÏÒÍÁ}
+\gdef\putwordDefvar{úͦÎÎÁ}
+\gdef\putwordDefopt{ïÐÃ¦Ñ ËÏÒÉÓÔÕ×ÁÞÁ}
+\gdef\putwordDeffunc{æÕÎËæÑ}
+
+% Produces Day Month Year style of output.
+\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}
diff --git a/doc/version-stnd.texi b/doc/version-stnd.texi
new file mode 100644
index 0000000..d5c54cf
--- /dev/null
+++ b/doc/version-stnd.texi
@@ -0,0 +1,4 @@
+@set UPDATED 18 September 2008
+@set UPDATED-MONTH September 2008
+@set EDITION 4.13
+@set VERSION 4.13
diff --git a/doc/version.texi b/doc/version.texi
new file mode 100644
index 0000000..d5c54cf
--- /dev/null
+++ b/doc/version.texi
@@ -0,0 +1,4 @@
+@set UPDATED 18 September 2008
+@set UPDATED-MONTH September 2008
+@set EDITION 4.13
+@set VERSION 4.13
diff --git a/gnulib/lib/Makefile.am b/gnulib/lib/Makefile.am
new file mode 100644
index 0000000..dec3522
--- /dev/null
+++ b/gnulib/lib/Makefile.am
@@ -0,0 +1,881 @@
+## DO NOT EDIT! GENERATED AUTOMATICALLY!
+## Process this file with automake to produce Makefile.in.
+# Copyright (C) 2002-2008 Free Software Foundation, Inc.
+#
+# This file is free software, distributed under the terms of the GNU
+# General Public License. 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=. --lib=libgnu --source-base=gnulib/lib --m4-base=gnulib/m4 --doc-base=doc --aux-dir=build-aux --no-libtool --macro-prefix=gl --no-vc-files argz getopt gettext mbchar mbiter mbscasecmp mbschr mbslen mbsncasecmp mbsstr mbswidth memcpy memmem memmove mkstemp strdup strerror xalloc xsetenv
+
+AUTOMAKE_OPTIONS = 1.5 gnits subdir-objects
+
+noinst_HEADERS =
+noinst_LIBRARIES =
+noinst_LTLIBRARIES =
+EXTRA_DIST =
+BUILT_SOURCES =
+SUFFIXES =
+MOSTLYCLEANFILES = core *.stackdump
+MOSTLYCLEANDIRS =
+CLEANFILES =
+DISTCLEANFILES =
+MAINTAINERCLEANFILES =
+
+AM_CPPFLAGS =
+
+noinst_LIBRARIES += libgnu.a
+
+libgnu_a_SOURCES =
+libgnu_a_LIBADD = $(gl_LIBOBJS)
+libgnu_a_DEPENDENCIES = $(gl_LIBOBJS)
+EXTRA_libgnu_a_SOURCES =
+
+## 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.
+alloca.h: alloca.in.h
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+ cat $(srcdir)/alloca.in.h; \
+ } > $@-t
+ mv -f $@-t $@
+MOSTLYCLEANFILES += alloca.h alloca.h-t
+
+EXTRA_DIST += alloca.in.h
+
+## end gnulib module alloca-opt
+
+## begin gnulib module argz
+
+BUILT_SOURCES += $(ARGZ_H)
+
+# We need the following in order to create <argz.h> when the system
+# doesn't have one that works with the given compiler.
+argz.h: argz.in.h
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+ cat $(srcdir)/argz.in.h; \
+ } > $@-t
+ mv -f $@-t $@
+MOSTLYCLEANFILES += argz.h argz.h-t
+
+EXTRA_DIST += argz.c argz.in.h
+
+EXTRA_libgnu_a_SOURCES += argz.c
+
+## end gnulib module argz
+
+## begin gnulib module configmake
+
+# Retrieve values of the variables through 'configure' followed by
+# 'make', not directly through 'configure', so that a user who
+# sets some of these variables consistently on the 'make' command
+# line gets correct results.
+#
+# One advantage of this approach, compared to the classical
+# approach of adding -DLIBDIR=\"$(libdir)\" etc. to AM_CPPFLAGS,
+# is that it protects against the use of undefined variables.
+# If, say, $(libdir) is not set in the Makefile, LIBDIR is not
+# defined by this module, and code using LIBDIR gives a
+# compilation error.
+#
+# Another advantage is that 'make' output is shorter.
+#
+# Listed in the same order as the GNU makefile conventions.
+# The Automake-defined pkg* macros are appended, in the order
+# listed in the Automake 1.10a+ documentation.
+configmake.h: Makefile
+ 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 $@-t $@
+BUILT_SOURCES += configmake.h
+CLEANFILES += configmake.h configmake.h-t
+
+## end gnulib module configmake
+
+## begin gnulib module error
+
+
+EXTRA_DIST += error.c error.h
+
+EXTRA_libgnu_a_SOURCES += error.c
+
+## end gnulib module error
+
+## begin gnulib module exitfail
+
+
+EXTRA_DIST += exitfail.c exitfail.h
+
+EXTRA_libgnu_a_SOURCES += exitfail.c
+
+## end gnulib module exitfail
+
+## begin gnulib module getopt
+
+BUILT_SOURCES += $(GETOPT_H)
+
+# We need the following in order to create <getopt.h> when the system
+# doesn't have one that works with the given compiler.
+getopt.h: getopt.in.h
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+ cat $(srcdir)/getopt.in.h; \
+ } > $@-t
+ mv -f $@-t $@
+MOSTLYCLEANFILES += getopt.h getopt.h-t
+
+EXTRA_DIST += getopt.c getopt.in.h getopt1.c getopt_int.h
+
+EXTRA_libgnu_a_SOURCES += getopt.c getopt1.c
+
+## end gnulib module getopt
+
+## begin gnulib module gettext
+
+# This is for those projects which use "gettextize --intl" to put a source-code
+# copy of libintl into their package. In such projects, every Makefile.am needs
+# -I$(top_builddir)/intl, so that <libintl.h> can be found in this directory.
+# For the Makefile.ams in other directories it is the maintainer's
+# responsibility; for the one from gnulib we do it here.
+# This option has no effect when the user disables NLS (because then the intl
+# directory contains no libintl.h file) or when the project does not use
+# "gettextize --intl".
+AM_CPPFLAGS += -I$(top_builddir)/intl
+
+EXTRA_DIST += $(top_srcdir)/build-aux/config.rpath
+
+## end gnulib module gettext
+
+## begin gnulib module gettext-h
+
+libgnu_a_SOURCES += gettext.h
+
+## end gnulib module gettext-h
+
+## begin gnulib module gettimeofday
+
+
+EXTRA_DIST += gettimeofday.c
+
+EXTRA_libgnu_a_SOURCES += gettimeofday.c
+
+## end gnulib module gettimeofday
+
+## begin gnulib module havelib
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/config.rpath
+
+## end gnulib module havelib
+
+## begin gnulib module intprops
+
+
+EXTRA_DIST += intprops.h
+
+## end gnulib module intprops
+
+## begin gnulib module link-warning
+
+LINK_WARNING_H=$(top_srcdir)/build-aux/link-warning.h
+
+EXTRA_DIST += $(top_srcdir)/build-aux/link-warning.h
+
+## end gnulib module link-warning
+
+## 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: all-local
+ test $(GLIBC21) != no || $(mkinstalldirs) $(DESTDIR)$(libdir)
+ 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 test $(GLIBC21) = no; then \
+ sed -f ref-add.sed charset.alias > $(charset_tmp) ; \
+ $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
+ rm -f $(charset_tmp) ; \
+ fi ; \
+ fi
+
+uninstall-local: 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
+ rm -f t-$@ $@
+ $(SHELL) $(srcdir)/config.charset '$(host)' > t-$@
+ mv t-$@ $@
+
+SUFFIXES += .sed .sin
+.sin.sed:
+ 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 malloc-posix
+
+
+EXTRA_DIST += malloc.c
+
+EXTRA_libgnu_a_SOURCES += malloc.c
+
+## end gnulib module malloc-posix
+
+## begin gnulib module malloca
+
+libgnu_a_SOURCES += malloca.c
+
+EXTRA_DIST += malloca.h malloca.valgrind
+
+## end gnulib module malloca
+
+## begin gnulib module mbchar
+
+libgnu_a_SOURCES += mbchar.c
+
+EXTRA_DIST += mbchar.h
+
+## end gnulib module mbchar
+
+## begin gnulib module mbiter
+
+libgnu_a_SOURCES += mbiter.h
+
+## end gnulib module mbiter
+
+## begin gnulib module mbscasecmp
+
+libgnu_a_SOURCES += mbscasecmp.c
+
+## end gnulib module mbscasecmp
+
+## begin gnulib module mbschr
+
+libgnu_a_SOURCES += mbschr.c
+
+## end gnulib module mbschr
+
+## begin gnulib module mbslen
+
+libgnu_a_SOURCES += mbslen.c
+
+## end gnulib module mbslen
+
+## begin gnulib module mbsncasecmp
+
+libgnu_a_SOURCES += mbsncasecmp.c
+
+## end gnulib module mbsncasecmp
+
+## begin gnulib module mbsstr
+
+libgnu_a_SOURCES += mbsstr.c
+
+EXTRA_DIST += str-kmp.h
+
+## end gnulib module mbsstr
+
+## begin gnulib module mbswidth
+
+libgnu_a_SOURCES += mbswidth.h mbswidth.c
+
+## end gnulib module mbswidth
+
+## begin gnulib module mbuiter
+
+libgnu_a_SOURCES += mbuiter.h
+
+## end gnulib module mbuiter
+
+## begin gnulib module memchr
+
+
+EXTRA_DIST += memchr.c
+
+EXTRA_libgnu_a_SOURCES += memchr.c
+
+## end gnulib module memchr
+
+## begin gnulib module memcmp
+
+
+EXTRA_DIST += memcmp.c
+
+EXTRA_libgnu_a_SOURCES += memcmp.c
+
+## end gnulib module memcmp
+
+## begin gnulib module memcpy
+
+
+EXTRA_DIST += memcpy.c
+
+EXTRA_libgnu_a_SOURCES += memcpy.c
+
+## end gnulib module memcpy
+
+## begin gnulib module memmem-simple
+
+
+EXTRA_DIST += memmem.c str-two-way.h
+
+EXTRA_libgnu_a_SOURCES += memmem.c
+
+## end gnulib module memmem-simple
+
+## begin gnulib module memmove
+
+
+EXTRA_DIST += memmove.c
+
+EXTRA_libgnu_a_SOURCES += memmove.c
+
+## end gnulib module memmove
+
+## begin gnulib module mempcpy
+
+
+EXTRA_DIST += mempcpy.c
+
+EXTRA_libgnu_a_SOURCES += mempcpy.c
+
+## end gnulib module mempcpy
+
+## begin gnulib module mkstemp
+
+
+EXTRA_DIST += mkstemp.c
+
+EXTRA_libgnu_a_SOURCES += mkstemp.c
+
+## end gnulib module mkstemp
+
+## begin gnulib module setenv
+
+
+EXTRA_DIST += setenv.c
+
+EXTRA_libgnu_a_SOURCES += setenv.c
+
+## end gnulib module setenv
+
+## begin gnulib module stdbool
+
+BUILT_SOURCES += $(STDBOOL_H)
+
+# We need the following in order to create <stdbool.h> when the system
+# doesn't have one that works.
+stdbool.h: stdbool.in.h
+ rm -f $@-t $@
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+ sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \
+ } > $@-t
+ mv $@-t $@
+MOSTLYCLEANFILES += stdbool.h stdbool.h-t
+
+EXTRA_DIST += stdbool.in.h
+
+## end gnulib module stdbool
+
+## 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.
+stdint.h: stdint.in.h
+ rm -f $@-t $@
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+ sed -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
+ -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/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_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
+ -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/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 $@
+MOSTLYCLEANFILES += stdint.h stdint.h-t
+
+EXTRA_DIST += stdint.in.h
+
+## end gnulib module stdint
+
+## begin gnulib module stdlib
+
+BUILT_SOURCES += stdlib.h
+
+# We need the following in order to create <stdlib.h> when the system
+# doesn't have one that works with the given compiler.
+stdlib.h: stdlib.in.h
+ rm -f $@-t $@
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+ sed -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \
+ -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \
+ -e 's|@''GNULIB_MALLOC_POSIX''@|$(GNULIB_MALLOC_POSIX)|g' \
+ -e 's|@''GNULIB_REALLOC_POSIX''@|$(GNULIB_REALLOC_POSIX)|g' \
+ -e 's|@''GNULIB_CALLOC_POSIX''@|$(GNULIB_CALLOC_POSIX)|g' \
+ -e 's|@''GNULIB_GETSUBOPT''@|$(GNULIB_GETSUBOPT)|g' \
+ -e 's|@''GNULIB_MKDTEMP''@|$(GNULIB_MKDTEMP)|g' \
+ -e 's|@''GNULIB_MKSTEMP''@|$(GNULIB_MKSTEMP)|g' \
+ -e 's|@''GNULIB_PUTENV''@|$(GNULIB_PUTENV)|g' \
+ -e 's|@''GNULIB_RPMATCH''@|$(GNULIB_RPMATCH)|g' \
+ -e 's|@''GNULIB_SETENV''@|$(GNULIB_SETENV)|g' \
+ -e 's|@''GNULIB_STRTOD''@|$(GNULIB_STRTOD)|g' \
+ -e 's|@''GNULIB_UNSETENV''@|$(GNULIB_UNSETENV)|g' \
+ -e 's|@''HAVE_CALLOC_POSIX''@|$(HAVE_CALLOC_POSIX)|g' \
+ -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \
+ -e 's|@''HAVE_MALLOC_POSIX''@|$(HAVE_MALLOC_POSIX)|g' \
+ -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \
+ -e 's|@''HAVE_REALLOC_POSIX''@|$(HAVE_REALLOC_POSIX)|g' \
+ -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \
+ -e 's|@''HAVE_SETENV''@|$(HAVE_SETENV)|g' \
+ -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \
+ -e 's|@''HAVE_UNSETENV''@|$(HAVE_UNSETENV)|g' \
+ -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \
+ -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \
+ -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \
+ -e 's|@''VOID_UNSETENV''@|$(VOID_UNSETENV)|g' \
+ -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
+ < $(srcdir)/stdlib.in.h; \
+ } > $@-t
+ mv $@-t $@
+MOSTLYCLEANFILES += stdlib.h stdlib.h-t
+
+EXTRA_DIST += stdlib.in.h
+
+## end gnulib module stdlib
+
+## begin gnulib module stpcpy
+
+
+EXTRA_DIST += stpcpy.c
+
+EXTRA_libgnu_a_SOURCES += stpcpy.c
+
+## end gnulib module stpcpy
+
+## begin gnulib module strdup
+
+
+EXTRA_DIST += strdup.c
+
+EXTRA_libgnu_a_SOURCES += strdup.c
+
+## end gnulib module strdup
+
+## begin gnulib module streq
+
+
+EXTRA_DIST += streq.h
+
+## end gnulib module streq
+
+## begin gnulib module strerror
+
+
+EXTRA_DIST += strerror.c
+
+EXTRA_libgnu_a_SOURCES += strerror.c
+
+## end gnulib module strerror
+
+## begin gnulib module string
+
+BUILT_SOURCES += 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.
+string.h: string.in.h
+ rm -f $@-t $@
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+ sed -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \
+ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|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_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_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_STRSIGNAL''@|$(GNULIB_STRSIGNAL)|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_STRNDUP''@|$(HAVE_STRNDUP)|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''@|$(HAVE_DECL_STRERROR)|g' \
+ -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \
+ -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \
+ -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \
+ -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \
+ -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \
+ -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \
+ -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
+ < $(srcdir)/string.in.h; \
+ } > $@-t
+ mv $@-t $@
+MOSTLYCLEANFILES += string.h string.h-t
+
+EXTRA_DIST += string.in.h
+
+## end gnulib module string
+
+## begin gnulib module strndup
+
+
+EXTRA_DIST += strndup.c
+
+EXTRA_libgnu_a_SOURCES += strndup.c
+
+## end gnulib module strndup
+
+## begin gnulib module strnlen
+
+
+EXTRA_DIST += strnlen.c
+
+EXTRA_libgnu_a_SOURCES += strnlen.c
+
+## end gnulib module strnlen
+
+## begin gnulib module strnlen1
+
+libgnu_a_SOURCES += strnlen1.h strnlen1.c
+
+## end gnulib module strnlen1
+
+## begin gnulib module sys_stat
+
+BUILT_SOURCES += $(SYS_STAT_H)
+
+# We need the following in order to create <sys/stat.h> when the system
+# has one that is incomplete.
+sys/stat.h: sys_stat.in.h
+ @MKDIR_P@ sys
+ rm -f $@-t $@
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+ sed -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \
+ -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \
+ -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \
+ -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \
+ < $(srcdir)/sys_stat.in.h; \
+ } > $@-t
+ mv $@-t $@
+MOSTLYCLEANFILES += sys/stat.h sys/stat.h-t
+MOSTLYCLEANDIRS += sys
+
+EXTRA_DIST += sys_stat.in.h
+
+## end gnulib module sys_stat
+
+## begin gnulib module sys_time
+
+BUILT_SOURCES += $(SYS_TIME_H)
+
+# We need the following in order to create <sys/time.h> when the system
+# doesn't have one that works with the given compiler.
+sys/time.h: sys_time.in.h
+ @MKDIR_P@ sys
+ rm -f $@-t $@
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+ sed -e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_H)/g' \
+ -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \
+ -e 's|@''NEXT_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \
+ -e 's/@''REPLACE_GETTIMEOFDAY''@/$(REPLACE_GETTIMEOFDAY)/g' \
+ -e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \
+ < $(srcdir)/sys_time.in.h; \
+ } > $@-t
+ mv $@-t $@
+MOSTLYCLEANFILES += sys/time.h sys/time.h-t
+
+EXTRA_DIST += sys_time.in.h
+
+## end gnulib module sys_time
+
+## begin gnulib module tempname
+
+
+EXTRA_DIST += tempname.c tempname.h
+
+EXTRA_libgnu_a_SOURCES += tempname.c
+
+## end gnulib module tempname
+
+## begin gnulib module unistd
+
+BUILT_SOURCES += unistd.h
+
+# We need the following in order to create an empty placeholder for
+# <unistd.h> when the system doesn't have one.
+unistd.h: unistd.in.h
+ rm -f $@-t $@
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+ sed -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \
+ -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \
+ -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \
+ -e 's|@''GNULIB_CHOWN''@|$(GNULIB_CHOWN)|g' \
+ -e 's|@''GNULIB_DUP2''@|$(GNULIB_DUP2)|g' \
+ -e 's|@''GNULIB_ENVIRON''@|$(GNULIB_ENVIRON)|g' \
+ -e 's|@''GNULIB_FCHDIR''@|$(GNULIB_FCHDIR)|g' \
+ -e 's|@''GNULIB_FTRUNCATE''@|$(GNULIB_FTRUNCATE)|g' \
+ -e 's|@''GNULIB_GETCWD''@|$(GNULIB_GETCWD)|g' \
+ -e 's|@''GNULIB_GETLOGIN_R''@|$(GNULIB_GETLOGIN_R)|g' \
+ -e 's|@''GNULIB_GETPAGESIZE''@|$(GNULIB_GETPAGESIZE)|g' \
+ -e 's|@''GNULIB_LCHOWN''@|$(GNULIB_LCHOWN)|g' \
+ -e 's|@''GNULIB_LSEEK''@|$(GNULIB_LSEEK)|g' \
+ -e 's|@''GNULIB_READLINK''@|$(GNULIB_READLINK)|g' \
+ -e 's|@''GNULIB_SLEEP''@|$(GNULIB_SLEEP)|g' \
+ -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \
+ -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \
+ -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \
+ -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \
+ -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \
+ -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \
+ -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \
+ -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \
+ -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \
+ -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \
+ -e 's|@''REPLACE_FCHDIR''@|$(REPLACE_FCHDIR)|g' \
+ -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \
+ -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \
+ -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \
+ -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \
+ < $(srcdir)/unistd.in.h; \
+ } > $@-t
+ mv $@-t $@
+MOSTLYCLEANFILES += unistd.h unistd.h-t
+
+EXTRA_DIST += unistd.in.h
+
+## end gnulib module unistd
+
+## begin gnulib module unitypes
+
+
+EXTRA_DIST += unitypes.h
+
+## end gnulib module unitypes
+
+## begin gnulib module uniwidth/base
+
+
+EXTRA_DIST += localcharset.h uniwidth.h
+
+## end gnulib module uniwidth/base
+
+## begin gnulib module uniwidth/width
+
+libgnu_a_SOURCES += uniwidth/width.c
+
+EXTRA_DIST += uniwidth/cjk.h
+
+## end gnulib module uniwidth/width
+
+## begin gnulib module unsetenv
+
+
+EXTRA_DIST += unsetenv.c
+
+EXTRA_libgnu_a_SOURCES += unsetenv.c
+
+## end gnulib module unsetenv
+
+## 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
+ rm -f $@-t $@
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+ sed -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \
+ -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
+ -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \
+ -e 's|@''GNULIB_WCWIDTH''@|$(GNULIB_WCWIDTH)|g' \
+ -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
+ -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
+ -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
+ < $(srcdir)/wchar.in.h; \
+ } > $@-t
+ mv $@-t $@
+MOSTLYCLEANFILES += wchar.h wchar.h-t
+
+EXTRA_DIST += wchar.in.h
+
+## end gnulib module wchar
+
+## begin gnulib module wctype
+
+BUILT_SOURCES += $(WCTYPE_H)
+
+# 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
+ rm -f $@-t $@
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+ sed -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \
+ -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \
+ -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \
+ -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \
+ -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \
+ -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \
+ < $(srcdir)/wctype.in.h; \
+ } > $@-t
+ mv $@-t $@
+MOSTLYCLEANFILES += wctype.h wctype.h-t
+
+EXTRA_DIST += wctype.in.h
+
+## end gnulib module wctype
+
+## begin gnulib module wcwidth
+
+
+EXTRA_DIST += wcwidth.c
+
+EXTRA_libgnu_a_SOURCES += wcwidth.c
+
+## end gnulib module wcwidth
+
+## begin gnulib module xalloc
+
+
+EXTRA_DIST += xalloc.h xmalloc.c
+
+EXTRA_libgnu_a_SOURCES += xmalloc.c
+
+## end gnulib module xalloc
+
+## begin gnulib module xalloc-die
+
+libgnu_a_SOURCES += xalloc-die.c
+
+## end gnulib module xalloc-die
+
+## begin gnulib module xsetenv
+
+libgnu_a_SOURCES += xsetenv.h xsetenv.c
+
+## end gnulib module xsetenv
+
+
+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/gnulib/lib/Makefile.in b/gnulib/lib/Makefile.in
new file mode 100644
index 0000000..481abc8
--- /dev/null
+++ b/gnulib/lib/Makefile.in
@@ -0,0 +1,1159 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008 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-2008 Free Software Foundation, Inc.
+#
+# This file is free software, distributed under the terms of the GNU
+# General Public License. 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=. --lib=libgnu --source-base=gnulib/lib --m4-base=gnulib/m4 --doc-base=doc --aux-dir=build-aux --no-libtool --macro-prefix=gl --no-vc-files argz getopt gettext mbchar mbiter mbscasecmp mbschr mbslen mbsncasecmp mbsstr mbswidth memcpy memmem memmove mkstemp strdup strerror xalloc xsetenv
+
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@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 = gnulib/lib
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/gnulib/m4/alloca.m4 \
+ $(top_srcdir)/gnulib/m4/argz.m4 \
+ $(top_srcdir)/gnulib/m4/codeset.m4 \
+ $(top_srcdir)/gnulib/m4/eealloc.m4 \
+ $(top_srcdir)/gnulib/m4/environ.m4 \
+ $(top_srcdir)/gnulib/m4/error.m4 \
+ $(top_srcdir)/gnulib/m4/exitfail.m4 \
+ $(top_srcdir)/gnulib/m4/extensions.m4 \
+ $(top_srcdir)/gnulib/m4/getopt.m4 \
+ $(top_srcdir)/gnulib/m4/gettext.m4 \
+ $(top_srcdir)/gnulib/m4/gettimeofday.m4 \
+ $(top_srcdir)/gnulib/m4/glibc21.m4 \
+ $(top_srcdir)/gnulib/m4/gnulib-common.m4 \
+ $(top_srcdir)/gnulib/m4/gnulib-comp.m4 \
+ $(top_srcdir)/gnulib/m4/iconv.m4 \
+ $(top_srcdir)/gnulib/m4/include_next.m4 \
+ $(top_srcdir)/gnulib/m4/inline.m4 \
+ $(top_srcdir)/gnulib/m4/intlmacosx.m4 \
+ $(top_srcdir)/gnulib/m4/lib-ld.m4 \
+ $(top_srcdir)/gnulib/m4/lib-link.m4 \
+ $(top_srcdir)/gnulib/m4/lib-prefix.m4 \
+ $(top_srcdir)/gnulib/m4/localcharset.m4 \
+ $(top_srcdir)/gnulib/m4/longlong.m4 \
+ $(top_srcdir)/gnulib/m4/malloc.m4 \
+ $(top_srcdir)/gnulib/m4/malloca.m4 \
+ $(top_srcdir)/gnulib/m4/mbchar.m4 \
+ $(top_srcdir)/gnulib/m4/mbiter.m4 \
+ $(top_srcdir)/gnulib/m4/mbrtowc.m4 \
+ $(top_srcdir)/gnulib/m4/mbscasecmp.m4 \
+ $(top_srcdir)/gnulib/m4/mbschr.m4 \
+ $(top_srcdir)/gnulib/m4/mbslen.m4 \
+ $(top_srcdir)/gnulib/m4/mbsncasecmp.m4 \
+ $(top_srcdir)/gnulib/m4/mbsstr.m4 \
+ $(top_srcdir)/gnulib/m4/mbstate_t.m4 \
+ $(top_srcdir)/gnulib/m4/mbswidth.m4 \
+ $(top_srcdir)/gnulib/m4/memchr.m4 \
+ $(top_srcdir)/gnulib/m4/memcmp.m4 \
+ $(top_srcdir)/gnulib/m4/memcpy.m4 \
+ $(top_srcdir)/gnulib/m4/memmem.m4 \
+ $(top_srcdir)/gnulib/m4/memmove.m4 \
+ $(top_srcdir)/gnulib/m4/mempcpy.m4 \
+ $(top_srcdir)/gnulib/m4/mkstemp.m4 \
+ $(top_srcdir)/gnulib/m4/nls.m4 \
+ $(top_srcdir)/gnulib/m4/onceonly.m4 \
+ $(top_srcdir)/gnulib/m4/po.m4 \
+ $(top_srcdir)/gnulib/m4/progtest.m4 \
+ $(top_srcdir)/gnulib/m4/setenv.m4 \
+ $(top_srcdir)/gnulib/m4/stdbool.m4 \
+ $(top_srcdir)/gnulib/m4/stdint.m4 \
+ $(top_srcdir)/gnulib/m4/stdlib_h.m4 \
+ $(top_srcdir)/gnulib/m4/stpcpy.m4 \
+ $(top_srcdir)/gnulib/m4/strdup.m4 \
+ $(top_srcdir)/gnulib/m4/strerror.m4 \
+ $(top_srcdir)/gnulib/m4/string_h.m4 \
+ $(top_srcdir)/gnulib/m4/strndup.m4 \
+ $(top_srcdir)/gnulib/m4/strnlen.m4 \
+ $(top_srcdir)/gnulib/m4/sys_stat_h.m4 \
+ $(top_srcdir)/gnulib/m4/sys_time_h.m4 \
+ $(top_srcdir)/gnulib/m4/tempname.m4 \
+ $(top_srcdir)/gnulib/m4/unistd_h.m4 \
+ $(top_srcdir)/gnulib/m4/wchar.m4 \
+ $(top_srcdir)/gnulib/m4/wchar_t.m4 \
+ $(top_srcdir)/gnulib/m4/wctype.m4 \
+ $(top_srcdir)/gnulib/m4/wcwidth.m4 \
+ $(top_srcdir)/gnulib/m4/wint_t.m4 \
+ $(top_srcdir)/gnulib/m4/xalloc.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 =
+LIBRARIES = $(noinst_LIBRARIES)
+AR = ar
+ARFLAGS = cru
+libgnu_a_AR = $(AR) $(ARFLAGS)
+am__DEPENDENCIES_1 =
+am__dirstamp = $(am__leading_dot)dirstamp
+am_libgnu_a_OBJECTS = localcharset.$(OBJEXT) malloca.$(OBJEXT) \
+ mbchar.$(OBJEXT) mbscasecmp.$(OBJEXT) mbschr.$(OBJEXT) \
+ mbslen.$(OBJEXT) mbsncasecmp.$(OBJEXT) mbsstr.$(OBJEXT) \
+ mbswidth.$(OBJEXT) strnlen1.$(OBJEXT) uniwidth/width.$(OBJEXT) \
+ xalloc-die.$(OBJEXT) xsetenv.$(OBJEXT)
+libgnu_a_OBJECTS = $(am_libgnu_a_OBJECTS)
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libgnu_a_SOURCES) $(EXTRA_libgnu_a_SOURCES)
+DIST_SOURCES = $(libgnu_a_SOURCES) $(EXTRA_libgnu_a_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+ARGZ_H = @ARGZ_H@
+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@
+GETOPT_H = @GETOPT_H@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_DUP2 = @GNULIB_DUP2@
+GNULIB_ENVIRON = @GNULIB_ENVIRON@
+GNULIB_FCHDIR = @GNULIB_FCHDIR@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+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_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRSEP = @GNULIB_STRSEP@
+GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
+GNULIB_STRSTR = @GNULIB_STRSTR@
+GNULIB_STRTOD = @GNULIB_STRTOD@
+GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
+GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GREP = @GREP@
+HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR = @HAVE_DECL_STRERROR@
+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_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SETENV = @HAVE_SETENV@
+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_SLEEP = @HAVE_SLEEP@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRNDUP = @HAVE_STRNDUP@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNSETENV = @HAVE_UNSETENV@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE__BOOL = @HAVE__BOOL@
+HELP2MAN = @HELP2MAN@
+HEVEA = @HEVEA@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LDFLAGS = @LDFLAGS@
+LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@
+LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_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_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_FCHDIR = @REPLACE_FCHDIR@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+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@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYS_STAT_H = @SYS_STAT_H@
+SYS_TIME_H = @SYS_TIME_H@
+TERMLIBS = @TERMLIBS@
+TEX = @TEX@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+VOID_UNSETENV = @VOID_UNSETENV@
+WCHAR_H = @WCHAR_H@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WCTYPE_H = @WCTYPE_H@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+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@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_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@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+native_tools = @native_tools@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+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
+noinst_HEADERS =
+noinst_LIBRARIES = libgnu.a
+noinst_LTLIBRARIES =
+EXTRA_DIST = alloca.in.h argz.c argz.in.h error.c error.h exitfail.c \
+ exitfail.h getopt.c getopt.in.h getopt1.c getopt_int.h \
+ $(top_srcdir)/build-aux/config.rpath gettimeofday.c \
+ $(top_srcdir)/build-aux/config.rpath intprops.h \
+ $(top_srcdir)/build-aux/link-warning.h config.charset \
+ ref-add.sin ref-del.sin malloc.c malloca.h malloca.valgrind \
+ mbchar.h str-kmp.h memchr.c memcmp.c memcpy.c memmem.c \
+ str-two-way.h memmove.c mempcpy.c mkstemp.c setenv.c \
+ stdbool.in.h stdint.in.h stdlib.in.h stpcpy.c strdup.c streq.h \
+ strerror.c string.in.h strndup.c strnlen.c sys_stat.in.h \
+ sys_time.in.h tempname.c tempname.h unistd.in.h unitypes.h \
+ localcharset.h uniwidth.h uniwidth/cjk.h unsetenv.c wchar.in.h \
+ wctype.in.h wcwidth.c xalloc.h xmalloc.c
+BUILT_SOURCES = $(ALLOCA_H) $(ARGZ_H) configmake.h $(GETOPT_H) \
+ $(STDBOOL_H) $(STDINT_H) stdlib.h string.h $(SYS_STAT_H) \
+ $(SYS_TIME_H) unistd.h $(WCHAR_H) $(WCTYPE_H)
+SUFFIXES = .sed .sin
+MOSTLYCLEANFILES = core *.stackdump alloca.h alloca.h-t argz.h \
+ argz.h-t getopt.h getopt.h-t stdbool.h stdbool.h-t stdint.h \
+ stdint.h-t stdlib.h stdlib.h-t string.h string.h-t sys/stat.h \
+ sys/stat.h-t sys/time.h sys/time.h-t unistd.h unistd.h-t \
+ wchar.h wchar.h-t wctype.h wctype.h-t
+MOSTLYCLEANDIRS = sys
+CLEANFILES = configmake.h configmake.h-t charset.alias ref-add.sed \
+ ref-del.sed
+DISTCLEANFILES =
+MAINTAINERCLEANFILES =
+
+# This is for those projects which use "gettextize --intl" to put a source-code
+# copy of libintl into their package. In such projects, every Makefile.am needs
+# -I$(top_builddir)/intl, so that <libintl.h> can be found in this directory.
+# For the Makefile.ams in other directories it is the maintainer's
+# responsibility; for the one from gnulib we do it here.
+# This option has no effect when the user disables NLS (because then the intl
+# directory contains no libintl.h file) or when the project does not use
+# "gettextize --intl".
+AM_CPPFLAGS = -I$(top_builddir)/intl
+libgnu_a_SOURCES = gettext.h localcharset.h localcharset.c malloca.c \
+ mbchar.c mbiter.h mbscasecmp.c mbschr.c mbslen.c mbsncasecmp.c \
+ mbsstr.c mbswidth.h mbswidth.c mbuiter.h strnlen1.h strnlen1.c \
+ uniwidth/width.c xalloc-die.c xsetenv.h xsetenv.c
+libgnu_a_LIBADD = $(gl_LIBOBJS)
+libgnu_a_DEPENDENCIES = $(gl_LIBOBJS)
+EXTRA_libgnu_a_SOURCES = argz.c error.c exitfail.c getopt.c getopt1.c \
+ gettimeofday.c malloc.c memchr.c memcmp.c memcpy.c memmem.c \
+ memmove.c mempcpy.c mkstemp.c setenv.c stpcpy.c strdup.c \
+ strerror.c strndup.c strnlen.c tempname.c unsetenv.c wcwidth.c \
+ xmalloc.c
+LINK_WARNING_H = $(top_srcdir)/build-aux/link-warning.h
+charset_alias = $(DESTDIR)$(libdir)/charset.alias
+charset_tmp = $(DESTDIR)$(libdir)/charset.tmp
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .sed .sin .c .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits gnulib/lib/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnits gnulib/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+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)
+ -rm -f libgnu.a
+ $(libgnu_a_AR) libgnu.a $(libgnu_a_OBJECTS) $(libgnu_a_LIBADD)
+ $(RANLIB) libgnu.a
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+ -rm -f uniwidth/width.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argz.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exitfail.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt1.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gettimeofday.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localcharset.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloca.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbchar.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbscasecmp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbschr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbslen.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbsncasecmp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbsstr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbswidth.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memchr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memcmp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memcpy.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memmem.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memmove.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mempcpy.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkstemp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setenv.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stpcpy.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strdup.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strndup.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strnlen.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strnlen1.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tempname.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unsetenv.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wcwidth.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xalloc-die.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmalloc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xsetenv.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@uniwidth/$(DEPDIR)/width.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ mv -f $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@ mv -f $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+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 $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$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: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) all-local
+installdirs:
+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:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+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)
+ -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-am
+
+clean-am: clean-generic clean-noinstLIBRARIES clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR) uniwidth/$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+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
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR) uniwidth/$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-local
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+ clean-generic clean-noinstLIBRARIES clean-noinstLTLIBRARIES \
+ ctags 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 maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic \
+ mostlyclean-local pdf pdf-am ps ps-am tags uninstall \
+ uninstall-am uninstall-local
+
+
+# We need the following in order to create <alloca.h> when the system
+# doesn't have one that works with the given compiler.
+alloca.h: alloca.in.h
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+ cat $(srcdir)/alloca.in.h; \
+ } > $@-t
+ mv -f $@-t $@
+
+# We need the following in order to create <argz.h> when the system
+# doesn't have one that works with the given compiler.
+argz.h: argz.in.h
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+ cat $(srcdir)/argz.in.h; \
+ } > $@-t
+ mv -f $@-t $@
+
+# Retrieve values of the variables through 'configure' followed by
+# 'make', not directly through 'configure', so that a user who
+# sets some of these variables consistently on the 'make' command
+# line gets correct results.
+#
+# One advantage of this approach, compared to the classical
+# approach of adding -DLIBDIR=\"$(libdir)\" etc. to AM_CPPFLAGS,
+# is that it protects against the use of undefined variables.
+# If, say, $(libdir) is not set in the Makefile, LIBDIR is not
+# defined by this module, and code using LIBDIR gives a
+# compilation error.
+#
+# Another advantage is that 'make' output is shorter.
+#
+# Listed in the same order as the GNU makefile conventions.
+# The Automake-defined pkg* macros are appended, in the order
+# listed in the Automake 1.10a+ documentation.
+configmake.h: Makefile
+ 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 $@-t $@
+
+# We need the following in order to create <getopt.h> when the system
+# doesn't have one that works with the given compiler.
+getopt.h: getopt.in.h
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+ cat $(srcdir)/getopt.in.h; \
+ } > $@-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: all-local
+ test $(GLIBC21) != no || $(mkinstalldirs) $(DESTDIR)$(libdir)
+ 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 test $(GLIBC21) = no; then \
+ sed -f ref-add.sed charset.alias > $(charset_tmp) ; \
+ $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
+ rm -f $(charset_tmp) ; \
+ fi ; \
+ fi
+
+uninstall-local: 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
+ rm -f t-$@ $@
+ $(SHELL) $(srcdir)/config.charset '$(host)' > t-$@
+ mv t-$@ $@
+.sin.sed:
+ rm -f t-$@ $@
+ sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@
+ mv t-$@ $@
+
+# We need the following in order to create <stdbool.h> when the system
+# doesn't have one that works.
+stdbool.h: stdbool.in.h
+ rm -f $@-t $@
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+ sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \
+ } > $@-t
+ mv $@-t $@
+
+# We need the following in order to create <stdint.h> when the system
+# doesn't have one that works with the given compiler.
+stdint.h: stdint.in.h
+ rm -f $@-t $@
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+ sed -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
+ -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/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_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
+ -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/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 $@
+
+# We need the following in order to create <stdlib.h> when the system
+# doesn't have one that works with the given compiler.
+stdlib.h: stdlib.in.h
+ rm -f $@-t $@
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+ sed -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \
+ -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \
+ -e 's|@''GNULIB_MALLOC_POSIX''@|$(GNULIB_MALLOC_POSIX)|g' \
+ -e 's|@''GNULIB_REALLOC_POSIX''@|$(GNULIB_REALLOC_POSIX)|g' \
+ -e 's|@''GNULIB_CALLOC_POSIX''@|$(GNULIB_CALLOC_POSIX)|g' \
+ -e 's|@''GNULIB_GETSUBOPT''@|$(GNULIB_GETSUBOPT)|g' \
+ -e 's|@''GNULIB_MKDTEMP''@|$(GNULIB_MKDTEMP)|g' \
+ -e 's|@''GNULIB_MKSTEMP''@|$(GNULIB_MKSTEMP)|g' \
+ -e 's|@''GNULIB_PUTENV''@|$(GNULIB_PUTENV)|g' \
+ -e 's|@''GNULIB_RPMATCH''@|$(GNULIB_RPMATCH)|g' \
+ -e 's|@''GNULIB_SETENV''@|$(GNULIB_SETENV)|g' \
+ -e 's|@''GNULIB_STRTOD''@|$(GNULIB_STRTOD)|g' \
+ -e 's|@''GNULIB_UNSETENV''@|$(GNULIB_UNSETENV)|g' \
+ -e 's|@''HAVE_CALLOC_POSIX''@|$(HAVE_CALLOC_POSIX)|g' \
+ -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \
+ -e 's|@''HAVE_MALLOC_POSIX''@|$(HAVE_MALLOC_POSIX)|g' \
+ -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \
+ -e 's|@''HAVE_REALLOC_POSIX''@|$(HAVE_REALLOC_POSIX)|g' \
+ -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \
+ -e 's|@''HAVE_SETENV''@|$(HAVE_SETENV)|g' \
+ -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \
+ -e 's|@''HAVE_UNSETENV''@|$(HAVE_UNSETENV)|g' \
+ -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \
+ -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \
+ -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \
+ -e 's|@''VOID_UNSETENV''@|$(VOID_UNSETENV)|g' \
+ -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
+ < $(srcdir)/stdlib.in.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.
+string.h: string.in.h
+ rm -f $@-t $@
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+ sed -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \
+ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|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_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_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_STRSIGNAL''@|$(GNULIB_STRSIGNAL)|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_STRNDUP''@|$(HAVE_STRNDUP)|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''@|$(HAVE_DECL_STRERROR)|g' \
+ -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \
+ -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \
+ -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \
+ -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \
+ -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \
+ -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \
+ -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
+ < $(srcdir)/string.in.h; \
+ } > $@-t
+ mv $@-t $@
+
+# We need the following in order to create <sys/stat.h> when the system
+# has one that is incomplete.
+sys/stat.h: sys_stat.in.h
+ @MKDIR_P@ sys
+ rm -f $@-t $@
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+ sed -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \
+ -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \
+ -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \
+ -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \
+ < $(srcdir)/sys_stat.in.h; \
+ } > $@-t
+ mv $@-t $@
+
+# We need the following in order to create <sys/time.h> when the system
+# doesn't have one that works with the given compiler.
+sys/time.h: sys_time.in.h
+ @MKDIR_P@ sys
+ rm -f $@-t $@
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+ sed -e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_H)/g' \
+ -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \
+ -e 's|@''NEXT_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \
+ -e 's/@''REPLACE_GETTIMEOFDAY''@/$(REPLACE_GETTIMEOFDAY)/g' \
+ -e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \
+ < $(srcdir)/sys_time.in.h; \
+ } > $@-t
+ mv $@-t $@
+
+# We need the following in order to create an empty placeholder for
+# <unistd.h> when the system doesn't have one.
+unistd.h: unistd.in.h
+ rm -f $@-t $@
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+ sed -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \
+ -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \
+ -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \
+ -e 's|@''GNULIB_CHOWN''@|$(GNULIB_CHOWN)|g' \
+ -e 's|@''GNULIB_DUP2''@|$(GNULIB_DUP2)|g' \
+ -e 's|@''GNULIB_ENVIRON''@|$(GNULIB_ENVIRON)|g' \
+ -e 's|@''GNULIB_FCHDIR''@|$(GNULIB_FCHDIR)|g' \
+ -e 's|@''GNULIB_FTRUNCATE''@|$(GNULIB_FTRUNCATE)|g' \
+ -e 's|@''GNULIB_GETCWD''@|$(GNULIB_GETCWD)|g' \
+ -e 's|@''GNULIB_GETLOGIN_R''@|$(GNULIB_GETLOGIN_R)|g' \
+ -e 's|@''GNULIB_GETPAGESIZE''@|$(GNULIB_GETPAGESIZE)|g' \
+ -e 's|@''GNULIB_LCHOWN''@|$(GNULIB_LCHOWN)|g' \
+ -e 's|@''GNULIB_LSEEK''@|$(GNULIB_LSEEK)|g' \
+ -e 's|@''GNULIB_READLINK''@|$(GNULIB_READLINK)|g' \
+ -e 's|@''GNULIB_SLEEP''@|$(GNULIB_SLEEP)|g' \
+ -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \
+ -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \
+ -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \
+ -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \
+ -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \
+ -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \
+ -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \
+ -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \
+ -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \
+ -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \
+ -e 's|@''REPLACE_FCHDIR''@|$(REPLACE_FCHDIR)|g' \
+ -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \
+ -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \
+ -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \
+ -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \
+ < $(srcdir)/unistd.in.h; \
+ } > $@-t
+ mv $@-t $@
+
+# We need the following in order to create <wchar.h> when the system
+# version does not work standalone.
+wchar.h: wchar.in.h
+ rm -f $@-t $@
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+ sed -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \
+ -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
+ -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \
+ -e 's|@''GNULIB_WCWIDTH''@|$(GNULIB_WCWIDTH)|g' \
+ -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
+ -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
+ -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
+ < $(srcdir)/wchar.in.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
+ rm -f $@-t $@
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+ sed -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \
+ -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \
+ -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \
+ -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \
+ -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \
+ -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \
+ < $(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/gnulib/lib/alloca.in.h b/gnulib/lib/alloca.in.h
new file mode 100644
index 0000000..6269607
--- /dev/null
+++ b/gnulib/lib/alloca.in.h
@@ -0,0 +1,56 @@
+/* Memory allocation on the stack.
+
+ Copyright (C) 1995, 1999, 2001-2004, 2006-2008 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, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+/* 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
+# else
+# include <stddef.h>
+# ifdef __cplusplus
+extern "C"
+# endif
+void *alloca (size_t);
+# endif
+#endif
+
+#endif /* _GL_ALLOCA_H */
diff --git a/gnulib/lib/argz.c b/gnulib/lib/argz.c
new file mode 100644
index 0000000..111cd3c
--- /dev/null
+++ b/gnulib/lib/argz.c
@@ -0,0 +1,406 @@
+/* Functions for dealing with '\0' separated arg vectors.
+ Copyright (C) 1995-1998, 2000-2002, 2006, 2008 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
+ 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, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#include <config.h>
+
+#include <argz.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+
+/* Add BUF, of length BUF_LEN to the argz vector in ARGZ & ARGZ_LEN. */
+error_t
+argz_append (char **argz, size_t *argz_len, const char *buf, size_t buf_len)
+{
+ size_t new_argz_len = *argz_len + buf_len;
+ char *new_argz = realloc (*argz, new_argz_len);
+ if (new_argz)
+ {
+ memcpy (new_argz + *argz_len, buf, buf_len);
+ *argz = new_argz;
+ *argz_len = new_argz_len;
+ return 0;
+ }
+ else
+ return ENOMEM;
+}
+
+/* Add STR to the argz vector in ARGZ & ARGZ_LEN. This should be moved into
+ argz.c in libshouldbelibc. */
+error_t
+argz_add (char **argz, size_t *argz_len, const char *str)
+{
+ return argz_append (argz, argz_len, str, strlen (str) + 1);
+}
+
+
+
+error_t
+argz_add_sep (char **argz, size_t *argz_len, const char *string, int delim)
+{
+ size_t nlen = strlen (string) + 1;
+
+ if (nlen > 1)
+ {
+ const char *rp;
+ char *wp;
+
+ *argz = (char *) realloc (*argz, *argz_len + nlen);
+ if (*argz == NULL)
+ return ENOMEM;
+
+ wp = *argz + *argz_len;
+ rp = string;
+ do
+ if (*rp == delim)
+ {
+ if (wp > *argz && wp[-1] != '\0')
+ *wp++ = '\0';
+ else
+ --nlen;
+ }
+ else
+ *wp++ = *rp;
+ while (*rp++ != '\0');
+
+ *argz_len += nlen;
+ }
+
+ return 0;
+}
+
+
+
+error_t
+argz_create_sep (const char *string, int delim, char **argz, size_t *len)
+{
+ size_t nlen = strlen (string) + 1;
+
+ if (nlen > 1)
+ {
+ const char *rp;
+ char *wp;
+
+ *argz = (char *) malloc (nlen);
+ if (*argz == NULL)
+ return ENOMEM;
+
+ rp = string;
+ wp = *argz;
+ do
+ if (*rp == delim)
+ {
+ if (wp > *argz && wp[-1] != '\0')
+ *wp++ = '\0';
+ else
+ --nlen;
+ }
+ else
+ *wp++ = *rp;
+ while (*rp++ != '\0');
+
+ if (nlen == 0)
+ {
+ free (*argz);
+ *argz = NULL;
+ *len = 0;
+ }
+
+ *len = nlen;
+ }
+ else
+ {
+ *argz = NULL;
+ *len = 0;
+ }
+
+ return 0;
+}
+
+
+/* Insert ENTRY into ARGZ & ARGZ_LEN before BEFORE, which should be an
+ existing entry in ARGZ; if BEFORE is NULL, ENTRY is appended to the end.
+ Since ARGZ's first entry is the same as ARGZ, argz_insert (ARGZ, ARGZ_LEN,
+ ARGZ, ENTRY) will insert ENTRY at the beginning of ARGZ. If BEFORE is not
+ in ARGZ, EINVAL is returned, else if memory can't be allocated for the new
+ ARGZ, ENOMEM is returned, else 0. */
+error_t
+argz_insert (char **argz, size_t *argz_len, char *before, const char *entry)
+{
+ if (! before)
+ return argz_add (argz, argz_len, entry);
+
+ if (before < *argz || before >= *argz + *argz_len)
+ return EINVAL;
+
+ if (before > *argz)
+ /* Make sure before is actually the beginning of an entry. */
+ while (before[-1])
+ before--;
+
+ {
+ size_t after_before = *argz_len - (before - *argz);
+ size_t entry_len = strlen (entry) + 1;
+ size_t new_argz_len = *argz_len + entry_len;
+ char *new_argz = realloc (*argz, new_argz_len);
+
+ if (new_argz)
+ {
+ before = new_argz + (before - *argz);
+ memmove (before + entry_len, before, after_before);
+ memmove (before, entry, entry_len);
+ *argz = new_argz;
+ *argz_len = new_argz_len;
+ return 0;
+ }
+ else
+ return ENOMEM;
+ }
+}
+
+
+char *
+argz_next (const char *argz, size_t argz_len, const char *entry)
+{
+ if (entry)
+ {
+ if (entry < argz + argz_len)
+ entry = strchr (entry, '\0') + 1;
+
+ return entry >= argz + argz_len ? NULL : (char *) entry;
+ }
+ else
+ if (argz_len > 0)
+ return (char *) argz;
+ else
+ return NULL;
+}
+
+
+/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
+ except the last into the character SEP. */
+void
+argz_stringify (char *argz, size_t len, int sep)
+{
+ if (len > 0)
+ while (1)
+ {
+ size_t part_len = strnlen (argz, len);
+ argz += part_len;
+ len -= part_len;
+ if (len-- <= 1) /* includes final '\0' we want to stop at */
+ break;
+ *argz++ = sep;
+ }
+}
+
+
+/* Returns the number of strings in ARGZ. */
+size_t
+argz_count (const char *argz, size_t len)
+{
+ size_t count = 0;
+ while (len > 0)
+ {
+ size_t part_len = strlen(argz);
+ argz += part_len + 1;
+ len -= part_len + 1;
+ count++;
+ }
+ return count;
+}
+
+
+/* Puts pointers to each string in ARGZ, plus a terminating 0 element, into
+ ARGV, which must be large enough to hold them all. */
+void
+argz_extract (const char *argz, size_t len, char **argv)
+{
+ while (len > 0)
+ {
+ size_t part_len = strlen (argz);
+ *argv++ = (char *) argz;
+ argz += part_len + 1;
+ len -= part_len + 1;
+ }
+ *argv = 0;
+}
+
+
+/* Make a '\0' separated arg vector from a unix argv vector, returning it in
+ ARGZ, and the total length in LEN. If a memory allocation error occurs,
+ ENOMEM is returned, otherwise 0. */
+error_t
+argz_create (char *const argv[], char **argz, size_t *len)
+{
+ int argc;
+ size_t tlen = 0;
+ char *const *ap;
+ char *p;
+
+ for (argc = 0; argv[argc] != NULL; ++argc)
+ tlen += strlen (argv[argc]) + 1;
+
+ if (tlen == 0)
+ *argz = NULL;
+ else
+ {
+ *argz = malloc (tlen);
+ if (*argz == NULL)
+ return ENOMEM;
+
+ for (p = *argz, ap = argv; *ap; ++ap, ++p)
+ p = stpcpy (p, *ap);
+ }
+ *len = tlen;
+
+ return 0;
+}
+
+
+/* Delete ENTRY from ARGZ & ARGZ_LEN, if any. */
+void
+argz_delete (char **argz, size_t *argz_len, char *entry)
+{
+ if (entry)
+ /* Get rid of the old value for NAME. */
+ {
+ size_t entry_len = strlen (entry) + 1;
+ *argz_len -= entry_len;
+ memmove (entry, entry + entry_len, *argz_len - (entry - *argz));
+ if (*argz_len == 0)
+ {
+ free (*argz);
+ *argz = 0;
+ }
+ }
+}
+
+
+/* Append BUF, of length BUF_LEN to *TO, of length *TO_LEN, reallocating and
+ updating *TO & *TO_LEN appropriately. If an allocation error occurs,
+ *TO's old value is freed, and *TO is set to 0. */
+static void
+str_append (char **to, size_t *to_len, const char *buf, const size_t buf_len)
+{
+ size_t new_len = *to_len + buf_len;
+ char *new_to = realloc (*to, new_len + 1);
+
+ if (new_to)
+ {
+ *((char *) mempcpy (new_to + *to_len, buf, buf_len)) = '\0';
+ *to = new_to;
+ *to_len = new_len;
+ }
+ else
+ {
+ free (*to);
+ *to = 0;
+ }
+}
+
+/* Replace any occurrences of the string STR in ARGZ with WITH, reallocating
+ ARGZ as necessary. If REPLACE_COUNT is non-zero, *REPLACE_COUNT will be
+ incremented by number of replacements performed. */
+error_t
+argz_replace (char **argz, size_t *argz_len, const char *str, const char *with,
+ unsigned *replace_count)
+{
+ error_t err = 0;
+
+ if (str && *str)
+ {
+ char *arg = 0;
+ char *src = *argz;
+ size_t src_len = *argz_len;
+ char *dst = 0;
+ size_t dst_len = 0;
+ int delayed_copy = 1; /* True while we've avoided copying anything. */
+ size_t str_len = strlen (str), with_len = strlen (with);
+
+ while (!err && (arg = argz_next (src, src_len, arg)))
+ {
+ char *match = strstr (arg, str);
+ if (match)
+ {
+ char *from = match + str_len;
+ size_t to_len = match - arg;
+ char *to = strndup (arg, to_len);
+
+ while (to && from)
+ {
+ str_append (&to, &to_len, with, with_len);
+ if (to)
+ {
+ match = strstr (from, str);
+ if (match)
+ {
+ str_append (&to, &to_len, from, match - from);
+ from = match + str_len;
+ }
+ else
+ {
+ str_append (&to, &to_len, from, strlen (from));
+ from = 0;
+ }
+ }
+ }
+
+ if (to)
+ {
+ if (delayed_copy)
+ /* We avoided copying SRC to DST until we found a match;
+ now that we've done so, copy everything from the start
+ of SRC. */
+ {
+ if (arg > src)
+ err = argz_append (&dst, &dst_len, src, (arg - src));
+ delayed_copy = 0;
+ }
+ if (! err)
+ err = argz_add (&dst, &dst_len, to);
+ free (to);
+ }
+ else
+ err = ENOMEM;
+
+ if (replace_count)
+ (*replace_count)++;
+ }
+ else if (! delayed_copy)
+ err = argz_add (&dst, &dst_len, arg);
+ }
+
+ if (! err)
+ {
+ if (! delayed_copy)
+ /* We never found any instances of str. */
+ {
+ free (src);
+ *argz = dst;
+ *argz_len = dst_len;
+ }
+ }
+ else if (dst_len > 0)
+ free (dst);
+ }
+
+ return err;
+}
diff --git a/gnulib/lib/argz.in.h b/gnulib/lib/argz.in.h
new file mode 100644
index 0000000..fffc9f3
--- /dev/null
+++ b/gnulib/lib/argz.in.h
@@ -0,0 +1,161 @@
+/* Routines for dealing with '\0' separated arg vectors.
+ Copyright (C) 1995,96,97,98,99,2000,2004,2007 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
+ modify 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.
+
+ The GNU C Library is distributed in the hope that 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 General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#ifndef _ARGZ_H
+#define _ARGZ_H 1
+
+
+#define __need_error_t
+#include <errno.h>
+#include <string.h> /* Need size_t, and strchr is called below. */
+
+#ifndef const
+# define const const
+#endif
+
+#ifndef __error_t_defined
+typedef int error_t;
+#endif
+
+
+
+/* Make a '\0' separated arg vector from a unix argv vector, returning it in
+ ARGZ, and the total length in LEN. If a memory allocation error occurs,
+ ENOMEM is returned, otherwise 0. The result can be destroyed using free. */
+
+extern error_t argz_create (char *const __argv[], char **restrict __argz,
+ size_t *restrict __len);
+
+/* Make a '\0' separated arg vector from a SEP separated list in
+ STRING, returning it in ARGZ, and the total length in LEN. If a
+ memory allocation error occurs, ENOMEM is returned, otherwise 0.
+ The result can be destroyed using free. */
+
+extern error_t argz_create_sep (const char *restrict string,
+ int __sep, char **restrict __argz,
+ size_t *restrict __len);
+
+/* Returns the number of strings in ARGZ. */
+
+extern size_t argz_count (const char *__argz, size_t __len)
+;
+
+/* Puts pointers to each string in ARGZ into ARGV, which must be large enough
+ to hold them all. */
+
+extern void argz_extract (const char *restrict __argz, size_t __len,
+ char **restrict __argv);
+
+/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
+ except the last into the character SEP. */
+
+extern void argz_stringify (char *__argz, size_t __len, int __sep);
+
+/* Append BUF, of length BUF_LEN to the argz vector in ARGZ & ARGZ_LEN. */
+
+extern error_t argz_append (char **restrict __argz,
+ size_t *restrict __argz_len,
+ const char *restrict __buf, size_t __buf_len)
+;
+
+/* Append STR to the argz vector in ARGZ & ARGZ_LEN. */
+
+extern error_t argz_add (char **restrict __argz,
+ size_t *restrict __argz_len,
+ const char *restrict str);
+
+/* Append SEP separated list in STRING to the argz vector in ARGZ &
+ ARGZ_LEN. */
+
+extern error_t argz_add_sep (char **restrict __argz,
+ size_t *restrict __argz_len,
+ const char *restrict string, int __delim)
+;
+
+/* Delete ENTRY from ARGZ & ARGZ_LEN, if it appears there. */
+
+extern void argz_delete (char **restrict __argz,
+ size_t *restrict __argz_len,
+ char *restrict __entry);
+
+/* Insert ENTRY into ARGZ & ARGZ_LEN before BEFORE, which should be an
+ existing entry in ARGZ; if BEFORE is NULL, ENTRY is appended to the end.
+ Since ARGZ's first entry is the same as ARGZ, argz_insert (ARGZ, ARGZ_LEN,
+ ARGZ, ENTRY) will insert ENTRY at the beginning of ARGZ. If BEFORE is not
+ in ARGZ, EINVAL is returned, else if memory can't be allocated for the new
+ ARGZ, ENOMEM is returned, else 0. */
+
+extern error_t argz_insert (char **restrict __argz,
+ size_t *restrict __argz_len,
+ char *restrict __before,
+ const char *restrict __entry);
+
+/* Replace any occurrences of the string STR in ARGZ with WITH, reallocating
+ ARGZ as necessary. If REPLACE_COUNT is non-zero, *REPLACE_COUNT will be
+ incremented by number of replacements performed. */
+
+extern error_t argz_replace (char **restrict __argz,
+ size_t *restrict __argz_len,
+ const char *restrict str,
+ const char *restrict __with,
+ unsigned int *restrict __replace_count);
+
+/* Returns the next entry in ARGZ & ARGZ_LEN after ENTRY, or NULL if there
+ are no more. If entry is NULL, then the first entry is returned. This
+ behavior allows two convenient iteration styles:
+
+ char *entry = 0;
+ while ((entry = argz_next (argz, argz_len, entry)))
+ ...;
+
+ or
+
+ char *entry;
+ for (entry = argz; entry; entry = argz_next (argz, argz_len, entry))
+ ...;
+*/
+
+extern char *argz_next (const char *restrict __argz, size_t __argz_len,
+ const char *restrict __entry);
+
+#ifdef __USE_EXTERN_INLINES
+__extern_inline char *
+__NTH (argz_next (const char *__argz, size_t __argz_len,
+ const char *__entry))
+{
+ if (__entry)
+ {
+ if (__entry < __argz + __argz_len)
+ __entry = strchr (__entry, '\0') + 1;
+
+ return __entry >= __argz + __argz_len ? (char *) NULL : (char *) __entry;
+ }
+ else
+ return __argz_len > 0 ? (char *) __argz : 0;
+}
+__extern_inline char *
+__NTH (argz_next (const char *__argz, size_t __argz_len,
+ const char *__entry))
+{
+ return argz_next (__argz, __argz_len, __entry);
+}
+#endif /* Use extern inlines. */
+
+
+#endif /* argz.h */
diff --git a/gnulib/lib/config.charset b/gnulib/lib/config.charset
new file mode 100755
index 0000000..c233788
--- /dev/null
+++ b/gnulib/lib/config.charset
@@ -0,0 +1,649 @@
+#! /bin/sh
+# Output a system dependent table of character encoding aliases.
+#
+# Copyright (C) 2000-2004, 2006-2007 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, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# 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
+# ASCII, ANSI_X3.4-1968 glibc solaris freebsd netbsd darwin
+# ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin
+# ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin
+# ISO-8859-3 Y glibc solaris
+# ISO-8859-4 Y osf solaris freebsd netbsd openbsd darwin
+# ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin
+# ISO-8859-6 Y glibc aix hpux solaris
+# ISO-8859-7 Y glibc aix hpux irix osf solaris netbsd openbsd darwin
+# ISO-8859-8 Y glibc aix hpux osf solaris
+# ISO-8859-9 Y glibc aix hpux irix osf solaris darwin
+# ISO-8859-13 glibc netbsd openbsd darwin
+# ISO-8859-14 glibc
+# ISO-8859-15 glibc aix osf solaris freebsd netbsd openbsd darwin
+# KOI8-R Y glibc solaris freebsd netbsd openbsd darwin
+# KOI8-U Y glibc freebsd netbsd openbsd darwin
+# 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 woe32 dos
+# CP943 aix
+# CP949 osf woe32 dos
+# CP950 woe32 dos
+# CP1046 aix
+# CP1124 aix
+# CP1125 dos
+# CP1129 aix
+# CP1250 woe32
+# CP1251 glibc solaris netbsd openbsd darwin 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
+# EUC-TW glibc aix hpux irix osf solaris netbsd
+# BIG5 Y glibc aix hpux osf solaris freebsd netbsd darwin
+# BIG5-HKSCS glibc solaris
+# GBK glibc aix osf solaris woe32 dos
+# GB18030 glibc solaris netbsd
+# SHIFT_JIS Y hpux osf solaris freebsd netbsd darwin
+# JOHAB glibc solaris woe32
+# TIS-620 glibc aix hpux osf solaris
+# VISCII Y glibc
+# TCVN5712-1 glibc
+# GEORGIAN-PS 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
+#
+# 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 it 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.
+ echo "* UTF-8"
+ ;;
+ beos*)
+ # BeOS has 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/gnulib/lib/error.c b/gnulib/lib/error.c
new file mode 100644
index 0000000..3177bd5
--- /dev/null
+++ b/gnulib/lib/error.c
@@ -0,0 +1,338 @@
+/* Error handler for noninteractive utilities
+ Copyright (C) 1990-1998, 2000-2007 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
+ 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 David MacKenzie <djm@gnu.ai.mit.edu>. */
+
+#if !_LIBC
+# include <config.h>
+#endif
+
+#include "error.h"
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if !_LIBC && ENABLE_NLS
+# include "gettext.h"
+# define _(msgid) gettext (msgid)
+#endif
+
+#ifdef _LIBC
+# include <libintl.h>
+# include <stdbool.h>
+# include <stdint.h>
+# include <wchar.h>
+# define mbsrtowcs __mbsrtowcs
+#endif
+
+#if USE_UNLOCKED_IO
+# include "unlocked-io.h"
+#endif
+
+#ifndef _
+# define _(String) String
+#endif
+
+/* If NULL, error will flush stdout, then print on stderr the program
+ name, a colon and a space. Otherwise, error will call this
+ function without parameters instead. */
+void (*error_print_progname) (void);
+
+/* This variable is incremented each time `error' is called. */
+unsigned int error_message_count;
+
+#ifdef _LIBC
+/* In the GNU C library, there is a predefined variable for this. */
+
+# define program_name program_invocation_name
+# include <errno.h>
+# include <limits.h>
+# include <libio/libioP.h>
+
+/* In GNU libc we want do not want to use the common name `error' directly.
+ Instead make it a weak alias. */
+extern void __error (int status, int errnum, const char *message, ...)
+ __attribute__ ((__format__ (__printf__, 3, 4)));
+extern void __error_at_line (int status, int errnum, const char *file_name,
+ unsigned int line_number, const char *message,
+ ...)
+ __attribute__ ((__format__ (__printf__, 5, 6)));;
+# define error __error
+# define error_at_line __error_at_line
+
+# include <libio/iolibio.h>
+# define fflush(s) INTUSE(_IO_fflush) (s)
+# undef putc
+# define putc(c, fp) INTUSE(_IO_putc) (c, fp)
+
+# include <bits/libc-lock.h>
+
+#else /* not _LIBC */
+
+# if !HAVE_DECL_STRERROR_R && STRERROR_R_CHAR_P
+# ifndef HAVE_DECL_STRERROR_R
+"this configure-time declaration test was not run"
+# endif
+char *strerror_r ();
+# endif
+
+/* The calling program should define program_name and set it to the
+ name of the executing program. */
+extern char *program_name;
+
+# if HAVE_STRERROR_R || defined strerror_r
+# define __strerror_r strerror_r
+# endif /* HAVE_STRERROR_R || defined strerror_r */
+#endif /* not _LIBC */
+
+static void
+print_errno_message (int errnum)
+{
+ char const *s;
+
+#if defined HAVE_STRERROR_R || _LIBC
+ char errbuf[1024];
+# if STRERROR_R_CHAR_P || _LIBC
+ s = __strerror_r (errnum, errbuf, sizeof errbuf);
+# else
+ if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0)
+ s = errbuf;
+ else
+ s = 0;
+# endif
+#else
+ s = strerror (errnum);
+#endif
+
+#if !_LIBC
+ if (! s)
+ s = _("Unknown system error");
+#endif
+
+#if _LIBC
+ __fxprintf (NULL, ": %s", s);
+#else
+ fprintf (stderr, ": %s", s);
+#endif
+}
+
+static void
+error_tail (int status, int errnum, const char *message, va_list args)
+{
+#if _LIBC
+ if (_IO_fwide (stderr, 0) > 0)
+ {
+# define ALLOCA_LIMIT 2000
+ size_t len = strlen (message) + 1;
+ wchar_t *wmessage = NULL;
+ mbstate_t st;
+ size_t res;
+ const char *tmp;
+ bool use_malloc = false;
+
+ while (1)
+ {
+ if (__libc_use_alloca (len * sizeof (wchar_t)))
+ wmessage = (wchar_t *) alloca (len * sizeof (wchar_t));
+ else
+ {
+ if (!use_malloc)
+ wmessage = NULL;
+
+ wchar_t *p = (wchar_t *) realloc (wmessage,
+ len * sizeof (wchar_t));
+ if (p == NULL)
+ {
+ free (wmessage);
+ fputws_unlocked (L"out of memory\n", stderr);
+ return;
+ }
+ wmessage = p;
+ use_malloc = true;
+ }
+
+ memset (&st, '\0', sizeof (st));
+ tmp = message;
+
+ res = mbsrtowcs (wmessage, &tmp, len, &st);
+ if (res != len)
+ break;
+
+ if (__builtin_expect (len >= SIZE_MAX / 2, 0))
+ {
+ /* This really should not happen if everything is fine. */
+ res = (size_t) -1;
+ break;
+ }
+
+ len *= 2;
+ }
+
+ if (res == (size_t) -1)
+ {
+ /* The string cannot be converted. */
+ if (use_malloc)
+ {
+ free (wmessage);
+ use_malloc = false;
+ }
+ wmessage = (wchar_t *) L"???";
+ }
+
+ __vfwprintf (stderr, wmessage, args);
+
+ if (use_malloc)
+ free (wmessage);
+ }
+ else
+#endif
+ vfprintf (stderr, message, args);
+ va_end (args);
+
+ ++error_message_count;
+ if (errnum)
+ print_errno_message (errnum);
+#if _LIBC
+ __fxprintf (NULL, "\n");
+#else
+ putc ('\n', stderr);
+#endif
+ fflush (stderr);
+ if (status)
+ exit (status);
+}
+
+
+/* Print the program name and error message MESSAGE, which is a printf-style
+ format string with optional args.
+ If ERRNUM is nonzero, print its corresponding system error message.
+ Exit with status STATUS if it is nonzero. */
+void
+error (int status, int errnum, const char *message, ...)
+{
+ va_list args;
+
+#if defined _LIBC && defined __libc_ptf_call
+ /* We do not want this call to be cut short by a thread
+ cancellation. Therefore disable cancellation for now. */
+ int state = PTHREAD_CANCEL_ENABLE;
+ __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state),
+ 0);
+#endif
+
+ fflush (stdout);
+#ifdef _LIBC
+ _IO_flockfile (stderr);
+#endif
+ if (error_print_progname)
+ (*error_print_progname) ();
+ else
+ {
+#if _LIBC
+ __fxprintf (NULL, "%s: ", program_name);
+#else
+ fprintf (stderr, "%s: ", program_name);
+#endif
+ }
+
+ va_start (args, message);
+ error_tail (status, errnum, message, args);
+
+#ifdef _LIBC
+ _IO_funlockfile (stderr);
+# ifdef __libc_ptf_call
+ __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0);
+# endif
+#endif
+}
+
+/* Sometimes we want to have at most one error per line. This
+ variable controls whether this mode is selected or not. */
+int error_one_per_line;
+
+void
+error_at_line (int status, int errnum, const char *file_name,
+ unsigned int line_number, const char *message, ...)
+{
+ va_list args;
+
+ if (error_one_per_line)
+ {
+ static const char *old_file_name;
+ static unsigned int old_line_number;
+
+ if (old_line_number == line_number
+ && (file_name == old_file_name
+ || strcmp (old_file_name, file_name) == 0))
+ /* Simply return and print nothing. */
+ return;
+
+ old_file_name = file_name;
+ old_line_number = line_number;
+ }
+
+#if defined _LIBC && defined __libc_ptf_call
+ /* We do not want this call to be cut short by a thread
+ cancellation. Therefore disable cancellation for now. */
+ int state = PTHREAD_CANCEL_ENABLE;
+ __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state),
+ 0);
+#endif
+
+ fflush (stdout);
+#ifdef _LIBC
+ _IO_flockfile (stderr);
+#endif
+ if (error_print_progname)
+ (*error_print_progname) ();
+ else
+ {
+#if _LIBC
+ __fxprintf (NULL, "%s:", program_name);
+#else
+ fprintf (stderr, "%s:", program_name);
+#endif
+ }
+
+#if _LIBC
+ __fxprintf (NULL, file_name != NULL ? "%s:%d: " : " ",
+ file_name, line_number);
+#else
+ fprintf (stderr, file_name != NULL ? "%s:%d: " : " ",
+ file_name, line_number);
+#endif
+
+ va_start (args, message);
+ error_tail (status, errnum, message, args);
+
+#ifdef _LIBC
+ _IO_funlockfile (stderr);
+# ifdef __libc_ptf_call
+ __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0);
+# endif
+#endif
+}
+
+#ifdef _LIBC
+/* Make the weak alias. */
+# undef error
+# undef error_at_line
+weak_alias (__error, error)
+weak_alias (__error_at_line, error_at_line)
+#endif
diff --git a/gnulib/lib/error.h b/gnulib/lib/error.h
new file mode 100644
index 0000000..6d49681
--- /dev/null
+++ b/gnulib/lib/error.h
@@ -0,0 +1,65 @@
+/* Declaration for error-reporting function
+ Copyright (C) 1995, 1996, 1997, 2003, 2006, 2008 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
+ 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/>. */
+
+#ifndef _ERROR_H
+#define _ERROR_H 1
+
+#ifndef __attribute__
+/* This feature is available in gcc versions 2.5 and later. */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
+# define __attribute__(Spec) /* empty */
+# endif
+/* The __-protected variants of `format' and `printf' attributes
+ are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
+# define __format__ format
+# define __printf__ printf
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Print a message with `fprintf (stderr, FORMAT, ...)';
+ if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM).
+ If STATUS is nonzero, terminate the program with `exit (STATUS)'. */
+
+extern void error (int __status, int __errnum, const char *__format, ...)
+ __attribute__ ((__format__ (__printf__, 3, 4)));
+
+extern void error_at_line (int __status, int __errnum, const char *__fname,
+ unsigned int __lineno, const char *__format, ...)
+ __attribute__ ((__format__ (__printf__, 5, 6)));
+
+/* If NULL, error will flush stdout, then print on stderr the program
+ name, a colon and a space. Otherwise, error will call this
+ function without parameters instead. */
+extern void (*error_print_progname) (void);
+
+/* This variable is incremented each time `error' is called. */
+extern unsigned int error_message_count;
+
+/* Sometimes we want to have at most one error per line. This
+ variable controls whether this mode is selected or not. */
+extern int error_one_per_line;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* error.h */
diff --git a/gnulib/lib/exitfail.c b/gnulib/lib/exitfail.c
new file mode 100644
index 0000000..6d1fe4a
--- /dev/null
+++ b/gnulib/lib/exitfail.c
@@ -0,0 +1,24 @@
+/* Failure exit status
+
+ Copyright (C) 2002, 2003, 2005, 2006, 2007 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>
+
+#include "exitfail.h"
+
+#include <stdlib.h>
+
+int volatile exit_failure = EXIT_FAILURE;
diff --git a/gnulib/lib/exitfail.h b/gnulib/lib/exitfail.h
new file mode 100644
index 0000000..713f259
--- /dev/null
+++ b/gnulib/lib/exitfail.h
@@ -0,0 +1,18 @@
+/* Failure exit status
+
+ Copyright (C) 2002 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/>. */
+
+extern int volatile exit_failure;
diff --git a/gnulib/lib/getopt.c b/gnulib/lib/getopt.c
new file mode 100644
index 0000000..f1e6d1f
--- /dev/null
+++ b/gnulib/lib/getopt.c
@@ -0,0 +1,1186 @@
+/* Getopt for GNU.
+ 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,88,89,90,91,92,93,94,95,96,98,99,2000,2001,2002,2003,2004,2006,2008
+ 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
+ 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/>. */
+
+#ifndef _LIBC
+# include <config.h>
+#endif
+
+#include "getopt.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "gettext.h"
+# define _(msgid) gettext (msgid)
+#endif
+
+#if defined _LIBC && defined USE_IN_LIBIO
+# include <wchar.h>
+#endif
+
+#ifndef attribute_hidden
+# define attribute_hidden
+#endif
+
+/* 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,
+ 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
+ disables permutation.
+ Then the application's behavior is completely standard.
+
+ GNU application programs can use a third alternative mode in which
+ they can distinguish the relative order of options and other arguments. */
+
+#include "getopt_int.h"
+
+/* 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,
+ 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'.
+
+ 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
+ non-option elements that the caller should itself scan.
+
+ 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. */
+int optind = 1;
+
+/* Callers store zero here to inhibit the error message
+ for unrecognized options. */
+
+int opterr = 1;
+
+/* Set to an option character which was unrecognized.
+ This must be initialized on some systems to avoid linking in the
+ system's own getopt implementation. */
+
+int optopt = '?';
+
+/* Keep a global copy of all internal members of getopt_data. */
+
+static struct _getopt_data getopt_data;
+
+
+#if defined HAVE_DECL_GETENV && !HAVE_DECL_GETENV
+extern char *getenv ();
+#endif
+
+#ifdef _LIBC
+/* Stored original parameters.
+ XXX This is no good solution. We should rather copy the args so
+ that we can compare them later. But we must not use malloc(3). */
+extern int __libc_argc;
+extern char **__libc_argv;
+
+/* Bash 2.0 gives us an environment variable containing flags
+ indicating ARGV elements that should not be considered arguments. */
+
+# ifdef USE_NONOPTION_FLAGS
+/* Defined in getopt_init.c */
+extern char *__getopt_nonoption_flags;
+# endif
+
+# ifdef USE_NONOPTION_FLAGS
+# define SWAP_FLAGS(ch1, ch2) \
+ if (d->__nonoption_flags_len > 0) \
+ { \
+ char __tmp = __getopt_nonoption_flags[ch1]; \
+ __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \
+ __getopt_nonoption_flags[ch2] = __tmp; \
+ }
+# else
+# define SWAP_FLAGS(ch1, ch2)
+# endif
+#else /* !_LIBC */
+# define SWAP_FLAGS(ch1, ch2)
+#endif /* _LIBC */
+
+/* Exchange two adjacent subsequences of ARGV.
+ One subsequence is elements [first_nonopt,last_nonopt)
+ which contains all the non-options that have been skipped so far.
+ 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
+ the new indices of the non-options in ARGV after they are moved. */
+
+static void
+exchange (char **argv, struct _getopt_data *d)
+{
+ int bottom = d->__first_nonopt;
+ int middle = d->__last_nonopt;
+ int top = d->optind;
+ char *tem;
+
+ /* Exchange the shorter segment with the far end of the longer segment.
+ That puts the shorter segment into the right place.
+ It leaves the longer segment in the right place overall,
+ 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'
+ 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)
+ {
+ /* We must extend the array. The user plays games with us and
+ presents new arguments. */
+ char *new_str = malloc (top + 1);
+ if (new_str == NULL)
+ d->__nonoption_flags_len = d->__nonoption_flags_max_len = 0;
+ else
+ {
+ memset (__mempcpy (new_str, __getopt_nonoption_flags,
+ d->__nonoption_flags_max_len),
+ '\0', top + 1 - d->__nonoption_flags_max_len);
+ d->__nonoption_flags_max_len = top + 1;
+ __getopt_nonoption_flags = new_str;
+ }
+ }
+#endif
+
+ while (top > middle && middle > bottom)
+ {
+ if (top - middle > middle - bottom)
+ {
+ /* Bottom segment is the short one. */
+ int len = middle - bottom;
+ register int i;
+
+ /* Swap it with the top part of the top segment. */
+ for (i = 0; i < len; i++)
+ {
+ tem = argv[bottom + i];
+ argv[bottom + i] = argv[top - (middle - bottom) + i];
+ argv[top - (middle - bottom) + i] = tem;
+ SWAP_FLAGS (bottom + i, top - (middle - bottom) + i);
+ }
+ /* Exclude the moved bottom segment from further swapping. */
+ top -= len;
+ }
+ else
+ {
+ /* Top segment is the short one. */
+ int len = top - middle;
+ register int i;
+
+ /* Swap it with the bottom part of the bottom segment. */
+ for (i = 0; i < len; i++)
+ {
+ tem = argv[bottom + i];
+ argv[bottom + i] = argv[middle + i];
+ argv[middle + i] = tem;
+ SWAP_FLAGS (bottom + i, middle + i);
+ }
+ /* Exclude the moved top segment from further swapping. */
+ bottom += len;
+ }
+ }
+
+ /* Update records for the slots the non-options now occupy. */
+
+ d->__first_nonopt += (d->optind - d->__last_nonopt);
+ d->__last_nonopt = d->optind;
+}
+
+/* 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)
+{
+ /* Start processing options with ARGV-element 1 (since ARGV-element 0
+ is the program name); the sequence of previously skipped
+ non-option ARGV-elements is empty. */
+
+ d->__first_nonopt = d->__last_nonopt = d->optind;
+
+ d->__nextchar = NULL;
+
+ d->__posixly_correct = posixly_correct || !!getenv ("POSIXLY_CORRECT");
+
+ /* Determine how to handle the ordering of options and nonoptions. */
+
+ if (optstring[0] == '-')
+ {
+ d->__ordering = RETURN_IN_ORDER;
+ ++optstring;
+ }
+ else if (optstring[0] == '+')
+ {
+ d->__ordering = REQUIRE_ORDER;
+ ++optstring;
+ }
+ else if (d->__posixly_correct)
+ d->__ordering = REQUIRE_ORDER;
+ else
+ d->__ordering = PERMUTE;
+
+#if defined _LIBC && defined USE_NONOPTION_FLAGS
+ if (!d->__posixly_correct
+ && argc == __libc_argc && argv == __libc_argv)
+ {
+ if (d->__nonoption_flags_max_len == 0)
+ {
+ if (__getopt_nonoption_flags == NULL
+ || __getopt_nonoption_flags[0] == '\0')
+ d->__nonoption_flags_max_len = -1;
+ else
+ {
+ const char *orig_str = __getopt_nonoption_flags;
+ int len = d->__nonoption_flags_max_len = strlen (orig_str);
+ if (d->__nonoption_flags_max_len < argc)
+ d->__nonoption_flags_max_len = argc;
+ __getopt_nonoption_flags =
+ (char *) malloc (d->__nonoption_flags_max_len);
+ if (__getopt_nonoption_flags == NULL)
+ d->__nonoption_flags_max_len = -1;
+ else
+ memset (__mempcpy (__getopt_nonoption_flags, orig_str, len),
+ '\0', d->__nonoption_flags_max_len - len);
+ }
+ }
+ d->__nonoption_flags_len = d->__nonoption_flags_max_len;
+ }
+ else
+ d->__nonoption_flags_len = 0;
+#endif
+
+ return optstring;
+}
+
+/* Scan elements of ARGV (whose length is ARGC) for option characters
+ given in 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'
+ 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
+ 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
+ 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
+ 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
+ wants an optional arg; if there is text in the current ARGV-element,
+ it is returned in `optarg', otherwise `optarg' is set to zero.
+
+ 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 `-'.
+ 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.
+
+ 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.
+ It is only valid when a long-named option has been found by the most
+ recent call.
+
+ If LONG_ONLY is nonzero, '-' as well as '--' can introduce
+ long-named options.
+
+ If POSIXLY_CORRECT is nonzero, behave as if the POSIXLY_CORRECT
+ environment variable were set. */
+
+int
+_getopt_internal_r (int argc, char **argv, const char *optstring,
+ const struct option *longopts, int *longind,
+ int long_only, int posixly_correct, struct _getopt_data *d)
+{
+ int print_errors = d->opterr;
+ if (optstring[0] == ':')
+ print_errors = 0;
+
+ if (argc < 1)
+ return -1;
+
+ d->optarg = NULL;
+
+ if (d->optind == 0 || !d->__initialized)
+ {
+ if (d->optind == 0)
+ d->optind = 1; /* Don't scan ARGV[0], the program name. */
+ optstring = _getopt_initialize (argc, argv, optstring,
+ posixly_correct, d);
+ d->__initialized = 1;
+ }
+
+ /* Test whether ARGV[optind] points to a non-option argument.
+ Either it does not have option syntax, or there is an environment flag
+ from the shell indicating it is not an option. The later information
+ is only used when the used in the GNU libc. */
+#if defined _LIBC && defined USE_NONOPTION_FLAGS
+# define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0' \
+ || (d->optind < d->__nonoption_flags_len \
+ && __getopt_nonoption_flags[d->optind] == '1'))
+#else
+# define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0')
+#endif
+
+ if (d->__nextchar == NULL || *d->__nextchar == '\0')
+ {
+ /* Advance to the next ARGV-element. */
+
+ /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been
+ moved back by the user (who may also have changed the arguments). */
+ if (d->__last_nonopt > d->optind)
+ d->__last_nonopt = d->optind;
+ if (d->__first_nonopt > d->optind)
+ d->__first_nonopt = d->optind;
+
+ if (d->__ordering == PERMUTE)
+ {
+ /* If we have just processed some options following some non-options,
+ exchange them so that the options come first. */
+
+ if (d->__first_nonopt != d->__last_nonopt
+ && d->__last_nonopt != d->optind)
+ exchange ((char **) argv, d);
+ else if (d->__last_nonopt != d->optind)
+ d->__first_nonopt = d->optind;
+
+ /* Skip any additional non-options
+ and extend the range of non-options previously skipped. */
+
+ while (d->optind < argc && NONOPTION_P)
+ d->optind++;
+ d->__last_nonopt = d->optind;
+ }
+
+ /* 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. */
+
+ if (d->optind != argc && !strcmp (argv[d->optind], "--"))
+ {
+ d->optind++;
+
+ if (d->__first_nonopt != d->__last_nonopt
+ && d->__last_nonopt != d->optind)
+ exchange ((char **) argv, d);
+ else if (d->__first_nonopt == d->__last_nonopt)
+ d->__first_nonopt = d->optind;
+ d->__last_nonopt = argc;
+
+ d->optind = argc;
+ }
+
+ /* If we have done all the ARGV-elements, stop the scan
+ and back over any non-options that we skipped and permuted. */
+
+ if (d->optind == argc)
+ {
+ /* Set the next-arg-index to point at the non-options
+ that we previously skipped, so the caller will digest them. */
+ if (d->__first_nonopt != d->__last_nonopt)
+ d->optind = d->__first_nonopt;
+ return -1;
+ }
+
+ /* If we have come to a non-option and did not permute it,
+ either stop the scan or describe it to the caller and pass it by. */
+
+ if (NONOPTION_P)
+ {
+ if (d->__ordering == REQUIRE_ORDER)
+ return -1;
+ d->optarg = argv[d->optind++];
+ return 1;
+ }
+
+ /* We have found another option-ARGV-element.
+ Skip the initial punctuation. */
+
+ d->__nextchar = (argv[d->optind] + 1
+ + (longopts != NULL && argv[d->optind][1] == '-'));
+ }
+
+ /* Decode the current option-ARGV-element. */
+
+ /* Check whether the ARGV-element is a long option.
+
+ If long_only and the ARGV-element has the form "-f", where f is
+ a valid short option, don't consider it an abbreviated form of
+ a long option that starts with f. Otherwise there would be no
+ way to give the -f short option.
+
+ On the other hand, if there's a long option "fubar" and
+ the ARGV-element is "-fu", do consider that an abbreviation of
+ the long option, just like "--fu", and not "-f" with arg "u".
+
+ This distinction seems to be the most useful approach. */
+
+ if (longopts != NULL
+ && (argv[d->optind][1] == '-'
+ || (long_only && (argv[d->optind][2]
+ || !strchr (optstring, argv[d->optind][1])))))
+ {
+ char *nameend;
+ const struct option *p;
+ const struct option *pfound = NULL;
+ int exact = 0;
+ int ambig = 0;
+ int indfound = -1;
+ int option_index;
+
+ for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++)
+ /* Do nothing. */ ;
+
+ /* Test all long options for either exact match
+ or abbreviated matches. */
+ for (p = longopts, option_index = 0; p->name; p++, option_index++)
+ if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar))
+ {
+ if ((unsigned int) (nameend - d->__nextchar)
+ == (unsigned int) strlen (p->name))
+ {
+ /* Exact match found. */
+ pfound = p;
+ indfound = option_index;
+ exact = 1;
+ break;
+ }
+ else if (pfound == NULL)
+ {
+ /* First nonexact match found. */
+ pfound = p;
+ indfound = option_index;
+ }
+ else if (long_only
+ || pfound->has_arg != p->has_arg
+ || pfound->flag != p->flag
+ || pfound->val != p->val)
+ /* Second or later nonexact match found. */
+ ambig = 1;
+ }
+
+ if (ambig && !exact)
+ {
+ if (print_errors)
+ {
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+
+ if (__asprintf (&buf, _("%s: option `%s' is ambiguous\n"),
+ argv[0], argv[d->optind]) >= 0)
+ {
+ _IO_flockfile (stderr);
+
+ int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+ ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+
+ __fxprintf (NULL, "%s", buf);
+
+ ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+ _IO_funlockfile (stderr);
+
+ free (buf);
+ }
+#else
+ fprintf (stderr, _("%s: option `%s' is ambiguous\n"),
+ argv[0], argv[d->optind]);
+#endif
+ }
+ d->__nextchar += strlen (d->__nextchar);
+ d->optind++;
+ d->optopt = 0;
+ return '?';
+ }
+
+ if (pfound != NULL)
+ {
+ option_index = indfound;
+ d->optind++;
+ if (*nameend)
+ {
+ /* Don't test has_arg with >, because some C compilers don't
+ allow it to be used on enums. */
+ if (pfound->has_arg)
+ d->optarg = nameend + 1;
+ else
+ {
+ if (print_errors)
+ {
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+ int n;
+#endif
+
+ if (argv[d->optind - 1][1] == '-')
+ {
+ /* --option */
+#if defined _LIBC && defined USE_IN_LIBIO
+ n = __asprintf (&buf, _("\
+%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"),
+ argv[0], pfound->name);
+#endif
+ }
+ else
+ {
+ /* +option or -option */
+#if defined _LIBC && defined USE_IN_LIBIO
+ n = __asprintf (&buf, _("\
+%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"),
+ argv[0], argv[d->optind - 1][0],
+ pfound->name);
+#endif
+ }
+
+#if defined _LIBC && defined USE_IN_LIBIO
+ if (n >= 0)
+ {
+ _IO_flockfile (stderr);
+
+ int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+ ((_IO_FILE *) stderr)->_flags2
+ |= _IO_FLAGS2_NOTCANCEL;
+
+ __fxprintf (NULL, "%s", buf);
+
+ ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+ _IO_funlockfile (stderr);
+
+ free (buf);
+ }
+#endif
+ }
+
+ d->__nextchar += strlen (d->__nextchar);
+
+ d->optopt = pfound->val;
+ return '?';
+ }
+ }
+ else if (pfound->has_arg == 1)
+ {
+ if (d->optind < argc)
+ d->optarg = argv[d->optind++];
+ else
+ {
+ if (print_errors)
+ {
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+
+ if (__asprintf (&buf, _("\
+%s: option `%s' requires an argument\n"),
+ argv[0], argv[d->optind - 1]) >= 0)
+ {
+ _IO_flockfile (stderr);
+
+ int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+ ((_IO_FILE *) stderr)->_flags2
+ |= _IO_FLAGS2_NOTCANCEL;
+
+ __fxprintf (NULL, "%s", buf);
+
+ ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+ _IO_funlockfile (stderr);
+
+ free (buf);
+ }
+#else
+ fprintf (stderr,
+ _("%s: option `%s' requires an argument\n"),
+ argv[0], argv[d->optind - 1]);
+#endif
+ }
+ d->__nextchar += strlen (d->__nextchar);
+ d->optopt = pfound->val;
+ return optstring[0] == ':' ? ':' : '?';
+ }
+ }
+ d->__nextchar += strlen (d->__nextchar);
+ if (longind != NULL)
+ *longind = option_index;
+ if (pfound->flag)
+ {
+ *(pfound->flag) = pfound->val;
+ return 0;
+ }
+ return pfound->val;
+ }
+
+ /* Can't find it as a long option. If this is not getopt_long_only,
+ or the option starts with '--' or is not a valid short
+ option, then it's an error.
+ Otherwise interpret it as a short option. */
+ if (!long_only || argv[d->optind][1] == '-'
+ || strchr (optstring, *d->__nextchar) == NULL)
+ {
+ if (print_errors)
+ {
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+ int n;
+#endif
+
+ if (argv[d->optind][1] == '-')
+ {
+ /* --option */
+#if defined _LIBC && defined USE_IN_LIBIO
+ n = __asprintf (&buf, _("%s: unrecognized option `--%s'\n"),
+ argv[0], d->__nextchar);
+#else
+ fprintf (stderr, _("%s: unrecognized option `--%s'\n"),
+ argv[0], d->__nextchar);
+#endif
+ }
+ else
+ {
+ /* +option or -option */
+#if defined _LIBC && defined USE_IN_LIBIO
+ 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"),
+ argv[0], argv[d->optind][0], d->__nextchar);
+#endif
+ }
+
+#if defined _LIBC && defined USE_IN_LIBIO
+ if (n >= 0)
+ {
+ _IO_flockfile (stderr);
+
+ int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+ ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+
+ __fxprintf (NULL, "%s", buf);
+
+ ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+ _IO_funlockfile (stderr);
+
+ free (buf);
+ }
+#endif
+ }
+ d->__nextchar = (char *) "";
+ d->optind++;
+ d->optopt = 0;
+ return '?';
+ }
+ }
+
+ /* Look at and handle the next short option-character. */
+
+ {
+ char c = *d->__nextchar++;
+ char *temp = strchr (optstring, c);
+
+ /* Increment `optind' when we start to process its last character. */
+ if (*d->__nextchar == '\0')
+ ++d->optind;
+
+ if (temp == NULL || c == ':')
+ {
+ if (print_errors)
+ {
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+ int n;
+#endif
+
+ if (d->__posixly_correct)
+ {
+ /* 1003.2 specifies the format of this message. */
+#if defined _LIBC && defined USE_IN_LIBIO
+ n = __asprintf (&buf, _("%s: illegal option -- %c\n"),
+ argv[0], c);
+#else
+ fprintf (stderr, _("%s: illegal option -- %c\n"), argv[0], c);
+#endif
+ }
+ else
+ {
+#if defined _LIBC && defined USE_IN_LIBIO
+ n = __asprintf (&buf, _("%s: invalid option -- %c\n"),
+ argv[0], c);
+#else
+ fprintf (stderr, _("%s: invalid option -- %c\n"), argv[0], c);
+#endif
+ }
+
+#if defined _LIBC && defined USE_IN_LIBIO
+ if (n >= 0)
+ {
+ _IO_flockfile (stderr);
+
+ int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+ ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+
+ __fxprintf (NULL, "%s", buf);
+
+ ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+ _IO_funlockfile (stderr);
+
+ free (buf);
+ }
+#endif
+ }
+ d->optopt = c;
+ return '?';
+ }
+ /* Convenience. Treat POSIX -W foo same as long option --foo */
+ if (temp[0] == 'W' && temp[1] == ';')
+ {
+ char *nameend;
+ const struct option *p;
+ const struct option *pfound = NULL;
+ int exact = 0;
+ int ambig = 0;
+ int indfound = 0;
+ int option_index;
+
+ /* This is an option that requires an argument. */
+ if (*d->__nextchar != '\0')
+ {
+ d->optarg = d->__nextchar;
+ /* If we end this ARGV-element by taking the rest as an arg,
+ we must advance to the next element now. */
+ d->optind++;
+ }
+ else if (d->optind == argc)
+ {
+ if (print_errors)
+ {
+ /* 1003.2 specifies the format of this message. */
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+
+ if (__asprintf (&buf,
+ _("%s: option requires an argument -- %c\n"),
+ argv[0], c) >= 0)
+ {
+ _IO_flockfile (stderr);
+
+ int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+ ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+
+ __fxprintf (NULL, "%s", buf);
+
+ ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+ _IO_funlockfile (stderr);
+
+ free (buf);
+ }
+#else
+ fprintf (stderr, _("%s: option requires an argument -- %c\n"),
+ argv[0], c);
+#endif
+ }
+ d->optopt = c;
+ if (optstring[0] == ':')
+ c = ':';
+ else
+ c = '?';
+ return c;
+ }
+ else
+ /* We already incremented `d->optind' once;
+ increment it again when taking next ARGV-elt as argument. */
+ d->optarg = argv[d->optind++];
+
+ /* optarg is now the argument, see if it's in the
+ table of longopts. */
+
+ for (d->__nextchar = nameend = d->optarg; *nameend && *nameend != '=';
+ nameend++)
+ /* Do nothing. */ ;
+
+ /* Test all long options for either exact match
+ or abbreviated matches. */
+ for (p = longopts, option_index = 0; p->name; p++, option_index++)
+ if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar))
+ {
+ if ((unsigned int) (nameend - d->__nextchar) == strlen (p->name))
+ {
+ /* Exact match found. */
+ pfound = p;
+ indfound = option_index;
+ exact = 1;
+ break;
+ }
+ else if (pfound == NULL)
+ {
+ /* First nonexact match found. */
+ pfound = p;
+ indfound = option_index;
+ }
+ else
+ /* Second or later nonexact match found. */
+ ambig = 1;
+ }
+ if (ambig && !exact)
+ {
+ if (print_errors)
+ {
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+
+ if (__asprintf (&buf, _("%s: option `-W %s' is ambiguous\n"),
+ argv[0], argv[d->optind]) >= 0)
+ {
+ _IO_flockfile (stderr);
+
+ int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+ ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+
+ __fxprintf (NULL, "%s", buf);
+
+ ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+ _IO_funlockfile (stderr);
+
+ free (buf);
+ }
+#else
+ fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"),
+ argv[0], argv[d->optind]);
+#endif
+ }
+ d->__nextchar += strlen (d->__nextchar);
+ d->optind++;
+ return '?';
+ }
+ if (pfound != NULL)
+ {
+ option_index = indfound;
+ if (*nameend)
+ {
+ /* Don't test has_arg with >, because some C compilers don't
+ allow it to be used on enums. */
+ if (pfound->has_arg)
+ d->optarg = nameend + 1;
+ else
+ {
+ if (print_errors)
+ {
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+
+ if (__asprintf (&buf, _("\
+%s: option `-W %s' doesn't allow an argument\n"),
+ argv[0], pfound->name) >= 0)
+ {
+ _IO_flockfile (stderr);
+
+ int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+ ((_IO_FILE *) stderr)->_flags2
+ |= _IO_FLAGS2_NOTCANCEL;
+
+ __fxprintf (NULL, "%s", buf);
+
+ ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+ _IO_funlockfile (stderr);
+
+ free (buf);
+ }
+#else
+ fprintf (stderr, _("\
+%s: option `-W %s' doesn't allow an argument\n"),
+ argv[0], pfound->name);
+#endif
+ }
+
+ d->__nextchar += strlen (d->__nextchar);
+ return '?';
+ }
+ }
+ else if (pfound->has_arg == 1)
+ {
+ if (d->optind < argc)
+ d->optarg = argv[d->optind++];
+ else
+ {
+ if (print_errors)
+ {
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+
+ if (__asprintf (&buf, _("\
+%s: option `%s' requires an argument\n"),
+ argv[0], argv[d->optind - 1]) >= 0)
+ {
+ _IO_flockfile (stderr);
+
+ int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+ ((_IO_FILE *) stderr)->_flags2
+ |= _IO_FLAGS2_NOTCANCEL;
+
+ __fxprintf (NULL, "%s", buf);
+
+ ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+ _IO_funlockfile (stderr);
+
+ free (buf);
+ }
+#else
+ fprintf (stderr,
+ _("%s: option `%s' requires an argument\n"),
+ argv[0], argv[d->optind - 1]);
+#endif
+ }
+ d->__nextchar += strlen (d->__nextchar);
+ return optstring[0] == ':' ? ':' : '?';
+ }
+ }
+ d->__nextchar += strlen (d->__nextchar);
+ if (longind != NULL)
+ *longind = option_index;
+ if (pfound->flag)
+ {
+ *(pfound->flag) = pfound->val;
+ return 0;
+ }
+ return pfound->val;
+ }
+ d->__nextchar = NULL;
+ return 'W'; /* Let the application handle it. */
+ }
+ if (temp[1] == ':')
+ {
+ if (temp[2] == ':')
+ {
+ /* This is an option that accepts an argument optionally. */
+ if (*d->__nextchar != '\0')
+ {
+ d->optarg = d->__nextchar;
+ d->optind++;
+ }
+ else
+ d->optarg = NULL;
+ d->__nextchar = NULL;
+ }
+ else
+ {
+ /* This is an option that requires an argument. */
+ if (*d->__nextchar != '\0')
+ {
+ d->optarg = d->__nextchar;
+ /* If we end this ARGV-element by taking the rest as an arg,
+ we must advance to the next element now. */
+ d->optind++;
+ }
+ else if (d->optind == argc)
+ {
+ if (print_errors)
+ {
+ /* 1003.2 specifies the format of this message. */
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+
+ if (__asprintf (&buf, _("\
+%s: option requires an argument -- %c\n"),
+ argv[0], c) >= 0)
+ {
+ _IO_flockfile (stderr);
+
+ int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+ ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+
+ __fxprintf (NULL, "%s", buf);
+
+ ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+ _IO_funlockfile (stderr);
+
+ free (buf);
+ }
+#else
+ fprintf (stderr,
+ _("%s: option requires an argument -- %c\n"),
+ argv[0], c);
+#endif
+ }
+ d->optopt = c;
+ if (optstring[0] == ':')
+ c = ':';
+ else
+ c = '?';
+ }
+ else
+ /* We already incremented `optind' once;
+ increment it again when taking next ARGV-elt as argument. */
+ d->optarg = argv[d->optind++];
+ d->__nextchar = NULL;
+ }
+ }
+ return c;
+ }
+}
+
+int
+_getopt_internal (int argc, char **argv, const char *optstring,
+ const struct option *longopts, int *longind,
+ int long_only, int posixly_correct)
+{
+ int result;
+
+ getopt_data.optind = optind;
+ getopt_data.opterr = opterr;
+
+ result = _getopt_internal_r (argc, argv, optstring, longopts, longind,
+ long_only, posixly_correct, &getopt_data);
+
+ optind = getopt_data.optind;
+ optarg = getopt_data.optarg;
+ optopt = getopt_data.optopt;
+
+ return result;
+}
+
+/* glibc gets a LSB-compliant getopt.
+ Standalone applications get a POSIX-compliant getopt. */
+#if _LIBC
+enum { POSIXLY_CORRECT = 0 };
+#else
+enum { POSIXLY_CORRECT = 1 };
+#endif
+
+int
+getopt (int argc, char *const *argv, const char *optstring)
+{
+ return _getopt_internal (argc, (char **) argv, optstring, NULL, NULL, 0,
+ POSIXLY_CORRECT);
+}
+
+
+#ifdef TEST
+
+/* Compile with -DTEST to make an executable for use in testing
+ the above definition of `getopt'. */
+
+int
+main (int argc, char **argv)
+{
+ int c;
+ int digit_optind = 0;
+
+ while (1)
+ {
+ int this_option_optind = optind ? optind : 1;
+
+ c = getopt (argc, argv, "abc:d:0123456789");
+ if (c == -1)
+ break;
+
+ switch (c)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ if (digit_optind != 0 && digit_optind != this_option_optind)
+ printf ("digits occur in two different argv-elements.\n");
+ digit_optind = this_option_optind;
+ printf ("option %c\n", c);
+ break;
+
+ case 'a':
+ printf ("option a\n");
+ break;
+
+ case 'b':
+ printf ("option b\n");
+ break;
+
+ case 'c':
+ printf ("option c with value `%s'\n", optarg);
+ break;
+
+ case '?':
+ break;
+
+ default:
+ printf ("?? getopt returned character code 0%o ??\n", c);
+ }
+ }
+
+ if (optind < argc)
+ {
+ printf ("non-option ARGV-elements: ");
+ while (optind < argc)
+ printf ("%s ", argv[optind++]);
+ printf ("\n");
+ }
+
+ exit (0);
+}
+
+#endif /* TEST */
diff --git a/gnulib/lib/getopt.in.h b/gnulib/lib/getopt.in.h
new file mode 100644
index 0000000..d2d3e6e
--- /dev/null
+++ b/gnulib/lib/getopt.in.h
@@ -0,0 +1,225 @@
+/* Declarations for getopt.
+ Copyright (C) 1989-1994,1996-1999,2001,2003,2004,2005,2006,2007
+ 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
+ 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/>. */
+
+#ifndef _GETOPT_H
+
+#ifndef __need_getopt
+# define _GETOPT_H 1
+#endif
+
+/* Standalone applications should #define __GETOPT_PREFIX to an
+ identifier that prefixes the external functions and variables
+ defined in this header. When this happens, include the
+ headers that might declare getopt so that they will not cause
+ confusion if included after this file. Then systematically rename
+ identifiers so that they do not collide with the system functions
+ and variables. Renaming avoids problems with some compilers and
+ linkers. */
+#if defined __GETOPT_PREFIX && !defined __need_getopt
+# include <stdlib.h>
+# include <stdio.h>
+# include <unistd.h>
+# undef __need_getopt
+# undef getopt
+# undef getopt_long
+# undef getopt_long_only
+# undef optarg
+# undef opterr
+# undef optind
+# undef optopt
+# define __GETOPT_CONCAT(x, y) x ## y
+# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y)
+# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y)
+# define getopt __GETOPT_ID (getopt)
+# define getopt_long __GETOPT_ID (getopt_long)
+# define getopt_long_only __GETOPT_ID (getopt_long_only)
+# define optarg __GETOPT_ID (optarg)
+# define opterr __GETOPT_ID (opterr)
+# define optind __GETOPT_ID (optind)
+# define optopt __GETOPT_ID (optopt)
+#endif
+
+/* Standalone applications get correct prototypes for getopt_long and
+ getopt_long_only; they declare "char **argv". libc uses prototypes
+ with "char *const *argv" that are incorrect because getopt_long and
+ 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',
+ 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.
+
+ The only place where __getopt_argv_const is used is in definitions
+ of getopt_long and getopt_long_only below, but these are visible
+ only if __need_getopt is not defined, so it is quite safe to rewrite
+ the conditional as follows:
+*/
+#if !defined __need_getopt
+# if defined __GETOPT_PREFIX
+# define __getopt_argv_const /* empty */
+# else
+# define __getopt_argv_const const
+# endif
+#endif
+
+/* If __GNU_LIBRARY__ is not already defined, either we are being used
+ standalone, or this is the first header included in the source file.
+ If we are being used with glibc, we need to include <features.h>, but
+ that does not exist if we are standalone. So: if __GNU_LIBRARY__ is
+ not defined, include <ctype.h>, which will pull in <features.h> for us
+ if it's from glibc. (Why ctype.h? It's guaranteed to exist and it
+ doesn't flood the namespace with stuff the way some other headers do.) */
+#if !defined __GNU_LIBRARY__
+# include <ctype.h>
+#endif
+
+#ifndef __THROW
+# ifndef __GNUC_PREREQ
+# define __GNUC_PREREQ(maj, min) (0)
+# endif
+# if defined __cplusplus && __GNUC_PREREQ (2,8)
+# define __THROW throw ()
+# else
+# define __THROW
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* 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,
+ 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'.
+
+ 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
+ non-option elements that the caller should itself scan.
+
+ 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
+ for unrecognized options. */
+
+extern int opterr;
+
+/* Set to an option character which was unrecognized. */
+
+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
+ zero.
+
+ 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
+ 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
+ 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. */
+
+struct option
+{
+ const char *name;
+ /* has_arg can't be an enum because some compilers complain about
+ type mismatches in all the code that assumes it is an int. */
+ int has_arg;
+ int *flag;
+ int val;
+};
+
+/* Names for the values of the `has_arg' field of `struct option'. */
+
+# define no_argument 0
+# define required_argument 1
+# define optional_argument 2
+#endif /* need getopt */
+
+
+/* Get definitions and prototypes for functions to process the
+ arguments in ARGV (ARGC of them, minus the program name) for
+ options given in OPTS.
+
+ 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
+ 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'.
+
+ If a letter in OPTS is followed by two colons, its argument is
+ 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
+ options.
+
+ If OPTS begins with `-', then non-option arguments are treated as
+ arguments to the option '\1'. This behavior is specific to the GNU
+ `getopt'. If OPTS begins with `+', or POSIXLY_CORRECT is set in
+ the environment, then do not permute arguments. */
+
+extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
+ __THROW;
+
+#ifndef __need_getopt
+extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv,
+ const char *__shortopts,
+ const struct option *__longopts, int *__longind)
+ __THROW;
+extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv,
+ const char *__shortopts,
+ const struct option *__longopts, int *__longind)
+ __THROW;
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+/* Make sure we later can get all the definitions and declarations. */
+#undef __need_getopt
+
+#endif /* getopt.h */
diff --git a/gnulib/lib/getopt1.c b/gnulib/lib/getopt1.c
new file mode 100644
index 0000000..d6a3ecf
--- /dev/null
+++ b/gnulib/lib/getopt1.c
@@ -0,0 +1,170 @@
+/* getopt_long and getopt_long_only entry points for GNU getopt.
+ Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98,2004,2006
+ 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
+ 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/>. */
+
+#ifdef _LIBC
+# include <getopt.h>
+#else
+# include <config.h>
+# include "getopt.h"
+#endif
+#include "getopt_int.h"
+
+#include <stdio.h>
+
+/* This needs to come after some library #include
+ to get __GNU_LIBRARY__ defined. */
+#ifdef __GNU_LIBRARY__
+#include <stdlib.h>
+#endif
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+int
+getopt_long (int argc, char *__getopt_argv_const *argv, const char *options,
+ const struct option *long_options, int *opt_index)
+{
+ return _getopt_internal (argc, (char **) argv, options, long_options,
+ opt_index, 0, 0);
+}
+
+int
+_getopt_long_r (int argc, char **argv, const char *options,
+ const struct option *long_options, int *opt_index,
+ struct _getopt_data *d)
+{
+ return _getopt_internal_r (argc, argv, options, long_options, opt_index,
+ 0, 0, d);
+}
+
+/* Like getopt_long, but '-' as well as '--' can indicate a long option.
+ If an option that starts with '-' (not '--') doesn't match a long option,
+ but does match a short option, it is parsed as a short option
+ instead. */
+
+int
+getopt_long_only (int argc, char *__getopt_argv_const *argv,
+ const char *options,
+ const struct option *long_options, int *opt_index)
+{
+ return _getopt_internal (argc, (char **) argv, options, long_options,
+ opt_index, 1, 0);
+}
+
+int
+_getopt_long_only_r (int argc, char **argv, const char *options,
+ const struct option *long_options, int *opt_index,
+ struct _getopt_data *d)
+{
+ return _getopt_internal_r (argc, argv, options, long_options, opt_index,
+ 1, 0, d);
+}
+
+
+#ifdef TEST
+
+#include <stdio.h>
+
+int
+main (int argc, char **argv)
+{
+ int c;
+ int digit_optind = 0;
+
+ while (1)
+ {
+ int this_option_optind = optind ? optind : 1;
+ int option_index = 0;
+ static struct option long_options[] =
+ {
+ {"add", 1, 0, 0},
+ {"append", 0, 0, 0},
+ {"delete", 1, 0, 0},
+ {"verbose", 0, 0, 0},
+ {"create", 0, 0, 0},
+ {"file", 1, 0, 0},
+ {0, 0, 0, 0}
+ };
+
+ c = getopt_long (argc, argv, "abc:d:0123456789",
+ long_options, &option_index);
+ if (c == -1)
+ break;
+
+ switch (c)
+ {
+ case 0:
+ printf ("option %s", long_options[option_index].name);
+ if (optarg)
+ printf (" with arg %s", optarg);
+ printf ("\n");
+ break;
+
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ if (digit_optind != 0 && digit_optind != this_option_optind)
+ printf ("digits occur in two different argv-elements.\n");
+ digit_optind = this_option_optind;
+ printf ("option %c\n", c);
+ break;
+
+ case 'a':
+ printf ("option a\n");
+ break;
+
+ case 'b':
+ printf ("option b\n");
+ break;
+
+ case 'c':
+ printf ("option c with value `%s'\n", optarg);
+ break;
+
+ case 'd':
+ printf ("option d with value `%s'\n", optarg);
+ break;
+
+ case '?':
+ break;
+
+ default:
+ printf ("?? getopt returned character code 0%o ??\n", c);
+ }
+ }
+
+ if (optind < argc)
+ {
+ printf ("non-option ARGV-elements: ");
+ while (optind < argc)
+ printf ("%s ", argv[optind++]);
+ printf ("\n");
+ }
+
+ exit (0);
+}
+
+#endif /* TEST */
diff --git a/gnulib/lib/getopt_int.h b/gnulib/lib/getopt_int.h
new file mode 100644
index 0000000..3c6628b
--- /dev/null
+++ b/gnulib/lib/getopt_int.h
@@ -0,0 +1,130 @@
+/* Internal declarations for getopt.
+ Copyright (C) 1989-1994,1996-1999,2001,2003,2004
+ 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
+ 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/>. */
+
+#ifndef _GETOPT_INT_H
+#define _GETOPT_INT_H 1
+
+extern int _getopt_internal (int ___argc, char **___argv,
+ const char *__shortopts,
+ const struct option *__longopts, int *__longind,
+ int __long_only, int __posixly_correct);
+
+
+/* Reentrant versions which can handle parsing multiple argument
+ vectors at the same time. */
+
+/* Data type for reentrant functions. */
+struct _getopt_data
+{
+ /* These have exactly the same meaning as the corresponding global
+ variables, except that they are used for the reentrant
+ versions of getopt. */
+ int optind;
+ int opterr;
+ int optopt;
+ char *optarg;
+
+ /* Internal members. */
+
+ /* True if the internal members have been initialized. */
+ int __initialized;
+
+ /* The next char to be scanned in the option-element
+ in which the last option character we returned was found.
+ This allows us to pick up the scan where we left off.
+
+ If this is zero, or a null string, it means resume the scan
+ by advancing to the next ARGV-element. */
+ char *__nextchar;
+
+ /* Describe how to deal with options that follow non-option ARGV-elements.
+
+ If the caller did not specify anything,
+ the default is REQUIRE_ORDER if the environment variable
+ POSIXLY_CORRECT is defined, PERMUTE otherwise.
+
+ REQUIRE_ORDER means don't recognize them as options;
+ 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
+ of the list of option characters, or by calling getopt.
+
+ PERMUTE is the default. We permute the contents of ARGV as we
+ scan, so that eventually all the non-options are at the end.
+ This allows options to be given in any order, even with programs
+ that were not written to expect this.
+
+ RETURN_IN_ORDER is an option available to programs that were
+ 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
+ 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. */
+
+ enum
+ {
+ REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
+ } __ordering;
+
+ /* If the POSIXLY_CORRECT environment variable is set
+ or getopt was called. */
+ int __posixly_correct;
+
+
+ /* 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. */
+
+ int __first_nonopt;
+ int __last_nonopt;
+
+#if defined _LIBC && defined USE_NONOPTION_FLAGS
+ int __nonoption_flags_max_len;
+ int __nonoption_flags_len;
+# endif
+};
+
+/* The initializer is necessary to set OPTIND and OPTERR to their
+ default values and to clear the initialization flag. */
+#define _GETOPT_DATA_INITIALIZER { 1, 1 }
+
+extern int _getopt_internal_r (int ___argc, char **___argv,
+ const char *__shortopts,
+ const struct option *__longopts, int *__longind,
+ int __long_only, int __posixly_correct,
+ struct _getopt_data *__data);
+
+extern int _getopt_long_r (int ___argc, char **___argv,
+ const char *__shortopts,
+ const struct option *__longopts, int *__longind,
+ struct _getopt_data *__data);
+
+extern int _getopt_long_only_r (int ___argc, char **___argv,
+ const char *__shortopts,
+ const struct option *__longopts,
+ int *__longind,
+ struct _getopt_data *__data);
+
+#endif /* getopt_int.h */
diff --git a/gnulib/lib/gettext.h b/gnulib/lib/gettext.h
new file mode 100644
index 0000000..763dd3c
--- /dev/null
+++ b/gnulib/lib/gettext.h
@@ -0,0 +1,270 @@
+/* Convenience header for conditional use of GNU <libintl.h>.
+ Copyright (C) 1995-1998, 2000-2002, 2004-2006 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, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#ifndef _LIBGETTEXT_H
+#define _LIBGETTEXT_H 1
+
+/* NLS can be disabled through the configure --disable-nls option. */
+#if ENABLE_NLS
+
+/* Get declarations of GNU message catalog functions. */
+# include <libintl.h>
+
+/* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by
+ the gettext() and ngettext() macros. This is an alternative to calling
+ textdomain(), and is useful for libraries. */
+# ifdef DEFAULT_TEXT_DOMAIN
+# undef gettext
+# define gettext(Msgid) \
+ dgettext (DEFAULT_TEXT_DOMAIN, Msgid)
+# undef ngettext
+# define ngettext(Msgid1, Msgid2, N) \
+ dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N)
+# endif
+
+#else
+
+/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
+ chokes if dcgettext is defined as a macro. So include it now, to make
+ later inclusions of <locale.h> a NOP. We don't include <libintl.h>
+ as well because people using "gettext.h" will not include <libintl.h>,
+ and also including <libintl.h> would fail on SunOS 4, whereas <locale.h>
+ is OK. */
+#if defined(__sun)
+# include <locale.h>
+#endif
+
+/* Many header files from the libstdc++ coming with g++ 3.3 or newer include
+ <libintl.h>, which chokes if dcgettext is defined as a macro. So include
+ it now, to make later inclusions of <libintl.h> a NOP. */
+#if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3)
+# include <cstdlib>
+# if (__GLIBC__ >= 2) || _GLIBCXX_HAVE_LIBINTL_H
+# include <libintl.h>
+# endif
+#endif
+
+/* Disabled NLS.
+ The casts to 'const char *' serve the purpose of producing warnings
+ for invalid uses of the value returned from these functions.
+ On pre-ANSI systems without 'const', the config.h file is supposed to
+ contain "#define const". */
+# define gettext(Msgid) ((const char *) (Msgid))
+# define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid))
+# define dcgettext(Domainname, Msgid, Category) \
+ ((void) (Category), dgettext (Domainname, Msgid))
+# define ngettext(Msgid1, Msgid2, N) \
+ ((N) == 1 \
+ ? ((void) (Msgid2), (const char *) (Msgid1)) \
+ : ((void) (Msgid1), (const char *) (Msgid2)))
+# define dngettext(Domainname, Msgid1, Msgid2, N) \
+ ((void) (Domainname), ngettext (Msgid1, Msgid2, N))
+# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
+ ((void) (Category), dngettext(Domainname, Msgid1, Msgid2, N))
+# define textdomain(Domainname) ((const char *) (Domainname))
+# define bindtextdomain(Domainname, Dirname) \
+ ((void) (Domainname), (const char *) (Dirname))
+# define bind_textdomain_codeset(Domainname, Codeset) \
+ ((void) (Domainname), (const char *) (Codeset))
+
+#endif
+
+/* A pseudo function call that serves as a marker for the automated
+ extraction of messages, but does not call gettext(). The run-time
+ translation is done at a different place in the code.
+ The argument, String, should be a literal string. Concatenated strings
+ and other string expressions won't work.
+ The macro's expansion is not parenthesized, so that it is suitable as
+ initializer for static 'char[]' or 'const char[]' variables. */
+#define gettext_noop(String) String
+
+/* The separator between msgctxt and msgid in a .mo file. */
+#define GETTEXT_CONTEXT_GLUE "\004"
+
+/* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a
+ MSGID. MSGCTXT and MSGID must be string literals. MSGCTXT should be
+ short and rarely need to change.
+ The letter 'p' stands for 'particular' or 'special'. */
+#ifdef DEFAULT_TEXT_DOMAIN
+# define pgettext(Msgctxt, Msgid) \
+ pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
+#else
+# define pgettext(Msgctxt, Msgid) \
+ pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
+#endif
+#define dpgettext(Domainname, Msgctxt, Msgid) \
+ pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
+#define dcpgettext(Domainname, Msgctxt, Msgid, Category) \
+ pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category)
+#ifdef DEFAULT_TEXT_DOMAIN
+# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
+ npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
+#else
+# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
+ npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
+#endif
+#define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
+ npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
+#define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \
+ npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category)
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+pgettext_aux (const char *domain,
+ const char *msg_ctxt_id, const char *msgid,
+ int category)
+{
+ const char *translation = dcgettext (domain, msg_ctxt_id, category);
+ if (translation == msg_ctxt_id)
+ return msgid;
+ else
+ return translation;
+}
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+npgettext_aux (const char *domain,
+ const char *msg_ctxt_id, const char *msgid,
+ const char *msgid_plural, unsigned long int n,
+ int category)
+{
+ const char *translation =
+ dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
+ if (translation == msg_ctxt_id || translation == msgid_plural)
+ return (n == 1 ? msgid : msgid_plural);
+ else
+ return translation;
+}
+
+/* The same thing extended for non-constant arguments. Here MSGCTXT and MSGID
+ can be arbitrary expressions. But for string literals these macros are
+ less efficient than those above. */
+
+#include <string.h>
+
+#define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS \
+ (((__GNUC__ >= 3 || __GNUG__ >= 2) && !__STRICT_ANSI__) \
+ /* || __STDC_VERSION__ >= 199901L */ )
+
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+#include <stdlib.h>
+#endif
+
+#define pgettext_expr(Msgctxt, Msgid) \
+ dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES)
+#define dpgettext_expr(Domainname, Msgctxt, Msgid) \
+ dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES)
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+dcpgettext_expr (const char *domain,
+ const char *msgctxt, const char *msgid,
+ int category)
+{
+ size_t msgctxt_len = strlen (msgctxt) + 1;
+ size_t msgid_len = strlen (msgid) + 1;
+ const char *translation;
+#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+ char msg_ctxt_id[msgctxt_len + msgid_len];
+#else
+ char buf[1024];
+ char *msg_ctxt_id =
+ (msgctxt_len + msgid_len <= sizeof (buf)
+ ? buf
+ : (char *) malloc (msgctxt_len + msgid_len));
+ if (msg_ctxt_id != NULL)
+#endif
+ {
+ memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
+ msg_ctxt_id[msgctxt_len - 1] = '\004';
+ memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
+ translation = dcgettext (domain, msg_ctxt_id, category);
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+ if (msg_ctxt_id != buf)
+ free (msg_ctxt_id);
+#endif
+ if (translation != msg_ctxt_id)
+ return translation;
+ }
+ return msgid;
+}
+
+#define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \
+ dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
+#define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
+ dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+dcnpgettext_expr (const char *domain,
+ const char *msgctxt, const char *msgid,
+ const char *msgid_plural, unsigned long int n,
+ int category)
+{
+ size_t msgctxt_len = strlen (msgctxt) + 1;
+ size_t msgid_len = strlen (msgid) + 1;
+ const char *translation;
+#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+ char msg_ctxt_id[msgctxt_len + msgid_len];
+#else
+ char buf[1024];
+ char *msg_ctxt_id =
+ (msgctxt_len + msgid_len <= sizeof (buf)
+ ? buf
+ : (char *) malloc (msgctxt_len + msgid_len));
+ if (msg_ctxt_id != NULL)
+#endif
+ {
+ memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
+ msg_ctxt_id[msgctxt_len - 1] = '\004';
+ memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
+ translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+ if (msg_ctxt_id != buf)
+ free (msg_ctxt_id);
+#endif
+ if (!(translation == msg_ctxt_id || translation == msgid_plural))
+ return translation;
+ }
+ return (n == 1 ? msgid : msgid_plural);
+}
+
+#endif /* _LIBGETTEXT_H */
diff --git a/gnulib/lib/gettimeofday.c b/gnulib/lib/gettimeofday.c
new file mode 100644
index 0000000..88295ce
--- /dev/null
+++ b/gnulib/lib/gettimeofday.c
@@ -0,0 +1,142 @@
+/* Provide gettimeofday for systems that don't have it or for which it's broken.
+
+ Copyright (C) 2001, 2002, 2003, 2005, 2006, 2007 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, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+/* written by Jim Meyering */
+
+#include <config.h>
+
+/* Specification. */
+#include <sys/time.h>
+
+#include <time.h>
+
+#if HAVE_SYS_TIMEB_H
+# include <sys/timeb.h>
+#endif
+
+#if GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME
+
+/* Work around the bug in some systems whereby gettimeofday clobbers
+ the static buffer that localtime uses for its return value. The
+ gettimeofday function from Mac OS X 10.0.4 (i.e., Darwin 1.3.7) has
+ this problem. The tzset replacement is necessary for at least
+ Solaris 2.5, 2.5.1, and 2.6. */
+
+static struct tm tm_zero_buffer;
+static struct tm *localtime_buffer_addr = &tm_zero_buffer;
+
+/* This is a wrapper for localtime. It is used only on systems for which
+ gettimeofday clobbers the static buffer used for localtime's result.
+
+ On the first call, record the address of the static buffer that
+ localtime uses for its result. */
+
+struct tm *
+rpl_localtime (time_t const *timep)
+{
+#undef localtime
+ extern struct tm *localtime (time_t const *);
+ struct tm *tm = localtime (timep);
+
+ if (localtime_buffer_addr == &tm_zero_buffer)
+ localtime_buffer_addr = tm;
+
+ return tm;
+}
+
+/* Same as above, since gmtime and localtime use the same buffer. */
+struct tm *
+rpl_gmtime (time_t const *timep)
+{
+#undef gmtime
+ extern struct tm *gmtime (time_t const *);
+ struct tm *tm = gmtime (timep);
+
+ if (localtime_buffer_addr == &tm_zero_buffer)
+ localtime_buffer_addr = tm;
+
+ return tm;
+}
+
+#endif /* GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME */
+
+#if TZSET_CLOBBERS_LOCALTIME
+/* This is a wrapper for tzset, for systems on which tzset may clobber
+ the static buffer used for localtime's result. */
+void
+rpl_tzset (void)
+{
+#undef tzset
+ extern void tzset (void);
+
+ /* Save and restore the contents of the buffer used for localtime's
+ result around the call to tzset. */
+ struct tm save = *localtime_buffer_addr;
+ tzset ();
+ *localtime_buffer_addr = save;
+}
+#endif
+
+/* This is a wrapper for gettimeofday. It is used only on systems
+ that lack this function, or whose implementation of this function
+ causes problems. */
+
+int
+rpl_gettimeofday (struct timeval *restrict tv, void *restrict tz)
+{
+#undef gettimeofday
+#if HAVE_GETTIMEOFDAY
+# if GETTIMEOFDAY_CLOBBERS_LOCALTIME
+ /* Save and restore the contents of the buffer used for localtime's
+ result around the call to gettimeofday. */
+ struct tm save = *localtime_buffer_addr;
+# endif
+
+ int result = gettimeofday (tv, tz);
+
+# if GETTIMEOFDAY_CLOBBERS_LOCALTIME
+ *localtime_buffer_addr = save;
+# endif
+
+ return result;
+
+#else
+
+# if HAVE__FTIME
+
+ struct _timeb timebuf;
+ _ftime (&timebuf);
+ tv->tv_sec = timebuf.time;
+ tv->tv_usec = timebuf.millitm * 1000;
+
+# else
+
+# if !defined OK_TO_USE_1S_CLOCK
+# error "Only 1-second nominal clock resolution found. Is that intended?" \
+ "If so, compile with the -DOK_TO_USE_1S_CLOCK option."
+# endif
+ tv->tv_sec = time (NULL);
+ tv->tv_usec = 0;
+
+# endif
+
+ return 0;
+
+#endif
+}
diff --git a/gnulib/lib/intprops.h b/gnulib/lib/intprops.h
new file mode 100644
index 0000000..002161e
--- /dev/null
+++ b/gnulib/lib/intprops.h
@@ -0,0 +1,77 @@
+/* intprops.h -- properties of integer types
+
+ Copyright (C) 2001, 2002, 2003, 2004, 2005 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. */
+
+#include <limits.h>
+
+/* 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 arithmetic type T is signed. */
+#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
+
+/* The maximum and minimum values for the integer type T. 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. */
+#define TYPE_MINIMUM(t) \
+ ((t) (! TYPE_SIGNED (t) \
+ ? (t) 0 \
+ : TYPE_SIGNED_MAGNITUDE (t) \
+ ? ~ (t) 0 \
+ : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))
+#define TYPE_MAXIMUM(t) \
+ ((t) (! TYPE_SIGNED (t) \
+ ? (t) -1 \
+ : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))))
+
+/* Return zero if T can be determined to be an unsigned type.
+ Otherwise, return 1.
+ When compiling with GCC, INT_STRLEN_BOUND uses this macro to obtain a
+ tighter bound. Otherwise, it overestimates the true bound by one byte
+ when applied to unsigned types of size 2, 4, 16, ... bytes.
+ The symbol signed_type_or_expr__ is private to this header file. */
+#if __GNUC__ >= 2
+# define signed_type_or_expr__(t) TYPE_SIGNED (__typeof__ (t))
+#else
+# define signed_type_or_expr__(t) 1
+#endif
+
+/* Bound on length of the string representing an integer type or expression T.
+ Subtract 1 for the sign bit if T is signed; log10 (2.0) < 146/485;
+ add 1 for integer division truncation; add 1 more for a minus sign
+ if needed. */
+#define INT_STRLEN_BOUND(t) \
+ ((sizeof (t) * CHAR_BIT - signed_type_or_expr__ (t)) * 146 / 485 \
+ + signed_type_or_expr__ (t) + 1)
+
+/* 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)
diff --git a/gnulib/lib/localcharset.c b/gnulib/lib/localcharset.c
new file mode 100644
index 0000000..68679cf
--- /dev/null
+++ b/gnulib/lib/localcharset.c
@@ -0,0 +1,462 @@
+/* Determine a canonical name for the current locale's character encoding.
+
+ Copyright (C) 2000-2006, 2008 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, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+/* 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 _WIN32 || defined __WIN32__
+# define WIN32_NATIVE
+#endif
+
+#if defined __EMX__
+/* Assume EMX program runs on OS/2, even if compiled under DOS. */
+# ifndef OS2
+# define OS2
+# endif
+#endif
+
+#if !defined WIN32_NATIVE
+# 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 WIN32_NATIVE
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+#endif
+#if defined OS2
+# define INCL_DOS
+# include <os2.h>
+#endif
+
+#if ENABLE_RELOCATABLE
+# include "relocatable.h"
+#else
+# define relocate(pathname) (pathname)
+#endif
+
+/* Get LIBDIR. */
+#ifndef LIBDIR
+# include "configmake.h"
+#endif
+
+#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, 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 VMS || defined WIN32_NATIVE || defined __CYGWIN__)
+ FILE *fp;
+ 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 || (fp = fopen (file_name, "r")) == NULL)
+ /* Out of memory or file not found, treat it as empty. */
+ 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;
+ if (old_res_ptr != NULL)
+ 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;
+ }
+ }
+
+ if (file_name != NULL)
+ free (file_name);
+
+#else
+
+# 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 WIN32_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 WIN32_NATIVE || defined OS2)
+
+# if HAVE_LANGINFO_CODESET
+
+ /* Most systems support nl_langinfo (CODESET) nowadays. */
+ codeset = nl_langinfo (CODESET);
+
+# ifdef __CYGWIN__
+ /* Cygwin 2006 does not have locales. nl_langinfo (CODESET) always
+ returns "US-ASCII". As long as this is not fixed, 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;
+ }
+ }
+ }
+
+ /* Woe32 has a function returning the locale's codepage as a number. */
+ 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 WIN32_NATIVE
+
+ static char buf[2 + 10 + 1];
+
+ /* Woe32 has a function returning the locale's codepage as a number. */
+ 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";
+
+ return codeset;
+}
diff --git a/gnulib/lib/localcharset.h b/gnulib/lib/localcharset.h
new file mode 100644
index 0000000..b9a3013
--- /dev/null
+++ b/gnulib/lib/localcharset.h
@@ -0,0 +1,41 @@
+/* Determine a canonical name for the current locale's character encoding.
+ Copyright (C) 2000-2003 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, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#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/gnulib/lib/malloc.c b/gnulib/lib/malloc.c
new file mode 100644
index 0000000..f2f6663
--- /dev/null
+++ b/gnulib/lib/malloc.c
@@ -0,0 +1,57 @@
+/* malloc() function that is glibc compatible.
+
+ Copyright (C) 1997, 1998, 2006, 2007 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, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+/* written by Jim Meyering and Bruno Haible */
+
+#include <config.h>
+/* Only the AC_FUNC_MALLOC macro defines 'malloc' already in config.h. */
+#ifdef malloc
+# define NEED_MALLOC_GNU
+# undef malloc
+#endif
+
+/* Specification. */
+#include <stdlib.h>
+
+#include <errno.h>
+
+/* Call the system's malloc below. */
+#undef malloc
+
+/* Allocate an N-byte block of memory from the heap.
+ If N is zero, allocate a 1-byte block. */
+
+void *
+rpl_malloc (size_t n)
+{
+ void *result;
+
+#ifdef NEED_MALLOC_GNU
+ if (n == 0)
+ n = 1;
+#endif
+
+ result = malloc (n);
+
+#if !HAVE_MALLOC_POSIX
+ if (result == NULL)
+ errno = ENOMEM;
+#endif
+
+ return result;
+}
diff --git a/gnulib/lib/malloca.c b/gnulib/lib/malloca.c
new file mode 100644
index 0000000..1f41078
--- /dev/null
+++ b/gnulib/lib/malloca.c
@@ -0,0 +1,137 @@
+/* Safe automatic memory allocation.
+ Copyright (C) 2003, 2006-2007 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2003.
+
+ 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, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#include <config.h>
+
+/* Specification. */
+#include "malloca.h"
+
+/* The speed critical point in this file is freea() applied to an alloca()
+ result: it must be fast, to match the speed of alloca(). The speed of
+ mmalloca() and freea() in the other case are not critical, because they
+ are only invoked for big memory sizes. */
+
+#if HAVE_ALLOCA
+
+/* Store the mmalloca() results in a hash table. This is needed to reliably
+ distinguish a mmalloca() result and an alloca() result.
+
+ Although it is possible that the same pointer is returned by alloca() and
+ by mmalloca() at different times in the same application, it does not lead
+ to a bug in freea(), because:
+ - Before a pointer returned by alloca() can point into malloc()ed memory,
+ the function must return, and once this has happened the programmer must
+ not call freea() on it anyway.
+ - Before a pointer returned by mmalloca() can point into the stack, it
+ must be freed. The only function that can free it is freea(), and
+ when freea() frees it, it also removes it from the hash table. */
+
+#define MAGIC_NUMBER 0x1415fb4a
+#define MAGIC_SIZE sizeof (int)
+/* This is how the header info would look like without any alignment
+ considerations. */
+struct preliminary_header { void *next; char room[MAGIC_SIZE]; };
+/* But the header's size must be a multiple of sa_alignment_max. */
+#define HEADER_SIZE \
+ (((sizeof (struct preliminary_header) + sa_alignment_max - 1) / sa_alignment_max) * sa_alignment_max)
+struct header { void *next; char room[HEADER_SIZE - sizeof (struct preliminary_header) + MAGIC_SIZE]; };
+/* Verify that HEADER_SIZE == sizeof (struct header). */
+typedef int verify1[2 * (HEADER_SIZE == sizeof (struct header)) - 1];
+/* We make the hash table quite big, so that during lookups the probability
+ of empty hash buckets is quite high. There is no need to make the hash
+ table resizable, because when the hash table gets filled so much that the
+ lookup becomes slow, it means that the application has memory leaks. */
+#define HASH_TABLE_SIZE 257
+static void * mmalloca_results[HASH_TABLE_SIZE];
+
+#endif
+
+void *
+mmalloca (size_t n)
+{
+#if HAVE_ALLOCA
+ /* Allocate one more word, that serves as an indicator for malloc()ed
+ memory, so that freea() of an alloca() result is fast. */
+ size_t nplus = n + HEADER_SIZE;
+
+ if (nplus >= n)
+ {
+ char *p = (char *) malloc (nplus);
+
+ if (p != NULL)
+ {
+ size_t slot;
+
+ p += HEADER_SIZE;
+
+ /* Put a magic number into the indicator word. */
+ ((int *) p)[-1] = MAGIC_NUMBER;
+
+ /* Enter p into the hash table. */
+ slot = (unsigned long) p % HASH_TABLE_SIZE;
+ ((struct header *) (p - HEADER_SIZE))->next = mmalloca_results[slot];
+ mmalloca_results[slot] = p;
+
+ return p;
+ }
+ }
+ /* Out of memory. */
+ return NULL;
+#else
+# if !MALLOC_0_IS_NONNULL
+ if (n == 0)
+ n = 1;
+# endif
+ return malloc (n);
+#endif
+}
+
+#if HAVE_ALLOCA
+void
+freea (void *p)
+{
+ /* mmalloca() may have returned NULL. */
+ if (p != NULL)
+ {
+ /* Attempt to quickly distinguish the mmalloca() result - which has
+ a magic indicator word - and the alloca() result - which has an
+ uninitialized indicator word. It is for this test that sa_increment
+ additional bytes are allocated in the alloca() case. */
+ if (((int *) p)[-1] == MAGIC_NUMBER)
+ {
+ /* Looks like a mmalloca() result. To see whether it really is one,
+ perform a lookup in the hash table. */
+ size_t slot = (unsigned long) p % HASH_TABLE_SIZE;
+ void **chain = &mmalloca_results[slot];
+ for (; *chain != NULL;)
+ {
+ if (*chain == p)
+ {
+ /* Found it. Remove it from the hash table and free it. */
+ char *p_begin = (char *) p - HEADER_SIZE;
+ *chain = ((struct header *) p_begin)->next;
+ free (p_begin);
+ return;
+ }
+ chain = &((struct header *) ((char *) *chain - HEADER_SIZE))->next;
+ }
+ }
+ /* At this point, we know it was not a mmalloca() result. */
+ }
+}
+#endif
diff --git a/gnulib/lib/malloca.h b/gnulib/lib/malloca.h
new file mode 100644
index 0000000..3be0a38
--- /dev/null
+++ b/gnulib/lib/malloca.h
@@ -0,0 +1,134 @@
+/* Safe automatic memory allocation.
+ Copyright (C) 2003-2007 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2003.
+
+ 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, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#ifndef _MALLOCA_H
+#define _MALLOCA_H
+
+#include <alloca.h>
+#include <stddef.h>
+#include <stdlib.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* safe_alloca(N) is equivalent to alloca(N) when it is safe to call
+ alloca(N); otherwise it returns NULL. It either returns N bytes of
+ memory allocated on the stack, that lasts until the function returns,
+ or NULL.
+ Use of safe_alloca should be avoided:
+ - inside arguments of function calls - undefined behaviour,
+ - in inline functions - the allocation may actually last until the
+ calling function returns.
+*/
+#if HAVE_ALLOCA
+/* The OS usually guarantees only one guard page at the bottom of the stack,
+ and a page size can be as small as 4096 bytes. So we cannot safely
+ allocate anything larger than 4096 bytes. Also care for the possibility
+ of a few compiler-allocated temporary stack slots.
+ This must be a macro, not an inline function. */
+# define safe_alloca(N) ((N) < 4032 ? alloca (N) : NULL)
+#else
+# define safe_alloca(N) ((void) (N), NULL)
+#endif
+
+/* malloca(N) is a safe variant of alloca(N). It allocates N bytes of
+ memory allocated on the stack, that must be freed using freea() before
+ the function returns. Upon failure, it returns NULL. */
+#if HAVE_ALLOCA
+# define malloca(N) \
+ ((N) < 4032 - sa_increment \
+ ? (void *) ((char *) alloca ((N) + sa_increment) + sa_increment) \
+ : mmalloca (N))
+#else
+# define malloca(N) \
+ mmalloca (N)
+#endif
+extern void * mmalloca (size_t n);
+
+/* Free a block of memory allocated through malloca(). */
+#if HAVE_ALLOCA
+extern void freea (void *p);
+#else
+# define freea free
+#endif
+
+/* nmalloca(N,S) is an overflow-safe variant of malloca (N * S).
+ It allocates an array of N objects, each with S bytes of memory,
+ on the stack. S must be positive and N must be nonnegative.
+ The array must be freed using freea() before the function returns. */
+#if 1
+/* Cf. the definition of xalloc_oversized. */
+# define nmalloca(n, s) \
+ ((n) > (size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) \
+ ? NULL \
+ : malloca ((n) * (s)))
+#else
+extern void * nmalloca (size_t n, size_t s);
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+/* ------------------- Auxiliary, non-public definitions ------------------- */
+
+/* Determine the alignment of a type at compile time. */
+#if defined __GNUC__
+# define sa_alignof __alignof__
+#elif defined __cplusplus
+ template <class type> struct sa_alignof_helper { char __slot1; type __slot2; };
+# define sa_alignof(type) offsetof (sa_alignof_helper<type>, __slot2)
+#elif defined __hpux
+ /* Work around a HP-UX 10.20 cc bug with enums constants defined as offsetof
+ values. */
+# define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8)
+#elif defined _AIX
+ /* Work around an AIX 3.2.5 xlc bug with enums constants defined as offsetof
+ values. */
+# define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8)
+#else
+# define sa_alignof(type) offsetof (struct { char __slot1; type __slot2; }, __slot2)
+#endif
+
+enum
+{
+/* The desired alignment of memory allocations is the maximum alignment
+ among all elementary types. */
+ sa_alignment_long = sa_alignof (long),
+ sa_alignment_double = sa_alignof (double),
+#if HAVE_LONG_LONG_INT
+ sa_alignment_longlong = sa_alignof (long long),
+#endif
+ sa_alignment_longdouble = sa_alignof (long double),
+ sa_alignment_max = ((sa_alignment_long - 1) | (sa_alignment_double - 1)
+#if HAVE_LONG_LONG_INT
+ | (sa_alignment_longlong - 1)
+#endif
+ | (sa_alignment_longdouble - 1)
+ ) + 1,
+/* The increment that guarantees room for a magic word must be >= sizeof (int)
+ and a multiple of sa_alignment_max. */
+ sa_increment = ((sizeof (int) + sa_alignment_max - 1) / sa_alignment_max) * sa_alignment_max
+};
+
+#endif /* _MALLOCA_H */
diff --git a/gnulib/lib/malloca.valgrind b/gnulib/lib/malloca.valgrind
new file mode 100644
index 0000000..52f0a50
--- /dev/null
+++ b/gnulib/lib/malloca.valgrind
@@ -0,0 +1,7 @@
+# Suppress a valgrind message about use of uninitialized memory in freea().
+# This use is OK because it provides only a speedup.
+{
+ freea
+ Memcheck:Cond
+ fun:freea
+}
diff --git a/gnulib/lib/mbchar.c b/gnulib/lib/mbchar.c
new file mode 100644
index 0000000..6fa14b0
--- /dev/null
+++ b/gnulib/lib/mbchar.c
@@ -0,0 +1,35 @@
+/* Copyright (C) 2001, 2006 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>
+
+#include <limits.h>
+
+#include "mbchar.h"
+
+#if IS_BASIC_ASCII
+
+/* Bit table of characters in the ISO C "basic character set". */
+const unsigned int is_basic_table [UCHAR_MAX / 32 + 1] =
+{
+ 0x00001a00, /* '\t' '\v' '\f' */
+ 0xffffffef, /* ' '...'#' '%'...'?' */
+ 0xfffffffe, /* 'A'...'Z' '[' '\\' ']' '^' '_' */
+ 0x7ffffffe /* 'a'...'z' '{' '|' '}' '~' */
+ /* The remaining bits are 0. */
+};
+
+#endif /* IS_BASIC_ASCII */
diff --git a/gnulib/lib/mbchar.h b/gnulib/lib/mbchar.h
new file mode 100644
index 0000000..5d47a0a
--- /dev/null
+++ b/gnulib/lib/mbchar.h
@@ -0,0 +1,350 @@
+/* Multibyte character data type.
+ Copyright (C) 2001, 2005-2007 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 Bruno Haible <bruno@clisp.org>. */
+
+/* A multibyte character is a short subsequence of a char* string,
+ representing a single wide character.
+
+ We use multibyte characters instead of wide characters because of
+ the following goals:
+ 1) correct multibyte handling, i.e. operate according to the LC_CTYPE
+ locale,
+ 2) ease of maintenance, i.e. the maintainer needs not know all details
+ of the ISO C 99 standard,
+ 3) don't fail grossly if the input is not in the encoding set by the
+ locale, because often different encodings are in use in the same
+ countries (ISO-8859-1/UTF-8, EUC-JP/Shift_JIS, ...),
+ 4) fast in the case of ASCII characters,
+ 5) portability, i.e. don't make unportable assumptions about wchar_t.
+
+ Multibyte characters are only accessed through the mb* macros.
+
+ mb_ptr (mbc)
+ return a pointer to the beginning of the multibyte sequence.
+
+ mb_len (mbc)
+ returns the number of bytes occupied by the multibyte sequence.
+ Always > 0.
+
+ mb_iseq (mbc, sc)
+ returns true if mbc is the standard ASCII character sc.
+
+ mb_isnul (mbc)
+ returns true if mbc is the nul character.
+
+ mb_cmp (mbc1, mbc2)
+ returns a positive, zero, or negative value depending on whether mbc1
+ sorts after, same or before mbc2.
+
+ mb_casecmp (mbc1, mbc2)
+ returns a positive, zero, or negative value depending on whether mbc1
+ sorts after, same or before mbc2, modulo upper/lowercase conversion.
+
+ mb_equal (mbc1, mbc2)
+ returns true if mbc1 and mbc2 are equal.
+
+ mb_caseequal (mbc1, mbc2)
+ returns true if mbc1 and mbc2 are equal modulo upper/lowercase conversion.
+
+ mb_isalnum (mbc)
+ returns true if mbc is alphanumeric.
+
+ mb_isalpha (mbc)
+ returns true if mbc is alphabetic.
+
+ mb_isascii(mbc)
+ returns true if mbc is plain ASCII.
+
+ mb_isblank (mbc)
+ returns true if mbc is a blank.
+
+ mb_iscntrl (mbc)
+ returns true if mbc is a control character.
+
+ mb_isdigit (mbc)
+ returns true if mbc is a decimal digit.
+
+ mb_isgraph (mbc)
+ returns true if mbc is a graphic character.
+
+ mb_islower (mbc)
+ returns true if mbc is lowercase.
+
+ mb_isprint (mbc)
+ returns true if mbc is a printable character.
+
+ mb_ispunct (mbc)
+ returns true if mbc is a punctuation character.
+
+ mb_isspace (mbc)
+ returns true if mbc is a space character.
+
+ mb_isupper (mbc)
+ returns true if mbc is uppercase.
+
+ mb_isxdigit (mbc)
+ returns true if mbc is a hexadecimal digit.
+
+ mb_width (mbc)
+ returns the number of columns on the output device occupied by mbc.
+ Always >= 0.
+
+ mb_putc (mbc, stream)
+ outputs mbc on stream, a byte oriented FILE stream opened for output.
+
+ mb_setascii (&mbc, sc)
+ assigns the standard ASCII character sc to mbc.
+
+ mb_copy (&destmbc, &srcmbc)
+ copies srcmbc to destmbc.
+
+ Here are the function prototypes of the macros.
+
+ extern const char * mb_ptr (const mbchar_t mbc);
+ extern size_t mb_len (const mbchar_t mbc);
+ extern bool mb_iseq (const mbchar_t mbc, char sc);
+ extern bool mb_isnul (const mbchar_t mbc);
+ extern int mb_cmp (const mbchar_t mbc1, const mbchar_t mbc2);
+ extern int mb_casecmp (const mbchar_t mbc1, const mbchar_t mbc2);
+ extern bool mb_equal (const mbchar_t mbc1, const mbchar_t mbc2);
+ extern bool mb_caseequal (const mbchar_t mbc1, const mbchar_t mbc2);
+ extern bool mb_isalnum (const mbchar_t mbc);
+ extern bool mb_isalpha (const mbchar_t mbc);
+ extern bool mb_isascii (const mbchar_t mbc);
+ extern bool mb_isblank (const mbchar_t mbc);
+ extern bool mb_iscntrl (const mbchar_t mbc);
+ extern bool mb_isdigit (const mbchar_t mbc);
+ extern bool mb_isgraph (const mbchar_t mbc);
+ extern bool mb_islower (const mbchar_t mbc);
+ extern bool mb_isprint (const mbchar_t mbc);
+ extern bool mb_ispunct (const mbchar_t mbc);
+ extern bool mb_isspace (const mbchar_t mbc);
+ extern bool mb_isupper (const mbchar_t mbc);
+ extern bool mb_isxdigit (const mbchar_t mbc);
+ extern int mb_width (const mbchar_t mbc);
+ extern void mb_putc (const mbchar_t mbc, FILE *stream);
+ extern void mb_setascii (mbchar_t *new, char sc);
+ extern void mb_copy (mbchar_t *new, const mbchar_t *old);
+ */
+
+#ifndef _MBCHAR_H
+#define _MBCHAR_H 1
+
+#include <stdbool.h>
+#include <string.h>
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+ <wchar.h>.
+ BSD/OS 4.1 has a bug: <stdio.h> and <time.h> must be included before
+ <wchar.h>. */
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+#include <wctype.h>
+
+#define MBCHAR_BUF_SIZE 24
+
+struct mbchar
+{
+ const char *ptr; /* pointer to current character */
+ size_t bytes; /* number of bytes of current character, > 0 */
+ bool wc_valid; /* true if wc is a valid wide character */
+ wchar_t wc; /* if wc_valid: the current character */
+ char buf[MBCHAR_BUF_SIZE]; /* room for the bytes, used for file input only */
+};
+
+/* EOF (not a real character) is represented with bytes = 0 and
+ wc_valid = false. */
+
+typedef struct mbchar mbchar_t;
+
+/* Access the current character. */
+#define mb_ptr(mbc) ((mbc).ptr)
+#define mb_len(mbc) ((mbc).bytes)
+
+/* Comparison of characters. */
+#define mb_iseq(mbc, sc) ((mbc).wc_valid && (mbc).wc == (sc))
+#define mb_isnul(mbc) ((mbc).wc_valid && (mbc).wc == 0)
+#define mb_cmp(mbc1, mbc2) \
+ ((mbc1).wc_valid \
+ ? ((mbc2).wc_valid \
+ ? (int) (mbc1).wc - (int) (mbc2).wc \
+ : -1) \
+ : ((mbc2).wc_valid \
+ ? 1 \
+ : (mbc1).bytes == (mbc2).bytes \
+ ? memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) \
+ : (mbc1).bytes < (mbc2).bytes \
+ ? (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) > 0 ? 1 : -1) \
+ : (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc2).bytes) >= 0 ? 1 : -1)))
+#define mb_casecmp(mbc1, mbc2) \
+ ((mbc1).wc_valid \
+ ? ((mbc2).wc_valid \
+ ? (int) towlower ((mbc1).wc) - (int) towlower ((mbc2).wc) \
+ : -1) \
+ : ((mbc2).wc_valid \
+ ? 1 \
+ : (mbc1).bytes == (mbc2).bytes \
+ ? memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) \
+ : (mbc1).bytes < (mbc2).bytes \
+ ? (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) > 0 ? 1 : -1) \
+ : (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc2).bytes) >= 0 ? 1 : -1)))
+#define mb_equal(mbc1, mbc2) \
+ ((mbc1).wc_valid && (mbc2).wc_valid \
+ ? (mbc1).wc == (mbc2).wc \
+ : (mbc1).bytes == (mbc2).bytes \
+ && memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) == 0)
+#define mb_caseequal(mbc1, mbc2) \
+ ((mbc1).wc_valid && (mbc2).wc_valid \
+ ? towlower ((mbc1).wc) == towlower ((mbc2).wc) \
+ : (mbc1).bytes == (mbc2).bytes \
+ && memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) == 0)
+
+/* <ctype.h>, <wctype.h> classification. */
+#define mb_isascii(mbc) \
+ ((mbc).wc_valid && (mbc).wc >= 0 && (mbc).wc <= 127)
+#define mb_isalnum(mbc) ((mbc).wc_valid && iswalnum ((mbc).wc))
+#define mb_isalpha(mbc) ((mbc).wc_valid && iswalpha ((mbc).wc))
+#define mb_isblank(mbc) ((mbc).wc_valid && iswblank ((mbc).wc))
+#define mb_iscntrl(mbc) ((mbc).wc_valid && iswcntrl ((mbc).wc))
+#define mb_isdigit(mbc) ((mbc).wc_valid && iswdigit ((mbc).wc))
+#define mb_isgraph(mbc) ((mbc).wc_valid && iswgraph ((mbc).wc))
+#define mb_islower(mbc) ((mbc).wc_valid && iswlower ((mbc).wc))
+#define mb_isprint(mbc) ((mbc).wc_valid && iswprint ((mbc).wc))
+#define mb_ispunct(mbc) ((mbc).wc_valid && iswpunct ((mbc).wc))
+#define mb_isspace(mbc) ((mbc).wc_valid && iswspace ((mbc).wc))
+#define mb_isupper(mbc) ((mbc).wc_valid && iswupper ((mbc).wc))
+#define mb_isxdigit(mbc) ((mbc).wc_valid && iswxdigit ((mbc).wc))
+
+/* Extra <wchar.h> function. */
+
+/* Unprintable characters appear as a small box of width 1. */
+#define MB_UNPRINTABLE_WIDTH 1
+
+static inline int
+mb_width_aux (wint_t wc)
+{
+ int w = wcwidth (wc);
+ /* For unprintable characters, arbitrarily return 0 for control characters
+ and MB_UNPRINTABLE_WIDTH otherwise. */
+ return (w >= 0 ? w : iswcntrl (wc) ? 0 : MB_UNPRINTABLE_WIDTH);
+}
+
+#define mb_width(mbc) \
+ ((mbc).wc_valid ? mb_width_aux ((mbc).wc) : MB_UNPRINTABLE_WIDTH)
+
+/* Output. */
+#define mb_putc(mbc, stream) fwrite ((mbc).ptr, 1, (mbc).bytes, (stream))
+
+/* Assignment. */
+#define mb_setascii(mbc, sc) \
+ ((mbc)->ptr = (mbc)->buf, (mbc)->bytes = 1, (mbc)->wc_valid = 1, \
+ (mbc)->wc = (mbc)->buf[0] = (sc))
+
+/* Copying a character. */
+static inline void
+mb_copy (mbchar_t *new_mbc, const mbchar_t *old_mbc)
+{
+ if (old_mbc->ptr == &old_mbc->buf[0])
+ {
+ memcpy (&new_mbc->buf[0], &old_mbc->buf[0], old_mbc->bytes);
+ new_mbc->ptr = &new_mbc->buf[0];
+ }
+ else
+ new_mbc->ptr = old_mbc->ptr;
+ new_mbc->bytes = old_mbc->bytes;
+ if ((new_mbc->wc_valid = old_mbc->wc_valid))
+ new_mbc->wc = old_mbc->wc;
+}
+
+
+/* is_basic(c) tests whether the single-byte character c is in the
+ ISO C "basic character set".
+ This is a convenience function, and is in this file only to share code
+ between mbiter_multi.h and mbfile_multi.h. */
+#if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
+ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
+ && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
+ && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
+ && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
+ && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
+ && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
+ && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
+ && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
+ && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
+ && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
+ && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
+ && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
+ && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
+ && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
+ && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
+ && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
+ && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
+ && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
+ && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
+ && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
+ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
+ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)
+/* The character set is ISO-646, not EBCDIC. */
+# define IS_BASIC_ASCII 1
+
+extern const unsigned int is_basic_table[];
+
+static inline bool
+is_basic (char c)
+{
+ return (is_basic_table [(unsigned char) c >> 5] >> ((unsigned char) c & 31))
+ & 1;
+}
+
+#else
+
+static inline bool
+is_basic (char c)
+{
+ switch (c)
+ {
+ case '\t': case '\v': case '\f':
+ case ' ': case '!': case '"': case '#': case '%':
+ case '&': case '\'': case '(': case ')': case '*':
+ case '+': case ',': case '-': case '.': case '/':
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ case ':': case ';': case '<': case '=': case '>':
+ case '?':
+ case 'A': case 'B': case 'C': case 'D': case 'E':
+ case 'F': case 'G': case 'H': case 'I': case 'J':
+ case 'K': case 'L': case 'M': case 'N': case 'O':
+ case 'P': case 'Q': case 'R': case 'S': case 'T':
+ case 'U': case 'V': case 'W': case 'X': case 'Y':
+ case 'Z':
+ case '[': case '\\': case ']': case '^': case '_':
+ case 'a': case 'b': case 'c': case 'd': case 'e':
+ case 'f': case 'g': case 'h': case 'i': case 'j':
+ case 'k': case 'l': case 'm': case 'n': case 'o':
+ case 'p': case 'q': case 'r': case 's': case 't':
+ case 'u': case 'v': case 'w': case 'x': case 'y':
+ case 'z': case '{': case '|': case '}': case '~':
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+#endif
+
+#endif /* _MBCHAR_H */
diff --git a/gnulib/lib/mbiter.h b/gnulib/lib/mbiter.h
new file mode 100644
index 0000000..b274da7
--- /dev/null
+++ b/gnulib/lib/mbiter.h
@@ -0,0 +1,215 @@
+/* Iterating through multibyte strings: macros for multi-byte encodings.
+ Copyright (C) 2001, 2005, 2007 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 Bruno Haible <bruno@clisp.org>. */
+
+/* The macros in this file implement forward iteration through a
+ multi-byte string.
+
+ With these macros, an iteration loop that looks like
+
+ char *iter;
+ for (iter = buf; iter < buf + buflen; iter++)
+ {
+ do_something (*iter);
+ }
+
+ becomes
+
+ mbi_iterator_t iter;
+ for (mbi_init (iter, buf, buflen); mbi_avail (iter); mbi_advance (iter))
+ {
+ do_something (mbi_cur_ptr (iter), mb_len (mbi_cur (iter)));
+ }
+
+ The benefit of these macros over plain use of mbrtowc is:
+ - Handling of invalid multibyte sequences is possible without
+ making the code more complicated, while still preserving the
+ invalid multibyte sequences.
+
+ mbi_iterator_t
+ is a type usable for variable declarations.
+
+ mbi_init (iter, startptr, length)
+ initializes the iterator, starting at startptr and crossing length bytes.
+
+ mbi_avail (iter)
+ returns true if there are more multibyte chracters available before
+ the end of string is reached. In this case, mbi_cur (iter) is
+ initialized to the next multibyte chracter.
+
+ mbi_advance (iter)
+ advances the iterator by one multibyte character.
+
+ mbi_cur (iter)
+ returns the current multibyte character, of type mbchar_t. All the
+ macros defined in mbchar.h can be used on it.
+
+ mbi_cur_ptr (iter)
+ return a pointer to the beginning of the current multibyte character.
+
+ mbi_reloc (iter, ptrdiff)
+ relocates iterator when the string is moved by ptrdiff bytes.
+
+ mbi_copy (&destiter, &srciter)
+ copies srciter to destiter.
+
+ Here are the function prototypes of the macros.
+
+ extern void mbi_init (mbi_iterator_t iter,
+ const char *startptr, size_t length);
+ extern bool mbi_avail (mbi_iterator_t iter);
+ extern void mbi_advance (mbi_iterator_t iter);
+ extern mbchar_t mbi_cur (mbi_iterator_t iter);
+ extern const char * mbi_cur_ptr (mbi_iterator_t iter);
+ extern void mbi_reloc (mbi_iterator_t iter, ptrdiff_t ptrdiff);
+ extern void mbi_copy (mbi_iterator_t *new, const mbi_iterator_t *old);
+ */
+
+#ifndef _MBITER_H
+#define _MBITER_H 1
+
+#include <assert.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <string.h>
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+ <wchar.h>.
+ BSD/OS 4.1 has a bug: <stdio.h> and <time.h> must be included before
+ <wchar.h>. */
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+
+#include "mbchar.h"
+
+struct mbiter_multi
+{
+ const char *limit; /* pointer to end of string */
+ bool in_shift; /* true if next byte may not be interpreted as ASCII */
+ mbstate_t state; /* if in_shift: current shift state */
+ bool next_done; /* true if mbi_avail has already filled the following */
+ struct mbchar cur; /* the current character:
+ const char *cur.ptr pointer to current character
+ The following are only valid after mbi_avail.
+ size_t cur.bytes number of bytes of current character
+ bool cur.wc_valid true if wc is a valid wide character
+ wchar_t cur.wc if wc_valid: the current character
+ */
+};
+
+static inline void
+mbiter_multi_next (struct mbiter_multi *iter)
+{
+ if (iter->next_done)
+ return;
+ if (iter->in_shift)
+ goto with_shift;
+ /* Handle most ASCII characters quickly, without calling mbrtowc(). */
+ if (is_basic (*iter->cur.ptr))
+ {
+ /* These characters are part of the basic character set. ISO C 99
+ guarantees that their wide character code is identical to their
+ char code. */
+ iter->cur.bytes = 1;
+ iter->cur.wc = *iter->cur.ptr;
+ iter->cur.wc_valid = true;
+ }
+ else
+ {
+ assert (mbsinit (&iter->state));
+ iter->in_shift = true;
+ with_shift:
+ iter->cur.bytes = mbrtowc (&iter->cur.wc, iter->cur.ptr,
+ iter->limit - iter->cur.ptr, &iter->state);
+ if (iter->cur.bytes == (size_t) -1)
+ {
+ /* An invalid multibyte sequence was encountered. */
+ iter->cur.bytes = 1;
+ iter->cur.wc_valid = false;
+ /* Whether to set iter->in_shift = false and reset iter->state
+ or not is not very important; the string is bogus anyway. */
+ }
+ else if (iter->cur.bytes == (size_t) -2)
+ {
+ /* An incomplete multibyte character at the end. */
+ iter->cur.bytes = iter->limit - iter->cur.ptr;
+ iter->cur.wc_valid = false;
+ /* Whether to set iter->in_shift = false and reset iter->state
+ or not is not important; the string end is reached anyway. */
+ }
+ else
+ {
+ if (iter->cur.bytes == 0)
+ {
+ /* A null wide character was encountered. */
+ iter->cur.bytes = 1;
+ assert (*iter->cur.ptr == '\0');
+ assert (iter->cur.wc == 0);
+ }
+ iter->cur.wc_valid = true;
+
+ /* When in the initial state, we can go back treating ASCII
+ characters more quickly. */
+ if (mbsinit (&iter->state))
+ iter->in_shift = false;
+ }
+ }
+ iter->next_done = true;
+}
+
+static inline void
+mbiter_multi_reloc (struct mbiter_multi *iter, ptrdiff_t ptrdiff)
+{
+ iter->cur.ptr += ptrdiff;
+ iter->limit += ptrdiff;
+}
+
+static inline void
+mbiter_multi_copy (struct mbiter_multi *new_iter, const struct mbiter_multi *old_iter)
+{
+ new_iter->limit = old_iter->limit;
+ if ((new_iter->in_shift = old_iter->in_shift))
+ memcpy (&new_iter->state, &old_iter->state, sizeof (mbstate_t));
+ else
+ memset (&new_iter->state, 0, sizeof (mbstate_t));
+ new_iter->next_done = old_iter->next_done;
+ mb_copy (&new_iter->cur, &old_iter->cur);
+}
+
+/* Iteration macros. */
+typedef struct mbiter_multi mbi_iterator_t;
+#define mbi_init(iter, startptr, length) \
+ ((iter).cur.ptr = (startptr), (iter).limit = (iter).cur.ptr + (length), \
+ (iter).in_shift = false, memset (&(iter).state, '\0', sizeof (mbstate_t)), \
+ (iter).next_done = false)
+#define mbi_avail(iter) \
+ ((iter).cur.ptr < (iter).limit && (mbiter_multi_next (&(iter)), true))
+#define mbi_advance(iter) \
+ ((iter).cur.ptr += (iter).cur.bytes, (iter).next_done = false)
+
+/* Access to the current character. */
+#define mbi_cur(iter) (iter).cur
+#define mbi_cur_ptr(iter) (iter).cur.ptr
+
+/* Relocation. */
+#define mbi_reloc(iter, ptrdiff) mbiter_multi_reloc (&iter, ptrdiff)
+
+/* Copying an iterator. */
+#define mbi_copy mbiter_multi_copy
+
+#endif /* _MBITER_H */
diff --git a/gnulib/lib/mbscasecmp.c b/gnulib/lib/mbscasecmp.c
new file mode 100644
index 0000000..19f974b
--- /dev/null
+++ b/gnulib/lib/mbscasecmp.c
@@ -0,0 +1,102 @@
+/* Case-insensitive string comparison function.
+ Copyright (C) 1998-1999, 2005-2007 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2005,
+ based on earlier glibc code.
+
+ 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 <string.h>
+
+#include <ctype.h>
+#include <limits.h>
+
+#if HAVE_MBRTOWC
+# include "mbuiter.h"
+#endif
+
+#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch))
+
+/* 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! */
+int
+mbscasecmp (const char *s1, const char *s2)
+{
+ if (s1 == s2)
+ return 0;
+
+ /* Be careful not to look at the entire extent of s1 or s2 until needed.
+ This is useful because when two strings differ, the difference is
+ most often already in the very few first characters. */
+#if HAVE_MBRTOWC
+ if (MB_CUR_MAX > 1)
+ {
+ mbui_iterator_t iter1;
+ mbui_iterator_t iter2;
+
+ mbui_init (iter1, s1);
+ mbui_init (iter2, s2);
+
+ while (mbui_avail (iter1) && mbui_avail (iter2))
+ {
+ int cmp = mb_casecmp (mbui_cur (iter1), mbui_cur (iter2));
+
+ if (cmp != 0)
+ return cmp;
+
+ mbui_advance (iter1);
+ mbui_advance (iter2);
+ }
+ if (mbui_avail (iter1))
+ /* s2 terminated before s1. */
+ return 1;
+ if (mbui_avail (iter2))
+ /* s1 terminated before s2. */
+ return -1;
+ return 0;
+ }
+ else
+#endif
+ {
+ const unsigned char *p1 = (const unsigned char *) s1;
+ const unsigned char *p2 = (const unsigned char *) s2;
+ unsigned char c1, c2;
+
+ do
+ {
+ c1 = TOLOWER (*p1);
+ c2 = TOLOWER (*p2);
+
+ if (c1 == '\0')
+ break;
+
+ ++p1;
+ ++p2;
+ }
+ while (c1 == c2);
+
+ if (UCHAR_MAX <= INT_MAX)
+ return c1 - c2;
+ else
+ /* On machines where 'char' and 'int' are types of the same size, the
+ difference of two 'unsigned char' values - including the sign bit -
+ doesn't fit in an 'int'. */
+ return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0);
+ }
+}
diff --git a/gnulib/lib/mbschr.c b/gnulib/lib/mbschr.c
new file mode 100644
index 0000000..5997b18
--- /dev/null
+++ b/gnulib/lib/mbschr.c
@@ -0,0 +1,56 @@
+/* Searching a string for a character.
+ Copyright (C) 2007 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 <http://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include <string.h>
+
+#if HAVE_MBRTOWC
+# include "mbuiter.h"
+#endif
+
+/* 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. */
+char *
+mbschr (const char *string, int c)
+{
+#if HAVE_MBRTOWC
+ if (MB_CUR_MAX > 1
+ /* Optimization: We know that ASCII characters < 0x30 don't occur as
+ part of multibyte characters longer than 1 byte. Hence, if c < 0x30,
+ the faster unibyte loop can be used. */
+ && (unsigned char) c >= 0x30)
+ {
+ mbui_iterator_t iter;
+
+ for (mbui_init (iter, string);; mbui_advance (iter))
+ {
+ if (!mbui_avail (iter))
+ goto notfound;
+ if (mb_len (mbui_cur (iter)) == 1
+ && (unsigned char) * mbui_cur_ptr (iter) == (unsigned char) c)
+ break;
+ }
+ return (char *) mbui_cur_ptr (iter);
+ notfound:
+ return NULL;
+ }
+ else
+#endif
+ return strchr (string, c);
+}
diff --git a/gnulib/lib/mbslen.c b/gnulib/lib/mbslen.c
new file mode 100644
index 0000000..cb5ac5b
--- /dev/null
+++ b/gnulib/lib/mbslen.c
@@ -0,0 +1,48 @@
+/* Counting the multibyte characters in a string.
+ Copyright (C) 2007 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 <http://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include <string.h>
+
+#include <stdlib.h>
+
+#if HAVE_MBRTOWC
+# include "mbuiter.h"
+#endif
+
+/* Return the number of multibyte characters in the character string STRING. */
+size_t
+mbslen (const char *string)
+{
+#if HAVE_MBRTOWC
+ if (MB_CUR_MAX > 1)
+ {
+ size_t count;
+ mbui_iterator_t iter;
+
+ count = 0;
+ for (mbui_init (iter, string); mbui_avail (iter); mbui_advance (iter))
+ count++;
+
+ return count;
+ }
+ else
+#endif
+ return strlen (string);
+}
diff --git a/gnulib/lib/mbsncasecmp.c b/gnulib/lib/mbsncasecmp.c
new file mode 100644
index 0000000..3763d96
--- /dev/null
+++ b/gnulib/lib/mbsncasecmp.c
@@ -0,0 +1,103 @@
+/* Case-insensitive string comparison function.
+ Copyright (C) 1998-1999, 2005-2007 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2005,
+ based on earlier glibc code.
+
+ 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 <string.h>
+
+#include <ctype.h>
+#include <limits.h>
+
+#if HAVE_MBRTOWC
+# include "mbuiter.h"
+#endif
+
+#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch))
+
+/* 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! */
+int
+mbsncasecmp (const char *s1, const char *s2, size_t n)
+{
+ if (s1 == s2 || n == 0)
+ return 0;
+
+ /* Be careful not to look at the entire extent of s1 or s2 until needed.
+ This is useful because when two strings differ, the difference is
+ most often already in the very few first characters. */
+#if HAVE_MBRTOWC
+ if (MB_CUR_MAX > 1)
+ {
+ mbui_iterator_t iter1;
+ mbui_iterator_t iter2;
+
+ mbui_init (iter1, s1);
+ mbui_init (iter2, s2);
+
+ while (mbui_avail (iter1) && mbui_avail (iter2))
+ {
+ int cmp = mb_casecmp (mbui_cur (iter1), mbui_cur (iter2));
+
+ if (cmp != 0)
+ return cmp;
+
+ if (--n == 0)
+ return 0;
+
+ mbui_advance (iter1);
+ mbui_advance (iter2);
+ }
+ if (mbui_avail (iter1))
+ /* s2 terminated before s1 and n. */
+ return 1;
+ if (mbui_avail (iter2))
+ /* s1 terminated before s2 and n. */
+ return -1;
+ return 0;
+ }
+ else
+#endif
+ {
+ const unsigned char *p1 = (const unsigned char *) s1;
+ const unsigned char *p2 = (const unsigned char *) s2;
+ unsigned char c1, c2;
+
+ for (; ; p1++, p2++)
+ {
+ c1 = TOLOWER (*p1);
+ c2 = TOLOWER (*p2);
+
+ if (--n == 0 || c1 == '\0' || c1 != c2)
+ break;
+ }
+
+ if (UCHAR_MAX <= INT_MAX)
+ return c1 - c2;
+ else
+ /* On machines where 'char' and 'int' are types of the same size, the
+ difference of two 'unsigned char' values - including the sign bit -
+ doesn't fit in an 'int'. */
+ return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0);
+ }
+}
diff --git a/gnulib/lib/mbsstr.c b/gnulib/lib/mbsstr.c
new file mode 100644
index 0000000..35fd02b
--- /dev/null
+++ b/gnulib/lib/mbsstr.c
@@ -0,0 +1,385 @@
+/* Searching in a string.
+ Copyright (C) 2005-2008 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2005.
+
+ 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 <string.h>
+
+#include <stdbool.h>
+#include <stddef.h> /* for NULL, in case a nonstandard string.h lacks it */
+
+#include "malloca.h"
+#if HAVE_MBRTOWC
+# include "mbuiter.h"
+#endif
+
+/* Knuth-Morris-Pratt algorithm. */
+#define CANON_ELEMENT(c) c
+#include "str-kmp.h"
+
+#if HAVE_MBRTOWC
+/* Knuth-Morris-Pratt algorithm.
+ See http://en.wikipedia.org/wiki/Knuth-Morris-Pratt_algorithm
+ Return a boolean indicating success:
+ Return true and set *RESULTP if the search was completed.
+ Return false if it was aborted because not enough memory was available. */
+static bool
+knuth_morris_pratt_multibyte (const char *haystack, const char *needle,
+ const char **resultp)
+{
+ size_t m = mbslen (needle);
+ mbchar_t *needle_mbchars;
+ size_t *table;
+
+ /* Allocate room for needle_mbchars and the table. */
+ char *memory = (char *) nmalloca (m, sizeof (mbchar_t) + sizeof (size_t));
+ if (memory == NULL)
+ return false;
+ needle_mbchars = (mbchar_t *) memory;
+ table = (size_t *) (memory + m * sizeof (mbchar_t));
+
+ /* Fill needle_mbchars. */
+ {
+ mbui_iterator_t iter;
+ size_t j;
+
+ j = 0;
+ for (mbui_init (iter, needle); mbui_avail (iter); mbui_advance (iter), j++)
+ mb_copy (&needle_mbchars[j], &mbui_cur (iter));
+ }
+
+ /* Fill the table.
+ For 0 < i < m:
+ 0 < table[i] <= i is defined such that
+ forall 0 < x < table[i]: needle[x..i-1] != needle[0..i-1-x],
+ and table[i] is as large as possible with this property.
+ This implies:
+ 1) For 0 < i < m:
+ If table[i] < i,
+ needle[table[i]..i-1] = needle[0..i-1-table[i]].
+ 2) For 0 < i < m:
+ rhaystack[0..i-1] == needle[0..i-1]
+ and exists h, i <= h < m: rhaystack[h] != needle[h]
+ implies
+ forall 0 <= x < table[i]: rhaystack[x..x+m-1] != needle[0..m-1].
+ table[0] remains uninitialized. */
+ {
+ size_t i, j;
+
+ /* i = 1: Nothing to verify for x = 0. */
+ table[1] = 1;
+ j = 0;
+
+ for (i = 2; i < m; i++)
+ {
+ /* Here: j = i-1 - table[i-1].
+ The inequality needle[x..i-1] != needle[0..i-1-x] is known to hold
+ for x < table[i-1], by induction.
+ Furthermore, if j>0: needle[i-1-j..i-2] = needle[0..j-1]. */
+ mbchar_t *b = &needle_mbchars[i - 1];
+
+ for (;;)
+ {
+ /* Invariants: The inequality needle[x..i-1] != needle[0..i-1-x]
+ is known to hold for x < i-1-j.
+ Furthermore, if j>0: needle[i-1-j..i-2] = needle[0..j-1]. */
+ if (mb_equal (*b, needle_mbchars[j]))
+ {
+ /* Set table[i] := i-1-j. */
+ table[i] = i - ++j;
+ break;
+ }
+ /* The inequality needle[x..i-1] != needle[0..i-1-x] also holds
+ for x = i-1-j, because
+ needle[i-1] != needle[j] = needle[i-1-x]. */
+ if (j == 0)
+ {
+ /* The inequality holds for all possible x. */
+ table[i] = i;
+ break;
+ }
+ /* The inequality needle[x..i-1] != needle[0..i-1-x] also holds
+ for i-1-j < x < i-1-j+table[j], because for these x:
+ needle[x..i-2]
+ = needle[x-(i-1-j)..j-1]
+ != needle[0..j-1-(x-(i-1-j))] (by definition of table[j])
+ = needle[0..i-2-x],
+ hence needle[x..i-1] != needle[0..i-1-x].
+ Furthermore
+ needle[i-1-j+table[j]..i-2]
+ = needle[table[j]..j-1]
+ = needle[0..j-1-table[j]] (by definition of table[j]). */
+ j = j - table[j];
+ }
+ /* Here: j = i - table[i]. */
+ }
+ }
+
+ /* Search, using the table to accelerate the processing. */
+ {
+ size_t j;
+ mbui_iterator_t rhaystack;
+ mbui_iterator_t phaystack;
+
+ *resultp = NULL;
+ j = 0;
+ mbui_init (rhaystack, haystack);
+ mbui_init (phaystack, haystack);
+ /* Invariant: phaystack = rhaystack + j. */
+ while (mbui_avail (phaystack))
+ if (mb_equal (needle_mbchars[j], mbui_cur (phaystack)))
+ {
+ j++;
+ mbui_advance (phaystack);
+ if (j == m)
+ {
+ /* The entire needle has been found. */
+ *resultp = mbui_cur_ptr (rhaystack);
+ break;
+ }
+ }
+ else if (j > 0)
+ {
+ /* Found a match of needle[0..j-1], mismatch at needle[j]. */
+ size_t count = table[j];
+ j -= count;
+ for (; count > 0; count--)
+ {
+ if (!mbui_avail (rhaystack))
+ abort ();
+ mbui_advance (rhaystack);
+ }
+ }
+ else
+ {
+ /* Found a mismatch at needle[0] already. */
+ if (!mbui_avail (rhaystack))
+ abort ();
+ mbui_advance (rhaystack);
+ mbui_advance (phaystack);
+ }
+ }
+
+ freea (memory);
+ return true;
+}
+#endif
+
+/* Find the first occurrence of the character string NEEDLE in the character
+ string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. */
+char *
+mbsstr (const char *haystack, const char *needle)
+{
+ /* Be careful not to look at the entire extent of haystack or needle
+ until needed. This is useful because of these two cases:
+ - haystack may be very long, and a match of needle found early,
+ - needle may be very long, and not even a short initial segment of
+ needle may be found in haystack. */
+#if HAVE_MBRTOWC
+ if (MB_CUR_MAX > 1)
+ {
+ mbui_iterator_t iter_needle;
+
+ mbui_init (iter_needle, needle);
+ if (mbui_avail (iter_needle))
+ {
+ /* Minimizing the worst-case complexity:
+ Let n = mbslen(haystack), m = mbslen(needle).
+ The naïve algorithm is O(n*m) worst-case.
+ The Knuth-Morris-Pratt algorithm is O(n) worst-case but it needs a
+ memory allocation.
+ To achieve linear complexity and yet amortize the cost of the
+ memory allocation, we activate the Knuth-Morris-Pratt algorithm
+ only once the naïve algorithm has already run for some time; more
+ precisely, when
+ - the outer loop count is >= 10,
+ - the average number of comparisons per outer loop is >= 5,
+ - the total number of comparisons is >= m.
+ But we try it only once. If the memory allocation attempt failed,
+ we don't retry it. */
+ bool try_kmp = true;
+ size_t outer_loop_count = 0;
+ size_t comparison_count = 0;
+ size_t last_ccount = 0; /* last comparison count */
+ mbui_iterator_t iter_needle_last_ccount; /* = needle + last_ccount */
+
+ mbui_iterator_t iter_haystack;
+
+ mbui_init (iter_needle_last_ccount, needle);
+ mbui_init (iter_haystack, haystack);
+ for (;; mbui_advance (iter_haystack))
+ {
+ if (!mbui_avail (iter_haystack))
+ /* No match. */
+ return NULL;
+
+ /* See whether it's advisable to use an asymptotically faster
+ algorithm. */
+ if (try_kmp
+ && outer_loop_count >= 10
+ && comparison_count >= 5 * outer_loop_count)
+ {
+ /* See if needle + comparison_count now reaches the end of
+ needle. */
+ size_t count = comparison_count - last_ccount;
+ for (;
+ count > 0 && mbui_avail (iter_needle_last_ccount);
+ count--)
+ mbui_advance (iter_needle_last_ccount);
+ last_ccount = comparison_count;
+ if (!mbui_avail (iter_needle_last_ccount))
+ {
+ /* Try the Knuth-Morris-Pratt algorithm. */
+ const char *result;
+ bool success =
+ knuth_morris_pratt_multibyte (haystack, needle,
+ &result);
+ if (success)
+ return (char *) result;
+ try_kmp = false;
+ }
+ }
+
+ outer_loop_count++;
+ comparison_count++;
+ if (mb_equal (mbui_cur (iter_haystack), mbui_cur (iter_needle)))
+ /* The first character matches. */
+ {
+ mbui_iterator_t rhaystack;
+ mbui_iterator_t rneedle;
+
+ memcpy (&rhaystack, &iter_haystack, sizeof (mbui_iterator_t));
+ mbui_advance (rhaystack);
+
+ mbui_init (rneedle, needle);
+ if (!mbui_avail (rneedle))
+ abort ();
+ mbui_advance (rneedle);
+
+ for (;; mbui_advance (rhaystack), mbui_advance (rneedle))
+ {
+ if (!mbui_avail (rneedle))
+ /* Found a match. */
+ return (char *) mbui_cur_ptr (iter_haystack);
+ if (!mbui_avail (rhaystack))
+ /* No match. */
+ return NULL;
+ comparison_count++;
+ if (!mb_equal (mbui_cur (rhaystack), mbui_cur (rneedle)))
+ /* Nothing in this round. */
+ break;
+ }
+ }
+ }
+ }
+ else
+ return (char *) haystack;
+ }
+ else
+#endif
+ {
+ if (*needle != '\0')
+ {
+ /* Minimizing the worst-case complexity:
+ Let n = strlen(haystack), m = strlen(needle).
+ The naïve algorithm is O(n*m) worst-case.
+ The Knuth-Morris-Pratt algorithm is O(n) worst-case but it needs a
+ memory allocation.
+ To achieve linear complexity and yet amortize the cost of the
+ memory allocation, we activate the Knuth-Morris-Pratt algorithm
+ only once the naïve algorithm has already run for some time; more
+ precisely, when
+ - the outer loop count is >= 10,
+ - the average number of comparisons per outer loop is >= 5,
+ - the total number of comparisons is >= m.
+ But we try it only once. If the memory allocation attempt failed,
+ we don't retry it. */
+ bool try_kmp = true;
+ size_t outer_loop_count = 0;
+ size_t comparison_count = 0;
+ size_t last_ccount = 0; /* last comparison count */
+ const char *needle_last_ccount = needle; /* = needle + last_ccount */
+
+ /* Speed up the following searches of needle by caching its first
+ character. */
+ char b = *needle++;
+
+ for (;; haystack++)
+ {
+ if (*haystack == '\0')
+ /* No match. */
+ return NULL;
+
+ /* See whether it's advisable to use an asymptotically faster
+ algorithm. */
+ if (try_kmp
+ && outer_loop_count >= 10
+ && comparison_count >= 5 * outer_loop_count)
+ {
+ /* See if needle + comparison_count now reaches the end of
+ needle. */
+ if (needle_last_ccount != NULL)
+ {
+ needle_last_ccount +=
+ strnlen (needle_last_ccount,
+ comparison_count - last_ccount);
+ if (*needle_last_ccount == '\0')
+ needle_last_ccount = NULL;
+ last_ccount = comparison_count;
+ }
+ if (needle_last_ccount == NULL)
+ {
+ /* Try the Knuth-Morris-Pratt algorithm. */
+ const char *result;
+ bool success =
+ knuth_morris_pratt_unibyte (haystack, needle - 1,
+ &result);
+ if (success)
+ return (char *) result;
+ try_kmp = false;
+ }
+ }
+
+ outer_loop_count++;
+ comparison_count++;
+ if (*haystack == b)
+ /* The first character matches. */
+ {
+ const char *rhaystack = haystack + 1;
+ const char *rneedle = needle;
+
+ for (;; rhaystack++, rneedle++)
+ {
+ if (*rneedle == '\0')
+ /* Found a match. */
+ return (char *) haystack;
+ if (*rhaystack == '\0')
+ /* No match. */
+ return NULL;
+ comparison_count++;
+ if (*rhaystack != *rneedle)
+ /* Nothing in this round. */
+ break;
+ }
+ }
+ }
+ }
+ else
+ return (char *) haystack;
+ }
+}
diff --git a/gnulib/lib/mbswidth.c b/gnulib/lib/mbswidth.c
new file mode 100644
index 0000000..3c54133
--- /dev/null
+++ b/gnulib/lib/mbswidth.c
@@ -0,0 +1,175 @@
+/* Determine the number of screen columns needed for a string.
+ Copyright (C) 2000-2007 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 Bruno Haible <haible@clisp.cons.org>. */
+
+#include <config.h>
+
+/* Specification. */
+#include "mbswidth.h"
+
+/* Get MB_CUR_MAX. */
+#include <stdlib.h>
+
+#include <string.h>
+
+/* Get isprint(). */
+#include <ctype.h>
+
+/* Get mbstate_t, mbrtowc(), mbsinit(), wcwidth(). */
+#include <wchar.h>
+
+/* Get iswcntrl(). */
+#include <wctype.h>
+
+#ifndef mbsinit
+# if !HAVE_MBSINIT
+# define mbsinit(ps) 1
+# endif
+#endif
+
+/* Returns the number of columns needed to represent the multibyte
+ character string pointed to by STRING. If a non-printable character
+ occurs, and MBSW_REJECT_UNPRINTABLE is specified, -1 is returned.
+ With flags = MBSW_REJECT_INVALID | MBSW_REJECT_UNPRINTABLE, this is
+ the multibyte analogue of the wcswidth function.
+ If STRING is not of length < INT_MAX / 2, integer overflow can occur. */
+int
+mbswidth (const char *string, int flags)
+{
+ return mbsnwidth (string, strlen (string), flags);
+}
+
+/* Returns the number of columns needed to represent the multibyte
+ character string pointed to by STRING of length NBYTES. If a
+ non-printable character occurs, and MBSW_REJECT_UNPRINTABLE is
+ specified, -1 is returned.
+ If NBYTES is not < INT_MAX / 2, integer overflow can occur. */
+int
+mbsnwidth (const char *string, size_t nbytes, int flags)
+{
+ const char *p = string;
+ const char *plimit = p + nbytes;
+ int width;
+
+ width = 0;
+#if HAVE_MBRTOWC
+ if (MB_CUR_MAX > 1)
+ {
+ while (p < plimit)
+ switch (*p)
+ {
+ case ' ': case '!': case '"': case '#': case '%':
+ case '&': case '\'': case '(': case ')': case '*':
+ case '+': case ',': case '-': case '.': case '/':
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ case ':': case ';': case '<': case '=': case '>':
+ case '?':
+ case 'A': case 'B': case 'C': case 'D': case 'E':
+ case 'F': case 'G': case 'H': case 'I': case 'J':
+ case 'K': case 'L': case 'M': case 'N': case 'O':
+ case 'P': case 'Q': case 'R': case 'S': case 'T':
+ case 'U': case 'V': case 'W': case 'X': case 'Y':
+ case 'Z':
+ case '[': case '\\': case ']': case '^': case '_':
+ case 'a': case 'b': case 'c': case 'd': case 'e':
+ case 'f': case 'g': case 'h': case 'i': case 'j':
+ case 'k': case 'l': case 'm': case 'n': case 'o':
+ case 'p': case 'q': case 'r': case 's': case 't':
+ case 'u': case 'v': case 'w': case 'x': case 'y':
+ case 'z': case '{': case '|': case '}': case '~':
+ /* These characters are printable ASCII characters. */
+ p++;
+ width++;
+ break;
+ default:
+ /* If we have a multibyte sequence, scan it up to its end. */
+ {
+ mbstate_t mbstate;
+ memset (&mbstate, 0, sizeof mbstate);
+ do
+ {
+ wchar_t wc;
+ size_t bytes;
+ int w;
+
+ bytes = mbrtowc (&wc, p, plimit - p, &mbstate);
+
+ if (bytes == (size_t) -1)
+ /* An invalid multibyte sequence was encountered. */
+ {
+ if (!(flags & MBSW_REJECT_INVALID))
+ {
+ p++;
+ width++;
+ break;
+ }
+ else
+ return -1;
+ }
+
+ if (bytes == (size_t) -2)
+ /* An incomplete multibyte character at the end. */
+ {
+ if (!(flags & MBSW_REJECT_INVALID))
+ {
+ p = plimit;
+ width++;
+ break;
+ }
+ else
+ return -1;
+ }
+
+ if (bytes == 0)
+ /* A null wide character was encountered. */
+ bytes = 1;
+
+ w = wcwidth (wc);
+ if (w >= 0)
+ /* A printable multibyte character. */
+ width += w;
+ else
+ /* An unprintable multibyte character. */
+ if (!(flags & MBSW_REJECT_UNPRINTABLE))
+ width += (iswcntrl (wc) ? 0 : 1);
+ else
+ return -1;
+
+ p += bytes;
+ }
+ while (! mbsinit (&mbstate));
+ }
+ break;
+ }
+ return width;
+ }
+#endif
+
+ while (p < plimit)
+ {
+ unsigned char c = (unsigned char) *p++;
+
+ if (isprint (c))
+ width++;
+ else if (!(flags & MBSW_REJECT_UNPRINTABLE))
+ width += (iscntrl (c) ? 0 : 1);
+ else
+ return -1;
+ }
+ return width;
+}
diff --git a/gnulib/lib/mbswidth.h b/gnulib/lib/mbswidth.h
new file mode 100644
index 0000000..15da406
--- /dev/null
+++ b/gnulib/lib/mbswidth.h
@@ -0,0 +1,60 @@
+/* Determine the number of screen columns needed for a string.
+ Copyright (C) 2000-2004, 2007 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 <stddef.h>
+
+/* Avoid a clash of our mbswidth() with a function of the same name defined
+ in UnixWare 7.1.1 <wchar.h>. We need this #include before the #define
+ below.
+ However, we don't want to #include <wchar.h> on all platforms because
+ - Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+ <wchar.h>.
+ - BSD/OS 4.1 has a bug: <stdio.h> and <time.h> must be included before
+ <wchar.h>. */
+#if HAVE_DECL_MBSWIDTH_IN_WCHAR_H
+# include <wchar.h>
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Optional flags to influence mbswidth/mbsnwidth behavior. */
+
+/* If this bit is set, return -1 upon finding an invalid or incomplete
+ character. Otherwise, assume invalid characters have width 1. */
+#define MBSW_REJECT_INVALID 1
+
+/* If this bit is set, return -1 upon finding a non-printable character.
+ Otherwise, assume unprintable characters have width 0 if they are
+ control characters and 1 otherwise. */
+#define MBSW_REJECT_UNPRINTABLE 2
+
+
+/* Returns the number of screen columns needed for STRING. */
+#define mbswidth gnu_mbswidth /* avoid clash with UnixWare 7.1.1 function */
+extern int mbswidth (const char *string, int flags);
+
+/* Returns the number of screen columns needed for the NBYTES bytes
+ starting at BUF. */
+extern int mbsnwidth (const char *buf, size_t nbytes, int flags);
+
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/gnulib/lib/mbuiter.h b/gnulib/lib/mbuiter.h
new file mode 100644
index 0000000..213e710
--- /dev/null
+++ b/gnulib/lib/mbuiter.h
@@ -0,0 +1,222 @@
+/* Iterating through multibyte strings: macros for multi-byte encodings.
+ Copyright (C) 2001, 2005, 2007 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 Bruno Haible <bruno@clisp.org>. */
+
+/* The macros in this file implement forward iteration through a
+ multi-byte string, without knowing its length a-priori.
+
+ With these macros, an iteration loop that looks like
+
+ char *iter;
+ for (iter = buf; *iter != '\0'; iter++)
+ {
+ do_something (*iter);
+ }
+
+ becomes
+
+ mbui_iterator_t iter;
+ for (mbui_init (iter, buf); mbui_avail (iter); mbui_advance (iter))
+ {
+ do_something (mbui_cur_ptr (iter), mb_len (mbui_cur (iter)));
+ }
+
+ The benefit of these macros over plain use of mbrtowc is:
+ - Handling of invalid multibyte sequences is possible without
+ making the code more complicated, while still preserving the
+ invalid multibyte sequences.
+
+ Compared to mbiter.h, the macros here don't need to know the string's
+ length a-priori. The downside is that at each step, the look-ahead
+ that guards against overrunning the terminating '\0' is more expensive.
+ The mbui_* macros are therefore suitable when there is a high probability
+ that only the first few multibyte characters need to be inspected.
+ Whereas the mbi_* macros are better if usually the iteration runs
+ through the entire string.
+
+ mbui_iterator_t
+ is a type usable for variable declarations.
+
+ mbui_init (iter, startptr)
+ initializes the iterator, starting at startptr.
+
+ mbui_avail (iter)
+ returns true if there are more multibyte chracters available before
+ the end of string is reached. In this case, mbui_cur (iter) is
+ initialized to the next multibyte chracter.
+
+ mbui_advance (iter)
+ advances the iterator by one multibyte character.
+
+ mbui_cur (iter)
+ returns the current multibyte character, of type mbchar_t. All the
+ macros defined in mbchar.h can be used on it.
+
+ mbui_cur_ptr (iter)
+ return a pointer to the beginning of the current multibyte character.
+
+ mbui_reloc (iter, ptrdiff)
+ relocates iterator when the string is moved by ptrdiff bytes.
+
+ mbui_copy (&destiter, &srciter)
+ copies srciter to destiter.
+
+ Here are the function prototypes of the macros.
+
+ extern void mbui_init (mbui_iterator_t iter, const char *startptr);
+ extern bool mbui_avail (mbui_iterator_t iter);
+ extern void mbui_advance (mbui_iterator_t iter);
+ extern mbchar_t mbui_cur (mbui_iterator_t iter);
+ extern const char * mbui_cur_ptr (mbui_iterator_t iter);
+ extern void mbui_reloc (mbui_iterator_t iter, ptrdiff_t ptrdiff);
+ extern void mbui_copy (mbui_iterator_t *new, const mbui_iterator_t *old);
+ */
+
+#ifndef _MBUITER_H
+#define _MBUITER_H 1
+
+#include <assert.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+ <wchar.h>.
+ BSD/OS 4.1 has a bug: <stdio.h> and <time.h> must be included before
+ <wchar.h>. */
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+
+#include "mbchar.h"
+#include "strnlen1.h"
+
+struct mbuiter_multi
+{
+ bool in_shift; /* true if next byte may not be interpreted as ASCII */
+ mbstate_t state; /* if in_shift: current shift state */
+ bool next_done; /* true if mbui_avail has already filled the following */
+ struct mbchar cur; /* the current character:
+ const char *cur.ptr pointer to current character
+ The following are only valid after mbui_avail.
+ size_t cur.bytes number of bytes of current character
+ bool cur.wc_valid true if wc is a valid wide character
+ wchar_t cur.wc if wc_valid: the current character
+ */
+};
+
+static inline void
+mbuiter_multi_next (struct mbuiter_multi *iter)
+{
+ if (iter->next_done)
+ return;
+ if (iter->in_shift)
+ goto with_shift;
+ /* Handle most ASCII characters quickly, without calling mbrtowc(). */
+ if (is_basic (*iter->cur.ptr))
+ {
+ /* These characters are part of the basic character set. ISO C 99
+ guarantees that their wide character code is identical to their
+ char code. */
+ iter->cur.bytes = 1;
+ iter->cur.wc = *iter->cur.ptr;
+ iter->cur.wc_valid = true;
+ }
+ else
+ {
+ assert (mbsinit (&iter->state));
+ iter->in_shift = true;
+ with_shift:
+ iter->cur.bytes = mbrtowc (&iter->cur.wc, iter->cur.ptr,
+ strnlen1 (iter->cur.ptr, MB_CUR_MAX),
+ &iter->state);
+ if (iter->cur.bytes == (size_t) -1)
+ {
+ /* An invalid multibyte sequence was encountered. */
+ iter->cur.bytes = 1;
+ iter->cur.wc_valid = false;
+ /* Whether to set iter->in_shift = false and reset iter->state
+ or not is not very important; the string is bogus anyway. */
+ }
+ else if (iter->cur.bytes == (size_t) -2)
+ {
+ /* An incomplete multibyte character at the end. */
+ iter->cur.bytes = strlen (iter->cur.ptr);
+ iter->cur.wc_valid = false;
+ /* Whether to set iter->in_shift = false and reset iter->state
+ or not is not important; the string end is reached anyway. */
+ }
+ else
+ {
+ if (iter->cur.bytes == 0)
+ {
+ /* A null wide character was encountered. */
+ iter->cur.bytes = 1;
+ assert (*iter->cur.ptr == '\0');
+ assert (iter->cur.wc == 0);
+ }
+ iter->cur.wc_valid = true;
+
+ /* When in the initial state, we can go back treating ASCII
+ characters more quickly. */
+ if (mbsinit (&iter->state))
+ iter->in_shift = false;
+ }
+ }
+ iter->next_done = true;
+}
+
+static inline void
+mbuiter_multi_reloc (struct mbuiter_multi *iter, ptrdiff_t ptrdiff)
+{
+ iter->cur.ptr += ptrdiff;
+}
+
+static inline void
+mbuiter_multi_copy (struct mbuiter_multi *new_iter, const struct mbuiter_multi *old_iter)
+{
+ if ((new_iter->in_shift = old_iter->in_shift))
+ memcpy (&new_iter->state, &old_iter->state, sizeof (mbstate_t));
+ else
+ memset (&new_iter->state, 0, sizeof (mbstate_t));
+ new_iter->next_done = old_iter->next_done;
+ mb_copy (&new_iter->cur, &old_iter->cur);
+}
+
+/* Iteration macros. */
+typedef struct mbuiter_multi mbui_iterator_t;
+#define mbui_init(iter, startptr) \
+ ((iter).cur.ptr = (startptr), \
+ (iter).in_shift = false, memset (&(iter).state, '\0', sizeof (mbstate_t)), \
+ (iter).next_done = false)
+#define mbui_avail(iter) \
+ (mbuiter_multi_next (&(iter)), !mb_isnul ((iter).cur))
+#define mbui_advance(iter) \
+ ((iter).cur.ptr += (iter).cur.bytes, (iter).next_done = false)
+
+/* Access to the current character. */
+#define mbui_cur(iter) (iter).cur
+#define mbui_cur_ptr(iter) (iter).cur.ptr
+
+/* Relocation. */
+#define mbui_reloc(iter, ptrdiff) mbuiter_multi_reloc (&iter, ptrdiff)
+
+/* Copying an iterator. */
+#define mbui_copy mbuiter_multi_copy
+
+#endif /* _MBUITER_H */
diff --git a/gnulib/lib/memchr.c b/gnulib/lib/memchr.c
new file mode 100644
index 0000000..2253d2d
--- /dev/null
+++ b/gnulib/lib/memchr.c
@@ -0,0 +1,172 @@
+/* Copyright (C) 1991, 1993, 1996, 1997, 1999, 2000, 2003, 2004, 2006, 2008
+ 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 <http://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/gnulib/lib/memcmp.c b/gnulib/lib/memcmp.c
new file mode 100644
index 0000000..78735f5
--- /dev/null
+++ b/gnulib/lib/memcmp.c
@@ -0,0 +1,361 @@
+/* Copyright (C) 1991, 1993, 1995, 1997, 1998, 2003, 2006 Free Software
+ Foundation, Inc.
+
+ Contributed by Torbjorn Granlund (tege@sics.se).
+
+ 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 <http://www.gnu.org/licenses/>. */
+
+#ifndef _LIBC
+# include <config.h>
+#endif
+
+#include <string.h>
+
+#undef memcmp
+
+#ifdef _LIBC
+
+# include <memcopy.h>
+# include <endian.h>
+
+# if __BYTE_ORDER == __BIG_ENDIAN
+# define WORDS_BIGENDIAN
+# endif
+
+#else /* Not in the GNU C library. */
+
+# include <sys/types.h>
+
+/* Type to use for aligned memory operations.
+ This should normally be the biggest type supported by a single load
+ and store. Must be an unsigned type. */
+# define op_t unsigned long int
+# define OPSIZ (sizeof(op_t))
+
+/* Threshold value for when to enter the unrolled loops. */
+# define OP_T_THRES 16
+
+/* Type to use for unaligned operations. */
+typedef unsigned char byte;
+
+# ifndef WORDS_BIGENDIAN
+# define MERGE(w0, sh_1, w1, sh_2) (((w0) >> (sh_1)) | ((w1) << (sh_2)))
+# else
+# define MERGE(w0, sh_1, w1, sh_2) (((w0) << (sh_1)) | ((w1) >> (sh_2)))
+# endif
+
+#endif /* In the GNU C library. */
+
+#ifdef WORDS_BIGENDIAN
+# define CMP_LT_OR_GT(a, b) ((a) > (b) ? 1 : -1)
+#else
+# define CMP_LT_OR_GT(a, b) memcmp_bytes ((a), (b))
+#endif
+
+/* BE VERY CAREFUL IF YOU CHANGE THIS CODE! */
+
+/* The strategy of this memcmp is:
+
+ 1. Compare bytes until one of the block pointers is aligned.
+
+ 2. Compare using memcmp_common_alignment or
+ memcmp_not_common_alignment, regarding the alignment of the other
+ block after the initial byte operations. The maximum number of
+ full words (of type op_t) are compared in this way.
+
+ 3. Compare the few remaining bytes. */
+
+#ifndef WORDS_BIGENDIAN
+/* memcmp_bytes -- Compare A and B bytewise in the byte order of the machine.
+ A and B are known to be different.
+ This is needed only on little-endian machines. */
+
+# ifdef __GNUC__
+__inline
+# endif
+static int
+memcmp_bytes (long unsigned int a, long unsigned int b)
+{
+ long int srcp1 = (long int) &a;
+ long int srcp2 = (long int) &b;
+ op_t a0, b0;
+
+ do
+ {
+ a0 = ((byte *) srcp1)[0];
+ b0 = ((byte *) srcp2)[0];
+ srcp1 += 1;
+ srcp2 += 1;
+ }
+ while (a0 == b0);
+ return a0 - b0;
+}
+#endif
+
+/* memcmp_common_alignment -- Compare blocks at SRCP1 and SRCP2 with LEN `op_t'
+ objects (not LEN bytes!). Both SRCP1 and SRCP2 should be aligned for
+ memory operations on `op_t's. */
+#ifdef __GNUC__
+__inline
+#endif
+static int
+memcmp_common_alignment (long int srcp1, long int srcp2, size_t len)
+{
+ op_t a0, a1;
+ op_t b0, b1;
+
+ switch (len % 4)
+ {
+ default: /* Avoid warning about uninitialized local variables. */
+ case 2:
+ a0 = ((op_t *) srcp1)[0];
+ b0 = ((op_t *) srcp2)[0];
+ srcp1 -= 2 * OPSIZ;
+ srcp2 -= 2 * OPSIZ;
+ len += 2;
+ goto do1;
+ case 3:
+ a1 = ((op_t *) srcp1)[0];
+ b1 = ((op_t *) srcp2)[0];
+ srcp1 -= OPSIZ;
+ srcp2 -= OPSIZ;
+ len += 1;
+ goto do2;
+ case 0:
+ if (OP_T_THRES <= 3 * OPSIZ && len == 0)
+ return 0;
+ a0 = ((op_t *) srcp1)[0];
+ b0 = ((op_t *) srcp2)[0];
+ goto do3;
+ case 1:
+ a1 = ((op_t *) srcp1)[0];
+ b1 = ((op_t *) srcp2)[0];
+ srcp1 += OPSIZ;
+ srcp2 += OPSIZ;
+ len -= 1;
+ if (OP_T_THRES <= 3 * OPSIZ && len == 0)
+ goto do0;
+ /* Fall through. */
+ }
+
+ do
+ {
+ a0 = ((op_t *) srcp1)[0];
+ b0 = ((op_t *) srcp2)[0];
+ if (a1 != b1)
+ return CMP_LT_OR_GT (a1, b1);
+
+ do3:
+ a1 = ((op_t *) srcp1)[1];
+ b1 = ((op_t *) srcp2)[1];
+ if (a0 != b0)
+ return CMP_LT_OR_GT (a0, b0);
+
+ do2:
+ a0 = ((op_t *) srcp1)[2];
+ b0 = ((op_t *) srcp2)[2];
+ if (a1 != b1)
+ return CMP_LT_OR_GT (a1, b1);
+
+ do1:
+ a1 = ((op_t *) srcp1)[3];
+ b1 = ((op_t *) srcp2)[3];
+ if (a0 != b0)
+ return CMP_LT_OR_GT (a0, b0);
+
+ srcp1 += 4 * OPSIZ;
+ srcp2 += 4 * OPSIZ;
+ len -= 4;
+ }
+ while (len != 0);
+
+ /* This is the right position for do0. Please don't move
+ it into the loop. */
+ do0:
+ if (a1 != b1)
+ return CMP_LT_OR_GT (a1, b1);
+ return 0;
+}
+
+/* memcmp_not_common_alignment -- Compare blocks at SRCP1 and SRCP2 with LEN
+ `op_t' objects (not LEN bytes!). SRCP2 should be aligned for memory
+ operations on `op_t', but SRCP1 *should be unaligned*. */
+#ifdef __GNUC__
+__inline
+#endif
+static int
+memcmp_not_common_alignment (long int srcp1, long int srcp2, size_t len)
+{
+ op_t a0, a1, a2, a3;
+ op_t b0, b1, b2, b3;
+ op_t x;
+ int shl, shr;
+
+ /* Calculate how to shift a word read at the memory operation
+ aligned srcp1 to make it aligned for comparison. */
+
+ shl = 8 * (srcp1 % OPSIZ);
+ shr = 8 * OPSIZ - shl;
+
+ /* Make SRCP1 aligned by rounding it down to the beginning of the `op_t'
+ it points in the middle of. */
+ srcp1 &= -OPSIZ;
+
+ switch (len % 4)
+ {
+ default: /* Avoid warning about uninitialized local variables. */
+ case 2:
+ a1 = ((op_t *) srcp1)[0];
+ a2 = ((op_t *) srcp1)[1];
+ b2 = ((op_t *) srcp2)[0];
+ srcp1 -= 1 * OPSIZ;
+ srcp2 -= 2 * OPSIZ;
+ len += 2;
+ goto do1;
+ case 3:
+ a0 = ((op_t *) srcp1)[0];
+ a1 = ((op_t *) srcp1)[1];
+ b1 = ((op_t *) srcp2)[0];
+ srcp2 -= 1 * OPSIZ;
+ len += 1;
+ goto do2;
+ case 0:
+ if (OP_T_THRES <= 3 * OPSIZ && len == 0)
+ return 0;
+ a3 = ((op_t *) srcp1)[0];
+ a0 = ((op_t *) srcp1)[1];
+ b0 = ((op_t *) srcp2)[0];
+ srcp1 += 1 * OPSIZ;
+ goto do3;
+ case 1:
+ a2 = ((op_t *) srcp1)[0];
+ a3 = ((op_t *) srcp1)[1];
+ b3 = ((op_t *) srcp2)[0];
+ srcp1 += 2 * OPSIZ;
+ srcp2 += 1 * OPSIZ;
+ len -= 1;
+ if (OP_T_THRES <= 3 * OPSIZ && len == 0)
+ goto do0;
+ /* Fall through. */
+ }
+
+ do
+ {
+ a0 = ((op_t *) srcp1)[0];
+ b0 = ((op_t *) srcp2)[0];
+ x = MERGE(a2, shl, a3, shr);
+ if (x != b3)
+ return CMP_LT_OR_GT (x, b3);
+
+ do3:
+ a1 = ((op_t *) srcp1)[1];
+ b1 = ((op_t *) srcp2)[1];
+ x = MERGE(a3, shl, a0, shr);
+ if (x != b0)
+ return CMP_LT_OR_GT (x, b0);
+
+ do2:
+ a2 = ((op_t *) srcp1)[2];
+ b2 = ((op_t *) srcp2)[2];
+ x = MERGE(a0, shl, a1, shr);
+ if (x != b1)
+ return CMP_LT_OR_GT (x, b1);
+
+ do1:
+ a3 = ((op_t *) srcp1)[3];
+ b3 = ((op_t *) srcp2)[3];
+ x = MERGE(a1, shl, a2, shr);
+ if (x != b2)
+ return CMP_LT_OR_GT (x, b2);
+
+ srcp1 += 4 * OPSIZ;
+ srcp2 += 4 * OPSIZ;
+ len -= 4;
+ }
+ while (len != 0);
+
+ /* This is the right position for do0. Please don't move
+ it into the loop. */
+ do0:
+ x = MERGE(a2, shl, a3, shr);
+ if (x != b3)
+ return CMP_LT_OR_GT (x, b3);
+ return 0;
+}
+
+int
+rpl_memcmp (const void *s1, const void *s2, size_t len)
+{
+ op_t a0;
+ op_t b0;
+ long int srcp1 = (long int) s1;
+ long int srcp2 = (long int) s2;
+ op_t res;
+
+ if (len >= OP_T_THRES)
+ {
+ /* There are at least some bytes to compare. No need to test
+ for LEN == 0 in this alignment loop. */
+ while (srcp2 % OPSIZ != 0)
+ {
+ a0 = ((byte *) srcp1)[0];
+ b0 = ((byte *) srcp2)[0];
+ srcp1 += 1;
+ srcp2 += 1;
+ res = a0 - b0;
+ if (res != 0)
+ return res;
+ len -= 1;
+ }
+
+ /* SRCP2 is now aligned for memory operations on `op_t'.
+ SRCP1 alignment determines if we can do a simple,
+ aligned compare or need to shuffle bits. */
+
+ if (srcp1 % OPSIZ == 0)
+ res = memcmp_common_alignment (srcp1, srcp2, len / OPSIZ);
+ else
+ res = memcmp_not_common_alignment (srcp1, srcp2, len / OPSIZ);
+ if (res != 0)
+ return res;
+
+ /* Number of bytes remaining in the interval [0..OPSIZ-1]. */
+ srcp1 += len & -OPSIZ;
+ srcp2 += len & -OPSIZ;
+ len %= OPSIZ;
+ }
+
+ /* There are just a few bytes to compare. Use byte memory operations. */
+ while (len != 0)
+ {
+ a0 = ((byte *) srcp1)[0];
+ b0 = ((byte *) srcp2)[0];
+ srcp1 += 1;
+ srcp2 += 1;
+ res = a0 - b0;
+ if (res != 0)
+ return res;
+ len -= 1;
+ }
+
+ return 0;
+}
+
+#ifdef weak_alias
+# undef bcmp
+weak_alias (memcmp, bcmp)
+#endif
diff --git a/gnulib/lib/memcpy.c b/gnulib/lib/memcpy.c
new file mode 100644
index 0000000..1da71dd
--- /dev/null
+++ b/gnulib/lib/memcpy.c
@@ -0,0 +1,35 @@
+/* Copyright (C) 1995, 1997, 2000, 2003, 2006 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 Jim Meyering <meyering@na-net.ornl.gov>. */
+
+#include <config.h>
+
+#include <stddef.h>
+
+/* Copy LEN bytes starting at SRCADDR to DESTADDR. Result undefined
+ if the source overlaps with the destination.
+ Return DESTADDR. */
+
+void *
+memcpy (void *destaddr, void const *srcaddr, size_t len)
+{
+ char *dest = destaddr;
+ char const *src = srcaddr;
+
+ while (len-- > 0)
+ *dest++ = *src++;
+ return destaddr;
+}
diff --git a/gnulib/lib/memmem.c b/gnulib/lib/memmem.c
new file mode 100644
index 0000000..fdf8c91
--- /dev/null
+++ b/gnulib/lib/memmem.c
@@ -0,0 +1,76 @@
+/* Copyright (C) 1991,92,93,94,96,97,98,2000,2004,2007,2008 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
+ 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, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+/* This particular implementation was written by Eric Blake, 2008. */
+
+#ifndef _LIBC
+# include <config.h>
+#endif
+
+/* Specification of memmem. */
+#include <string.h>
+
+#ifndef _LIBC
+# define __builtin_expect(expr, val) (expr)
+#endif
+
+#define RETURN_TYPE void *
+#define AVAILABLE(h, h_l, j, n_l) ((j) <= (h_l) - (n_l))
+#include "str-two-way.h"
+
+/* Return the first occurrence of NEEDLE in HAYSTACK. Return HAYSTACK
+ if NEEDLE_LEN is 0, otherwise NULL if NEEDLE is not found in
+ HAYSTACK. */
+void *
+memmem (const void *haystack_start, size_t haystack_len,
+ const void *needle_start, size_t needle_len)
+{
+ /* Abstract memory is considered to be an array of 'unsigned char' values,
+ not an array of 'char' values. See ISO C 99 section 6.2.6.1. */
+ const unsigned char *haystack = (const unsigned char *) haystack_start;
+ const unsigned char *needle = (const unsigned char *) needle_start;
+
+ if (needle_len == 0)
+ /* The first occurrence of the empty string is deemed to occur at
+ the beginning of the string. */
+ return (void *) haystack;
+
+ /* Sanity check, otherwise the loop might search through the whole
+ memory. */
+ if (__builtin_expect (haystack_len < needle_len, 0))
+ return NULL;
+
+ /* Use optimizations in memchr when possible, to reduce the search
+ size of haystack using a linear algorithm with a smaller
+ coefficient. However, avoid memchr for long needles, since we
+ can often achieve sublinear performance. */
+ if (needle_len < LONG_NEEDLE_THRESHOLD)
+ {
+ haystack = memchr (haystack, *needle, haystack_len);
+ if (!haystack || __builtin_expect (needle_len == 1, 0))
+ return (void *) haystack;
+ haystack_len -= haystack - (const unsigned char *) haystack_start;
+ if (haystack_len < needle_len)
+ return NULL;
+ return two_way_short_needle (haystack, haystack_len, needle, needle_len);
+ }
+ else
+ return two_way_long_needle (haystack, haystack_len, needle, needle_len);
+}
+
+#undef LONG_NEEDLE_THRESHOLD
diff --git a/gnulib/lib/memmove.c b/gnulib/lib/memmove.c
new file mode 100644
index 0000000..c5ff8b5
--- /dev/null
+++ b/gnulib/lib/memmove.c
@@ -0,0 +1,26 @@
+/* memmove.c -- copy memory.
+ Copy LENGTH bytes from SOURCE to DEST. Does not null-terminate.
+ In the public domain.
+ By David MacKenzie <djm@gnu.ai.mit.edu>. */
+
+#include <config.h>
+
+#include <stddef.h>
+
+void *
+memmove (void *dest0, void const *source0, size_t length)
+{
+ char *dest = dest0;
+ char const *source = source0;
+ if (source < dest)
+ /* Moving from low mem to hi mem; start at end. */
+ for (source += length, dest += length; length; --length)
+ *--dest = *--source;
+ else if (source != dest)
+ {
+ /* Moving from hi mem to low mem; start at beginning. */
+ for (; length; --length)
+ *dest++ = *source++;
+ }
+ return dest0;
+}
diff --git a/gnulib/lib/mempcpy.c b/gnulib/lib/mempcpy.c
new file mode 100644
index 0000000..33c7a60
--- /dev/null
+++ b/gnulib/lib/mempcpy.c
@@ -0,0 +1,29 @@
+/* Copy memory area and return pointer after last written byte.
+ Copyright (C) 2003, 2007 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, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#include <config.h>
+
+/* Specification. */
+#include <string.h>
+
+/* Copy N bytes of SRC to DEST, return pointer to bytes after the
+ last written byte. */
+void *
+mempcpy (void *dest, const void *src, size_t n)
+{
+ return (char *) memcpy (dest, src, n) + n;
+}
diff --git a/gnulib/lib/mkstemp.c b/gnulib/lib/mkstemp.c
new file mode 100644
index 0000000..1b052f9
--- /dev/null
+++ b/gnulib/lib/mkstemp.c
@@ -0,0 +1,44 @@
+/* Copyright (C) 1998, 1999, 2001, 2005, 2006, 2007 Free Software Foundation, Inc.
+ This file is derived from the one in the GNU C 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 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/>. */
+
+#if !_LIBC
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+
+#if !_LIBC
+# include "tempname.h"
+# define __gen_tempname gen_tempname
+# define __GT_FILE GT_FILE
+#endif
+
+#include <stdio.h>
+
+#ifndef __GT_FILE
+# define __GT_FILE 0
+#endif
+
+/* Generate a unique temporary file name from TEMPLATE.
+ The last six characters of TEMPLATE must be "XXXXXX";
+ they are replaced with a string that makes the file name unique.
+ Then open the file and return a fd. */
+int
+mkstemp (template)
+ char *template;
+{
+ return __gen_tempname (template, __GT_FILE);
+}
diff --git a/gnulib/lib/ref-add.sin b/gnulib/lib/ref-add.sin
new file mode 100644
index 0000000..222d752
--- /dev/null
+++ b/gnulib/lib/ref-add.sin
@@ -0,0 +1,30 @@
+# Add this package to a list of references stored in a text file.
+#
+# Copyright (C) 2000 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, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# 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/gnulib/lib/ref-del.sin b/gnulib/lib/ref-del.sin
new file mode 100644
index 0000000..1bf073e
--- /dev/null
+++ b/gnulib/lib/ref-del.sin
@@ -0,0 +1,25 @@
+# Remove this package from a list of references stored in a text file.
+#
+# Copyright (C) 2000 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, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# 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/gnulib/lib/setenv.c b/gnulib/lib/setenv.c
new file mode 100644
index 0000000..83b52b8
--- /dev/null
+++ b/gnulib/lib/setenv.c
@@ -0,0 +1,330 @@
+/* Copyright (C) 1992,1995-1999,2000-2003,2005-2008 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
+ 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/>. */
+
+#if !_LIBC
+# include <config.h>
+#endif
+#include <alloca.h>
+
+/* Specification. */
+#include <stdlib.h>
+
+#include <errno.h>
+#ifndef __set_errno
+# define __set_errno(ev) ((errno) = (ev))
+#endif
+
+#include <string.h>
+#if _LIBC || HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#if _LIBC || !HAVE_SETENV
+
+#if !_LIBC
+# include "malloca.h"
+#endif
+
+#if !_LIBC
+# define __environ environ
+#endif
+
+#if _LIBC
+/* This lock protects against simultaneous modifications of `environ'. */
+# include <bits/libc-lock.h>
+__libc_lock_define_initialized (static, envlock)
+# define LOCK __libc_lock_lock (envlock)
+# define UNLOCK __libc_lock_unlock (envlock)
+#else
+# define LOCK
+# define UNLOCK
+#endif
+
+/* In the GNU C library we must keep the namespace clean. */
+#ifdef _LIBC
+# define setenv __setenv
+# define clearenv __clearenv
+# define tfind __tfind
+# define tsearch __tsearch
+#endif
+
+/* In the GNU C library implementation we try to be more clever and
+ allow arbitrarily many changes of the environment given that the used
+ values are from a small set. Outside glibc this will eat up all
+ memory after a while. */
+#if defined _LIBC || (defined HAVE_SEARCH_H && defined HAVE_TSEARCH \
+ && defined __GNUC__)
+# define USE_TSEARCH 1
+# include <search.h>
+typedef int (*compar_fn_t) (const void *, const void *);
+
+/* This is a pointer to the root of the search tree with the known
+ values. */
+static void *known_values;
+
+# define KNOWN_VALUE(Str) \
+ ({ \
+ void *value = tfind (Str, &known_values, (compar_fn_t) strcmp); \
+ value != NULL ? *(char **) value : NULL; \
+ })
+# define STORE_VALUE(Str) \
+ tsearch (Str, &known_values, (compar_fn_t) strcmp)
+
+#else
+# undef USE_TSEARCH
+
+# define KNOWN_VALUE(Str) NULL
+# define STORE_VALUE(Str) do { } while (0)
+
+#endif
+
+
+/* If this variable is not a null pointer we allocated the current
+ environment. */
+static char **last_environ;
+
+
+/* This function is used by `setenv' and `putenv'. The difference between
+ the two functions is that for the former must create a new string which
+ is then placed in the environment, while the argument of `putenv'
+ must be used directly. This is all complicated by the fact that we try
+ to reuse values once generated for a `setenv' call since we can never
+ free the strings. */
+int
+__add_to_environ (const char *name, const char *value, const char *combined,
+ int replace)
+{
+ register char **ep;
+ register size_t size;
+ const size_t namelen = strlen (name);
+ const size_t vallen = value != NULL ? strlen (value) + 1 : 0;
+
+ LOCK;
+
+ /* We have to get the pointer now that we have the lock and not earlier
+ since another thread might have created a new environment. */
+ ep = __environ;
+
+ size = 0;
+ if (ep != NULL)
+ {
+ for (; *ep != NULL; ++ep)
+ if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=')
+ break;
+ else
+ ++size;
+ }
+
+ if (ep == NULL || *ep == NULL)
+ {
+ char **new_environ;
+#ifdef USE_TSEARCH
+ char *new_value;
+#endif
+
+ /* We allocated this space; we can extend it. */
+ new_environ =
+ (char **) (last_environ == NULL
+ ? malloc ((size + 2) * sizeof (char *))
+ : realloc (last_environ, (size + 2) * sizeof (char *)));
+ if (new_environ == NULL)
+ {
+ UNLOCK;
+ return -1;
+ }
+
+ /* If the whole entry is given add it. */
+ if (combined != NULL)
+ /* We must not add the string to the search tree since it belongs
+ to the user. */
+ new_environ[size] = (char *) combined;
+ else
+ {
+ /* See whether the value is already known. */
+#ifdef USE_TSEARCH
+# ifdef _LIBC
+ new_value = (char *) alloca (namelen + 1 + vallen);
+ __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1),
+ value, vallen);
+# else
+ new_value = (char *) malloca (namelen + 1 + vallen);
+ if (new_value == NULL)
+ {
+ __set_errno (ENOMEM);
+ UNLOCK;
+ return -1;
+ }
+ memcpy (new_value, name, namelen);
+ new_value[namelen] = '=';
+ memcpy (&new_value[namelen + 1], value, vallen);
+# endif
+
+ new_environ[size] = KNOWN_VALUE (new_value);
+ if (new_environ[size] == NULL)
+#endif
+ {
+ new_environ[size] = (char *) malloc (namelen + 1 + vallen);
+ if (new_environ[size] == NULL)
+ {
+#if defined USE_TSEARCH && !defined _LIBC
+ freea (new_value);
+#endif
+ __set_errno (ENOMEM);
+ UNLOCK;
+ return -1;
+ }
+
+#ifdef USE_TSEARCH
+ memcpy (new_environ[size], new_value, namelen + 1 + vallen);
+#else
+ memcpy (new_environ[size], name, namelen);
+ new_environ[size][namelen] = '=';
+ memcpy (&new_environ[size][namelen + 1], value, vallen);
+#endif
+ /* And save the value now. We cannot do this when we remove
+ the string since then we cannot decide whether it is a
+ user string or not. */
+ STORE_VALUE (new_environ[size]);
+ }
+#if defined USE_TSEARCH && !defined _LIBC
+ freea (new_value);
+#endif
+ }
+
+ if (__environ != last_environ)
+ memcpy ((char *) new_environ, (char *) __environ,
+ size * sizeof (char *));
+
+ new_environ[size + 1] = NULL;
+
+ last_environ = __environ = new_environ;
+ }
+ else if (replace)
+ {
+ char *np;
+
+ /* Use the user string if given. */
+ if (combined != NULL)
+ np = (char *) combined;
+ else
+ {
+#ifdef USE_TSEARCH
+ char *new_value;
+# ifdef _LIBC
+ new_value = alloca (namelen + 1 + vallen);
+ __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1),
+ value, vallen);
+# else
+ new_value = malloca (namelen + 1 + vallen);
+ if (new_value == NULL)
+ {
+ __set_errno (ENOMEM);
+ UNLOCK;
+ return -1;
+ }
+ memcpy (new_value, name, namelen);
+ new_value[namelen] = '=';
+ memcpy (&new_value[namelen + 1], value, vallen);
+# endif
+
+ np = KNOWN_VALUE (new_value);
+ if (np == NULL)
+#endif
+ {
+ np = malloc (namelen + 1 + vallen);
+ if (np == NULL)
+ {
+#if defined USE_TSEARCH && !defined _LIBC
+ freea (new_value);
+#endif
+ __set_errno (ENOMEM);
+ UNLOCK;
+ return -1;
+ }
+
+#ifdef USE_TSEARCH
+ memcpy (np, new_value, namelen + 1 + vallen);
+#else
+ memcpy (np, name, namelen);
+ np[namelen] = '=';
+ memcpy (&np[namelen + 1], value, vallen);
+#endif
+ /* And remember the value. */
+ STORE_VALUE (np);
+ }
+#if defined USE_TSEARCH && !defined _LIBC
+ freea (new_value);
+#endif
+ }
+
+ *ep = np;
+ }
+
+ UNLOCK;
+
+ return 0;
+}
+
+int
+setenv (const char *name, const char *value, int replace)
+{
+ return __add_to_environ (name, value, NULL, replace);
+}
+
+/* The `clearenv' was planned to be added to POSIX.1 but probably
+ never made it. Nevertheless the POSIX.9 standard (POSIX bindings
+ for Fortran 77) requires this function. */
+int
+clearenv (void)
+{
+ LOCK;
+
+ if (__environ == last_environ && __environ != NULL)
+ {
+ /* We allocated this environment so we can free it. */
+ free (__environ);
+ last_environ = NULL;
+ }
+
+ /* Clear the environment pointer removes the whole environment. */
+ __environ = NULL;
+
+ UNLOCK;
+
+ return 0;
+}
+
+#ifdef _LIBC
+static void
+free_mem (void)
+{
+ /* Remove all traces. */
+ clearenv ();
+
+ /* Now remove the search tree. */
+ __tdestroy (known_values, free);
+ known_values = NULL;
+}
+text_set_element (__libc_subfreeres, free_mem);
+
+
+# undef setenv
+# undef clearenv
+weak_alias (__setenv, setenv)
+weak_alias (__clearenv, clearenv)
+#endif
+
+#endif /* _LIBC || !HAVE_SETENV */
diff --git a/gnulib/lib/stdbool.in.h b/gnulib/lib/stdbool.in.h
new file mode 100644
index 0000000..cffa0ab
--- /dev/null
+++ b/gnulib/lib/stdbool.in.h
@@ -0,0 +1,119 @@
+/* Copyright (C) 2001-2003, 2006-2008 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 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, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#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'.
+
+ 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
+
+/* For the sake of symbolic names in gdb, we 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 if we do
+ this, values of type '_Bool' may 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 we add a negative value to the
+ enum; this ensures that '_Bool' promotes to 'int'. */
+#if defined __cplusplus || (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@
+typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool;
+# endif
+# endif
+#endif
+#define bool _Bool
+
+/* The other macros must be usable in preprocessor directives. */
+#define false 0
+#define true 1
+#define __bool_true_false_are_defined 1
+
+#endif /* _GL_STDBOOL_H */
diff --git a/gnulib/lib/stdint.in.h b/gnulib/lib/stdint.in.h
new file mode 100644
index 0000000..67baceb
--- /dev/null
+++ b/gnulib/lib/stdint.in.h
@@ -0,0 +1,522 @@
+/* Copyright (C) 2001-2002, 2004-2007 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, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+/*
+ * ISO C 99 <stdint.h> for platforms that lack it.
+ * <http://www.opengroup.org/susv3xbd/stdint.h.html>
+ */
+
+#ifndef _GL_STDINT_H
+
+/* 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
+
+/* 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
+ /* 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
+ _GL_STDINT_H is defined.
+ The include_next requires a split double-inclusion guard. */
+# @INCLUDE_NEXT@ @NEXT_STDINT_H@
+#endif
+
+#if ! defined _GL_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+#define _GL_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.
+ MacOS 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 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
+
+#if ! defined __cplusplus || defined __STDC_CONSTANT_MACROS
+
+/* Get WCHAR_MIN, WCHAR_MAX. */
+# if ! (defined WCHAR_MIN && defined WCHAR_MAX)
+# include <wchar.h>
+# endif
+
+#endif
+
+#undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+
+/* Minimum and maximum values for a 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)
+
+/* 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
+#define int8_t signed char
+#define uint8_t unsigned char
+
+#undef int16_t
+#undef uint16_t
+#define int16_t short int
+#define uint16_t unsigned short int
+
+#undef int32_t
+#undef uint32_t
+#define int32_t int
+#define uint32_t unsigned int
+
+/* 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
+# define int64_t long int
+# define GL_INT64_T
+#elif defined _MSC_VER
+# undef int64_t
+# define int64_t __int64
+# define GL_INT64_T
+#elif @HAVE_LONG_LONG_INT@
+# undef int64_t
+# define int64_t long long int
+# define GL_INT64_T
+#endif
+
+#if ULONG_MAX >> 31 >> 31 >> 1 == 1
+# undef uint64_t
+# define uint64_t unsigned long int
+# define GL_UINT64_T
+#elif defined _MSC_VER
+# undef uint64_t
+# define uint64_t unsigned __int64
+# define GL_UINT64_T
+#elif @HAVE_UNSIGNED_LONG_LONG_INT@
+# undef uint64_t
+# define uint64_t unsigned long long int
+# define GL_UINT64_T
+#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. Assume that 'long int'
+ is fast enough for all narrower integers. */
+
+#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
+#define int_fast8_t long int
+#define uint_fast8_t unsigned int_fast8_t
+#define int_fast16_t long int
+#define uint_fast16_t unsigned int_fast16_t
+#define int_fast32_t long int
+#define uint_fast32_t unsigned int_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
+#define intptr_t long int
+#define uintptr_t unsigned long int
+
+/* 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. */
+
+#undef intmax_t
+#if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
+# define intmax_t long long int
+#elif defined GL_INT64_T
+# define intmax_t int64_t
+#else
+# define intmax_t long int
+#endif
+
+#undef uintmax_t
+#if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
+# define uintmax_t unsigned long long int
+#elif defined GL_UINT64_T
+# define uintmax_t uint64_t
+#else
+# define uintmax_t unsigned long int
+#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[2 * (sizeof (intmax_t) == sizeof (uintmax_t)) - 1];
+
+/* 7.18.2. Limits of specified-width integer types */
+
+#if ! defined __cplusplus || defined __STDC_LIMIT_MACROS
+
+/* 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
+
+#undef INT64_MIN
+#undef INT64_MAX
+#ifdef GL_INT64_T
+/* 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
+
+#undef UINT64_MAX
+#ifdef GL_UINT64_T
+# 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 LONG_MIN
+#define INT_FAST8_MAX LONG_MAX
+#define UINT_FAST8_MAX ULONG_MAX
+
+#undef INT_FAST16_MIN
+#undef INT_FAST16_MAX
+#undef UINT_FAST16_MAX
+#define INT_FAST16_MIN LONG_MIN
+#define INT_FAST16_MAX LONG_MAX
+#define UINT_FAST16_MAX ULONG_MAX
+
+#undef INT_FAST32_MIN
+#undef INT_FAST32_MAX
+#undef UINT_FAST32_MAX
+#define INT_FAST32_MIN LONG_MIN
+#define INT_FAST32_MAX LONG_MAX
+#define UINT_FAST32_MAX ULONG_MAX
+
+#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 */
+
+#undef INTMAX_MIN
+#undef INTMAX_MAX
+#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
+
+#undef UINTMAX_MAX
+#ifdef UINT64_MAX
+# define UINTMAX_MAX UINT64_MAX
+#else
+# define UINTMAX_MAX UINT32_MAX
+#endif
+
+/* 7.18.3. Limits of other integer types */
+
+/* ptrdiff_t limits */
+#undef PTRDIFF_MIN
+#undef PTRDIFF_MAX
+#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@)
+
+/* 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
+#define SIZE_MAX _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@)
+
+/* wchar_t limits */
+#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@)
+
+#endif /* !defined __cplusplus || defined __STDC_LIMIT_MACROS */
+
+/* 7.18.4. Macros for integer constants */
+
+#if ! defined __cplusplus || defined __STDC_CONSTANT_MACROS
+
+/* 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 */
+
+#undef 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
+
+#undef 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 /* !defined __cplusplus || defined __STDC_CONSTANT_MACROS */
+
+#endif /* _GL_STDINT_H */
+#endif /* !defined _GL_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */
diff --git a/gnulib/lib/stdlib.in.h b/gnulib/lib/stdlib.in.h
new file mode 100644
index 0000000..b0fb12f
--- /dev/null
+++ b/gnulib/lib/stdlib.in.h
@@ -0,0 +1,240 @@
+/* A GNU-like <stdlib.h>.
+
+ Copyright (C) 1995, 2001-2004, 2006-2008 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/>. */
+
+#if defined __need_malloc_and_calloc
+/* Special invocation convention inside glibc header files. */
+
+#@INCLUDE_NEXT@ @NEXT_STDLIB_H@
+
+#else
+/* Normal invocation convention. */
+
+#ifndef _GL_STDLIB_H
+
+/* The include_next requires a split double-inclusion guard. */
+#@INCLUDE_NEXT@ @NEXT_STDLIB_H@
+
+#ifndef _GL_STDLIB_H
+#define _GL_STDLIB_H
+
+
+/* The definition of GL_LINK_WARNING is copied here. */
+
+
+/* Some systems do not define EXIT_*, despite otherwise supporting C89. */
+#ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+#endif
+/* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere
+ with proper operation of xargs. */
+#ifndef EXIT_FAILURE
+# define EXIT_FAILURE 1
+#elif EXIT_FAILURE != 1
+# undef EXIT_FAILURE
+# define EXIT_FAILURE 1
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#if @GNULIB_MALLOC_POSIX@
+# if !@HAVE_MALLOC_POSIX@
+# undef malloc
+# define malloc rpl_malloc
+extern void * malloc (size_t size);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef malloc
+# define malloc(s) \
+ (GL_LINK_WARNING ("malloc is not POSIX compliant everywhere - " \
+ "use gnulib module malloc-posix for portability"), \
+ malloc (s))
+#endif
+
+
+#if @GNULIB_REALLOC_POSIX@
+# if !@HAVE_REALLOC_POSIX@
+# undef realloc
+# define realloc rpl_realloc
+extern void * realloc (void *ptr, size_t size);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef realloc
+# define realloc(p,s) \
+ (GL_LINK_WARNING ("realloc is not POSIX compliant everywhere - " \
+ "use gnulib module realloc-posix for portability"), \
+ realloc (p, s))
+#endif
+
+
+#if @GNULIB_CALLOC_POSIX@
+# if !@HAVE_CALLOC_POSIX@
+# undef calloc
+# define calloc rpl_calloc
+extern void * calloc (size_t nmemb, size_t size);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef calloc
+# define calloc(n,s) \
+ (GL_LINK_WARNING ("calloc is not POSIX compliant everywhere - " \
+ "use gnulib module calloc-posix for portability"), \
+ calloc (n, s))
+#endif
+
+
+#if @GNULIB_GETSUBOPT@
+/* Assuming *OPTIONP is a comma separated list of elements of the form
+ "token" or "token=value", getsubopt parses the first of these elements.
+ If the first element refers to a "token" that is member of the given
+ NULL-terminated array of tokens:
+ - It replaces the comma with a NUL byte, updates *OPTIONP to point past
+ the first option and the comma, sets *VALUEP to the value of the
+ element (or NULL if it doesn't contain an "=" sign),
+ - It returns the index of the "token" in the given array of tokens.
+ Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined.
+ For more details see the POSIX:2001 specification.
+ http://www.opengroup.org/susv3xsh/getsubopt.html */
+# if !@HAVE_GETSUBOPT@
+extern int getsubopt (char **optionp, char *const *tokens, char **valuep);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef getsubopt
+# define getsubopt(o,t,v) \
+ (GL_LINK_WARNING ("getsubopt is unportable - " \
+ "use gnulib module getsubopt for portability"), \
+ getsubopt (o, t, v))
+#endif
+
+
+#if @GNULIB_MKDTEMP@
+# if !@HAVE_MKDTEMP@
+/* Create a unique temporary directory from TEMPLATE.
+ The last six characters of TEMPLATE must be "XXXXXX";
+ they are replaced with a string that makes the directory name unique.
+ Returns TEMPLATE, or a null pointer if it cannot get a unique name.
+ The directory is created mode 700. */
+extern char * mkdtemp (char * /*template*/);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef mkdtemp
+# define mkdtemp(t) \
+ (GL_LINK_WARNING ("mkdtemp is unportable - " \
+ "use gnulib module mkdtemp for portability"), \
+ mkdtemp (t))
+#endif
+
+
+#if @GNULIB_MKSTEMP@
+# if @REPLACE_MKSTEMP@
+/* Create a unique temporary file from TEMPLATE.
+ The last six characters of TEMPLATE must be "XXXXXX";
+ they are replaced with a string that makes the file name unique.
+ The file is then created, ensuring it didn't exist before.
+ The file is created read-write (mask at least 0600 & ~umask), but it may be
+ world-readable and world-writable (mask 0666 & ~umask), depending on the
+ implementation.
+ Returns the open file descriptor if successful, otherwise -1 and errno
+ set. */
+# define mkstemp rpl_mkstemp
+extern int mkstemp (char * /*template*/);
+# else
+/* On MacOS X 10.3, only <unistd.h> declares mkstemp. */
+# include <unistd.h>
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef mkstemp
+# define mkstemp(t) \
+ (GL_LINK_WARNING ("mkstemp is unportable - " \
+ "use gnulib module mkstemp for portability"), \
+ mkstemp (t))
+#endif
+
+
+#if @GNULIB_PUTENV@
+# if @REPLACE_PUTENV@
+# undef putenv
+# define putenv rpl_putenv
+extern int putenv (char *string);
+# endif
+#endif
+
+
+#if @GNULIB_RPMATCH@
+# if !@HAVE_RPMATCH@
+/* Test a user response to a question.
+ Return 1 if it is affirmative, 0 if it is negative, or -1 if not clear. */
+extern int rpmatch (const char *response);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef rpmatch
+# define rpmatch(r) \
+ (GL_LINK_WARNING ("rpmatch is unportable - " \
+ "use gnulib module rpmatch for portability"), \
+ rpmatch (r))
+#endif
+
+
+#if @GNULIB_SETENV@
+# if !@HAVE_SETENV@
+/* Set NAME to VALUE in the environment.
+ If REPLACE is nonzero, overwrite an existing value. */
+extern int setenv (const char *name, const char *value, int replace);
+# endif
+#endif
+
+
+#if @GNULIB_UNSETENV@
+# if @HAVE_UNSETENV@
+# if @VOID_UNSETENV@
+/* On some systems, unsetenv() returns void.
+ This is the case for MacOS X 10.3, FreeBSD 4.8, NetBSD 1.6, OpenBSD 3.4. */
+# define unsetenv(name) ((unsetenv)(name), 0)
+# endif
+# else
+/* Remove the variable NAME from the environment. */
+extern int unsetenv (const char *name);
+# endif
+#endif
+
+
+#if @GNULIB_STRTOD@
+# if @REPLACE_STRTOD@
+# define strtod rpl_strtod
+# endif
+# if !@HAVE_STRTOD@ || @REPLACE_STRTOD@
+ /* Parse a double from STRING, updating ENDP if appropriate. */
+extern double strtod (const char *str, char **endp);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strtod
+# define strtod(s, e) \
+ (GL_LINK_WARNING ("strtod is unportable - " \
+ "use gnulib module strtod for portability"), \
+ strtod (s, e))
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _GL_STDLIB_H */
+#endif /* _GL_STDLIB_H */
+#endif
diff --git a/gnulib/lib/stpcpy.c b/gnulib/lib/stpcpy.c
new file mode 100644
index 0000000..1e70013
--- /dev/null
+++ b/gnulib/lib/stpcpy.c
@@ -0,0 +1,48 @@
+/* stpcpy.c -- copy a string and return pointer to end of new string
+ Copyright (C) 1992, 1995, 1997-1998, 2006 Free Software Foundation, Inc.
+
+ 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 <http://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#include <string.h>
+
+#undef __stpcpy
+#ifdef _LIBC
+# undef stpcpy
+#endif
+
+#ifndef weak_alias
+# define __stpcpy stpcpy
+#endif
+
+/* Copy SRC to DEST, returning the address of the terminating '\0' in DEST. */
+char *
+__stpcpy (char *dest, const char *src)
+{
+ register char *d = dest;
+ register const char *s = src;
+
+ do
+ *d++ = *s;
+ while (*s++ != '\0');
+
+ return d - 1;
+}
+#ifdef weak_alias
+weak_alias (__stpcpy, stpcpy)
+#endif
diff --git a/gnulib/lib/str-kmp.h b/gnulib/lib/str-kmp.h
new file mode 100644
index 0000000..478d8bb
--- /dev/null
+++ b/gnulib/lib/str-kmp.h
@@ -0,0 +1,150 @@
+/* Substring search in a NUL terminated string of 'char' elements,
+ using the Knuth-Morris-Pratt algorithm.
+ Copyright (C) 2005-2008 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2005.
+
+ 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, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+/* Before including this file, you need to define:
+ CANON_ELEMENT(c) A macro that canonicalizes an element right after
+ it has been fetched from one of the two strings.
+ The argument is an 'unsigned char'; the result
+ must be an 'unsigned char' as well. */
+
+/* Knuth-Morris-Pratt algorithm.
+ See http://en.wikipedia.org/wiki/Knuth-Morris-Pratt_algorithm
+ Return a boolean indicating success:
+ Return true and set *RESULTP if the search was completed.
+ Return false if it was aborted because not enough memory was available. */
+static bool
+knuth_morris_pratt_unibyte (const char *haystack, const char *needle,
+ const char **resultp)
+{
+ size_t m = strlen (needle);
+
+ /* Allocate the table. */
+ size_t *table = (size_t *) nmalloca (m, sizeof (size_t));
+ if (table == NULL)
+ return false;
+ /* Fill the table.
+ For 0 < i < m:
+ 0 < table[i] <= i is defined such that
+ forall 0 < x < table[i]: needle[x..i-1] != needle[0..i-1-x],
+ and table[i] is as large as possible with this property.
+ This implies:
+ 1) For 0 < i < m:
+ If table[i] < i,
+ needle[table[i]..i-1] = needle[0..i-1-table[i]].
+ 2) For 0 < i < m:
+ rhaystack[0..i-1] == needle[0..i-1]
+ and exists h, i <= h < m: rhaystack[h] != needle[h]
+ implies
+ forall 0 <= x < table[i]: rhaystack[x..x+m-1] != needle[0..m-1].
+ table[0] remains uninitialized. */
+ {
+ size_t i, j;
+
+ /* i = 1: Nothing to verify for x = 0. */
+ table[1] = 1;
+ j = 0;
+
+ for (i = 2; i < m; i++)
+ {
+ /* Here: j = i-1 - table[i-1].
+ The inequality needle[x..i-1] != needle[0..i-1-x] is known to hold
+ for x < table[i-1], by induction.
+ Furthermore, if j>0: needle[i-1-j..i-2] = needle[0..j-1]. */
+ unsigned char b = CANON_ELEMENT ((unsigned char) needle[i - 1]);
+
+ for (;;)
+ {
+ /* Invariants: The inequality needle[x..i-1] != needle[0..i-1-x]
+ is known to hold for x < i-1-j.
+ Furthermore, if j>0: needle[i-1-j..i-2] = needle[0..j-1]. */
+ if (b == CANON_ELEMENT ((unsigned char) needle[j]))
+ {
+ /* Set table[i] := i-1-j. */
+ table[i] = i - ++j;
+ break;
+ }
+ /* The inequality needle[x..i-1] != needle[0..i-1-x] also holds
+ for x = i-1-j, because
+ needle[i-1] != needle[j] = needle[i-1-x]. */
+ if (j == 0)
+ {
+ /* The inequality holds for all possible x. */
+ table[i] = i;
+ break;
+ }
+ /* The inequality needle[x..i-1] != needle[0..i-1-x] also holds
+ for i-1-j < x < i-1-j+table[j], because for these x:
+ needle[x..i-2]
+ = needle[x-(i-1-j)..j-1]
+ != needle[0..j-1-(x-(i-1-j))] (by definition of table[j])
+ = needle[0..i-2-x],
+ hence needle[x..i-1] != needle[0..i-1-x].
+ Furthermore
+ needle[i-1-j+table[j]..i-2]
+ = needle[table[j]..j-1]
+ = needle[0..j-1-table[j]] (by definition of table[j]). */
+ j = j - table[j];
+ }
+ /* Here: j = i - table[i]. */
+ }
+ }
+
+ /* Search, using the table to accelerate the processing. */
+ {
+ size_t j;
+ const char *rhaystack;
+ const char *phaystack;
+
+ *resultp = NULL;
+ j = 0;
+ rhaystack = haystack;
+ phaystack = haystack;
+ /* Invariant: phaystack = rhaystack + j. */
+ while (*phaystack != '\0')
+ if (CANON_ELEMENT ((unsigned char) needle[j])
+ == CANON_ELEMENT ((unsigned char) *phaystack))
+ {
+ j++;
+ phaystack++;
+ if (j == m)
+ {
+ /* The entire needle has been found. */
+ *resultp = rhaystack;
+ break;
+ }
+ }
+ else if (j > 0)
+ {
+ /* Found a match of needle[0..j-1], mismatch at needle[j]. */
+ rhaystack += table[j];
+ j -= table[j];
+ }
+ else
+ {
+ /* Found a mismatch at needle[0] already. */
+ rhaystack++;
+ phaystack++;
+ }
+ }
+
+ freea (table);
+ return true;
+}
+
+#undef CANON_ELEMENT
diff --git a/gnulib/lib/str-two-way.h b/gnulib/lib/str-two-way.h
new file mode 100644
index 0000000..1999380
--- /dev/null
+++ b/gnulib/lib/str-two-way.h
@@ -0,0 +1,429 @@
+/* Byte-wise substring search, using the Two-Way algorithm.
+ Copyright (C) 2008 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Written by Eric Blake <ebb9@byu.net>, 2008.
+
+ 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, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+/* Before including this file, you need to include <config.h> and
+ <string.h>, and define:
+ RESULT_TYPE A macro that expands to the return type.
+ AVAILABLE(h, h_l, j, n_l)
+ A macro that returns nonzero if there are
+ at least N_L bytes left starting at H[J].
+ H is 'unsigned char *', H_L, J, and N_L
+ are 'size_t'; H_L is an lvalue. For
+ NUL-terminated searches, H_L can be
+ modified each iteration to avoid having
+ to compute the end of H up front.
+
+ For case-insensitivity, you may optionally define:
+ CMP_FUNC(p1, p2, l) A macro that returns 0 iff the first L
+ characters of P1 and P2 are equal.
+ CANON_ELEMENT(c) A macro that canonicalizes an element right after
+ it has been fetched from one of the two strings.
+ The argument is an 'unsigned char'; the result
+ must be an 'unsigned char' as well.
+
+ This file undefines the macros documented above, and defines
+ LONG_NEEDLE_THRESHOLD.
+*/
+
+#include <limits.h>
+#include <stdint.h>
+
+/* We use the Two-Way string matching algorithm, which guarantees
+ linear complexity with constant space. Additionally, for long
+ needles, we also use a bad character shift table similar to the
+ Boyer-Moore algorithm to achieve improved (potentially sub-linear)
+ performance.
+
+ See http://www-igm.univ-mlv.fr/~lecroq/string/node26.html#SECTION00260
+ and http://en.wikipedia.org/wiki/Boyer-Moore_string_search_algorithm
+*/
+
+/* Point at which computing a bad-byte shift table is likely to be
+ worthwhile. Small needles should not compute a table, since it
+ adds (1 << CHAR_BIT) + NEEDLE_LEN computations of preparation for a
+ speedup no greater than a factor of NEEDLE_LEN. The larger the
+ needle, the better the potential performance gain. On the other
+ hand, on non-POSIX systems with CHAR_BIT larger than eight, the
+ memory required for the table is prohibitive. */
+#if CHAR_BIT < 10
+# define LONG_NEEDLE_THRESHOLD 32U
+#else
+# define LONG_NEEDLE_THRESHOLD SIZE_MAX
+#endif
+
+#ifndef MAX
+# define MAX(a, b) ((a < b) ? (b) : (a))
+#endif
+
+#ifndef CANON_ELEMENT
+# define CANON_ELEMENT(c) c
+#endif
+#ifndef CMP_FUNC
+# define CMP_FUNC memcmp
+#endif
+
+/* Perform a critical factorization of NEEDLE, of length NEEDLE_LEN.
+ Return the index of the first byte in the right half, and set
+ *PERIOD to the global period of the right half.
+
+ The global period of a string is the smallest index (possibly its
+ length) at which all remaining bytes in the string are repetitions
+ of the prefix (the last repetition may be a subset of the prefix).
+
+ When NEEDLE is factored into two halves, a local period is the
+ length of the smallest word that shares a suffix with the left half
+ and shares a prefix with the right half. All factorizations of a
+ non-empty NEEDLE have a local period of at least 1 and no greater
+ than NEEDLE_LEN.
+
+ A critical factorization has the property that the local period
+ equals the global period. All strings have at least one critical
+ factorization with the left half smaller than the global period.
+
+ Given an ordered alphabet, a critical factorization can be computed
+ in linear time, with 2 * NEEDLE_LEN comparisons, by computing the
+ larger of two ordered maximal suffixes. The ordered maximal
+ suffixes are determined by lexicographic comparison of
+ periodicity. */
+static size_t
+critical_factorization (const unsigned char *needle, size_t needle_len,
+ size_t *period)
+{
+ /* Index of last byte of left half, or SIZE_MAX. */
+ size_t max_suffix, max_suffix_rev;
+ size_t j; /* Index into NEEDLE for current candidate suffix. */
+ size_t k; /* Offset into current period. */
+ size_t p; /* Intermediate period. */
+ unsigned char a, b; /* Current comparison bytes. */
+
+ /* Invariants:
+ 0 <= j < NEEDLE_LEN - 1
+ -1 <= max_suffix{,_rev} < j (treating SIZE_MAX as if it were signed)
+ min(max_suffix, max_suffix_rev) < global period of NEEDLE
+ 1 <= p <= global period of NEEDLE
+ p == global period of the substring NEEDLE[max_suffix{,_rev}+1...j]
+ 1 <= k <= p
+ */
+
+ /* Perform lexicographic search. */
+ max_suffix = SIZE_MAX;
+ j = 0;
+ k = p = 1;
+ while (j + k < needle_len)
+ {
+ a = CANON_ELEMENT (needle[j + k]);
+ b = CANON_ELEMENT (needle[max_suffix + k]);
+ if (a < b)
+ {
+ /* Suffix is smaller, period is entire prefix so far. */
+ j += k;
+ k = 1;
+ p = j - max_suffix;
+ }
+ else if (a == b)
+ {
+ /* Advance through repetition of the current period. */
+ if (k != p)
+ ++k;
+ else
+ {
+ j += p;
+ k = 1;
+ }
+ }
+ else /* b < a */
+ {
+ /* Suffix is larger, start over from current location. */
+ max_suffix = j++;
+ k = p = 1;
+ }
+ }
+ *period = p;
+
+ /* Perform reverse lexicographic search. */
+ max_suffix_rev = SIZE_MAX;
+ j = 0;
+ k = p = 1;
+ while (j + k < needle_len)
+ {
+ a = CANON_ELEMENT (needle[j + k]);
+ b = CANON_ELEMENT (needle[max_suffix_rev + k]);
+ if (b < a)
+ {
+ /* Suffix is smaller, period is entire prefix so far. */
+ j += k;
+ k = 1;
+ p = j - max_suffix_rev;
+ }
+ else if (a == b)
+ {
+ /* Advance through repetition of the current period. */
+ if (k != p)
+ ++k;
+ else
+ {
+ j += p;
+ k = 1;
+ }
+ }
+ else /* a < b */
+ {
+ /* Suffix is larger, start over from current location. */
+ max_suffix_rev = j++;
+ k = p = 1;
+ }
+ }
+
+ /* Choose the longer suffix. Return the first byte of the right
+ half, rather than the last byte of the left half. */
+ if (max_suffix_rev + 1 < max_suffix + 1)
+ return max_suffix + 1;
+ *period = p;
+ return max_suffix_rev + 1;
+}
+
+/* Return the first location of non-empty NEEDLE within HAYSTACK, or
+ NULL. HAYSTACK_LEN is the minimum known length of HAYSTACK. This
+ method is optimized for NEEDLE_LEN < LONG_NEEDLE_THRESHOLD.
+ Performance is guaranteed to be linear, with an initialization cost
+ of 2 * NEEDLE_LEN comparisons.
+
+ If AVAILABLE does not modify HAYSTACK_LEN (as in memmem), then at
+ most 2 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching.
+ If AVAILABLE modifies HAYSTACK_LEN (as in strstr), then at most 3 *
+ HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching. */
+static RETURN_TYPE
+two_way_short_needle (const unsigned char *haystack, size_t haystack_len,
+ const unsigned char *needle, size_t needle_len)
+{
+ size_t i; /* Index into current byte of NEEDLE. */
+ size_t j; /* Index into current window of HAYSTACK. */
+ size_t period; /* The period of the right half of needle. */
+ size_t suffix; /* The index of the right half of needle. */
+
+ /* Factor the needle into two halves, such that the left half is
+ smaller than the global period, and the right half is
+ periodic (with a period as large as NEEDLE_LEN - suffix). */
+ suffix = critical_factorization (needle, needle_len, &period);
+
+ /* Perform the search. Each iteration compares the right half
+ first. */
+ if (CMP_FUNC (needle, needle + period, suffix) == 0)
+ {
+ /* Entire needle is periodic; a mismatch can only advance by the
+ period, so use memory to avoid rescanning known occurrences
+ of the period. */
+ size_t memory = 0;
+ j = 0;
+ while (AVAILABLE (haystack, haystack_len, j, needle_len))
+ {
+ /* Scan for matches in right half. */
+ i = MAX (suffix, memory);
+ while (i < needle_len && (CANON_ELEMENT (needle[i])
+ == CANON_ELEMENT (haystack[i + j])))
+ ++i;
+ if (needle_len <= i)
+ {
+ /* Scan for matches in left half. */
+ i = suffix - 1;
+ while (memory < i + 1 && (CANON_ELEMENT (needle[i])
+ == CANON_ELEMENT (haystack[i + j])))
+ --i;
+ if (i + 1 < memory + 1)
+ return (RETURN_TYPE) (haystack + j);
+ /* No match, so remember how many repetitions of period
+ on the right half were scanned. */
+ j += period;
+ memory = needle_len - period;
+ }
+ else
+ {
+ j += i - suffix + 1;
+ memory = 0;
+ }
+ }
+ }
+ else
+ {
+ /* The two halves of needle are distinct; no extra memory is
+ required, and any mismatch results in a maximal shift. */
+ period = MAX (suffix, needle_len - suffix) + 1;
+ j = 0;
+ while (AVAILABLE (haystack, haystack_len, j, needle_len))
+ {
+ /* Scan for matches in right half. */
+ i = suffix;
+ while (i < needle_len && (CANON_ELEMENT (needle[i])
+ == CANON_ELEMENT (haystack[i + j])))
+ ++i;
+ if (needle_len <= i)
+ {
+ /* Scan for matches in left half. */
+ i = suffix - 1;
+ while (i != SIZE_MAX && (CANON_ELEMENT (needle[i])
+ == CANON_ELEMENT (haystack[i + j])))
+ --i;
+ if (i == SIZE_MAX)
+ return (RETURN_TYPE) (haystack + j);
+ j += period;
+ }
+ else
+ j += i - suffix + 1;
+ }
+ }
+ return NULL;
+}
+
+/* Return the first location of non-empty NEEDLE within HAYSTACK, or
+ NULL. HAYSTACK_LEN is the minimum known length of HAYSTACK. This
+ method is optimized for LONG_NEEDLE_THRESHOLD <= NEEDLE_LEN.
+ Performance is guaranteed to be linear, with an initialization cost
+ of 3 * NEEDLE_LEN + (1 << CHAR_BIT) operations.
+
+ If AVAILABLE does not modify HAYSTACK_LEN (as in memmem), then at
+ most 2 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching,
+ and sublinear performance O(HAYSTACK_LEN / NEEDLE_LEN) is possible.
+ If AVAILABLE modifies HAYSTACK_LEN (as in strstr), then at most 3 *
+ HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching, and
+ sublinear performance is not possible. */
+static RETURN_TYPE
+two_way_long_needle (const unsigned char *haystack, size_t haystack_len,
+ const unsigned char *needle, size_t needle_len)
+{
+ size_t i; /* Index into current byte of NEEDLE. */
+ size_t j; /* Index into current window of HAYSTACK. */
+ size_t period; /* The period of the right half of needle. */
+ size_t suffix; /* The index of the right half of needle. */
+ size_t shift_table[1U << CHAR_BIT]; /* See below. */
+
+ /* Factor the needle into two halves, such that the left half is
+ smaller than the global period, and the right half is
+ periodic (with a period as large as NEEDLE_LEN - suffix). */
+ suffix = critical_factorization (needle, needle_len, &period);
+
+ /* Populate shift_table. For each possible byte value c,
+ shift_table[c] is the distance from the last occurrence of c to
+ the end of NEEDLE, or NEEDLE_LEN if c is absent from the NEEDLE.
+ shift_table[NEEDLE[NEEDLE_LEN - 1]] contains the only 0. */
+ for (i = 0; i < 1U << CHAR_BIT; i++)
+ shift_table[i] = needle_len;
+ for (i = 0; i < needle_len; i++)
+ shift_table[CANON_ELEMENT (needle[i])] = needle_len - i - 1;
+
+ /* Perform the search. Each iteration compares the right half
+ first. */
+ if (CMP_FUNC (needle, needle + period, suffix) == 0)
+ {
+ /* Entire needle is periodic; a mismatch can only advance by the
+ period, so use memory to avoid rescanning known occurrences
+ of the period. */
+ size_t memory = 0;
+ size_t shift;
+ j = 0;
+ while (AVAILABLE (haystack, haystack_len, j, needle_len))
+ {
+ /* Check the last byte first; if it does not match, then
+ shift to the next possible match location. */
+ shift = shift_table[CANON_ELEMENT (haystack[j + needle_len - 1])];
+ if (0 < shift)
+ {
+ if (memory && shift < period)
+ {
+ /* Since needle is periodic, but the last period has
+ a byte out of place, there can be no match until
+ after the mismatch. */
+ shift = needle_len - period;
+ memory = 0;
+ }
+ j += shift;
+ continue;
+ }
+ /* Scan for matches in right half. The last byte has
+ already been matched, by virtue of the shift table. */
+ i = MAX (suffix, memory);
+ while (i < needle_len - 1 && (CANON_ELEMENT (needle[i])
+ == CANON_ELEMENT (haystack[i + j])))
+ ++i;
+ if (needle_len - 1 <= i)
+ {
+ /* Scan for matches in left half. */
+ i = suffix - 1;
+ while (memory < i + 1 && (CANON_ELEMENT (needle[i])
+ == CANON_ELEMENT (haystack[i + j])))
+ --i;
+ if (i + 1 < memory + 1)
+ return (RETURN_TYPE) (haystack + j);
+ /* No match, so remember how many repetitions of period
+ on the right half were scanned. */
+ j += period;
+ memory = needle_len - period;
+ }
+ else
+ {
+ j += i - suffix + 1;
+ memory = 0;
+ }
+ }
+ }
+ else
+ {
+ /* The two halves of needle are distinct; no extra memory is
+ required, and any mismatch results in a maximal shift. */
+ size_t shift;
+ period = MAX (suffix, needle_len - suffix) + 1;
+ j = 0;
+ while (AVAILABLE (haystack, haystack_len, j, needle_len))
+ {
+ /* Check the last byte first; if it does not match, then
+ shift to the next possible match location. */
+ shift = shift_table[CANON_ELEMENT (haystack[j + needle_len - 1])];
+ if (0 < shift)
+ {
+ j += shift;
+ continue;
+ }
+ /* Scan for matches in right half. The last byte has
+ already been matched, by virtue of the shift table. */
+ i = suffix;
+ while (i < needle_len - 1 && (CANON_ELEMENT (needle[i])
+ == CANON_ELEMENT (haystack[i + j])))
+ ++i;
+ if (needle_len - 1 <= i)
+ {
+ /* Scan for matches in left half. */
+ i = suffix - 1;
+ while (i != SIZE_MAX && (CANON_ELEMENT (needle[i])
+ == CANON_ELEMENT (haystack[i + j])))
+ --i;
+ if (i == SIZE_MAX)
+ return (RETURN_TYPE) (haystack + j);
+ j += period;
+ }
+ else
+ j += i - suffix + 1;
+ }
+ }
+ return NULL;
+}
+
+#undef AVAILABLE
+#undef CANON_ELEMENT
+#undef CMP_FUNC
+#undef MAX
+#undef RETURN_TYPE
diff --git a/gnulib/lib/strdup.c b/gnulib/lib/strdup.c
new file mode 100644
index 0000000..bebe5c8
--- /dev/null
+++ b/gnulib/lib/strdup.c
@@ -0,0 +1,55 @@
+/* Copyright (C) 1991, 1996, 1997, 1998, 2002, 2003, 2004, 2006, 2007 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
+ 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, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#ifndef _LIBC
+# include <config.h>
+#endif
+
+/* Get specification. */
+#include <string.h>
+
+#include <stdlib.h>
+
+#undef __strdup
+#ifdef _LIBC
+# undef strdup
+#endif
+
+#ifndef weak_alias
+# define __strdup strdup
+#endif
+
+/* Duplicate S, returning an identical malloc'd string. */
+char *
+__strdup (const char *s)
+{
+ size_t len = strlen (s) + 1;
+ void *new = malloc (len);
+
+ if (new == NULL)
+ return NULL;
+
+ return (char *) memcpy (new, s, len);
+}
+#ifdef libc_hidden_def
+libc_hidden_def (__strdup)
+#endif
+#ifdef weak_alias
+weak_alias (__strdup, strdup)
+#endif
diff --git a/gnulib/lib/streq.h b/gnulib/lib/streq.h
new file mode 100644
index 0000000..80df916
--- /dev/null
+++ b/gnulib/lib/streq.h
@@ -0,0 +1,176 @@
+/* Optimized string comparison.
+ Copyright (C) 2001-2002, 2007 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
+ Lesser General Public License for more details.
+
+ 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>. */
+
+#ifndef _GL_STREQ_H
+#define _GL_STREQ_H
+
+#include <string.h>
+
+/* STREQ allows to optimize string comparison with a small literal string.
+ STREQ (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(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(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
+ (strcmp (s1, s2) == 0)
+
+#endif
+
+#endif /* _GL_STREQ_H */
diff --git a/gnulib/lib/strerror.c b/gnulib/lib/strerror.c
new file mode 100644
index 0000000..9fe437d
--- /dev/null
+++ b/gnulib/lib/strerror.c
@@ -0,0 +1,49 @@
+/* strerror.c --- POSIX compatible system error routine
+
+ Copyright (C) 2007 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>
+
+#include <string.h>
+
+#if REPLACE_STRERROR
+
+# include <stdio.h>
+
+# include "intprops.h"
+
+# undef strerror
+# if ! HAVE_DECL_STRERROR
+# define strerror(n) NULL
+# endif
+
+char *
+rpl_strerror (int n)
+{
+ char *result = strerror (n);
+
+ if (result == NULL || result[0] == '\0')
+ {
+ static char const fmt[] = "Unknown error (%d)";
+ static char mesg[sizeof fmt + INT_STRLEN_BOUND (n)];
+ sprintf (mesg, fmt, n);
+ return mesg;
+ }
+
+ return result;
+}
+
+#endif
diff --git a/gnulib/lib/string.in.h b/gnulib/lib/string.in.h
new file mode 100644
index 0000000..41e765c
--- /dev/null
+++ b/gnulib/lib/string.in.h
@@ -0,0 +1,585 @@
+/* A GNU-like <string.h>.
+
+ Copyright (C) 1995-1996, 2001-2008 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, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#ifndef _GL_STRING_H
+
+/* The include_next requires a split double-inclusion guard. */
+#@INCLUDE_NEXT@ @NEXT_STRING_H@
+
+#ifndef _GL_STRING_H
+#define _GL_STRING_H
+
+
+#ifndef __attribute__
+/* This feature is available in gcc versions 2.5 and later. */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
+# define __attribute__(Spec) /* empty */
+# endif
+/* The attribute __pure__ was added in gcc 2.96. */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 96)
+# define __pure__ /* empty */
+# endif
+#endif
+
+
+/* The definition of GL_LINK_WARNING is copied here. */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Return the first occurrence of NEEDLE in HAYSTACK. */
+#if @GNULIB_MEMMEM@
+# if @REPLACE_MEMMEM@
+# define memmem rpl_memmem
+# endif
+# if ! @HAVE_DECL_MEMMEM@ || @REPLACE_MEMMEM@
+extern void *memmem (void const *__haystack, size_t __haystack_len,
+ void const *__needle, size_t __needle_len)
+ __attribute__ ((__pure__));
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef memmem
+# define memmem(a,al,b,bl) \
+ (GL_LINK_WARNING ("memmem is unportable and often quadratic - " \
+ "use gnulib module memmem-simple for portability, " \
+ "and module memmem for speed" ), \
+ memmem (a, al, b, bl))
+#endif
+
+/* Copy N bytes of SRC to DEST, return pointer to bytes after the
+ last written byte. */
+#if @GNULIB_MEMPCPY@
+# if ! @HAVE_MEMPCPY@
+extern void *mempcpy (void *restrict __dest, void const *restrict __src,
+ size_t __n);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef mempcpy
+# define mempcpy(a,b,n) \
+ (GL_LINK_WARNING ("mempcpy is unportable - " \
+ "use gnulib module mempcpy for portability"), \
+ mempcpy (a, b, n))
+#endif
+
+/* Search backwards through a block for a byte (specified as an int). */
+#if @GNULIB_MEMRCHR@
+# if ! @HAVE_DECL_MEMRCHR@
+extern void *memrchr (void const *, int, size_t)
+ __attribute__ ((__pure__));
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef memrchr
+# define memrchr(a,b,c) \
+ (GL_LINK_WARNING ("memrchr is unportable - " \
+ "use gnulib module memrchr for portability"), \
+ memrchr (a, b, c))
+#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@
+extern void *rawmemchr (void const *__s, int __c_in)
+ __attribute__ ((__pure__));
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef rawmemchr
+# define rawmemchr(a,b) \
+ (GL_LINK_WARNING ("rawmemchr is unportable - " \
+ "use gnulib module rawmemchr for portability"), \
+ rawmemchr (a, b))
+#endif
+
+/* Copy SRC to DST, returning the address of the terminating '\0' in DST. */
+#if @GNULIB_STPCPY@
+# if ! @HAVE_STPCPY@
+extern char *stpcpy (char *restrict __dst, char const *restrict __src);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef stpcpy
+# define stpcpy(a,b) \
+ (GL_LINK_WARNING ("stpcpy is unportable - " \
+ "use gnulib module stpcpy for portability"), \
+ stpcpy (a, b))
+#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 ! @HAVE_STPNCPY@
+# define stpncpy gnu_stpncpy
+extern char *stpncpy (char *restrict __dst, char const *restrict __src,
+ size_t __n);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef stpncpy
+# define stpncpy(a,b,n) \
+ (GL_LINK_WARNING ("stpncpy is unportable - " \
+ "use gnulib module stpncpy for portability"), \
+ stpncpy (a, b, n))
+#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
+# define strchr(s,c) \
+ (GL_LINK_WARNING ("strchr cannot work correctly on character strings " \
+ "in some multibyte locales - " \
+ "use mbschr if you care about internationalization"), \
+ strchr (s, c))
+#endif
+
+/* Find the first occurrence of C in S or the final NUL byte. */
+#if @GNULIB_STRCHRNUL@
+# if ! @HAVE_STRCHRNUL@
+extern char *strchrnul (char const *__s, int __c_in)
+ __attribute__ ((__pure__));
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strchrnul
+# define strchrnul(a,b) \
+ (GL_LINK_WARNING ("strchrnul is unportable - " \
+ "use gnulib module strchrnul for portability"), \
+ strchrnul (a, b))
+#endif
+
+/* Duplicate S, returning an identical malloc'd string. */
+#if @GNULIB_STRDUP@
+# if ! @HAVE_DECL_STRDUP@ && ! defined strdup
+extern char *strdup (char const *__s);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strdup
+# define strdup(a) \
+ (GL_LINK_WARNING ("strdup is unportable - " \
+ "use gnulib module strdup for portability"), \
+ strdup (a))
+#endif
+
+/* Return a newly allocated copy of at most N bytes of STRING. */
+#if @GNULIB_STRNDUP@
+# if ! @HAVE_STRNDUP@
+# undef strndup
+# define strndup rpl_strndup
+# endif
+# if ! @HAVE_STRNDUP@ || ! @HAVE_DECL_STRNDUP@
+extern char *strndup (char const *__string, size_t __n);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strndup
+# define strndup(a,n) \
+ (GL_LINK_WARNING ("strndup is unportable - " \
+ "use gnulib module strndup for portability"), \
+ strndup (a, n))
+#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 ! @HAVE_DECL_STRNLEN@
+extern size_t strnlen (char const *__string, size_t __maxlen)
+ __attribute__ ((__pure__));
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strnlen
+# define strnlen(a,n) \
+ (GL_LINK_WARNING ("strnlen is unportable - " \
+ "use gnulib module strnlen for portability"), \
+ strnlen (a, n))
+#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
+# define strcspn(s,a) \
+ (GL_LINK_WARNING ("strcspn cannot work correctly on character strings " \
+ "in multibyte locales - " \
+ "use mbscspn if you care about internationalization"), \
+ strcspn (s, a))
+#endif
+
+/* Find the first occurrence in S of any character in ACCEPT. */
+#if @GNULIB_STRPBRK@
+# if ! @HAVE_STRPBRK@
+extern char *strpbrk (char const *__s, char const *__accept)
+ __attribute__ ((__pure__));
+# 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
+# define strpbrk(s,a) \
+ (GL_LINK_WARNING ("strpbrk cannot work correctly on character strings " \
+ "in multibyte locales - " \
+ "use mbspbrk if you care about internationalization"), \
+ strpbrk (s, a))
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strpbrk
+# define strpbrk(s,a) \
+ (GL_LINK_WARNING ("strpbrk is unportable - " \
+ "use gnulib module strpbrk for portability"), \
+ strpbrk (s, a))
+#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
+# define strspn(s,a) \
+ (GL_LINK_WARNING ("strspn cannot work correctly on character strings " \
+ "in multibyte locales - " \
+ "use mbsspn if you care about internationalization"), \
+ strspn (s, a))
+#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
+# define strrchr(s,c) \
+ (GL_LINK_WARNING ("strrchr cannot work correctly on character strings " \
+ "in some multibyte locales - " \
+ "use mbsrchr if you care about internationalization"), \
+ strrchr (s, c))
+#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@
+extern char *strsep (char **restrict __stringp, char const *restrict __delim);
+# endif
+# if defined GNULIB_POSIXCHECK
+# undef strsep
+# define strsep(s,d) \
+ (GL_LINK_WARNING ("strsep cannot work correctly on character strings " \
+ "in multibyte locales - " \
+ "use mbssep if you care about internationalization"), \
+ strsep (s, d))
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strsep
+# define strsep(s,d) \
+ (GL_LINK_WARNING ("strsep is unportable - " \
+ "use gnulib module strsep for portability"), \
+ strsep (s, d))
+#endif
+
+#if @GNULIB_STRSTR@
+# if @REPLACE_STRSTR@
+# define strstr rpl_strstr
+char *strstr (const char *haystack, const char *needle)
+ __attribute__ ((__pure__));
+# 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
+# define strstr(a,b) \
+ (GL_LINK_WARNING ("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"), \
+ strstr (a, b))
+#endif
+
+/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive
+ comparison. */
+#if @GNULIB_STRCASESTR@
+# if @REPLACE_STRCASESTR@
+# define strcasestr rpl_strcasestr
+# endif
+# if ! @HAVE_STRCASESTR@ || @REPLACE_STRCASESTR@
+extern char *strcasestr (const char *haystack, const char *needle)
+ __attribute__ ((__pure__));
+# 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
+# define strcasestr(a,b) \
+ (GL_LINK_WARNING ("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"), \
+ strcasestr (a, b))
+#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 ! @HAVE_DECL_STRTOK_R@
+extern char *strtok_r (char *restrict s, char const *restrict delim,
+ char **restrict save_ptr);
+# endif
+# if defined GNULIB_POSIXCHECK
+# undef strtok_r
+# define strtok_r(s,d,p) \
+ (GL_LINK_WARNING ("strtok_r cannot work correctly on character strings " \
+ "in multibyte locales - " \
+ "use mbstok_r if you care about internationalization"), \
+ strtok_r (s, d, p))
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strtok_r
+# define strtok_r(s,d,p) \
+ (GL_LINK_WARNING ("strtok_r is unportable - " \
+ "use gnulib module strtok_r for portability"), \
+ strtok_r (s, d, p))
+#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. */
+extern size_t mbslen (const char *string);
+#endif
+
+#if @GNULIB_MBSNLEN@
+/* Return the number of multibyte characters in the character string starting
+ at STRING and ending at STRING + LEN. */
+extern size_t mbsnlen (const char *string, size_t len);
+#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. */
+# define mbschr rpl_mbschr /* avoid collision with HP-UX function */
+extern char * mbschr (const char *string, int c);
+#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. */
+# define mbsrchr rpl_mbsrchr /* avoid collision with HP-UX function */
+extern char * mbsrchr (const char *string, int c);
+#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. */
+extern char * mbsstr (const char *haystack, const char *needle);
+#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. */
+extern int mbscasecmp (const char *s1, const char *s2);
+#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! */
+extern int mbsncasecmp (const char *s1, const char *s2, size_t n);
+#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, returning less than, equal to or greater than zero if this
+ initial segment is lexicographically less than, equal to or greater than
+ PREFIX.
+ Note: This function may, in multibyte locales, return 0 if STRING is of
+ smaller length than PREFIX!
+ Unlike strncasecmp(), this function works correctly in multibyte
+ locales. */
+extern char * mbspcasecmp (const char *string, const char *prefix);
+#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. */
+extern char * mbscasestr (const char *haystack, const char *needle);
+#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. */
+extern size_t mbscspn (const char *string, const char *accept);
+#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. */
+# define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */
+extern char * mbspbrk (const char *string, const char *accept);
+#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. */
+extern size_t mbsspn (const char *string, const char *reject);
+#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(). */
+extern char * mbssep (char **stringp, const char *delim);
+#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(). */
+extern char * mbstok_r (char *string, const char *delim, char **save_ptr);
+#endif
+
+/* Map any int, typically from errno, into an error message. */
+#if @GNULIB_STRERROR@
+# if @REPLACE_STRERROR@
+# undef strerror
+# define strerror rpl_strerror
+extern char *strerror (int);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strerror
+# define strerror(e) \
+ (GL_LINK_WARNING ("strerror is unportable - " \
+ "use gnulib module strerror to guarantee non-NULL result"), \
+ strerror (e))
+#endif
+
+#if @GNULIB_STRSIGNAL@
+# if @REPLACE_STRSIGNAL@
+# define strsignal rpl_strsignal
+# endif
+# if ! @HAVE_DECL_STRSIGNAL@ || @REPLACE_STRSIGNAL@
+extern char *strsignal (int __sig);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strsignal
+# define strsignal(a) \
+ (GL_LINK_WARNING ("strsignal is unportable - " \
+ "use gnulib module strsignal for portability"), \
+ strsignal (a))
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _GL_STRING_H */
+#endif /* _GL_STRING_H */
diff --git a/gnulib/lib/strndup.c b/gnulib/lib/strndup.c
new file mode 100644
index 0000000..507e9c0
--- /dev/null
+++ b/gnulib/lib/strndup.c
@@ -0,0 +1,37 @@
+/* A replacement function, for systems that lack strndup.
+
+ Copyright (C) 1996, 1997, 1998, 2001, 2002, 2003, 2005, 2006, 2007
+ 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, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#include <config.h>
+
+#include <string.h>
+
+#include <stdlib.h>
+
+char *
+strndup (char const *s, size_t n)
+{
+ size_t len = strnlen (s, n);
+ char *new = malloc (len + 1);
+
+ if (new == NULL)
+ return NULL;
+
+ new[len] = '\0';
+ return memcpy (new, s, len);
+}
diff --git a/gnulib/lib/strnlen.c b/gnulib/lib/strnlen.c
new file mode 100644
index 0000000..93d1ac1
--- /dev/null
+++ b/gnulib/lib/strnlen.c
@@ -0,0 +1,31 @@
+/* Find the length of STRING, but scan at most MAXLEN characters.
+ Copyright (C) 2005, 2006, 2007 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, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#include <config.h>
+
+#include <string.h>
+
+/* Find the length of STRING, but scan at most MAXLEN characters.
+ If no '\0' terminator is found in that many characters, return MAXLEN. */
+
+size_t
+strnlen (const char *string, size_t maxlen)
+{
+ const char *end = memchr (string, '\0', maxlen);
+ return end ? (size_t) (end - string) : maxlen;
+}
diff --git a/gnulib/lib/strnlen1.c b/gnulib/lib/strnlen1.c
new file mode 100644
index 0000000..752d4fe
--- /dev/null
+++ b/gnulib/lib/strnlen1.c
@@ -0,0 +1,35 @@
+/* Find the length of STRING + 1, but scan at most MAXLEN bytes.
+ Copyright (C) 2005-2006 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 "strnlen1.h"
+
+#include <string.h>
+
+/* Find the length of STRING + 1, but scan at most MAXLEN bytes.
+ If no '\0' terminator is found in that many characters, return MAXLEN. */
+/* This is the same as strnlen (string, maxlen - 1) + 1. */
+size_t
+strnlen1 (const char *string, size_t maxlen)
+{
+ const char *end = (const char *) memchr (string, '\0', maxlen);
+ if (end != NULL)
+ return end - string + 1;
+ else
+ return maxlen;
+}
diff --git a/gnulib/lib/strnlen1.h b/gnulib/lib/strnlen1.h
new file mode 100644
index 0000000..c0ea357
--- /dev/null
+++ b/gnulib/lib/strnlen1.h
@@ -0,0 +1,39 @@
+/* Find the length of STRING + 1, but scan at most MAXLEN bytes.
+ Copyright (C) 2005 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/>. */
+
+#ifndef _STRNLEN1_H
+#define _STRNLEN1_H
+
+#include <stddef.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Find the length of STRING + 1, but scan at most MAXLEN bytes.
+ If no '\0' terminator is found in that many characters, return MAXLEN. */
+/* This is the same as strnlen (string, maxlen - 1) + 1. */
+extern size_t strnlen1 (const char *string, size_t maxlen);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _STRNLEN1_H */
diff --git a/gnulib/lib/sys_stat.in.h b/gnulib/lib/sys_stat.in.h
new file mode 100644
index 0000000..70496a0
--- /dev/null
+++ b/gnulib/lib/sys_stat.in.h
@@ -0,0 +1,291 @@
+/* Provide a more complete sys/stat header file.
+ Copyright (C) 2006-2008 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, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+/* Written by Eric Blake, Paul Eggert, and Jim Meyering. */
+
+/* This file is supposed to be used on platforms where <sys/stat.h> is
+ incomplete. It is intended to provide definitions and prototypes
+ needed by an application. Start with what the system provides. */
+
+#ifndef _GL_SYS_STAT_H
+
+/* The include_next requires a split double-inclusion guard. */
+#@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@
+
+#ifndef _GL_SYS_STAT_H
+#define _GL_SYS_STAT_H
+
+/* Before doing "#define mkdir rpl_mkdir" below, we need to include all
+ headers that may declare mkdir(). */
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+# include <io.h>
+#endif
+
+#ifndef S_IFMT
+# define S_IFMT 0170000
+#endif
+
+#if STAT_MACROS_BROKEN
+# undef S_ISBLK
+# undef S_ISCHR
+# undef S_ISDIR
+# undef S_ISFIFO
+# undef S_ISLNK
+# undef S_ISNAM
+# undef S_ISMPB
+# undef S_ISMPC
+# undef S_ISNWK
+# undef S_ISREG
+# undef S_ISSOCK
+#endif
+
+#ifndef S_ISBLK
+# ifdef S_IFBLK
+# define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
+# else
+# define S_ISBLK(m) 0
+# endif
+#endif
+
+#ifndef S_ISCHR
+# ifdef S_IFCHR
+# define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
+# else
+# define S_ISCHR(m) 0
+# endif
+#endif
+
+#ifndef S_ISDIR
+# ifdef S_IFDIR
+# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+# else
+# define S_ISDIR(m) 0
+# endif
+#endif
+
+#ifndef S_ISDOOR /* Solaris 2.5 and up */
+# define S_ISDOOR(m) 0
+#endif
+
+#ifndef S_ISFIFO
+# ifdef S_IFIFO
+# define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
+# else
+# define S_ISFIFO(m) 0
+# endif
+#endif
+
+#ifndef S_ISLNK
+# ifdef S_IFLNK
+# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
+# else
+# define S_ISLNK(m) 0
+# endif
+#endif
+
+#ifndef S_ISMPB /* V7 */
+# ifdef S_IFMPB
+# define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB)
+# define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC)
+# else
+# define S_ISMPB(m) 0
+# define S_ISMPC(m) 0
+# endif
+#endif
+
+#ifndef S_ISNAM /* Xenix */
+# ifdef S_IFNAM
+# define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM)
+# else
+# define S_ISNAM(m) 0
+# endif
+#endif
+
+#ifndef S_ISNWK /* HP/UX */
+# ifdef S_IFNWK
+# define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
+# else
+# define S_ISNWK(m) 0
+# endif
+#endif
+
+#ifndef S_ISPORT /* Solaris 10 and up */
+# define S_ISPORT(m) 0
+#endif
+
+#ifndef S_ISREG
+# ifdef S_IFREG
+# define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
+# else
+# define S_ISREG(m) 0
+# endif
+#endif
+
+#ifndef S_ISSOCK
+# ifdef S_IFSOCK
+# define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
+# else
+# define S_ISSOCK(m) 0
+# endif
+#endif
+
+
+#ifndef S_TYPEISMQ
+# define S_TYPEISMQ(p) 0
+#endif
+
+#ifndef S_TYPEISTMO
+# define S_TYPEISTMO(p) 0
+#endif
+
+
+#ifndef S_TYPEISSEM
+# ifdef S_INSEM
+# define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM)
+# else
+# define S_TYPEISSEM(p) 0
+# endif
+#endif
+
+#ifndef S_TYPEISSHM
+# ifdef S_INSHD
+# define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD)
+# else
+# define S_TYPEISSHM(p) 0
+# endif
+#endif
+
+/* high performance ("contiguous data") */
+#ifndef S_ISCTG
+# define S_ISCTG(p) 0
+#endif
+
+/* Cray DMF (data migration facility): off line, with data */
+#ifndef S_ISOFD
+# define S_ISOFD(p) 0
+#endif
+
+/* Cray DMF (data migration facility): off line, with no data */
+#ifndef S_ISOFL
+# define S_ISOFL(p) 0
+#endif
+
+/* 4.4BSD whiteout */
+#ifndef S_ISWHT
+# define S_ISWHT(m) 0
+#endif
+
+/* If any of the following are undefined,
+ define them to their de facto standard values. */
+#if !S_ISUID
+# define S_ISUID 04000
+#endif
+#if !S_ISGID
+# define S_ISGID 02000
+#endif
+
+/* S_ISVTX is a common extension to POSIX. */
+#ifndef S_ISVTX
+# define S_ISVTX 01000
+#endif
+
+#if !S_IRUSR && S_IREAD
+# define S_IRUSR S_IREAD
+#endif
+#if !S_IRUSR
+# define S_IRUSR 00400
+#endif
+#if !S_IRGRP
+# define S_IRGRP (S_IRUSR >> 3)
+#endif
+#if !S_IROTH
+# define S_IROTH (S_IRUSR >> 6)
+#endif
+
+#if !S_IWUSR && S_IWRITE
+# define S_IWUSR S_IWRITE
+#endif
+#if !S_IWUSR
+# define S_IWUSR 00200
+#endif
+#if !S_IWGRP
+# define S_IWGRP (S_IWUSR >> 3)
+#endif
+#if !S_IWOTH
+# define S_IWOTH (S_IWUSR >> 6)
+#endif
+
+#if !S_IXUSR && S_IEXEC
+# define S_IXUSR S_IEXEC
+#endif
+#if !S_IXUSR
+# define S_IXUSR 00100
+#endif
+#if !S_IXGRP
+# define S_IXGRP (S_IXUSR >> 3)
+#endif
+#if !S_IXOTH
+# define S_IXOTH (S_IXUSR >> 6)
+#endif
+
+#if !S_IRWXU
+# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
+#endif
+#if !S_IRWXG
+# define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
+#endif
+#if !S_IRWXO
+# define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
+#endif
+
+/* S_IXUGO is a common extension to POSIX. */
+#if !S_IXUGO
+# define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH)
+#endif
+
+#ifndef S_IRWXUGO
+# define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO)
+#endif
+
+/* mingw does not support symlinks, therefore it does not have lstat. But
+ without links, stat does just fine. */
+#if ! @HAVE_LSTAT@
+# define lstat stat
+#endif
+
+#if @REPLACE_MKDIR@
+# undef mkdir
+# define mkdir rpl_mkdir
+extern int mkdir (char const *name, mode_t mode);
+#else
+/* mingw's _mkdir() function has 1 argument, but we pass 2 arguments.
+ Additionally, it declares _mkdir (and depending on compile flags, an
+ alias mkdir), only in the nonstandard <io.h>, which is included above. */
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+
+static inline int
+rpl_mkdir (char const *name, mode_t mode)
+{
+ return _mkdir (name);
+}
+
+# define mkdir rpl_mkdir
+# endif
+#endif
+
+#endif /* _GL_SYS_STAT_H */
+#endif /* _GL_SYS_STAT_H */
diff --git a/gnulib/lib/sys_time.in.h b/gnulib/lib/sys_time.in.h
new file mode 100644
index 0000000..295d164
--- /dev/null
+++ b/gnulib/lib/sys_time.in.h
@@ -0,0 +1,52 @@
+/* Provide a more complete sys/time.h.
+
+ Copyright (C) 2007 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, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+/* Written by Paul Eggert. */
+
+#if defined _GL_SYS_TIME_H
+
+/* Simply delegate to the system's header, without adding anything. */
+# if @HAVE_SYS_TIME_H@
+# @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@
+# endif
+
+#else
+
+# define _GL_SYS_TIME_H
+
+# if @HAVE_SYS_TIME_H@
+# @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@
+# else
+# include <time.h>
+# endif
+
+# if ! @HAVE_STRUCT_TIMEVAL@
+struct timeval
+{
+ time_t tv_sec;
+ long int tv_usec;
+};
+# endif
+
+# if @REPLACE_GETTIMEOFDAY@
+# undef gettimeofday
+# define gettimeofday rpl_gettimeofday
+int gettimeofday (struct timeval *restrict, void *restrict);
+# endif
+
+#endif /* _GL_SYS_TIME_H */
diff --git a/gnulib/lib/tempname.c b/gnulib/lib/tempname.c
new file mode 100644
index 0000000..5a3a326
--- /dev/null
+++ b/gnulib/lib/tempname.c
@@ -0,0 +1,314 @@
+/* tempname.c - generate the name of a temporary file.
+
+ Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+ 2000, 2001, 2002, 2003, 2005, 2006, 2007 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/>. */
+
+/* Extracted from glibc sysdeps/posix/tempname.c. See also tmpdir.c. */
+
+#if !_LIBC
+# include <config.h>
+# include "tempname.h"
+#endif
+
+#include <sys/types.h>
+#include <assert.h>
+
+#include <errno.h>
+#ifndef __set_errno
+# define __set_errno(Val) errno = (Val)
+#endif
+
+#include <stdio.h>
+#ifndef P_tmpdir
+# define P_tmpdir "/tmp"
+#endif
+#ifndef TMP_MAX
+# define TMP_MAX 238328
+#endif
+#ifndef __GT_FILE
+# define __GT_FILE 0
+# define __GT_BIGFILE 1
+# define __GT_DIR 2
+# define __GT_NOCREATE 3
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <fcntl.h>
+#include <sys/time.h>
+#include <stdint.h>
+#include <unistd.h>
+
+#include <sys/stat.h>
+
+#if _LIBC
+# define struct_stat64 struct stat64
+# define small_open __open
+# define large_open __open64
+#else
+# define struct_stat64 struct stat
+# define small_open open
+# define large_open open
+# define __gen_tempname gen_tempname
+# define __getpid getpid
+# define __gettimeofday gettimeofday
+# define __mkdir mkdir
+# define __lxstat64(version, file, buf) lstat (file, buf)
+# define __xstat64(version, file, buf) stat (file, buf)
+#endif
+
+#if ! (HAVE___SECURE_GETENV || _LIBC)
+# define __secure_getenv getenv
+#endif
+
+#ifdef _LIBC
+# include <hp-timing.h>
+# if HP_TIMING_AVAIL
+# define RANDOM_BITS(Var) \
+ if (__builtin_expect (value == UINT64_C (0), 0)) \
+ { \
+ /* If this is the first time this function is used initialize \
+ the variable we accumulate the value in to some somewhat \
+ random value. If we'd not do this programs at startup time \
+ might have a reduced set of possible names, at least on slow \
+ machines. */ \
+ struct timeval tv; \
+ __gettimeofday (&tv, NULL); \
+ value = ((uint64_t) tv.tv_usec << 16) ^ tv.tv_sec; \
+ } \
+ HP_TIMING_NOW (Var)
+# endif
+#endif
+
+/* Use the widest available unsigned type if uint64_t is not
+ available. The algorithm below extracts a number less than 62**6
+ (approximately 2**35.725) from uint64_t, so ancient hosts where
+ uintmax_t is only 32 bits lose about 3.725 bits of randomness,
+ which is better than not having mkstemp at all. */
+#if !defined UINT64_MAX && !defined uint64_t
+# define uint64_t uintmax_t
+#endif
+
+#if _LIBC
+/* Return nonzero if DIR is an existent directory. */
+static int
+direxists (const char *dir)
+{
+ struct_stat64 buf;
+ return __xstat64 (_STAT_VER, dir, &buf) == 0 && S_ISDIR (buf.st_mode);
+}
+
+/* Path search algorithm, for tmpnam, tmpfile, etc. If DIR is
+ non-null and exists, uses it; otherwise uses the first of $TMPDIR,
+ P_tmpdir, /tmp that exists. Copies into TMPL a template suitable
+ for use with mk[s]temp. Will fail (-1) if DIR is non-null and
+ doesn't exist, none of the searched dirs exists, or there's not
+ enough space in TMPL. */
+int
+__path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx,
+ int try_tmpdir)
+{
+ const char *d;
+ size_t dlen, plen;
+
+ if (!pfx || !pfx[0])
+ {
+ pfx = "file";
+ plen = 4;
+ }
+ else
+ {
+ plen = strlen (pfx);
+ if (plen > 5)
+ plen = 5;
+ }
+
+ if (try_tmpdir)
+ {
+ d = __secure_getenv ("TMPDIR");
+ if (d != NULL && direxists (d))
+ dir = d;
+ else if (dir != NULL && direxists (dir))
+ /* nothing */ ;
+ else
+ dir = NULL;
+ }
+ if (dir == NULL)
+ {
+ if (direxists (P_tmpdir))
+ dir = P_tmpdir;
+ else if (strcmp (P_tmpdir, "/tmp") != 0 && direxists ("/tmp"))
+ dir = "/tmp";
+ else
+ {
+ __set_errno (ENOENT);
+ return -1;
+ }
+ }
+
+ dlen = strlen (dir);
+ while (dlen > 1 && dir[dlen - 1] == '/')
+ dlen--; /* remove trailing slashes */
+
+ /* check we have room for "${dir}/${pfx}XXXXXX\0" */
+ if (tmpl_len < dlen + 1 + plen + 6 + 1)
+ {
+ __set_errno (EINVAL);
+ return -1;
+ }
+
+ sprintf (tmpl, "%.*s/%.*sXXXXXX", (int) dlen, dir, (int) plen, pfx);
+ return 0;
+}
+#endif /* _LIBC */
+
+/* These are the characters used in temporary file names. */
+static const char letters[] =
+"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+
+/* Generate a temporary file name based on TMPL. TMPL must match the
+ rules for mk[s]temp (i.e. end in "XXXXXX"). The name constructed
+ does not exist at the time of the call to __gen_tempname. TMPL is
+ overwritten with the result.
+
+ KIND may be one of:
+ __GT_NOCREATE: simply verify that the name does not exist
+ at the time of the call.
+ __GT_FILE: create the file using open(O_CREAT|O_EXCL)
+ and return a read-write fd. The file is mode 0600.
+ __GT_BIGFILE: same as __GT_FILE but use open64().
+ __GT_DIR: create a directory, which will be mode 0700.
+
+ We use a clever algorithm to get hard-to-predict names. */
+int
+__gen_tempname (char *tmpl, int kind)
+{
+ int len;
+ char *XXXXXX;
+ static uint64_t value;
+ uint64_t random_time_bits;
+ unsigned int count;
+ int fd = -1;
+ int save_errno = errno;
+ struct_stat64 st;
+
+ /* A lower bound on the number of temporary files to attempt to
+ generate. The maximum total number of temporary file names that
+ can exist for a given template is 62**6. It should never be
+ necessary to try all these combinations. Instead if a reasonable
+ number of names is tried (we define reasonable as 62**3) fail to
+ give the system administrator the chance to remove the problems. */
+#define ATTEMPTS_MIN (62 * 62 * 62)
+
+ /* The number of times to attempt to generate a temporary file. To
+ conform to POSIX, this must be no smaller than TMP_MAX. */
+#if ATTEMPTS_MIN < TMP_MAX
+ unsigned int attempts = TMP_MAX;
+#else
+ unsigned int attempts = ATTEMPTS_MIN;
+#endif
+
+ len = strlen (tmpl);
+ if (len < 6 || strcmp (&tmpl[len - 6], "XXXXXX"))
+ {
+ __set_errno (EINVAL);
+ return -1;
+ }
+
+ /* This is where the Xs start. */
+ XXXXXX = &tmpl[len - 6];
+
+ /* Get some more or less random data. */
+#ifdef RANDOM_BITS
+ RANDOM_BITS (random_time_bits);
+#else
+ {
+ struct timeval tv;
+ __gettimeofday (&tv, NULL);
+ random_time_bits = ((uint64_t) tv.tv_usec << 16) ^ tv.tv_sec;
+ }
+#endif
+ value += random_time_bits ^ __getpid ();
+
+ for (count = 0; count < attempts; value += 7777, ++count)
+ {
+ uint64_t v = value;
+
+ /* Fill in the random bits. */
+ XXXXXX[0] = letters[v % 62];
+ v /= 62;
+ XXXXXX[1] = letters[v % 62];
+ v /= 62;
+ XXXXXX[2] = letters[v % 62];
+ v /= 62;
+ XXXXXX[3] = letters[v % 62];
+ v /= 62;
+ XXXXXX[4] = letters[v % 62];
+ v /= 62;
+ XXXXXX[5] = letters[v % 62];
+
+ switch (kind)
+ {
+ case __GT_FILE:
+ fd = small_open (tmpl, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
+ break;
+
+ case __GT_BIGFILE:
+ fd = large_open (tmpl, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
+ break;
+
+ case __GT_DIR:
+ fd = __mkdir (tmpl, S_IRUSR | S_IWUSR | S_IXUSR);
+ break;
+
+ case __GT_NOCREATE:
+ /* This case is backward from the other three. __gen_tempname
+ succeeds if __xstat fails because the name does not exist.
+ Note the continue to bypass the common logic at the bottom
+ of the loop. */
+ if (__lxstat64 (_STAT_VER, tmpl, &st) < 0)
+ {
+ if (errno == ENOENT)
+ {
+ __set_errno (save_errno);
+ return 0;
+ }
+ else
+ /* Give up now. */
+ return -1;
+ }
+ continue;
+
+ default:
+ assert (! "invalid KIND in __gen_tempname");
+ }
+
+ if (fd >= 0)
+ {
+ __set_errno (save_errno);
+ return fd;
+ }
+ else if (errno != EEXIST)
+ return -1;
+ }
+
+ /* We got out of the loop because we ran out of combinations to try. */
+ __set_errno (EEXIST);
+ return -1;
+}
diff --git a/gnulib/lib/tempname.h b/gnulib/lib/tempname.h
new file mode 100644
index 0000000..74da03b
--- /dev/null
+++ b/gnulib/lib/tempname.h
@@ -0,0 +1,39 @@
+/* Create a temporary file or directory.
+
+ Copyright (C) 2006 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/>. */
+
+/* header written by Eric Blake */
+
+/* In gnulib, always prefer large files. GT_FILE maps to
+ __GT_BIGFILE, not __GT_FILE, for a reason. */
+#define GT_FILE 1
+#define GT_DIR 2
+#define GT_NOCREATE 3
+
+/* Generate a temporary file name based on TMPL. TMPL must match the
+ rules for mk[s]temp (i.e. end in "XXXXXX"). The name constructed
+ does not exist at the time of the call to gen_tempname. TMPL is
+ overwritten with the result.
+
+ KIND may be one of:
+ GT_NOCREATE: simply verify that the name does not exist
+ at the time of the call.
+ GT_FILE: create a large file using open(O_CREAT|O_EXCL)
+ and return a read-write fd. The file is mode 0600.
+ GT_DIR: create a directory, which will be mode 0700.
+
+ We use a clever algorithm to get hard-to-predict names. */
+extern int gen_tempname (char *tmpl, int kind);
diff --git a/gnulib/lib/unistd.in.h b/gnulib/lib/unistd.in.h
new file mode 100644
index 0000000..17b29af
--- /dev/null
+++ b/gnulib/lib/unistd.in.h
@@ -0,0 +1,340 @@
+/* Substitute for and wrapper around <unistd.h>.
+ Copyright (C) 2004-2008 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, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#ifndef _GL_UNISTD_H
+
+/* The include_next requires a split double-inclusion guard. */
+#if @HAVE_UNISTD_H@
+# @INCLUDE_NEXT@ @NEXT_UNISTD_H@
+#endif
+
+#ifndef _GL_UNISTD_H
+#define _GL_UNISTD_H
+
+/* mingw doesn't define the SEEK_* macros in <unistd.h>. */
+#if !(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET)
+# include <stdio.h>
+#endif
+
+/* mingw fails to declare _exit in <unistd.h>. */
+#include <stdlib.h>
+
+/* The definition of GL_LINK_WARNING is copied here. */
+
+
+/* Declare overridden functions. */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#if @GNULIB_CHOWN@
+# if @REPLACE_CHOWN@
+# ifndef REPLACE_CHOWN
+# define REPLACE_CHOWN 1
+# endif
+# if REPLACE_CHOWN
+/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
+ to GID (if GID is not -1). Follow symbolic links.
+ Return 0 if successful, otherwise -1 and errno set.
+ See the POSIX:2001 specification
+ <http://www.opengroup.org/susv3xsh/chown.html>. */
+# define chown rpl_chown
+extern int chown (const char *file, uid_t uid, gid_t gid);
+# endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef chown
+# define chown(f,u,g) \
+ (GL_LINK_WARNING ("chown fails to follow symlinks on some systems and " \
+ "doesn't treat a uid or gid of -1 on some systems - " \
+ "use gnulib module chown for portability"), \
+ chown (f, u, g))
+#endif
+
+
+#if @GNULIB_DUP2@
+# if !@HAVE_DUP2@
+/* Copy the file descriptor OLDFD into file descriptor NEWFD. Do nothing if
+ NEWFD = OLDFD, otherwise close NEWFD first if it is open.
+ Return 0 if successful, otherwise -1 and errno set.
+ See the POSIX:2001 specification
+ <http://www.opengroup.org/susv3xsh/dup2.html>. */
+extern int dup2 (int oldfd, int newfd);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef dup2
+# define dup2(o,n) \
+ (GL_LINK_WARNING ("dup2 is unportable - " \
+ "use gnulib module dup2 for portability"), \
+ dup2 (o, n))
+#endif
+
+
+#if @GNULIB_ENVIRON@
+# if !@HAVE_DECL_ENVIRON@
+/* Set of environment variables and values. An array of strings of the form
+ "VARIABLE=VALUE", terminated with a NULL. */
+# if defined __APPLE__ && defined __MACH__
+# include <crt_externs.h>
+# define environ (*_NSGetEnviron ())
+# else
+extern char **environ;
+# endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef environ
+# define environ \
+ (GL_LINK_WARNING ("environ is unportable - " \
+ "use gnulib module environ for portability"), \
+ environ)
+#endif
+
+
+#if @GNULIB_FCHDIR@
+# if @REPLACE_FCHDIR@
+
+/* Change the process' current working directory to the directory on which
+ the given file descriptor is open.
+ Return 0 if successful, otherwise -1 and errno set.
+ See the POSIX:2001 specification
+ <http://www.opengroup.org/susv3xsh/fchdir.html>. */
+extern int fchdir (int /*fd*/);
+
+# define close rpl_close
+extern int close (int);
+# define dup rpl_dup
+extern int dup (int);
+# define dup2 rpl_dup2
+extern int dup2 (int, int);
+
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef fchdir
+# define fchdir(f) \
+ (GL_LINK_WARNING ("fchdir is unportable - " \
+ "use gnulib module fchdir for portability"), \
+ fchdir (f))
+#endif
+
+
+#if @GNULIB_FTRUNCATE@
+# if !@HAVE_FTRUNCATE@
+/* Change the size of the file to which FD is opened to become equal to LENGTH.
+ Return 0 if successful, otherwise -1 and errno set.
+ See the POSIX:2001 specification
+ <http://www.opengroup.org/susv3xsh/ftruncate.html>. */
+extern int ftruncate (int fd, off_t length);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef ftruncate
+# define ftruncate(f,l) \
+ (GL_LINK_WARNING ("ftruncate is unportable - " \
+ "use gnulib module ftruncate for portability"), \
+ ftruncate (f, l))
+#endif
+
+
+#if @GNULIB_GETCWD@
+/* Include the headers that might declare getcwd so that they will not
+ cause confusion if included after this file. */
+# include <stdlib.h>
+# if @REPLACE_GETCWD@
+/* Get the name of the current working directory, and put it in SIZE bytes
+ of BUF.
+ Return BUF if successful, or NULL if the directory couldn't be determined
+ or SIZE was too small.
+ See the POSIX:2001 specification
+ <http://www.opengroup.org/susv3xsh/getcwd.html>.
+ Additionally, the gnulib module 'getcwd' guarantees the following GNU
+ extension: If BUF is NULL, an array is allocated with 'malloc'; the array
+ is SIZE bytes long, unless SIZE == 0, in which case it is as big as
+ necessary. */
+# define getcwd rpl_getcwd
+extern char * getcwd (char *buf, size_t size);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef getcwd
+# define getcwd(b,s) \
+ (GL_LINK_WARNING ("getcwd is unportable - " \
+ "use gnulib module getcwd for portability"), \
+ getcwd (b, s))
+#endif
+
+
+#if @GNULIB_GETLOGIN_R@
+/* Copies the user's login name to NAME.
+ The array pointed to by NAME has room for SIZE bytes.
+
+ Returns 0 if successful. Upon error, an error number is returned, or -1 in
+ the case that the login name cannot be found but no specific error is
+ provided (this case is hopefully rare but is left open by the POSIX spec).
+
+ See <http://www.opengroup.org/susv3xsh/getlogin.html>.
+ */
+# if !@HAVE_DECL_GETLOGIN_R@
+# include <stddef.h>
+extern int getlogin_r (char *name, size_t size);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef getlogin_r
+# define getlogin_r(n,s) \
+ (GL_LINK_WARNING ("getlogin_r is unportable - " \
+ "use gnulib module getlogin_r for portability"), \
+ getlogin_r (n, s))
+#endif
+
+
+#if @GNULIB_GETPAGESIZE@
+# if @REPLACE_GETPAGESIZE@
+# define getpagesize rpl_getpagesize
+extern int getpagesize (void);
+# elif !@HAVE_GETPAGESIZE@
+/* This is for POSIX systems. */
+# if !defined getpagesize && defined _SC_PAGESIZE
+# if ! (defined __VMS && __VMS_VER < 70000000)
+# define getpagesize() sysconf (_SC_PAGESIZE)
+# endif
+# endif
+/* This is for older VMS. */
+# if !defined getpagesize && defined __VMS
+# ifdef __ALPHA
+# define getpagesize() 8192
+# else
+# define getpagesize() 512
+# endif
+# endif
+/* This is for BeOS. */
+# if !defined getpagesize && @HAVE_OS_H@
+# include <OS.h>
+# if defined B_PAGE_SIZE
+# define getpagesize() B_PAGE_SIZE
+# endif
+# endif
+/* This is for AmigaOS4.0. */
+# if !defined getpagesize && defined __amigaos4__
+# define getpagesize() 2048
+# endif
+/* This is for older Unix systems. */
+# if !defined getpagesize && @HAVE_SYS_PARAM_H@
+# include <sys/param.h>
+# ifdef EXEC_PAGESIZE
+# define getpagesize() EXEC_PAGESIZE
+# else
+# ifdef NBPG
+# ifndef CLSIZE
+# define CLSIZE 1
+# endif
+# define getpagesize() (NBPG * CLSIZE)
+# else
+# ifdef NBPC
+# define getpagesize() NBPC
+# endif
+# endif
+# endif
+# endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef getpagesize
+# define getpagesize() \
+ (GL_LINK_WARNING ("getpagesize is unportable - " \
+ "use gnulib module getpagesize for portability"), \
+ getpagesize ())
+#endif
+
+
+#if @GNULIB_LCHOWN@
+# if @REPLACE_LCHOWN@
+/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
+ to GID (if GID is not -1). Do not follow symbolic links.
+ Return 0 if successful, otherwise -1 and errno set.
+ See the POSIX:2001 specification
+ <http://www.opengroup.org/susv3xsh/lchown.html>. */
+# define lchown rpl_lchown
+extern int lchown (char const *file, uid_t owner, gid_t group);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef lchown
+# define lchown(f,u,g) \
+ (GL_LINK_WARNING ("lchown is unportable to pre-POSIX.1-2001 " \
+ "systems - use gnulib module lchown for portability"), \
+ lchown (f, u, g))
+#endif
+
+
+#if @GNULIB_LSEEK@
+# if @REPLACE_LSEEK@
+/* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END.
+ Return the new offset if successful, otherwise -1 and errno set.
+ See the POSIX:2001 specification
+ <http://www.opengroup.org/susv3xsh/lseek.html>. */
+# define lseek rpl_lseek
+ extern off_t lseek (int fd, off_t offset, int whence);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef lseek
+# define lseek(f,o,w) \
+ (GL_LINK_WARNING ("lseek does not fail with ESPIPE on pipes on some " \
+ "systems - use gnulib module lseek for portability"), \
+ lseek (f, o, w))
+#endif
+
+
+#if @GNULIB_READLINK@
+/* Read the contents of the symbolic link FILE and place the first BUFSIZE
+ bytes of it into BUF. Return the number of bytes placed into BUF if
+ successful, otherwise -1 and errno set.
+ See the POSIX:2001 specification
+ <http://www.opengroup.org/susv3xsh/readlink.html>. */
+# if !@HAVE_READLINK@
+# include <stddef.h>
+extern int readlink (const char *file, char *buf, size_t bufsize);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef readlink
+# define readlink(f,b,s) \
+ (GL_LINK_WARNING ("readlink is unportable - " \
+ "use gnulib module readlink for portability"), \
+ readlink (f, b, s))
+#endif
+
+
+#if @GNULIB_SLEEP@
+/* Pause the execution of the current thread for N seconds.
+ Returns the number of seconds left to sleep.
+ See the POSIX:2001 specification
+ <http://www.opengroup.org/susv3xsh/sleep.html>. */
+# if !@HAVE_SLEEP@
+extern unsigned int sleep (unsigned int n);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef sleep
+# define sleep(n) \
+ (GL_LINK_WARNING ("sleep is unportable - " \
+ "use gnulib module sleep for portability"), \
+ sleep (n))
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _GL_UNISTD_H */
+#endif /* _GL_UNISTD_H */
diff --git a/gnulib/lib/unitypes.h b/gnulib/lib/unitypes.h
new file mode 100644
index 0000000..12e2628
--- /dev/null
+++ b/gnulib/lib/unitypes.h
@@ -0,0 +1,26 @@
+/* Elementary types for the GNU UniString library.
+ Copyright (C) 2002, 2005-2006 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
+ Lesser General Public License for more details.
+
+ 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 _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;
+
+#endif /* _UNITYPES_H */
diff --git a/gnulib/lib/uniwidth.h b/gnulib/lib/uniwidth.h
new file mode 100644
index 0000000..5b4867f
--- /dev/null
+++ b/gnulib/lib/uniwidth.h
@@ -0,0 +1,64 @@
+/* Display width functions.
+ Copyright (C) 2001-2002, 2005, 2007 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
+ Lesser General Public License for more details.
+
+ 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 _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);
+
+/* 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);
+extern int
+ u16_width (const uint16_t *s, size_t n, const char *encoding);
+extern int
+ u32_width (const uint32_t *s, size_t n, const char *encoding);
+
+/* Determine number of column positions required for S. */
+extern int
+ u8_strwidth (const uint8_t *s, const char *encoding);
+extern int
+ u16_strwidth (const uint16_t *s, const char *encoding);
+extern int
+ u32_strwidth (const uint32_t *s, const char *encoding);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _UNIWIDTH_H */
diff --git a/gnulib/lib/uniwidth/cjk.h b/gnulib/lib/uniwidth/cjk.h
new file mode 100644
index 0000000..c8ccb93
--- /dev/null
+++ b/gnulib/lib/uniwidth/cjk.h
@@ -0,0 +1,37 @@
+/* Test for CJK encoding.
+ Copyright (C) 2001-2002, 2005-2007 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
+ Lesser General Public License for more details.
+
+ 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 "streq.h"
+
+static int
+is_cjk_encoding (const char *encoding)
+{
+ if (0
+ /* Legacy Japanese encodings */
+ || STREQ (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0)
+ /* Legacy Chinese encodings */
+ || STREQ (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0)
+ || STREQ (encoding, "GBK", 'G', 'B', 'K', 0, 0, 0, 0, 0, 0)
+ || STREQ (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0)
+ || STREQ (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0)
+ /* Legacy Korean encodings */
+ || STREQ (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0)
+ || STREQ (encoding, "CP949", 'C', 'P', '9', '4', '9', 0, 0, 0, 0)
+ || STREQ (encoding, "JOHAB", 'J', 'O', 'H', 'A', 'B', 0, 0, 0, 0))
+ return 1;
+ return 0;
+}
diff --git a/gnulib/lib/uniwidth/width.c b/gnulib/lib/uniwidth/width.c
new file mode 100644
index 0000000..7d75bda
--- /dev/null
+++ b/gnulib/lib/uniwidth/width.c
@@ -0,0 +1,323 @@
+/* Determine display width of Unicode character.
+ Copyright (C) 2001-2002, 2006-2007 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
+ Lesser General Public License for more details.
+
+ 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 "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[22*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, 0x08, 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 */
+ 0x78, 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, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0600-0x063f */
+ 0x00, 0xf8, 0xff, 0x7f, 0x00, 0x00, 0x01, 0x00, /* 0x0640-0x067f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0680-0x06bf */
+ 0x00, 0x00, 0xc0, 0xff, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0800-0x083f */
+ 0x00, 0x00, 0x00, 0x00, 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 */
+ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0900-0x093f */
+ 0xfe, 0x21, 0x1e, 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, 0x00, 0x00, 0x00, 0x00, 0x03, 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 */
+ 0x0e, 0x20, 0x40, 0x00, 0x00, 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, 0x00, 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 */
+ 0x0e, 0x20, 0x00, 0x00, 0x00, 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, 0x00, 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, 0xc5, 0x02, /* 0x1000-0x103f */
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, /* 0x1040-0x107f */
+ 0x00, 0x00, 0x00, 0x00, 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, 0x80, 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, 0x0f, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 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 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1b80-0x1bbf */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bc0-0x1bff */
+ /* 0x1c00-0x1dff */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 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, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, /* 0x1dc0-0x1dff */
+ /* 0x2000-0x21ff */
+ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, /* 0x2000-0x203f */
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, /* 0x2040-0x207f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2080-0x20bf */
+ 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 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 */
+ /* 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 */
+ /* 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 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8c0-0xa8ff */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa900-0xa93f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa940-0xa97f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa980-0xa9bf */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa9c0-0xa9ff */
+ /* 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, 0x0f, 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 */
+ /* 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 */
+ /* 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, 0x00, 0xf8, /* 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, -1, -1, /* 0x2000-0x2fff */
+ 15, -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, -1, 16, -1, -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, 17, -1, 18, /* 0xf000-0xffff */
+ -1, -1, -1, -1, -1, 19, -1, -1, /* 0x10000-0x10fff */
+ -1, -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 */
+ 20, 21, -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 '^....;[WF]' EastAsianWidth.txt"
+ * and "grep '^....;[^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 <= 0x2a6d6) /* CJK */
+ || (uc >= 0x2f800 && uc <= 0x2fa1d) /* CJK Compatibility Ideographs */
+ ) )
+ 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/gnulib/lib/unsetenv.c b/gnulib/lib/unsetenv.c
new file mode 100644
index 0000000..73ea878
--- /dev/null
+++ b/gnulib/lib/unsetenv.c
@@ -0,0 +1,90 @@
+/* Copyright (C) 1992,1995-1999,2000-2002,2005-2008 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
+ 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 <stdlib.h>
+
+#include <errno.h>
+#if !_LIBC
+# define __set_errno(ev) ((errno) = (ev))
+#endif
+
+#include <string.h>
+#include <unistd.h>
+
+#if !_LIBC
+# define __environ environ
+#endif
+
+#if _LIBC
+/* This lock protects against simultaneous modifications of `environ'. */
+# include <bits/libc-lock.h>
+__libc_lock_define_initialized (static, envlock)
+# define LOCK __libc_lock_lock (envlock)
+# define UNLOCK __libc_lock_unlock (envlock)
+#else
+# define LOCK
+# define UNLOCK
+#endif
+
+/* In the GNU C library we must keep the namespace clean. */
+#ifdef _LIBC
+# define unsetenv __unsetenv
+#endif
+
+
+int
+unsetenv (const char *name)
+{
+ size_t len;
+ char **ep;
+
+ if (name == NULL || *name == '\0' || strchr (name, '=') != NULL)
+ {
+ __set_errno (EINVAL);
+ return -1;
+ }
+
+ len = strlen (name);
+
+ LOCK;
+
+ ep = __environ;
+ while (*ep != NULL)
+ if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
+ {
+ /* Found it. Remove this pointer by moving later ones back. */
+ char **dp = ep;
+
+ do
+ dp[0] = dp[1];
+ while (*dp++);
+ /* Continue the loop in case NAME appears again. */
+ }
+ else
+ ++ep;
+
+ UNLOCK;
+
+ return 0;
+}
+
+#ifdef _LIBC
+# undef unsetenv
+weak_alias (__unsetenv, unsetenv)
+#endif
diff --git a/gnulib/lib/wchar.in.h b/gnulib/lib/wchar.in.h
new file mode 100644
index 0000000..f796167
--- /dev/null
+++ b/gnulib/lib/wchar.in.h
@@ -0,0 +1,91 @@
+/* A substitute for ISO C99 <wchar.h>, for platforms that have issues.
+
+ Copyright (C) 2007-2008 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, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+/* 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().
+ */
+
+#ifdef __need_mbstate_t
+/* Special invocation convention inside uClibc header files. */
+
+#@INCLUDE_NEXT@ @NEXT_WCHAR_H@
+
+#else
+/* Normal invocation convention. */
+
+#ifndef _GL_WCHAR_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 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
+
+#ifndef _GL_WCHAR_H
+#define _GL_WCHAR_H
+
+/* The definition of GL_LINK_WARNING is copied here. */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Return the number of screen columns needed for WC. */
+#if @GNULIB_WCWIDTH@
+# if @REPLACE_WCWIDTH@
+# undef wcwidth
+# define wcwidth rpl_wcwidth
+extern int wcwidth (wchar_t);
+# else
+# if !defined wcwidth && !@HAVE_DECL_WCWIDTH@
+/* wcwidth exists but is not declared. */
+extern int wcwidth (int /* actually wchar_t */);
+# endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcwidth
+# define wcwidth(w) \
+ (GL_LINK_WARNING ("wcwidth is unportable - " \
+ "use gnulib module wcwidth for portability"), \
+ wcwidth (w))
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _GL_WCHAR_H */
+#endif /* _GL_WCHAR_H */
+#endif
diff --git a/gnulib/lib/wctype.in.h b/gnulib/lib/wctype.in.h
new file mode 100644
index 0000000..1bb5228
--- /dev/null
+++ b/gnulib/lib/wctype.in.h
@@ -0,0 +1,178 @@
+/* A substitute for ISO C99 <wctype.h>, for platforms that lack it.
+
+ Copyright (C) 2006-2008 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, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+/* 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 _GL_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
+
+/* 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 _GL_WCTYPE_H
+#define _GL_WCTYPE_H
+
+#if @HAVE_WINT_T@
+typedef wint_t __wctype_wint_t;
+#else
+typedef int __wctype_wint_t;
+#endif
+
+/* 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 12 functions 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
+
+/* Linux libc5 has <wctype.h> and the functions but they are broken. */
+# if @REPLACE_ISWCNTRL@
+# 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
+
+static inline int
+iswalnum (__wctype_wint_t wc)
+{
+ return ((wc >= '0' && wc <= '9')
+ || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'));
+}
+
+static inline int
+iswalpha (__wctype_wint_t wc)
+{
+ return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z';
+}
+
+static inline int
+iswblank (__wctype_wint_t wc)
+{
+ return wc == ' ' || wc == '\t';
+}
+
+static inline int
+iswcntrl (__wctype_wint_t wc)
+{
+ return (wc & ~0x1f) == 0 || wc == 0x7f;
+}
+
+static inline int
+iswdigit (__wctype_wint_t wc)
+{
+ return wc >= '0' && wc <= '9';
+}
+
+static inline int
+iswgraph (__wctype_wint_t wc)
+{
+ return wc >= '!' && wc <= '~';
+}
+
+static inline int
+iswlower (__wctype_wint_t wc)
+{
+ return wc >= 'a' && wc <= 'z';
+}
+
+static inline int
+iswprint (__wctype_wint_t wc)
+{
+ return wc >= ' ' && wc <= '~';
+}
+
+static inline int
+iswpunct (__wctype_wint_t wc)
+{
+ return (wc >= '!' && wc <= '~'
+ && !((wc >= '0' && wc <= '9')
+ || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')));
+}
+
+static inline int
+iswspace (__wctype_wint_t wc)
+{
+ return (wc == ' ' || wc == '\t'
+ || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r');
+}
+
+static inline int
+iswupper (__wctype_wint_t wc)
+{
+ return wc >= 'A' && wc <= 'Z';
+}
+
+static inline int
+iswxdigit (__wctype_wint_t wc)
+{
+ return ((wc >= '0' && wc <= '9')
+ || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F'));
+}
+
+# endif /* ! HAVE_ISWCNTRL */
+
+#endif /* _GL_WCTYPE_H */
+#endif /* _GL_WCTYPE_H */
diff --git a/gnulib/lib/wcwidth.c b/gnulib/lib/wcwidth.c
new file mode 100644
index 0000000..4885071
--- /dev/null
+++ b/gnulib/lib/wcwidth.c
@@ -0,0 +1,51 @@
+/* Determine the number of screen columns needed for a character.
+ Copyright (C) 2006, 2007 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"
+
+#undef wcwidth
+
+int
+rpl_wcwidth (wchar_t wc)
+{
+ /* In UTF-8 locales, use a Unicode aware width function. */
+ const char *encoding = locale_charset ();
+ if (STREQ (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/gnulib/lib/xalloc-die.c b/gnulib/lib/xalloc-die.c
new file mode 100644
index 0000000..0a0694f
--- /dev/null
+++ b/gnulib/lib/xalloc-die.c
@@ -0,0 +1,41 @@
+/* Report a memory allocation failure and exit.
+
+ Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2006 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>
+
+#include "xalloc.h"
+
+#include <stdlib.h>
+
+#include "error.h"
+#include "exitfail.h"
+
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+
+void
+xalloc_die (void)
+{
+ error (exit_failure, 0, "%s", _("memory exhausted"));
+
+ /* The `noreturn' cannot be given to error, since it may return if
+ its first argument is 0. To help compilers understand the
+ xalloc_die does not return, call abort. Also, the abort is a
+ safety feature if exit_failure is 0 (which shouldn't happen). */
+ abort ();
+}
diff --git a/gnulib/lib/xalloc.h b/gnulib/lib/xalloc.h
new file mode 100644
index 0000000..57a13e0
--- /dev/null
+++ b/gnulib/lib/xalloc.h
@@ -0,0 +1,280 @@
+/* xalloc.h -- malloc with out-of-memory checking
+
+ Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+ 1999, 2000, 2003, 2004, 2006, 2007, 2008 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/>. */
+
+#ifndef XALLOC_H_
+# define XALLOC_H_
+
+# include <stddef.h>
+
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+
+# ifndef __attribute__
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
+# define __attribute__(x)
+# endif
+# endif
+
+# ifndef ATTRIBUTE_NORETURN
+# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
+# endif
+
+# ifndef ATTRIBUTE_MALLOC
+# if __GNUC__ >= 3
+# define ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+# else
+# define ATTRIBUTE_MALLOC
+# endif
+# endif
+
+/* This function is always triggered when memory is exhausted.
+ It must be defined by the application, either explicitly
+ or by using gnulib's xalloc-die module. This is the
+ function to call when one wants the program to die because of a
+ memory allocation failure. */
+extern void xalloc_die (void) ATTRIBUTE_NORETURN;
+
+void *xmalloc (size_t s) ATTRIBUTE_MALLOC;
+void *xzalloc (size_t s) ATTRIBUTE_MALLOC;
+void *xcalloc (size_t n, size_t s) ATTRIBUTE_MALLOC;
+void *xrealloc (void *p, size_t s);
+void *x2realloc (void *p, size_t *pn);
+void *xmemdup (void const *p, size_t s) ATTRIBUTE_MALLOC;
+char *xstrdup (char const *str) ATTRIBUTE_MALLOC;
+
+/* Return 1 if an array of N objects, each of size S, cannot exist due
+ to size arithmetic overflow. S must be positive and N must be
+ nonnegative. This is a macro, not an inline function, so that it
+ works correctly even when SIZE_MAX < N.
+
+ By gnulib convention, SIZE_MAX represents overflow in size
+ calculations, so the conservative dividend to use here is
+ SIZE_MAX - 1, since SIZE_MAX might represent an overflowed value.
+ However, malloc (SIZE_MAX) fails on all known hosts where
+ sizeof (ptrdiff_t) <= sizeof (size_t), so do not bother to test for
+ exactly-SIZE_MAX allocations on such hosts; this avoids a test and
+ branch when S is known to be 1. */
+# define xalloc_oversized(n, s) \
+ ((size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) < (n))
+
+
+/* In the following macros, T must be an elementary or structure/union or
+ typedef'ed type, or a pointer to such a type. To apply one of the
+ following macros to a function pointer or array type, you need to typedef
+ it first and use the typedef name. */
+
+/* Allocate an object of type T dynamically, with error checking. */
+/* extern t *XMALLOC (typename t); */
+# define XMALLOC(t) ((t *) xmalloc (sizeof (t)))
+
+/* Allocate memory for N elements of type T, with error checking. */
+/* extern t *XNMALLOC (size_t n, typename t); */
+# define XNMALLOC(n, t) \
+ ((t *) (sizeof (t) == 1 ? xmalloc (n) : xnmalloc (n, sizeof (t))))
+
+/* Allocate an object of type T dynamically, with error checking,
+ and zero it. */
+/* extern t *XZALLOC (typename t); */
+# define XZALLOC(t) ((t *) xzalloc (sizeof (t)))
+
+/* Allocate memory for N elements of type T, with error checking,
+ and zero it. */
+/* extern t *XCALLOC (size_t n, typename t); */
+# define XCALLOC(n, t) \
+ ((t *) (sizeof (t) == 1 ? xzalloc (n) : xcalloc (n, sizeof (t))))
+
+
+# if HAVE_INLINE
+# define static_inline static inline
+# else
+ void *xnmalloc (size_t n, size_t s) ATTRIBUTE_MALLOC;
+ void *xnrealloc (void *p, size_t n, size_t s);
+ void *x2nrealloc (void *p, size_t *pn, size_t s);
+ char *xcharalloc (size_t n) ATTRIBUTE_MALLOC;
+# endif
+
+# ifdef static_inline
+
+/* Allocate an array of N objects, each with S bytes of memory,
+ dynamically, with error checking. S must be nonzero. */
+
+static_inline void *xnmalloc (size_t n, size_t s) ATTRIBUTE_MALLOC;
+static_inline void *
+xnmalloc (size_t n, size_t s)
+{
+ if (xalloc_oversized (n, s))
+ xalloc_die ();
+ return xmalloc (n * s);
+}
+
+/* Change the size of an allocated block of memory P to an array of N
+ objects each of S bytes, with error checking. S must be nonzero. */
+
+static_inline void *
+xnrealloc (void *p, size_t n, size_t s)
+{
+ if (xalloc_oversized (n, s))
+ xalloc_die ();
+ return xrealloc (p, n * s);
+}
+
+/* If P is null, allocate a block of at least *PN such objects;
+ otherwise, reallocate P so that it contains more than *PN objects
+ each of S bytes. *PN must be nonzero unless P is null, and S must
+ be nonzero. Set *PN to the new number of objects, and return the
+ pointer to the new block. *PN is never set to zero, and the
+ returned pointer is never null.
+
+ Repeated reallocations are guaranteed to make progress, either by
+ allocating an initial block with a nonzero size, or by allocating a
+ larger block.
+
+ In the following implementation, nonzero sizes are increased by a
+ factor of approximately 1.5 so that repeated reallocations have
+ O(N) overall cost rather than O(N**2) cost, but the
+ specification for this function does not guarantee that rate.
+
+ Here is an example of use:
+
+ int *p = NULL;
+ size_t used = 0;
+ size_t allocated = 0;
+
+ void
+ append_int (int value)
+ {
+ if (used == allocated)
+ p = x2nrealloc (p, &allocated, sizeof *p);
+ p[used++] = value;
+ }
+
+ This causes x2nrealloc to allocate a block of some nonzero size the
+ first time it is called.
+
+ To have finer-grained control over the initial size, set *PN to a
+ nonzero value before calling this function with P == NULL. For
+ example:
+
+ int *p = NULL;
+ size_t used = 0;
+ size_t allocated = 0;
+ size_t allocated1 = 1000;
+
+ void
+ append_int (int value)
+ {
+ if (used == allocated)
+ {
+ p = x2nrealloc (p, &allocated1, sizeof *p);
+ allocated = allocated1;
+ }
+ p[used++] = value;
+ }
+
+ */
+
+static_inline void *
+x2nrealloc (void *p, size_t *pn, size_t s)
+{
+ size_t n = *pn;
+
+ if (! p)
+ {
+ if (! n)
+ {
+ /* The approximate size to use for initial small allocation
+ requests, when the invoking code specifies an old size of
+ zero. 64 bytes is the largest "small" request for the
+ GNU C library malloc. */
+ enum { DEFAULT_MXFAST = 64 };
+
+ n = DEFAULT_MXFAST / s;
+ n += !n;
+ }
+ }
+ else
+ {
+ /* Set N = ceil (1.5 * N) so that progress is made if N == 1.
+ Check for overflow, so that N * S stays in size_t range.
+ The check is slightly conservative, but an exact check isn't
+ worth the trouble. */
+ if ((size_t) -1 / 3 * 2 / s <= n)
+ xalloc_die ();
+ n += (n + 1) / 2;
+ }
+
+ *pn = n;
+ return xrealloc (p, n * s);
+}
+
+/* Return a pointer to a new buffer of N bytes. This is like xmalloc,
+ except it returns char *. */
+
+static_inline char *xcharalloc (size_t n) ATTRIBUTE_MALLOC;
+static_inline char *
+xcharalloc (size_t n)
+{
+ return XNMALLOC (n, char);
+}
+
+# endif
+
+# ifdef __cplusplus
+}
+
+/* C++ does not allow conversions from void * to other pointer types
+ without a cast. Use templates to work around the problem when
+ possible. */
+
+template <typename T> inline T *
+xrealloc (T *p, size_t s)
+{
+ return (T *) xrealloc ((void *) p, s);
+}
+
+template <typename T> inline T *
+xnrealloc (T *p, size_t n, size_t s)
+{
+ return (T *) xnrealloc ((void *) p, n, s);
+}
+
+template <typename T> inline T *
+x2realloc (T *p, size_t *pn)
+{
+ return (T *) x2realloc ((void *) p, pn);
+}
+
+template <typename T> inline T *
+x2nrealloc (T *p, size_t *pn, size_t s)
+{
+ return (T *) x2nrealloc ((void *) p, pn, s);
+}
+
+template <typename T> inline T *
+xmemdup (T const *p, size_t s)
+{
+ return (T *) xmemdup ((void const *) p, s);
+}
+
+# endif
+
+
+#endif /* !XALLOC_H_ */
diff --git a/gnulib/lib/xmalloc.c b/gnulib/lib/xmalloc.c
new file mode 100644
index 0000000..89ecf17
--- /dev/null
+++ b/gnulib/lib/xmalloc.c
@@ -0,0 +1,122 @@
+/* xmalloc.c -- malloc with out of memory checking
+
+ Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+ 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2008 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>
+
+#if ! HAVE_INLINE
+# define static_inline
+#endif
+#include "xalloc.h"
+#undef static_inline
+
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef SIZE_MAX
+# define SIZE_MAX ((size_t) -1)
+#endif
+
+/* 1 if calloc is known to be compatible with GNU calloc. This
+ matters if we are not also using the calloc module, which defines
+ HAVE_CALLOC and supports the GNU API even on non-GNU platforms. */
+#if defined HAVE_CALLOC || defined __GLIBC__
+enum { HAVE_GNU_CALLOC = 1 };
+#else
+enum { HAVE_GNU_CALLOC = 0 };
+#endif
+
+/* Allocate N bytes of memory dynamically, with error checking. */
+
+void *
+xmalloc (size_t n)
+{
+ void *p = malloc (n);
+ if (!p && n != 0)
+ xalloc_die ();
+ return p;
+}
+
+/* Change the size of an allocated block of memory P to N bytes,
+ with error checking. */
+
+void *
+xrealloc (void *p, size_t n)
+{
+ p = realloc (p, n);
+ if (!p && n != 0)
+ xalloc_die ();
+ return p;
+}
+
+/* If P is null, allocate a block of at least *PN bytes; otherwise,
+ reallocate P so that it contains more than *PN bytes. *PN must be
+ nonzero unless P is null. Set *PN to the new block's size, and
+ return the pointer to the new block. *PN is never set to zero, and
+ the returned pointer is never null. */
+
+void *
+x2realloc (void *p, size_t *pn)
+{
+ return x2nrealloc (p, pn, 1);
+}
+
+/* Allocate S bytes of zeroed memory dynamically, with error checking.
+ There's no need for xnzalloc (N, S), since it would be equivalent
+ to xcalloc (N, S). */
+
+void *
+xzalloc (size_t s)
+{
+ return memset (xmalloc (s), 0, s);
+}
+
+/* Allocate zeroed memory for N elements of S bytes, with error
+ checking. S must be nonzero. */
+
+void *
+xcalloc (size_t n, size_t s)
+{
+ void *p;
+ /* Test for overflow, since some calloc implementations don't have
+ proper overflow checks. But omit overflow and size-zero tests if
+ HAVE_GNU_CALLOC, since GNU calloc catches overflow and never
+ returns NULL if successful. */
+ if ((! HAVE_GNU_CALLOC && xalloc_oversized (n, s))
+ || (! (p = calloc (n, s)) && (HAVE_GNU_CALLOC || n != 0)))
+ xalloc_die ();
+ return p;
+}
+
+/* Clone an object P of size S, with error checking. There's no need
+ for xnmemdup (P, N, S), since xmemdup (P, N * S) works without any
+ need for an arithmetic overflow check. */
+
+void *
+xmemdup (void const *p, size_t s)
+{
+ return memcpy (xmalloc (s), p, s);
+}
+
+/* Clone STRING. */
+
+char *
+xstrdup (char const *string)
+{
+ return xmemdup (string, strlen (string) + 1);
+}
diff --git a/gnulib/lib/xsetenv.c b/gnulib/lib/xsetenv.c
new file mode 100644
index 0000000..44e5c3f
--- /dev/null
+++ b/gnulib/lib/xsetenv.c
@@ -0,0 +1,38 @@
+/* Setting environment variables, with out-of-memory checking.
+ Copyright (C) 2001-2002, 2005-2007 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 "xsetenv.h"
+
+#include <stdlib.h>
+
+#include "error.h"
+#include "gettext.h"
+
+#define _(str) gettext (str)
+
+
+/* Set NAME to VALUE in the environment.
+ If REPLACE is nonzero, overwrite an existing value.
+ With error checking. */
+void
+xsetenv (const char *name, const char *value, int replace)
+{
+ if (setenv (name, value, replace) < 0)
+ error (EXIT_FAILURE, 0, _("memory exhausted"));
+}
diff --git a/gnulib/lib/xsetenv.h b/gnulib/lib/xsetenv.h
new file mode 100644
index 0000000..0b65f4f
--- /dev/null
+++ b/gnulib/lib/xsetenv.h
@@ -0,0 +1,31 @@
+/* Setting environment variables, with out-of-memory checking.
+ Copyright (C) 2001-2002, 2007 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/>. */
+
+/* Get unsetenv(). It can be used without error checking. */
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Set NAME to VALUE in the environment.
+ If REPLACE is nonzero, overwrite an existing value.
+ With error checking. */
+extern void xsetenv (const char *name, const char *value, int replace);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/gnulib/m4/alloca.m4 b/gnulib/m4/alloca.m4
new file mode 100644
index 0000000..95f54a6
--- /dev/null
+++ b/gnulib/m4/alloca.m4
@@ -0,0 +1,46 @@
+# alloca.m4 serial 8
+dnl Copyright (C) 2002-2004, 2006, 2007 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_ALLOCA],
+[
+ dnl Work around a bug of AC_EGREP_CPP in autoconf-2.57.
+ AC_REQUIRE([AC_PROG_CPP])
+ AC_REQUIRE([AC_PROG_EGREP])
+
+ 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])
+])
+
+# Prerequisites of lib/alloca.c.
+# STACK_DIRECTION is already handled by AC_FUNC_ALLOCA.
+AC_DEFUN([gl_PREREQ_ALLOCA], [:])
diff --git a/gnulib/m4/argz.m4 b/gnulib/m4/argz.m4
new file mode 100644
index 0000000..e9d790d
--- /dev/null
+++ b/gnulib/m4/argz.m4
@@ -0,0 +1,80 @@
+# Portability macros for glibc argz. -*- Autoconf -*-
+#
+# Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gary V. Vaughan <gary@gnu.org>
+#
+# 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 6 argz.m4
+
+AC_DEFUN([gl_FUNC_ARGZ],
+[gl_PREREQ_ARGZ
+
+AC_REQUIRE([AC_C_RESTRICT])
+
+AC_CHECK_HEADERS([argz.h], [], [], [AC_INCLUDES_DEFAULT])
+
+AC_CHECK_TYPES([error_t],
+ [],
+ [AC_DEFINE([error_t], [int],
+ [Define to a type to use for `error_t' if it is not otherwise available.])
+ AC_DEFINE([__error_t_defined], [1], [Define so that glibc/gnulib argp.h
+ does not typedef error_t.])],
+ [#if defined(HAVE_ARGZ_H)
+# include <argz.h>
+#endif])
+
+ARGZ_H=
+AC_CHECK_FUNC([argz_replace], [], [ARGZ_H=argz.h; AC_LIBOBJ([argz])])
+
+dnl if have system argz functions, allow forced use of
+dnl libltdl-supplied implementation (and default to do so
+dnl on "known bad" systems). Could use a runtime check, but
+dnl (a) detecting malloc issues is notoriously unreliable
+dnl (b) only known system that declares argz functions,
+dnl provides them, yet they are broken, is cygwin
+dnl releases prior to 5-May-2007 (1.5.24 and earlier)
+dnl So, it's more straightforward simply to special case
+dnl this for known bad systems.
+AS_IF([test -z "$ARGZ_H"],
+ [AC_CACHE_CHECK(
+ [if argz actually works],
+ [lt_cv_sys_argz_works],
+ [[case $host_os in #(
+ *cygwin*)
+ lt_cv_sys_argz_works=no
+ if test "$cross_compiling" != no; then
+ lt_cv_sys_argz_works="guessing no"
+ else
+ lt_sed_extract_leading_digits='s/^\([0-9\.]*\).*/\1/'
+ save_IFS=$IFS
+ IFS=-.
+ set x `uname -r | sed -e "$lt_sed_extract_leading_digits"`
+ IFS=$save_IFS
+ lt_os_major=${2-0}
+ lt_os_minor=${3-0}
+ lt_os_micro=${4-0}
+ if test "$lt_os_major" -gt 1 \
+ || { test "$lt_os_major" -eq 1 \
+ && { test "$lt_os_minor" -gt 5 \
+ || { test "$lt_os_minor" -eq 5 \
+ && test "$lt_os_micro" -gt 24; }; }; }; then
+ lt_cv_sys_argz_works=yes
+ fi
+ fi
+ ;; #(
+ *) lt_cv_sys_argz_works=yes ;;
+ esac]])
+ AS_IF([test $lt_cv_sys_argz_works = yes],
+ [AC_DEFINE([HAVE_WORKING_ARGZ], 1,
+ [This value is set to 1 to indicate that the system argz facility works])],
+ [ARGZ_H=argz.h
+ AC_LIBOBJ([argz])])])
+
+AC_SUBST([ARGZ_H])
+])
+
+# Prerequisites of lib/argz.c.
+AC_DEFUN([gl_PREREQ_ARGZ], [:])
diff --git a/gnulib/m4/codeset.m4 b/gnulib/m4/codeset.m4
new file mode 100644
index 0000000..223955b
--- /dev/null
+++ b/gnulib/m4/codeset.m4
@@ -0,0 +1,21 @@
+# codeset.m4 serial 2 (gettext-0.16)
+dnl Copyright (C) 2000-2002, 2006 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_TRY_LINK([#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/gnulib/m4/eealloc.m4 b/gnulib/m4/eealloc.m4
new file mode 100644
index 0000000..adcfd06
--- /dev/null
+++ b/gnulib/m4/eealloc.m4
@@ -0,0 +1,32 @@
+# eealloc.m4 serial 1
+dnl Copyright (C) 2003 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_EEALLOC],
+[
+ AC_REQUIRE([gl_EEMALLOC])
+ AC_REQUIRE([gl_EEREALLOC])
+ AC_REQUIRE([AC_C_INLINE])
+])
+
+AC_DEFUN([gl_EEMALLOC],
+[
+ _AC_FUNC_MALLOC_IF(
+ [gl_cv_func_malloc_0_nonnull=1],
+ [gl_cv_func_malloc_0_nonnull=0])
+ AC_DEFINE_UNQUOTED([MALLOC_0_IS_NONNULL], $gl_cv_func_malloc_0_nonnull,
+ [If malloc(0) is != NULL, define this to 1. Otherwise define this
+ to 0.])
+])
+
+AC_DEFUN([gl_EEREALLOC],
+[
+ _AC_FUNC_REALLOC_IF(
+ [gl_cv_func_realloc_0_nonnull=1],
+ [gl_cv_func_realloc_0_nonnull=0])
+ AC_DEFINE_UNQUOTED([REALLOC_0_IS_NONNULL], $gl_cv_func_realloc_0_nonnull,
+ [If realloc(NULL,0) is != NULL, define this to 1. Otherwise define this
+ to 0.])
+])
diff --git a/gnulib/m4/environ.m4 b/gnulib/m4/environ.m4
new file mode 100644
index 0000000..fac0c05
--- /dev/null
+++ b/gnulib/m4/environ.m4
@@ -0,0 +1,36 @@
+# environ.m4 serial 1
+dnl Copyright (C) 2001-2004, 2006-2008 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_ENVIRON],
+[
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+ dnl Persuade glibc <unistd.h> to declare environ.
+ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+ gt_CHECK_VAR_DECL([#include <unistd.h>], environ)
+ if test $gt_cv_var_environ_declaration != yes; then
+ HAVE_DECL_ENVIRON=0
+ fi
+])
+
+# Check if a variable is properly declared.
+# gt_CHECK_VAR_DECL(includes,variable)
+AC_DEFUN([gt_CHECK_VAR_DECL],
+[
+ define([gt_cv_var], [gt_cv_var_]$2[_declaration])
+ AC_MSG_CHECKING([if $2 is properly declared])
+ AC_CACHE_VAL(gt_cv_var, [
+ AC_TRY_COMPILE([$1
+ extern struct { int foo; } $2;],
+ [$2.foo = 1;],
+ gt_cv_var=no,
+ gt_cv_var=yes)])
+ AC_MSG_RESULT($gt_cv_var)
+ if test $gt_cv_var = yes; then
+ AC_DEFINE([HAVE_]translit($2, [a-z], [A-Z])[_DECL], 1,
+ [Define if you have the declaration of $2.])
+ fi
+ undefine([gt_cv_var])
+])
diff --git a/gnulib/m4/error.m4 b/gnulib/m4/error.m4
new file mode 100644
index 0000000..7c7746e
--- /dev/null
+++ b/gnulib/m4/error.m4
@@ -0,0 +1,22 @@
+#serial 11
+
+# Copyright (C) 1996, 1997, 1998, 2001, 2002, 2003, 2004 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.
+
+AC_DEFUN([gl_ERROR],
+[
+ AC_FUNC_ERROR_AT_LINE
+ dnl Note: AC_FUNC_ERROR_AT_LINE does AC_LIBSOURCES([error.h, error.c]).
+ gl_PREREQ_ERROR
+])
+
+# Prerequisites of lib/error.c.
+AC_DEFUN([gl_PREREQ_ERROR],
+[
+ AC_REQUIRE([AC_FUNC_STRERROR_R])
+ :
+])
diff --git a/gnulib/m4/exitfail.m4 b/gnulib/m4/exitfail.m4
new file mode 100644
index 0000000..b7a691e
--- /dev/null
+++ b/gnulib/m4/exitfail.m4
@@ -0,0 +1,13 @@
+# exitfail.m4 serial 6
+dnl Copyright (C) 2002, 2003, 2005, 2006 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_EXITFAIL],
+[
+ AC_LIBOBJ([exitfail])
+
+ dnl No prerequisites of lib/exitfail.c.
+ :
+])
diff --git a/gnulib/m4/extensions.m4 b/gnulib/m4/extensions.m4
new file mode 100644
index 0000000..917af94
--- /dev/null
+++ b/gnulib/m4/extensions.m4
@@ -0,0 +1,82 @@
+# serial 5 -*- Autoconf -*-
+# Enable extensions on systems that normally disable them.
+
+# Copyright (C) 2003, 2006-2008 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 CVS
+# Autoconf. Perhaps we can remove this once we can assume Autoconf
+# 2.62 or later everywhere, but since CVS Autoconf mutates rapidly
+# enough in this area it's likely we'll need to redefine
+# AC_USE_SYSTEM_EXTENSIONS for quite some time.
+
+# 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([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.])
+ fi
+
+ AH_VERBATIM([__EXTENSIONS__],
+[/* Enable extensions on AIX 3, Interix. */
+#ifndef _ALL_SOURCE
+# undef _ALL_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 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([_GNU_SOURCE])
+ AC_DEFINE([_POSIX_PTHREAD_SEMANTICS])
+ AC_DEFINE([_TANDEM_SOURCE])
+])# AC_USE_SYSTEM_EXTENSIONS
+
+# gl_USE_SYSTEM_EXTENSIONS
+# ------------------------
+# Enable extensions on systems that normally disable them,
+# typically due to standards-conformance issues.
+AC_DEFUN([gl_USE_SYSTEM_EXTENSIONS],
+ [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])])
diff --git a/gnulib/m4/getopt.m4 b/gnulib/m4/getopt.m4
new file mode 100644
index 0000000..9b683c2
--- /dev/null
+++ b/gnulib/m4/getopt.m4
@@ -0,0 +1,83 @@
+# getopt.m4 serial 14
+dnl Copyright (C) 2002-2006, 2008 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.
+
+# The getopt module assume you want GNU getopt, with getopt_long etc,
+# rather than vanilla POSIX getopt. This means your code should
+# always include <getopt.h> for the getopt prototypes.
+
+AC_DEFUN([gl_GETOPT_SUBSTITUTE],
+[
+ AC_LIBOBJ([getopt])
+ AC_LIBOBJ([getopt1])
+ gl_GETOPT_SUBSTITUTE_HEADER
+ gl_PREREQ_GETOPT
+])
+
+AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER],
+[
+ GETOPT_H=getopt.h
+ AC_DEFINE([__GETOPT_PREFIX], [[rpl_]],
+ [Define to rpl_ if the getopt replacement functions and variables
+ should be used.])
+ AC_SUBST([GETOPT_H])
+])
+
+AC_DEFUN([gl_GETOPT_CHECK_HEADERS],
+[
+ if test -z "$GETOPT_H"; then
+ AC_CHECK_HEADERS([getopt.h], [], [GETOPT_H=getopt.h])
+ fi
+
+ if test -z "$GETOPT_H"; then
+ AC_CHECK_FUNCS([getopt_long_only], [], [GETOPT_H=getopt.h])
+ fi
+
+ dnl BSD getopt_long uses an incompatible method to reset option processing,
+ dnl and (as of 2004-10-15) mishandles optional option-arguments.
+ if test -z "$GETOPT_H"; then
+ AC_CHECK_DECL([optreset], [GETOPT_H=getopt.h], [], [#include <getopt.h>])
+ fi
+
+ dnl Solaris 10 getopt doesn't handle `+' as a leading character in an
+ dnl option string (as of 2005-05-05).
+ if test -z "$GETOPT_H"; then
+ AC_CACHE_CHECK([for working GNU getopt function], [gl_cv_func_gnu_getopt],
+ [AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM([[#include <getopt.h>]],
+ [[
+ char *myargv[3];
+ myargv[0] = "conftest";
+ myargv[1] = "-+";
+ myargv[2] = 0;
+ return getopt (2, myargv, "+a") != '?';
+ ]])],
+ [gl_cv_func_gnu_getopt=yes],
+ [gl_cv_func_gnu_getopt=no],
+ [dnl cross compiling - pessimistically guess based on decls
+ dnl Solaris 10 getopt doesn't handle `+' as a leading character in an
+ dnl option string (as of 2005-05-05).
+ AC_CHECK_DECL([getopt_clip],
+ [gl_cv_func_gnu_getopt=no], [gl_cv_func_gnu_getopt=yes],
+ [#include <getopt.h>])])])
+ if test "$gl_cv_func_gnu_getopt" = "no"; then
+ GETOPT_H=getopt.h
+ fi
+ fi
+])
+
+AC_DEFUN([gl_GETOPT_IFELSE],
+[
+ AC_REQUIRE([gl_GETOPT_CHECK_HEADERS])
+ AS_IF([test -n "$GETOPT_H"], [$1], [$2])
+])
+
+AC_DEFUN([gl_GETOPT], [gl_GETOPT_IFELSE([gl_GETOPT_SUBSTITUTE])])
+
+# Prerequisites of lib/getopt*.
+AC_DEFUN([gl_PREREQ_GETOPT],
+[
+ AC_CHECK_DECLS_ONCE([getenv])
+])
diff --git a/gnulib/m4/gettext.m4 b/gnulib/m4/gettext.m4
new file mode 100644
index 0000000..c9ae1f7
--- /dev/null
+++ b/gnulib/m4/gettext.m4
@@ -0,0 +1,381 @@
+# gettext.m4 serial 60 (gettext-0.17)
+dnl Copyright (C) 1995-2007 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
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2006.
+
+dnl Macro to add for using GNU gettext.
+
+dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
+dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
+dnl default (if it is not specified or empty) is 'no-libtool'.
+dnl INTLSYMBOL should be 'external' for packages with no intl directory,
+dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory.
+dnl If INTLSYMBOL is 'use-libtool', then a libtool library
+dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static,
+dnl depending on --{enable,disable}-{shared,static} and on the presence of
+dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
+dnl $(top_builddir)/intl/libintl.a will be created.
+dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
+dnl implementations (in libc or libintl) without the ngettext() function
+dnl will be ignored. If NEEDSYMBOL is specified and is
+dnl 'need-formatstring-macros', then GNU gettext implementations that don't
+dnl support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
+dnl INTLDIR is used to find the intl libraries. If empty,
+dnl the value `$(top_builddir)/intl/' is used.
+dnl
+dnl The result of the configuration is one of three cases:
+dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
+dnl and used.
+dnl Catalog format: GNU --> install in $(datadir)
+dnl Catalog extension: .mo after installation, .gmo in source tree
+dnl 2) GNU gettext has been found in the system's C library.
+dnl Catalog format: GNU --> install in $(datadir)
+dnl Catalog extension: .mo after installation, .gmo in source tree
+dnl 3) No internationalization, always use English msgid.
+dnl Catalog format: none
+dnl Catalog extension: none
+dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
+dnl The use of .gmo is historical (it was needed to avoid overwriting the
+dnl GNU format catalogs when building on a platform with an X/Open gettext),
+dnl but we keep it in order not to force irrelevant filename changes on the
+dnl maintainers.
+dnl
+AC_DEFUN([AM_GNU_GETTEXT],
+[
+ dnl Argument checking.
+ ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
+ [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
+])])])])])
+ ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
+ [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
+])])])])
+ define([gt_included_intl],
+ ifelse([$1], [external],
+ ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]),
+ [yes]))
+ define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], []))
+ gt_NEEDS_INIT
+ AM_GNU_GETTEXT_NEED([$2])
+
+ AC_REQUIRE([AM_PO_SUBDIRS])dnl
+ ifelse(gt_included_intl, yes, [
+ AC_REQUIRE([AM_INTL_SUBDIR])dnl
+ ])
+
+ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+
+ dnl Sometimes libintl requires libiconv, so first search for libiconv.
+ dnl Ideally we would do this search only after the
+ dnl if test "$USE_NLS" = "yes"; then
+ dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+ dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
+ dnl the configure script would need to contain the same shell code
+ dnl again, outside any 'if'. There are two solutions:
+ dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
+ dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
+ dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
+ dnl documented, we avoid it.
+ ifelse(gt_included_intl, yes, , [
+ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+ ])
+
+ dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation.
+ gt_INTL_MACOSX
+
+ dnl Set USE_NLS.
+ AC_REQUIRE([AM_NLS])
+
+ ifelse(gt_included_intl, yes, [
+ BUILD_INCLUDED_LIBINTL=no
+ USE_INCLUDED_LIBINTL=no
+ ])
+ LIBINTL=
+ LTLIBINTL=
+ POSUB=
+
+ dnl Add a version number to the cache macros.
+ case " $gt_needs " in
+ *" need-formatstring-macros "*) gt_api_version=3 ;;
+ *" need-ngettext "*) gt_api_version=2 ;;
+ *) gt_api_version=1 ;;
+ esac
+ gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+ gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
+ dnl If we use NLS figure out what method
+ if test "$USE_NLS" = "yes"; then
+ gt_use_preinstalled_gnugettext=no
+ ifelse(gt_included_intl, yes, [
+ AC_MSG_CHECKING([whether included gettext is requested])
+ AC_ARG_WITH(included-gettext,
+ [ --with-included-gettext use the GNU gettext library included here],
+ nls_cv_force_use_gnu_gettext=$withval,
+ nls_cv_force_use_gnu_gettext=no)
+ AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
+
+ nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+ if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+ ])
+ dnl User does not insist on using GNU NLS library. Figure out what
+ dnl to use. If GNU gettext is available we use this. Else we have
+ dnl to fall back to GNU NLS library.
+
+ if test $gt_api_version -ge 3; then
+ gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+changequote(,)dnl
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+changequote([,])dnl
+'
+ else
+ gt_revision_test_code=
+ fi
+ if test $gt_api_version -ge 2; then
+ gt_expression_test_code=' + * ngettext ("", "", 0)'
+ else
+ gt_expression_test_code=
+ fi
+
+ AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc],
+ [AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;],
+ [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings],
+ [eval "$gt_func_gnugettext_libc=yes"],
+ [eval "$gt_func_gnugettext_libc=no"])])
+
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+ dnl Sometimes libintl requires libiconv, so first search for libiconv.
+ ifelse(gt_included_intl, yes, , [
+ AM_ICONV_LINK
+ ])
+ dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
+ dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
+ dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
+ dnl even if libiconv doesn't exist.
+ AC_LIB_LINKFLAGS_BODY([intl])
+ AC_CACHE_CHECK([for GNU gettext in libintl],
+ [$gt_func_gnugettext_libintl],
+ [gt_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $INCINTL"
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBINTL"
+ dnl Now see whether libintl exists and does not depend on libiconv.
+ AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);],
+ [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
+ [eval "$gt_func_gnugettext_libintl=yes"],
+ [eval "$gt_func_gnugettext_libintl=no"])
+ dnl Now see whether libintl exists and depends on libiconv.
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
+ LIBS="$LIBS $LIBICONV"
+ AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);],
+ [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
+ [LIBINTL="$LIBINTL $LIBICONV"
+ LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+ eval "$gt_func_gnugettext_libintl=yes"
+ ])
+ fi
+ CPPFLAGS="$gt_save_CPPFLAGS"
+ LIBS="$gt_save_LIBS"])
+ fi
+
+ dnl If an already present or preinstalled GNU gettext() is found,
+ dnl use it. But if this macro is used in GNU gettext, and GNU
+ dnl gettext is already preinstalled in libintl, we update this
+ dnl libintl. (Cf. the install rule in intl/Makefile.in.)
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
+ && test "$PACKAGE" != gettext-runtime \
+ && test "$PACKAGE" != gettext-tools; }; then
+ gt_use_preinstalled_gnugettext=yes
+ else
+ dnl Reset the values set by searching for libintl.
+ LIBINTL=
+ LTLIBINTL=
+ INCINTL=
+ fi
+
+ ifelse(gt_included_intl, yes, [
+ if test "$gt_use_preinstalled_gnugettext" != "yes"; then
+ dnl GNU gettext is not found in the C library.
+ dnl Fall back on included GNU gettext library.
+ nls_cv_use_gnu_gettext=yes
+ fi
+ fi
+
+ if test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Mark actions used to generate GNU NLS library.
+ BUILD_INCLUDED_LIBINTL=yes
+ USE_INCLUDED_LIBINTL=yes
+ LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD"
+ LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD"
+ LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+ fi
+
+ CATOBJEXT=
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Mark actions to use GNU gettext tools.
+ CATOBJEXT=.gmo
+ fi
+ ])
+
+ if test -n "$INTL_MACOSX_LIBS"; then
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Some extra flags are needed during linking.
+ LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+ LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+ fi
+ fi
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ AC_DEFINE(ENABLE_NLS, 1,
+ [Define to 1 if translation of program messages to the user's native language
+ is requested.])
+ else
+ USE_NLS=no
+ fi
+ fi
+
+ AC_MSG_CHECKING([whether to use NLS])
+ AC_MSG_RESULT([$USE_NLS])
+ if test "$USE_NLS" = "yes"; then
+ AC_MSG_CHECKING([where the gettext function comes from])
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ gt_source="external libintl"
+ else
+ gt_source="libc"
+ fi
+ else
+ gt_source="included intl directory"
+ fi
+ AC_MSG_RESULT([$gt_source])
+ fi
+
+ if test "$USE_NLS" = "yes"; then
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ AC_MSG_CHECKING([how to link with libintl])
+ AC_MSG_RESULT([$LIBINTL])
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
+ fi
+
+ dnl For backward compatibility. Some packages may be using this.
+ AC_DEFINE(HAVE_GETTEXT, 1,
+ [Define if the GNU gettext() function is already present or preinstalled.])
+ AC_DEFINE(HAVE_DCGETTEXT, 1,
+ [Define if the GNU dcgettext() function is already present or preinstalled.])
+ fi
+
+ dnl We need to process the po/ directory.
+ POSUB=po
+ fi
+
+ ifelse(gt_included_intl, yes, [
+ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
+ dnl to 'yes' because some of the testsuite requires it.
+ if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
+ BUILD_INCLUDED_LIBINTL=yes
+ fi
+
+ dnl Make all variables we use known to autoconf.
+ AC_SUBST(BUILD_INCLUDED_LIBINTL)
+ AC_SUBST(USE_INCLUDED_LIBINTL)
+ AC_SUBST(CATOBJEXT)
+
+ dnl For backward compatibility. Some configure.ins may be using this.
+ nls_cv_header_intl=
+ nls_cv_header_libgt=
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ DATADIRNAME=share
+ AC_SUBST(DATADIRNAME)
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INSTOBJEXT=.mo
+ AC_SUBST(INSTOBJEXT)
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ GENCAT=gencat
+ AC_SUBST(GENCAT)
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INTLOBJS=
+ if test "$USE_INCLUDED_LIBINTL" = yes; then
+ INTLOBJS="\$(GETTOBJS)"
+ fi
+ AC_SUBST(INTLOBJS)
+
+ dnl Enable libtool support if the surrounding package wishes it.
+ INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
+ AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
+ ])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INTLLIBS="$LIBINTL"
+ AC_SUBST(INTLLIBS)
+
+ dnl Make all documented variables known to autoconf.
+ AC_SUBST(LIBINTL)
+ AC_SUBST(LTLIBINTL)
+ AC_SUBST(POSUB)
+])
+
+
+dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized.
+m4_define([gt_NEEDS_INIT],
+[
+ m4_divert_text([DEFAULTS], [gt_needs=])
+ m4_define([gt_NEEDS_INIT], [])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL])
+AC_DEFUN([AM_GNU_GETTEXT_NEED],
+[
+ m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
+AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
diff --git a/gnulib/m4/gettimeofday.m4 b/gnulib/m4/gettimeofday.m4
new file mode 100644
index 0000000..b9bbb10
--- /dev/null
+++ b/gnulib/m4/gettimeofday.m4
@@ -0,0 +1,101 @@
+#serial 11
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2007 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.
+
+dnl From Jim Meyering.
+
+AC_DEFUN([gl_FUNC_GETTIMEOFDAY],
+[
+ AC_REQUIRE([AC_C_RESTRICT])
+ AC_REQUIRE([gl_HEADER_SYS_TIME_H])
+ AC_CHECK_FUNCS_ONCE([gettimeofday])
+
+ AC_CACHE_CHECK([for gettimeofday with POSIX signature],
+ [gl_cv_func_gettimeofday_posix_signature],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <sys/time.h>
+ struct timeval c;
+ ]],
+ [[
+ int (*f) (struct timeval *restrict, void *restrict) = gettimeofday;
+ int x = f (&c, 0);
+ return !(x | c.tv_sec | c.tv_usec);
+ ]])],
+ [gl_cv_func_gettimeofday_posix_signature=yes],
+ [gl_cv_func_gettimeofday_posix_signature=no])])
+
+ gl_FUNC_GETTIMEOFDAY_CLOBBER
+
+ if test $gl_cv_func_gettimeofday_posix_signature != yes; then
+ REPLACE_GETTIMEOFDAY=1
+ SYS_TIME_H=sys/time.h
+ if test $gl_cv_func_gettimeofday_clobber != yes; then
+ AC_LIBOBJ(gettimeofday)
+ gl_PREREQ_GETTIMEOFDAY
+ fi
+ fi
+])
+
+
+dnl See if gettimeofday clobbers the static buffer that localtime uses
+dnl for its return value. The gettimeofday function from Mac OS X 10.0.4
+dnl (i.e., Darwin 1.3.7) has this problem.
+dnl
+dnl If it does, then arrange to use gettimeofday and localtime only via
+dnl the wrapper functions that work around the problem.
+
+AC_DEFUN([gl_FUNC_GETTIMEOFDAY_CLOBBER],
+[
+ AC_REQUIRE([gl_HEADER_SYS_TIME_H])
+
+ AC_CACHE_CHECK([whether gettimeofday clobbers localtime buffer],
+ [gl_cv_func_gettimeofday_clobber],
+ [AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <string.h>
+ #include <sys/time.h>
+ #include <time.h>
+ #include <stdlib.h>
+ ]],
+ [[
+ time_t t = 0;
+ struct tm *lt;
+ struct tm saved_lt;
+ struct timeval tv;
+ lt = localtime (&t);
+ saved_lt = *lt;
+ gettimeofday (&tv, NULL);
+ return memcmp (lt, &saved_lt, sizeof (struct tm)) != 0;
+ ]])],
+ [gl_cv_func_gettimeofday_clobber=no],
+ [gl_cv_func_gettimeofday_clobber=yes],
+ dnl When crosscompiling, assume it is broken.
+ [gl_cv_func_gettimeofday_clobber=yes])])
+
+ if test $gl_cv_func_gettimeofday_clobber = yes; then
+ REPLACE_GETTIMEOFDAY=1
+ SYS_TIME_H=sys/time.h
+ gl_GETTIMEOFDAY_REPLACE_LOCALTIME
+ AC_DEFINE([GETTIMEOFDAY_CLOBBERS_LOCALTIME], 1,
+ [Define if gettimeofday clobbers the localtime buffer.])
+ fi
+])
+
+AC_DEFUN([gl_GETTIMEOFDAY_REPLACE_LOCALTIME], [
+ AC_LIBOBJ(gettimeofday)
+ gl_PREREQ_GETTIMEOFDAY
+ AC_DEFINE([gmtime], [rpl_gmtime],
+ [Define to rpl_gmtime if the replacement function should be used.])
+ AC_DEFINE([localtime], [rpl_localtime],
+ [Define to rpl_localtime if the replacement function should be used.])
+])
+
+# Prerequisites of lib/gettimeofday.c.
+AC_DEFUN([gl_PREREQ_GETTIMEOFDAY], [
+ AC_CHECK_HEADERS([sys/timeb.h])
+ AC_CHECK_FUNCS([_ftime])
+])
diff --git a/gnulib/m4/glibc21.m4 b/gnulib/m4/glibc21.m4
new file mode 100644
index 0000000..d95fd98
--- /dev/null
+++ b/gnulib/m4/glibc21.m4
@@ -0,0 +1,30 @@
+# glibc21.m4 serial 3
+dnl Copyright (C) 2000-2002, 2004 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.
+
+# Test for the GNU C Library, version 2.1 or newer.
+# From Bruno Haible.
+
+AC_DEFUN([gl_GLIBC21],
+ [
+ AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer,
+ ac_cv_gnu_library_2_1,
+ [AC_EGREP_CPP([Lucky GNU user],
+ [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
+ Lucky GNU user
+ #endif
+#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/gnulib/m4/gnulib-cache.m4 b/gnulib/m4/gnulib-cache.m4
new file mode 100644
index 0000000..3ee6aa9
--- /dev/null
+++ b/gnulib/m4/gnulib-cache.m4
@@ -0,0 +1,53 @@
+# Copyright (C) 2002-2008 Free Software Foundation, Inc.
+#
+# This file is free software, distributed under the terms of the GNU
+# General Public License. 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 using CVS, this file is meant to be stored in CVS,
+# like the configure.ac and various Makefile.am files.
+
+
+# Specification in the form of a command-line invocation:
+# gnulib-tool --import --dir=. --lib=libgnu --source-base=gnulib/lib --m4-base=gnulib/m4 --doc-base=doc --aux-dir=build-aux --no-libtool --macro-prefix=gl --no-vc-files argz getopt gettext mbchar mbiter mbscasecmp mbschr mbslen mbsncasecmp mbsstr mbswidth memcpy memmem memmove mkstemp strdup strerror xalloc xsetenv
+
+# Specification in the form of a few gnulib-tool.m4 macro invocations:
+gl_LOCAL_DIR([])
+gl_MODULES([
+ argz
+ getopt
+ gettext
+ mbchar
+ mbiter
+ mbscasecmp
+ mbschr
+ mbslen
+ mbsncasecmp
+ mbsstr
+ mbswidth
+ memcpy
+ memmem
+ memmove
+ mkstemp
+ strdup
+ strerror
+ xalloc
+ xsetenv
+])
+gl_AVOID([])
+gl_SOURCE_BASE([gnulib/lib])
+gl_M4_BASE([gnulib/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_VC_FILES([false])
diff --git a/gnulib/m4/gnulib-common.m4 b/gnulib/m4/gnulib-common.m4
new file mode 100644
index 0000000..34d91c7
--- /dev/null
+++ b/gnulib/m4/gnulib-common.m4
@@ -0,0 +1,91 @@
+# gnulib-common.m4 serial 5
+dnl Copyright (C) 2007-2008 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_COMMON_BODY])
+])
+AC_DEFUN([gl_COMMON_BODY], [
+ 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 MacOS 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])
+])
+
+# gl_MODULE_INDICATOR([modulename])
+# defines a C macro indicating the presence of the given module.
+AC_DEFUN([gl_MODULE_INDICATOR],
+[
+ AC_DEFINE([GNULIB_]translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1],
+ [Define to 1 when using the gnulib module ]$1[.])
+])
+
+# 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])])])
+
+# AC_PROG_MKDIR_P
+# is a backport of autoconf-2.60's AC_PROG_MKDIR_P.
+# Remove this macro when we can assume autoconf >= 2.60.
+m4_ifdef([AC_PROG_MKDIR_P], [], [
+ AC_DEFUN([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_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
+])
diff --git a/gnulib/m4/gnulib-comp.m4 b/gnulib/m4/gnulib-comp.m4
new file mode 100644
index 0000000..ffdab3d
--- /dev/null
+++ b/gnulib/m4/gnulib-comp.m4
@@ -0,0 +1,412 @@
+# DO NOT EDIT! GENERATED AUTOMATICALLY!
+# Copyright (C) 2002-2008 Free Software Foundation, Inc.
+#
+# This file is free software, distributed under the terms of the GNU
+# General Public License. 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 using CVS, 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
+ AC_REQUIRE([AC_PROG_RANLIB])
+ AC_REQUIRE([AM_PROG_CC_C_O])
+ AC_REQUIRE([AC_GNU_SOURCE])
+ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+])
+
+# 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=
+ 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='gnulib/lib'
+ gl_FUNC_ALLOCA
+ gl_FUNC_ARGZ
+ gl_ENVIRON
+ gl_UNISTD_MODULE_INDICATOR([environ])
+ gl_ERROR
+ m4_ifdef([AM_XGETTEXT_OPTION],
+ [AM_XGETTEXT_OPTION([--flag=error:3:c-format])
+ AM_XGETTEXT_OPTION([--flag=error_at_line:5:c-format])])
+ gl_EXITFAIL
+ gl_GETOPT
+ dnl you must add AM_GNU_GETTEXT([external]) or similar to configure.ac.
+ AM_GNU_GETTEXT_VERSION([0.17])
+ AC_SUBST([LIBINTL])
+ AC_SUBST([LTLIBINTL])
+ gl_FUNC_GETTIMEOFDAY
+ gl_INLINE
+ gl_LOCALCHARSET
+ LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(top_builddir)/$gl_source_base\""
+ AC_SUBST([LOCALCHARSET_TESTS_ENVIRONMENT])
+ gl_FUNC_MALLOC_POSIX
+ gl_STDLIB_MODULE_INDICATOR([malloc-posix])
+ gl_MALLOCA
+ gl_MBCHAR
+ gl_MBITER
+ gl_FUNC_MBSCASECMP
+ gl_STRING_MODULE_INDICATOR([mbscasecmp])
+ gl_FUNC_MBSCHR
+ gl_STRING_MODULE_INDICATOR([mbschr])
+ gl_FUNC_MBSLEN
+ gl_STRING_MODULE_INDICATOR([mbslen])
+ gl_FUNC_MBSNCASECMP
+ gl_STRING_MODULE_INDICATOR([mbsncasecmp])
+ gl_FUNC_MBSSTR
+ gl_STRING_MODULE_INDICATOR([mbsstr])
+ gl_MBSWIDTH
+ gl_MBITER
+ gl_FUNC_MEMCHR
+ gl_FUNC_MEMCMP
+ gl_FUNC_MEMCPY
+ gl_FUNC_MEMMEM
+ gl_FUNC_MEMMEM_SIMPLE
+ gl_STRING_MODULE_INDICATOR([memmem])
+ gl_FUNC_MEMMOVE
+ gl_FUNC_MEMPCPY
+ gl_STRING_MODULE_INDICATOR([mempcpy])
+ gl_FUNC_MKSTEMP
+ gl_STDLIB_MODULE_INDICATOR([mkstemp])
+ gl_FUNC_SETENV
+ gl_STDLIB_MODULE_INDICATOR([setenv])
+ AM_STDBOOL_H
+ gl_STDINT_H
+ gl_STDLIB_H
+ gl_FUNC_STPCPY
+ gl_STRING_MODULE_INDICATOR([stpcpy])
+ gl_FUNC_STRDUP
+ gl_STRING_MODULE_INDICATOR([strdup])
+ gl_FUNC_STRERROR
+ gl_STRING_MODULE_INDICATOR([strerror])
+ gl_HEADER_STRING_H
+ gl_FUNC_STRNDUP
+ gl_STRING_MODULE_INDICATOR([strndup])
+ gl_FUNC_STRNLEN
+ gl_STRING_MODULE_INDICATOR([strnlen])
+ gl_HEADER_SYS_STAT_H
+ AC_PROG_MKDIR_P
+ gl_HEADER_SYS_TIME_H
+ AC_PROG_MKDIR_P
+ gl_FUNC_GEN_TEMPNAME
+ gl_UNISTD_H
+ gl_FUNC_UNSETENV
+ gl_STDLIB_MODULE_INDICATOR([unsetenv])
+ gl_WCHAR_H
+ gl_WCTYPE_H
+ gl_FUNC_WCWIDTH
+ gl_WCHAR_MODULE_INDICATOR([wcwidth])
+ gl_XALLOC
+ 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 "$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'
+ 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 "$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], [gnulib/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/link-warning.h
+ lib/alloca.in.h
+ lib/argz.c
+ lib/argz.in.h
+ lib/config.charset
+ lib/error.c
+ lib/error.h
+ lib/exitfail.c
+ lib/exitfail.h
+ lib/getopt.c
+ lib/getopt.in.h
+ lib/getopt1.c
+ lib/getopt_int.h
+ lib/gettext.h
+ lib/gettimeofday.c
+ lib/intprops.h
+ lib/localcharset.c
+ lib/localcharset.h
+ lib/malloc.c
+ lib/malloca.c
+ lib/malloca.h
+ lib/malloca.valgrind
+ lib/mbchar.c
+ lib/mbchar.h
+ lib/mbiter.h
+ lib/mbscasecmp.c
+ lib/mbschr.c
+ lib/mbslen.c
+ lib/mbsncasecmp.c
+ lib/mbsstr.c
+ lib/mbswidth.c
+ lib/mbswidth.h
+ lib/mbuiter.h
+ lib/memchr.c
+ lib/memcmp.c
+ lib/memcpy.c
+ lib/memmem.c
+ lib/memmove.c
+ lib/mempcpy.c
+ lib/mkstemp.c
+ lib/ref-add.sin
+ lib/ref-del.sin
+ lib/setenv.c
+ lib/stdbool.in.h
+ lib/stdint.in.h
+ lib/stdlib.in.h
+ lib/stpcpy.c
+ lib/str-kmp.h
+ lib/str-two-way.h
+ lib/strdup.c
+ lib/streq.h
+ lib/strerror.c
+ lib/string.in.h
+ lib/strndup.c
+ lib/strnlen.c
+ lib/strnlen1.c
+ lib/strnlen1.h
+ lib/sys_stat.in.h
+ lib/sys_time.in.h
+ lib/tempname.c
+ lib/tempname.h
+ lib/unistd.in.h
+ lib/unitypes.h
+ lib/uniwidth.h
+ lib/uniwidth/cjk.h
+ lib/uniwidth/width.c
+ lib/unsetenv.c
+ lib/wchar.in.h
+ lib/wctype.in.h
+ lib/wcwidth.c
+ lib/xalloc-die.c
+ lib/xalloc.h
+ lib/xmalloc.c
+ lib/xsetenv.c
+ lib/xsetenv.h
+ m4/alloca.m4
+ m4/argz.m4
+ m4/codeset.m4
+ m4/eealloc.m4
+ m4/environ.m4
+ m4/error.m4
+ m4/exitfail.m4
+ m4/extensions.m4
+ m4/getopt.m4
+ m4/gettext.m4
+ m4/gettimeofday.m4
+ m4/glibc2.m4
+ m4/glibc21.m4
+ m4/gnulib-common.m4
+ m4/iconv.m4
+ m4/include_next.m4
+ m4/inline.m4
+ m4/intdiv0.m4
+ m4/intl.m4
+ m4/intldir.m4
+ m4/intlmacosx.m4
+ m4/intmax.m4
+ m4/inttypes-pri.m4
+ m4/inttypes_h.m4
+ m4/lcmessage.m4
+ m4/lib-ld.m4
+ m4/lib-link.m4
+ m4/lib-prefix.m4
+ m4/localcharset.m4
+ m4/lock.m4
+ m4/longlong.m4
+ m4/malloc.m4
+ m4/malloca.m4
+ m4/mbchar.m4
+ m4/mbiter.m4
+ m4/mbrtowc.m4
+ m4/mbscasecmp.m4
+ m4/mbschr.m4
+ m4/mbslen.m4
+ m4/mbsncasecmp.m4
+ m4/mbsstr.m4
+ m4/mbstate_t.m4
+ m4/mbswidth.m4
+ m4/memchr.m4
+ m4/memcmp.m4
+ m4/memcpy.m4
+ m4/memmem.m4
+ m4/memmove.m4
+ m4/mempcpy.m4
+ m4/mkstemp.m4
+ m4/nls.m4
+ m4/onceonly.m4
+ m4/po.m4
+ m4/printf-posix.m4
+ m4/progtest.m4
+ m4/setenv.m4
+ m4/size_max.m4
+ m4/stdbool.m4
+ m4/stdint.m4
+ m4/stdint_h.m4
+ m4/stdlib_h.m4
+ m4/stpcpy.m4
+ m4/strdup.m4
+ m4/strerror.m4
+ m4/string_h.m4
+ m4/strndup.m4
+ m4/strnlen.m4
+ m4/sys_stat_h.m4
+ m4/sys_time_h.m4
+ m4/tempname.m4
+ m4/uintmax_t.m4
+ m4/unistd_h.m4
+ m4/visibility.m4
+ m4/wchar.m4
+ m4/wchar_t.m4
+ m4/wctype.m4
+ m4/wcwidth.m4
+ m4/wint_t.m4
+ m4/xalloc.m4
+ m4/xsize.m4
+])
diff --git a/gnulib/m4/iconv.m4 b/gnulib/m4/iconv.m4
new file mode 100644
index 0000000..66bc76f
--- /dev/null
+++ b/gnulib/m4/iconv.m4
@@ -0,0 +1,180 @@
+# iconv.m4 serial AM6 (gettext-0.17)
+dnl Copyright (C) 2000-2002, 2007 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_ICONV_LINKFLAGS_BODY],
+[
+ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+
+ dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+ dnl accordingly.
+ AC_LIB_LINKFLAGS_BODY([iconv])
+])
+
+AC_DEFUN([AM_ICONV_LINK],
+[
+ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
+ dnl those with the standalone portable GNU libiconv installed).
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+ dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+ dnl accordingly.
+ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+
+ dnl Add $INCICONV to CPPFLAGS before performing the following checks,
+ dnl because if the user has installed libiconv and not disabled its use
+ dnl via --without-libiconv-prefix, he wants to use it. The first
+ dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
+ am_save_CPPFLAGS="$CPPFLAGS"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
+
+ AC_CACHE_CHECK([for iconv], am_cv_func_iconv, [
+ am_cv_func_iconv="no, consider installing GNU libiconv"
+ am_cv_lib_iconv=no
+ AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+ [iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);],
+ am_cv_func_iconv=yes)
+ if test "$am_cv_func_iconv" != yes; then
+ am_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBICONV"
+ AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+ [iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);],
+ am_cv_lib_iconv=yes
+ am_cv_func_iconv=yes)
+ LIBS="$am_save_LIBS"
+ fi
+ ])
+ if test "$am_cv_func_iconv" = yes; then
+ AC_CACHE_CHECK([for working iconv], am_cv_func_iconv_works, [
+ dnl This tests against bugs in AIX 5.1 and HP-UX 11.11.
+ am_save_LIBS="$LIBS"
+ if test $am_cv_lib_iconv = yes; then
+ LIBS="$LIBS $LIBICONV"
+ fi
+ AC_TRY_RUN([
+#include <iconv.h>
+#include <string.h>
+int main ()
+{
+ /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+ returns. */
+ {
+ iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+ if (cd_utf8_to_88591 != (iconv_t)(-1))
+ {
+ static const char input[] = "\342\202\254"; /* EURO SIGN */
+ char buf[10];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_utf8_to_88591,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ return 1;
+ }
+ }
+#if 0 /* This bug could be worked around by the caller. */
+ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */
+ {
+ iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+ if (cd_88591_to_utf8 != (iconv_t)(-1))
+ {
+ static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+ char buf[50];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_88591_to_utf8,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if ((int)res > 0)
+ return 1;
+ }
+ }
+#endif
+ /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+ provided. */
+ if (/* Try standardized names. */
+ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+ /* Try IRIX, OSF/1 names. */
+ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+ /* Try AIX names. */
+ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+ /* Try HP-UX names. */
+ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+ return 1;
+ return 0;
+}], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no],
+ [case "$host_os" in
+ aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+ *) am_cv_func_iconv_works="guessing yes" ;;
+ esac])
+ LIBS="$am_save_LIBS"
+ ])
+ case "$am_cv_func_iconv_works" in
+ *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+ *) am_func_iconv=yes ;;
+ esac
+ else
+ am_func_iconv=no am_cv_lib_iconv=no
+ fi
+ if test "$am_func_iconv" = yes; then
+ AC_DEFINE(HAVE_ICONV, 1,
+ [Define if you have the iconv() function and it works.])
+ fi
+ if test "$am_cv_lib_iconv" = yes; then
+ AC_MSG_CHECKING([how to link with libiconv])
+ AC_MSG_RESULT([$LIBICONV])
+ else
+ dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
+ dnl either.
+ CPPFLAGS="$am_save_CPPFLAGS"
+ LIBICONV=
+ LTLIBICONV=
+ fi
+ AC_SUBST(LIBICONV)
+ AC_SUBST(LTLIBICONV)
+])
+
+AC_DEFUN([AM_ICONV],
+[
+ AM_ICONV_LINK
+ if test "$am_cv_func_iconv" = yes; then
+ AC_MSG_CHECKING([for iconv declaration])
+ AC_CACHE_VAL(am_cv_proto_iconv, [
+ AC_TRY_COMPILE([
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
+ am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
+ am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+ AC_MSG_RESULT([$]{ac_t:-
+ }[$]am_cv_proto_iconv)
+ AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
+ [Define as const if the declaration of iconv() needs const.])
+ fi
+])
diff --git a/gnulib/m4/include_next.m4 b/gnulib/m4/include_next.m4
new file mode 100644
index 0000000..a842e2a
--- /dev/null
+++ b/gnulib/m4/include_next.m4
@@ -0,0 +1,110 @@
+# include_next.m4 serial 6
+dnl Copyright (C) 2006-2008 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.
+
+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 conftestd1 conftestd2
+ mkdir conftestd1 conftestd2
+ cat <<EOF > conftestd1/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 > conftestd2/conftest.h
+#ifndef DEFINED_IN_CONFTESTD1
+#error "include_next test doesn't work"
+#endif
+#define DEFINED_IN_CONFTESTD2
+EOF
+ save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS -Iconftestd1 -Iconftestd2"
+ AC_COMPILE_IFELSE([#include <conftest.h>],
+ [gl_cv_have_include_next=yes],
+ [gl_cv_have_include_next=no])
+ CPPFLAGS="$save_CPPFLAGS"
+ rm -rf conftestd1 conftestd2
+ ])
+ if test $gl_cv_have_include_next = yes; then
+
+ dnl FIXME: Remove HAVE_INCLUDE_NEXT and update everything that uses it
+ dnl to use @INCLUDE_NEXT@ instead.
+ AC_DEFINE([HAVE_INCLUDE_NEXT], 1,
+ [Define if your compiler supports the #include_next directive.])
+
+ INCLUDE_NEXT=include_next
+ else
+ INCLUDE_NEXT=include
+ fi
+ AC_SUBST([INCLUDE_NEXT])
+])
+
+# 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.
+# That way, a header file with the following line:
+# #@INCLUDE_NEXT@ @NEXT_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.
+AC_DEFUN([gl_CHECK_NEXT_HEADERS],
+[
+ AC_REQUIRE([gl_INCLUDE_NEXT])
+ AC_CHECK_HEADERS_ONCE([$1])
+
+ m4_foreach_w([gl_HEADER_NAME], [$1],
+ [AS_VAR_PUSHDEF([gl_next_header],
+ [gl_cv_next_]m4_quote(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_quote(m4_defn([gl_HEADER_NAME]))[>],
+ m4_quote(m4_defn([gl_next_header])),
+ [AS_VAR_PUSHDEF([gl_header_exists],
+ [ac_cv_header_]m4_quote(m4_defn([gl_HEADER_NAME])))
+ if test AS_VAR_GET(gl_header_exists) = yes; then
+ AC_LANG_CONFTEST(
+ [AC_LANG_SOURCE(
+ [[#include <]]m4_dquote(m4_defn([gl_HEADER_NAME]))[[>]]
+ )])
+ dnl eval is necessary to expand ac_cpp.
+ dnl Ultrix and Pyramid sh refuse to redirect output of eval,
+ dnl so use subshell.
+ AS_VAR_SET([gl_next_header],
+ ['"'`(eval "$ac_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD |
+ sed -n '\#/]m4_quote(m4_defn([gl_HEADER_NAME]))[#{
+ s#.*"\(.*/]m4_quote(m4_defn([gl_HEADER_NAME]))[\)".*#\1#
+ s#^/[^/]#//&#
+ p
+ q
+ }'`'"'])
+ else
+ AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>'])
+ fi
+ AS_VAR_POPDEF([gl_header_exists])])
+ fi
+ AC_SUBST(
+ AS_TR_CPP([NEXT_]m4_quote(m4_defn([gl_HEADER_NAME]))),
+ [AS_VAR_GET([gl_next_header])])
+ AS_VAR_POPDEF([gl_next_header])])
+])
diff --git a/gnulib/m4/inline.m4 b/gnulib/m4/inline.m4
new file mode 100644
index 0000000..a07076c
--- /dev/null
+++ b/gnulib/m4/inline.m4
@@ -0,0 +1,40 @@
+# inline.m4 serial 3
+dnl Copyright (C) 2006 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 for the 'inline' keyword or equivalent.
+dnl Define 'inline' to a supported equivalent, or to nothing if not supported,
+dnl like AC_C_INLINE does. Also, define HAVE_INLINE if 'inline' or an
+dnl equivalent is effectively supported, i.e. if the compiler is likely to
+dnl drop unused 'static inline' functions.
+AC_DEFUN([gl_INLINE],
+[
+ AC_REQUIRE([AC_C_INLINE])
+ AC_CACHE_CHECK([whether the compiler generally respects inline],
+ [gl_cv_c_inline_effective],
+ [if test $ac_cv_c_inline = no; then
+ gl_cv_c_inline_effective=no
+ else
+ dnl GCC defines __NO_INLINE__ if not optimizing or if -fno-inline is
+ dnl specified.
+ dnl Use AC_COMPILE_IFELSE here, not AC_EGREP_CPP, because the result
+ dnl depends on optimization flags, which can be in CFLAGS.
+ dnl (AC_EGREP_CPP looks only at the CPPFLAGS.)
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[]],
+ [[#ifdef __NO_INLINE__
+ #error "inline is not effective"
+ #endif]])],
+ [gl_cv_c_inline_effective=yes],
+ [gl_cv_c_inline_effective=no])
+ fi
+ ])
+ if test $gl_cv_c_inline_effective = yes; then
+ AC_DEFINE([HAVE_INLINE], 1,
+ [Define to 1 if the compiler supports one of the keywords
+ 'inline', '__inline__', '__inline' and effectively inlines
+ functions marked as such.])
+ fi
+])
diff --git a/gnulib/m4/intlmacosx.m4 b/gnulib/m4/intlmacosx.m4
new file mode 100644
index 0000000..d3f0d90
--- /dev/null
+++ b/gnulib/m4/intlmacosx.m4
@@ -0,0 +1,51 @@
+# intlmacosx.m4 serial 1 (gettext-0.17)
+dnl Copyright (C) 2004-2007 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
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Checks for special options needed on MacOS X.
+dnl Defines INTL_MACOSX_LIBS.
+AC_DEFUN([gt_INTL_MACOSX],
+[
+ dnl Check for API introduced in MacOS X 10.2.
+ AC_CACHE_CHECK([for CFPreferencesCopyAppValue],
+ gt_cv_func_CFPreferencesCopyAppValue,
+ [gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ AC_TRY_LINK([#include <CoreFoundation/CFPreferences.h>],
+ [CFPreferencesCopyAppValue(NULL, NULL)],
+ [gt_cv_func_CFPreferencesCopyAppValue=yes],
+ [gt_cv_func_CFPreferencesCopyAppValue=no])
+ LIBS="$gt_save_LIBS"])
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+ AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], 1,
+ [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.])
+ fi
+ dnl Check for API introduced in MacOS X 10.3.
+ AC_CACHE_CHECK([for CFLocaleCopyCurrent], gt_cv_func_CFLocaleCopyCurrent,
+ [gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ AC_TRY_LINK([#include <CoreFoundation/CFLocale.h>], [CFLocaleCopyCurrent();],
+ [gt_cv_func_CFLocaleCopyCurrent=yes],
+ [gt_cv_func_CFLocaleCopyCurrent=no])
+ LIBS="$gt_save_LIBS"])
+ if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+ AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], 1,
+ [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.])
+ fi
+ INTL_MACOSX_LIBS=
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+ INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+ fi
+ AC_SUBST([INTL_MACOSX_LIBS])
+])
diff --git a/gnulib/m4/lib-ld.m4 b/gnulib/m4/lib-ld.m4
new file mode 100644
index 0000000..96c4e2c
--- /dev/null
+++ b/gnulib/m4/lib-ld.m4
@@ -0,0 +1,110 @@
+# lib-ld.m4 serial 3 (gettext-0.13)
+dnl Copyright (C) 1996-2003 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 Subroutines of libtool.m4,
+dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
+dnl with libtool.m4.
+
+dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
+AC_DEFUN([AC_LIB_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ acl_cv_prog_gnu_ld=yes ;;
+*)
+ acl_cv_prog_gnu_ld=no ;;
+esac])
+with_gnu_ld=$acl_cv_prog_gnu_ld
+])
+
+dnl From libtool-1.4. Sets the variable LD.
+AC_DEFUN([AC_LIB_PROG_LD],
+[AC_ARG_WITH(gnu-ld,
+[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
+test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ AC_MSG_CHECKING([for ld used by GCC])
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [[\\/]* | [A-Za-z]:[\\/]*)]
+ [re_direlt='/[^/][^/]*/\.\./']
+ # Canonicalize the path of ld
+ ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+ while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(acl_cv_path_LD,
+[if test -z "$LD"; then
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+ for ac_dir in $PATH; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ acl_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some GNU ld's only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break ;;
+ *)
+ test "$with_gnu_ld" != yes && break ;;
+ esac
+ fi
+ done
+ IFS="$ac_save_ifs"
+else
+ acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+ AC_MSG_RESULT($LD)
+else
+ AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_LIB_PROG_LD_GNU
+])
diff --git a/gnulib/m4/lib-link.m4 b/gnulib/m4/lib-link.m4
new file mode 100644
index 0000000..1602895
--- /dev/null
+++ b/gnulib/m4/lib-link.m4
@@ -0,0 +1,739 @@
+# lib-link.m4 serial 15 (gettext-0.18)
+dnl Copyright (C) 2001-2008 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.54)
+
+dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
+dnl augments the CPPFLAGS variable.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+ pushdef([Name],[translit([$1],[./-], [___])])
+ pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
+ AC_LIB_LINKFLAGS_BODY([$1], [$2])
+ ac_cv_lib[]Name[]_libs="$LIB[]NAME"
+ ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
+ ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
+ ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX"
+ ])
+ LIB[]NAME="$ac_cv_lib[]Name[]_libs"
+ LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
+ INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+ LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+ AC_SUBST([LIB]NAME)
+ AC_SUBST([LTLIB]NAME)
+ AC_SUBST([LIB]NAME[_PREFIX])
+ dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
+ dnl results of this search when this library appears as a dependency.
+ HAVE_LIB[]NAME=yes
+ popdef([NAME])
+ popdef([Name])
+])
+
+dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
+dnl searches for libname and the libraries corresponding to explicit and
+dnl implicit dependencies, together with the specified include files and
+dnl the ability to compile and link the specified testcode. If found, it
+dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
+dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
+dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
+dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+ pushdef([Name],[translit([$1],[./-], [___])])
+ pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+
+ dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
+ dnl accordingly.
+ AC_LIB_LINKFLAGS_BODY([$1], [$2])
+
+ dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
+ dnl because if the user has installed lib[]Name and not disabled its use
+ dnl via --without-lib[]Name-prefix, he wants to use it.
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+
+ AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
+ ac_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIB[]NAME"
+ AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
+ LIBS="$ac_save_LIBS"
+ ])
+ if test "$ac_cv_lib[]Name" = yes; then
+ HAVE_LIB[]NAME=yes
+ AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
+ AC_MSG_CHECKING([how to link with lib[]$1])
+ AC_MSG_RESULT([$LIB[]NAME])
+ else
+ HAVE_LIB[]NAME=no
+ dnl If $LIB[]NAME didn't lead to a usable library, we don't need
+ dnl $INC[]NAME either.
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ LIB[]NAME=
+ LTLIB[]NAME=
+ LIB[]NAME[]_PREFIX=
+ fi
+ AC_SUBST([HAVE_LIB]NAME)
+ AC_SUBST([LIB]NAME)
+ AC_SUBST([LTLIB]NAME)
+ AC_SUBST([LIB]NAME[_PREFIX])
+ popdef([NAME])
+ popdef([Name])
+])
+
+dnl Determine the platform dependent parameters needed to use rpath:
+dnl acl_libext,
+dnl acl_shlibext,
+dnl acl_hardcode_libdir_flag_spec,
+dnl acl_hardcode_libdir_separator,
+dnl acl_hardcode_direct,
+dnl acl_hardcode_minus_L.
+AC_DEFUN([AC_LIB_RPATH],
+[
+ dnl Tell automake >= 1.10 to complain if config.rpath is missing.
+ m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
+ AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS
+ AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host
+ AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
+ AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
+ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+ . ./conftest.sh
+ rm -f ./conftest.sh
+ acl_cv_rpath=done
+ ])
+ wl="$acl_cv_wl"
+ acl_libext="$acl_cv_libext"
+ acl_shlibext="$acl_cv_shlibext"
+ acl_libname_spec="$acl_cv_libname_spec"
+ acl_library_names_spec="$acl_cv_library_names_spec"
+ acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+ acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+ acl_hardcode_direct="$acl_cv_hardcode_direct"
+ acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
+ dnl Determine whether the user wants rpath handling at all.
+ AC_ARG_ENABLE(rpath,
+ [ --disable-rpath do not hardcode runtime library paths],
+ :, enable_rpath=yes)
+])
+
+dnl AC_LIB_FROMPACKAGE(name, package)
+dnl declares that libname comes from the given package. The configure file
+dnl will then not have a --with-libname-prefix option but a
+dnl --with-package-prefix option. Several libraries can come from the same
+dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar
+dnl macro call that searches for libname.
+AC_DEFUN([AC_LIB_FROMPACKAGE],
+[
+ pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ define([acl_frompackage_]NAME, [$2])
+ popdef([NAME])
+ pushdef([PACK],[$2])
+ pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ define([acl_libsinpackage_]PACKUP,
+ m4_ifdef([acl_libsinpackage_]PACKUP, [acl_libsinpackage_]PACKUP[[, ]],)[lib$1])
+ popdef([PACKUP])
+ popdef([PACK])
+])
+
+dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
+dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found
+dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])])
+ pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])])
+ dnl Autoconf >= 2.61 supports dots in --with options.
+ pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit(PACK,[.],[_])],PACK)])
+ dnl By default, look in $includedir and $libdir.
+ use_additional=yes
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ AC_ARG_WITH(P_A_C_K[-prefix],
+[[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib
+ --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]],
+[
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ fi
+ fi
+])
+ dnl Search the library and its dependencies in $additional_libdir and
+ dnl $LDFLAGS. Using breadth-first-seach.
+ LIB[]NAME=
+ LTLIB[]NAME=
+ INC[]NAME=
+ LIB[]NAME[]_PREFIX=
+ rpathdirs=
+ ltrpathdirs=
+ names_already_handled=
+ names_next_round='$1 $2'
+ while test -n "$names_next_round"; do
+ names_this_round="$names_next_round"
+ names_next_round=
+ for name in $names_this_round; do
+ already_handled=
+ for n in $names_already_handled; do
+ if test "$n" = "$name"; then
+ already_handled=yes
+ break
+ fi
+ done
+ if test -z "$already_handled"; then
+ names_already_handled="$names_already_handled $name"
+ dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
+ dnl or AC_LIB_HAVE_LINKFLAGS call.
+ uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+ eval value=\"\$HAVE_LIB$uppername\"
+ if test -n "$value"; then
+ if test "$value" = yes; then
+ eval value=\"\$LIB$uppername\"
+ test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
+ eval value=\"\$LTLIB$uppername\"
+ test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
+ else
+ dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
+ dnl that this library doesn't exist. So just drop it.
+ :
+ fi
+ else
+ dnl Search the library lib$name in $additional_libdir and $LDFLAGS
+ dnl and the already constructed $LIBNAME/$LTLIBNAME.
+ found_dir=
+ found_la=
+ found_so=
+ found_a=
+ eval libname=\"$acl_libname_spec\" # typically: libname=lib$name
+ if test -n "$acl_shlibext"; then
+ shrext=".$acl_shlibext" # typically: shrext=.so
+ else
+ shrext=
+ fi
+ if test $use_additional = yes; then
+ dir="$additional_libdir"
+ dnl The same code as in the loop below:
+ dnl First look for a shared library.
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ dnl Then look for a static library.
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ for x in $LDFLAGS $LTLIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ case "$x" in
+ -L*)
+ dir=`echo "X$x" | sed -e 's/^X-L//'`
+ dnl First look for a shared library.
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ dnl Then look for a static library.
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ ;;
+ esac
+ if test "X$found_dir" != "X"; then
+ break
+ fi
+ done
+ fi
+ if test "X$found_dir" != "X"; then
+ dnl Found the library.
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
+ if test "X$found_so" != "X"; then
+ dnl Linking with a shared library. We attempt to hardcode its
+ dnl directory into the executable's runpath, unless it's the
+ dnl standard /usr/lib.
+ if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then
+ dnl No hardcoding is needed.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ dnl Use an explicit option to hardcode DIR into the resulting
+ dnl binary.
+ dnl Potentially add DIR to ltrpathdirs.
+ dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $found_dir"
+ fi
+ dnl The hardcoding into $LIBNAME is system dependent.
+ if test "$acl_hardcode_direct" = yes; then
+ dnl Using DIR/libNAME.so during linking hardcodes DIR into the
+ dnl resulting binary.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ dnl Use an explicit option to hardcode DIR into the resulting
+ dnl binary.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ dnl Potentially add DIR to rpathdirs.
+ dnl The rpathdirs will be appended to $LIBNAME at the end.
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $found_dir"
+ fi
+ else
+ dnl Rely on "-L$found_dir".
+ dnl But don't add it if it's already contained in the LDFLAGS
+ dnl or the already constructed $LIBNAME
+ haveit=
+ for x in $LDFLAGS $LIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
+ fi
+ if test "$acl_hardcode_minus_L" != no; then
+ dnl FIXME: Not sure whether we should use
+ dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+ dnl here.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH
+ dnl here, because this doesn't fit in flags passed to the
+ dnl compiler. So give up. No hardcoding. This affects only
+ dnl very old systems.
+ dnl FIXME: Not sure whether we should use
+ dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+ dnl here.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+ fi
+ fi
+ fi
+ fi
+ else
+ if test "X$found_a" != "X"; then
+ dnl Linking with a static library.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
+ else
+ dnl We shouldn't come here, but anyway it's good to have a
+ dnl fallback.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
+ fi
+ fi
+ dnl Assume the include files are nearby.
+ additional_includedir=
+ case "$found_dir" in
+ */$acl_libdirstem | */$acl_libdirstem/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+ LIB[]NAME[]_PREFIX="$basedir"
+ additional_includedir="$basedir/include"
+ ;;
+ esac
+ if test "X$additional_includedir" != "X"; then
+ dnl Potentially add $additional_includedir to $INCNAME.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/include,
+ dnl 2. if it's /usr/local/include and we are using GCC on Linux,
+ dnl 3. if it's already present in $CPPFLAGS or the already
+ dnl constructed $INCNAME,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ for x in $CPPFLAGS $INC[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ dnl Really add $additional_includedir to $INCNAME.
+ INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ fi
+ dnl Look for dependencies.
+ if test -n "$found_la"; then
+ dnl Read the .la file. It defines the variables
+ dnl dlname, library_names, old_library, dependency_libs, current,
+ dnl age, revision, installed, dlopen, dlpreopen, libdir.
+ save_libdir="$libdir"
+ case "$found_la" in
+ */* | *\\*) . "$found_la" ;;
+ *) . "./$found_la" ;;
+ esac
+ libdir="$save_libdir"
+ dnl We use only dependency_libs.
+ for dep in $dependency_libs; do
+ case "$dep" in
+ -L*)
+ additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+ dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/lib,
+ dnl 2. if it's /usr/local/lib and we are using GCC on Linux,
+ dnl 3. if it's already present in $LDFLAGS or the already
+ dnl constructed $LIBNAME,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+ haveit=
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ haveit=
+ for x in $LDFLAGS $LIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LIBNAME.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
+ fi
+ fi
+ haveit=
+ for x in $LDFLAGS $LTLIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LTLIBNAME.
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ ;;
+ -R*)
+ dir=`echo "X$dep" | sed -e 's/^X-R//'`
+ if test "$enable_rpath" != no; then
+ dnl Potentially add DIR to rpathdirs.
+ dnl The rpathdirs will be appended to $LIBNAME at the end.
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ dnl Potentially add DIR to ltrpathdirs.
+ dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $dir"
+ fi
+ fi
+ ;;
+ -l*)
+ dnl Handle this in the next round.
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+ ;;
+ *.la)
+ dnl Handle this in the next round. Throw away the .la's
+ dnl directory; it is already contained in a preceding -L
+ dnl option.
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+ ;;
+ *)
+ dnl Most likely an immediate library name.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
+ ;;
+ esac
+ done
+ fi
+ else
+ dnl Didn't find the library; assume it is in the system directories
+ dnl known to the linker and runtime loader. (All the system
+ dnl directories known to the linker should also be known to the
+ dnl runtime loader, otherwise the system is severely misconfigured.)
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
+ fi
+ fi
+ fi
+ done
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n "$acl_hardcode_libdir_separator"; then
+ dnl Weird platform: only the last -rpath option counts, the user must
+ dnl pass all path elements in one option. We can arrange that for a
+ dnl single library, but not when more than one $LIBNAMEs are used.
+ alldirs=
+ for found_dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+ done
+ dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl.
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+ else
+ dnl The -rpath options are cumulative.
+ for found_dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$found_dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+ done
+ fi
+ fi
+ if test "X$ltrpathdirs" != "X"; then
+ dnl When using libtool, the option that works for both libraries and
+ dnl executables is -R. The -R options are cumulative.
+ for found_dir in $ltrpathdirs; do
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
+ done
+ fi
+ popdef([P_A_C_K])
+ popdef([PACKLIBS])
+ popdef([PACKUP])
+ popdef([PACK])
+ popdef([NAME])
+])
+
+dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
+dnl unless already present in VAR.
+dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
+dnl contains two or three consecutive elements that belong together.
+AC_DEFUN([AC_LIB_APPENDTOVAR],
+[
+ for element in [$2]; do
+ haveit=
+ for x in $[$1]; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X$element"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ [$1]="${[$1]}${[$1]:+ }$element"
+ fi
+ done
+])
+
+dnl For those cases where a variable contains several -L and -l options
+dnl referring to unknown libraries and directories, this macro determines the
+dnl necessary additional linker options for the runtime path.
+dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL])
+dnl sets LDADDVAR to linker options needed together with LIBSVALUE.
+dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed,
+dnl otherwise linking without libtool is assumed.
+AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS],
+[
+ AC_REQUIRE([AC_LIB_RPATH])
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ $1=
+ if test "$enable_rpath" != no; then
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ dnl Use an explicit option to hardcode directories into the resulting
+ dnl binary.
+ rpathdirs=
+ next=
+ for opt in $2; do
+ if test -n "$next"; then
+ dir="$next"
+ dnl No need to hardcode the standard /usr/lib.
+ if test "X$dir" != "X/usr/$acl_libdirstem"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ next=
+ else
+ case $opt in
+ -L) next=yes ;;
+ -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'`
+ dnl No need to hardcode the standard /usr/lib.
+ if test "X$dir" != "X/usr/$acl_libdirstem"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ next= ;;
+ *) next= ;;
+ esac
+ fi
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n ""$3""; then
+ dnl libtool is used for linking. Use -R options.
+ for dir in $rpathdirs; do
+ $1="${$1}${$1:+ }-R$dir"
+ done
+ else
+ dnl The linker is used for linking directly.
+ if test -n "$acl_hardcode_libdir_separator"; then
+ dnl Weird platform: only the last -rpath option counts, the user
+ dnl must pass all path elements in one option.
+ alldirs=
+ for dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir"
+ done
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ $1="$flag"
+ else
+ dnl The -rpath options are cumulative.
+ for dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ $1="${$1}${$1:+ }$flag"
+ done
+ fi
+ fi
+ fi
+ fi
+ fi
+ AC_SUBST([$1])
+])
diff --git a/gnulib/m4/lib-prefix.m4 b/gnulib/m4/lib-prefix.m4
new file mode 100644
index 0000000..a8684e1
--- /dev/null
+++ b/gnulib/m4/lib-prefix.m4
@@ -0,0 +1,185 @@
+# lib-prefix.m4 serial 5 (gettext-0.15)
+dnl Copyright (C) 2001-2005 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 AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
+dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
+dnl require excessive bracketing.
+ifdef([AC_HELP_STRING],
+[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
+[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
+
+dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
+dnl to access previously installed libraries. The basic assumption is that
+dnl a user will want packages to use other packages he previously installed
+dnl with the same --prefix option.
+dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
+dnl libraries, but is otherwise very convenient.
+AC_DEFUN([AC_LIB_PREFIX],
+[
+ AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
+ AC_REQUIRE([AC_PROG_CC])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ dnl By default, look in $includedir and $libdir.
+ use_additional=yes
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ AC_LIB_ARG_WITH([lib-prefix],
+[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
+ --without-lib-prefix don't search for libraries in includedir and libdir],
+[
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ fi
+ fi
+])
+ if test $use_additional = yes; then
+ dnl Potentially add $additional_includedir to $CPPFLAGS.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/include,
+ dnl 2. if it's already present in $CPPFLAGS,
+ dnl 3. if it's /usr/local/include and we are using GCC on Linux,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ for x in $CPPFLAGS; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ dnl Really add $additional_includedir to $CPPFLAGS.
+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ dnl Potentially add $additional_libdir to $LDFLAGS.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/lib,
+ dnl 2. if it's already present in $LDFLAGS,
+ dnl 3. if it's /usr/local/lib and we are using GCC on Linux,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+ haveit=
+ for x in $LDFLAGS; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux*) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LDFLAGS.
+ LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ fi
+])
+
+dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
+dnl acl_final_exec_prefix, containing the values to which $prefix and
+dnl $exec_prefix will expand at the end of the configure script.
+AC_DEFUN([AC_LIB_PREPARE_PREFIX],
+[
+ dnl Unfortunately, prefix and exec_prefix get only finally determined
+ dnl at the end of configure.
+ if test "X$prefix" = "XNONE"; then
+ acl_final_prefix="$ac_default_prefix"
+ else
+ acl_final_prefix="$prefix"
+ fi
+ if test "X$exec_prefix" = "XNONE"; then
+ acl_final_exec_prefix='${prefix}'
+ else
+ acl_final_exec_prefix="$exec_prefix"
+ fi
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+ prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
+dnl variables prefix and exec_prefix bound to the values they will have
+dnl at the end of the configure script.
+AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
+[
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ $1
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_PREPARE_MULTILIB creates a variable acl_libdirstem, containing
+dnl the basename of the libdir, either "lib" or "lib64".
+AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
+[
+ dnl There is no formal standard regarding lib and lib64. The current
+ dnl practice is that on a system supporting 32-bit and 64-bit instruction
+ dnl sets or ABIs, 64-bit libraries go under $prefix/lib64 and 32-bit
+ dnl libraries go under $prefix/lib. We determine the compiler's default
+ dnl mode by looking at the compiler's library search path. If at least
+ dnl of its elements ends in /lib64 or points to a directory whose absolute
+ dnl pathname ends in /lib64, we assume a 64-bit ABI. Otherwise we use the
+ dnl default, namely "lib".
+ acl_libdirstem=lib
+ searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+ if test -n "$searchpath"; then
+ acl_save_IFS="${IFS= }"; IFS=":"
+ for searchdir in $searchpath; do
+ if test -d "$searchdir"; then
+ case "$searchdir" in
+ */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+ *) searchdir=`cd "$searchdir" && pwd`
+ case "$searchdir" in
+ */lib64 ) acl_libdirstem=lib64 ;;
+ esac ;;
+ esac
+ fi
+ done
+ IFS="$acl_save_IFS"
+ fi
+])
diff --git a/gnulib/m4/localcharset.m4 b/gnulib/m4/localcharset.m4
new file mode 100644
index 0000000..b2b7733
--- /dev/null
+++ b/gnulib/m4/localcharset.m4
@@ -0,0 +1,16 @@
+# localcharset.m4 serial 5
+dnl Copyright (C) 2002, 2004, 2006 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_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/gnulib/m4/longlong.m4 b/gnulib/m4/longlong.m4
new file mode 100644
index 0000000..15bf9da
--- /dev/null
+++ b/gnulib/m4/longlong.m4
@@ -0,0 +1,106 @@
+# longlong.m4 serial 13
+dnl Copyright (C) 1999-2007 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, but can be removed once we
+# assume 2.62 everywhere.
+
+# 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_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int],
+ [AC_LINK_IFELSE(
+ [_AC_TYPE_LONG_LONG_SNIPPET],
+ [dnl This catches a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004.
+ dnl If cross compiling, assume the bug isn't 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=yes],
+ [ac_cv_type_long_long_int=no],
+ [ac_cv_type_long_long_int=yes])],
+ [ac_cv_type_long_long_int=no])])
+ 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, but can be removed once we
+# assume 2.62 everywhere.
+
+# 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_LINK_IFELSE(
+ [_AC_TYPE_LONG_LONG_SNIPPET],
+ [ac_cv_type_unsigned_long_long_int=yes],
+ [ac_cv_type_unsigned_long_long_int=no])])
+ 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/malloc.m4 b/gnulib/m4/malloc.m4
new file mode 100644
index 0000000..764f2a9
--- /dev/null
+++ b/gnulib/m4/malloc.m4
@@ -0,0 +1,41 @@
+# malloc.m4 serial 8
+dnl Copyright (C) 2007 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_FUNC_MALLOC_POSIX
+# --------------------
+# Test whether 'malloc' is POSIX compliant (sets errno to ENOMEM when it
+# fails), and replace malloc if it is not.
+AC_DEFUN([gl_FUNC_MALLOC_POSIX],
+[
+ AC_REQUIRE([gl_CHECK_MALLOC_POSIX])
+ if test $gl_cv_func_malloc_posix = yes; then
+ HAVE_MALLOC_POSIX=1
+ AC_DEFINE([HAVE_MALLOC_POSIX], 1,
+ [Define if the 'malloc' function is POSIX compliant.])
+ else
+ AC_LIBOBJ([malloc])
+ HAVE_MALLOC_POSIX=0
+ fi
+ AC_SUBST([HAVE_MALLOC_POSIX])
+])
+
+# Test whether malloc, realloc, calloc are POSIX compliant,
+# Set gl_cv_func_malloc_posix to yes or no accordingly.
+AC_DEFUN([gl_CHECK_MALLOC_POSIX],
+[
+ AC_CACHE_CHECK([whether malloc, realloc, calloc are POSIX compliant],
+ [gl_cv_func_malloc_posix],
+ [
+ dnl It is too dangerous to try to allocate a large amount of memory:
+ dnl some systems go to their knees when you do that. So assume that
+ dnl all Unix implementations of the function are POSIX compliant.
+ AC_TRY_COMPILE([],
+ [#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+ choke me
+ #endif
+ ], [gl_cv_func_malloc_posix=yes], [gl_cv_func_malloc_posix=no])
+ ])
+])
diff --git a/gnulib/m4/malloca.m4 b/gnulib/m4/malloca.m4
new file mode 100644
index 0000000..2841ae8
--- /dev/null
+++ b/gnulib/m4/malloca.m4
@@ -0,0 +1,14 @@
+# malloca.m4 serial 1
+dnl Copyright (C) 2003-2004, 2006-2007 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_MALLOCA],
+[
+ dnl Use the autoconf tests for alloca(), but not the AC_SUBSTed variables
+ dnl @ALLOCA@ and @LTALLOCA@.
+ dnl gl_FUNC_ALLOCA dnl Already brought in by the module dependencies.
+ AC_REQUIRE([gl_EEMALLOC])
+ AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
+])
diff --git a/gnulib/m4/mbchar.m4 b/gnulib/m4/mbchar.m4
new file mode 100644
index 0000000..e73e2b4
--- /dev/null
+++ b/gnulib/m4/mbchar.m4
@@ -0,0 +1,13 @@
+# mbchar.m4 serial 7
+dnl Copyright (C) 2005-2007 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 autoconf tests required for use of mbchar.m4
+dnl From Bruno Haible.
+
+AC_DEFUN([gl_MBCHAR],
+[
+ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+])
diff --git a/gnulib/m4/mbiter.m4 b/gnulib/m4/mbiter.m4
new file mode 100644
index 0000000..7d51af1
--- /dev/null
+++ b/gnulib/m4/mbiter.m4
@@ -0,0 +1,17 @@
+# mbiter.m4 serial 2
+dnl Copyright (C) 2005 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 autoconf tests required for use of mbiter.h
+dnl From Bruno Haible.
+
+AC_DEFUN([gl_MBITER],
+[
+ AC_REQUIRE([AC_TYPE_MBSTATE_T])
+ dnl The following line is that so the user can test HAVE_MBRTOWC before
+ dnl #include "mbiter.h" or "mbuiter.h".
+ AC_REQUIRE([gl_FUNC_MBRTOWC])
+ :
+])
diff --git a/gnulib/m4/mbrtowc.m4 b/gnulib/m4/mbrtowc.m4
new file mode 100644
index 0000000..a3bd911
--- /dev/null
+++ b/gnulib/m4/mbrtowc.m4
@@ -0,0 +1,31 @@
+# mbrtowc.m4 serial 8
+dnl Copyright (C) 2001-2002, 2004-2005 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
+
+dnl This file can be removed, and gl_FUNC_MBRTOWC replaced with
+dnl AC_FUNC_MBRTOWC, when autoconf 2.60 can be assumed everywhere.
+
+AC_DEFUN([gl_FUNC_MBRTOWC],
+[
+ dnl Same as AC_FUNC_MBRTOWC in autoconf-2.60.
+ AC_CACHE_CHECK([whether mbrtowc and mbstate_t are properly declared],
+ gl_cv_func_mbrtowc,
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <wchar.h>]],
+ [[wchar_t wc;
+ char const s[] = "";
+ size_t n = 1;
+ mbstate_t state;
+ return ! (sizeof state && (mbrtowc) (&wc, s, n, &state));]])],
+ gl_cv_func_mbrtowc=yes,
+ gl_cv_func_mbrtowc=no)])
+ if test $gl_cv_func_mbrtowc = yes; then
+ AC_DEFINE([HAVE_MBRTOWC], 1,
+ [Define to 1 if mbrtowc and mbstate_t are properly declared.])
+ fi
+])
diff --git a/gnulib/m4/mbscasecmp.m4 b/gnulib/m4/mbscasecmp.m4
new file mode 100644
index 0000000..7357769
--- /dev/null
+++ b/gnulib/m4/mbscasecmp.m4
@@ -0,0 +1,16 @@
+# mbscasecmp.m4 serial 1
+dnl Copyright (C) 2007 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_MBSCASECMP],
+[
+ gl_PREREQ_MBSCASECMP
+])
+
+# Prerequisites of lib/mbscasecmp.c.
+AC_DEFUN([gl_PREREQ_MBSCASECMP], [
+ AC_REQUIRE([gl_FUNC_MBRTOWC])
+ :
+])
diff --git a/gnulib/m4/mbschr.m4 b/gnulib/m4/mbschr.m4
new file mode 100644
index 0000000..92fb618
--- /dev/null
+++ b/gnulib/m4/mbschr.m4
@@ -0,0 +1,16 @@
+# mbschr.m4 serial 1
+dnl Copyright (C) 2007 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_MBSCHR],
+[
+ gl_PREREQ_MBSCHR
+])
+
+# Prerequisites of lib/mbschr.c.
+AC_DEFUN([gl_PREREQ_MBSCHR], [
+ AC_REQUIRE([gl_FUNC_MBRTOWC])
+ :
+])
diff --git a/gnulib/m4/mbslen.m4 b/gnulib/m4/mbslen.m4
new file mode 100644
index 0000000..dad8a8c
--- /dev/null
+++ b/gnulib/m4/mbslen.m4
@@ -0,0 +1,16 @@
+# mbslen.m4 serial 1
+dnl Copyright (C) 2007 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_MBSLEN],
+[
+ gl_PREREQ_MBSLEN
+])
+
+# Prerequisites of lib/mbslen.c.
+AC_DEFUN([gl_PREREQ_MBSLEN], [
+ AC_REQUIRE([gl_FUNC_MBRTOWC])
+ :
+])
diff --git a/gnulib/m4/mbsncasecmp.m4 b/gnulib/m4/mbsncasecmp.m4
new file mode 100644
index 0000000..e590320
--- /dev/null
+++ b/gnulib/m4/mbsncasecmp.m4
@@ -0,0 +1,16 @@
+# mbsncasecmp.m4 serial 1
+dnl Copyright (C) 2007 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_MBSNCASECMP],
+[
+ gl_PREREQ_MBSNCASECMP
+])
+
+# Prerequisites of lib/mbsncasecmp.c.
+AC_DEFUN([gl_PREREQ_MBSNCASECMP], [
+ AC_REQUIRE([gl_FUNC_MBRTOWC])
+ :
+])
diff --git a/gnulib/m4/mbsstr.m4 b/gnulib/m4/mbsstr.m4
new file mode 100644
index 0000000..cec117f
--- /dev/null
+++ b/gnulib/m4/mbsstr.m4
@@ -0,0 +1,16 @@
+# mbsstr.m4 serial 1
+dnl Copyright (C) 2007 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_MBSSTR],
+[
+ gl_PREREQ_MBSSTR
+])
+
+# Prerequisites of lib/mbsstr.c.
+AC_DEFUN([gl_PREREQ_MBSSTR], [
+ AC_REQUIRE([gl_FUNC_MBRTOWC])
+ :
+])
diff --git a/gnulib/m4/mbstate_t.m4 b/gnulib/m4/mbstate_t.m4
new file mode 100644
index 0000000..0da32b6
--- /dev/null
+++ b/gnulib/m4/mbstate_t.m4
@@ -0,0 +1,30 @@
+# mbstate_t.m4 serial 10
+dnl Copyright (C) 2000-2002, 2008 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.
+
+# From Paul Eggert.
+
+# BeOS 5 has <wchar.h> but does not define mbstate_t,
+# so you can't declare an object of that type.
+# Check for this incompatibility with Standard C.
+
+# AC_TYPE_MBSTATE_T
+# -----------------
+AC_DEFUN([AC_TYPE_MBSTATE_T],
+ [AC_CACHE_CHECK([for mbstate_t], ac_cv_type_mbstate_t,
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [AC_INCLUDES_DEFAULT[
+# include <wchar.h>]],
+ [[mbstate_t x; return sizeof x;]])],
+ [ac_cv_type_mbstate_t=yes],
+ [ac_cv_type_mbstate_t=no])])
+ if test $ac_cv_type_mbstate_t = yes; then
+ AC_DEFINE([HAVE_MBSTATE_T], 1,
+ [Define to 1 if <wchar.h> declares mbstate_t.])
+ else
+ AC_DEFINE([mbstate_t], int,
+ [Define to a type if <wchar.h> does not define.])
+ fi])
diff --git a/gnulib/m4/mbswidth.m4 b/gnulib/m4/mbswidth.m4
new file mode 100644
index 0000000..241865f
--- /dev/null
+++ b/gnulib/m4/mbswidth.m4
@@ -0,0 +1,42 @@
+# mbswidth.m4 serial 14
+dnl Copyright (C) 2000-2002, 2004, 2006, 2007 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 autoconf tests required for use of mbswidth.c
+dnl From Bruno Haible.
+
+AC_DEFUN([gl_MBSWIDTH],
+[
+ AC_CHECK_HEADERS_ONCE([wchar.h])
+ AC_CHECK_FUNCS_ONCE([isascii mbsinit])
+ gl_FUNC_MBRTOWC
+
+ dnl UnixWare 7.1.1 <wchar.h> has a declaration of a function mbswidth()
+ dnl that clashes with ours.
+ AC_CACHE_CHECK([whether mbswidth is declared in <wchar.h>],
+ ac_cv_have_decl_mbswidth,
+ [AC_TRY_COMPILE([
+/* 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>
+], [
+ char *p = (char *) mbswidth;
+ return !p;
+], ac_cv_have_decl_mbswidth=yes, ac_cv_have_decl_mbswidth=no)])
+ if test $ac_cv_have_decl_mbswidth = yes; then
+ ac_val=1
+ else
+ ac_val=0
+ fi
+ AC_DEFINE_UNQUOTED(HAVE_DECL_MBSWIDTH_IN_WCHAR_H, $ac_val,
+ [Define to 1 if you have a declaration of mbswidth() in <wchar.h>, and to 0 otherwise.])
+
+ AC_TYPE_MBSTATE_T
+])
diff --git a/gnulib/m4/memchr.m4 b/gnulib/m4/memchr.m4
new file mode 100644
index 0000000..91b8636
--- /dev/null
+++ b/gnulib/m4/memchr.m4
@@ -0,0 +1,18 @@
+# memchr.m4 serial 4
+dnl Copyright (C) 2002, 2003, 2004 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_MEMCHR],
+[
+ AC_REPLACE_FUNCS(memchr)
+ if test $ac_cv_func_memchr = no; then
+ gl_PREREQ_MEMCHR
+ fi
+])
+
+# Prerequisites of lib/memchr.c.
+AC_DEFUN([gl_PREREQ_MEMCHR], [
+ AC_CHECK_HEADERS(bp-sym.h)
+])
diff --git a/gnulib/m4/memcmp.m4 b/gnulib/m4/memcmp.m4
new file mode 100644
index 0000000..a8d87b9
--- /dev/null
+++ b/gnulib/m4/memcmp.m4
@@ -0,0 +1,31 @@
+# memcmp.m4 serial 13
+dnl Copyright (C) 2002, 2003, 2004, 2007, 2008 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_MEMCMP],
+[
+ if test $cross_compiling != no; then
+ # AC_FUNC_MEMCMP as of 2.62 defaults to 'no' when cross compiling.
+ # We default to yes if memcmp appears to exist, which works
+ # better for MinGW.
+ AC_CACHE_CHECK([whether cross-compiling target has memcmp],
+ [ac_cv_func_memcmp_working],
+ [AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[#include <string.h>
+ ]], [[int ret = memcmp ("foo", "bar", 0);]])],
+ [ac_cv_func_memcmp_working=yes],
+ [ac_cv_func_memcmp_working=no])])
+ fi
+ AC_FUNC_MEMCMP
+ dnl Note: AC_FUNC_MEMCMP does AC_LIBOBJ(memcmp).
+ if test $ac_cv_func_memcmp_working = no; then
+ AC_DEFINE(memcmp, rpl_memcmp,
+ [Define to rpl_memcmp if the replacement function should be used.])
+ gl_PREREQ_MEMCMP
+ fi
+])
+
+# Prerequisites of lib/memcmp.c.
+AC_DEFUN([gl_PREREQ_MEMCMP], [:])
diff --git a/gnulib/m4/memcpy.m4 b/gnulib/m4/memcpy.m4
new file mode 100644
index 0000000..3edc62e
--- /dev/null
+++ b/gnulib/m4/memcpy.m4
@@ -0,0 +1,18 @@
+# memcpy.m4 serial 2
+dnl Copyright (C) 2002 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_MEMCPY],
+[
+ AC_REPLACE_FUNCS(memcpy)
+ if test $ac_cv_func_memcpy = no; then
+ gl_PREREQ_MEMCPY
+ fi
+])
+
+# Prerequisites of lib/memcpy.c.
+AC_DEFUN([gl_PREREQ_MEMCPY], [
+ :
+])
diff --git a/gnulib/m4/memmem.m4 b/gnulib/m4/memmem.m4
new file mode 100644
index 0000000..87ab663
--- /dev/null
+++ b/gnulib/m4/memmem.m4
@@ -0,0 +1,83 @@
+# memmem.m4 serial 13
+dnl Copyright (C) 2002, 2003, 2004, 2007, 2008 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 that memmem is present.
+AC_DEFUN([gl_FUNC_MEMMEM_SIMPLE],
+[
+ dnl Persuade glibc <string.h> to declare memmem().
+ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+ AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+ AC_REPLACE_FUNCS(memmem)
+ AC_CHECK_DECLS_ONCE(memmem)
+ if test $ac_cv_have_decl_memmem = no; then
+ HAVE_DECL_MEMMEM=0
+ fi
+ gl_PREREQ_MEMMEM
+]) # gl_FUNC_MEMMEM_SIMPLE
+
+dnl Additionally, check that memmem is efficient and handles empty needles.
+AC_DEFUN([gl_FUNC_MEMMEM],
+[
+ AC_REQUIRE([gl_FUNC_MEMMEM_SIMPLE])
+ if test $ac_cv_have_decl_memmem = yes; then
+ AC_CACHE_CHECK([whether memmem works in linear time],
+ [gl_cv_func_memmem_works],
+ [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <signal.h> /* for signal */
+#include <string.h> /* for memmem */
+#include <stdlib.h> /* for malloc */
+#include <unistd.h> /* for alarm */
+]], [[size_t m = 1000000;
+ char *haystack = (char *) malloc (2 * m + 1);
+ char *needle = (char *) malloc (m + 1);
+ void *result = 0;
+ /* Failure to compile this test due to missing alarm is okay,
+ since all such platforms (mingw) also lack memmem. */
+ signal (SIGALRM, SIG_DFL);
+ alarm (5);
+ /* Check for quadratic performance. */
+ if (haystack && needle)
+ {
+ memset (haystack, 'A', 2 * m);
+ haystack[2 * m] = 'B';
+ memset (needle, 'A', m);
+ needle[m] = 'B';
+ result = memmem (haystack, 2 * m + 1, needle, m + 1);
+ }
+ /* Check for empty needle behavior. */
+ return !result || !memmem ("a", 1, 0, 0);]])],
+ [gl_cv_func_memmem_works=yes], [gl_cv_func_memmem_works=no],
+ [dnl Only glibc >= 2.9 and cygwin >= 1.7.0 are known to have a
+ dnl memmem that works in linear time.
+ AC_EGREP_CPP([Lucky user],
+ [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 9) || (__GLIBC__ > 2)
+ Lucky user
+ #endif
+#endif
+#ifdef __CYGWIN__
+ #include <cygwin/version.h>
+ #if CYGWIN_VERSION_DLL_MAJOR >= 1007
+ Lucky user
+ #endif
+#endif
+ ],
+ [gl_cv_func_memmem_works=yes],
+ [gl_cv_func_memmem_works="guessing no"])
+ ])
+ ])
+ if test "$gl_cv_func_memmem_works" != yes; then
+ REPLACE_MEMMEM=1
+ AC_LIBOBJ([memmem])
+ fi
+ fi
+]) # gl_FUNC_MEMMEM
+
+# Prerequisites of lib/memmem.c.
+AC_DEFUN([gl_PREREQ_MEMMEM], [:])
diff --git a/gnulib/m4/memmove.m4 b/gnulib/m4/memmove.m4
new file mode 100644
index 0000000..66054e4
--- /dev/null
+++ b/gnulib/m4/memmove.m4
@@ -0,0 +1,18 @@
+# memmove.m4 serial 2
+dnl Copyright (C) 2002 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_MEMMOVE],
+[
+ AC_REPLACE_FUNCS(memmove)
+ if test $ac_cv_func_memmove = no; then
+ gl_PREREQ_MEMMOVE
+ fi
+])
+
+# Prerequisites of lib/memmove.c.
+AC_DEFUN([gl_PREREQ_MEMMOVE], [
+ :
+])
diff --git a/gnulib/m4/mempcpy.m4 b/gnulib/m4/mempcpy.m4
new file mode 100644
index 0000000..d1a12eb
--- /dev/null
+++ b/gnulib/m4/mempcpy.m4
@@ -0,0 +1,26 @@
+# mempcpy.m4 serial 9
+dnl Copyright (C) 2003, 2004, 2006, 2007 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_MEMPCPY],
+[
+ dnl Persuade glibc <string.h> to declare mempcpy().
+ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+ dnl The mempcpy() declaration in lib/string.in.h uses 'restrict'.
+ AC_REQUIRE([AC_C_RESTRICT])
+
+ AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+ AC_REPLACE_FUNCS(mempcpy)
+ if test $ac_cv_func_mempcpy = no; then
+ HAVE_MEMPCPY=0
+ gl_PREREQ_MEMPCPY
+ fi
+])
+
+# Prerequisites of lib/mempcpy.c.
+AC_DEFUN([gl_PREREQ_MEMPCPY], [
+ :
+])
diff --git a/gnulib/m4/mkstemp.m4 b/gnulib/m4/mkstemp.m4
new file mode 100644
index 0000000..20d8a1b
--- /dev/null
+++ b/gnulib/m4/mkstemp.m4
@@ -0,0 +1,56 @@
+#serial 17
+
+# Copyright (C) 2001, 2003, 2004, 2005, 2006, 2007 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.
+
+# On some hosts (e.g., HP-UX 10.20, SunOS 4.1.4, Solaris 2.5.1), mkstemp has a
+# silly limit that it can create no more than 26 files from a given template.
+# Other systems lack mkstemp altogether.
+# On OSF1/Tru64 V4.0F, the system-provided mkstemp function can create
+# only 32 files per process.
+# On systems like the above, arrange to use the replacement function.
+AC_DEFUN([gl_FUNC_MKSTEMP],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ AC_REQUIRE([AC_SYS_LARGEFILE])
+
+ AC_CACHE_CHECK([for working mkstemp],
+ [gl_cv_func_working_mkstemp],
+ [
+ mkdir conftest.mkstemp
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [AC_INCLUDES_DEFAULT],
+ [[int i;
+ off_t large = (off_t) 4294967295u;
+ if (large < 0)
+ large = 2147483647;
+ for (i = 0; i < 70; i++)
+ {
+ char templ[] = "conftest.mkstemp/coXXXXXX";
+ int (*mkstemp_function) (char *) = mkstemp;
+ int fd = mkstemp_function (templ);
+ if (fd < 0 || lseek (fd, large, SEEK_SET) != large)
+ return 1;
+ close (fd);
+ }
+ return 0;]])],
+ [gl_cv_func_working_mkstemp=yes],
+ [gl_cv_func_working_mkstemp=no],
+ [gl_cv_func_working_mkstemp=no])
+ rm -rf conftest.mkstemp
+ ])
+
+ if test $gl_cv_func_working_mkstemp != yes; then
+ REPLACE_MKSTEMP=1
+ AC_LIBOBJ([mkstemp])
+ gl_PREREQ_MKSTEMP
+ fi
+])
+
+# Prerequisites of lib/mkstemp.c.
+AC_DEFUN([gl_PREREQ_MKSTEMP],
+[
+])
diff --git a/gnulib/m4/nls.m4 b/gnulib/m4/nls.m4
new file mode 100644
index 0000000..7967cc2
--- /dev/null
+++ b/gnulib/m4/nls.m4
@@ -0,0 +1,31 @@
+# nls.m4 serial 3 (gettext-0.15)
+dnl Copyright (C) 1995-2003, 2005-2006 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
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ(2.50)
+
+AC_DEFUN([AM_NLS],
+[
+ AC_MSG_CHECKING([whether NLS is requested])
+ dnl Default is enabled NLS
+ AC_ARG_ENABLE(nls,
+ [ --disable-nls do not use Native Language Support],
+ USE_NLS=$enableval, USE_NLS=yes)
+ AC_MSG_RESULT($USE_NLS)
+ AC_SUBST(USE_NLS)
+])
diff --git a/gnulib/m4/onceonly.m4 b/gnulib/m4/onceonly.m4
new file mode 100644
index 0000000..108cd6c
--- /dev/null
+++ b/gnulib/m4/onceonly.m4
@@ -0,0 +1,90 @@
+# onceonly.m4 serial 6
+dnl Copyright (C) 2002-2003, 2005-2006, 2008 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License. As a special exception to the GNU General
+dnl Public License, 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(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(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/gnulib/m4/po.m4 b/gnulib/m4/po.m4
new file mode 100644
index 0000000..0734762
--- /dev/null
+++ b/gnulib/m4/po.m4
@@ -0,0 +1,449 @@
+# po.m4 serial 15 (gettext-0.17)
+dnl Copyright (C) 1995-2007 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
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ(2.50)
+
+dnl Checks for all prerequisites of the po subdirectory.
+AC_DEFUN([AM_PO_SUBDIRS],
+[
+ AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+ AC_REQUIRE([AC_PROG_INSTALL])dnl
+ AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
+ AC_REQUIRE([AM_NLS])dnl
+
+ dnl Release version of the gettext macros. This is used to ensure that
+ dnl the gettext macros and po/Makefile.in.in are in sync.
+ AC_SUBST([GETTEXT_MACRO_VERSION], [0.17])
+
+ dnl Perform the following tests also if --disable-nls has been given,
+ dnl because they are needed for "make dist" to work.
+
+ dnl Search for GNU msgfmt in the PATH.
+ dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
+ dnl The second test excludes FreeBSD msgfmt.
+ AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+ [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+ (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+ :)
+ AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+
+ dnl Test whether it is GNU msgfmt >= 0.15.
+changequote(,)dnl
+ case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
+ *) MSGFMT_015=$MSGFMT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([MSGFMT_015])
+changequote(,)dnl
+ case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+ *) GMSGFMT_015=$GMSGFMT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([GMSGFMT_015])
+
+ dnl Search for GNU xgettext 0.12 or newer in the PATH.
+ dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
+ dnl The second test excludes FreeBSD xgettext.
+ AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+ [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+ (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+ :)
+ dnl Remove leftover from FreeBSD xgettext call.
+ rm -f messages.po
+
+ dnl Test whether it is GNU xgettext >= 0.15.
+changequote(,)dnl
+ case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+ *) XGETTEXT_015=$XGETTEXT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([XGETTEXT_015])
+
+ dnl Search for GNU msgmerge 0.11 or newer in the PATH.
+ AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
+ [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :)
+
+ dnl Installation directories.
+ dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we
+ dnl have to define it here, so that it can be used in po/Makefile.
+ test -n "$localedir" || localedir='${datadir}/locale'
+ AC_SUBST([localedir])
+
+ dnl Support for AM_XGETTEXT_OPTION.
+ test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
+ AC_SUBST([XGETTEXT_EXTRA_OPTIONS])
+
+ AC_CONFIG_COMMANDS([po-directories], [[
+ for ac_file in $CONFIG_FILES; do
+ # Support "outfile[:infile[:infile...]]"
+ case "$ac_file" in
+ *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ esac
+ # PO directories have a Makefile.in generated from Makefile.in.in.
+ case "$ac_file" in */Makefile.in)
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+ # Treat a directory as a PO directory if and only if it has a
+ # POTFILES.in file. This allows packages to have multiple PO
+ # directories under different names or in different locations.
+ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+ rm -f "$ac_dir/POTFILES"
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+ cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+ POMAKEFILEDEPS="POTFILES.in"
+ # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+ # on $ac_dir but don't depend on user-specified configuration
+ # parameters.
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ # Hide the ALL_LINGUAS assigment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # The set of available languages was given in configure.in.
+ # Hide the ALL_LINGUAS assigment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+ fi
+ # Compute POFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+ # Compute UPDATEPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+ # Compute DUMMYPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+ # Compute GMOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ GMOFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ done
+ fi
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+ sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+ for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+ if test -f "$f"; then
+ case "$f" in
+ *.orig | *.bak | *~) ;;
+ *) cat "$f" >> "$ac_dir/Makefile" ;;
+ esac
+ fi
+ done
+ fi
+ ;;
+ esac
+ done]],
+ [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+ # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
+ # from automake < 1.5.
+ eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+ # Capture the value of LINGUAS because we need it to compute CATALOGS.
+ LINGUAS="${LINGUAS-%UNSET%}"
+ ])
+])
+
+dnl Postprocesses a Makefile in a directory containing PO files.
+AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE],
+[
+ # When this code is run, in config.status, two variables have already been
+ # set:
+ # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in,
+ # - LINGUAS is the value of the environment variable LINGUAS at configure
+ # time.
+
+changequote(,)dnl
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+
+ # Find a way to echo strings without interpreting backslash.
+ if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then
+ gt_echo='echo'
+ else
+ if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then
+ gt_echo='printf %s\n'
+ else
+ echo_func () {
+ cat <<EOT
+$*
+EOT
+ }
+ gt_echo='echo_func'
+ fi
+ fi
+
+ # A sed script that extracts the value of VARIABLE from a Makefile.
+ sed_x_variable='
+# Test if the hold space is empty.
+x
+s/P/P/
+x
+ta
+# Yes it was empty. Look if we have the expected variable definition.
+/^[ ]*VARIABLE[ ]*=/{
+ # Seen the first line of the variable definition.
+ s/^[ ]*VARIABLE[ ]*=//
+ ba
+}
+bd
+:a
+# Here we are processing a line from the variable definition.
+# Remove comment, more precisely replace it with a space.
+s/#.*$/ /
+# See if the line ends in a backslash.
+tb
+:b
+s/\\$//
+# Print the line, without the trailing backslash.
+p
+tc
+# There was no trailing backslash. The end of the variable definition is
+# reached. Clear the hold space.
+s/^.*$//
+x
+bd
+:c
+# A trailing backslash means that the variable definition continues in the
+# next line. Put a nonempty string into the hold space to indicate this.
+s/^.*$/P/
+x
+:d
+'
+changequote([,])dnl
+
+ # Set POTFILES to the value of the Makefile variable POTFILES.
+ sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`
+ POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"`
+ # Compute POTFILES_DEPS as
+ # $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
+ POTFILES_DEPS=
+ for file in $POTFILES; do
+ POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file"
+ done
+ POMAKEFILEDEPS=""
+
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.
+ sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`
+ ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
+ fi
+ # Hide the ALL_LINGUAS assigment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ # Compute POFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+ # Compute UPDATEPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+ # Compute DUMMYPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+ # Compute GMOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+ # Compute PROPERTIESFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties)
+ # Compute CLASSFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class)
+ # Compute QMFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm)
+ # Compute MSGFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg)
+ # Compute RESOURCESDLLFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll)
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ GMOFILES=
+ PROPERTIESFILES=
+ CLASSFILES=
+ QMFILES=
+ MSGFILES=
+ RESOURCESDLLFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties"
+ CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class"
+ QMFILES="$QMFILES $srcdirpre$lang.qm"
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg"
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ JAVACATALOGS=
+ QTCATALOGS=
+ TCLCATALOGS=
+ CSHARPCATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties"
+ QTCATALOGS="$QTCATALOGS $lang.qm"
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg"
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll"
+ done
+ fi
+
+ sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp"
+ if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then
+ # Add dependencies that cannot be formulated as a simple suffix rule.
+ for lang in $ALL_LINGUAS; do
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ cat >> "$ac_file.tmp" <<EOF
+$frobbedlang.msg: $lang.po
+ @echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
+ \$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+ done
+ fi
+ if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then
+ # Add dependencies that cannot be formulated as a simple suffix rule.
+ for lang in $ALL_LINGUAS; do
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ cat >> "$ac_file.tmp" <<EOF
+$frobbedlang/\$(DOMAIN).resources.dll: $lang.po
+ @echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
+ \$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+ done
+ fi
+ if test -n "$POMAKEFILEDEPS"; then
+ cat >> "$ac_file.tmp" <<EOF
+Makefile: $POMAKEFILEDEPS
+EOF
+ fi
+ mv "$ac_file.tmp" "$ac_file"
+])
+
+dnl Initializes the accumulator used by AM_XGETTEXT_OPTION.
+AC_DEFUN([AM_XGETTEXT_OPTION_INIT],
+[
+ XGETTEXT_EXTRA_OPTIONS=
+])
+
+dnl Registers an option to be passed to xgettext in the po subdirectory.
+AC_DEFUN([AM_XGETTEXT_OPTION],
+[
+ AC_REQUIRE([AM_XGETTEXT_OPTION_INIT])
+ XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1"
+])
diff --git a/gnulib/m4/progtest.m4 b/gnulib/m4/progtest.m4
new file mode 100644
index 0000000..a56365c
--- /dev/null
+++ b/gnulib/m4/progtest.m4
@@ -0,0 +1,92 @@
+# progtest.m4 serial 4 (gettext-0.14.2)
+dnl Copyright (C) 1996-2003, 2005 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
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+AC_PREREQ(2.50)
+
+# Search path for a program which passes the given test.
+
+dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
+dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+AC_DEFUN([AM_PATH_PROG_WITH_TEST],
+[
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL(ac_cv_path_$1,
+[case "[$]$1" in
+ [[\\/]]* | ?:[[\\/]]*)
+ ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in ifelse([$5], , $PATH, [$5]); do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD
+ if [$3]; then
+ ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+ ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
+ AC_MSG_RESULT([$]$1)
+else
+ AC_MSG_RESULT(no)
+fi
+AC_SUBST($1)dnl
+])
diff --git a/gnulib/m4/setenv.m4 b/gnulib/m4/setenv.m4
new file mode 100644
index 0000000..7af13d7
--- /dev/null
+++ b/gnulib/m4/setenv.m4
@@ -0,0 +1,71 @@
+# setenv.m4 serial 10
+dnl Copyright (C) 2001-2004, 2006-2008 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_SETENV],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ AC_CHECK_FUNCS_ONCE([setenv])
+ if test $ac_cv_func_setenv = no; then
+ HAVE_SETENV=0
+ AC_LIBOBJ([setenv])
+ gl_PREREQ_SETENV
+ fi
+])
+
+# Like gl_FUNC_SETENV, except prepare for separate compilation (no AC_LIBOBJ).
+AC_DEFUN([gl_FUNC_SETENV_SEPARATE],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ AC_CHECK_FUNCS_ONCE([setenv])
+ if test $ac_cv_func_setenv = no; then
+ HAVE_SETENV=0
+ fi
+ gl_PREREQ_SETENV
+])
+
+AC_DEFUN([gl_FUNC_UNSETENV],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ AC_CHECK_FUNCS([unsetenv])
+ if test $ac_cv_func_unsetenv = no; then
+ HAVE_UNSETENV=0
+ AC_LIBOBJ([unsetenv])
+ gl_PREREQ_UNSETENV
+ else
+ AC_CACHE_CHECK([for unsetenv() return type], gt_cv_func_unsetenv_ret,
+ [AC_TRY_COMPILE([#include <stdlib.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+int unsetenv (const char *name);
+#else
+int unsetenv();
+#endif
+], , gt_cv_func_unsetenv_ret='int', gt_cv_func_unsetenv_ret='void')])
+ if test $gt_cv_func_unsetenv_ret = 'void'; then
+ VOID_UNSETENV=1
+ fi
+ fi
+])
+
+# Prerequisites of lib/setenv.c.
+AC_DEFUN([gl_PREREQ_SETENV],
+[
+ AC_REQUIRE([AC_FUNC_ALLOCA])
+ AC_REQUIRE([gl_ENVIRON])
+ AC_CHECK_HEADERS_ONCE(unistd.h)
+ AC_CHECK_HEADERS(search.h)
+ AC_CHECK_FUNCS(tsearch)
+])
+
+# Prerequisites of lib/unsetenv.c.
+AC_DEFUN([gl_PREREQ_UNSETENV],
+[
+ AC_REQUIRE([gl_ENVIRON])
+ AC_CHECK_HEADERS_ONCE(unistd.h)
+])
diff --git a/gnulib/m4/stdbool.m4 b/gnulib/m4/stdbool.m4
new file mode 100644
index 0000000..2204ecd
--- /dev/null
+++ b/gnulib/m4/stdbool.m4
@@ -0,0 +1,115 @@
+# Check for stdbool.h that conforms to C99.
+
+dnl Copyright (C) 2002-2006 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.
+
+# Prepare for substituting <stdbool.h> if it is not supported.
+
+AC_DEFUN([AM_STDBOOL_H],
+[
+ AC_REQUIRE([AC_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])
+
+ 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 macro is only needed in autoconf <= 2.59. Newer versions of autoconf
+# have this macro built-in.
+
+AC_DEFUN([AC_HEADER_STDBOOL],
+ [AC_CACHE_CHECK([for stdbool.h that conforms to C99],
+ [ac_cv_header_stdbool_h],
+ [AC_TRY_COMPILE(
+ [
+ #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];
+ bool e = &s;
+ 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 };
+ _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];
+ #if defined __xlc__ || defined __GNUC__
+ /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0
+ reported by James Lemley on 2005-10-05; see
+ http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
+ This test is not quite right, since xlc is allowed to
+ reject this program, as the initializer for xlcbug is
+ not one of the forms that C requires support for.
+ However, doing the test right would require a run-time
+ test, and that would make cross-compilation harder.
+ Let us hope that IBM fixes the xlc bug, and also adds
+ support for this kind of constant expression. In the
+ meantime, this test will reject xlc, which is OK, since
+ our stdbool.h substitute should suffice. We also test
+ this with GCC, where it should work, to detect more
+ quickly whether someone messes up the test in the
+ future. */
+ char digs[] = "0123456789";
+ int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1);
+ #endif
+ /* 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;
+ ],
+ [
+ *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])
+ if test $ac_cv_header_stdbool_h = yes; then
+ AC_DEFINE(HAVE_STDBOOL_H, 1, [Define to 1 if stdbool.h conforms to C99.])
+ fi])
diff --git a/gnulib/m4/stdint.m4 b/gnulib/m4/stdint.m4
new file mode 100644
index 0000000..b255692
--- /dev/null
+++ b/gnulib/m4/stdint.m4
@@ -0,0 +1,395 @@
+# stdint.m4 serial 31
+dnl Copyright (C) 2001-2008 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([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 <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 __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */
+#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */
+#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 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))
+#define TYPE_MAXIMUM(t) \
+ ((t) ((t) 0 < (t) -1 ? (t) -1 : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 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;
+};
+ ]])],
+ [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])
+
+ dnl Check for <wchar.h> (missing in Linux uClibc when built without wide
+ dnl character support).
+ AC_CHECK_HEADERS_ONCE([wchar.h])
+
+ gl_STDINT_TYPE_PROPERTIES
+ STDINT_H=stdint.h
+ fi
+ AC_SUBST(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_]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_]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_]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_]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(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(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],
+[
+ gl_STDINT_BITSIZEOF([ptrdiff_t sig_atomic_t size_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
+ gl_INTEGER_TYPE_SUFFIX([ptrdiff_t sig_atomic_t size_t wchar_t wint_t],
+ [gl_STDINT_INCLUDES])
+])
+
+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/gnulib/m4/stdlib_h.m4 b/gnulib/m4/stdlib_h.m4
new file mode 100644
index 0000000..95e679f
--- /dev/null
+++ b/gnulib/m4/stdlib_h.m4
@@ -0,0 +1,47 @@
+# stdlib_h.m4 serial 7
+dnl Copyright (C) 2007, 2008 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_STDLIB_H],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ gl_CHECK_NEXT_HEADERS([stdlib.h])
+])
+
+AC_DEFUN([gl_STDLIB_MODULE_INDICATOR],
+[
+ dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
+])
+
+AC_DEFUN([gl_STDLIB_H_DEFAULTS],
+[
+ GNULIB_MALLOC_POSIX=0; AC_SUBST([GNULIB_MALLOC_POSIX])
+ GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX])
+ GNULIB_CALLOC_POSIX=0; AC_SUBST([GNULIB_CALLOC_POSIX])
+ GNULIB_GETSUBOPT=0; AC_SUBST([GNULIB_GETSUBOPT])
+ GNULIB_MKDTEMP=0; AC_SUBST([GNULIB_MKDTEMP])
+ GNULIB_MKSTEMP=0; AC_SUBST([GNULIB_MKSTEMP])
+ GNULIB_PUTENV=0; AC_SUBST([GNULIB_PUTENV])
+ GNULIB_RPMATCH=0; AC_SUBST([GNULIB_RPMATCH])
+ GNULIB_SETENV=0; AC_SUBST([GNULIB_SETENV])
+ GNULIB_STRTOD=0; AC_SUBST([GNULIB_STRTOD])
+ GNULIB_UNSETENV=0; AC_SUBST([GNULIB_UNSETENV])
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE_CALLOC_POSIX=1; AC_SUBST([HAVE_CALLOC_POSIX])
+ HAVE_GETSUBOPT=1; AC_SUBST([HAVE_GETSUBOPT])
+ HAVE_MALLOC_POSIX=1; AC_SUBST([HAVE_MALLOC_POSIX])
+ HAVE_MKDTEMP=1; AC_SUBST([HAVE_MKDTEMP])
+ HAVE_REALLOC_POSIX=1; AC_SUBST([HAVE_REALLOC_POSIX])
+ HAVE_RPMATCH=1; AC_SUBST([HAVE_RPMATCH])
+ HAVE_SETENV=1; AC_SUBST([HAVE_SETENV])
+ HAVE_STRTOD=1; AC_SUBST([HAVE_STRTOD])
+ HAVE_UNSETENV=1; AC_SUBST([HAVE_UNSETENV])
+ REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP])
+ REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV])
+ REPLACE_STRTOD=0; AC_SUBST([REPLACE_STRTOD])
+ VOID_UNSETENV=0; AC_SUBST([VOID_UNSETENV])
+])
diff --git a/gnulib/m4/stpcpy.m4 b/gnulib/m4/stpcpy.m4
new file mode 100644
index 0000000..c38f40e
--- /dev/null
+++ b/gnulib/m4/stpcpy.m4
@@ -0,0 +1,26 @@
+# stpcpy.m4 serial 6
+dnl Copyright (C) 2002, 2007 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_STPCPY],
+[
+ dnl Persuade glibc <string.h> to declare stpcpy().
+ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+ dnl The stpcpy() declaration in lib/string.in.h uses 'restrict'.
+ AC_REQUIRE([AC_C_RESTRICT])
+
+ AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+ AC_REPLACE_FUNCS(stpcpy)
+ if test $ac_cv_func_stpcpy = no; then
+ HAVE_STPCPY=0
+ gl_PREREQ_STPCPY
+ fi
+])
+
+# Prerequisites of lib/stpcpy.c.
+AC_DEFUN([gl_PREREQ_STPCPY], [
+ :
+])
diff --git a/gnulib/m4/strdup.m4 b/gnulib/m4/strdup.m4
new file mode 100644
index 0000000..8796e9e
--- /dev/null
+++ b/gnulib/m4/strdup.m4
@@ -0,0 +1,22 @@
+# strdup.m4 serial 9
+
+dnl Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software
+dnl 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_STRDUP],
+[
+ AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+ AC_REPLACE_FUNCS(strdup)
+ AC_CHECK_DECLS_ONCE(strdup)
+ if test $ac_cv_have_decl_strdup = no; then
+ HAVE_DECL_STRDUP=0
+ fi
+ gl_PREREQ_STRDUP
+])
+
+# Prerequisites of lib/strdup.c.
+AC_DEFUN([gl_PREREQ_STRDUP], [:])
diff --git a/gnulib/m4/strerror.m4 b/gnulib/m4/strerror.m4
new file mode 100644
index 0000000..75d5462
--- /dev/null
+++ b/gnulib/m4/strerror.m4
@@ -0,0 +1,47 @@
+# strerror.m4 serial 8
+dnl Copyright (C) 2002, 2007-2008 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_STRERROR],
+[
+ AC_REQUIRE([gl_FUNC_STRERROR_SEPARATE])
+ if test $gl_cv_func_working_strerror = no; then
+ AC_LIBOBJ([strerror])
+ AC_DEFINE_UNQUOTED([REPLACE_STRERROR], [$REPLACE_STRERROR],
+ [Define this to 1 if strerror is broken.])
+ fi
+])
+
+# Like gl_FUNC_STRERROR, except prepare for separate compilation (no AC_LIBOBJ).
+AC_DEFUN([gl_FUNC_STRERROR_SEPARATE],
+[
+ AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+ AC_CACHE_CHECK([for working strerror function],
+ [gl_cv_func_working_strerror],
+ [AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <string.h>
+ ]],
+ [[return !*strerror (-2);]])],
+ [gl_cv_func_working_strerror=yes],
+ [gl_cv_func_working_strerror=no],
+ [dnl Assume crossbuild works if it compiles.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <string.h>
+ ]],
+ [[return !*strerror (-2);]])],
+ [gl_cv_func_working_strerror=yes],
+ [gl_cv_func_working_strerror=no])])])
+ if test $gl_cv_func_working_strerror = no ; then
+ REPLACE_STRERROR=1
+ gl_PREREQ_STRERROR
+ fi
+])
+
+# Prerequisites of lib/strerror.c.
+AC_DEFUN([gl_PREREQ_STRERROR], [
+ AC_CHECK_DECLS([strerror])
+])
diff --git a/gnulib/m4/string_h.m4 b/gnulib/m4/string_h.m4
new file mode 100644
index 0000000..7143690
--- /dev/null
+++ b/gnulib/m4/string_h.m4
@@ -0,0 +1,89 @@
+# Configure a GNU-like replacement for <string.h>.
+
+# Copyright (C) 2007, 2008 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 4
+
+# 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_CHECK_NEXT_HEADERS([string.h])
+])
+
+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])
+ GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
+])
+
+AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS],
+[
+ 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_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_STRSIGNAL=0; AC_SUBST([GNULIB_STRSIGNAL])
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ 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_STRNDUP=1; AC_SUBST([HAVE_STRNDUP])
+ 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=1; AC_SUBST([HAVE_DECL_STRERROR])
+ HAVE_DECL_STRSIGNAL=1; AC_SUBST([HAVE_DECL_STRSIGNAL])
+ REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR])
+ REPLACE_STRSIGNAL=0; AC_SUBST([REPLACE_STRSIGNAL])
+ REPLACE_MEMMEM=0; AC_SUBST([REPLACE_MEMMEM])
+ REPLACE_STRCASESTR=0; AC_SUBST([REPLACE_STRCASESTR])
+ REPLACE_STRSTR=0; AC_SUBST([REPLACE_STRSTR])
+])
diff --git a/gnulib/m4/strndup.m4 b/gnulib/m4/strndup.m4
new file mode 100644
index 0000000..1be2a85
--- /dev/null
+++ b/gnulib/m4/strndup.m4
@@ -0,0 +1,53 @@
+# strndup.m4 serial 15
+dnl Copyright (C) 2002-2003, 2005-2008 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_STRNDUP],
+[
+ dnl Persuade glibc <string.h> to declare strndup().
+ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+ AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+ AC_CHECK_DECLS_ONCE([strndup])
+ if test $ac_cv_have_decl_strndup = no; then
+ HAVE_DECL_STRNDUP=0
+ fi
+
+ # AIX 4.3.3, AIX 5.1 have a function that fails to add the terminating '\0'.
+ AC_CACHE_CHECK([for working strndup], gl_cv_func_strndup,
+ [AC_RUN_IFELSE([
+ AC_LANG_PROGRAM([[#include <string.h>
+ #include <stdlib.h>]], [[
+#ifndef HAVE_DECL_STRNDUP
+ extern char *strndup (const char *, size_t);
+#endif
+ char *s;
+ s = strndup ("some longer string", 15);
+ free (s);
+ s = strndup ("shorter string", 13);
+ return s[13] != '\0';]])],
+ [gl_cv_func_strndup=yes],
+ [gl_cv_func_strndup=no],
+ [AC_CHECK_FUNC([strndup],
+ [AC_EGREP_CPP([too risky], [
+#ifdef _AIX
+ too risky
+#endif
+ ],
+ [gl_cv_func_strndup=no],
+ [gl_cv_func_strndup=yes])],
+ [gl_cv_func_strndup=no])])])
+ if test $gl_cv_func_strndup = yes; then
+ AC_DEFINE([HAVE_STRNDUP], 1,
+ [Define if you have the strndup() function and it works.])
+ else
+ HAVE_STRNDUP=0
+ AC_LIBOBJ([strndup])
+ gl_PREREQ_STRNDUP
+ fi
+])
+
+# Prerequisites of lib/strndup.c.
+AC_DEFUN([gl_PREREQ_STRNDUP], [:])
diff --git a/gnulib/m4/strnlen.m4 b/gnulib/m4/strnlen.m4
new file mode 100644
index 0000000..d8307ed
--- /dev/null
+++ b/gnulib/m4/strnlen.m4
@@ -0,0 +1,31 @@
+# strnlen.m4 serial 9
+dnl Copyright (C) 2002-2003, 2005-2007 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_STRNLEN],
+[
+ dnl Persuade glibc <string.h> to declare strnlen().
+ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+ AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+ AC_CHECK_DECLS_ONCE([strnlen])
+ if test $ac_cv_have_decl_strnlen = no; then
+ HAVE_DECL_STRNLEN=0
+ fi
+
+ AC_FUNC_STRNLEN
+ if test $ac_cv_func_strnlen_working = no; then
+ # This is necessary because automake-1.6.1 doesn't understand
+ # that the above use of AC_FUNC_STRNLEN means we may have to use
+ # lib/strnlen.c.
+ #AC_LIBOBJ(strnlen)
+ AC_DEFINE(strnlen, rpl_strnlen,
+ [Define to rpl_strnlen if the replacement function should be used.])
+ gl_PREREQ_STRNLEN
+ fi
+])
+
+# Prerequisites of lib/strnlen.c.
+AC_DEFUN([gl_PREREQ_STRNLEN], [:])
diff --git a/gnulib/m4/sys_stat_h.m4 b/gnulib/m4/sys_stat_h.m4
new file mode 100644
index 0000000..cfe8011
--- /dev/null
+++ b/gnulib/m4/sys_stat_h.m4
@@ -0,0 +1,55 @@
+# sys_stat_h.m4 serial 8 -*- Autoconf -*-
+dnl Copyright (C) 2006-2008 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 Eric Blake.
+dnl Test whether <sys/stat.h> contains lstat and mkdir or must be substituted.
+
+AC_DEFUN([gl_HEADER_SYS_STAT_H],
+[
+ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
+
+ dnl Check for lstat. Systems that lack it (mingw) also lack symlinks, so
+ dnl stat is a good replacement.
+ AC_CHECK_FUNCS_ONCE([lstat])
+ if test $ac_cv_func_lstat = yes; then
+ HAVE_LSTAT=1
+ else
+ HAVE_LSTAT=0
+ fi
+ AC_SUBST([HAVE_LSTAT])
+
+ dnl For the mkdir substitute.
+ AC_REQUIRE([AC_C_INLINE])
+
+ dnl Check for broken stat macros.
+ AC_REQUIRE([AC_HEADER_STAT])
+
+ gl_CHECK_NEXT_HEADERS([sys/stat.h])
+ SYS_STAT_H='sys/stat.h'
+ AC_SUBST([SYS_STAT_H])
+
+ dnl Define types that are supposed to be defined in <sys/types.h> or
+ dnl <sys/stat.h>.
+ AC_CHECK_TYPE([nlink_t], [],
+ [AC_DEFINE([nlink_t], [int],
+ [Define to the type of st_nlink in struct stat, or a supertype.])],
+ [#include <sys/types.h>
+ #include <sys/stat.h>])
+
+]) # gl_HEADER_SYS_STAT_H
+
+AC_DEFUN([gl_SYS_STAT_MODULE_INDICATOR],
+[
+ dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
+ GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
+])
+
+AC_DEFUN([gl_SYS_STAT_H_DEFAULTS],
+[
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ REPLACE_MKDIR=0; AC_SUBST([REPLACE_MKDIR])
+])
diff --git a/gnulib/m4/sys_time_h.m4 b/gnulib/m4/sys_time_h.m4
new file mode 100644
index 0000000..13ac576
--- /dev/null
+++ b/gnulib/m4/sys_time_h.m4
@@ -0,0 +1,57 @@
+# Configure a replacement for <sys/time.h>.
+
+# Copyright (C) 2007 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.
+
+# Written by Paul Eggert and Martin Lambers.
+
+AC_DEFUN([gl_HEADER_SYS_TIME_H],
+[
+ dnl Use AC_REQUIRE here, so that the REPLACE_GETTIMEOFDAY=0 statement
+ dnl below is expanded once only, before all REPLACE_GETTIMEOFDAY=1
+ dnl statements that occur in other macros.
+ AC_REQUIRE([gl_HEADER_SYS_TIME_H_BODY])
+])
+
+AC_DEFUN([gl_HEADER_SYS_TIME_H_BODY],
+[
+ AC_REQUIRE([AC_C_RESTRICT])
+ gl_CHECK_NEXT_HEADERS([sys/time.h])
+
+ if test $ac_cv_header_sys_time_h = yes; then
+ HAVE_SYS_TIME_H=1
+ else
+ HAVE_SYS_TIME_H=0
+ fi
+ AC_SUBST([HAVE_SYS_TIME_H])
+
+ AC_CACHE_CHECK([for struct timeval], [gl_cv_sys_struct_timeval],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#if HAVE_SYS_TIME_H
+ #include <sys/time.h>
+ #endif
+ #include <time.h>
+ ]],
+ [[static struct timeval x; x.tv_sec = x.tv_usec;]])],
+ [gl_cv_sys_struct_timeval=yes],
+ [gl_cv_sys_struct_timeval=no])])
+ if test $gl_cv_sys_struct_timeval = yes; then
+ HAVE_STRUCT_TIMEVAL=1
+ else
+ HAVE_STRUCT_TIMEVAL=0
+ fi
+ AC_SUBST([HAVE_STRUCT_TIMEVAL])
+
+ dnl Assume POSIX behavior unless another module says otherwise.
+ REPLACE_GETTIMEOFDAY=0
+ AC_SUBST([REPLACE_GETTIMEOFDAY])
+ if test $HAVE_SYS_TIME_H = 0 || test $HAVE_STRUCT_TIMEVAL = 0; then
+ SYS_TIME_H=sys/time.h
+ else
+ SYS_TIME_H=
+ fi
+ AC_SUBST([SYS_TIME_H])
+])
diff --git a/gnulib/m4/tempname.m4 b/gnulib/m4/tempname.m4
new file mode 100644
index 0000000..4c44d37
--- /dev/null
+++ b/gnulib/m4/tempname.m4
@@ -0,0 +1,22 @@
+#serial 3
+
+# Copyright (C) 2006-2007 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.
+
+# glibc provides __gen_tempname as a wrapper for mk[ds]temp. Expose
+# it as a public API, and provide it on systems that are lacking.
+AC_DEFUN([gl_FUNC_GEN_TEMPNAME],
+[
+ AC_REQUIRE([AC_SYS_LARGEFILE])
+
+ AC_LIBOBJ([tempname])
+ gl_PREREQ_TEMPNAME
+])
+
+# Prerequisites of lib/tempname.c.
+AC_DEFUN([gl_PREREQ_TEMPNAME],
+[
+ :
+])
diff --git a/gnulib/m4/unistd_h.m4 b/gnulib/m4/unistd_h.m4
new file mode 100644
index 0000000..e8ccab1
--- /dev/null
+++ b/gnulib/m4/unistd_h.m4
@@ -0,0 +1,63 @@
+# unistd_h.m4 serial 11
+dnl Copyright (C) 2006-2008 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 Simon Josefsson, Bruno Haible.
+
+AC_DEFUN([gl_UNISTD_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_UNISTD_H_DEFAULTS])
+
+ gl_CHECK_NEXT_HEADERS([unistd.h])
+
+ AC_CHECK_HEADERS_ONCE([unistd.h])
+ if test $ac_cv_header_unistd_h = yes; then
+ HAVE_UNISTD_H=1
+ else
+ HAVE_UNISTD_H=0
+ fi
+ AC_SUBST([HAVE_UNISTD_H])
+])
+
+AC_DEFUN([gl_UNISTD_MODULE_INDICATOR],
+[
+ dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+ GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
+])
+
+AC_DEFUN([gl_UNISTD_H_DEFAULTS],
+[
+ GNULIB_CHOWN=0; AC_SUBST([GNULIB_CHOWN])
+ GNULIB_DUP2=0; AC_SUBST([GNULIB_DUP2])
+ GNULIB_ENVIRON=0; AC_SUBST([GNULIB_ENVIRON])
+ GNULIB_FCHDIR=0; AC_SUBST([GNULIB_FCHDIR])
+ GNULIB_FTRUNCATE=0; AC_SUBST([GNULIB_FTRUNCATE])
+ GNULIB_GETCWD=0; AC_SUBST([GNULIB_GETCWD])
+ GNULIB_GETLOGIN_R=0; AC_SUBST([GNULIB_GETLOGIN_R])
+ GNULIB_GETPAGESIZE=0; AC_SUBST([GNULIB_GETPAGESIZE])
+ GNULIB_LCHOWN=0; AC_SUBST([GNULIB_LCHOWN])
+ GNULIB_LSEEK=0; AC_SUBST([GNULIB_LSEEK])
+ GNULIB_READLINK=0; AC_SUBST([GNULIB_READLINK])
+ GNULIB_SLEEP=0; AC_SUBST([GNULIB_SLEEP])
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE_DUP2=1; AC_SUBST([HAVE_DUP2])
+ HAVE_FTRUNCATE=1; AC_SUBST([HAVE_FTRUNCATE])
+ HAVE_GETPAGESIZE=1; AC_SUBST([HAVE_GETPAGESIZE])
+ HAVE_READLINK=1; AC_SUBST([HAVE_READLINK])
+ HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP])
+ HAVE_DECL_ENVIRON=1; AC_SUBST([HAVE_DECL_ENVIRON])
+ HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R])
+ HAVE_OS_H=0; AC_SUBST([HAVE_OS_H])
+ HAVE_SYS_PARAM_H=0; AC_SUBST([HAVE_SYS_PARAM_H])
+ REPLACE_CHOWN=0; AC_SUBST([REPLACE_CHOWN])
+ REPLACE_FCHDIR=0; AC_SUBST([REPLACE_FCHDIR])
+ REPLACE_GETCWD=0; AC_SUBST([REPLACE_GETCWD])
+ REPLACE_GETPAGESIZE=0; AC_SUBST([REPLACE_GETPAGESIZE])
+ REPLACE_LCHOWN=0; AC_SUBST([REPLACE_LCHOWN])
+ REPLACE_LSEEK=0; AC_SUBST([REPLACE_LSEEK])
+])
diff --git a/gnulib/m4/wchar.m4 b/gnulib/m4/wchar.m4
new file mode 100644
index 0000000..70b1248
--- /dev/null
+++ b/gnulib/m4/wchar.m4
@@ -0,0 +1,54 @@
+dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues.
+
+dnl Copyright (C) 2007 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.m4 serial 4
+
+AC_DEFUN([gl_WCHAR_H],
+[
+ AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+ AC_CACHE_CHECK([whether <wchar.h> is standalone],
+ [gl_cv_header_wchar_h_standalone],
+ [AC_COMPILE_IFELSE([[#include <wchar.h>
+wchar_t w;]],
+ [gl_cv_header_wchar_h_standalone=yes],
+ [gl_cv_header_wchar_h_standalone=no])])
+ if test $gl_cv_header_wchar_h_standalone != yes; then
+ WCHAR_H=wchar.h
+ fi
+
+ dnl Prepare for creating substitute <wchar.h>.
+ dnl Do it always: WCHAR_H may be empty here but can be set later.
+ dnl Check for <wchar.h> (missing in Linux uClibc when built without wide
+ dnl character support).
+ 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])
+ gl_CHECK_NEXT_HEADERS([wchar.h])
+])
+
+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])
+ GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
+])
+
+AC_DEFUN([gl_WCHAR_H_DEFAULTS],
+[
+ GNULIB_WCWIDTH=0; AC_SUBST([GNULIB_WCWIDTH])
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE_DECL_WCWIDTH=1; AC_SUBST([HAVE_DECL_WCWIDTH])
+ REPLACE_WCWIDTH=0; AC_SUBST([REPLACE_WCWIDTH])
+ WCHAR_H=
+ AC_SUBST([WCHAR_H])
+])
diff --git a/gnulib/m4/wchar_t.m4 b/gnulib/m4/wchar_t.m4
new file mode 100644
index 0000000..cde2129
--- /dev/null
+++ b/gnulib/m4/wchar_t.m4
@@ -0,0 +1,20 @@
+# wchar_t.m4 serial 1 (gettext-0.12)
+dnl Copyright (C) 2002-2003 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_TRY_COMPILE([#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.m4 b/gnulib/m4/wctype.m4
new file mode 100644
index 0000000..6a1b6f0
--- /dev/null
+++ b/gnulib/m4/wctype.m4
@@ -0,0 +1,74 @@
+# wctype.m4 serial 2
+
+dnl A placeholder for ISO C99 <wctype.h>, for platforms that lack it.
+
+dnl Copyright (C) 2006-2008 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([AC_PROG_CC])
+ 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_CHECK_HEADERS_ONCE([wctype.h])
+ AC_REQUIRE([AC_C_INLINE])
+
+ 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])
+
+ WCTYPE_H=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_TRY_RUN([#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_TRY_COMPILE([#include <stdlib.h>
+ #if __GNU_LIBRARY__ == 1
+ Linux libc5 i18n is broken.
+ #endif], [],
+ [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no])
+ ])
+ ])
+ if test $gl_cv_func_iswcntrl_works = yes; then
+ WCTYPE_H=
+ fi
+ fi
+ dnl Compute NEXT_WCTYPE_H even if WCTYPE_H is empty,
+ dnl for the benefit of builds from non-distclean directories.
+ gl_CHECK_NEXT_HEADERS([wctype.h])
+ HAVE_WCTYPE_H=1
+ else
+ HAVE_WCTYPE_H=0
+ fi
+ AC_SUBST([HAVE_WCTYPE_H])
+ AC_SUBST([WCTYPE_H])
+
+ if test "$gl_cv_func_iswcntrl_works" = no; then
+ REPLACE_ISWCNTRL=1
+ else
+ REPLACE_ISWCNTRL=0
+ fi
+ AC_SUBST([REPLACE_ISWCNTRL])
+])
diff --git a/gnulib/m4/wcwidth.m4 b/gnulib/m4/wcwidth.m4
new file mode 100644
index 0000000..04a9fc2
--- /dev/null
+++ b/gnulib/m4/wcwidth.m4
@@ -0,0 +1,85 @@
+# wcwidth.m4 serial 13
+dnl Copyright (C) 2006, 2007 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])
+
+ 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 = no; then
+ REPLACE_WCWIDTH=1
+ else
+ dnl On MacOS X 10.3, wcwidth(0x0301) (COMBINING ACUTE ACCENT) 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_TRY_RUN([
+#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 ()
+{
+ if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL)
+ if (wcwidth (0x0301) > 0 || wcwidth (0x200B) > 0)
+ return 1;
+ return 0;
+}], [gl_cv_func_wcwidth_works=yes], [gl_cv_func_wcwidth_works=no],
+ [gl_cv_func_wcwidth_works="guessing no"])
+ ])
+ case "$gl_cv_func_wcwidth_works" in
+ *yes) ;;
+ *no) REPLACE_WCWIDTH=1 ;;
+ esac
+ fi
+ if test $REPLACE_WCWIDTH = 1; then
+ AC_LIBOBJ([wcwidth])
+ fi
+
+ if test $REPLACE_WCWIDTH = 1 || test $HAVE_DECL_WCWIDTH = 0; then
+ WCHAR_H=wchar.h
+ fi
+])
diff --git a/gnulib/m4/wint_t.m4 b/gnulib/m4/wint_t.m4
new file mode 100644
index 0000000..af5ed93
--- /dev/null
+++ b/gnulib/m4/wint_t.m4
@@ -0,0 +1,28 @@
+# wint_t.m4 serial 2 (gettext-0.17)
+dnl Copyright (C) 2003, 2007 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_TRY_COMPILE([
+/* 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/gnulib/m4/xalloc.m4 b/gnulib/m4/xalloc.m4
new file mode 100644
index 0000000..837a948
--- /dev/null
+++ b/gnulib/m4/xalloc.m4
@@ -0,0 +1,24 @@
+# xalloc.m4 serial 16
+dnl Copyright (C) 2002, 2003, 2004, 2005, 2006 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_XALLOC],
+[
+ AC_LIBOBJ([xmalloc])
+
+ gl_PREREQ_XALLOC
+ gl_PREREQ_XMALLOC
+])
+
+# Prerequisites of lib/xalloc.h.
+AC_DEFUN([gl_PREREQ_XALLOC], [
+ AC_REQUIRE([gl_INLINE])
+ :
+])
+
+# Prerequisites of lib/xmalloc.c.
+AC_DEFUN([gl_PREREQ_XMALLOC], [
+ :
+])
diff --git a/info/Makefile.am b/info/Makefile.am
new file mode 100644
index 0000000..5a3d35a
--- /dev/null
+++ b/info/Makefile.am
@@ -0,0 +1,82 @@
+# $Id: Makefile.am,v 1.15 2008/03/28 23:39:20 karl Exp $
+# Makefile.am for texinfo/info.
+# Run automake in .. to produce Makefile.in from this.
+#
+# This file is free software; as a special exception the author 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.
+
+# Use `ginfo' for building to avoid confusion with the standard `info'
+# target. Removes the `g' in the install rule before applying any
+# user-specified name transformations.
+bin_PROGRAMS = ginfo infokey
+transform = s/ginfo/info/; $(program_transform_name)
+
+localedir = $(datadir)/locale
+infodir2 = $(datadir)/info
+
+AM_CPPFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/gnulib/lib \
+ -I$(top_builddir)/gnulib/lib \
+ -DLOCALEDIR=\"$(localedir)\" \
+ -DINFODIR=\"$(infodir)\" \
+ -DINFODIR2=\"$(infodir2)\"
+
+LDADD = ../lib/libtxi.a $(top_builddir)/gnulib/lib/libgnu.a \
+ $(TERMLIBS) $(LIBINTL)
+infokey_LDADD = ../lib/libtxi.a $(top_builddir)/gnulib/lib/libgnu.a $(LIBINTL)
+
+EXTRA_DIST = README pcterm.c
+
+ginfo_SOURCES = dir.c display.c display.h doc.h dribble.c dribble.h \
+ echo-area.c echo-area.h \
+ filesys.c filesys.h footnotes.c footnotes.h gc.c gc.h \
+ indices.c indices.h info-utils.c info-utils.h info.c info.h infodoc.c \
+ infomap.c infomap.h m-x.c man.c man.h nodemenu.c nodes.c nodes.h \
+ search.c search.h session.c session.h signals.c signals.h \
+ termdep.h terminal.c terminal.h tilde.c tilde.h \
+ variables.c variables.h window.c window.h
+nodist_ginfo_SOURCES = doc.c funs.h
+infokey_SOURCES = infokey.c infokey.h key.h
+nodist_infokey_SOURCES = key.c funs.h
+
+# The files `doc.c', `key.c' and `funs.h' are created by ./makedoc run over the
+# source files which contain DECLARE_INFO_COMMAND. `funs.h' is a header file
+# listing the functions found. `doc.c' is a structure containing pointers
+# to those functions along with completable names and documentation strings.
+#
+generated_sources = doc.c key.c funs.h
+
+# We need a linear ordering to prevent race condition in parallel make.
+# See the node ``(automake)Multiple Outputs'' for an explanation.
+# Make sure this matches with order in which makedoc.c creates these
+# files.
+doc.c: key.c
+key.c: funs.h
+
+# These files are not distributed.
+DISTCLEANFILES = $(generated_sources)
+
+noinst_PROGRAMS = makedoc
+makedoc_SOURCES = makedoc.c
+
+# Files with Info commands defined that makedoc should read.
+cmd_sources = $(srcdir)/session.c $(srcdir)/echo-area.c $(srcdir)/infodoc.c \
+ $(srcdir)/m-x.c $(srcdir)/indices.c $(srcdir)/nodemenu.c \
+ $(srcdir)/footnotes.c $(srcdir)/variables.c
+
+# Make the target only funs.h even though we create all the
+# $(generated_sources) so that parallel makes won't do the rm && makedoc
+# more than once.
+funs.h: makedoc$(EXEEXT) $(cmd_sources)
+ rm -f $(generated_sources)
+ $(top_builddir)/$(native_tools)/info/makedoc $(cmd_sources)
+
+# The following hack is necessary to hint make before the automatic
+# dependencies are built.
+BUILT_SOURCES = funs.h
diff --git a/info/Makefile.in b/info/Makefile.in
new file mode 100644
index 0000000..d4fea81
--- /dev/null
+++ b/info/Makefile.in
@@ -0,0 +1,810 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008 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@
+
+# $Id: Makefile.am,v 1.15 2008/03/28 23:39:20 karl Exp $
+# Makefile.am for texinfo/info.
+# Run automake in .. to produce Makefile.in from this.
+#
+# This file is free software; as a special exception the author 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@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@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)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = ginfo$(EXEEXT) infokey$(EXEEXT)
+noinst_PROGRAMS = makedoc$(EXEEXT)
+subdir = info
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/gnulib/m4/alloca.m4 \
+ $(top_srcdir)/gnulib/m4/argz.m4 \
+ $(top_srcdir)/gnulib/m4/codeset.m4 \
+ $(top_srcdir)/gnulib/m4/eealloc.m4 \
+ $(top_srcdir)/gnulib/m4/environ.m4 \
+ $(top_srcdir)/gnulib/m4/error.m4 \
+ $(top_srcdir)/gnulib/m4/exitfail.m4 \
+ $(top_srcdir)/gnulib/m4/extensions.m4 \
+ $(top_srcdir)/gnulib/m4/getopt.m4 \
+ $(top_srcdir)/gnulib/m4/gettext.m4 \
+ $(top_srcdir)/gnulib/m4/gettimeofday.m4 \
+ $(top_srcdir)/gnulib/m4/glibc21.m4 \
+ $(top_srcdir)/gnulib/m4/gnulib-common.m4 \
+ $(top_srcdir)/gnulib/m4/gnulib-comp.m4 \
+ $(top_srcdir)/gnulib/m4/iconv.m4 \
+ $(top_srcdir)/gnulib/m4/include_next.m4 \
+ $(top_srcdir)/gnulib/m4/inline.m4 \
+ $(top_srcdir)/gnulib/m4/intlmacosx.m4 \
+ $(top_srcdir)/gnulib/m4/lib-ld.m4 \
+ $(top_srcdir)/gnulib/m4/lib-link.m4 \
+ $(top_srcdir)/gnulib/m4/lib-prefix.m4 \
+ $(top_srcdir)/gnulib/m4/localcharset.m4 \
+ $(top_srcdir)/gnulib/m4/longlong.m4 \
+ $(top_srcdir)/gnulib/m4/malloc.m4 \
+ $(top_srcdir)/gnulib/m4/malloca.m4 \
+ $(top_srcdir)/gnulib/m4/mbchar.m4 \
+ $(top_srcdir)/gnulib/m4/mbiter.m4 \
+ $(top_srcdir)/gnulib/m4/mbrtowc.m4 \
+ $(top_srcdir)/gnulib/m4/mbscasecmp.m4 \
+ $(top_srcdir)/gnulib/m4/mbschr.m4 \
+ $(top_srcdir)/gnulib/m4/mbslen.m4 \
+ $(top_srcdir)/gnulib/m4/mbsncasecmp.m4 \
+ $(top_srcdir)/gnulib/m4/mbsstr.m4 \
+ $(top_srcdir)/gnulib/m4/mbstate_t.m4 \
+ $(top_srcdir)/gnulib/m4/mbswidth.m4 \
+ $(top_srcdir)/gnulib/m4/memchr.m4 \
+ $(top_srcdir)/gnulib/m4/memcmp.m4 \
+ $(top_srcdir)/gnulib/m4/memcpy.m4 \
+ $(top_srcdir)/gnulib/m4/memmem.m4 \
+ $(top_srcdir)/gnulib/m4/memmove.m4 \
+ $(top_srcdir)/gnulib/m4/mempcpy.m4 \
+ $(top_srcdir)/gnulib/m4/mkstemp.m4 \
+ $(top_srcdir)/gnulib/m4/nls.m4 \
+ $(top_srcdir)/gnulib/m4/onceonly.m4 \
+ $(top_srcdir)/gnulib/m4/po.m4 \
+ $(top_srcdir)/gnulib/m4/progtest.m4 \
+ $(top_srcdir)/gnulib/m4/setenv.m4 \
+ $(top_srcdir)/gnulib/m4/stdbool.m4 \
+ $(top_srcdir)/gnulib/m4/stdint.m4 \
+ $(top_srcdir)/gnulib/m4/stdlib_h.m4 \
+ $(top_srcdir)/gnulib/m4/stpcpy.m4 \
+ $(top_srcdir)/gnulib/m4/strdup.m4 \
+ $(top_srcdir)/gnulib/m4/strerror.m4 \
+ $(top_srcdir)/gnulib/m4/string_h.m4 \
+ $(top_srcdir)/gnulib/m4/strndup.m4 \
+ $(top_srcdir)/gnulib/m4/strnlen.m4 \
+ $(top_srcdir)/gnulib/m4/sys_stat_h.m4 \
+ $(top_srcdir)/gnulib/m4/sys_time_h.m4 \
+ $(top_srcdir)/gnulib/m4/tempname.m4 \
+ $(top_srcdir)/gnulib/m4/unistd_h.m4 \
+ $(top_srcdir)/gnulib/m4/wchar.m4 \
+ $(top_srcdir)/gnulib/m4/wchar_t.m4 \
+ $(top_srcdir)/gnulib/m4/wctype.m4 \
+ $(top_srcdir)/gnulib/m4/wcwidth.m4 \
+ $(top_srcdir)/gnulib/m4/wint_t.m4 \
+ $(top_srcdir)/gnulib/m4/xalloc.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 =
+am__installdirs = "$(DESTDIR)$(bindir)"
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
+am_ginfo_OBJECTS = dir.$(OBJEXT) display.$(OBJEXT) dribble.$(OBJEXT) \
+ echo-area.$(OBJEXT) filesys.$(OBJEXT) footnotes.$(OBJEXT) \
+ gc.$(OBJEXT) indices.$(OBJEXT) info-utils.$(OBJEXT) \
+ info.$(OBJEXT) infodoc.$(OBJEXT) infomap.$(OBJEXT) \
+ m-x.$(OBJEXT) man.$(OBJEXT) nodemenu.$(OBJEXT) nodes.$(OBJEXT) \
+ search.$(OBJEXT) session.$(OBJEXT) signals.$(OBJEXT) \
+ terminal.$(OBJEXT) tilde.$(OBJEXT) variables.$(OBJEXT) \
+ window.$(OBJEXT)
+nodist_ginfo_OBJECTS = doc.$(OBJEXT)
+ginfo_OBJECTS = $(am_ginfo_OBJECTS) $(nodist_ginfo_OBJECTS)
+ginfo_LDADD = $(LDADD)
+am__DEPENDENCIES_1 =
+ginfo_DEPENDENCIES = ../lib/libtxi.a \
+ $(top_builddir)/gnulib/lib/libgnu.a $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+am_infokey_OBJECTS = infokey.$(OBJEXT)
+nodist_infokey_OBJECTS = key.$(OBJEXT)
+infokey_OBJECTS = $(am_infokey_OBJECTS) $(nodist_infokey_OBJECTS)
+infokey_DEPENDENCIES = ../lib/libtxi.a \
+ $(top_builddir)/gnulib/lib/libgnu.a $(am__DEPENDENCIES_1)
+am_makedoc_OBJECTS = makedoc.$(OBJEXT)
+makedoc_OBJECTS = $(am_makedoc_OBJECTS)
+makedoc_LDADD = $(LDADD)
+makedoc_DEPENDENCIES = ../lib/libtxi.a \
+ $(top_builddir)/gnulib/lib/libgnu.a $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(ginfo_SOURCES) $(nodist_ginfo_SOURCES) $(infokey_SOURCES) \
+ $(nodist_infokey_SOURCES) $(makedoc_SOURCES)
+DIST_SOURCES = $(ginfo_SOURCES) $(infokey_SOURCES) $(makedoc_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+transform = s/ginfo/info/; $(program_transform_name)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+ARGZ_H = @ARGZ_H@
+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@
+GETOPT_H = @GETOPT_H@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_DUP2 = @GNULIB_DUP2@
+GNULIB_ENVIRON = @GNULIB_ENVIRON@
+GNULIB_FCHDIR = @GNULIB_FCHDIR@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+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_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRSEP = @GNULIB_STRSEP@
+GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
+GNULIB_STRSTR = @GNULIB_STRSTR@
+GNULIB_STRTOD = @GNULIB_STRTOD@
+GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
+GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GREP = @GREP@
+HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR = @HAVE_DECL_STRERROR@
+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_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SETENV = @HAVE_SETENV@
+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_SLEEP = @HAVE_SLEEP@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRNDUP = @HAVE_STRNDUP@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNSETENV = @HAVE_UNSETENV@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE__BOOL = @HAVE__BOOL@
+HELP2MAN = @HELP2MAN@
+HEVEA = @HEVEA@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LDFLAGS = @LDFLAGS@
+LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@
+LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_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_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_FCHDIR = @REPLACE_FCHDIR@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+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@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYS_STAT_H = @SYS_STAT_H@
+SYS_TIME_H = @SYS_TIME_H@
+TERMLIBS = @TERMLIBS@
+TEX = @TEX@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+VOID_UNSETENV = @VOID_UNSETENV@
+WCHAR_H = @WCHAR_H@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WCTYPE_H = @WCTYPE_H@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+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@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_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@
+localedir = $(datadir)/locale
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+native_tools = @native_tools@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+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@
+infodir2 = $(datadir)/info
+AM_CPPFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/gnulib/lib \
+ -I$(top_builddir)/gnulib/lib \
+ -DLOCALEDIR=\"$(localedir)\" \
+ -DINFODIR=\"$(infodir)\" \
+ -DINFODIR2=\"$(infodir2)\"
+
+LDADD = ../lib/libtxi.a $(top_builddir)/gnulib/lib/libgnu.a \
+ $(TERMLIBS) $(LIBINTL)
+
+infokey_LDADD = ../lib/libtxi.a $(top_builddir)/gnulib/lib/libgnu.a $(LIBINTL)
+EXTRA_DIST = README pcterm.c
+ginfo_SOURCES = dir.c display.c display.h doc.h dribble.c dribble.h \
+ echo-area.c echo-area.h \
+ filesys.c filesys.h footnotes.c footnotes.h gc.c gc.h \
+ indices.c indices.h info-utils.c info-utils.h info.c info.h infodoc.c \
+ infomap.c infomap.h m-x.c man.c man.h nodemenu.c nodes.c nodes.h \
+ search.c search.h session.c session.h signals.c signals.h \
+ termdep.h terminal.c terminal.h tilde.c tilde.h \
+ variables.c variables.h window.c window.h
+
+nodist_ginfo_SOURCES = doc.c funs.h
+infokey_SOURCES = infokey.c infokey.h key.h
+nodist_infokey_SOURCES = key.c funs.h
+
+# The files `doc.c', `key.c' and `funs.h' are created by ./makedoc run over the
+# source files which contain DECLARE_INFO_COMMAND. `funs.h' is a header file
+# listing the functions found. `doc.c' is a structure containing pointers
+# to those functions along with completable names and documentation strings.
+#
+generated_sources = doc.c key.c funs.h
+
+# These files are not distributed.
+DISTCLEANFILES = $(generated_sources)
+makedoc_SOURCES = makedoc.c
+
+# Files with Info commands defined that makedoc should read.
+cmd_sources = $(srcdir)/session.c $(srcdir)/echo-area.c $(srcdir)/infodoc.c \
+ $(srcdir)/m-x.c $(srcdir)/indices.c $(srcdir)/nodemenu.c \
+ $(srcdir)/footnotes.c $(srcdir)/variables.c
+
+
+# The following hack is necessary to hint make before the automatic
+# dependencies are built.
+BUILT_SOURCES = funs.h
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu info/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu info/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ if test -f $$p \
+ ; then \
+ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+ $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+ else :; fi; \
+ done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+ rm -f "$(DESTDIR)$(bindir)/$$f"; \
+ done
+
+clean-binPROGRAMS:
+ -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+
+clean-noinstPROGRAMS:
+ -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
+ginfo$(EXEEXT): $(ginfo_OBJECTS) $(ginfo_DEPENDENCIES)
+ @rm -f ginfo$(EXEEXT)
+ $(LINK) $(ginfo_OBJECTS) $(ginfo_LDADD) $(LIBS)
+infokey$(EXEEXT): $(infokey_OBJECTS) $(infokey_DEPENDENCIES)
+ @rm -f infokey$(EXEEXT)
+ $(LINK) $(infokey_OBJECTS) $(infokey_LDADD) $(LIBS)
+makedoc$(EXEEXT): $(makedoc_OBJECTS) $(makedoc_DEPENDENCIES)
+ @rm -f makedoc$(EXEEXT)
+ $(LINK) $(makedoc_OBJECTS) $(makedoc_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dir.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/display.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/doc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dribble.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/echo-area.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filesys.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/footnotes.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indices.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/info-utils.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/info.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/infodoc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/infokey.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/infomap.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/key.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/m-x.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/makedoc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/man.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nodemenu.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nodes.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/search.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/session.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signals.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/terminal.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tilde.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/variables.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/window.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+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 $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$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: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+ for dir in "$(DESTDIR)$(bindir)"; 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:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -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)
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+ clean-generic clean-noinstPROGRAMS ctags distclean \
+ distclean-compile distclean-generic distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-binPROGRAMS 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-compile mostlyclean-generic pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-binPROGRAMS
+
+
+# We need a linear ordering to prevent race condition in parallel make.
+# See the node ``(automake)Multiple Outputs'' for an explanation.
+# Make sure this matches with order in which makedoc.c creates these
+# files.
+doc.c: key.c
+key.c: funs.h
+
+# Make the target only funs.h even though we create all the
+# $(generated_sources) so that parallel makes won't do the rm && makedoc
+# more than once.
+funs.h: makedoc$(EXEEXT) $(cmd_sources)
+ rm -f $(generated_sources)
+ $(top_builddir)/$(native_tools)/info/makedoc $(cmd_sources)
+# 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/info/README b/info/README
new file mode 100644
index 0000000..4178a01
--- /dev/null
+++ b/info/README
@@ -0,0 +1,30 @@
+$Id: README,v 1.3 2004/04/11 17:56:45 karl Exp $
+texinfo/info/README
+
+ Copyright (C) 2002 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.
+
+Info 2.0 is a complete rewrite of the original standalone Info I wrote in
+1987, the first program I wrote for rms. That program was something like
+my second Unix program ever, and my die-hard machine language coding habits
+tended to show through. I found the original Info hard to read and
+maintain, and thus decided to write this one.
+
+The rewrite consists of about 12,000 lines of code written in about 12
+days. I believe this version of Info to be in much better shape than the
+original Info.
+
+Info 2.0 is substantially different from its original standalone
+predecessor. It appears almost identical to the GNU Emacs version, but has
+the advantages of smaller size, ease of portability, and a built in library
+which can be used in other programs (to get or display documentation from
+Info files, for example).
+
+A full listing of the commands available in Info can be gotten by typing
+`?' while within an Info window. This produces a node in a window which
+can be viewed just like any Info node.
+
+--Brian Fox <bfox@gnu.org>
diff --git a/info/dir.c b/info/dir.c
new file mode 100644
index 0000000..8dbc239
--- /dev/null
+++ b/info/dir.c
@@ -0,0 +1,290 @@
+/* dir.c -- how to build a special "dir" node from "localdir" files.
+ $Id: dir.c,v 1.8 2008/06/11 09:55:41 gray Exp $
+
+ Copyright (C) 1993, 1997, 1998, 2004, 2007,
+ 2008 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 Brian Fox (bfox@ai.mit.edu). */
+
+#include "info.h"
+#include "info-utils.h"
+#include "filesys.h"
+#include "tilde.h"
+
+/* The "dir" node can be built from the contents of a file called "dir",
+ with the addition of the menus of every file named in the array
+ dirs_to_add which are found in INFOPATH. */
+
+static void add_menu_to_file_buffer (char *contents, long int size,
+ FILE_BUFFER *fb);
+static void insert_text_into_fb_at_binding (FILE_BUFFER *fb,
+ SEARCH_BINDING *binding, char *text, int textlen);
+void maybe_build_dir_node (char *dirname);
+
+static char *dirs_to_add[] = {
+ "dir", "localdir", NULL
+};
+
+
+/* Return zero if the file represented in the stat structure TEST has
+ already been seen, nonzero else. */
+
+typedef struct
+{
+ dev_t device;
+ ino_t inode;
+} dir_file_list_entry_type;
+
+static int
+new_dir_file_p (struct stat *test)
+{
+ static unsigned dir_file_list_len = 0;
+ static dir_file_list_entry_type *dir_file_list = NULL;
+ unsigned i;
+
+ for (i = 0; i < dir_file_list_len; i++)
+ {
+ dir_file_list_entry_type entry;
+ entry = dir_file_list[i];
+ if (entry.device == test->st_dev && entry.inode == test->st_ino)
+ return 0;
+ }
+
+ dir_file_list_len++;
+ dir_file_list = xrealloc (dir_file_list,
+ dir_file_list_len * sizeof (dir_file_list_entry_type));
+ dir_file_list[dir_file_list_len - 1].device = test->st_dev;
+ dir_file_list[dir_file_list_len - 1].inode = test->st_ino;
+ return 1;
+}
+
+
+void
+maybe_build_dir_node (char *dirname)
+{
+ int path_index, update_tags;
+ char *this_dir;
+ FILE_BUFFER *dir_buffer = info_find_file (dirname);
+
+ /* If there is no "dir" in the current info path, we cannot build one
+ from nothing. */
+ if (!dir_buffer)
+ return;
+
+ /* If this directory has already been built, return now. */
+ if (dir_buffer->flags & N_CannotGC)
+ return;
+
+ /* Initialize the list we use to avoid reading the same dir file twice
+ with the dir file just found. */
+ new_dir_file_p (&dir_buffer->finfo);
+
+ path_index = update_tags = 0;
+
+ /* Using each element of the path, check for one of the files in
+ DIRS_TO_ADD. Do not check for "localdir.info.Z" or anything else.
+ Only files explictly named are eligible. This is a design decision.
+ There can be an info file name "localdir.info" which contains
+ information on the setting up of "localdir" files. */
+ while ((this_dir = extract_colon_unit (infopath, &path_index)))
+ {
+ register int da_index;
+ char *from_file;
+
+ /* Expand a leading tilde if one is present. */
+ if (*this_dir == '~')
+ {
+ char *tilde_expanded_dirname;
+
+ tilde_expanded_dirname = tilde_expand_word (this_dir);
+ if (tilde_expanded_dirname != this_dir)
+ {
+ free (this_dir);
+ this_dir = tilde_expanded_dirname;
+ }
+ }
+
+ /* For every different file named in DIRS_TO_ADD found in the
+ search path, add that file's menu to our "dir" node. */
+ for (da_index = 0; (from_file = dirs_to_add[da_index]); da_index++)
+ {
+ struct stat finfo;
+ int statable;
+ int namelen = strlen (from_file);
+ char *fullpath = xmalloc (3 + strlen (this_dir) + namelen);
+
+ strcpy (fullpath, this_dir);
+ if (!IS_SLASH (fullpath[strlen (fullpath) - 1]))
+ strcat (fullpath, "/");
+ strcat (fullpath, from_file);
+
+ statable = (stat (fullpath, &finfo) == 0);
+
+ /* Only add this file if we have not seen it before. */
+ if (statable && S_ISREG (finfo.st_mode) && new_dir_file_p (&finfo))
+ {
+ long filesize;
+ int compressed;
+ char *contents = filesys_read_info_file (fullpath, &filesize,
+ &finfo, &compressed);
+ if (contents)
+ {
+ update_tags++;
+ add_menu_to_file_buffer (contents, filesize, dir_buffer);
+ free (contents);
+ }
+ }
+
+ free (fullpath);
+ }
+ free (this_dir);
+ }
+
+ if (update_tags)
+ build_tags_and_nodes (dir_buffer);
+
+ /* Flag that the dir buffer has been built. */
+ dir_buffer->flags |= N_CannotGC;
+}
+
+/* Given CONTENTS and FB (a file buffer), add the menu found in CONTENTS
+ to the menu found in FB->contents. Second argument SIZE is the total
+ size of CONTENTS. */
+static void
+add_menu_to_file_buffer (char *contents, long int size, FILE_BUFFER *fb)
+{
+ SEARCH_BINDING contents_binding, fb_binding;
+ long contents_offset, fb_offset;
+
+ contents_binding.buffer = contents;
+ contents_binding.start = 0;
+ contents_binding.end = size;
+ contents_binding.flags = S_FoldCase | S_SkipDest;
+
+ fb_binding.buffer = fb->contents;
+ fb_binding.start = 0;
+ fb_binding.end = fb->filesize;
+ fb_binding.flags = S_FoldCase | S_SkipDest;
+
+ /* Move to the start of the menus in CONTENTS and FB. */
+ contents_offset = search_forward (INFO_MENU_LABEL, &contents_binding);
+ fb_offset = search_forward (INFO_MENU_LABEL, &fb_binding);
+
+ /* If there is no menu in CONTENTS, quit now. */
+ if (contents_offset == -1)
+ return;
+
+ /* There is a menu in CONTENTS, and contents_offset points to the first
+ character following the menu starter string. Skip all whitespace
+ and newline characters. */
+ contents_offset += skip_whitespace_and_newlines (contents + contents_offset);
+
+ /* If there is no menu in FB, make one. */
+ if (fb_offset == -1)
+ {
+ /* Find the start of the second node in this file buffer. If there
+ is only one node, we will be adding the contents to the end of
+ this node. */
+ fb_offset = find_node_separator (&fb_binding);
+
+ /* If not even a single node separator, give up. */
+ if (fb_offset == -1)
+ return;
+
+ fb_binding.start = fb_offset;
+ fb_binding.start +=
+ skip_node_separator (fb_binding.buffer + fb_binding.start);
+
+ /* Try to find the next node separator. */
+ fb_offset = find_node_separator (&fb_binding);
+
+ /* If found one, consider that the start of the menu. Otherwise, the
+ start of this menu is the end of the file buffer (i.e., fb->size). */
+ if (fb_offset != -1)
+ fb_binding.start = fb_offset;
+ else
+ fb_binding.start = fb_binding.end;
+
+ insert_text_into_fb_at_binding
+ (fb, &fb_binding, INFO_MENU_LABEL, strlen (INFO_MENU_LABEL));
+
+ fb_binding.buffer = fb->contents;
+ fb_binding.start = 0;
+ fb_binding.end = fb->filesize;
+ fb_offset = search_forward (INFO_MENU_LABEL, &fb_binding);
+ if (fb_offset == -1)
+ abort ();
+ }
+
+ /* CONTENTS_OFFSET and FB_OFFSET point to the starts of the menus that
+ appear in their respective buffers. Add the remainder of CONTENTS
+ to the end of FB's menu. */
+ fb_binding.start = fb_offset;
+ fb_offset = find_node_separator (&fb_binding);
+ if (fb_offset != -1)
+ fb_binding.start = fb_offset;
+ else
+ fb_binding.start = fb_binding.end;
+
+ /* Leave exactly one blank line between directory entries. */
+ {
+ int num_found = 0;
+
+ while ((fb_binding.start > 0) &&
+ (whitespace_or_newline (fb_binding.buffer[fb_binding.start - 1])))
+ {
+ num_found++;
+ fb_binding.start--;
+ }
+
+ /* Optimize if possible. */
+ if (num_found >= 2)
+ {
+ fb_binding.buffer[fb_binding.start++] = '\n';
+ fb_binding.buffer[fb_binding.start++] = '\n';
+ }
+ else
+ {
+ /* Do it the hard way. */
+ insert_text_into_fb_at_binding (fb, &fb_binding, "\n\n", 2);
+ fb_binding.start += 2;
+ }
+ }
+
+ /* Insert the new menu. */
+ insert_text_into_fb_at_binding
+ (fb, &fb_binding, contents + contents_offset, size - contents_offset);
+}
+
+static void
+insert_text_into_fb_at_binding (FILE_BUFFER *fb,
+ SEARCH_BINDING *binding, char *text, int textlen)
+{
+ char *contents;
+ long start, end;
+
+ start = binding->start;
+ end = fb->filesize;
+
+ contents = xmalloc (fb->filesize + textlen + 1);
+ memcpy (contents, fb->contents, start);
+ memcpy (contents + start, text, textlen);
+ memcpy (contents + start + textlen, fb->contents + start, end - start);
+ free (fb->contents);
+ fb->contents = contents;
+ fb->filesize += textlen;
+ fb->finfo.st_size = fb->filesize;
+}
diff --git a/info/display.c b/info/display.c
new file mode 100644
index 0000000..28ed5cb
--- /dev/null
+++ b/info/display.c
@@ -0,0 +1,526 @@
+/* display.c -- How to display Info windows.
+ $Id: display.c,v 1.16 2008/06/11 09:55:41 gray Exp $
+
+ Copyright (C) 1993, 1997, 2003, 2004, 2006, 2007, 2008
+ 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/>.
+
+ Originally written by Brian Fox (bfox@ai.mit.edu). */
+
+#include "info.h"
+#include "display.h"
+
+extern int info_any_buffered_input_p (void); /* Found in session.c. */
+
+static void free_display (DISPLAY_LINE **display);
+static DISPLAY_LINE **make_display (int width, int height);
+
+void handle_tag (char *tag);
+void handle_tag_start (char *tag);
+void handle_tag_end (char *tag);
+
+/* An array of display lines which tell us what is currently visible on
+ the display. */
+DISPLAY_LINE **the_display = NULL;
+
+/* Non-zero means do no output. */
+int display_inhibited = 0;
+
+/* Initialize THE_DISPLAY to WIDTH and HEIGHT, with nothing in it. */
+void
+display_initialize_display (int width, int height)
+{
+ free_display (the_display);
+ the_display = make_display (width, height);
+ display_clear_display (the_display);
+}
+
+/* Clear all of the lines in DISPLAY making the screen blank. */
+void
+display_clear_display (DISPLAY_LINE **display)
+{
+ register int i;
+
+ for (i = 0; display[i]; i++)
+ {
+ display[i]->text[0] = '\0';
+ display[i]->textlen = 0;
+ display[i]->inverse = 0;
+ }
+}
+
+/* Non-zero if we didn't completely redisplay a window. */
+int display_was_interrupted_p = 0;
+
+/* Update the windows pointed to by WINDOW in the_display. This actually
+ writes the text on the screen. */
+void
+display_update_display (WINDOW *window)
+{
+ register WINDOW *win;
+
+ display_was_interrupted_p = 0;
+
+ /* For every window in the list, check contents against the display. */
+ for (win = window; win; win = win->next)
+ {
+ /* Only re-display visible windows which need updating. */
+ if (((win->flags & W_WindowVisible) == 0) ||
+ ((win->flags & W_UpdateWindow) == 0) ||
+ (win->height == 0))
+ continue;
+
+ display_update_one_window (win);
+ if (display_was_interrupted_p)
+ break;
+ }
+
+ /* Always update the echo area. */
+ display_update_one_window (the_echo_area);
+}
+
+void
+handle_tag_start (char *tag)
+{
+ /* TODO really handle this tag. */
+ return;
+}
+
+void
+handle_tag_end (char *tag)
+{
+ /* TODO really handle this tag. */
+ return;
+}
+
+void
+handle_tag (char *tag)
+{
+ if (tag[0] == '/')
+ {
+ tag++;
+ handle_tag_end (tag);
+ }
+ else
+ handle_tag_start (tag);
+}
+
+
+struct display_node_closure {
+ WINDOW *win;
+ DISPLAY_LINE **display;
+};
+
+static int
+find_diff (const char *a, size_t alen, const char *b, size_t blen, int *ppos)
+{
+ mbi_iterator_t itra, itrb;
+ int i = 0;
+ int pos = 0;
+
+ for (i = 0, mbi_init (itra, a, alen), mbi_init (itrb, b, blen);
+ mbi_avail (itra) && mbi_avail (itrb);
+ mbi_advance (itra), mbi_advance (itrb))
+ {
+ if (mb_cmp (mbi_cur (itra), mbi_cur (itrb)))
+ break;
+ pos += mb_len (mbi_cur (itra));
+ }
+ *ppos = pos;
+ return i;
+}
+
+int
+display_node_text(void *closure, size_t line_index,
+ const char *src_line,
+ char *printed_line, size_t pl_index, size_t pl_count)
+{
+ struct display_node_closure *dn = closure;
+ WINDOW *win = dn->win;
+ DISPLAY_LINE **display = dn->display;
+ DISPLAY_LINE *entry = display[win->first_row + line_index];
+
+ /* We have the exact line as it should appear on the screen.
+ Check to see if this line matches the one already appearing
+ on the screen. */
+
+ /* If the window is very small, entry might be NULL. */
+ if (entry)
+ {
+ int i, off;
+
+ /* If the screen line is inversed, then we have to clear
+ the line from the screen first. Why, I don't know.
+ (But don't do this if we have no visible entries, as can
+ happen if the window is shrunk very small.) */
+ if (entry->inverse
+ /* Need to erase the line if it has escape sequences. */
+ || (raw_escapes_p && mbschr (entry->text, '\033') != 0))
+ {
+ terminal_goto_xy (0, win->first_row + line_index);
+ terminal_clear_to_eol ();
+ entry->inverse = 0;
+ entry->text[0] = '\0';
+ entry->textlen = 0;
+ }
+
+ i = find_diff (printed_line, pl_index,
+ entry->text, strlen (entry->text), &off);
+
+ /* If the lines are not the same length, or if they differed
+ at all, we must do some redrawing. */
+ if (i != pl_count || pl_count != entry->textlen)
+ {
+ /* Move to the proper point on the terminal. */
+ terminal_goto_xy (i, win->first_row + line_index);
+ /* If there is any text to print, print it. */
+ if (i != pl_count)
+ terminal_put_text (printed_line + i);
+
+ /* If the printed text didn't extend all the way to the edge
+ of the window, and text was appearing between here and the
+ edge of the window, clear from here to the end of the
+ line. */
+ if ((pl_count < win->width && pl_count < entry->textlen)
+ || entry->inverse)
+ terminal_clear_to_eol ();
+
+ fflush (stdout);
+
+ /* Update the display text buffer. */
+ if (strlen (printed_line) > (unsigned int) screenwidth)
+ /* printed_line[] can include more than screenwidth
+ characters, e.g. if multibyte encoding is used or
+ if we are under -R and there are escape sequences
+ in it. However, entry->text was allocated (in
+ display_initialize_display) for screenwidth
+ bytes only. */
+ entry->text = xrealloc (entry->text, strlen (printed_line) + 1);
+ strcpy (entry->text + off, printed_line + off);
+ entry->textlen = pl_count;
+
+ /* Lines showing node text are not in inverse. Only modelines
+ have that distinction. */
+ entry->inverse = 0;
+ }
+ }
+
+ /* A line has been displayed, and the screen reflects that state.
+ If there is typeahead pending, then let that typeahead be read
+ now, instead of continuing with the display. */
+ if (info_any_buffered_input_p ())
+ {
+ display_was_interrupted_p = 1;
+ return 1;
+ }
+
+ if (line_index + 1 == win->height)
+ return 1;
+
+ return 0;
+}
+
+void
+display_update_one_window (WINDOW *win)
+{
+ size_t line_index = 0;
+ DISPLAY_LINE **display = the_display;
+
+ /* If display is inhibited, that counts as an interrupted display. */
+ if (display_inhibited)
+ display_was_interrupted_p = 1;
+
+ /* If the window has no height, or display is inhibited, quit now.
+ Strictly speaking, it should only be necessary to test if the
+ values are equal to zero, since window_new_screen_size should
+ ensure that the window height/width never becomes negative, but
+ since historically this has often been the culprit for crashes, do
+ our best to be doubly safe. */
+ if (win->height <= 0 || win->width <= 0 || display_inhibited)
+ return;
+
+ /* If the window's first row doesn't appear in the_screen, then it
+ cannot be displayed. This can happen when the_echo_area is the
+ window to be displayed, and the screen has shrunk to less than one
+ line. */
+ if ((win->first_row < 0) || (win->first_row > the_screen->height))
+ return;
+
+ if (win->node && win->line_starts)
+ {
+ struct display_node_closure dnc;
+
+ dnc.win = win;
+ dnc.display = the_display;
+
+ line_index = process_node_text (win, win->line_starts[win->pagetop],
+ 1,
+ display_node_text,
+ &dnc);
+ if (display_was_interrupted_p)
+ return;
+ }
+
+ /* We have reached the end of the node or the end of the window. If it
+ is the end of the node, then clear the lines of the window from here
+ to the end of the window. */
+ for (; line_index < win->height; line_index++)
+ {
+ DISPLAY_LINE *entry = display[win->first_row + line_index];
+
+ /* If this line has text on it then make it go away. */
+ if (entry && entry->textlen)
+ {
+ entry->textlen = 0;
+ entry->text[0] = '\0';
+
+ terminal_goto_xy (0, win->first_row + line_index);
+ terminal_clear_to_eol ();
+ }
+ }
+
+ /* Finally, if this window has a modeline it might need to be redisplayed.
+ Check the window's modeline against the one in the display, and update
+ if necessary. */
+ if (!(win->flags & W_InhibitMode))
+ {
+ window_make_modeline (win);
+ line_index = win->first_row + win->height;
+
+ /* This display line must both be in inverse, and have the same
+ contents. */
+ if ((!display[line_index]->inverse) ||
+ (strcmp (display[line_index]->text, win->modeline) != 0))
+ {
+ terminal_goto_xy (0, line_index);
+ terminal_begin_inverse ();
+ terminal_put_text (win->modeline);
+ terminal_end_inverse ();
+ strcpy (display[line_index]->text, win->modeline);
+ display[line_index]->inverse = 1;
+ display[line_index]->textlen = strlen (win->modeline);
+ fflush (stdout);
+ }
+ }
+
+ fflush (stdout);
+
+ /* Okay, this window doesn't need updating anymore. */
+ win->flags &= ~W_UpdateWindow;
+}
+
+/* Scroll the region of the_display starting at START, ending at END, and
+ moving the lines AMOUNT lines. If AMOUNT is less than zero, the lines
+ are moved up in the screen, otherwise down. Actually, it is possible
+ for no scrolling to take place in the case that the terminal doesn't
+ support it. This doesn't matter to us. */
+void
+display_scroll_display (int start, int end, int amount)
+{
+ register int i, last;
+ DISPLAY_LINE *temp;
+
+ /* If this terminal cannot do scrolling, give up now. */
+ if (!terminal_can_scroll)
+ return;
+
+ /* If there isn't anything displayed on the screen because it is too
+ small, quit now. */
+ if (!the_display[0])
+ return;
+
+ /* If there is typeahead pending, then don't actually do any scrolling. */
+ if (info_any_buffered_input_p ())
+ return;
+
+ /* Do it on the screen. */
+ terminal_scroll_terminal (start, end, amount);
+
+ /* Now do it in the display buffer so our contents match the screen. */
+ if (amount > 0)
+ {
+ last = end + amount;
+
+ /* Shift the lines to scroll right into place. */
+ for (i = 0; i < (end - start); i++)
+ {
+ temp = the_display[last - i];
+ the_display[last - i] = the_display[end - i];
+ the_display[end - i] = temp;
+ }
+
+ /* The lines have been shifted down in the buffer. Clear all of the
+ lines that were vacated. */
+ for (i = start; i != (start + amount); i++)
+ {
+ the_display[i]->text[0] = '\0';
+ the_display[i]->textlen = 0;
+ the_display[i]->inverse = 0;
+ }
+ }
+
+ if (amount < 0)
+ {
+ last = start + amount;
+ for (i = 0; i < (end - start); i++)
+ {
+ temp = the_display[last + i];
+ the_display[last + i] = the_display[start + i];
+ the_display[start + i] = temp;
+ }
+
+ /* The lines have been shifted up in the buffer. Clear all of the
+ lines that are left over. */
+ for (i = end + amount; i != end; i++)
+ {
+ the_display[i]->text[0] = '\0';
+ the_display[i]->textlen = 0;
+ the_display[i]->inverse = 0;
+ }
+ }
+}
+
+/* Try to scroll lines in WINDOW. OLD_PAGETOP is the pagetop of WINDOW before
+ having had its line starts recalculated. OLD_STARTS is the list of line
+ starts that used to appear in this window. OLD_COUNT is the number of lines
+ that appear in the OLD_STARTS array. */
+void
+display_scroll_line_starts (WINDOW *window, int old_pagetop,
+ char **old_starts, int old_count)
+{
+ register int i, old, new; /* Indices into the line starts arrays. */
+ int last_new, last_old; /* Index of the last visible line. */
+ int old_first, new_first; /* Index of the first changed line. */
+ int unchanged_at_top = 0;
+ int already_scrolled = 0;
+
+ /* Locate the first line which was displayed on the old window. */
+ old_first = old_pagetop;
+ new_first = window->pagetop;
+
+ /* Find the last line currently visible in this window. */
+ last_new = window->pagetop + (window->height - 1);
+ if (last_new > window->line_count)
+ last_new = window->line_count - 1;
+
+ /* Find the last line which used to be currently visible in this window. */
+ last_old = old_pagetop + (window->height - 1);
+ if (last_old > old_count)
+ last_old = old_count - 1;
+
+ for (old = old_first, new = new_first;
+ old < last_old && new < last_new;
+ old++, new++)
+ if (old_starts[old] != window->line_starts[new])
+ break;
+ else
+ unchanged_at_top++;
+
+ /* Loop through the old lines looking for a match in the new lines. */
+ for (old = old_first + unchanged_at_top; old < last_old; old++)
+ {
+ for (new = new_first; new < last_new; new++)
+ if (old_starts[old] == window->line_starts[new])
+ {
+ /* Find the extent of the matching lines. */
+ for (i = 0; (old + i) < last_old; i++)
+ if (old_starts[old + i] != window->line_starts[new + i])
+ break;
+
+ /* Scroll these lines if there are enough of them. */
+ {
+ int start, end, amount;
+
+ start = (window->first_row
+ + ((old + already_scrolled) - old_pagetop));
+ amount = new - (old + already_scrolled);
+ end = window->first_row + window->height;
+
+ /* If we are shifting the block of lines down, then the last
+ AMOUNT lines will become invisible. Thus, don't bother
+ scrolling them. */
+ if (amount > 0)
+ end -= amount;
+
+ if ((end - start) > 0)
+ {
+ display_scroll_display (start, end, amount);
+
+ /* Some lines have been scrolled. Simulate the scrolling
+ by offsetting the value of the old index. */
+ old += i;
+ already_scrolled += amount;
+ }
+ }
+ }
+ }
+}
+
+/* Move the screen cursor to directly over the current character in WINDOW. */
+void
+display_cursor_at_point (WINDOW *window)
+{
+ int vpos, hpos;
+
+ vpos = window_line_of_point (window) - window->pagetop + window->first_row;
+ hpos = window_get_cursor_column (window);
+ terminal_goto_xy (hpos, vpos);
+ fflush (stdout);
+}
+
+/* **************************************************************** */
+/* */
+/* Functions Static to this File */
+/* */
+/* **************************************************************** */
+
+/* Make a DISPLAY_LINE ** with width and height. */
+static DISPLAY_LINE **
+make_display (int width, int height)
+{
+ register int i;
+ DISPLAY_LINE **display;
+
+ display = xmalloc ((1 + height) * sizeof (DISPLAY_LINE *));
+
+ for (i = 0; i < height; i++)
+ {
+ display[i] = xmalloc (sizeof (DISPLAY_LINE));
+ display[i]->text = xmalloc (1 + width);
+ display[i]->textlen = 0;
+ display[i]->inverse = 0;
+ }
+ display[i] = NULL;
+ return display;
+}
+
+/* Free the storage allocated to DISPLAY. */
+static void
+free_display (DISPLAY_LINE **display)
+{
+ register int i;
+ register DISPLAY_LINE *display_line;
+
+ if (!display)
+ return;
+
+ for (i = 0; (display_line = display[i]); i++)
+ {
+ free (display_line->text);
+ free (display_line);
+ }
+ free (display);
+}
+
diff --git a/info/display.h b/info/display.h
new file mode 100644
index 0000000..e92a572
--- /dev/null
+++ b/info/display.h
@@ -0,0 +1,79 @@
+/* display.h -- How the display in Info is done.
+ $Id: display.h,v 1.8 2008/06/09 22:51:20 gray Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+
+ Copyright (C) 1993, 1997, 2004, 2007 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 Brian Fox (bfox@ai.mit.edu). */
+
+#ifndef INFO_DISPLAY_H
+#define INFO_DISPLAY_H
+
+#include "info-utils.h"
+#include "terminal.h"
+
+typedef struct {
+ char *text; /* Text of the line as it appears. */
+ int textlen; /* Printable Length of TEXT. */
+ int inverse; /* Non-zero means this line is inverse. */
+} DISPLAY_LINE;
+
+/* An array of display lines which tell us what is currently visible on
+ the display. */
+extern DISPLAY_LINE **the_display;
+
+/* Non-zero means do no output. */
+extern int display_inhibited;
+
+/* Non-zero if we didn't completely redisplay a window. */
+extern int display_was_interrupted_p;
+
+/* Initialize THE_DISPLAY to WIDTH and HEIGHT, with nothing in it. */
+extern void display_initialize_display (int width, int height);
+
+/* Clear all of the lines in DISPLAY making the screen blank. */
+extern void display_clear_display (DISPLAY_LINE **display);
+
+/* Update the windows pointed to by WINDOWS in THE_DISPLAY. This actually
+ writes the text on the screen. */
+extern void display_update_display (WINDOW *window);
+
+/* Display WIN on THE_DISPLAY. Unlike display_update_display (), this
+ function only does one window. */
+extern void display_update_one_window (WINDOW *win);
+
+/* Move the screen cursor to directly over the current character in WINDOW. */
+extern void display_cursor_at_point (WINDOW *window);
+
+/* Scroll the region of the_display starting at START, ending at END, and
+ moving the lines AMOUNT lines. If AMOUNT is less than zero, the lines
+ are moved up in the screen, otherwise down. Actually, it is possible
+ for no scrolling to take place in the case that the terminal doesn't
+ support it. This doesn't matter to us. */
+extern void display_scroll_display (int start, int end, int amount);
+
+/* Try to scroll lines in WINDOW. OLD_PAGETOP is the pagetop of WINDOW before
+ having had its line starts recalculated. OLD_STARTS is the list of line
+ starts that used to appear in this window. OLD_COUNT is the number of lines
+ that appear in the OLD_STARTS array. */
+extern void display_scroll_line_starts (WINDOW *window, int old_pagetop,
+ char **old_starts, int old_count);
+
+void handle_tag (char *tag);
+
+#endif /* not INFO_DISPLAY_H */
diff --git a/info/doc.h b/info/doc.h
new file mode 100644
index 0000000..98d1ec6
--- /dev/null
+++ b/info/doc.h
@@ -0,0 +1,102 @@
+/* doc.h -- Structures associating function pointers with documentation.
+ $Id: doc.h,v 1.7 2008/02/26 16:51:05 karl Exp $
+
+ Copyright (C) 1993, 2001, 2004, 2007 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 Brian Fox (bfox@ai.mit.edu). */
+
+#if !defined (DOC_H)
+#define DOC_H
+
+#include "info.h" /* for NAMED_FUNCTIONS, VFunction, etc. */
+
+#if defined (INFOKEY)
+/* For each function, we keep track of the first defined key sequence
+ which invokes that function, for each different map. This is so that
+ the dynamic documentation generation in infodoc.c (a) doesn't have to
+ search through copious KEYMAP_ENTRYs, and, more importantly, (b) the
+ user and programmer can choose the preferred key sequence that is
+ printed for any given function -- it's just the first one that
+ appears in the user's infokey file or the default keymaps in
+ infomap.c.
+
+ Each FUNCTION_DOC has a linked list of FUNCTION_KEYSEQ structs
+ hanging off it, which are created on startup when the user and/or
+ default keymaps are being parsed. */
+typedef struct function_keyseq
+{
+ struct function_keyseq *next;
+ struct keymap_entry *map;
+ char *keyseq;
+} FUNCTION_KEYSEQ;
+
+#endif /* INFOKEY */
+
+
+/* An array of FUNCTION_DOC structures is defined in doc.c, which is
+ automagically generated by the makedoc utility, whose job is to scan
+ through the source files for command function declarations and
+ compile a list of all the ones it finds. This saves tedious
+ housekeeping and avoids errors of omission. */
+typedef struct
+{
+ VFunction *func;
+#if defined (NAMED_FUNCTIONS)
+ char *func_name;
+#endif /* NAMED_FUNCTIONS */
+#if defined (INFOKEY)
+ FUNCTION_KEYSEQ *keys;
+#endif /* INFOKEY */
+ char *doc;
+} FUNCTION_DOC;
+
+extern FUNCTION_DOC function_doc_array[];
+
+/* Under the old key-binding system, an info command is specified by
+ the pointer to its function. Under the new INFOKEY binding system,
+ it is specified by a pointer to the command's FUNCTION_DOC structure,
+ defined in doc.c, from which the pointer to the function can be
+ easily divined using the InfoFunction() extractor. */
+#if defined(INFOKEY)
+typedef FUNCTION_DOC InfoCommand;
+/* The cast to VFunction * prevents pgcc from complaining about
+ dereferencing a void *. */
+#define InfoFunction(ic) ((ic) ? (ic)->func : (VFunction *) NULL)
+#define InfoCmd(fn) (&function_doc_array[A_##fn])
+#define DocInfoCmd(fd) ((fd) && (fd)->func ? (fd) : NULL)
+#else /* !INFOKEY */
+typedef VFunction InfoCommand;
+#define InfoFunction(vf) ((vf))
+#define InfoCmd(fn) fn
+#define DocInfoCmd(fd) ((fd)->func)
+#endif /* !INFOKEY */
+
+#include "infomap.h" /* for Keymap. */
+
+#if defined (NAMED_FUNCTIONS)
+extern char *function_name (InfoCommand *cmd);
+extern InfoCommand *named_function (char *name);
+#endif /* NAMED_FUNCTIONS */
+
+extern char *function_documentation (InfoCommand *cmd);
+extern char *key_documentation (char key, Keymap map);
+extern char *pretty_keyname (unsigned char key);
+extern char *pretty_keyseq (char *keyseq);
+extern char *where_is (Keymap map, InfoCommand *cmd);
+extern char *replace_in_documentation (const char *string, int help_is_only_window_p);
+extern void dump_map_to_message_buffer (char *prefix, Keymap map);
+
+#endif /* !DOC_H */
diff --git a/info/dribble.c b/info/dribble.c
new file mode 100644
index 0000000..e77370b
--- /dev/null
+++ b/info/dribble.c
@@ -0,0 +1,67 @@
+/* dribble.c -- dribble files for Info.
+ $Id: dribble.c,v 1.7 2008/06/11 09:55:41 gray Exp $
+
+ Copyright (C) 1993, 1998, 2004, 2007, 2008 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 Brian Fox (bfox@ai.mit.edu). */
+
+#include "info.h"
+#include "dribble.h"
+
+/* When non-zero, it is a stream to write all input characters to for the
+ duration of this info session. */
+FILE *info_dribble_file = NULL;
+
+/* Open a dribble file named NAME, perhaps closing an already open one.
+ This sets the global variable INFO_DRIBBLE_FILE to the open stream. */
+void
+open_dribble_file (char *name)
+{
+ /* Perhaps close existing dribble file. */
+ close_dribble_file ();
+
+ /* Keystrokes can be non-printable characters, so we need binary I/O. */
+ info_dribble_file = fopen (name, FOPEN_WBIN);
+
+#if defined (HAVE_SETVBUF)
+ if (info_dribble_file)
+# if defined (SETVBUF_REVERSED)
+ setvbuf (info_dribble_file, _IONBF, NULL, 1);
+# else
+ setvbuf (info_dribble_file, NULL, _IONBF, 1);
+# endif /* !SETVBUF_REVERSED */
+#endif /* HAVE_SETVBUF */
+}
+
+/* If there is a dribble file already open, close it. */
+void
+close_dribble_file (void)
+{
+ if (info_dribble_file)
+ {
+ fflush (info_dribble_file);
+ fclose (info_dribble_file);
+ info_dribble_file = NULL;
+ }
+}
+
+/* Write some output to our existing dribble file. */
+void
+dribble (unsigned char byte)
+{
+ if (info_dribble_file)
+ fwrite (&byte, sizeof (unsigned char), 1, info_dribble_file);
+}
diff --git a/info/dribble.h b/info/dribble.h
new file mode 100644
index 0000000..5f8fbfa
--- /dev/null
+++ b/info/dribble.h
@@ -0,0 +1,40 @@
+/* dribble.h -- Functions and vars declared in dribble.c. */
+
+/* This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+
+ Copyright (C) 1993, 2004, 2007 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 Brian Fox (bfox@ai.mit.edu). */
+
+#if !defined (_DRIBBLE_H_)
+#define _DRIBBLE_H_
+
+/* When non-zero, it is a stream to write all input characters to for the
+ duration of this info session. */
+extern FILE *info_dribble_file;
+
+/* Open a dribble file named NAME, perhaps closing an already open one.
+ This sets the global variable INFO_DRIBBLE_FILE to the open stream. */
+extern void open_dribble_file (char *name);
+
+/* If there is a dribble file already open, close it. */
+extern void close_dribble_file (void);
+
+/* Write some output to our existing dribble file. */
+extern void dribble (unsigned char byte);
+
+#endif /* !_DRIBBLE_H_ */
diff --git a/info/echo-area.c b/info/echo-area.c
new file mode 100644
index 0000000..c16ef35
--- /dev/null
+++ b/info/echo-area.c
@@ -0,0 +1,1525 @@
+/* echo-area.c -- how to read a line in the echo area.
+ $Id: echo-area.c,v 1.14 2008/06/11 09:55:41 gray Exp $
+
+ Copyright (C) 1993, 1997, 1998, 1999, 2001, 2004, 2007, 2008
+ 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 Brian Fox (bfox@ai.mit.edu). */
+
+#include "info.h"
+
+#if defined (FD_SET)
+# if defined (hpux)
+# define fd_set_cast(x) (int *)(x)
+# else
+# define fd_set_cast(x) (fd_set *)(x)
+# endif /* !hpux */
+#endif /* FD_SET */
+
+/* Non-zero means that C-g was used to quit reading input. */
+int info_aborted_echo_area = 0;
+
+/* Non-zero means that the echo area is being used to read input. */
+int echo_area_is_active = 0;
+
+/* The address of the last command executed in the echo area. */
+VFunction *ea_last_executed_command = NULL;
+
+/* Non-zero means that the last command executed while reading input
+ killed some text. */
+int echo_area_last_command_was_kill = 0;
+
+/* Variables which hold on to the current state of the input line. */
+static char input_line[1 + EA_MAX_INPUT];
+static const char *input_line_prompt;
+static int input_line_point;
+static int input_line_beg;
+static int input_line_end;
+static NODE input_line_node = {
+ NULL, NULL, NULL, input_line,
+ EA_MAX_INPUT, 0, N_IsInternal
+};
+
+static void echo_area_initialize_node (void);
+static void push_echo_area (void), pop_echo_area (void);
+static int echo_area_stack_contains_completions_p (void);
+
+static void ea_kill_text (int from, int to);
+
+/* Non-zero means we force the user to complete. */
+static int echo_area_must_complete_p = 0;
+static int completions_window_p (WINDOW *window);
+
+/* If non-null, this is a window which was specifically created to display
+ possible completions output. We remember it so we can delete it when
+ appropriate. */
+static WINDOW *echo_area_completions_window = NULL;
+
+/* Variables which keep track of the window which was active prior to
+ entering the echo area. */
+static WINDOW *calling_window = NULL;
+static NODE *calling_window_node = NULL;
+static long calling_window_point = 0;
+static long calling_window_pagetop = 0;
+
+/* Remember the node and pertinent variables of the calling window. */
+static void
+remember_calling_window (WINDOW *window)
+{
+ /* Only do this if the calling window is not the completions window, or,
+ if it is the completions window and there is no other window. */
+ if (!completions_window_p (window) ||
+ ((window == windows) && !(window->next)))
+ {
+ calling_window = window;
+ calling_window_node = window->node;
+ calling_window_point = window->point;
+ calling_window_pagetop = window->pagetop;
+ }
+}
+
+/* Restore the caller's window so that it shows the node that it was showing
+ on entry to info_read_xxx_echo_area (). */
+static void
+restore_calling_window (void)
+{
+ register WINDOW *win, *compwin = NULL;
+
+ /* If the calling window is still visible, and it is the window that
+ we used for completions output, then restore the calling window. */
+ for (win = windows; win; win = win->next)
+ {
+ if (completions_window_p (win))
+ compwin = win;
+
+ if (win == calling_window && win == compwin)
+ {
+ window_set_node_of_window (calling_window, calling_window_node);
+ calling_window->point = calling_window_point;
+ calling_window->pagetop = calling_window_pagetop;
+ compwin = NULL;
+ break;
+ }
+ }
+
+ /* Delete the completions window if it is still present, it isn't the
+ last window on the screen, and there aren't any prior echo area reads
+ pending which created a completions window. */
+ if (compwin)
+ {
+ if ((compwin != windows || windows->next) &&
+ !echo_area_stack_contains_completions_p ())
+ {
+ WINDOW *next;
+ int pagetop = 0;
+ int start = 0;
+ int end = 0;
+ int amount = 0;
+
+ next = compwin->next;
+ if (next)
+ {
+ start = next->first_row;
+ end = start + next->height;
+ amount = - (compwin->height + 1);
+ pagetop = next->pagetop;
+ }
+
+ info_delete_window_internal (compwin);
+
+ /* This is not necessary because info_delete_window_internal ()
+ calls echo_area_inform_of_deleted_window (), which does the
+ right thing. */
+#if defined (UNNECESSARY)
+ echo_area_completions_window = NULL;
+#endif /* UNNECESSARY */
+
+ if (next)
+ {
+ display_scroll_display (start, end, amount);
+ next->pagetop = pagetop;
+ display_update_display (windows);
+ }
+ }
+ }
+}
+
+/* Set up a new input line with PROMPT. */
+static void
+initialize_input_line (const char *prompt)
+{
+ input_line_prompt = prompt;
+ if (prompt)
+ strcpy (input_line, prompt);
+ else
+ input_line[0] = '\0';
+
+ input_line_beg = input_line_end = input_line_point = strlen (prompt);
+}
+
+static char *
+echo_area_after_read (void)
+{
+ char *return_value;
+
+ if (info_aborted_echo_area)
+ {
+ info_aborted_echo_area = 0;
+ return_value = NULL;
+ }
+ else
+ {
+ if (input_line_beg == input_line_end)
+ return_value = xstrdup ("");
+ else
+ {
+ int line_len = input_line_end - input_line_beg;
+ return_value = xmalloc (1 + line_len);
+ strncpy (return_value, &input_line[input_line_beg], line_len);
+ return_value[line_len] = '\0';
+ }
+ }
+ return return_value;
+}
+
+/* Read a line of text in the echo area. Return a malloc ()'ed string,
+ or NULL if the user aborted out of this read. WINDOW is the currently
+ active window, so that we can restore it when we need to. PROMPT, if
+ non-null, is a prompt to print before reading the line. */
+char *
+info_read_in_echo_area (WINDOW *window, const char *prompt)
+{
+ char *line;
+
+ /* If the echo area is already active, remember the current state. */
+ if (echo_area_is_active)
+ push_echo_area ();
+
+ /* Initialize our local variables. */
+ initialize_input_line (prompt);
+
+ /* Initialize the echo area for the first (but maybe not the last) time. */
+ echo_area_initialize_node ();
+
+ /* Save away the original node of this window, and the window itself,
+ so echo area commands can temporarily use this window. */
+ remember_calling_window (window);
+
+ /* Let the rest of Info know that the echo area is active. */
+ echo_area_is_active++;
+ active_window = the_echo_area;
+
+ /* Read characters in the echo area. */
+ info_read_and_dispatch ();
+
+ echo_area_is_active--;
+
+ /* Restore the original active window and show point in it. */
+ active_window = calling_window;
+ restore_calling_window ();
+ display_cursor_at_point (active_window);
+ fflush (stdout);
+
+ /* Get the value of the line. */
+ line = echo_area_after_read ();
+
+ /* If there is a previous loop waiting for us, restore it now. */
+ if (echo_area_is_active)
+ pop_echo_area ();
+
+ /* Return the results to the caller. */
+ return line;
+}
+
+/* (re) Initialize the echo area node. */
+static void
+echo_area_initialize_node (void)
+{
+ register int i;
+
+ for (i = input_line_end; (unsigned int) i < sizeof (input_line); i++)
+ input_line[i] = ' ';
+
+ input_line[i - 1] = '\n';
+ window_set_node_of_window (the_echo_area, &input_line_node);
+ input_line[input_line_end] = '\n';
+}
+
+/* Prepare to read characters in the echo area. This can initialize the
+ echo area node, but its primary purpose is to side effect the input
+ line buffer contents. */
+void
+echo_area_prep_read (void)
+{
+ if (the_echo_area->node != &input_line_node)
+ echo_area_initialize_node ();
+
+ the_echo_area->point = input_line_point;
+ input_line[input_line_end] = '\n';
+ display_update_one_window (the_echo_area);
+ display_cursor_at_point (active_window);
+}
+
+
+/* **************************************************************** */
+/* */
+/* Echo Area Movement Commands */
+/* */
+/* **************************************************************** */
+
+DECLARE_INFO_COMMAND (ea_forward, _("Move forward a character"))
+{
+ if (count < 0)
+ ea_backward (window, -count, key);
+ else
+ {
+ input_line_point += count;
+ if (input_line_point > input_line_end)
+ input_line_point = input_line_end;
+ }
+}
+
+DECLARE_INFO_COMMAND (ea_backward, _("Move backward a character"))
+{
+ if (count < 0)
+ ea_forward (window, -count, key);
+ else
+ {
+ input_line_point -= count;
+ if (input_line_point < input_line_beg)
+ input_line_point = input_line_beg;
+ }
+}
+
+DECLARE_INFO_COMMAND (ea_beg_of_line, _("Move to the start of this line"))
+{
+ input_line_point = input_line_beg;
+}
+
+DECLARE_INFO_COMMAND (ea_end_of_line, _("Move to the end of this line"))
+{
+ input_line_point = input_line_end;
+}
+
+#define alphabetic(c) (islower (c) || isupper (c) || isdigit (c))
+
+/* Move forward a word in the input line. */
+DECLARE_INFO_COMMAND (ea_forward_word, _("Move forward a word"))
+{
+ int c;
+
+ if (count < 0)
+ ea_backward_word (window, -count, key);
+ else
+ {
+ while (count--)
+ {
+ if (input_line_point == input_line_end)
+ return;
+
+ /* If we are not in a word, move forward until we are in one.
+ Then, move forward until we hit a non-alphabetic character. */
+ c = input_line[input_line_point];
+
+ if (!alphabetic (c))
+ {
+ while (++input_line_point < input_line_end)
+ {
+ c = input_line[input_line_point];
+ if (alphabetic (c))
+ break;
+ }
+ }
+
+ if (input_line_point == input_line_end)
+ return;
+
+ while (++input_line_point < input_line_end)
+ {
+ c = input_line[input_line_point];
+ if (!alphabetic (c))
+ break;
+ }
+ }
+ }
+}
+
+DECLARE_INFO_COMMAND (ea_backward_word, _("Move backward a word"))
+{
+ int c;
+
+ if (count < 0)
+ ea_forward_word (window, -count, key);
+ else
+ {
+ while (count--)
+ {
+ if (input_line_point == input_line_beg)
+ return;
+
+ /* Like ea_forward_word (), except that we look at the
+ characters just before point. */
+
+ c = input_line[input_line_point - 1];
+
+ if (!alphabetic (c))
+ {
+ while ((--input_line_point) != input_line_beg)
+ {
+ c = input_line[input_line_point - 1];
+ if (alphabetic (c))
+ break;
+ }
+ }
+
+ while (input_line_point != input_line_beg)
+ {
+ c = input_line[input_line_point - 1];
+ if (!alphabetic (c))
+ break;
+ else
+ --input_line_point;
+ }
+ }
+ }
+}
+
+DECLARE_INFO_COMMAND (ea_delete, _("Delete the character under the cursor"))
+{
+ register int i;
+
+ if (count < 0)
+ ea_rubout (window, -count, key);
+ else
+ {
+ if (input_line_point == input_line_end)
+ return;
+
+ if (info_explicit_arg || count > 1)
+ {
+ int orig_point;
+
+ orig_point = input_line_point;
+ ea_forward (window, count, key);
+ ea_kill_text (orig_point, input_line_point);
+ input_line_point = orig_point;
+ }
+ else
+ {
+ for (i = input_line_point; i < input_line_end; i++)
+ input_line[i] = input_line[i + 1];
+
+ input_line_end--;
+ }
+ }
+}
+
+DECLARE_INFO_COMMAND (ea_rubout, _("Delete the character behind the cursor"))
+{
+ if (count < 0)
+ ea_delete (window, -count, key);
+ else
+ {
+ int start;
+
+ if (input_line_point == input_line_beg)
+ return;
+
+ start = input_line_point;
+ ea_backward (window, count, key);
+
+ if (info_explicit_arg || count > 1)
+ ea_kill_text (start, input_line_point);
+ else
+ ea_delete (window, count, key);
+ }
+}
+
+DECLARE_INFO_COMMAND (ea_abort, _("Cancel or quit operation"))
+{
+ /* If any text, just discard it, and restore the calling window's node.
+ If no text, quit. */
+ if (input_line_end != input_line_beg)
+ {
+ terminal_ring_bell ();
+ input_line_end = input_line_point = input_line_beg;
+ if (calling_window->node != calling_window_node)
+ restore_calling_window ();
+ }
+ else
+ info_aborted_echo_area = 1;
+}
+
+DECLARE_INFO_COMMAND (ea_newline, _("Accept (or force completion of) this line"))
+{
+ /* Stub does nothing. Simply here to see if it has been executed. */
+}
+
+DECLARE_INFO_COMMAND (ea_quoted_insert, _("Insert next character verbatim"))
+{
+ unsigned char character;
+
+ character = info_get_another_input_char ();
+ ea_insert (window, count, character);
+}
+
+DECLARE_INFO_COMMAND (ea_insert, _("Insert this character"))
+{
+ register int i;
+
+ if ((input_line_end + 1) == EA_MAX_INPUT)
+ {
+ terminal_ring_bell ();
+ return;
+ }
+
+ for (i = input_line_end + 1; i != input_line_point; i--)
+ input_line[i] = input_line[i - 1];
+
+ input_line[input_line_point] = key;
+ input_line_point++;
+ input_line_end++;
+ window_line_map_init (window);
+}
+
+DECLARE_INFO_COMMAND (ea_tab_insert, _("Insert a TAB character"))
+{
+ ea_insert (window, count, '\t');
+}
+
+/* Transpose the characters at point. If point is at the end of the line,
+ then transpose the characters before point. */
+DECLARE_INFO_COMMAND (ea_transpose_chars, _("Transpose characters at point"))
+{
+ /* Handle conditions that would make it impossible to transpose
+ characters. */
+ if (!count || !input_line_point || (input_line_end - input_line_beg) < 2)
+ return;
+
+ while (count)
+ {
+ int t;
+ if (input_line_point == input_line_end)
+ {
+ t = input_line[input_line_point - 1];
+
+ input_line[input_line_point - 1] = input_line[input_line_point - 2];
+ input_line[input_line_point - 2] = t;
+ }
+ else
+ {
+ t = input_line[input_line_point];
+
+ input_line[input_line_point] = input_line[input_line_point - 1];
+ input_line[input_line_point - 1] = t;
+
+ if (count < 0 && input_line_point != input_line_beg)
+ input_line_point--;
+ else
+ input_line_point++;
+ }
+
+ if (count < 0)
+ count++;
+ else
+ count--;
+ }
+}
+
+/* **************************************************************** */
+/* */
+/* Echo Area Killing and Yanking */
+/* */
+/* **************************************************************** */
+
+static char **kill_ring = NULL;
+static int kill_ring_index = 0; /* Number of kills appearing in KILL_RING. */
+static int kill_ring_slots = 0; /* Number of slots allocated to KILL_RING. */
+static int kill_ring_loc = 0; /* Location of current yank pointer. */
+
+/* The largest number of kills that we remember at one time. */
+static int max_retained_kills = 15;
+
+DECLARE_INFO_COMMAND (ea_yank, _("Yank back the contents of the last kill"))
+{
+ register int i;
+ register char *text;
+
+ if (!kill_ring_index)
+ {
+ inform_in_echo_area (_("Kill ring is empty"));
+ return;
+ }
+
+ text = kill_ring[kill_ring_loc];
+
+ for (i = 0; text[i]; i++)
+ ea_insert (window, 1, text[i]);
+}
+
+/* If the last command was yank, or yank_pop, and the text just before
+ point is identical to the current kill item, then delete that text
+ from the line, rotate the index down, and yank back some other text. */
+DECLARE_INFO_COMMAND (ea_yank_pop, _("Yank back a previous kill"))
+{
+ register int len;
+
+ if (((ea_last_executed_command != (VFunction *) ea_yank) &&
+ (ea_last_executed_command != (VFunction *) ea_yank_pop)) ||
+ (kill_ring_index == 0))
+ return;
+
+ len = strlen (kill_ring[kill_ring_loc]);
+
+ /* Delete the last yanked item from the line. */
+ {
+ register int i, counter;
+
+ counter = input_line_end - input_line_point;
+
+ for (i = input_line_point - len; counter; i++, counter--)
+ input_line[i] = input_line[i + len];
+
+ input_line_end -= len;
+ input_line_point -= len;
+ }
+
+ /* Get a previous kill, and yank that. */
+ kill_ring_loc--;
+ if (kill_ring_loc < 0)
+ kill_ring_loc = kill_ring_index - 1;
+
+ ea_yank (window, count, key);
+}
+
+/* Delete the text from point to end of line. */
+DECLARE_INFO_COMMAND (ea_kill_line, _("Kill to the end of the line"))
+{
+ if (count < 0)
+ {
+ ea_kill_text (input_line_point, input_line_beg);
+ input_line_point = input_line_beg;
+ }
+ else
+ ea_kill_text (input_line_point, input_line_end);
+}
+
+/* Delete the text from point to beg of line. */
+DECLARE_INFO_COMMAND (ea_backward_kill_line,
+ _("Kill to the beginning of the line"))
+{
+ if (count < 0)
+ ea_kill_text (input_line_point, input_line_end);
+ else
+ {
+ ea_kill_text (input_line_point, input_line_beg);
+ input_line_point = input_line_beg;
+ }
+}
+
+/* Delete from point to the end of the current word. */
+DECLARE_INFO_COMMAND (ea_kill_word, _("Kill the word following the cursor"))
+{
+ int orig_point = input_line_point;
+
+ if (count < 0)
+ ea_backward_kill_word (window, -count, key);
+ else
+ {
+ ea_forward_word (window, count, key);
+
+ if (input_line_point != orig_point)
+ ea_kill_text (orig_point, input_line_point);
+
+ input_line_point = orig_point;
+ }
+ window_line_map_init (window);
+}
+
+/* Delete from point to the start of the current word. */
+DECLARE_INFO_COMMAND (ea_backward_kill_word,
+ _("Kill the word preceding the cursor"))
+{
+ int orig_point = input_line_point;
+
+ if (count < 0)
+ ea_kill_word (window, -count, key);
+ else
+ {
+ ea_backward_word (window, count, key);
+
+ if (input_line_point != orig_point)
+ ea_kill_text (orig_point, input_line_point);
+ }
+ window_line_map_init (window);
+}
+
+/* The way to kill something. This appends or prepends to the last
+ kill, if the last command was a kill command. If FROM is less
+ than TO, then the killed text is appended to the most recent kill,
+ otherwise it is prepended. If the last command was not a kill command,
+ then a new slot is made for this kill. */
+static void
+ea_kill_text (int from, int to)
+{
+ register int i, counter, distance;
+ int killing_backwards, slot;
+ char *killed_text;
+
+ killing_backwards = (from > to);
+
+ /* If killing backwards, reverse the values of FROM and TO. */
+ if (killing_backwards)
+ {
+ int temp = from;
+ from = to;
+ to = temp;
+ }
+
+ /* Remember the text that we are about to delete. */
+ distance = to - from;
+ killed_text = xmalloc (1 + distance);
+ strncpy (killed_text, &input_line[from], distance);
+ killed_text[distance] = '\0';
+
+ /* Actually delete the text from the line. */
+ counter = input_line_end - to;
+
+ for (i = from; counter; i++, counter--)
+ input_line[i] = input_line[i + distance];
+
+ input_line_end -= distance;
+
+ /* If the last command was a kill, append or prepend the killed text to
+ the last command's killed text. */
+ if (echo_area_last_command_was_kill)
+ {
+ char *old, *new;
+
+ slot = kill_ring_loc;
+ old = kill_ring[slot];
+ new = xmalloc (1 + strlen (old) + strlen (killed_text));
+
+ if (killing_backwards)
+ {
+ /* Prepend TEXT to current kill. */
+ strcpy (new, killed_text);
+ strcat (new, old);
+ }
+ else
+ {
+ /* Append TEXT to current kill. */
+ strcpy (new, old);
+ strcat (new, killed_text);
+ }
+
+ free (old);
+ free (killed_text);
+ kill_ring[slot] = new;
+ }
+ else
+ {
+ /* Try to store the kill in a new slot, unless that would cause there
+ to be too many remembered kills. */
+ slot = kill_ring_index;
+
+ if (slot == max_retained_kills)
+ slot = 0;
+
+ if (slot + 1 > kill_ring_slots)
+ kill_ring = xrealloc (kill_ring,
+ (kill_ring_slots += max_retained_kills)
+ * sizeof (char *));
+
+ if (slot != kill_ring_index)
+ free (kill_ring[slot]);
+ else
+ kill_ring_index++;
+
+ kill_ring[slot] = killed_text;
+
+ kill_ring_loc = slot;
+ }
+
+ /* Notice that the last command was a kill. */
+ echo_area_last_command_was_kill++;
+}
+
+/* **************************************************************** */
+/* */
+/* Echo Area Completion */
+/* */
+/* **************************************************************** */
+
+/* Pointer to an array of REFERENCE to complete over. */
+static REFERENCE **echo_area_completion_items = NULL;
+
+/* Sorted array of REFERENCE * which is the possible completions found in
+ the variable echo_area_completion_items. If there is only one element,
+ it is the only possible completion. */
+static REFERENCE **completions_found = NULL;
+static int completions_found_index = 0;
+static int completions_found_slots = 0;
+
+/* The lowest common denominator found while completing. */
+static REFERENCE *LCD_completion;
+
+/* Internal functions used by the user calls. */
+static void build_completions (void), completions_must_be_rebuilt (void);
+
+/* Variable which holds the output of completions. */
+static NODE *possible_completions_output_node = NULL;
+
+static char *compwin_name = "*Completions*";
+
+/* Return non-zero if WINDOW is a window used for completions output. */
+static int
+completions_window_p (WINDOW *window)
+{
+ int result = 0;
+
+ if (internal_info_node_p (window->node) &&
+ (strcmp (window->node->nodename, compwin_name) == 0))
+ result = 1;
+
+ return result;
+}
+
+/* Workhorse for completion readers. If FORCE is non-zero, the user cannot
+ exit unless the line read completes, or is empty. */
+char *
+info_read_completing_internal (WINDOW *window, const char *prompt,
+ REFERENCE **completions, int force)
+{
+ char *line;
+
+ /* If the echo area is already active, remember the current state. */
+ if (echo_area_is_active)
+ push_echo_area ();
+
+ echo_area_must_complete_p = force;
+
+ /* Initialize our local variables. */
+ initialize_input_line (prompt);
+
+ /* Initialize the echo area for the first (but maybe not the last) time. */
+ echo_area_initialize_node ();
+
+ /* Save away the original node of this window, and the window itself,
+ so echo area commands can temporarily use this window. */
+ remember_calling_window (window);
+
+ /* Save away the list of items to complete over. */
+ echo_area_completion_items = completions;
+ completions_must_be_rebuilt ();
+
+ active_window = the_echo_area;
+ echo_area_is_active++;
+
+ /* Read characters in the echo area. */
+ while (1)
+ {
+ info_read_and_dispatch ();
+
+ line = echo_area_after_read ();
+
+ /* Force the completion to take place if the user hasn't accepted
+ a default or aborted, and if FORCE is active. */
+ if (force && line && *line && completions)
+ {
+ register int i;
+
+ build_completions ();
+
+ /* If there is only one completion, then make the line be that
+ completion. */
+ if (completions_found_index == 1)
+ {
+ free (line);
+ line = xstrdup (completions_found[0]->label);
+ break;
+ }
+
+ /* If one of the completions matches exactly, then that is okay, so
+ return the current line. */
+ for (i = 0; i < completions_found_index; i++)
+ if (mbscasecmp (completions_found[i]->label, line) == 0)
+ {
+ free (line);
+ line = xstrdup (completions_found[i]->label);
+ break;
+ }
+
+ /* If no match, go back and try again. */
+ if (i == completions_found_index)
+ {
+ if (!completions_found_index)
+ inform_in_echo_area (_("No completions"));
+ else
+ inform_in_echo_area (_("Not complete"));
+ continue;
+ }
+ }
+ break;
+ }
+ echo_area_is_active--;
+
+ /* Restore the original active window and show point in it. */
+ active_window = calling_window;
+ restore_calling_window ();
+ display_cursor_at_point (active_window);
+ fflush (stdout);
+
+ echo_area_completion_items = NULL;
+ completions_must_be_rebuilt ();
+
+ /* If there is a previous loop waiting for us, restore it now. */
+ if (echo_area_is_active)
+ pop_echo_area ();
+
+ return line;
+}
+
+/* Read a line in the echo area with completion over COMPLETIONS. */
+char *
+info_read_completing_in_echo_area (WINDOW *window,
+ const char *prompt, REFERENCE **completions)
+{
+ return info_read_completing_internal (window, prompt, completions, 1);
+}
+
+/* Read a line in the echo area allowing completion over COMPLETIONS, but
+ not requiring it. */
+char *
+info_read_maybe_completing (WINDOW *window,
+ const char *prompt, REFERENCE **completions)
+{
+ return info_read_completing_internal (window, prompt, completions, 0);
+}
+
+DECLARE_INFO_COMMAND (ea_possible_completions, _("List possible completions"))
+{
+ if (!echo_area_completion_items)
+ {
+ ea_insert (window, count, key);
+ return;
+ }
+
+ build_completions ();
+
+ if (!completions_found_index)
+ {
+ terminal_ring_bell ();
+ inform_in_echo_area (_("No completions"));
+ }
+ else if ((completions_found_index == 1) && (key != '?'))
+ {
+ inform_in_echo_area (_("Sole completion"));
+ }
+ else
+ {
+ register int i, l;
+ int limit, iterations, max_label = 0;
+
+ initialize_message_buffer ();
+ printf_to_message_buffer (completions_found_index == 1
+ ? _("One completion:\n")
+ : _("%d completions:\n"),
+ (void *) (long) completions_found_index,
+ NULL, NULL);
+
+ /* Find the maximum length of a label. */
+ for (i = 0; i < completions_found_index; i++)
+ {
+ int len = strlen (completions_found[i]->label);
+ if (len > max_label)
+ max_label = len;
+ }
+
+ max_label += 4;
+
+ /* Find out how many columns we should print in. */
+ limit = calling_window->width / max_label;
+ if (limit != 1 && (limit * max_label == calling_window->width))
+ limit--;
+
+ /* Avoid a possible floating exception. If max_label > width then
+ the limit will be 0 and a divide-by-zero fault will result. */
+ if (limit == 0)
+ limit = 1;
+
+ /* How many iterations of the printing loop? */
+ iterations = (completions_found_index + (limit - 1)) / limit;
+
+ /* Watch out for special case. If the number of completions is less
+ than LIMIT, then just do the inner printing loop. */
+ if (completions_found_index < limit)
+ iterations = 1;
+
+ /* Print the sorted items, up-and-down alphabetically. */
+ for (i = 0; i < iterations; i++)
+ {
+ register int j;
+
+ for (j = 0, l = i; j < limit; j++)
+ {
+ if (l >= completions_found_index)
+ break;
+ else
+ {
+ char *label;
+ int printed_length, k;
+
+ label = completions_found[l]->label;
+ printed_length = strlen (label);
+ printf_to_message_buffer ("%s", label, NULL, NULL);
+
+ if (j + 1 < limit)
+ {
+ for (k = 0; k < max_label - printed_length; k++)
+ printf_to_message_buffer (" ", NULL, NULL, NULL);
+ }
+ }
+ l += iterations;
+ }
+ printf_to_message_buffer ("\n", NULL, NULL, NULL);
+ }
+
+ /* Make a new node to hold onto possible completions. Don't destroy
+ dangling pointers. */
+ {
+ NODE *temp;
+
+ temp = message_buffer_to_node ();
+ add_gcable_pointer (temp->contents);
+ name_internal_node (temp, compwin_name);
+ possible_completions_output_node = temp;
+ }
+
+ /* Find a suitable window for displaying the completions output.
+ First choice is an existing window showing completions output.
+ If there is only one window, and it is large, make another
+ (smaller) window, and use that one. Otherwise, use the caller's
+ window. */
+ {
+ WINDOW *compwin;
+
+ compwin = get_internal_info_window (compwin_name);
+
+ if (!compwin)
+ {
+ /* If we can split the window to display most of the completion
+ items, then do so. */
+ if (calling_window->height > (iterations * 2)
+ && calling_window->height / 2 >= WINDOW_MIN_SIZE)
+ {
+ int start, pagetop;
+#ifdef SPLIT_BEFORE_ACTIVE
+ int end;
+#endif
+
+ active_window = calling_window;
+
+ /* Perhaps we can scroll this window on redisplay. */
+ start = calling_window->first_row;
+ pagetop = calling_window->pagetop;
+
+ compwin =
+ window_make_window (possible_completions_output_node);
+ active_window = the_echo_area;
+ window_change_window_height
+ (compwin, -(compwin->height - (iterations + 2)));
+
+ window_adjust_pagetop (calling_window);
+ remember_calling_window (calling_window);
+
+#if defined (SPLIT_BEFORE_ACTIVE)
+ /* If the pagetop hasn't changed, scrolling the calling
+ window is a reasonable thing to do. */
+ if (pagetop == calling_window->pagetop)
+ {
+ end = start + calling_window->height;
+ display_scroll_display
+ (start, end, calling_window->prev->height + 1);
+ }
+#else /* !SPLIT_BEFORE_ACTIVE */
+ /* If the pagetop has changed, set the new pagetop here. */
+ if (pagetop != calling_window->pagetop)
+ {
+ int newtop = calling_window->pagetop;
+ calling_window->pagetop = pagetop;
+ set_window_pagetop (calling_window, newtop);
+ }
+#endif /* !SPLIT_BEFORE_ACTIVE */
+
+ echo_area_completions_window = compwin;
+ remember_window_and_node (compwin, compwin->node);
+ }
+ else
+ compwin = calling_window;
+ }
+
+ if (compwin->node != possible_completions_output_node)
+ {
+ window_set_node_of_window
+ (compwin, possible_completions_output_node);
+ remember_window_and_node (compwin, compwin->node);
+ }
+
+ display_update_display (windows);
+ }
+ }
+}
+
+DECLARE_INFO_COMMAND (ea_complete, _("Insert completion"))
+{
+ if (!echo_area_completion_items)
+ {
+ ea_insert (window, count, key);
+ return;
+ }
+
+ /* If KEY is SPC, and we are not forcing completion to take place, simply
+ insert the key. */
+ if (!echo_area_must_complete_p && key == SPC)
+ {
+ ea_insert (window, count, key);
+ return;
+ }
+
+ if (ea_last_executed_command == (VFunction *) ea_complete)
+ {
+ /* If the keypress is a SPC character, and we have already tried
+ completing once, and there are several completions, then check
+ the batch of completions to see if any continue with a space.
+ If there are some, insert the space character and continue. */
+ if (key == SPC && completions_found_index > 1)
+ {
+ register int i, offset;
+
+ offset = input_line_end - input_line_beg;
+
+ for (i = 0; i < completions_found_index; i++)
+ if (completions_found[i]->label[offset] == ' ')
+ break;
+
+ if (completions_found[i])
+ ea_insert (window, 1, ' ');
+ else
+ {
+ ea_possible_completions (window, count, key);
+ return;
+ }
+ }
+ else
+ {
+ ea_possible_completions (window, count, key);
+ return;
+ }
+ }
+
+ input_line_point = input_line_end;
+ build_completions ();
+
+ if (!completions_found_index)
+ terminal_ring_bell ();
+ else if (LCD_completion->label[0] == '\0')
+ ea_possible_completions (window, count, key);
+ else
+ {
+ register int i;
+ input_line_point = input_line_end = input_line_beg;
+ for (i = 0; LCD_completion->label[i]; i++)
+ ea_insert (window, 1, LCD_completion->label[i]);
+ }
+}
+
+/* Utility REFERENCE used to store possible LCD. */
+static REFERENCE LCD_reference = {
+ NULL, NULL, NULL, 0, 0, 0
+};
+
+static void remove_completion_duplicates (void);
+
+/* Variables which remember the state of the most recent call
+ to build_completions (). */
+static char *last_completion_request = NULL;
+static REFERENCE **last_completion_items = NULL;
+
+/* How to tell the completion builder to reset internal state. */
+static void
+completions_must_be_rebuilt (void)
+{
+ maybe_free (last_completion_request);
+ last_completion_request = NULL;
+ last_completion_items = NULL;
+}
+
+/* Build a list of possible completions from echo_area_completion_items,
+ and the contents of input_line. */
+static void
+build_completions (void)
+{
+ register int i, len;
+ register REFERENCE *entry;
+ char *request;
+ int informed_of_lengthy_job = 0;
+
+ /* If there are no items to complete over, exit immediately. */
+ if (!echo_area_completion_items)
+ {
+ completions_found_index = 0;
+ LCD_completion = NULL;
+ return;
+ }
+
+ /* Check to see if this call to build completions is the same as the last
+ call to build completions. */
+ len = input_line_end - input_line_beg;
+ request = xmalloc (1 + len);
+ strncpy (request, &input_line[input_line_beg], len);
+ request[len] = '\0';
+
+ if (last_completion_request && last_completion_items &&
+ last_completion_items == echo_area_completion_items &&
+ (strcmp (last_completion_request, request) == 0))
+ {
+ free (request);
+ return;
+ }
+
+ maybe_free (last_completion_request);
+ last_completion_request = request;
+ last_completion_items = echo_area_completion_items;
+
+ /* Always start at the beginning of the list. */
+ completions_found_index = 0;
+ LCD_completion = NULL;
+
+ for (i = 0; (entry = echo_area_completion_items[i]); i++)
+ {
+ if (mbsncasecmp (request, entry->label, len) == 0)
+ add_pointer_to_array (entry, completions_found_index,
+ completions_found, completions_found_slots,
+ 20, REFERENCE *);
+
+ if (!informed_of_lengthy_job && completions_found_index > 100)
+ {
+ informed_of_lengthy_job = 1;
+ window_message_in_echo_area (_("Building completions..."),
+ NULL, NULL);
+ }
+ }
+
+ if (!completions_found_index)
+ return;
+
+ /* Sort and prune duplicate entries from the completions array. */
+ remove_completion_duplicates ();
+
+ /* If there is only one completion, just return that. */
+ if (completions_found_index == 1)
+ {
+ LCD_completion = completions_found[0];
+ return;
+ }
+
+ /* Find the least common denominator. */
+ {
+ long shortest = 100000;
+
+ for (i = 1; i < completions_found_index; i++)
+ {
+ register int j;
+ int c1, c2;
+
+ for (j = 0;
+ (c1 = info_tolower (completions_found[i - 1]->label[j])) &&
+ (c2 = info_tolower (completions_found[i]->label[j]));
+ j++)
+ if (c1 != c2)
+ break;
+
+ if (shortest > j)
+ shortest = j;
+ }
+
+ maybe_free (LCD_reference.label);
+ LCD_reference.label = xmalloc (1 + shortest);
+ /* Since both the sorting done inside remove_completion_duplicates
+ and all the comparisons above are case-insensitive, it's
+ possible that the completion we are going to return is
+ identical to what the user typed but for the letter-case. This
+ is confusing, since the user could type FOOBAR<TAB> and get her
+ string change letter-case for no good reason. So try to find a
+ possible completion whose letter-case is identical, and if so,
+ use that. */
+ if (completions_found_index > 1)
+ {
+ int req_len = strlen (request);
+
+ for (i = 0; i < completions_found_index; i++)
+ if (strncmp (request, completions_found[i]->label, req_len) == 0)
+ break;
+ /* If none of the candidates match exactly, use the first one. */
+ if (i >= completions_found_index)
+ i = 0;
+ }
+ strncpy (LCD_reference.label, completions_found[i]->label, shortest);
+ LCD_reference.label[shortest] = '\0';
+ LCD_completion = &LCD_reference;
+ }
+
+ if (informed_of_lengthy_job)
+ echo_area_initialize_node ();
+}
+
+/* Function called by qsort. */
+static int
+compare_references (const void *entry1, const void *entry2)
+{
+ REFERENCE **e1 = (REFERENCE **) entry1;
+ REFERENCE **e2 = (REFERENCE **) entry2;
+
+ return mbscasecmp ((*e1)->label, (*e2)->label);
+}
+
+/* Prune duplicate entries from COMPLETIONS_FOUND. */
+static void
+remove_completion_duplicates (void)
+{
+ register int i, j;
+ REFERENCE **temp;
+ int newlen;
+
+ if (!completions_found_index)
+ return;
+
+ /* Sort the items. */
+ qsort (completions_found, completions_found_index, sizeof (REFERENCE *),
+ compare_references);
+
+ for (i = 0, newlen = 1; i < completions_found_index - 1; i++)
+ {
+ if (strcmp (completions_found[i]->label,
+ completions_found[i + 1]->label) == 0)
+ completions_found[i] = NULL;
+ else
+ newlen++;
+ }
+
+ /* We have marked all the dead slots. It is faster to copy the live slots
+ twice than to prune the dead slots one by one. */
+ temp = xmalloc ((1 + newlen) * sizeof (REFERENCE *));
+ for (i = 0, j = 0; i < completions_found_index; i++)
+ if (completions_found[i])
+ temp[j++] = completions_found[i];
+
+ for (i = 0; i < newlen; i++)
+ completions_found[i] = temp[i];
+
+ completions_found[i] = NULL;
+ completions_found_index = newlen;
+ free (temp);
+}
+
+/* Scroll the "other" window. If there is a window showing completions, scroll
+ that one, otherwise scroll the window which was active on entering the read
+ function. */
+DECLARE_INFO_COMMAND (ea_scroll_completions_window, _("Scroll the completions window"))
+{
+ WINDOW *compwin;
+ int old_pagetop;
+
+ compwin = get_internal_info_window (compwin_name);
+
+ if (!compwin)
+ compwin = calling_window;
+
+ old_pagetop = compwin->pagetop;
+
+ /* Let info_scroll_forward () do the work, and print any messages that
+ need to be displayed. */
+ info_scroll_forward (compwin, count, key);
+}
+
+/* Function which gets called when an Info window is deleted while the
+ echo area is active. WINDOW is the window which has just been deleted. */
+void
+echo_area_inform_of_deleted_window (WINDOW *window)
+{
+ /* If this is the calling_window, forget what we remembered about it. */
+ if (window == calling_window)
+ {
+ if (active_window != the_echo_area)
+ remember_calling_window (active_window);
+ else
+ remember_calling_window (windows);
+ }
+
+ /* If this window was the echo_area_completions_window, then notice that
+ the window has been deleted. */
+ if (window == echo_area_completions_window)
+ echo_area_completions_window = NULL;
+}
+
+/* **************************************************************** */
+/* */
+/* Pushing and Popping the Echo Area */
+/* */
+/* **************************************************************** */
+
+/* Push and Pop the echo area. */
+typedef struct {
+ char *line;
+ const char *prompt;
+ REFERENCE **comp_items;
+ int point, beg, end;
+ int must_complete;
+ NODE node;
+ WINDOW *compwin;
+} PUSHED_EA;
+
+static PUSHED_EA **pushed_echo_areas = NULL;
+static int pushed_echo_areas_index = 0;
+static int pushed_echo_areas_slots = 0;
+
+/* Pushing the echo_area has a side effect of zeroing the completion_items. */
+static void
+push_echo_area (void)
+{
+ PUSHED_EA *pushed;
+
+ pushed = xmalloc (sizeof (PUSHED_EA));
+ pushed->line = xstrdup (input_line);
+ pushed->prompt = input_line_prompt;
+ pushed->point = input_line_point;
+ pushed->beg = input_line_beg;
+ pushed->end = input_line_end;
+ pushed->node = input_line_node;
+ pushed->comp_items = echo_area_completion_items;
+ pushed->must_complete = echo_area_must_complete_p;
+ pushed->compwin = echo_area_completions_window;
+
+ add_pointer_to_array (pushed, pushed_echo_areas_index, pushed_echo_areas,
+ pushed_echo_areas_slots, 4, PUSHED_EA *);
+
+ echo_area_completion_items = NULL;
+}
+
+static void
+pop_echo_area (void)
+{
+ PUSHED_EA *popped;
+
+ popped = pushed_echo_areas[--pushed_echo_areas_index];
+
+ strcpy (input_line, popped->line);
+ free (popped->line);
+ input_line_prompt = popped->prompt;
+ input_line_point = popped->point;
+ input_line_beg = popped->beg;
+ input_line_end = popped->end;
+ input_line_node = popped->node;
+ echo_area_completion_items = popped->comp_items;
+ echo_area_must_complete_p = popped->must_complete;
+ echo_area_completions_window = popped->compwin;
+ completions_must_be_rebuilt ();
+
+ /* If the completion window no longer exists, forget about it. */
+ if (echo_area_completions_window)
+ {
+ register WINDOW *win;
+
+ for (win = windows; win; win = win->next)
+ if (echo_area_completions_window == win)
+ break;
+
+ /* If the window wasn't found, then it has already been deleted. */
+ if (!win)
+ echo_area_completions_window = NULL;
+ }
+
+ free (popped);
+}
+
+/* Returns non-zero if any of the prior stacked calls to read in the echo
+ area produced a completions window. */
+static int
+echo_area_stack_contains_completions_p (void)
+{
+ register int i;
+
+ for (i = 0; i < pushed_echo_areas_index; i++)
+ if (pushed_echo_areas[i]->compwin)
+ return 1;
+
+ return 0;
+}
+
+/* **************************************************************** */
+/* */
+/* Error Messages While Reading in Echo Area */
+/* */
+/* **************************************************************** */
+
+#if defined (HAVE_SYS_TIME_H)
+# include <sys/time.h>
+# define HAVE_STRUCT_TIMEVAL
+#endif /* HAVE_SYS_TIME_H */
+
+static void
+pause_or_input (void)
+{
+#ifdef FD_SET
+ struct timeval timer;
+ fd_set readfds;
+ int ready;
+
+ FD_ZERO (&readfds);
+ FD_SET (fileno (stdin), &readfds);
+ timer.tv_sec = 2;
+ timer.tv_usec = 0;
+ ready = select (fileno (stdin) + 1, &readfds, NULL, NULL, &timer);
+#endif /* FD_SET */
+}
+
+/* Print MESSAGE right after the end of the current line, and wait
+ for input or a couple of seconds, whichever comes first. Then flush the
+ informational message that was printed. */
+void
+inform_in_echo_area (const char *message)
+{
+ int i;
+ char *text;
+ int avail = EA_MAX_INPUT + 1 - input_line_end;
+
+ text = xstrdup (message);
+ for (i = 0; text[i] && text[i] != '\n' && i < avail; i++)
+ ;
+ text[i] = 0;
+
+ echo_area_initialize_node ();
+ sprintf (&input_line[input_line_end], "%s[%s]\n",
+ echo_area_is_active ? " ": "", text);
+ free (text);
+ the_echo_area->point = input_line_point;
+ display_update_one_window (the_echo_area);
+ display_cursor_at_point (active_window);
+ fflush (stdout);
+ pause_or_input ();
+ echo_area_initialize_node ();
+}
diff --git a/info/echo-area.h b/info/echo-area.h
new file mode 100644
index 0000000..da397b6
--- /dev/null
+++ b/info/echo-area.h
@@ -0,0 +1,84 @@
+/* echo-area.h -- Functions used in reading information from the echo area.
+ $Id: echo-area.h,v 1.8 2008/02/26 16:51:05 karl Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+
+ Copyright (C) 1993, 1997, 2004, 2007 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 Brian Fox (bfox@ai.mit.edu). */
+
+#ifndef INFO_ECHO_AREA_H
+#define INFO_ECHO_AREA_H
+
+#define EA_MAX_INPUT 256
+
+extern int echo_area_is_active, info_aborted_echo_area;
+
+/* Non-zero means that the last command executed while reading input
+ killed some text. */
+extern int echo_area_last_command_was_kill;
+
+extern void inform_in_echo_area (const char *message);
+extern void echo_area_inform_of_deleted_window (WINDOW *window);
+extern void echo_area_prep_read (void);
+extern VFunction *ea_last_executed_command;
+extern char * info_read_completing_internal (WINDOW *window, const char *prompt,
+ REFERENCE **completions, int force);
+
+/* Read a line of text in the echo area. Return a malloc ()'ed string,
+ or NULL if the user aborted out of this read. WINDOW is the currently
+ active window, so that we can restore it when we need to. PROMPT, if
+ non-null, is a prompt to print before reading the line. */
+extern char *info_read_in_echo_area (WINDOW *window, const char *prompt);
+
+/* Read a line in the echo area with completion over COMPLETIONS.
+ Takes arguments of WINDOW, PROMPT, and COMPLETIONS, a REFERENCE **. */
+char *info_read_completing_in_echo_area (WINDOW *window,
+ const char *prompt, REFERENCE **completions);
+
+/* Read a line in the echo area allowing completion over COMPLETIONS, but
+ not requiring it. Takes arguments of WINDOW, PROMPT, and COMPLETIONS,
+ a REFERENCE **. */
+extern char *info_read_maybe_completing (WINDOW *window,
+ const char *prompt, REFERENCE **completions);
+
+extern void ea_insert (WINDOW *window, int count, unsigned char key);
+extern void ea_quoted_insert (WINDOW *window, int count, unsigned char key);
+extern void ea_beg_of_line (WINDOW *window, int count, unsigned char key);
+extern void ea_backward (WINDOW *window, int count, unsigned char key);
+extern void ea_delete (WINDOW *window, int count, unsigned char key);
+extern void ea_end_of_line (WINDOW *window, int count, unsigned char key);
+extern void ea_forward (WINDOW *window, int count, unsigned char key);
+extern void ea_abort (WINDOW *window, int count, unsigned char key);
+extern void ea_rubout (WINDOW *window, int count, unsigned char key);
+extern void ea_complete (WINDOW *window, int count, unsigned char key);
+extern void ea_newline (WINDOW *window, int count, unsigned char key);
+extern void ea_kill_line (WINDOW *window, int count, unsigned char key);
+extern void ea_backward_kill_line (WINDOW *window, int count, unsigned char key);
+extern void ea_transpose_chars (WINDOW *window, int count, unsigned char key);
+extern void ea_yank (WINDOW *window, int count, unsigned char key);
+extern void ea_tab_insert (WINDOW *window, int count, unsigned char key);
+extern void ea_possible_completions (WINDOW *window, int count, unsigned char key);
+extern void ea_backward_word (WINDOW *window, int count, unsigned char key);
+extern void ea_kill_word (WINDOW *window, int count, unsigned char key);
+extern void ea_forward_word (WINDOW *window, int count, unsigned char key);
+extern void ea_yank_pop (WINDOW *window, int count, unsigned char key);
+extern void ea_backward_kill_word (WINDOW *window, int count, unsigned char key);
+extern void ea_scroll_completions_window (WINDOW *window, int count,
+ unsigned char key);
+
+#endif /* not INFO_ECHO_AREA_H */
diff --git a/info/filesys.c b/info/filesys.c
new file mode 100644
index 0000000..dcf5c67
--- /dev/null
+++ b/info/filesys.c
@@ -0,0 +1,710 @@
+/* filesys.c -- filesystem specific functions.
+ $Id: filesys.c,v 1.12 2008/06/11 09:55:42 gray Exp $
+
+ Copyright (C) 1993, 1997, 1998, 2000, 2002, 2003, 2004, 2007, 2008
+ 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 Brian Fox (bfox@ai.mit.edu). */
+
+#include "info.h"
+
+#include "tilde.h"
+#include "filesys.h"
+
+/* Local to this file. */
+static char *info_file_in_path (char *filename, char *path);
+static char *lookup_info_filename (char *filename);
+static char *info_absolute_file (char *fname);
+
+static void remember_info_filename (char *filename, char *expansion);
+static void maybe_initialize_infopath (void);
+
+typedef struct
+{
+ char *suffix;
+ char *decompressor;
+} COMPRESSION_ALIST;
+
+static char *info_suffixes[] = {
+ ".info",
+ "-info",
+ "/index",
+ ".inf", /* 8+3 file on filesystem which supports long file names */
+#ifdef __MSDOS__
+ /* 8+3 file names strike again... */
+ ".in", /* for .inz, .igz etc. */
+ ".i",
+#endif
+ "",
+ NULL
+};
+
+static COMPRESSION_ALIST compress_suffixes[] = {
+ { ".gz", "gunzip" },
+ { ".bz2", "bunzip2" },
+ { ".lzma", "unlzma" },
+ { ".z", "gunzip" },
+ { ".Z", "uncompress" },
+ { ".Y", "unyabba" },
+#ifdef __MSDOS__
+ { "gz", "gunzip" },
+ { "z", "gunzip" },
+#endif
+ { NULL, NULL }
+};
+
+/* The path on which we look for info files. You can initialize this
+ from the environment variable INFOPATH if there is one, or you can
+ call info_add_path () to add paths to the beginning or end of it.
+ You can call zap_infopath () to make the path go away. */
+char *infopath = NULL;
+static int infopath_size = 0;
+
+/* Expand the filename in PARTIAL to make a real name for this operating
+ system. This looks in INFO_PATHS in order to find the correct file.
+ If it can't find the file, it returns NULL. */
+static char *local_temp_filename = NULL;
+static int local_temp_filename_size = 0;
+
+char *
+info_find_fullpath (char *partial)
+{
+ int initial_character;
+ char *temp;
+
+ filesys_error_number = 0;
+
+ maybe_initialize_infopath ();
+
+ if (partial && (initial_character = *partial))
+ {
+ char *expansion;
+
+ expansion = lookup_info_filename (partial);
+
+ if (expansion)
+ return expansion;
+
+ /* If we have the full path to this file, we still may have to add
+ various extensions to it. I guess we have to stat this file
+ after all. */
+ if (IS_ABSOLUTE (partial))
+ temp = info_absolute_file (partial);
+ else if (initial_character == '~')
+ {
+ expansion = tilde_expand_word (partial);
+ if (IS_ABSOLUTE (expansion))
+ {
+ temp = info_absolute_file (expansion);
+ free (expansion);
+ }
+ else
+ temp = expansion;
+ }
+ else if (initial_character == '.' &&
+ (IS_SLASH (partial[1]) ||
+ (partial[1] == '.' && IS_SLASH (partial[2]))))
+ {
+ if (local_temp_filename_size < 1024)
+ local_temp_filename = xrealloc
+ (local_temp_filename, (local_temp_filename_size = 1024));
+#if defined (HAVE_GETCWD)
+ if (!getcwd (local_temp_filename, local_temp_filename_size))
+#else /* !HAVE_GETCWD */
+ if (!getwd (local_temp_filename))
+#endif /* !HAVE_GETCWD */
+ {
+ filesys_error_number = errno;
+ return partial;
+ }
+
+ strcat (local_temp_filename, "/");
+ strcat (local_temp_filename, partial);
+ temp = info_absolute_file (local_temp_filename); /* try extensions */
+ if (!temp)
+ partial = local_temp_filename;
+ }
+ else
+ temp = info_file_in_path (partial, infopath);
+
+ if (temp)
+ {
+ remember_info_filename (partial, temp);
+ if (strlen (temp) > (unsigned int) local_temp_filename_size)
+ local_temp_filename = xrealloc
+ (local_temp_filename,
+ (local_temp_filename_size = (50 + strlen (temp))));
+ strcpy (local_temp_filename, temp);
+ free (temp);
+ return local_temp_filename;
+ }
+ }
+ return partial;
+}
+
+/* Scan the list of directories in PATH looking for FILENAME. If we find
+ one that is a regular file, return it as a new string. Otherwise, return
+ a NULL pointer. */
+static char *
+info_file_in_path (char *filename, char *path)
+{
+ struct stat finfo;
+ char *temp_dirname;
+ int statable, dirname_index;
+
+ /* Reject ridiculous cases up front, to prevent infinite recursion
+ later on. E.g., someone might say "info '(.)foo'"... */
+ if (!*filename || STREQ (filename, ".") || STREQ (filename, ".."))
+ return NULL;
+
+ dirname_index = 0;
+
+ while ((temp_dirname = extract_colon_unit (path, &dirname_index)))
+ {
+ register int i, pre_suffix_length;
+ char *temp;
+
+ /* Expand a leading tilde if one is present. */
+ if (*temp_dirname == '~')
+ {
+ char *expanded_dirname;
+
+ expanded_dirname = tilde_expand_word (temp_dirname);
+ free (temp_dirname);
+ temp_dirname = expanded_dirname;
+ }
+
+ temp = xmalloc (30 + strlen (temp_dirname) + strlen (filename));
+ strcpy (temp, temp_dirname);
+ if (!IS_SLASH (temp[(strlen (temp)) - 1]))
+ strcat (temp, "/");
+ strcat (temp, filename);
+
+ pre_suffix_length = strlen (temp);
+
+ free (temp_dirname);
+
+ for (i = 0; info_suffixes[i]; i++)
+ {
+ strcpy (temp + pre_suffix_length, info_suffixes[i]);
+
+ statable = (stat (temp, &finfo) == 0);
+
+ /* If we have found a regular file, then use that. Else, if we
+ have found a directory, look in that directory for this file. */
+ if (statable)
+ {
+ if (S_ISREG (finfo.st_mode))
+ {
+ return temp;
+ }
+ else if (S_ISDIR (finfo.st_mode))
+ {
+ char *newpath, *filename_only, *newtemp;
+
+ newpath = xstrdup (temp);
+ filename_only = filename_non_directory (filename);
+ newtemp = info_file_in_path (filename_only, newpath);
+
+ free (newpath);
+ if (newtemp)
+ {
+ free (temp);
+ return newtemp;
+ }
+ }
+ }
+ else
+ {
+ /* Add various compression suffixes to the name to see if
+ the file is present in compressed format. */
+ register int j, pre_compress_suffix_length;
+
+ pre_compress_suffix_length = strlen (temp);
+
+ for (j = 0; compress_suffixes[j].suffix; j++)
+ {
+ strcpy (temp + pre_compress_suffix_length,
+ compress_suffixes[j].suffix);
+
+ statable = (stat (temp, &finfo) == 0);
+ if (statable && (S_ISREG (finfo.st_mode)))
+ return temp;
+ }
+ }
+ }
+ free (temp);
+ }
+ return NULL;
+}
+
+/* Assume FNAME is an absolute file name, and check whether it is
+ a regular file. If it is, return it as a new string; otherwise
+ return a NULL pointer. We do it by taking the file name apart
+ into its directory and basename parts, and calling info_file_in_path.*/
+static char *
+info_absolute_file (char *fname)
+{
+ char *containing_dir = xstrdup (fname);
+ char *base = filename_non_directory (containing_dir);
+
+ if (base > containing_dir)
+ base[-1] = '\0';
+
+ return info_file_in_path (filename_non_directory (fname), containing_dir);
+}
+
+
+/* Given a string containing units of information separated by the
+ PATH_SEP character, return the next one after IDX, or NULL if there
+ are no more. Advance IDX to the character after the colon. */
+
+char *
+extract_colon_unit (char *string, int *idx)
+{
+ unsigned int i = (unsigned int) *idx;
+ unsigned int start = i;
+
+ if (!string || i >= strlen (string))
+ return NULL;
+
+ if (!string[i]) /* end of string */
+ return NULL;
+
+ /* Advance to next PATH_SEP. */
+ while (string[i] && string[i] != PATH_SEP[0])
+ i++;
+
+ {
+ char *value = xmalloc ((i - start) + 1);
+ strncpy (value, &string[start], (i - start));
+ value[i - start] = 0;
+
+ i++; /* move past PATH_SEP */
+ *idx = i;
+ return value;
+ }
+}
+
+/* A structure which associates a filename with its expansion. */
+typedef struct
+{
+ char *filename;
+ char *expansion;
+} FILENAME_LIST;
+
+/* An array of remembered arguments and results. */
+static FILENAME_LIST **names_and_files = NULL;
+static int names_and_files_index = 0;
+static int names_and_files_slots = 0;
+
+/* Find the result for having already called info_find_fullpath () with
+ FILENAME. */
+static char *
+lookup_info_filename (char *filename)
+{
+ if (filename && names_and_files)
+ {
+ register int i;
+ for (i = 0; names_and_files[i]; i++)
+ {
+ if (FILENAME_CMP (names_and_files[i]->filename, filename) == 0)
+ return names_and_files[i]->expansion;
+ }
+ }
+ return NULL;
+}
+
+/* Add a filename and its expansion to our list. */
+static void
+remember_info_filename (char *filename, char *expansion)
+{
+ FILENAME_LIST *new;
+
+ if (names_and_files_index + 2 > names_and_files_slots)
+ {
+ int alloc_size;
+ names_and_files_slots += 10;
+
+ alloc_size = names_and_files_slots * sizeof (FILENAME_LIST *);
+
+ names_and_files = xrealloc (names_and_files, alloc_size);
+ }
+
+ new = xmalloc (sizeof (FILENAME_LIST));
+ new->filename = xstrdup (filename);
+ new->expansion = expansion ? xstrdup (expansion) : NULL;
+
+ names_and_files[names_and_files_index++] = new;
+ names_and_files[names_and_files_index] = NULL;
+}
+
+static void
+maybe_initialize_infopath (void)
+{
+ if (!infopath_size)
+ {
+ infopath = (char *)
+ xmalloc (infopath_size = (1 + strlen (DEFAULT_INFOPATH)));
+
+ strcpy (infopath, DEFAULT_INFOPATH);
+ }
+}
+
+/* Add PATH to the list of paths found in INFOPATH. 2nd argument says
+ whether to put PATH at the front or end of INFOPATH. */
+void
+info_add_path (char *path, int where)
+{
+ int len;
+
+ if (!infopath)
+ {
+ infopath = xmalloc (infopath_size = 200 + strlen (path));
+ infopath[0] = '\0';
+ }
+
+ len = strlen (path) + strlen (infopath);
+
+ if (len + 2 >= infopath_size)
+ infopath = xrealloc (infopath, (infopath_size += (2 * len) + 2));
+
+ if (!*infopath)
+ strcpy (infopath, path);
+ else if (where == INFOPATH_APPEND)
+ {
+ strcat (infopath, PATH_SEP);
+ strcat (infopath, path);
+ }
+ else if (where == INFOPATH_PREPEND)
+ {
+ char *temp = xstrdup (infopath);
+ strcpy (infopath, path);
+ strcat (infopath, PATH_SEP);
+ strcat (infopath, temp);
+ free (temp);
+ }
+}
+
+/* Make INFOPATH have absolutely nothing in it. */
+void
+zap_infopath (void)
+{
+ if (infopath)
+ free (infopath);
+
+ infopath = NULL;
+ infopath_size = 0;
+}
+
+/* Given a chunk of text and its length, convert all CRLF pairs at every
+ end-of-line into a single Newline character. Return the length of
+ produced text.
+
+ This is required because the rest of code is too entrenched in having
+ a single newline at each EOL; in particular, searching for various
+ Info headers and cookies can become extremely tricky if that assumption
+ breaks.
+
+ FIXME: this could also support Mac-style text files with a single CR
+ at the EOL, but what about random CR characters in non-Mac files? Can
+ we afford converting them into newlines as well? Maybe implement some
+ heuristics here, like in Emacs 20.
+
+ FIXME: is it a good idea to show the EOL type on the modeline? */
+long
+convert_eols (char *text, long int textlen)
+{
+ register char *s = text;
+ register char *d = text;
+
+ while (textlen--)
+ {
+ if (*s == '\r' && textlen && s[1] == '\n')
+ {
+ s++;
+ textlen--;
+ }
+ *d++ = *s++;
+ }
+
+ return d - text;
+}
+
+/* Read the contents of PATHNAME, returning a buffer with the contents of
+ that file in it, and returning the size of that buffer in FILESIZE.
+ FINFO is a stat struct which has already been filled in by the caller.
+ If the file turns out to be compressed, set IS_COMPRESSED to non-zero.
+ If the file cannot be read, return a NULL pointer. */
+char *
+filesys_read_info_file (char *pathname, long int *filesize,
+ struct stat *finfo, int *is_compressed)
+{
+ long st_size;
+
+ *filesize = filesys_error_number = 0;
+
+ if (compressed_filename_p (pathname))
+ {
+ *is_compressed = 1;
+ return filesys_read_compressed (pathname, filesize);
+ }
+ else
+ {
+ int descriptor;
+ char *contents;
+
+ *is_compressed = 0;
+ descriptor = open (pathname, O_RDONLY | O_BINARY, 0666);
+
+ /* If the file couldn't be opened, give up. */
+ if (descriptor < 0)
+ {
+ filesys_error_number = errno;
+ return NULL;
+ }
+
+ /* Try to read the contents of this file. */
+ st_size = (long) finfo->st_size;
+ contents = xmalloc (1 + st_size);
+ if ((read (descriptor, contents, st_size)) != st_size)
+ {
+ filesys_error_number = errno;
+ close (descriptor);
+ free (contents);
+ return NULL;
+ }
+
+ close (descriptor);
+
+ /* Convert any DOS-style CRLF EOLs into Unix-style NL.
+ Seems like a good idea to have even on Unix, in case the Info
+ files are coming from some Windows system across a network. */
+ *filesize = convert_eols (contents, st_size);
+
+ /* EOL conversion can shrink the text quite a bit. We don't
+ want to waste storage. */
+ if (*filesize < st_size)
+ contents = xrealloc (contents, 1 + *filesize);
+ contents[*filesize] = '\0';
+
+ return contents;
+ }
+}
+
+/* Typically, pipe buffers are 4k. */
+#define BASIC_PIPE_BUFFER (4 * 1024)
+
+/* We use some large multiple of that. */
+#define FILESYS_PIPE_BUFFER_SIZE (16 * BASIC_PIPE_BUFFER)
+
+char *
+filesys_read_compressed (char *pathname, long int *filesize)
+{
+ FILE *stream;
+ char *command, *decompressor;
+ char *contents = NULL;
+
+ *filesize = filesys_error_number = 0;
+
+ decompressor = filesys_decompressor_for_file (pathname);
+
+ if (!decompressor)
+ return NULL;
+
+ command = xmalloc (15 + strlen (pathname) + strlen (decompressor));
+ /* Explicit .exe suffix makes the diagnostics of `popen'
+ better on systems where COMMAND.COM is the stock shell. */
+ sprintf (command, "%s%s < %s",
+ decompressor, STRIP_DOT_EXE ? ".exe" : "", pathname);
+
+#if !defined (BUILDING_LIBRARY)
+ if (info_windows_initialized_p)
+ {
+ char *temp;
+
+ temp = xmalloc (5 + strlen (command));
+ sprintf (temp, "%s...", command);
+ message_in_echo_area ("%s", temp, NULL);
+ free (temp);
+ }
+#endif /* !BUILDING_LIBRARY */
+
+ stream = popen (command, FOPEN_RBIN);
+ free (command);
+
+ /* Read chunks from this file until there are none left to read. */
+ if (stream)
+ {
+ long offset, size;
+ char *chunk;
+
+ offset = size = 0;
+ chunk = xmalloc (FILESYS_PIPE_BUFFER_SIZE);
+
+ while (1)
+ {
+ int bytes_read;
+
+ bytes_read = fread (chunk, 1, FILESYS_PIPE_BUFFER_SIZE, stream);
+
+ if (bytes_read + offset >= size)
+ contents = xrealloc
+ (contents, size += (2 * FILESYS_PIPE_BUFFER_SIZE));
+
+ memcpy (contents + offset, chunk, bytes_read);
+ offset += bytes_read;
+ if (bytes_read != FILESYS_PIPE_BUFFER_SIZE)
+ break;
+ }
+
+ free (chunk);
+ if (pclose (stream) == -1)
+ {
+ if (contents)
+ free (contents);
+ contents = NULL;
+ filesys_error_number = errno;
+ }
+ else
+ {
+ *filesize = convert_eols (contents, offset);
+ contents = xrealloc (contents, 1 + *filesize);
+ contents[*filesize] = '\0';
+ }
+ }
+ else
+ {
+ filesys_error_number = errno;
+ }
+
+#if !defined (BUILDING_LIBARARY)
+ if (info_windows_initialized_p)
+ unmessage_in_echo_area ();
+#endif /* !BUILDING_LIBRARY */
+ return contents;
+}
+
+/* Return non-zero if FILENAME belongs to a compressed file. */
+int
+compressed_filename_p (char *filename)
+{
+ char *decompressor;
+
+ /* Find the final extension of this filename, and see if it matches one
+ of our known ones. */
+ decompressor = filesys_decompressor_for_file (filename);
+
+ if (decompressor)
+ return 1;
+ else
+ return 0;
+}
+
+/* Return the command string that would be used to decompress FILENAME. */
+char *
+filesys_decompressor_for_file (char *filename)
+{
+ register int i;
+ char *extension = NULL;
+
+ /* Find the final extension of FILENAME, and see if it appears in our
+ list of known compression extensions. */
+ for (i = strlen (filename) - 1; i > 0; i--)
+ if (filename[i] == '.')
+ {
+ extension = filename + i;
+ break;
+ }
+
+ if (!extension)
+ return NULL;
+
+ for (i = 0; compress_suffixes[i].suffix; i++)
+ if (FILENAME_CMP (extension, compress_suffixes[i].suffix) == 0)
+ return compress_suffixes[i].decompressor;
+
+#if defined (__MSDOS__)
+ /* If no other suffix matched, allow any extension which ends
+ with `z' to be decompressed by gunzip. Due to limited 8+3 DOS
+ file namespace, we can expect many such cases, and supporting
+ every weird suffix thus produced would be a pain. */
+ if (extension[strlen (extension) - 1] == 'z' ||
+ extension[strlen (extension) - 1] == 'Z')
+ return "gunzip";
+#endif
+
+ return NULL;
+}
+
+/* The number of the most recent file system error. */
+int filesys_error_number = 0;
+
+/* A function which returns a pointer to a static buffer containing
+ an error message for FILENAME and ERROR_NUM. */
+static char *errmsg_buf = NULL;
+static int errmsg_buf_size = 0;
+
+char *
+filesys_error_string (char *filename, int error_num)
+{
+ int len;
+ char *result;
+
+ if (error_num == 0)
+ return NULL;
+
+ result = strerror (error_num);
+
+ len = 4 + strlen (filename) + strlen (result);
+ if (len >= errmsg_buf_size)
+ errmsg_buf = xrealloc (errmsg_buf, (errmsg_buf_size = 2 + len));
+
+ sprintf (errmsg_buf, "%s: %s", filename, result);
+ return errmsg_buf;
+}
+
+
+/* Check for "dir" with all the possible info and compression suffixes,
+ in combination. */
+
+int
+is_dir_name (char *filename)
+{
+ unsigned i;
+
+ for (i = 0; info_suffixes[i]; i++)
+ {
+ unsigned c;
+ char trydir[50];
+ strcpy (trydir, "dir");
+ strcat (trydir, info_suffixes[i]);
+
+ if (mbscasecmp (filename, trydir) == 0)
+ return 1;
+
+ for (c = 0; compress_suffixes[c].suffix; c++)
+ {
+ char dir_compressed[50]; /* can be short */
+ strcpy (dir_compressed, trydir);
+ strcat (dir_compressed, compress_suffixes[c].suffix);
+ if (mbscasecmp (filename, dir_compressed) == 0)
+ return 1;
+ }
+ }
+
+ return 0;
+}
diff --git a/info/filesys.h b/info/filesys.h
new file mode 100644
index 0000000..611a709
--- /dev/null
+++ b/info/filesys.h
@@ -0,0 +1,92 @@
+/* filesys.h -- external declarations for filesys.c.
+ $Id: filesys.h,v 1.7 2007/07/01 21:20:29 karl Exp $
+
+ Copyright (C) 1993, 1997, 1998, 2002, 2004, 2005, 2007 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 Brian Fox (bfox@ai.mit.edu). */
+
+#ifndef INFO_FILESYS_H
+#define INFO_FILESYS_H
+
+/* The path on which we look for info files. You can initialize this
+ from the environment variable INFOPATH if there is one, or you can
+ call info_add_path () to add paths to the beginning or end of it. */
+extern char *infopath;
+
+/* Make INFOPATH have absolutely nothing in it. */
+extern void zap_infopath (void);
+
+/* Add PATH to the list of paths found in INFOPATH. 2nd argument says
+ whether to put PATH at the front or end of INFOPATH. */
+extern void info_add_path (char *path, int where);
+
+/* Defines that are passed along with the pathname to info_add_path (). */
+#define INFOPATH_PREPEND 0
+#define INFOPATH_APPEND 1
+
+/* Expand the filename in PARTIAL to make a real name for this operating
+ system. This looks in INFO_PATHS in order to find the correct file.
+ If it can't find the file, it returns NULL. */
+extern char *info_find_fullpath (char *partial);
+
+/* Given a chunk of text and its length, convert all CRLF pairs at the
+ EOLs into a single Newline character. Return the length of produced
+ text. */
+long convert_eols (char *text, long textlen);
+
+/* Read the contents of PATHNAME, returning a buffer with the contents of
+ that file in it, and returning the size of that buffer in FILESIZE.
+ FINFO is a stat struct which has already been filled in by the caller.
+ If the file cannot be read, return a NULL pointer. */
+extern char *filesys_read_info_file (char *pathname, long int *filesize,
+ struct stat *finfo, int *is_compressed);
+
+extern char *filesys_read_compressed (char *pathname, long int *filesize);
+
+/* Return the command string that would be used to decompress FILENAME. */
+extern char *filesys_decompressor_for_file (char *filename);
+extern int compressed_filename_p (char *filename);
+
+/* A function which returns a pointer to a static buffer containing
+ an error message for FILENAME and ERROR_NUM. */
+extern char *filesys_error_string (char *filename, int error_num);
+
+/* The number of the most recent file system error. */
+extern int filesys_error_number;
+
+/* Given a string containing units of information separated by colons,
+ return the next one pointed to by IDX, or NULL if there are no more.
+ Advance IDX to the character after the colon. */
+extern char *extract_colon_unit (char *string, int *idx);
+
+/* Return true if FILENAME is `dir', with a possible compression suffix. */
+extern int is_dir_name (char *filename);
+
+/* The default value of INFOPATH. */
+#if !defined (DEFAULT_INFOPATH)
+# define DEFAULT_INFOPATH ".:/usr/local/info:/usr/info:/usr/local/lib/info:/usr/lib/info:/usr/local/gnu/info:/usr/local/gnu/lib/info:/usr/gnu/info:/usr/gnu/lib/info:/opt/gnu/info:/usr/share/info:/usr/share/lib/info:/usr/local/share/info:/usr/local/share/lib/info:/usr/gnu/lib/emacs/info:/usr/local/gnu/lib/emacs/info:/usr/local/lib/emacs/info:/usr/local/emacs/info"
+#endif /* !DEFAULT_INFOPATH */
+
+#if !defined (S_ISREG) && defined (S_IFREG)
+# define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
+#endif /* !S_ISREG && S_IFREG */
+
+#if !defined (S_ISDIR) && defined (S_IFDIR)
+# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+#endif /* !S_ISDIR && S_IFDIR */
+
+#endif /* not INFO_FILESYS_H */
diff --git a/info/footnotes.c b/info/footnotes.c
new file mode 100644
index 0000000..552ae2a
--- /dev/null
+++ b/info/footnotes.c
@@ -0,0 +1,267 @@
+/* footnotes.c -- Some functions for manipulating footnotes.
+ $Id: footnotes.c,v 1.9 2008/06/11 09:55:42 gray Exp $
+
+ Copyright (C) 1993, 1997, 1998, 1999, 2002, 2004, 2007,
+ 2008 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/>.
+
+ Originally written by Brian Fox (bfox@ai.mit.edu). */
+
+#include "info.h"
+
+/* Nonzero means attempt to show footnotes when displaying a new window. */
+int auto_footnotes_p = 0;
+
+static char *footnote_nodename = "*Footnotes*";
+
+NODE * make_footnotes_node (NODE *node);
+
+#define FOOTNOTE_HEADER_FORMAT \
+ "*** Footnotes appearing in the node `%s' ***\n"
+
+/* Find the window currently showing footnotes. */
+static WINDOW *
+find_footnotes_window (void)
+{
+ WINDOW *win;
+
+ /* Try to find an existing window first. */
+ for (win = windows; win; win = win->next)
+ if (internal_info_node_p (win->node) &&
+ (strcmp (win->node->nodename, footnote_nodename) == 0))
+ break;
+
+ return win;
+}
+
+/* Manufacture a node containing the footnotes of this node, and
+ return the manufactured node. If NODE has no footnotes, return a
+ NULL pointer. */
+NODE *
+make_footnotes_node (NODE *node)
+{
+ NODE *fn_node, *result = NULL;
+ long fn_start;
+
+ /* Make the initial assumption that the footnotes appear as simple
+ text within this windows node. */
+ fn_node = node;
+
+ /* See if this node contains the magic footnote label. */
+ fn_start =
+ info_search_in_node (FOOTNOTE_LABEL, node, 0, NULL, 1, 0);
+
+ /* If it doesn't, check to see if it has an associated footnotes node. */
+ if (fn_start == -1)
+ {
+ REFERENCE **refs;
+
+ refs = info_xrefs_of_node (node);
+
+ if (refs)
+ {
+ register int i;
+ char *refname;
+ int reflen = strlen ("-Footnotes") + strlen (node->nodename);
+
+ refname = xmalloc (reflen + 1);
+
+ strcpy (refname, node->nodename);
+ strcat (refname, "-Footnotes");
+
+ for (i = 0; refs[i]; i++)
+ if ((refs[i]->nodename != NULL) &&
+ /* Support both the older "foo-Footnotes" and the new
+ style "foo-Footnote-NN" references. */
+ (strcmp (refs[i]->nodename, refname) == 0 ||
+ (strncmp (refs[i]->nodename, refname, reflen - 1) == 0 &&
+ refs[i]->nodename[reflen - 1] == '-' &&
+ isdigit (refs[i]->nodename[reflen]))))
+ {
+ char *filename;
+
+ filename = node->parent;
+ if (!filename)
+ filename = node->filename;
+
+ fn_node = info_get_node (filename, refname);
+
+ if (fn_node)
+ fn_start = 0;
+
+ break;
+ }
+
+ free (refname);
+ info_free_references (refs);
+ }
+ }
+
+ /* If we never found the start of a footnotes area, quit now. */
+ if (fn_start == -1)
+ return NULL;
+
+ /* Make the new node. */
+ result = xmalloc (sizeof (NODE));
+ result->flags = 0;
+ result->display_pos = 0;
+
+ /* Get the size of the footnotes appearing within this node. */
+ {
+ char *header;
+ long text_start = fn_start;
+
+ header = xmalloc
+ (1 + strlen (node->nodename) + strlen (FOOTNOTE_HEADER_FORMAT));
+ sprintf (header, FOOTNOTE_HEADER_FORMAT, node->nodename);
+
+ /* Move the start of the displayed text to right after the first line.
+ This effectively skips either "---- footno...", or "File: foo...". */
+ while (text_start < fn_node->nodelen)
+ if (fn_node->contents[text_start++] == '\n')
+ break;
+
+ result->nodelen = strlen (header) + fn_node->nodelen - text_start;
+
+ /* Set the contents of this node. */
+ result->contents = xmalloc (1 + result->nodelen);
+ sprintf (result->contents, "%s", header);
+ memcpy (result->contents + strlen (header),
+ fn_node->contents + text_start, fn_node->nodelen - text_start);
+
+ name_internal_node (result, footnote_nodename);
+ free (header);
+ }
+
+#if defined (NOTDEF)
+ /* If the footnotes were gleaned from the node that we were called with,
+ shorten the calling node's display length. */
+ if (fn_node == node)
+ narrow_node (node, 0, fn_start);
+#endif /* NOTDEF */
+
+ return result;
+}
+
+/* Create or delete the footnotes window depending on whether footnotes
+ exist in WINDOW's node or not. Returns FN_FOUND if footnotes were found
+ and displayed. Returns FN_UNFOUND if there were no footnotes found
+ in WINDOW's node. Returns FN_UNABLE if there were footnotes, but the
+ window to show them couldn't be made. */
+int
+info_get_or_remove_footnotes (WINDOW *window)
+{
+ WINDOW *fn_win;
+ NODE *new_footnotes;
+
+ fn_win = find_footnotes_window ();
+
+ /* If we are in the footnotes window, change nothing. */
+ if (fn_win == window)
+ return FN_FOUND;
+
+ /* Try to find footnotes for this window's node. */
+ new_footnotes = make_footnotes_node (window->node);
+
+ /* If there was a window showing footnotes, and there are no footnotes
+ for the current window, delete the old footnote window. */
+ if (fn_win && !new_footnotes)
+ {
+ if (windows->next)
+ info_delete_window_internal (fn_win);
+ }
+
+ /* If there are footnotes for this window's node, but no window around
+ showing footnotes, try to make a new window. */
+ if (new_footnotes && !fn_win)
+ {
+ WINDOW *old_active;
+ WINDOW *last, *win;
+
+ /* Always make this window be the last one appearing in the list. Find
+ the last window in the chain. */
+ for (win = windows, last = windows; win; last = win, win = win->next);
+
+ /* Try to split this window, and make the split window the one to
+ contain the footnotes. */
+ old_active = active_window;
+ active_window = last;
+ fn_win = window_make_window (new_footnotes);
+ active_window = old_active;
+
+ if (!fn_win)
+ {
+ free (new_footnotes->contents);
+ free (new_footnotes);
+
+ /* If we are hacking automatic footnotes, and there are footnotes
+ but we couldn't display them, print a message to that effect. */
+ if (auto_footnotes_p)
+ inform_in_echo_area (_("Footnotes could not be displayed"));
+ return FN_UNABLE;
+ }
+ }
+
+ /* If there are footnotes, and there is a window to display them,
+ make that window be the number of lines appearing in the footnotes. */
+ if (new_footnotes && fn_win)
+ {
+ window_set_node_of_window (fn_win, new_footnotes);
+
+ window_change_window_height
+ (fn_win, fn_win->line_count - fn_win->height);
+
+ remember_window_and_node (fn_win, new_footnotes);
+ add_gcable_pointer (new_footnotes->contents);
+ }
+
+ if (!new_footnotes)
+ return FN_UNFOUND;
+ else
+ return FN_FOUND;
+}
+
+/* Show the footnotes associated with this node in another window. */
+DECLARE_INFO_COMMAND (info_show_footnotes,
+ _("Show the footnotes associated with this node in another window"))
+{
+ /* A negative argument means just make the window go away. */
+ if (count < 0)
+ {
+ WINDOW *fn_win = find_footnotes_window ();
+
+ /* If there is an old footnotes window, and it isn't the only window
+ on the screen, delete it. */
+ if (fn_win && windows->next)
+ info_delete_window_internal (fn_win);
+ }
+ else
+ {
+ int result;
+
+ result = info_get_or_remove_footnotes (window);
+
+ switch (result)
+ {
+ case FN_UNFOUND:
+ info_error (msg_no_foot_node, NULL, NULL);
+ break;
+
+ case FN_UNABLE:
+ info_error (msg_win_too_small, NULL, NULL);
+ break;
+ }
+ }
+}
diff --git a/info/footnotes.h b/info/footnotes.h
new file mode 100644
index 0000000..6a82828
--- /dev/null
+++ b/info/footnotes.h
@@ -0,0 +1,43 @@
+/* footnotes.h -- Some functions for manipulating footnotes.
+ $Id: footnotes.h,v 1.6 2007/07/01 21:20:29 karl Exp $
+
+ Copyright (C) 1993, 1997, 1998, 2002, 2004, 2007
+ 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 Brian Fox (bfox@ai.mit.edu). */
+
+#ifndef INFO_FOOTNOTES_H
+#define INFO_FOOTNOTES_H
+
+/* Magic string which indicates following text is footnotes. */
+#define FOOTNOTE_LABEL N_("---------- Footnotes ----------")
+
+#define FN_FOUND 0
+#define FN_UNFOUND 1
+#define FN_UNABLE 2
+
+
+/* Create or delete the footnotes window depending on whether footnotes
+ exist in WINDOW's node or not. Returns FN_FOUND if footnotes were found
+ and displayed. Returns FN_UNFOUND if there were no footnotes found
+ in WINDOW's node. Returns FN_UNABLE if there were footnotes, but the
+ window to show them couldn't be made. */
+extern int info_get_or_remove_footnotes (WINDOW *window);
+
+/* Non-zero means attempt to show footnotes when displaying a new window. */
+extern int auto_footnotes_p;
+
+#endif /* not INFO_FOOTNOTES_H */
diff --git a/info/gc.c b/info/gc.c
new file mode 100644
index 0000000..e883e4b
--- /dev/null
+++ b/info/gc.c
@@ -0,0 +1,91 @@
+/* gc.c -- Functions to remember and garbage collect unused node contents.
+ $Id: gc.c,v 1.7 2008/06/11 09:55:42 gray Exp $
+
+ Copyright (C) 1993, 2004, 2007, 2008 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 Brian Fox (bfox@ai.mit.edu). */
+
+#include "info.h"
+
+/* Array of pointers to the contents of gc-able nodes. A pointer on this
+ list can be garbage collected when no info window contains a node whose
+ contents member match the pointer. */
+static char **gcable_pointers = NULL;
+static int gcable_pointers_index = 0;
+static int gcable_pointers_slots = 0;
+
+/* Add POINTER to the list of garbage collectible pointers. A pointer
+ is not actually garbage collected until no info window contains a node
+ whose contents member is equal to the pointer. */
+void
+add_gcable_pointer (char *pointer)
+{
+ gc_pointers ();
+ add_pointer_to_array (pointer, gcable_pointers_index, gcable_pointers,
+ gcable_pointers_slots, 10, char *);
+}
+
+/* Grovel the list of info windows and gc-able pointers finding those
+ node->contents which are collectible, and free them. */
+void
+gc_pointers (void)
+{
+ register int i, j, k;
+ INFO_WINDOW *iw;
+ char **new = NULL;
+ int new_index = 0;
+ int new_slots = 0;
+
+ if (!info_windows || !gcable_pointers_index)
+ return;
+
+ for (i = 0; (iw = info_windows[i]); i++)
+ {
+ for (j = 0; j < iw->nodes_index; j++)
+ {
+ NODE *node = iw->nodes[j];
+
+ /* If this node->contents appears in our list of gcable_pointers,
+ it is not gc-able, so save it. */
+ for (k = 0; k < gcable_pointers_index; k++)
+ if (gcable_pointers[k] == node->contents)
+ {
+ add_pointer_to_array
+ (node->contents, new_index, new, new_slots, 10, char *);
+ break;
+ }
+ }
+ }
+
+ /* We have gathered all of the pointers which need to be saved. Free any
+ of the original pointers which do not appear in the new list. */
+ for (i = 0; i < gcable_pointers_index; i++)
+ {
+ for (j = 0; j < new_index; j++)
+ if (gcable_pointers[i] == new[j])
+ break;
+
+ /* If we got all the way through the new list, then the old pointer
+ can be garbage collected. */
+ if (new && !new[j])
+ free (gcable_pointers[i]);
+ }
+
+ free (gcable_pointers);
+ gcable_pointers = new;
+ gcable_pointers_slots = new_slots;
+ gcable_pointers_index = new_index;
+}
diff --git a/info/gc.h b/info/gc.h
new file mode 100644
index 0000000..a35fcac
--- /dev/null
+++ b/info/gc.h
@@ -0,0 +1,36 @@
+/* gc.h -- Functions for garbage collecting unused node contents.
+ $Id: gc.h,v 1.6 2007/07/01 21:20:30 karl Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+
+ Copyright (C) 1993, 1997, 2004, 2007 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 Brian Fox (bfox@ai.mit.edu). */
+
+#ifndef INFO_GC_H
+#define INFO_GC_H
+
+/* Add POINTER to the list of garbage collectible pointers. A pointer
+ is not actually garbage collected until no info window contains a node
+ whose contents member is equal to the pointer. */
+extern void add_gcable_pointer (char *pointer);
+
+/* Grovel the list of info windows and gc-able pointers finding those
+ node->contents which are collectible, and free them. */
+extern void gc_pointers (void);
+
+#endif /* not INFO_GC_H */
diff --git a/info/indices.c b/info/indices.c
new file mode 100644
index 0000000..af04cdc
--- /dev/null
+++ b/info/indices.c
@@ -0,0 +1,743 @@
+/* indices.c -- deal with an Info file index.
+ $Id: indices.c,v 1.11 2008/06/11 09:55:42 gray Exp $
+
+ Copyright (C) 1993, 1997, 1998, 1999, 2002, 2003, 2004, 2007, 2008
+ 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/>.
+
+ Originally written by Brian Fox (bfox@ai.mit.edu). */
+
+#include "info.h"
+#include "indices.h"
+
+/* User-visible variable controls the output of info-index-next. */
+int show_index_match = 1;
+
+/* In the Info sense, an index is a menu. This variable holds the last
+ parsed index. */
+static REFERENCE **index_index = NULL;
+
+/* The offset of the most recently selected index element. */
+static int index_offset = 0;
+
+/* Variable which holds the last string searched for. */
+static char *index_search = NULL;
+
+/* A couple of "globals" describing where the initial index was found. */
+static char *initial_index_filename = NULL;
+static char *initial_index_nodename = NULL;
+
+/* A structure associating index names with index offset ranges. */
+typedef struct {
+ char *name; /* The nodename of this index. */
+ int first; /* The index in our list of the first entry. */
+ int last; /* The index in our list of the last entry. */
+} INDEX_NAME_ASSOC;
+
+/* An array associating index nodenames with index offset ranges. */
+static INDEX_NAME_ASSOC **index_nodenames = NULL;
+static int index_nodenames_index = 0;
+static int index_nodenames_slots = 0;
+
+/* Add the name of NODE, and the range of the associated index elements
+ (passed in ARRAY) to index_nodenames. */
+static void
+add_index_to_index_nodenames (REFERENCE **array, NODE *node)
+{
+ register int i, last;
+ INDEX_NAME_ASSOC *assoc;
+
+ for (last = 0; array[last + 1]; last++);
+ assoc = xmalloc (sizeof (INDEX_NAME_ASSOC));
+ assoc->name = xstrdup (node->nodename);
+
+ if (!index_nodenames_index)
+ {
+ assoc->first = 0;
+ assoc->last = last;
+ }
+ else
+ {
+ for (i = 0; index_nodenames[i + 1]; i++);
+ assoc->first = 1 + index_nodenames[i]->last;
+ assoc->last = assoc->first + last;
+ }
+ add_pointer_to_array
+ (assoc, index_nodenames_index, index_nodenames, index_nodenames_slots,
+ 10, INDEX_NAME_ASSOC *);
+}
+
+/* Find and return the indices of WINDOW's file. The indices are defined
+ as the first node in the file containing the word "Index" and any
+ immediately following nodes whose names also contain "Index". All such
+ indices are concatenated and the result returned. If WINDOW's info file
+ doesn't have any indices, a NULL pointer is returned. */
+REFERENCE **
+info_indices_of_window (WINDOW *window)
+{
+ FILE_BUFFER *fb;
+
+ fb = file_buffer_of_window (window);
+
+ return info_indices_of_file_buffer (fb);
+}
+
+REFERENCE **
+info_indices_of_file_buffer (FILE_BUFFER *file_buffer)
+{
+ register int i;
+ REFERENCE **result = NULL;
+
+ /* No file buffer, no indices. */
+ if (!file_buffer)
+ return NULL;
+
+ /* Reset globals describing where the index was found. */
+ maybe_free (initial_index_filename);
+ maybe_free (initial_index_nodename);
+ initial_index_filename = NULL;
+ initial_index_nodename = NULL;
+
+ if (index_nodenames)
+ {
+ for (i = 0; index_nodenames[i]; i++)
+ {
+ free (index_nodenames[i]->name);
+ free (index_nodenames[i]);
+ }
+
+ index_nodenames_index = 0;
+ index_nodenames[0] = NULL;
+ }
+
+ /* Grovel the names of the nodes found in this file. */
+ if (file_buffer->tags)
+ {
+ TAG *tag;
+
+ for (i = 0; (tag = file_buffer->tags[i]); i++)
+ {
+ if (string_in_line ("Index", tag->nodename) != -1)
+ {
+ NODE *node;
+ REFERENCE **menu;
+
+ /* Found one. Get its menu. */
+ node = info_get_node (tag->filename, tag->nodename);
+ if (!node)
+ continue;
+
+ /* Remember the filename and nodename of this index. */
+ initial_index_filename = xstrdup (file_buffer->filename);
+ initial_index_nodename = xstrdup (tag->nodename);
+
+ menu = info_menu_of_node (node);
+
+ /* If we have a menu, add this index's nodename and range
+ to our list of index_nodenames. */
+ if (menu)
+ {
+ add_index_to_index_nodenames (menu, node);
+
+ /* Concatenate the references found so far. */
+ result = info_concatenate_references (result, menu);
+ }
+ free (node);
+ }
+ }
+ }
+
+ /* If there is a result, clean it up so that every entry has a filename. */
+ for (i = 0; result && result[i]; i++)
+ if (!result[i]->filename)
+ result[i]->filename = xstrdup (file_buffer->filename);
+
+ return result;
+}
+
+DECLARE_INFO_COMMAND (info_index_search,
+ _("Look up a string in the index for this file"))
+{
+ do_info_index_search (window, count, 0);
+}
+
+/* Look up SEARCH_STRING in the index for this file. If SEARCH_STRING
+ is NULL, prompt user for input. */
+void
+do_info_index_search (WINDOW *window, int count, char *search_string)
+{
+ FILE_BUFFER *fb;
+ char *line;
+
+ /* Reset the index offset, since this is not the info-index-next command. */
+ index_offset = 0;
+
+ /* The user is selecting a new search string, so flush the old one. */
+ maybe_free (index_search);
+ index_search = NULL;
+
+ /* If this window's file is not the same as the one that we last built an
+ index for, build and remember an index now. */
+ fb = file_buffer_of_window (window);
+ if (!initial_index_filename ||
+ (FILENAME_CMP (initial_index_filename, fb->filename) != 0))
+ {
+ info_free_references (index_index);
+ window_message_in_echo_area (_("Finding index entries..."),
+ NULL, NULL);
+ index_index = info_indices_of_file_buffer (fb);
+ }
+
+ /* If there is no index, quit now. */
+ if (!index_index)
+ {
+ info_error (_("No indices found."), NULL, NULL);
+ return;
+ }
+
+ /* Okay, there is an index. Look for SEARCH_STRING, or, if it is
+ empty, prompt for one. */
+ if (search_string && *search_string)
+ line = xstrdup (search_string);
+ else
+ {
+ line = info_read_maybe_completing (window, _("Index entry: "),
+ index_index);
+ window = active_window;
+
+ /* User aborted? */
+ if (!line)
+ {
+ info_abort_key (active_window, 1, 0);
+ return;
+ }
+
+ /* Empty line means move to the Index node. */
+ if (!*line)
+ {
+ free (line);
+
+ if (initial_index_filename && initial_index_nodename)
+ {
+ NODE *node;
+
+ node = info_get_node (initial_index_filename,
+ initial_index_nodename);
+ set_remembered_pagetop_and_point (window);
+ window_set_node_of_window (window, node);
+ remember_window_and_node (window, node);
+ window_clear_echo_area ();
+ return;
+ }
+ }
+ }
+
+ /* The user typed either a completed index label, or a partial string.
+ Find an exact match, or, failing that, the first index entry containing
+ the partial string. So, we just call info_next_index_match () with minor
+ manipulation of INDEX_OFFSET. */
+ {
+ int old_offset;
+
+ /* Start the search right after/before this index. */
+ if (count < 0)
+ {
+ register int i;
+ for (i = 0; index_index[i]; i++);
+ index_offset = i;
+ }
+ else
+ index_offset = -1;
+
+ old_offset = index_offset;
+
+ /* The "last" string searched for is this one. */
+ index_search = line;
+
+ /* Find it, or error. */
+ info_next_index_match (window, count, 0);
+
+ /* If the search failed, return the index offset to where it belongs. */
+ if (index_offset == old_offset)
+ index_offset = 0;
+ }
+}
+
+int
+index_entry_exists (WINDOW *window, char *string)
+{
+ register int i;
+ FILE_BUFFER *fb;
+
+ /* If there is no previous search string, the user hasn't built an index
+ yet. */
+ if (!string)
+ return 0;
+
+ fb = file_buffer_of_window (window);
+ if (!initial_index_filename
+ || (FILENAME_CMP (initial_index_filename, fb->filename) != 0))
+ {
+ info_free_references (index_index);
+ index_index = info_indices_of_file_buffer (fb);
+ }
+
+ /* If there is no index, that is an error. */
+ if (!index_index)
+ return 0;
+
+ for (i = 0; (i > -1) && (index_index[i]); i++)
+ if (strcmp (string, index_index[i]->label) == 0)
+ break;
+
+ /* If that failed, look for the next substring match. */
+ if ((i < 0) || (!index_index[i]))
+ {
+ for (i = 0; (i > -1) && (index_index[i]); i++)
+ if (string_in_line (string, index_index[i]->label) != -1)
+ break;
+
+ if ((i > -1) && (index_index[i]))
+ string_in_line (string, index_index[i]->label);
+ }
+
+ /* If that failed, return 0. */
+ if ((i < 0) || (!index_index[i]))
+ return 0;
+
+ return 1;
+}
+
+DECLARE_INFO_COMMAND (info_next_index_match,
+ _("Go to the next matching index item from the last `\\[index-search]' command"))
+{
+ register int i;
+ int partial, dir;
+ NODE *node;
+
+ /* If there is no previous search string, the user hasn't built an index
+ yet. */
+ if (!index_search)
+ {
+ info_error (_("No previous index search string."), NULL, NULL);
+ return;
+ }
+
+ /* If there is no index, that is an error. */
+ if (!index_index)
+ {
+ info_error (_("No index entries."), NULL, NULL);
+ return;
+ }
+
+ /* The direction of this search is controlled by the value of the
+ numeric argument. */
+ if (count < 0)
+ dir = -1;
+ else
+ dir = 1;
+
+ /* Search for the next occurence of index_search. First try to find
+ an exact match. */
+ partial = 0;
+
+ for (i = index_offset + dir; (i > -1) && (index_index[i]); i += dir)
+ if (strcmp (index_search, index_index[i]->label) == 0)
+ break;
+
+ /* If that failed, look for the next substring match. */
+ if ((i < 0) || (!index_index[i]))
+ {
+ for (i = index_offset + dir; (i > -1) && (index_index[i]); i += dir)
+ if (string_in_line (index_search, index_index[i]->label) != -1)
+ break;
+
+ if ((i > -1) && (index_index[i]))
+ partial = string_in_line (index_search, index_index[i]->label);
+ }
+
+ /* If that failed, print an error. */
+ if ((i < 0) || (!index_index[i]))
+ {
+ info_error (_("No %sindex entries containing `%s'."),
+ index_offset > 0 ? (char *) _("more ") : "", index_search);
+ return;
+ }
+
+ /* Okay, we found the next one. Move the offset to the current entry. */
+ index_offset = i;
+
+ /* Report to the user on what we have found. */
+ {
+ register int j;
+ const char *name = _("CAN'T SEE THIS");
+ char *match;
+
+ for (j = 0; index_nodenames[j]; j++)
+ {
+ if ((i >= index_nodenames[j]->first) &&
+ (i <= index_nodenames[j]->last))
+ {
+ name = index_nodenames[j]->name;
+ break;
+ }
+ }
+
+ /* If we had a partial match, indicate to the user which part of the
+ string matched. */
+ match = xstrdup (index_index[i]->label);
+
+ if (partial && show_index_match)
+ {
+ int k, ls, start, upper;
+
+ ls = strlen (index_search);
+ start = partial - ls;
+ upper = isupper (match[start]) ? 1 : 0;
+
+ for (k = 0; k < ls; k++)
+ if (upper)
+ match[k + start] = info_tolower (match[k + start]);
+ else
+ match[k + start] = info_toupper (match[k + start]);
+ }
+
+ {
+ char *format;
+
+ format = replace_in_documentation
+ (_("Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"),
+ 0);
+
+ window_message_in_echo_area (format, match, (char *) name);
+ }
+
+ free (match);
+ }
+
+ /* Select the node corresponding to this index entry. */
+ node = info_get_node (index_index[i]->filename, index_index[i]->nodename);
+
+ if (!node)
+ {
+ info_error (msg_cant_file_node,
+ index_index[i]->filename, index_index[i]->nodename);
+ return;
+ }
+
+ info_set_node_of_window (1, window, node);
+
+ {
+ long loc;
+ long line = index_index[i]->line_number - 1;
+
+ if (line >= 0 && line < window->line_count)
+ {
+ /* Jump to the line number specified in the index entry. */
+ loc = window->line_starts[line] - window->node->contents;
+ }
+ else
+ {
+ /* Try to find an occurence of LABEL in this node. */
+ long start = window->line_starts[1] - window->node->contents;
+ loc = info_target_search_node (node, index_index[i]->label, start);
+ }
+
+ if (loc != -1)
+ {
+ window->point = loc;
+ window_adjust_pagetop (window);
+ }
+ }
+}
+
+/* **************************************************************** */
+/* */
+/* Info APROPOS: Search every known index. */
+/* */
+/* **************************************************************** */
+
+/* For every menu item in DIR, search the indices of that file for
+ SEARCH_STRING. */
+REFERENCE **
+apropos_in_all_indices (char *search_string, int inform)
+{
+ register int i, dir_index;
+ REFERENCE **all_indices = NULL;
+ REFERENCE **dir_menu = NULL;
+ NODE *dir_node;
+
+ dir_node = info_get_node ("dir", "Top");
+ if (dir_node)
+ dir_menu = info_menu_of_node (dir_node);
+
+ if (!dir_menu)
+ return NULL;
+
+ /* For every menu item in DIR, get the associated node's file buffer and
+ read the indices of that file buffer. Gather all of the indices into
+ one large one. */
+ for (dir_index = 0; dir_menu[dir_index]; dir_index++)
+ {
+ REFERENCE **this_index, *this_item;
+ NODE *this_node;
+ FILE_BUFFER *this_fb;
+ int dir_node_duplicated = 0;
+
+ this_item = dir_menu[dir_index];
+
+ if (!this_item->filename)
+ {
+ dir_node_duplicated = 1;
+ if (dir_node->parent)
+ this_item->filename = xstrdup (dir_node->parent);
+ else
+ this_item->filename = xstrdup (dir_node->filename);
+ }
+
+ /* Find this node. If we cannot find it, try using the label of the
+ entry as a file (i.e., "(LABEL)Top"). */
+ this_node = info_get_node (this_item->filename, this_item->nodename);
+
+ if (!this_node && this_item->nodename &&
+ (strcmp (this_item->label, this_item->nodename) == 0))
+ this_node = info_get_node (this_item->label, "Top");
+
+ if (!this_node)
+ {
+ if (dir_node_duplicated)
+ free (this_item->filename);
+ continue;
+ }
+
+ /* Get the file buffer associated with this node. */
+ {
+ char *files_name;
+
+ files_name = this_node->parent;
+ if (!files_name)
+ files_name = this_node->filename;
+
+ this_fb = info_find_file (files_name);
+
+ /* If we already scanned this file, don't do that again.
+ In addition to being faster, this also avoids having
+ multiple identical entries in the *Apropos* menu. */
+ for (i = 0; i < dir_index; i++)
+ if (FILENAME_CMP (this_fb->filename, dir_menu[i]->filename) == 0)
+ break;
+ if (i < dir_index)
+ {
+ if (dir_node_duplicated)
+ free (this_item->filename);
+ continue;
+ }
+
+ if (this_fb && inform)
+ message_in_echo_area (_("Scanning indices of `%s'..."),
+ files_name, NULL);
+
+ this_index = info_indices_of_file_buffer (this_fb);
+ free (this_node);
+
+ if (this_fb && inform)
+ unmessage_in_echo_area ();
+ }
+
+ if (this_index)
+ {
+ /* Remember the filename which contains this set of references. */
+ for (i = 0; this_index && this_index[i]; i++)
+ if (!this_index[i]->filename)
+ this_index[i]->filename = xstrdup (this_fb->filename);
+
+ /* Concatenate with the other indices. */
+ all_indices = info_concatenate_references (all_indices, this_index);
+ }
+ }
+
+ info_free_references (dir_menu);
+
+ /* Build a list of the references which contain SEARCH_STRING. */
+ if (all_indices)
+ {
+ REFERENCE *entry, **apropos_list = NULL;
+ int apropos_list_index = 0;
+ int apropos_list_slots = 0;
+
+ for (i = 0; (entry = all_indices[i]); i++)
+ {
+ if (string_in_line (search_string, entry->label) != -1)
+ {
+ add_pointer_to_array
+ (entry, apropos_list_index, apropos_list, apropos_list_slots,
+ 100, REFERENCE *);
+ }
+ else
+ {
+ maybe_free (entry->label);
+ maybe_free (entry->filename);
+ maybe_free (entry->nodename);
+ free (entry);
+ }
+ }
+
+ free (all_indices);
+ all_indices = apropos_list;
+ }
+ return all_indices;
+}
+
+#define APROPOS_NONE \
+ N_("No available info files have `%s' in their indices.")
+
+void
+info_apropos (char *string)
+{
+ REFERENCE **apropos_list;
+
+ apropos_list = apropos_in_all_indices (string, 0);
+
+ if (!apropos_list)
+ info_error (_(APROPOS_NONE), string, NULL);
+ else
+ {
+ register int i;
+ REFERENCE *entry;
+
+ for (i = 0; (entry = apropos_list[i]); i++)
+ fprintf (stdout, "\"(%s)%s\" -- %s\n",
+ entry->filename, entry->nodename, entry->label);
+ }
+ info_free_references (apropos_list);
+}
+
+static char *apropos_list_nodename = "*Apropos*";
+
+DECLARE_INFO_COMMAND (info_index_apropos,
+ _("Grovel all known info file's indices for a string and build a menu"))
+{
+ char *line;
+
+ line = info_read_in_echo_area (window, _("Index apropos: "));
+
+ window = active_window;
+
+ /* User aborted? */
+ if (!line)
+ {
+ info_abort_key (window, 1, 1);
+ return;
+ }
+
+ /* User typed something? */
+ if (*line)
+ {
+ REFERENCE **apropos_list;
+ NODE *apropos_node;
+
+ apropos_list = apropos_in_all_indices (line, 1);
+
+ if (!apropos_list)
+ info_error (_(APROPOS_NONE), line, NULL);
+ else
+ {
+ register int i;
+ char *line_buffer;
+
+ initialize_message_buffer ();
+ printf_to_message_buffer
+ (_("\n* Menu: Nodes whose indices contain `%s':\n"),
+ line, NULL, NULL);
+ line_buffer = xmalloc (500);
+
+ for (i = 0; apropos_list[i]; i++)
+ {
+ int len;
+ /* The label might be identical to that of another index
+ entry in another Info file. Therefore, we make the file
+ name part of the menu entry, to make them all distinct. */
+ sprintf (line_buffer, "* %s [%s]: ",
+ apropos_list[i]->label, apropos_list[i]->filename);
+ len = pad_to (40, line_buffer);
+ sprintf (line_buffer + len, "(%s)%s.",
+ apropos_list[i]->filename, apropos_list[i]->nodename);
+ printf_to_message_buffer ("%s\n", line_buffer, NULL, NULL);
+ }
+ free (line_buffer);
+ }
+
+ apropos_node = message_buffer_to_node ();
+ add_gcable_pointer (apropos_node->contents);
+ name_internal_node (apropos_node, apropos_list_nodename);
+
+ /* Even though this is an internal node, we don't want the window
+ system to treat it specially. So we turn off the internalness
+ of it here. */
+ apropos_node->flags &= ~N_IsInternal;
+
+ /* Find/Create a window to contain this node. */
+ {
+ WINDOW *new;
+ NODE *node;
+
+ set_remembered_pagetop_and_point (window);
+
+ /* If a window is visible and showing an apropos list already,
+ re-use it. */
+ for (new = windows; new; new = new->next)
+ {
+ node = new->node;
+
+ if (internal_info_node_p (node) &&
+ (strcmp (node->nodename, apropos_list_nodename) == 0))
+ break;
+ }
+
+ /* If we couldn't find an existing window, try to use the next window
+ in the chain. */
+ if (!new && window->next)
+ new = window->next;
+
+ /* If we still don't have a window, make a new one to contain
+ the list. */
+ if (!new)
+ {
+ WINDOW *old_active;
+
+ old_active = active_window;
+ active_window = window;
+ new = window_make_window (NULL);
+ active_window = old_active;
+ }
+
+ /* If we couldn't make a new window, use this one. */
+ if (!new)
+ new = window;
+
+ /* Lines do not wrap in this window. */
+ new->flags |= W_NoWrap;
+
+ window_set_node_of_window (new, apropos_node);
+ remember_window_and_node (new, apropos_node);
+ active_window = new;
+ }
+ info_free_references (apropos_list);
+ }
+ free (line);
+
+ if (!info_error_was_printed)
+ window_clear_echo_area ();
+}
diff --git a/info/indices.h b/info/indices.h
new file mode 100644
index 0000000..712fa88
--- /dev/null
+++ b/info/indices.h
@@ -0,0 +1,44 @@
+/* indices.h -- Functions defined in indices.c.
+ $Id: indices.h,v 1.6 2007/07/01 21:20:30 karl Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+
+ Copyright (C) 1993, 1997, 2004, 2007 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 Brian Fox (bfox@ai.mit.edu). */
+
+#ifndef INFO_INDICES_H
+#define INFO_INDICES_H
+
+/* User-visible variable controls the output of info-index-next. */
+extern int show_index_match;
+
+extern REFERENCE **info_indices_of_window (WINDOW *window);
+extern REFERENCE **info_indices_of_file_buffer (FILE_BUFFER *file_buffer);
+extern void info_apropos (char *string);
+
+/* For every menu item in DIR, search the indices of that file for STRING. */
+REFERENCE **apropos_in_all_indices (char *search_string, int inform);
+
+/* User visible functions declared in indices.c. */
+extern void info_index_search (WINDOW *window, int count, unsigned char key);
+extern void info_next_index_match (WINDOW *window, int count, unsigned char key);
+extern void info_index_apropos (WINDOW *window, int count, unsigned char key);
+extern void do_info_index_search (WINDOW *window, int count, char *search_string);
+extern int index_entry_exists (WINDOW *window, char *string);
+
+#endif /* not INFO_INDICES_H */
diff --git a/info/info-utils.c b/info/info-utils.c
new file mode 100644
index 0000000..7236452
--- /dev/null
+++ b/info/info-utils.c
@@ -0,0 +1,729 @@
+/* info-utils.c -- miscellanous.
+ $Id: info-utils.c,v 1.12 2008/06/11 09:55:42 gray Exp $
+
+ Copyright (C) 1993, 1998, 2003, 2004, 2007, 2008
+ 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/>.
+
+ Originally written by Brian Fox (bfox@ai.mit.edu). */
+
+#include "info.h"
+#include "info-utils.h"
+#if defined (HANDLE_MAN_PAGES)
+# include "man.h"
+#endif /* HANDLE_MAN_PAGES */
+
+/* When non-zero, various display and input functions handle ISO Latin
+ character sets correctly. */
+int ISO_Latin_p = 1;
+
+/* Variable which holds the most recent filename parsed as a result of
+ calling info_parse_xxx (). */
+char *info_parsed_filename = NULL;
+
+/* Variable which holds the most recent nodename parsed as a result of
+ calling info_parse_xxx (). */
+char *info_parsed_nodename = NULL;
+
+/* Variable which holds the most recent line number parsed as a result of
+ calling info_parse_xxx (). */
+int info_parsed_line_number = 0;
+
+/* Functions to remember a filename or nodename for later return. */
+static void save_filename (char *filename);
+static void saven_filename (char *filename, int len);
+static void save_nodename (char *nodename);
+static void saven_nodename (char *nodename, int len);
+
+/* How to get a reference (either menu or cross). */
+static REFERENCE **info_references_internal (char *label,
+ SEARCH_BINDING *binding);
+
+/* Parse the filename and nodename out of STRING. If STRING doesn't
+ contain a filename (i.e., it is NOT (FILENAME)NODENAME) then set
+ INFO_PARSED_FILENAME to NULL. If second argument NEWLINES_OKAY is
+ non-zero, it says to allow the nodename specification to cross a
+ newline boundary (i.e., only `,', `.', or `TAB' can end the spec). */
+void
+info_parse_node (char *string, int newlines_okay)
+{
+ register int i = 0;
+
+ /* Default the answer. */
+ save_filename (NULL);
+ save_nodename (NULL);
+
+ /* Special case of nothing passed. Return nothing. */
+ if (!string || !*string)
+ return;
+
+ string += skip_whitespace (string);
+
+ /* Check for (FILENAME)NODENAME. */
+ if (*string == '(')
+ {
+ i = 0;
+ /* Advance past the opening paren. */
+ string++;
+
+ /* Find the closing paren. */
+ while (string[i] && string[i] != ')')
+ i++;
+
+ /* Remember parsed filename. */
+ saven_filename (string, i);
+
+ /* Point directly at the nodename. */
+ string += i;
+
+ if (*string)
+ string++;
+ }
+
+ /* Parse out nodename. */
+ i = skip_node_characters (string, newlines_okay);
+ saven_nodename (string, i);
+ canonicalize_whitespace (info_parsed_nodename);
+ if (info_parsed_nodename && !*info_parsed_nodename)
+ {
+ free (info_parsed_nodename);
+ info_parsed_nodename = NULL;
+ }
+
+ /* Parse ``(line ...)'' part of menus, if any. */
+ {
+ char *rest = string + i;
+
+ /* Advance only if it's not already at end of string. */
+ if (*rest)
+ rest++;
+
+ /* Skip any whitespace first, and then a newline in case the item
+ was so long to contain the ``(line ...)'' string in the same
+ physical line. */
+ while (whitespace(*rest))
+ rest++;
+ if (*rest == '\n')
+ {
+ rest++;
+ while (whitespace(*rest))
+ rest++;
+ }
+
+ /* Are we looking at an opening parenthesis? That can only mean
+ we have a winner. :) */
+ if (strncmp (rest, "(line ", strlen ("(line ")) == 0)
+ {
+ rest += strlen ("(line ");
+ info_parsed_line_number = strtol (rest, NULL, 0);
+ }
+ else
+ info_parsed_line_number = 0;
+ }
+}
+
+/* Return the node addressed by LABEL in NODE (usually one of "Prev:",
+ "Next:", "Up:", "File:", or "Node:". After a call to this function,
+ the global INFO_PARSED_NODENAME and INFO_PARSED_FILENAME contain
+ the information. */
+void
+info_parse_label (char *label, NODE *node)
+{
+ register int i;
+ char *nodeline;
+
+ /* Default answer to failure. */
+ save_nodename (NULL);
+ save_filename (NULL);
+
+ /* Find the label in the first line of this node. */
+ nodeline = node->contents;
+ i = string_in_line (label, nodeline);
+
+ if (i == -1)
+ return;
+
+ nodeline += i;
+ nodeline += skip_whitespace (nodeline);
+ info_parse_node (nodeline, DONT_SKIP_NEWLINES);
+}
+
+/* **************************************************************** */
+/* */
+/* Finding and Building Menus */
+/* */
+/* **************************************************************** */
+
+/* Return a NULL terminated array of REFERENCE * which represents the menu
+ found in NODE. If there is no menu in NODE, just return a NULL pointer. */
+REFERENCE **
+info_menu_of_node (NODE *node)
+{
+ long position;
+ SEARCH_BINDING tmp_search;
+ REFERENCE **menu = NULL;
+
+ tmp_search.buffer = node->contents;
+ tmp_search.start = 0;
+ tmp_search.end = node->nodelen;
+ tmp_search.flags = S_FoldCase;
+
+ /* Find the start of the menu. */
+ position = search_forward (INFO_MENU_LABEL, &tmp_search);
+
+ if (position == -1)
+ return NULL;
+
+ /* We have the start of the menu now. Glean menu items from the rest
+ of the node. */
+ tmp_search.start = position + strlen (INFO_MENU_LABEL);
+ tmp_search.start += skip_line (tmp_search.buffer + tmp_search.start);
+ tmp_search.start--;
+ menu = info_menu_items (&tmp_search);
+ return menu;
+}
+
+/* Return a NULL terminated array of REFERENCE * which represents the cross
+ refrences found in NODE. If there are no cross references in NODE, just
+ return a NULL pointer. */
+REFERENCE **
+info_xrefs_of_node (NODE *node)
+{
+ SEARCH_BINDING tmp_search;
+
+#if defined (HANDLE_MAN_PAGES)
+ if (node->flags & N_IsManPage)
+ return xrefs_of_manpage (node);
+#endif
+
+ tmp_search.buffer = node->contents;
+ tmp_search.start = 0;
+ tmp_search.end = node->nodelen;
+ tmp_search.flags = S_FoldCase;
+
+ return info_xrefs (&tmp_search);
+}
+
+/* Glean menu entries from BINDING->buffer + BINDING->start until we
+ have looked at the entire contents of BINDING. Return an array
+ of REFERENCE * that represents each menu item in this range. */
+REFERENCE **
+info_menu_items (SEARCH_BINDING *binding)
+{
+ return info_references_internal (INFO_MENU_ENTRY_LABEL, binding);
+}
+
+/* Glean cross references from BINDING->buffer + BINDING->start until
+ BINDING->end. Return an array of REFERENCE * that represents each
+ cross reference in this range. */
+REFERENCE **
+info_xrefs (SEARCH_BINDING *binding)
+{
+ return info_references_internal (INFO_XREF_LABEL, binding);
+}
+
+/* Glean cross references or menu items from BINDING. Return an array
+ of REFERENCE * that represents the items found. */
+static REFERENCE **
+info_references_internal (char *label, SEARCH_BINDING *binding)
+{
+ SEARCH_BINDING tmp_search;
+ REFERENCE **refs = NULL;
+ int refs_index = 0, refs_slots = 0;
+ int searching_for_menu_items = 0;
+ long position;
+
+ tmp_search.buffer = binding->buffer;
+ tmp_search.start = binding->start;
+ tmp_search.end = binding->end;
+ tmp_search.flags = S_FoldCase | S_SkipDest;
+
+ searching_for_menu_items = (mbscasecmp (label, INFO_MENU_ENTRY_LABEL) == 0);
+
+ while ((position = search_forward (label, &tmp_search)) != -1)
+ {
+ int offset, start;
+ char *refdef;
+ REFERENCE *entry;
+
+ tmp_search.start = position;
+ tmp_search.start += skip_whitespace (tmp_search.buffer + tmp_search.start);
+ start = tmp_search.start - binding->start;
+ refdef = tmp_search.buffer + tmp_search.start;
+ offset = string_in_line (":", refdef);
+
+ /* When searching for menu items, if no colon, there is no
+ menu item on this line. */
+ if (offset == -1)
+ {
+ if (searching_for_menu_items)
+ continue;
+ else
+ {
+ int temp;
+
+ temp = skip_line (refdef);
+ offset = string_in_line (":", refdef + temp);
+ if (offset == -1)
+ continue; /* Give up? */
+ else
+ offset += temp;
+ }
+ }
+
+ entry = xmalloc (sizeof (REFERENCE));
+ entry->filename = NULL;
+ entry->nodename = NULL;
+ entry->label = xmalloc (offset);
+ strncpy (entry->label, refdef, offset - 1);
+ entry->label[offset - 1] = '\0';
+ canonicalize_whitespace (entry->label);
+ entry->line_number = 0;
+
+ refdef += offset;
+ entry->start = start;
+ entry->end = refdef - binding->buffer;
+
+ /* If this reference entry continues with another ':' then the
+ nodename is the same as the label. */
+ if (*refdef == ':')
+ {
+ entry->nodename = xstrdup (entry->label);
+ }
+ else
+ {
+ /* This entry continues with a specific nodename. Parse the
+ nodename from the specification. */
+
+ refdef += skip_whitespace_and_newlines (refdef);
+
+ if (searching_for_menu_items)
+ info_parse_node (refdef, DONT_SKIP_NEWLINES);
+ else
+ info_parse_node (refdef, SKIP_NEWLINES);
+
+ if (info_parsed_filename)
+ entry->filename = xstrdup (info_parsed_filename);
+
+ if (info_parsed_nodename)
+ entry->nodename = xstrdup (info_parsed_nodename);
+
+ entry->line_number = info_parsed_line_number;
+ }
+
+ add_pointer_to_array
+ (entry, refs_index, refs, refs_slots, 50, REFERENCE *);
+ }
+ return refs;
+}
+
+/* Get the entry associated with LABEL in REFERENCES. Return a pointer
+ to the ENTRY if found, or NULL. */
+REFERENCE *
+info_get_labeled_reference (char *label, REFERENCE **references)
+{
+ register int i;
+ REFERENCE *entry;
+
+ for (i = 0; references && (entry = references[i]); i++)
+ {
+ if (strcmp (label, entry->label) == 0)
+ return entry;
+ }
+ return NULL;
+}
+
+/* A utility function for concatenating REFERENCE **. Returns a new
+ REFERENCE ** which is the concatenation of REF1 and REF2. The REF1
+ and REF2 arrays are freed, but their contents are not. */
+REFERENCE **
+info_concatenate_references (REFERENCE **ref1, REFERENCE **ref2)
+{
+ register int i, j;
+ REFERENCE **result;
+ int size;
+
+ /* With one argument passed as NULL, simply return the other arg. */
+ if (!ref1)
+ return ref2;
+ else if (!ref2)
+ return ref1;
+
+ /* Get the total size of the slots that we will need. */
+ for (i = 0; ref1[i]; i++);
+ size = i;
+ for (i = 0; ref2[i]; i++);
+ size += i;
+
+ result = xmalloc ((1 + size) * sizeof (REFERENCE *));
+
+ /* Copy the contents over. */
+ for (i = 0; ref1[i]; i++)
+ result[i] = ref1[i];
+
+ j = i;
+ for (i = 0; ref2[i]; i++)
+ result[j++] = ref2[i];
+
+ result[j] = NULL;
+ free (ref1);
+ free (ref2);
+ return result;
+}
+
+
+
+/* Copy a reference structure. Since we tend to free everything at
+ every opportunity, we don't share any points, but copy everything into
+ new memory. */
+REFERENCE *
+info_copy_reference (REFERENCE *src)
+{
+ REFERENCE *dest = xmalloc (sizeof (REFERENCE));
+ dest->label = src->label ? xstrdup (src->label) : NULL;
+ dest->filename = src->filename ? xstrdup (src->filename) : NULL;
+ dest->nodename = src->nodename ? xstrdup (src->nodename) : NULL;
+ dest->start = src->start;
+ dest->end = src->end;
+ dest->line_number = 0;
+
+ return dest;
+}
+
+
+
+/* Free the data associated with REFERENCES. */
+void
+info_free_references (REFERENCE **references)
+{
+ register int i;
+ REFERENCE *entry;
+
+ if (references)
+ {
+ for (i = 0; references && (entry = references[i]); i++)
+ {
+ maybe_free (entry->label);
+ maybe_free (entry->filename);
+ maybe_free (entry->nodename);
+
+ free (entry);
+ }
+
+ free (references);
+ }
+}
+
+/* Search for sequences of whitespace or newlines in STRING, replacing
+ all such sequences with just a single space. Remove whitespace from
+ start and end of string. */
+void
+canonicalize_whitespace (char *string)
+{
+ register int i, j;
+ int len, whitespace_found, whitespace_loc = 0;
+ char *temp;
+
+ if (!string)
+ return;
+
+ len = strlen (string);
+ temp = xmalloc (1 + len);
+
+ /* Search for sequences of whitespace or newlines. Replace all such
+ sequences in the string with just a single space. */
+
+ whitespace_found = 0;
+ for (i = 0, j = 0; string[i]; i++)
+ {
+ if (whitespace_or_newline (string[i]))
+ {
+ whitespace_found++;
+ whitespace_loc = i;
+ continue;
+ }
+ else
+ {
+ if (whitespace_found && whitespace_loc)
+ {
+ whitespace_found = 0;
+
+ /* Suppress whitespace at start of string. */
+ if (j)
+ temp[j++] = ' ';
+ }
+
+ temp[j++] = string[i];
+ }
+ }
+
+ /* Kill trailing whitespace. */
+ if (j && whitespace (temp[j - 1]))
+ j--;
+
+ temp[j] = '\0';
+ strcpy (string, temp);
+ free (temp);
+}
+
+/* String representation of a char returned by printed_representation (). */
+static char *the_rep;
+static size_t the_rep_size;
+
+/* Return a pointer to a string which is the printed representation
+ of CHARACTER if it were printed at HPOS. */
+char *
+printed_representation (const unsigned char *cp, size_t len, size_t hpos,
+ /* Return: */
+ size_t *plen)
+{
+ register int i = 0;
+ int printable_limit = ISO_Latin_p ? 255 : 127;
+#define REPSPACE(s) \
+ do \
+ { \
+ while (the_rep_size < s) \
+ { \
+ if (the_rep_size == 0) \
+ the_rep_size = 8; /* Initial allocation */ \
+ the_rep = x2realloc (the_rep, &the_rep_size); \
+ } \
+ } \
+ while (0)
+
+#define SC(c) \
+ do \
+ { \
+ REPSPACE(i + 1); \
+ the_rep[i++] = c; \
+ } \
+ while (0)
+
+ for (; len > 0; cp++, len--)
+ {
+ if (raw_escapes_p && *cp == '\033')
+ SC(*cp);
+ /* Show CTRL-x as ^X. */
+ else if (iscntrl (*cp) && *cp < 127)
+ {
+ switch (*cp)
+ {
+ case '\r':
+ case '\n':
+ SC(*cp);
+ break;
+
+ case '\t':
+ {
+ int tw;
+
+ tw = ((hpos + 8) & 0xf8) - hpos;
+ while (i < tw)
+ SC(' ');
+ break;
+ }
+
+ default:
+ SC('^');
+ SC(*cp | 0x40);
+ }
+ }
+ /* Show META-x as 0370. */
+ else if (*cp > printable_limit)
+ {
+ REPSPACE (i + 5);
+ sprintf (the_rep + i, "\\%0o", *cp);
+ i = strlen (the_rep);
+ }
+ else if (*cp == DEL)
+ {
+ SC('^');
+ SC('?');
+ }
+ else
+ SC(*cp);
+ }
+
+ SC(0);
+ *plen = i - 1;
+ return the_rep;
+}
+
+
+/* **************************************************************** */
+/* */
+/* Functions Static To This File */
+/* */
+/* **************************************************************** */
+
+/* Amount of space allocated to INFO_PARSED_FILENAME via xmalloc (). */
+static int parsed_filename_size = 0;
+
+/* Amount of space allocated to INFO_PARSED_NODENAME via xmalloc (). */
+static int parsed_nodename_size = 0;
+
+static void save_string (char *string, char **string_p, int *string_size_p);
+static void saven_string (char *string, int len, char **string_p,
+ int *string_size_p);
+
+/* Remember FILENAME in PARSED_FILENAME. An empty FILENAME is translated
+ to a NULL pointer in PARSED_FILENAME. */
+static void
+save_filename (char *filename)
+{
+ save_string (filename, &info_parsed_filename, &parsed_filename_size);
+}
+
+/* Just like save_filename (), but you pass the length of the string. */
+static void
+saven_filename (char *filename, int len)
+{
+ saven_string (filename, len,
+ &info_parsed_filename, &parsed_filename_size);
+}
+
+/* Remember NODENAME in PARSED_NODENAME. An empty NODENAME is translated
+ to a NULL pointer in PARSED_NODENAME. */
+static void
+save_nodename (char *nodename)
+{
+ save_string (nodename, &info_parsed_nodename, &parsed_nodename_size);
+}
+
+/* Just like save_nodename (), but you pass the length of the string. */
+static void
+saven_nodename (char *nodename, int len)
+{
+ saven_string (nodename, len,
+ &info_parsed_nodename, &parsed_nodename_size);
+}
+
+/* Remember STRING in STRING_P. STRING_P should currently have STRING_SIZE_P
+ bytes allocated to it. An empty STRING is translated to a NULL pointer
+ in STRING_P. */
+static void
+save_string (char *string, char **string_p, int *string_size_p)
+{
+ if (!string || !*string)
+ {
+ if (*string_p)
+ free (*string_p);
+
+ *string_p = NULL;
+ *string_size_p = 0;
+ }
+ else
+ {
+ if (strlen (string) >= (unsigned int) *string_size_p)
+ *string_p = xrealloc
+ (*string_p, (*string_size_p = 1 + strlen (string)));
+
+ strcpy (*string_p, string);
+ }
+}
+
+/* Just like save_string (), but you also pass the length of STRING. */
+static void
+saven_string (char *string, int len, char **string_p, int *string_size_p)
+{
+ if (!string)
+ {
+ if (*string_p)
+ free (*string_p);
+
+ *string_p = NULL;
+ *string_size_p = 0;
+ }
+ else
+ {
+ if (len >= *string_size_p)
+ *string_p = xrealloc (*string_p, (*string_size_p = 1 + len));
+
+ strncpy (*string_p, string, len);
+ (*string_p)[len] = '\0';
+ }
+}
+
+/* Return a pointer to the part of PATHNAME that simply defines the file. */
+char *
+filename_non_directory (char *pathname)
+{
+ register char *filename = pathname + strlen (pathname);
+
+ if (HAVE_DRIVE (pathname))
+ pathname += 2;
+
+ while (filename > pathname && !IS_SLASH (filename[-1]))
+ filename--;
+
+ return filename;
+}
+
+/* Return non-zero if NODE is one especially created by Info. */
+int
+internal_info_node_p (NODE *node)
+{
+#if defined (NEVER)
+ if (node &&
+ (node->filename && !*node->filename) &&
+ !node->parent && node->nodename)
+ return 1;
+ else
+ return 0;
+#else
+ return (node != NULL) && ((node->flags & N_IsInternal) != 0);
+#endif /* !NEVER */
+}
+
+/* Make NODE appear to be one especially created by Info. */
+void
+name_internal_node (NODE *node, char *name)
+{
+ if (!node)
+ return;
+
+ node->filename = "";
+ node->parent = NULL;
+ node->nodename = name;
+ node->flags |= N_IsInternal;
+}
+
+/* Return the window displaying NAME, the name of an internally created
+ Info window. */
+WINDOW *
+get_internal_info_window (char *name)
+{
+ WINDOW *win;
+
+ for (win = windows; win; win = win->next)
+ if (internal_info_node_p (win->node) &&
+ (strcmp (win->node->nodename, name) == 0))
+ break;
+
+ return win;
+}
+
+/* Return a window displaying the node NODE. */
+WINDOW *
+get_window_of_node (NODE *node)
+{
+ WINDOW *win = NULL;
+
+ for (win = windows; win; win = win->next)
+ if (win->node == node)
+ break;
+
+ return win;
+}
diff --git a/info/info-utils.h b/info/info-utils.h
new file mode 100644
index 0000000..6d8d7ac
--- /dev/null
+++ b/info/info-utils.h
@@ -0,0 +1,136 @@
+/* info-utils.h -- Exported functions and variables from info-utils.c.
+ $Id: info-utils.h,v 1.8 2008/05/10 14:39:04 gray Exp $
+
+ Copyright (C) 1993, 1996, 1998, 2002, 2003, 2004, 2007 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 Brian Fox (bfox@ai.mit.edu). */
+
+#ifndef INFO_UTILS_H
+#define INFO_UTILS_H
+
+#include "nodes.h"
+#include "window.h"
+#include "search.h"
+
+/* Structure which describes a node reference, such as a menu entry or
+ cross reference. Arrays of such references can be built by calling
+ info_menus_of_node () or info_xrefs_of_node (). */
+typedef struct {
+ char *label; /* User Label. */
+ char *filename; /* File where this node can be found. */
+ char *nodename; /* Name of the node. */
+ int start, end; /* Offsets within the containing node of LABEL. */
+ int line_number; /* Specific line number a menu item points to. */
+} REFERENCE;
+
+/* When non-zero, various display and input functions handle ISO Latin
+ character sets correctly. */
+extern int ISO_Latin_p;
+
+/* Variable which holds the most recent filename parsed as a result of
+ calling info_parse_xxx (). */
+extern char *info_parsed_filename;
+
+/* Variable which holds the most recent nodename parsed as a result of
+ calling info_parse_xxx (). */
+extern char *info_parsed_nodename;
+
+/* Parse the filename and nodename out of STRING. If STRING doesn't
+ contain a filename (i.e., it is NOT (FILENAME)NODENAME) then set
+ INFO_PARSED_FILENAME to NULL. If second argument NEWLINES_OKAY is
+ non-zero, it says to allow the nodename specification to cross a
+ newline boundary (i.e., only `,', `.', or `TAB' can end the spec). */
+void info_parse_node (char *string, int newlines_okay);
+
+/* Return a NULL terminated array of REFERENCE * which represents the menu
+ found in NODE. If there is no menu in NODE, just return a NULL pointer. */
+extern REFERENCE **info_menu_of_node (NODE *node);
+
+/* Return a NULL terminated array of REFERENCE * which represents the cross
+ refrences found in NODE. If there are no cross references in NODE, just
+ return a NULL pointer. */
+extern REFERENCE **info_xrefs_of_node (NODE *node);
+
+/* Glean cross references from BINDING->buffer + BINDING->start until
+ BINDING->end. Return an array of REFERENCE * that represents each
+ cross reference in this range. */
+extern REFERENCE **info_xrefs (SEARCH_BINDING *binding);
+
+/* Get the entry associated with LABEL in REFERENCES. Return a pointer to
+ the reference if found, or NULL. */
+extern REFERENCE *info_get_labeled_reference (char *label,
+ REFERENCE **references);
+
+/* Glean menu entries from BINDING->buffer + BINDING->start until we
+ have looked at the entire contents of BINDING. Return an array
+ of REFERENCE * that represents each menu item in this range. */
+extern REFERENCE **info_menu_items (SEARCH_BINDING *binding);
+
+/* A utility function for concatenating REFERENCE **. Returns a new
+ REFERENCE ** which is the concatenation of REF1 and REF2. The REF1
+ and REF2 arrays are freed, but their contents are not. */
+REFERENCE **info_concatenate_references (REFERENCE **ref1, REFERENCE **ref2);
+
+/* Copy an existing reference into new memory. */
+extern REFERENCE *info_copy_reference (REFERENCE *src);
+
+/* Free the data associated with REFERENCES. */
+extern void info_free_references (REFERENCE **references);
+
+/* Search for sequences of whitespace or newlines in STRING, replacing
+ all such sequences with just a single space. Remove whitespace from
+ start and end of string. */
+void canonicalize_whitespace (char *string);
+
+/* Return a pointer to a string which is the printed representation
+ of CHARACTER if it were printed at HPOS. */
+extern char *printed_representation (const unsigned char *cp, size_t len,
+ size_t hpos, size_t *plen);
+
+/* Return a pointer to the part of PATHNAME that simply defines the file. */
+extern char *filename_non_directory (char *pathname);
+
+/* Return non-zero if NODE is one especially created by Info. */
+extern int internal_info_node_p (NODE *node);
+
+/* Make NODE appear to be one especially created by Info, and give it NAME. */
+extern void name_internal_node (NODE *node, char *name);
+
+/* Return the window displaying NAME, the name of an internally created
+ Info window. */
+extern WINDOW *get_internal_info_window (char *name);
+
+/* Return a window displaying the node NODE. */
+extern WINDOW *get_window_of_node (NODE *node);
+
+/* Return the node addressed by LABEL in NODE (usually one of "Prev:",
+ "Next:", "Up:", "File:", or "Node:". After a call to this function,
+ the globals `info_parsed_nodename' and `info_parsed_filename' contain
+ the information. */
+extern void info_parse_label (char *label, NODE *node);
+
+#define info_file_label_of_node(n) info_parse_label (INFO_FILE_LABEL, n)
+#define info_next_label_of_node(n) info_parse_label (INFO_NEXT_LABEL, n)
+#define info_up_label_of_node(n) info_parse_label (INFO_UP_LABEL, n)
+#define info_prev_label_of_node(n) \
+ do { \
+ info_parse_label (INFO_PREV_LABEL, n); \
+ if (!info_parsed_nodename && !info_parsed_filename) \
+ info_parse_label (INFO_ALTPREV_LABEL, n); \
+ } while (0)
+
+#endif /* not INFO_UTILS_H */
diff --git a/info/info.c b/info/info.c
new file mode 100644
index 0000000..4e204c1
--- /dev/null
+++ b/info/info.c
@@ -0,0 +1,707 @@
+/* info.c -- Display nodes of Info files in multiple windows.
+ $Id: info.c,v 1.33 2008/08/14 17:36:13 karl Exp $
+
+ Copyright (C) 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+ 2004, 2005, 2007, 2008 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/>.
+
+ Originally written by Brian Fox (bfox@ai.mit.edu). */
+
+#include "info.h"
+#include "indices.h"
+#include "dribble.h"
+#include "getopt.h"
+#if defined (HANDLE_MAN_PAGES)
+# include "man.h"
+#endif /* HANDLE_MAN_PAGES */
+
+char *program_name = "info";
+
+/* Non-zero means search all indices for APROPOS_SEARCH_STRING. */
+static int apropos_p = 0;
+
+/* Variable containing the string to search for when apropos_p is non-zero. */
+static char *apropos_search_string = NULL;
+
+/* Non-zero means search all indices for INDEX_SEARCH_STRING. Unlike
+ apropos, this puts the user at the node, running info. */
+static int index_search_p = 0;
+
+/* Non-zero means look for the node which describes the invocation
+ and command-line options of the program, and start the info
+ session at that node. */
+static int goto_invocation_p = 0;
+
+/* Variable containing the string to search for when index_search_p is
+ non-zero. */
+static char *index_search_string = NULL;
+
+/* Non-zero means print version info only. */
+static int print_version_p = 0;
+
+/* Non-zero means print a short description of the options. */
+static int print_help_p = 0;
+
+/* Array of the names of nodes that the user specified with "--node" on the
+ command line. */
+static char **user_nodenames = NULL;
+static int user_nodenames_index = 0;
+static int user_nodenames_slots = 0;
+
+/* String specifying the first file to load. This string can only be set
+ by the user specifying "--file" on the command line. */
+static char *user_filename = NULL;
+
+/* String specifying the name of the file to dump nodes to. This value is
+ filled if the user speficies "--output" on the command line. */
+static char *user_output_filename = NULL;
+
+/* Non-zero indicates that when "--output" is specified, all of the menu
+ items of the specified nodes (and their subnodes as well) should be
+ dumped in the order encountered. This basically can print a book. */
+int dump_subnodes = 0;
+
+/* Non-zero means make default keybindings be loosely modeled on vi(1). */
+int vi_keys_p = 0;
+
+/* Non-zero means don't remove ANSI escape sequences. */
+int raw_escapes_p = 1;
+
+/* Non-zero means print the absolute location of the file to be loaded. */
+static int print_where_p = 0;
+
+#ifdef __MSDOS__
+/* Non-zero indicates that screen output should be made 'speech-friendly'.
+ Since on MSDOS the usual behavior is to write directly to the video
+ memory, speech synthesizer software cannot grab the output. Therefore,
+ we provide a user option which tells us to avoid direct screen output
+ and use stdout instead (which loses the color output). */
+int speech_friendly = 0;
+#endif
+
+/* Structure describing the options that Info accepts. We pass this structure
+ to getopt_long (). If you add or otherwise change this structure, you must
+ also change the string which follows it. */
+#define DRIBBLE_OPTION 2
+#define RESTORE_OPTION 3
+#define IDXSRCH_OPTION 4
+static struct option long_options[] = {
+ { "apropos", 1, 0, 'k' },
+ { "directory", 1, 0, 'd' },
+ { "dribble", 1, 0, DRIBBLE_OPTION },
+ { "file", 1, 0, 'f' },
+ { "help", 0, &print_help_p, 1 },
+ { "index-search", 1, 0, IDXSRCH_OPTION },
+ { "location", 0, &print_where_p, 1 },
+ { "node", 1, 0, 'n' },
+ { "output", 1, 0, 'o' },
+ { "raw-escapes", 0, &raw_escapes_p, 1 },
+ { "no-raw-escapes", 0, &raw_escapes_p, 0 },
+ { "show-malformed-multibytes", 0, &show_malformed_multibyte_p, 1 },
+ { "no-show-malformed-multibytes", 0, &show_malformed_multibyte_p, 0 },
+ { "restore", 1, 0, RESTORE_OPTION },
+ { "show-options", 0, 0, 'O' },
+ { "subnodes", 0, &dump_subnodes, 1 },
+ { "usage", 0, 0, 'O' },
+ { "version", 0, &print_version_p, 1 },
+ { "vi-keys", 0, &vi_keys_p, 1 },
+ { "where", 0, &print_where_p, 1 },
+#ifdef __MSDOS__
+ { "speech-friendly", 0, &speech_friendly, 1 },
+#endif
+ {NULL, 0, NULL, 0}
+};
+
+/* String describing the shorthand versions of the long options found above. */
+#ifdef __MSDOS__
+static char *short_options = "k:d:n:f:ho:ORswb";
+#else
+static char *short_options = "k:d:n:f:ho:ORws";
+#endif
+
+/* When non-zero, the Info window system has been initialized. */
+int info_windows_initialized_p = 0;
+
+/* Some "forward" declarations. */
+static void info_short_help (void);
+static void init_messages (void);
+
+
+/* **************************************************************** */
+/* */
+/* Main Entry Point to the Info Program */
+/* */
+/* **************************************************************** */
+
+int
+main (int argc, char *argv[])
+{
+ int getopt_long_index; /* Index returned by getopt_long (). */
+ NODE *initial_node; /* First node loaded by Info. */
+
+#ifdef HAVE_SETLOCALE
+ /* Set locale via LC_ALL. */
+ setlocale (LC_ALL, "");
+#endif /* HAVE_SETLOCALE */
+
+#ifdef ENABLE_NLS
+ /* Set the text message domain. */
+ bindtextdomain (PACKAGE, LOCALEDIR);
+ textdomain (PACKAGE);
+#endif
+
+ init_messages ();
+
+ while (1)
+ {
+ int option_character;
+
+ option_character = getopt_long
+ (argc, argv, short_options, long_options, &getopt_long_index);
+
+ /* getopt_long returns EOF when there are no more long options. */
+ if (option_character == EOF)
+ break;
+
+ /* If this is a long option, then get the short version of it. */
+ if (option_character == 0 && long_options[getopt_long_index].flag == 0)
+ option_character = long_options[getopt_long_index].val;
+
+ /* Case on the option that we have received. */
+ switch (option_character)
+ {
+ case 0:
+ break;
+
+ /* User wants to add a directory. */
+ case 'd':
+ info_add_path (optarg, INFOPATH_PREPEND);
+ break;
+
+ /* User is specifying a particular node. */
+ case 'n':
+ add_pointer_to_array (optarg, user_nodenames_index, user_nodenames,
+ user_nodenames_slots, 10, char *);
+ break;
+
+ /* User is specifying a particular Info file. */
+ case 'f':
+ if (user_filename)
+ free (user_filename);
+
+ user_filename = xstrdup (optarg);
+ break;
+
+ /* Treat -h like --help. */
+ case 'h':
+ print_help_p = 1;
+ break;
+
+ /* User is specifying the name of a file to output to. */
+ case 'o':
+ if (user_output_filename)
+ free (user_output_filename);
+ user_output_filename = xstrdup (optarg);
+ break;
+
+ /* User has specified that she wants to find the "Options"
+ or "Invocation" node for the program. */
+ case 'O':
+ goto_invocation_p = 1;
+ break;
+
+ /* User has specified that she wants the escape sequences
+ in man pages to be passed thru unaltered. */
+ case 'R':
+ raw_escapes_p = 1;
+ break;
+
+ /* User is specifying that she wishes to dump the subnodes of
+ the node that she is dumping. */
+ case 's':
+ dump_subnodes = 1;
+ break;
+
+ /* For compatibility with man, -w is --where. */
+ case 'w':
+ print_where_p = 1;
+ break;
+
+#ifdef __MSDOS__
+ /* User wants speech-friendly output. */
+ case 'b':
+ speech_friendly = 1;
+ break;
+#endif /* __MSDOS__ */
+
+ /* User has specified a string to search all indices for. */
+ case 'k':
+ apropos_p = 1;
+ maybe_free (apropos_search_string);
+ apropos_search_string = xstrdup (optarg);
+ break;
+
+ /* User has specified a dribble file to receive keystrokes. */
+ case DRIBBLE_OPTION:
+ close_dribble_file ();
+ open_dribble_file (optarg);
+ break;
+
+ /* User has specified an alternate input stream. */
+ case RESTORE_OPTION:
+ info_set_input_from_file (optarg);
+ break;
+
+ /* User has specified a string to search all indices for. */
+ case IDXSRCH_OPTION:
+ index_search_p = 1;
+ maybe_free (index_search_string);
+ index_search_string = xstrdup (optarg);
+ break;
+
+ default:
+ fprintf (stderr, _("Try --help for more information.\n"));
+ xexit (1);
+ }
+ }
+
+ /* If the output device is not a terminal, and no output filename has been
+ specified, make user_output_filename be "-", so that the info is written
+ to stdout, and turn on the dumping of subnodes. */
+ if ((!isatty (fileno (stdout))) && (user_output_filename == NULL))
+ {
+ user_output_filename = xstrdup ("-");
+ dump_subnodes = 1;
+ }
+
+ /* If the user specified --version, then show the version and exit. */
+ if (print_version_p)
+ {
+ printf ("info (GNU %s) %s\n", PACKAGE, VERSION);
+ puts ("");
+ printf (_("Copyright (C) %s Free Software Foundation, Inc.\n\
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n\
+This is free software: you are free to change and redistribute it.\n\
+There is NO WARRANTY, to the extent permitted by law.\n"),
+ "2008");
+ xexit (0);
+ }
+
+ /* If the `--help' option was present, show the help and exit. */
+ if (print_help_p)
+ {
+ info_short_help ();
+ xexit (0);
+ }
+
+ /* If the user hasn't specified a path for Info files, default it.
+ Lowest priority is our messy hardwired list in filesys.h.
+ Then comes the user's INFODIR from the Makefile.
+ Highest priority is the environment variable, if set. */
+ if (!infopath)
+ {
+ char *path_from_env = getenv ("INFOPATH");
+
+ if (path_from_env)
+ {
+ unsigned len = strlen (path_from_env);
+ /* Trailing : on INFOPATH means insert the default path. */
+ if (len && path_from_env[len - 1] == PATH_SEP[0])
+ {
+ path_from_env[len - 1] = 0;
+ info_add_path (DEFAULT_INFOPATH, INFOPATH_PREPEND);
+ }
+#ifdef INFODIR /* from the Makefile */
+ info_add_path (INFODIR, INFOPATH_PREPEND);
+#endif
+ info_add_path (path_from_env, INFOPATH_PREPEND);
+ }
+ else
+ {
+ info_add_path (DEFAULT_INFOPATH, INFOPATH_PREPEND);
+#ifdef INFODIR /* from the Makefile */
+ info_add_path (INFODIR, INFOPATH_PREPEND);
+#endif
+#ifdef INFODIR2 /* from the Makefile, too */
+# ifdef INFODIR
+ if (!STREQ (INFODIR, INFODIR2))
+# endif
+ info_add_path (INFODIR2, INFOPATH_PREPEND);
+#endif
+ }
+ }
+
+ /* If the user specified a particular filename, add the path of that
+ file to the contents of INFOPATH. */
+ if (user_filename)
+ add_file_directory_to_path (user_filename);
+
+ /* If the user wants to search every known index for a given string,
+ do that now, and report the results. */
+ if (apropos_p)
+ {
+ info_apropos (apropos_search_string);
+ xexit (0);
+ }
+
+ /* Get the initial Info node. It is either "(dir)Top", or what the user
+ specifed with values in user_filename and user_nodenames. */
+ initial_node = info_get_node (user_filename,
+ user_nodenames ? user_nodenames[0] : 0);
+
+ /* If we couldn't get the initial node, this user is in trouble. */
+ if (!initial_node)
+ {
+ if (info_recent_file_error)
+ info_error (info_recent_file_error, NULL, NULL);
+ else
+ info_error (msg_cant_find_node,
+ user_nodenames ? user_nodenames[0] : "Top", NULL);
+ xexit (1);
+ }
+
+ /* Special cases for when the user specifies multiple nodes. If we
+ are dumping to an output file, dump all of the nodes specified.
+ Otherwise, attempt to create enough windows to handle the nodes
+ that this user wants displayed. */
+ if (user_nodenames_index > 1)
+ {
+ free (initial_node);
+
+ if (print_where_p)
+ printf ("%s\n", user_filename ? user_filename : "unknown?!");
+ else if (user_output_filename)
+ dump_nodes_to_file
+ (user_filename, user_nodenames, user_output_filename, dump_subnodes);
+ else
+ begin_multiple_window_info_session (user_filename, user_nodenames);
+
+ xexit (0);
+ }
+
+ /* If there are arguments remaining, they are the names of menu items
+ in sequential info files starting from the first one loaded. That
+ file name is either "dir", or the contents of user_filename if one
+ was specified. */
+ {
+ const char *errstr;
+ char *errarg1, *errarg2;
+ NODE *new_initial_node;
+
+ /* If they say info -O info, we want to show them the invocation node
+ for standalone info; there's nothing useful in info.texi. */
+ if (goto_invocation_p && argv[optind]
+ && mbscasecmp (argv[optind], "info") == 0)
+ argv[optind] = "info-stnd";
+
+ new_initial_node = info_follow_menus (initial_node, argv + optind,
+ &errstr, &errarg1, &errarg2);
+
+ if (new_initial_node && new_initial_node != initial_node)
+ initial_node = new_initial_node;
+
+ if (print_where_p)
+ {
+ if (initial_node->parent)
+ printf ("%s\n", initial_node->parent);
+ else if (initial_node->filename
+ && !is_dir_name (filename_non_directory (initial_node->filename)))
+ printf ("%s\n", initial_node->filename);
+ else
+ xexit (1);
+ xexit (0);
+ }
+
+ /* If the user specified that this node should be output, then do that
+ now. Otherwise, start the Info session with this node. Or act
+ accordingly if the initial node was not found. */
+ if (user_output_filename && !goto_invocation_p)
+ {
+ if (!errstr)
+ dump_node_to_file (initial_node, user_output_filename,
+ dump_subnodes);
+ else
+ info_error (errstr, errarg1, errarg2);
+ }
+ else
+ {
+
+ if (errstr)
+ begin_info_session_with_error (initial_node, errstr,
+ errarg1, errarg2);
+ /* If the user specified `--index-search=STRING' or
+ --show-options, start the info session in the node
+ corresponding to what they want. */
+ else if (index_search_p || goto_invocation_p)
+ {
+ int status = 0;
+
+ initialize_info_session (initial_node, 0);
+
+ if (goto_invocation_p
+ || index_entry_exists (windows, index_search_string))
+ {
+ terminal_prep_terminal ();
+ terminal_clear_screen ();
+ info_last_executed_command = NULL;
+
+ if (index_search_p)
+ do_info_index_search (windows, 0, index_search_string);
+ else
+ {
+ /* If they said "info --show-options foo bar baz",
+ the last of the arguments is the program whose
+ options they want to see. */
+ char **p = argv + optind;
+ char *program;
+
+ if (*p)
+ {
+ while (p[1])
+ p++;
+ program = xstrdup (*p);
+ }
+ else if (user_filename)
+ /* If there's no command-line arguments to
+ supply the program name, use the Info file
+ name (sans extension and leading directories)
+ instead. */
+ program = program_name_from_file_name (user_filename);
+ else
+ program = xstrdup ("");
+
+ info_intuit_options_node (windows, initial_node, program);
+ free (program);
+ }
+
+ if (user_output_filename)
+ {
+ dump_node_to_file (windows->node, user_output_filename,
+ dump_subnodes);
+ }
+ else
+ info_read_and_dispatch ();
+
+ /* On program exit, leave the cursor at the bottom of the
+ window, and restore the terminal IO. */
+ terminal_goto_xy (0, screenheight - 1);
+ terminal_clear_to_eol ();
+ fflush (stdout);
+ terminal_unprep_terminal ();
+ }
+ else
+ {
+ fprintf (stderr, _("no index entries found for `%s'\n"),
+ index_search_string);
+ status = 2;
+ }
+
+ close_dribble_file ();
+ xexit (status);
+ }
+ else
+ begin_info_session (initial_node);
+ }
+
+ xexit (0);
+ }
+
+ return 0; /* Avoid bogus warnings. */
+}
+
+void
+add_file_directory_to_path (char *filename)
+{
+ char *directory_name = xstrdup (filename);
+ char *temp = filename_non_directory (directory_name);
+
+ if (temp != directory_name)
+ {
+ if (HAVE_DRIVE (directory_name) && temp == directory_name + 2)
+ {
+ /* The directory of "d:foo" is stored as "d:.", to avoid
+ mixing it with "d:/" when a slash is appended. */
+ *temp = '.';
+ temp += 2;
+ }
+ temp[-1] = 0;
+ info_add_path (directory_name, INFOPATH_PREPEND);
+ }
+
+ free (directory_name);
+}
+
+
+/* Error handling. */
+
+/* Non-zero if an error has been signalled. */
+int info_error_was_printed = 0;
+
+/* Non-zero means ring terminal bell on errors. */
+int info_error_rings_bell_p = 1;
+
+/* Print FORMAT with ARG1 and ARG2. If the window system was initialized,
+ then the message is printed in the echo area. Otherwise, a message is
+ output to stderr. */
+void
+info_error (const char *format, void *arg1, void *arg2)
+{
+ info_error_was_printed = 1;
+
+ if (!info_windows_initialized_p || display_inhibited)
+ {
+ fprintf (stderr, "%s: ", program_name);
+ if (arg1)
+ fprintf (stderr, format, arg1, arg2);
+ else
+ /* If we're passed a string, just print it. Otherwise a % in a
+ filename gets treated as a format specifier. */
+ fputs (format, stderr);
+ fprintf (stderr, "\n");
+ fflush (stderr);
+ }
+ else
+ {
+ if (!echo_area_is_active)
+ {
+ if (info_error_rings_bell_p)
+ terminal_ring_bell ();
+ window_message_in_echo_area (format, arg1, arg2);
+ }
+ else
+ {
+ NODE *temp = build_message_node (format, arg1, arg2);
+ if (info_error_rings_bell_p)
+ terminal_ring_bell ();
+ inform_in_echo_area (temp->contents);
+ free (temp->contents);
+ free (temp);
+ }
+ }
+}
+
+
+/* Produce a scaled down description of the available options to Info. */
+static void
+info_short_help (void)
+{
+ printf (_("\
+Usage: %s [OPTION]... [MENU-ITEM...]\n\
+\n\
+Read documentation in Info format.\n"), program_name);
+ puts ("");
+
+ puts (_("\
+Options:\n\
+ -k, --apropos=STRING look up STRING in all indices of all manuals.\n\
+ -d, --directory=DIR add DIR to INFOPATH.\n\
+ --dribble=FILENAME remember user keystrokes in FILENAME.\n\
+ -f, --file=FILENAME specify Info file to visit."));
+
+ puts (_("\
+ -h, --help display this help and exit.\n\
+ --index-search=STRING go to node pointed by index entry STRING.\n\
+ -n, --node=NODENAME specify nodes in first visited Info file.\n\
+ -o, --output=FILENAME output selected nodes to FILENAME."));
+
+ puts (_("\
+ -R, --raw-escapes output \"raw\" ANSI escapes (default).\n\
+ --no-raw-escapes output escapes as literal text.\n\
+ --restore=FILENAME read initial keystrokes from FILENAME.\n\
+ -O, --show-options, --usage go to command-line options node."));
+
+#ifdef __MSDOS__
+ puts (_("\
+ -b, --speech-friendly be friendly to speech synthesizers."));
+#endif
+
+ puts (_("\
+ --subnodes recursively output menu items.\n\
+ --vi-keys use vi-like and less-like key bindings.\n\
+ --version display version information and exit.\n\
+ -w, --where, --location print physical location of Info file."));
+
+ puts (_("\n\
+The first non-option argument, if present, is the menu entry to start from;\n\
+it is searched for in all `dir' files along INFOPATH.\n\
+If it is not present, info merges all `dir' files and shows the result.\n\
+Any remaining arguments are treated as the names of menu\n\
+items relative to the initial node visited."));
+
+ puts (_("\n\
+For a summary of key bindings, type h within Info."));
+
+ puts (_("\n\
+Examples:\n\
+ info show top-level dir menu\n\
+ info info show the general manual for Info readers\n\
+ info info-stnd show the manual specific to this Info program\n\
+ info emacs start at emacs node from top-level dir\n\
+ info emacs buffers start at buffers node within emacs manual\n\
+ info --show-options emacs start at node with emacs' command line options\n\
+ info --subnodes -o out.txt emacs dump entire manual to out.txt\n\
+ info -f ./foo.info show file ./foo.info, not searching dir"));
+
+ puts (_("\n\
+Email bug reports to bug-texinfo@gnu.org,\n\
+general questions and discussion to help-texinfo@gnu.org.\n\
+Texinfo home page: http://www.gnu.org/software/texinfo/"));
+
+ xexit (0);
+}
+
+
+/* Initialize strings for gettext. Because gettext doesn't handle N_ or
+ _ within macro definitions, we put shared messages into variables and
+ use them that way. This also has the advantage that there's only one
+ copy of the strings. */
+
+const char *msg_cant_find_node;
+const char *msg_cant_file_node;
+const char *msg_cant_find_window;
+const char *msg_cant_find_point;
+const char *msg_cant_kill_last;
+const char *msg_no_menu_node;
+const char *msg_no_foot_node;
+const char *msg_no_xref_node;
+const char *msg_no_pointer;
+const char *msg_unknown_command;
+const char *msg_term_too_dumb;
+const char *msg_at_node_bottom;
+const char *msg_at_node_top;
+const char *msg_one_window;
+const char *msg_win_too_small;
+const char *msg_cant_make_help;
+
+static void
+init_messages (void)
+{
+ msg_cant_find_node = _("Cannot find node `%s'.");
+ msg_cant_file_node = _("Cannot find node `(%s)%s'.");
+ msg_cant_find_window = _("Cannot find a window!");
+ msg_cant_find_point = _("Point doesn't appear within this window's node!");
+ msg_cant_kill_last = _("Cannot delete the last window.");
+ msg_no_menu_node = _("No menu in this node.");
+ msg_no_foot_node = _("No footnotes in this node.");
+ msg_no_xref_node = _("No cross references in this node.");
+ msg_no_pointer = _("No `%s' pointer for this node.");
+ msg_unknown_command = _("Unknown Info command `%c'; try `?' for help.");
+ msg_term_too_dumb = _("Terminal type `%s' is not smart enough to run Info.");
+ msg_at_node_bottom = _("You are already at the last page of this node.");
+ msg_at_node_top = _("You are already at the first page of this node.");
+ msg_one_window = _("Only one window.");
+ msg_win_too_small = _("Resulting window would be too small.");
+ msg_cant_make_help = _("Not enough room for a help window, please delete a window.");
+}
diff --git a/info/info.h b/info/info.h
new file mode 100644
index 0000000..8a3d0c0
--- /dev/null
+++ b/info/info.h
@@ -0,0 +1,163 @@
+/* info.h -- Header file which includes all of the other headers.
+ $Id: info.h,v 1.9 2008/05/10 14:39:05 gray Exp $
+
+ Copyright (C) 1993, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2007
+ 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 Brian Fox (bfox@ai.mit.edu). */
+
+#ifndef INFO_H
+#define INFO_H
+
+/* We always want these, so why clutter up the compile command? */
+#define HANDLE_MAN_PAGES
+#define NAMED_FUNCTIONS
+#define INFOKEY
+
+/* System dependencies. */
+#include "system.h"
+
+/* Some of our other include files use these. */
+typedef int Function ();
+typedef void VFunction ();
+typedef char *CFunction ();
+
+#include "filesys.h"
+#include "doc.h"
+#include "display.h"
+#include "session.h"
+#include "echo-area.h"
+#include "footnotes.h"
+#include "gc.h"
+
+#include "string.h"
+#include "mbiter.h"
+#include "mbchar.h"
+
+#define info_toupper(x) (islower (x) ? toupper (x) : x)
+#define info_tolower(x) (isupper (x) ? tolower (x) : x)
+
+#if !defined (whitespace)
+# define whitespace(c) ((c == ' ') || (c == '\t'))
+#endif /* !whitespace */
+
+#if !defined (whitespace_or_newline)
+# define whitespace_or_newline(c) (whitespace (c) || (c == '\n'))
+#endif /* !whitespace_or_newline */
+
+/* Add POINTER to the list of pointers found in ARRAY. SLOTS is the number
+ of slots that have already been allocated. INDEX is the index into the
+ array where POINTER should be added. GROW is the number of slots to grow
+ ARRAY by, in the case that it needs growing. TYPE is a cast of the type
+ of object stored in ARRAY (e.g., NODE_ENTRY *. */
+#define add_pointer_to_array(pointer, idx, array, slots, grow, type) \
+ do { \
+ if (idx + 2 >= slots) \
+ array = (type *)(xrealloc (array, (slots += grow) * sizeof (type))); \
+ array[idx++] = (type)pointer; \
+ array[idx] = (type)NULL; \
+ } while (0)
+
+#define maybe_free(x) do { if (x) free (x); } while (0)
+
+#if !defined (zero_mem) && defined (HAVE_MEMSET)
+# define zero_mem(mem, length) memset (mem, 0, length)
+#endif /* !zero_mem && HAVE_MEMSET */
+
+#if !defined (zero_mem) && defined (HAVE_BZERO)
+# define zero_mem(mem, length) bzero (mem, length)
+#endif /* !zero_mem && HAVE_BZERO */
+
+#if !defined (zero_mem)
+# define zero_mem(mem, length) \
+ do { \
+ register int zi; \
+ register unsigned char *place; \
+ \
+ place = (unsigned char *)mem; \
+ for (zi = 0; zi < length; zi++) \
+ place[zi] = 0; \
+ } while (0)
+#endif /* !zero_mem */
+
+
+/* A structure associating the nodes visited in a particular window. */
+typedef struct {
+ WINDOW *window; /* The window that this list is attached to. */
+ NODE **nodes; /* Array of nodes visited in this window. */
+ int *pagetops; /* For each node in NODES, the pagetop. */
+ long *points; /* For each node in NODES, the point. */
+ int current; /* Index in NODES of the current node. */
+ int nodes_index; /* Index where to add the next node. */
+ int nodes_slots; /* Number of slots allocated to NODES. */
+} INFO_WINDOW;
+
+/* Array of structures describing for each window which nodes have been
+ visited in that window. */
+extern INFO_WINDOW **info_windows;
+
+/* For handling errors. If you initialize the window system, you should
+ also set info_windows_initialized_p to non-zero. It is used by the
+ info_error () function to determine how to format and output errors. */
+extern int info_windows_initialized_p;
+
+/* Non-zero if an error message has been printed. */
+extern int info_error_was_printed;
+
+/* Non-zero means ring terminal bell on errors. */
+extern int info_error_rings_bell_p;
+
+/* Non-zero means default keybindings are loosely modeled on vi(1). */
+extern int vi_keys_p;
+
+/* Non-zero means don't remove ANSI escape sequences from man pages. */
+extern int raw_escapes_p;
+
+/* Print FORMAT with ARG1 and ARG2. If the window system was initialized,
+ then the message is printed in the echo area. Otherwise, a message is
+ output to stderr. */
+extern void info_error (const char *format, void *arg1, void *arg2);
+
+extern void add_file_directory_to_path (char *filename);
+
+/* Error message defines. */
+extern const char *msg_cant_find_node;
+extern const char *msg_cant_file_node;
+extern const char *msg_cant_find_window;
+extern const char *msg_cant_find_point;
+extern const char *msg_cant_kill_last;
+extern const char *msg_no_menu_node;
+extern const char *msg_no_foot_node;
+extern const char *msg_no_xref_node;
+extern const char *msg_no_pointer;
+extern const char *msg_unknown_command;
+extern const char *msg_term_too_dumb;
+extern const char *msg_at_node_bottom;
+extern const char *msg_at_node_top;
+extern const char *msg_one_window;
+extern const char *msg_win_too_small;
+extern const char *msg_cant_make_help;
+
+
+#if defined(INFOKEY)
+/* Found in variables.c. */
+extern void set_variable_to_value (char *name, char *value);
+#endif /* INFOKEY */
+
+/* Found in m-x.c. */
+extern char *read_function_name (const char *prompt, WINDOW *window);
+
+#endif /* !INFO_H */
diff --git a/info/infodoc.c b/info/infodoc.c
new file mode 100644
index 0000000..706d53f
--- /dev/null
+++ b/info/infodoc.c
@@ -0,0 +1,1193 @@
+/* infodoc.c -- functions which build documentation nodes.
+ $Id: infodoc.c,v 1.26 2008/06/11 09:55:42 gray Exp $
+
+ Copyright (C) 1993, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2006,
+ 2007, 2008 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 Brian Fox (bfox@ai.mit.edu). */
+
+#include "info.h"
+#include "funs.h"
+
+/* HELP_NODE_GETS_REGENERATED is always defined now that keys may get
+ rebound, or other changes in the help text may occur. */
+#define HELP_NODE_GETS_REGENERATED 1
+
+/* The name of the node used in the help window. */
+static char *info_help_nodename = "*Info Help*";
+
+/* A node containing printed key bindings and their documentation. */
+static NODE *internal_info_help_node = NULL;
+
+/* A pointer to the contents of the help node. */
+static char *internal_info_help_node_contents = NULL;
+
+/* The (more or less) static text which appears in the internal info
+ help node. The actual key bindings are inserted. Keep the
+ underlines (****, etc.) in the same N_ call as the text lines they
+ refer to, so translations can make the number of *'s or -'s match. */
+#if defined(INFOKEY)
+
+static char *info_internal_help_text[] = {
+ N_("Basic Info command keys\n"),
+ "\n",
+ N_("\\%-10[quit-help] Close this help window.\n"),
+ N_("\\%-10[quit] Quit Info altogether.\n"),
+ N_("\\%-10[get-info-help-node] Invoke the Info tutorial.\n"),
+ "\n",
+ N_("\\%-10[prev-line] Move up one line.\n"),
+ N_("\\%-10[next-line] Move down one line.\n"),
+ N_("\\%-10[scroll-backward] Scroll backward one screenful.\n"),
+ N_("\\%-10[scroll-forward] Scroll forward one screenful.\n"),
+ N_("\\%-10[beginning-of-node] Go to the beginning of this node.\n"),
+ N_("\\%-10[end-of-node] Go to the end of this node.\n"),
+ "\n",
+ N_("\\%-10[move-to-next-xref] Skip to the next hypertext link.\n"),
+ N_("\\%-10[select-reference-this-line] Follow the hypertext link under the cursor.\n"),
+ N_("\\%-10[history-node] Go back to the last node seen in this window.\n"),
+ "\n",
+ N_("\\%-10[global-prev-node] Go to the previous node in the document.\n"),
+ N_("\\%-10[global-next-node] Go to the next node in the document.\n"),
+ N_("\\%-10[prev-node] Go to the previous node on this level.\n"),
+ N_("\\%-10[next-node] Go to the next node on this level.\n"),
+ N_("\\%-10[up-node] Go up one level.\n"),
+ N_("\\%-10[top-node] Go to the top node of this document.\n"),
+ N_("\\%-10[dir-node] Go to the main `directory' node.\n"),
+ "\n",
+ N_("1...9 Pick the first...ninth item in this node's menu.\n"),
+ N_("\\%-10[last-menu-item] Pick the last item in this node's menu.\n"),
+ N_("\\%-10[menu-item] Pick a menu item specified by name.\n"),
+ N_("\\%-10[xref-item] Follow a cross reference specified by name.\n"),
+ N_("\\%-10[goto-node] Go to a node specified by name.\n"),
+ "\n",
+ N_("\\%-10[search] Search forward for a specified string.\n"),
+ N_("\\%-10[search-previous] Search for previous occurrence.\n"),
+ N_("\\%-10[search-next] Search for next occurrence.\n"),
+ N_("\\%-10[index-search] Search for a specified string in the index, and\n\
+ select the node referenced by the first entry found.\n"),
+ N_("\\%-10[abort-key] Cancel the current operation.\n"),
+ "\n",
+ NULL
+};
+
+#else /* !INFOKEY */
+
+static char *info_internal_help_text[] = {
+ N_("Basic Commands in Info Windows\n\
+******************************\n"),
+ "\n",
+ N_(" %-10s Quit this help.\n"),
+ N_(" %-10s Quit Info altogether.\n"),
+ N_(" %-10s Invoke the Info tutorial.\n"),
+ "\n",
+ N_("Selecting other nodes:\n\
+----------------------\n",
+ N_(" %-10s Move to the `next' node of this node.\n"),
+ N_(" %-10s Move to the `previous' node of this node.\n"),
+ N_(" %-10s Move `up' from this node.\n"),
+ N_(" %-10s Pick menu item specified by name.\n\
+ Picking a menu item causes another node to be selected.\n"),
+ N_(" %-10s Follow a cross reference. Reads name of reference.\n"),
+ N_(" %-10s Move to the last node seen in this window.\n"),
+ N_(" %-10s Skip to next hypertext link within this node.\n"),
+ N_(" %-10s Follow the hypertext link under cursor.\n"),
+ N_(" %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"),
+ N_(" %-10s Move to the Top node. Equivalent to `g Top'.\n"),
+ "\n",
+ N_("Moving within a node:\n\
+---------------------\n"),
+ N_(" %-10s Scroll forward a page.\n"),
+ N_(" %-10s Scroll backward a page.\n"),
+ N_(" %-10s Go to the beginning of this node.\n"),
+ N_(" %-10s Go to the end of this node.\n"),
+ N_(" %-10s Scroll forward 1 line.\n"),
+ N_(" %-10s Scroll backward 1 line.\n"),
+ "\n",
+ N_("Other commands:\n\
+---------------\n"),
+ N_(" %-10s Pick first...ninth item in node's menu.\n"),
+ N_(" %-10s Pick last item in node's menu.\n"),
+ /* The next four strings are each a unity, so they each need to be
+ kept as one string for the translators. */
+ N_(" %-10s Search for a specified string in the index entries of this Info\n\
+ file, and select the node referenced by the first entry found.\n"),
+ N_(" %-10s Move to node specified by name.\n\
+ You may include a filename as well, as in (FILENAME)NODENAME.\n"),
+ N_(" %-10s Search forward for a specified string,\n\
+ and select the node in which the next occurrence is found.\n"),
+ N_(" %-10s Search backward for a specified string,\n\
+ and select the node in which the next occurrence is found.\n"),
+ NULL
+};
+
+static char *info_help_keys_text[][2] = {
+ { "", "" },
+ { "", "" },
+ { "", "" },
+ { "CTRL-x 0", "CTRL-x 0" },
+ { "q", "q" },
+ { "h", "ESC h" },
+ { "", "" },
+ { "", "" },
+ { "", "" },
+ { "SPC", "SPC" },
+ { "DEL", "b" },
+ { "b", "ESC b" },
+ { "e", "ESC e" },
+ { "ESC 1 SPC", "RET" },
+ { "ESC 1 DEL", "y" },
+ { "", "" },
+ { "", "" },
+ { "", "" },
+ { "n", "CTRL-x n" },
+ { "p", "CTRL-x p" },
+ { "u", "CTRL-x u" },
+ { "m", "ESC m" },
+ { "", "" },
+ { "f", "ESC f" },
+ { "l", "l" },
+ { "TAB", "TAB" },
+ { "RET", "CTRL-x RET" },
+ { "d", "ESC d" },
+ { "t", "ESC t" },
+ { "", "" },
+ { "", "" },
+ { "", "" },
+ { "1-9", "ESC 1-9" },
+ { "0", "ESC 0" },
+ { "i", "CTRL-x i" },
+ { "", "" },
+ { "g", "CTRL-x g" },
+ { "", "" },
+ { "s", "/" },
+ { "", "" },
+ { "ESC - s", "?" },
+ { "", "" },
+ NULL
+};
+
+#endif /* !INFOKEY */
+
+static char *where_is_internal (Keymap map, InfoCommand *cmd);
+
+void
+dump_map_to_message_buffer (char *prefix, Keymap map)
+{
+ register int i;
+ unsigned prefix_len = strlen (prefix);
+ char *new_prefix = xmalloc (prefix_len + 2);
+
+ strncpy (new_prefix, prefix, prefix_len);
+ new_prefix[prefix_len + 1] = '\0';
+
+ for (i = 0; i < 256; i++)
+ {
+ new_prefix[prefix_len] = i;
+ if (map[i].type == ISKMAP)
+ {
+ dump_map_to_message_buffer (new_prefix, (Keymap)map[i].function);
+ }
+ else if (map[i].function)
+ {
+ register int last;
+ char *doc, *name;
+
+ doc = function_documentation (map[i].function);
+ name = function_name (map[i].function);
+
+ if (!*doc)
+ continue;
+
+ /* Find out if there is a series of identical functions, as in
+ ea_insert (). */
+ for (last = i + 1; last < 256; last++)
+ if ((map[last].type != ISFUNC) ||
+ (map[last].function != map[i].function))
+ break;
+
+ if (last - 1 != i)
+ {
+ printf_to_message_buffer ("%s .. ", pretty_keyseq (new_prefix),
+ NULL, NULL);
+ new_prefix[prefix_len] = last - 1;
+ printf_to_message_buffer ("%s\t", pretty_keyseq (new_prefix),
+ NULL, NULL);
+ i = last - 1;
+ }
+ else
+ printf_to_message_buffer ("%s\t", pretty_keyseq (new_prefix),
+ NULL, NULL);
+
+#if defined (NAMED_FUNCTIONS)
+ /* Print the name of the function, and some padding before the
+ documentation string is printed. */
+ {
+ int length_so_far;
+ int desired_doc_start = 40; /* Must be multiple of 8. */
+
+ printf_to_message_buffer ("(%s)", name, NULL, NULL);
+ length_so_far = message_buffer_length_this_line ();
+
+ if ((desired_doc_start + strlen (doc))
+ >= (unsigned int) the_screen->width)
+ printf_to_message_buffer ("\n ", NULL, NULL, NULL);
+ else
+ {
+ while (length_so_far < desired_doc_start)
+ {
+ printf_to_message_buffer ("\t", NULL, NULL, NULL);
+ length_so_far += character_width ('\t', length_so_far);
+ }
+ }
+ }
+#endif /* NAMED_FUNCTIONS */
+ printf_to_message_buffer ("%s\n", doc, NULL, NULL);
+ }
+ }
+ free (new_prefix);
+}
+
+/* How to create internal_info_help_node. HELP_IS_ONLY_WINDOW_P says
+ whether we're going to end up in a second (or more) window of our
+ own, or whether there's only one window and we're going to usurp it.
+ This determines how to quit the help window. Maybe we should just
+ make q do the right thing in both cases. */
+
+static void
+create_internal_info_help_node (int help_is_only_window_p)
+{
+ register int i;
+ NODE *node;
+ char *contents = NULL;
+ char *exec_keys;
+
+#ifndef HELP_NODE_GETS_REGENERATED
+ if (internal_info_help_node_contents)
+ contents = internal_info_help_node_contents;
+#endif /* !HELP_NODE_GETS_REGENERATED */
+
+ if (!contents)
+ {
+ int printed_one_mx = 0;
+
+ initialize_message_buffer ();
+
+ for (i = 0; info_internal_help_text[i]; i++)
+ {
+#ifdef INFOKEY
+ printf_to_message_buffer (replace_in_documentation
+ (_(info_internal_help_text[i]), help_is_only_window_p),
+ NULL, NULL, NULL);
+#else
+ /* Don't translate blank lines, gettext outputs the po file
+ header in that case. We want a blank line. */
+ char *msg = *(info_internal_help_text[i])
+ ? _(info_internal_help_text[i])
+ : info_internal_help_text[i];
+ char *key = info_help_keys_text[i][vi_keys_p];
+
+ /* If we have only one window (because the window size was too
+ small to split it), CTRL-x 0 doesn't work to `quit' help. */
+ if (STREQ (key, "CTRL-x 0") && help_is_only_window_p)
+ key = "l";
+
+ printf_to_message_buffer (msg, key, NULL, NULL);
+#endif /* !INFOKEY */
+ }
+
+ printf_to_message_buffer ("---------------------\n", NULL, NULL, NULL);
+ printf_to_message_buffer (_("The current search path is:\n"),
+ NULL, NULL, NULL);
+ printf_to_message_buffer ("%s\n", infopath, NULL, NULL);
+ printf_to_message_buffer ("---------------------\n\n", NULL, NULL, NULL);
+ printf_to_message_buffer (_("Commands available in Info windows:\n\n"),
+ NULL, NULL, NULL);
+ dump_map_to_message_buffer ("", info_keymap);
+ printf_to_message_buffer ("---------------------\n\n", NULL, NULL, NULL);
+ printf_to_message_buffer (_("Commands available in the echo area:\n\n"),
+ NULL, NULL, NULL);
+ dump_map_to_message_buffer ("", echo_area_keymap);
+
+#if defined (NAMED_FUNCTIONS)
+ /* Get a list of commands which have no keystroke equivs. */
+ exec_keys = where_is (info_keymap, InfoCmd(info_execute_command));
+ if (exec_keys)
+ exec_keys = xstrdup (exec_keys);
+ for (i = 0; function_doc_array[i].func; i++)
+ {
+ InfoCommand *cmd = DocInfoCmd(&function_doc_array[i]);
+
+ if (InfoFunction(cmd) != (VFunction *) info_do_lowercase_version
+ && !where_is_internal (info_keymap, cmd)
+ && !where_is_internal (echo_area_keymap, cmd))
+ {
+ if (!printed_one_mx)
+ {
+ printf_to_message_buffer ("---------------------\n\n",
+ NULL, NULL, NULL);
+ if (exec_keys && exec_keys[0])
+ printf_to_message_buffer
+ (_("The following commands can only be invoked via %s:\n\n"),
+ exec_keys, NULL, NULL);
+ else
+ printf_to_message_buffer
+ (_("The following commands cannot be invoked at all:\n\n"),
+ NULL, NULL, NULL);
+ printed_one_mx = 1;
+ }
+
+ printf_to_message_buffer
+ ("%s %s\n %s\n",
+ exec_keys,
+ function_doc_array[i].func_name,
+ replace_in_documentation (strlen (function_doc_array[i].doc)
+ ? _(function_doc_array[i].doc) : "", 0)
+ );
+
+ }
+ }
+
+ if (printed_one_mx)
+ printf_to_message_buffer ("\n", NULL, NULL, NULL);
+
+ maybe_free (exec_keys);
+#endif /* NAMED_FUNCTIONS */
+
+ node = message_buffer_to_node ();
+ internal_info_help_node_contents = node->contents;
+ }
+ else
+ {
+ /* We already had the right contents, so simply use them. */
+ node = build_message_node ("", 0, 0);
+ free (node->contents);
+ node->contents = contents;
+ node->nodelen = 1 + strlen (contents);
+ }
+
+ internal_info_help_node = node;
+
+ /* Do not GC this node's contents. It never changes, and we never need
+ to delete it once it is made. If you change some things (such as
+ placing information about dynamic variables in the help text) then
+ you will need to allow the contents to be gc'd, and you will have to
+ arrange to always regenerate the help node. */
+#if defined (HELP_NODE_GETS_REGENERATED)
+ add_gcable_pointer (internal_info_help_node->contents);
+#endif
+
+ name_internal_node (internal_info_help_node, info_help_nodename);
+
+ /* Even though this is an internal node, we don't want the window
+ system to treat it specially. So we turn off the internalness
+ of it here. */
+ internal_info_help_node->flags &= ~N_IsInternal;
+}
+
+/* Return a window which is the window showing help in this Info. */
+
+/* If the eligible window's height is >= this, split it to make the help
+ window. Otherwise display the help window in the current window. */
+#define HELP_SPLIT_SIZE 24
+
+static WINDOW *
+info_find_or_create_help_window (void)
+{
+ int help_is_only_window_p;
+ WINDOW *eligible = NULL;
+ WINDOW *help_window = get_window_of_node (internal_info_help_node);
+
+ /* If we couldn't find the help window, then make it. */
+ if (!help_window)
+ {
+ WINDOW *window;
+ int max = 0;
+
+ for (window = windows; window; window = window->next)
+ {
+ if (window->height > max)
+ {
+ max = window->height;
+ eligible = window;
+ }
+ }
+
+ if (!eligible)
+ return NULL;
+ }
+#ifndef HELP_NODE_GETS_REGENERATED
+ else
+ /* help window is static, just return it. */
+ return help_window;
+#endif /* not HELP_NODE_GETS_REGENERATED */
+
+ /* Make sure that we have a node containing the help text. The
+ argument is false if help will be the only window (so l must be used
+ to quit help), true if help will be one of several visible windows
+ (so CTRL-x 0 must be used to quit help). */
+ help_is_only_window_p = ((help_window && !windows->next)
+ || (!help_window && eligible->height < HELP_SPLIT_SIZE));
+ create_internal_info_help_node (help_is_only_window_p);
+
+ /* Either use the existing window to display the help node, or create
+ a new window if there was no existing help window. */
+ if (!help_window)
+ { /* Split the largest window into 2 windows, and show the help text
+ in that window. */
+ if (eligible->height >= HELP_SPLIT_SIZE)
+ {
+ active_window = eligible;
+ help_window = window_make_window (internal_info_help_node);
+ }
+ else
+ {
+ set_remembered_pagetop_and_point (active_window);
+ window_set_node_of_window (active_window, internal_info_help_node);
+ help_window = active_window;
+ }
+ }
+ else
+ { /* Case where help node always gets regenerated, and we have an
+ existing window in which to place the node. */
+ if (active_window != help_window)
+ {
+ set_remembered_pagetop_and_point (active_window);
+ active_window = help_window;
+ }
+ window_set_node_of_window (active_window, internal_info_help_node);
+ }
+ remember_window_and_node (help_window, help_window->node);
+ return help_window;
+}
+
+/* Create or move to the help window. */
+DECLARE_INFO_COMMAND (info_get_help_window, _("Display help message"))
+{
+ WINDOW *help_window;
+
+ help_window = info_find_or_create_help_window ();
+ if (help_window)
+ {
+ active_window = help_window;
+ active_window->flags |= W_UpdateWindow;
+ }
+ else
+ {
+ info_error (msg_cant_make_help, NULL, NULL);
+ }
+}
+
+/* Show the Info help node. This means that the "info" file is installed
+ where it can easily be found on your system. */
+DECLARE_INFO_COMMAND (info_get_info_help_node, _("Visit Info node `(info)Help'"))
+{
+ NODE *node;
+ char *nodename;
+
+ /* If there is a window on the screen showing the node "(info)Help" or
+ the node "(info)Help-Small-Screen", simply select that window. */
+ {
+ WINDOW *win;
+
+ for (win = windows; win; win = win->next)
+ {
+ if (win->node && win->node->filename &&
+ (mbscasecmp
+ (filename_non_directory (win->node->filename), "info") == 0) &&
+ ((strcmp (win->node->nodename, "Help") == 0) ||
+ (strcmp (win->node->nodename, "Help-Small-Screen") == 0)))
+ {
+ active_window = win;
+ return;
+ }
+ }
+ }
+
+ /* If the current window is small, show the small screen help. */
+ if (active_window->height < 24)
+ nodename = "Help-Small-Screen";
+ else
+ nodename = "Help";
+
+ /* Try to get the info file for Info. */
+ node = info_get_node ("Info", nodename);
+
+ if (!node)
+ {
+ if (info_recent_file_error)
+ info_error (info_recent_file_error, NULL, NULL);
+ else
+ info_error (msg_cant_file_node, "Info", nodename);
+ }
+ else
+ {
+ /* If the current window is very large (greater than 45 lines),
+ then split it and show the help node in another window.
+ Otherwise, use the current window. */
+
+ if (active_window->height > 45)
+ active_window = window_make_window (node);
+ else
+ {
+ set_remembered_pagetop_and_point (active_window);
+ window_set_node_of_window (active_window, node);
+ }
+
+ remember_window_and_node (active_window, node);
+ }
+}
+
+/* **************************************************************** */
+/* */
+/* Groveling Info Keymaps and Docs */
+/* */
+/* **************************************************************** */
+
+/* Return the documentation associated with the Info command FUNCTION. */
+char *
+function_documentation (InfoCommand *cmd)
+{
+ char *doc;
+
+#if defined (INFOKEY)
+
+ doc = cmd->doc;
+
+#else /* !INFOKEY */
+
+ register int i;
+
+ for (i = 0; function_doc_array[i].func; i++)
+ if (InfoFunction(cmd) == function_doc_array[i].func)
+ break;
+
+ doc = function_doc_array[i].func ? function_doc_array[i].doc : "";
+
+#endif /* !INFOKEY */
+
+ return replace_in_documentation ((strlen (doc) == 0) ? doc : _(doc), 0);
+}
+
+#if defined (NAMED_FUNCTIONS)
+/* Return the user-visible name of the function associated with the
+ Info command FUNCTION. */
+char *
+function_name (InfoCommand *cmd)
+{
+#if defined (INFOKEY)
+
+ return cmd->func_name;
+
+#else /* !INFOKEY */
+
+ register int i;
+
+ for (i = 0; function_doc_array[i].func; i++)
+ if (InfoFunction(cmd) == function_doc_array[i].func)
+ break;
+
+ return function_doc_array[i].func_name;
+
+#endif /* !INFOKEY */
+}
+
+/* Return a pointer to the info command for function NAME. */
+InfoCommand *
+named_function (char *name)
+{
+ register int i;
+
+ for (i = 0; function_doc_array[i].func; i++)
+ if (strcmp (function_doc_array[i].func_name, name) == 0)
+ break;
+
+ return DocInfoCmd(&function_doc_array[i]);
+}
+#endif /* NAMED_FUNCTIONS */
+
+/* Return the documentation associated with KEY in MAP. */
+char *
+key_documentation (char key, Keymap map)
+{
+ InfoCommand *function = map[key].function;
+
+ if (function)
+ return function_documentation (function);
+ else
+ return NULL;
+}
+
+DECLARE_INFO_COMMAND (describe_key, _("Print documentation for KEY"))
+{
+ char keys[50];
+ unsigned char keystroke;
+ char *k = keys;
+ Keymap map;
+
+ *k = '\0';
+ map = window->keymap;
+
+ for (;;)
+ {
+ message_in_echo_area (_("Describe key: %s"),
+ pretty_keyseq (keys), NULL);
+ keystroke = info_get_input_char ();
+ unmessage_in_echo_area ();
+
+#if !defined (INFOKEY)
+ if (Meta_p (keystroke))
+ {
+ if (map[ESC].type != ISKMAP)
+ {
+ window_message_in_echo_area
+ (_("ESC %s is undefined."), pretty_keyname (UnMeta (keystroke)));
+ return;
+ }
+
+ *k++ = '\e';
+ keystroke = UnMeta (keystroke);
+ map = (Keymap)map[ESC].function;
+ }
+#endif /* !INFOKEY */
+
+ /* Add the KEYSTROKE to our list. */
+ *k++ = keystroke;
+ *k = '\0';
+
+ if (map[keystroke].function == NULL)
+ {
+ message_in_echo_area (_("%s is undefined."),
+ pretty_keyseq (keys), NULL);
+ return;
+ }
+ else if (map[keystroke].type == ISKMAP)
+ {
+ map = (Keymap)map[keystroke].function;
+ continue;
+ }
+ else
+ {
+ char *keyname, *message, *fundoc, *funname = "";
+
+#if defined (INFOKEY)
+ /* If the key is bound to do-lowercase-version, but its
+ lower-case variant is undefined, say that this key is
+ also undefined. This is especially important for unbound
+ edit keys that emit an escape sequence: it's terribly
+ confusing to see a message "Home (do-lowercase-version)"
+ or some such when Home is unbound. */
+ if (InfoFunction(map[keystroke].function)
+ == (VFunction *) info_do_lowercase_version)
+ {
+ unsigned char lowerkey = Meta_p(keystroke)
+ ? Meta (tolower (UnMeta (keystroke)))
+ : tolower (keystroke);
+
+ if (map[lowerkey].function == NULL)
+ {
+ message_in_echo_area (_("%s is undefined."),
+ pretty_keyseq (keys), NULL);
+ return;
+ }
+ }
+#endif
+
+ keyname = pretty_keyseq (keys);
+
+#if defined (NAMED_FUNCTIONS)
+ funname = function_name (map[keystroke].function);
+#endif /* NAMED_FUNCTIONS */
+
+ fundoc = function_documentation (map[keystroke].function);
+
+ message = xmalloc
+ (10 + strlen (keyname) + strlen (fundoc) + strlen (funname));
+
+#if defined (NAMED_FUNCTIONS)
+ sprintf (message, "%s (%s): %s.", keyname, funname, fundoc);
+#else
+ sprintf (message, _("%s is defined to %s."), keyname, fundoc);
+#endif /* !NAMED_FUNCTIONS */
+
+ window_message_in_echo_area ("%s", message, NULL);
+ free (message);
+ break;
+ }
+ }
+}
+
+/* Return the pretty printable name of a single character. */
+char *
+pretty_keyname (unsigned char key)
+{
+ static char rep_buffer[30];
+ char *rep;
+
+ if (Meta_p (key))
+ {
+ char temp[20];
+
+ rep = pretty_keyname (UnMeta (key));
+
+#if defined (INFOKEY)
+ sprintf (temp, "M-%s", rep);
+#else /* !INFOKEY */
+ sprintf (temp, "ESC %s", rep);
+#endif /* !INFOKEY */
+ strcpy (rep_buffer, temp);
+ rep = rep_buffer;
+ }
+ else if (Control_p (key))
+ {
+ switch (key)
+ {
+ case '\n': rep = "LFD"; break;
+ case '\t': rep = "TAB"; break;
+ case '\r': rep = "RET"; break;
+ case ESC: rep = "ESC"; break;
+
+ default:
+ sprintf (rep_buffer, "C-%c", UnControl (key));
+ rep = rep_buffer;
+ }
+ }
+ else
+ {
+ switch (key)
+ {
+ case ' ': rep = "SPC"; break;
+ case DEL: rep = "DEL"; break;
+ default:
+ rep_buffer[0] = key;
+ rep_buffer[1] = '\0';
+ rep = rep_buffer;
+ }
+ }
+ return rep;
+}
+
+/* Return the pretty printable string which represents KEYSEQ. */
+
+static void pretty_keyseq_internal (char *keyseq, char *rep);
+
+char *
+pretty_keyseq (char *keyseq)
+{
+ static char keyseq_rep[200];
+
+ keyseq_rep[0] = '\0';
+ if (*keyseq)
+ pretty_keyseq_internal (keyseq, keyseq_rep);
+ return keyseq_rep;
+}
+
+static void
+pretty_keyseq_internal (char *keyseq, char *rep)
+{
+ if (term_kP && strncmp(keyseq, term_kP, strlen(term_kP)) == 0)
+ {
+ strcpy(rep, "PgUp");
+ keyseq += strlen(term_kP);
+ }
+ else if (term_kN && strncmp(keyseq, term_kN, strlen(term_kN)) == 0)
+ {
+ strcpy(rep, "PgDn");
+ keyseq += strlen(term_kN);
+ }
+#if defined(INFOKEY)
+ else if (term_kh && strncmp(keyseq, term_kh, strlen(term_kh)) == 0)
+ {
+ strcpy(rep, "Home");
+ keyseq += strlen(term_kh);
+ }
+ else if (term_ke && strncmp(keyseq, term_ke, strlen(term_ke)) == 0)
+ {
+ strcpy(rep, "End");
+ keyseq += strlen(term_ke);
+ }
+ else if (term_ki && strncmp(keyseq, term_ki, strlen(term_ki)) == 0)
+ {
+ strcpy(rep, "INS");
+ keyseq += strlen(term_ki);
+ }
+ else if (term_kx && strncmp(keyseq, term_kx, strlen(term_kx)) == 0)
+ {
+ strcpy(rep, "DEL");
+ keyseq += strlen(term_kx);
+ }
+#endif /* INFOKEY */
+ else if (term_ku && strncmp(keyseq, term_ku, strlen(term_ku)) == 0)
+ {
+ strcpy(rep, "Up");
+ keyseq += strlen(term_ku);
+ }
+ else if (term_kd && strncmp(keyseq, term_kd, strlen(term_kd)) == 0)
+ {
+ strcpy(rep, "Down");
+ keyseq += strlen(term_kd);
+ }
+ else if (term_kl && strncmp(keyseq, term_kl, strlen(term_kl)) == 0)
+ {
+ strcpy(rep, "Left");
+ keyseq += strlen(term_kl);
+ }
+ else if (term_kr && strncmp(keyseq, term_kr, strlen(term_kr)) == 0)
+ {
+ strcpy(rep, "Right");
+ keyseq += strlen(term_kr);
+ }
+ else
+ {
+ strcpy (rep, pretty_keyname (keyseq[0]));
+ keyseq++;
+ }
+ if (*keyseq)
+ {
+ strcat (rep, " ");
+ pretty_keyseq_internal (keyseq, rep + strlen(rep));
+ }
+}
+
+/* Return a pointer to the last character in s that is found in f. */
+static const char *
+strrpbrk (const char *s, const char *f)
+{
+ register const char *e = s + strlen(s);
+ register const char *t;
+
+ while (e-- != s)
+ {
+ for (t = f; *t; t++)
+ if (*e == *t)
+ return e;
+ }
+ return NULL;
+}
+
+/* Replace the names of functions with the key that invokes them. */
+char *
+replace_in_documentation (const char *string, int help_is_only_window_p)
+{
+ unsigned reslen = strlen (string);
+ register int i, start, next;
+ static char *result = NULL;
+
+ maybe_free (result);
+ result = xmalloc (1 + reslen);
+
+ i = next = start = 0;
+
+ /* Skip to the beginning of a replaceable function. */
+ for (i = start; string[i]; i++)
+ {
+ int j = i + 1;
+
+ /* Is this the start of a replaceable function name? */
+ if (string[i] == '\\')
+ {
+ char *fmt = NULL;
+ unsigned min = 0;
+ unsigned max = 0;
+
+ if(string[j] == '%')
+ {
+ if (string[++j] == '-')
+ j++;
+ if (isdigit(string[j]))
+ {
+ min = atoi(string + j);
+ while (isdigit(string[j]))
+ j++;
+ if (string[j] == '.' && isdigit(string[j + 1]))
+ {
+ j += 1;
+ max = atoi(string + j);
+ while (isdigit(string[j]))
+ j++;
+ }
+ fmt = xmalloc (j - i + 2);
+ strncpy (fmt, string + i + 1, j - i);
+ fmt[j - i - 1] = 's';
+ fmt[j - i] = '\0';
+ }
+ else
+ j = i + 1;
+ }
+ if (string[j] == '[')
+ {
+ unsigned arg = 0;
+ char *argstr = NULL;
+ char *rep_name, *fun_name, *rep;
+ InfoCommand *command;
+ char *repstr = NULL;
+ unsigned replen;
+
+ /* Copy in the old text. */
+ strncpy (result + next, string + start, i - start);
+ next += (i - start);
+ start = j + 1;
+
+ /* Look for an optional numeric arg. */
+ i = start;
+ if (isdigit(string[i])
+ || (string[i] == '-' && isdigit(string[i + 1])) )
+ {
+ arg = atoi(string + i);
+ if (string[i] == '-')
+ i++;
+ while (isdigit(string[i]))
+ i++;
+ }
+ start = i;
+
+ /* Move to the end of the function name. */
+ for (i = start; string[i] && (string[i] != ']'); i++);
+
+ rep_name = xmalloc (1 + i - start);
+ strncpy (rep_name, string + start, i - start);
+ rep_name[i - start] = '\0';
+
+ /* If we have only one window (because the window size was too
+ small to split it), we have to quit help by going back one
+ node in the history list, not deleting the window. */
+ if (strcmp (rep_name, "quit-help") == 0)
+ fun_name = help_is_only_window_p ? "history-node"
+ : "delete-window";
+ else
+ fun_name = rep_name;
+
+ /* Find a key which invokes this function in the info_keymap. */
+ command = named_function (fun_name);
+
+ free (rep_name);
+
+ /* If the internal documentation string fails, there is a
+ serious problem with the associated command's documentation.
+ We croak so that it can be fixed immediately. */
+ if (!command)
+ abort ();
+
+ if (arg)
+ {
+ char *argrep;
+ const char *p;
+
+ argrep = where_is (info_keymap, InfoCmd(info_add_digit_to_numeric_arg));
+ p = argrep ? strrpbrk (argrep, "0123456789-") : NULL;
+ if (p)
+ {
+ argstr = xmalloc (p - argrep + 21);
+ strncpy (argstr, argrep, p - argrep);
+ sprintf (argstr + (p - argrep), "%d", arg);
+ }
+ else
+ command = NULL;
+ }
+ rep = command ? where_is (info_keymap, command) : NULL;
+ if (!rep)
+ rep = "N/A";
+ replen = (argstr ? strlen (argstr) : 0) + strlen (rep) + 1;
+ repstr = xmalloc (replen);
+ repstr[0] = '\0';
+ if (argstr)
+ {
+ strcat(repstr, argstr);
+ strcat(repstr, " ");
+ free (argstr);
+ }
+ strcat(repstr, rep);
+
+ if (fmt)
+ {
+ if (replen > max)
+ replen = max;
+ if (replen < min)
+ replen = min;
+ }
+ if (next + replen > reslen)
+ {
+ reslen = next + replen + 1;
+ result = xrealloc (result, reslen + 1);
+ }
+
+ if (fmt)
+ sprintf (result + next, fmt, repstr);
+ else
+ strcpy (result + next, repstr);
+
+ next = strlen (result);
+ free (repstr);
+
+ start = i;
+ if (string[i])
+ start++;
+ }
+
+ maybe_free (fmt);
+ }
+ }
+ strcpy (result + next, string + start);
+ return result;
+}
+
+/* Return a string of characters which could be typed from the keymap
+ MAP to invoke FUNCTION. */
+static char *where_is_rep = NULL;
+static int where_is_rep_index = 0;
+static int where_is_rep_size = 0;
+
+char *
+where_is (Keymap map, InfoCommand *cmd)
+{
+ char *rep;
+
+ if (!where_is_rep_size)
+ where_is_rep = xmalloc (where_is_rep_size = 100);
+ where_is_rep_index = 0;
+
+ rep = where_is_internal (map, cmd);
+
+ /* If it couldn't be found, return "M-x Foo" (or equivalent). */
+ if (!rep)
+ {
+ char *name;
+
+ name = function_name (cmd);
+ if (!name)
+ return NULL; /* no such function */
+
+ rep = where_is_internal (map, InfoCmd(info_execute_command));
+ if (!rep)
+ return ""; /* function exists but can't be got to by user */
+
+ sprintf (where_is_rep, "%s %s", rep, name);
+
+ rep = where_is_rep;
+ }
+ return rep;
+}
+
+/* Return the printed rep of the keystrokes that invoke FUNCTION,
+ as found in MAP, or NULL. */
+static char *
+where_is_internal (Keymap map, InfoCommand *cmd)
+{
+#if defined(INFOKEY)
+
+ register FUNCTION_KEYSEQ *k;
+
+ for (k = cmd->keys; k; k = k->next)
+ if (k->map == map)
+ return pretty_keyseq (k->keyseq);
+
+ return NULL;
+
+#else /* !INFOKEY */
+ /* There is a bug in that create_internal_info_help_node calls
+ where_is_internal without setting where_is_rep_index to zero. This
+ was found by Mandrake and reported by Thierry Vignaud
+ <tvignaud@mandrakesoft.com> around April 24, 2002.
+
+ I think the best fix is to make where_is_rep_index another
+ parameter to this recursively-called function, instead of a static
+ variable. But this [!INFOKEY] branch of the code is not enabled
+ any more, so let's just skip the whole thing. --karl, 28sep02. */
+ register int i;
+
+ /* If the function is directly invokable in MAP, return the representation
+ of that keystroke. */
+ for (i = 0; i < 256; i++)
+ if ((map[i].type == ISFUNC) && map[i].function == cmd)
+ {
+ sprintf (where_is_rep + where_is_rep_index, "%s", pretty_keyname (i));
+ return where_is_rep;
+ }
+
+ /* Okay, search subsequent maps for this function. */
+ for (i = 0; i < 256; i++)
+ {
+ if (map[i].type == ISKMAP)
+ {
+ int saved_index = where_is_rep_index;
+ char *rep;
+
+ sprintf (where_is_rep + where_is_rep_index, "%s ",
+ pretty_keyname (i));
+
+ where_is_rep_index = strlen (where_is_rep);
+ rep = where_is_internal ((Keymap)map[i].function, cmd);
+
+ if (rep)
+ return where_is_rep;
+
+ where_is_rep_index = saved_index;
+ }
+ }
+
+ return NULL;
+
+#endif /* INFOKEY */
+}
+
+DECLARE_INFO_COMMAND (info_where_is,
+ _("Show what to type to execute a given command"))
+{
+ char *command_name;
+
+ command_name = read_function_name (_("Where is command: "), window);
+
+ if (!command_name)
+ {
+ info_abort_key (active_window, count, key);
+ return;
+ }
+
+ if (*command_name)
+ {
+ InfoCommand *command;
+
+ command = named_function (command_name);
+
+ if (command)
+ {
+ char *location;
+
+ location = where_is (active_window->keymap, command);
+
+ if (!location || !location[0])
+ {
+ info_error (_("`%s' is not on any keys"),
+ command_name, NULL);
+ }
+ else
+ {
+ if (strstr (location, function_name (command)))
+ window_message_in_echo_area
+ (_("%s can only be invoked via %s."),
+ command_name, location);
+ else
+ window_message_in_echo_area
+ (_("%s can be invoked via %s."),
+ command_name, location);
+ }
+ }
+ else
+ info_error (_("There is no function named `%s'"),
+ command_name, NULL);
+ }
+
+ free (command_name);
+}
diff --git a/info/infokey.c b/info/infokey.c
new file mode 100644
index 0000000..5c30a26
--- /dev/null
+++ b/info/infokey.c
@@ -0,0 +1,924 @@
+/* infokey.c -- compile ~/.infokey to ~/.info.
+ $Id: infokey.c,v 1.18 2008/06/11 09:55:42 gray Exp $
+
+ Copyright (C) 1999, 2001, 2002, 2003, 2004, 2005, 2007, 2008
+ 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 Andrew Bettison <andrewb@zip.com.au>. */
+
+#include "info.h"
+#include "infomap.h"
+#include "infokey.h"
+#include "key.h"
+#include "getopt.h"
+
+char *program_name = "infokey";
+
+/* Non-zero means print version info only. */
+static int print_version_p = 0;
+
+/* Non-zero means print a short description of the options. */
+static int print_help_p = 0;
+
+/* String specifying the source file. This is set by the user on the
+ command line, or a default is used. */
+static char *input_filename = NULL;
+
+/* String specifying the name of the file to output to. This is
+ set by the user on the command line, or a default is used. */
+static char *output_filename = NULL;
+
+/* Structure describing the options that Infokey accepts. We pass this
+ structure to getopt_long (). If you add or otherwise change this
+ structure, you must also change the string which follows it. */
+static struct option long_options[] =
+{
+ {"output", 1, 0, 'o'},
+ {"help", 0, &print_help_p, 1},
+ {"version", 0, &print_version_p, 1},
+ {NULL, 0, NULL, 0}
+};
+
+/* String describing the shorthand versions of the long options found above. */
+static char *short_options = "o:";
+
+/* Structure for holding the compiled sections. */
+enum sect_e
+ {
+ info = 0,
+ ea = 1,
+ var = 2
+ };
+struct sect
+ {
+ unsigned int cur;
+ unsigned char data[INFOKEY_MAX_SECTIONLEN];
+ };
+
+/* Some "forward" declarations. */
+static char *mkpath (const char *dir, const char *file);
+static int compile (FILE *fp, const char *filename, struct sect *sections);
+static int write_infokey_file (FILE *fp, struct sect *sections);
+static void syntax_error (const char *filename,
+ unsigned int linenum, const char *fmt,
+ const void *a1, const void *a2, const void *a3, const void *a4);
+static void error_message (int error_code, const char *fmt,
+ const void *a1, const void *a2, const void *a3, const void *a4);
+static void suggest_help (void);
+static void short_help (void);
+
+
+/* **************************************************************** */
+/* */
+/* Main Entry Point to the Infokey Program */
+/* */
+/* **************************************************************** */
+
+int
+main (int argc, char **argv)
+{
+ int getopt_long_index; /* Index returned by getopt_long (). */
+
+#ifdef HAVE_SETLOCALE
+ /* Set locale via LC_ALL. */
+ setlocale (LC_ALL, "");
+#endif
+
+#ifdef ENABLE_NLS
+ /* Set the text message domain. */
+ bindtextdomain (PACKAGE, LOCALEDIR);
+ textdomain (PACKAGE);
+#endif
+
+ while (1)
+ {
+ int option_character;
+
+ option_character = getopt_long
+ (argc, argv, short_options, long_options, &getopt_long_index);
+
+ /* getopt_long () returns EOF when there are no more long options. */
+ if (option_character == EOF)
+ break;
+
+ /* If this is a long option, then get the short version of it. */
+ if (option_character == 0 && long_options[getopt_long_index].flag == 0)
+ option_character = long_options[getopt_long_index].val;
+
+ /* Case on the option that we have received. */
+ switch (option_character)
+ {
+ case 0:
+ break;
+
+ /* User is specifying the name of a file to output to. */
+ case 'o':
+ if (output_filename)
+ free (output_filename);
+ output_filename = xstrdup (optarg);
+ break;
+
+ default:
+ suggest_help ();
+ xexit (1);
+ }
+ }
+
+ /* If the user specified --version, then show the version and exit. */
+ if (print_version_p)
+ {
+ printf ("%s (GNU %s) %s\n", program_name, PACKAGE, VERSION);
+ puts ("");
+ printf (_("Copyright (C) %s Free Software Foundation, Inc.\n\
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n\
+This is free software: you are free to change and redistribute it.\n\
+There is NO WARRANTY, to the extent permitted by law.\n"),
+ "2008");
+ xexit (0);
+ }
+
+ /* If the `--help' option was present, show the help and exit. */
+ if (print_help_p)
+ {
+ short_help ();
+ xexit (0);
+ }
+
+ /* If there is one argument remaining, it is the name of the input
+ file. */
+ if (optind == argc - 1)
+ {
+ if (input_filename)
+ free (input_filename);
+ input_filename = xstrdup (argv[optind]);
+ }
+ else if (optind != argc)
+ {
+ error_message (0, _("incorrect number of arguments"),
+ NULL, NULL, NULL, NULL);
+ suggest_help ();
+ xexit (1);
+ }
+
+ /* Use default filenames where none given. */
+ {
+ char *homedir;
+
+ homedir = getenv ("HOME");
+#ifdef __MSDOS__
+ if (!homedir)
+ homedir = ".";
+#endif
+ if (!input_filename)
+ input_filename = mkpath (homedir, INFOKEY_SRCFILE);
+ if (!output_filename)
+ output_filename = mkpath (homedir, INFOKEY_FILE);
+ }
+
+ {
+ FILE *inf;
+ FILE *outf;
+ int write_error;
+ static struct sect sections[3];
+
+ /* Open the input file. */
+ inf = fopen (input_filename, "r");
+ if (!inf)
+ {
+ error_message (errno, _("cannot open input file `%s'"),
+ input_filename, NULL, NULL, NULL);
+ xexit (1);
+ }
+
+ /* Compile the input file to its verious sections, then write the
+ section data to the output file. */
+
+ if (compile (inf, input_filename, sections))
+ {
+ /* Open the output file. */
+ outf = fopen (output_filename, FOPEN_WBIN);
+ if (!outf)
+ {
+ error_message (errno, _("cannot create output file `%s'"),
+ output_filename, NULL, NULL, NULL);
+ xexit (1);
+ }
+
+ /* Write the contents of the output file and close it. If there is
+ an error writing to the file, delete it and exit with a failure
+ status. */
+ write_error = 0;
+ if (!write_infokey_file (outf, sections))
+ {
+ error_message (errno, _("error writing to `%s'"),
+ output_filename, NULL, NULL, NULL);
+ write_error = 1;
+ }
+ if (fclose (outf) == EOF)
+ {
+ error_message (errno, _("error closing output file `%s'"),
+ output_filename, NULL, NULL, NULL);
+ write_error = 1;
+ }
+ if (write_error)
+ {
+ unlink (output_filename);
+ xexit (1);
+ }
+ }
+
+ /* Close the input file. */
+ fclose (inf);
+ }
+
+ return 0;
+}
+
+static char *
+mkpath (const char *dir, const char *file)
+{
+ char *p;
+
+ p = xmalloc (strlen (dir) + 1 + strlen (file) + 2);
+ strcpy (p, dir);
+ strcat (p, "/");
+ strcat (p, file);
+ return p;
+}
+
+
+/* Compilation - the real work.
+
+ Source file syntax
+ ------------------
+ The source file is a line-based text file with the following
+ structure:
+
+ # comments
+ # more comments
+
+ #info
+ u prev-line
+ d next-line
+ ^a invalid # just beep
+ \ku prev-line
+ #stop
+ \kd next-line
+ q quit # of course!
+
+ #echo-area
+ ^a echo-area-beg-of-line
+ ^e echo-area-end-of-line
+ \kr echo-area-forward
+ \kl echo-area-backward
+ \kh echo-area-beg-of-line
+ \ke echo-area-end-of-line
+
+ #var
+ scroll-step=1
+ ISO-Latin=Off
+
+ Lines starting with '#' are comments, and are ignored. Blank
+ lines are ignored. Each section is introduced by one of the
+ following lines:
+
+ #info
+ #echo-area
+ #var
+
+ The sections may occur in any order. Each section may be
+ omitted completely. If the 'info' section is the first in the
+ file, its '#info' line may be omitted.
+
+ The 'info' and 'echo-area' sections
+ -----------------------------------
+ Each line in the 'info' or 'echo-area' sections has the
+ following syntax:
+
+ key-sequence SPACE action-name [ SPACE [ # comment ] ] \n
+
+ Where SPACE is one or more white space characters excluding
+ newline, "action-name" is the name of a GNU Info command,
+ "comment" is any sequence of characters excluding newline, and
+ "key-sequence" is a concatenation of one or more key definitions
+ using the following syntax:
+
+ 1. A carat ^ followed by one character indicates a single
+ control character;
+
+ 2. A backslash \ followed by one, two, or three octal
+ digits indicates a single character having that ASCII
+ code;
+
+ 3. \n indicates a single NEWLINE;
+ \e indicates a single ESC;
+ \r indicates a single CR;
+ \t indicates a single TAB;
+ \b indicates a single BACKSPACE;
+
+ 4. \ku indicates the Up Arrow key;
+ \kd indicates the Down Arrow key;
+ \kl indicates the Left Arrow key;
+ \kr indicates the Right Arrow key;
+ \kP indicates the Page Up (PRIOR) key;
+ \kN indicates the Page Down (NEXT) key;
+ \kh indicates the Home key;
+ \ke indicates the End key;
+ \kx indicates the DEL key;
+ \k followed by any other character indicates a single
+ control-K, and the following character is interpreted
+ as in rules 1, 2, 3, 5 and 6.
+
+ 5. \m followed by any sequence defined in rules 1, 2, 3, 4
+ or 6 indicates the "Meta" modification of that key.
+
+ 6. A backslash \ followed by any character not described
+ above indicates that character itself. In particular:
+ \\ indicates a single backslash \,
+ \ (backslash-space) indicates a single space,
+ \^ indicates a single caret ^,
+
+ If the following line:
+
+ #stop
+
+ occurs anywhere in an 'info' or 'echo-area' section, that
+ indicates to GNU Info to suppress all of its default key
+ bindings in that context.
+
+ The 'var' section
+ -----------------
+ Each line in the 'var' section has the following syntax:
+
+ variable-name = value \n
+
+ Where "variable-name" is the name of a GNU Info variable and
+ "value" is the value that GNU Info will assign to that variable
+ when commencing execution. There must be no white space in the
+ variable name, nor between the variable name and the '='. All
+ characters immediately following the '=', up to but not
+ including the terminating newline, are considered to be the
+ value that will be assigned. In other words, white space
+ following the '=' is not ignored.
+ */
+
+static int add_to_section (struct sect *s, const char *str, unsigned int len);
+static int lookup_action (const char *actname);
+
+/* Compile the input file into its various sections. Return true if no
+ error was encountered.
+ */
+static int
+compile (FILE *fp, const char *filename, struct sect *sections)
+{
+ int error = 0;
+ char rescan = 0;
+ unsigned int lnum = 0;
+ int c = 0;
+
+ /* This parser is a true state machine, with no sneaky fetching
+ of input characters inside the main loop. In other words, all
+ state is fully represented by the following variables:
+ */
+ enum
+ {
+ start_of_line,
+ start_of_comment,
+ in_line_comment,
+ in_trailing_comment,
+ get_keyseq,
+ got_keyseq,
+ get_action,
+ got_action,
+ get_varname,
+ got_varname,
+ get_equals,
+ got_equals,
+ get_value
+ }
+ state = start_of_line;
+ enum sect_e section = info;
+ enum
+ {
+ normal,
+ slosh,
+ control,
+ octal,
+ special_key
+ }
+ seqstate; /* used if state == get_keyseq */
+ char meta = 0;
+ char ocnt = 0; /* used if state == get_keyseq && seqstate == octal */
+
+ /* Data is accumulated in the following variables. The code
+ avoids overflowing these strings, and throws an error
+ where appropriate if a string limit is exceeded. These string
+ lengths are arbitrary (and should be large enough) and their
+ lengths are not hard-coded anywhere else, so increasing them
+ here will not break anything. */
+ char oval = 0;
+ char comment[10];
+ unsigned int clen = 0;
+ char seq[20];
+ unsigned int slen = 0;
+ char act[80];
+ unsigned int alen = 0;
+ char varn[80];
+ unsigned int varlen = 0;
+ char val[80];
+ unsigned int vallen = 0;
+
+#define To_seq(c) \
+ do { \
+ if (slen < sizeof seq) \
+ seq[slen++] = meta ? Meta(c) : (c); \
+ else \
+ { \
+ syntax_error(filename, lnum, _("key sequence too long"), \
+ NULL, NULL, NULL, NULL); \
+ error = 1; \
+ } \
+ meta = 0; \
+ } while (0)
+
+ sections[info].cur = 1;
+ sections[info].data[0] = 0;
+ sections[ea].cur = 1;
+ sections[ea].data[0] = 0;
+ sections[var].cur = 0;
+
+ while (!error && (rescan || (c = fgetc (fp)) != EOF))
+ {
+ rescan = 0;
+ switch (state)
+ {
+ case start_of_line:
+ lnum++;
+ if (c == '#')
+ state = start_of_comment;
+ else if (c != '\n')
+ {
+ switch (section)
+ {
+ case info:
+ case ea:
+ state = get_keyseq;
+ seqstate = normal;
+ slen = 0;
+ break;
+ case var:
+ state = get_varname;
+ varlen = 0;
+ break;
+ }
+ rescan = 1;
+ }
+ break;
+
+ case start_of_comment:
+ clen = 0;
+ state = in_line_comment;
+ /* fall through */
+ case in_line_comment:
+ if (c == '\n')
+ {
+ state = start_of_line;
+ comment[clen] = '\0';
+ if (strcmp (comment, "info") == 0)
+ section = info;
+ else if (strcmp (comment, "echo-area") == 0)
+ section = ea;
+ else if (strcmp (comment, "var") == 0)
+ section = var;
+ else if (strcmp (comment, "stop") == 0
+ && (section == info || section == ea))
+ sections[section].data[0] = 1;
+ }
+ else if (clen < sizeof comment - 1)
+ comment[clen++] = c;
+ break;
+
+ case in_trailing_comment:
+ if (c == '\n')
+ state = start_of_line;
+ break;
+
+ case get_keyseq:
+ switch (seqstate)
+ {
+ case normal:
+ if (c == '\n' || isspace (c))
+ {
+ state = got_keyseq;
+ rescan = 1;
+ if (slen == 0)
+ {
+ syntax_error (filename, lnum, _("missing key sequence"),
+ NULL, NULL, NULL, NULL);
+ error = 1;
+ }
+ }
+ else if (c == '\\')
+ seqstate = slosh;
+ else if (c == '^')
+ seqstate = control;
+ else
+ To_seq (c);
+ break;
+
+ case slosh:
+ switch (c)
+ {
+ case '0': case '1': case '2': case '3':
+ case '4': case '5': case '6': case '7':
+ seqstate = octal;
+ oval = c - '0';
+ ocnt = 1;
+ break;
+ case 'b':
+ To_seq ('\b');
+ seqstate = normal;
+ break;
+ case 'e':
+ To_seq ('\033');
+ seqstate = normal;
+ break;
+ case 'n':
+ To_seq ('\n');
+ seqstate = normal;
+ break;
+ case 'r':
+ To_seq ('\r');
+ seqstate = normal;
+ break;
+ case 't':
+ To_seq ('\t');
+ seqstate = normal;
+ break;
+ case 'm':
+ meta = 1;
+ seqstate = normal;
+ break;
+ case 'k':
+ seqstate = special_key;
+ break;
+ default:
+ /* Backslash followed by any other char
+ just means that char. */
+ To_seq (c);
+ seqstate = normal;
+ break;
+ }
+ break;
+
+ case octal:
+ switch (c)
+ {
+ case '0': case '1': case '2': case '3':
+ case '4': case '5': case '6': case '7':
+ if (++ocnt <= 3)
+ oval = oval * 8 + c - '0';
+ if (ocnt == 3)
+ seqstate = normal;
+ break;
+ default:
+ ocnt = 4;
+ seqstate = normal;
+ rescan = 1;
+ break;
+ }
+ if (seqstate != octal)
+ {
+ if (oval)
+ To_seq (oval);
+ else
+ {
+ syntax_error (filename, lnum,
+ _("NUL character (\\000) not permitted"),
+ NULL, NULL, NULL, NULL);
+ error = 1;
+ }
+ }
+ break;
+
+ case special_key:
+ To_seq (SK_ESCAPE);
+ switch (c)
+ {
+ case 'u': To_seq (SK_UP_ARROW); break;
+ case 'd': To_seq (SK_DOWN_ARROW); break;
+ case 'r': To_seq (SK_RIGHT_ARROW); break;
+ case 'l': To_seq (SK_LEFT_ARROW); break;
+ case 'U': To_seq (SK_PAGE_UP); break;
+ case 'D': To_seq (SK_PAGE_DOWN); break;
+ case 'h': To_seq (SK_HOME); break;
+ case 'e': To_seq (SK_END); break;
+ case 'x': To_seq (SK_DELETE); break;
+ default: To_seq (SK_LITERAL); rescan = 1; break;
+ }
+ seqstate = normal;
+ break;
+
+ case control:
+ if (CONTROL (c))
+ To_seq (CONTROL (c));
+ else
+ {
+ syntax_error (filename, lnum,
+ _("NUL character (^%c) not permitted"),
+ (void *) (long) c, NULL, NULL, NULL);
+ error = 1;
+ }
+ seqstate = normal;
+ break;
+ }
+ break;
+
+ case got_keyseq:
+ if (isspace (c) && c != '\n')
+ break;
+ state = get_action;
+ alen = 0;
+ /* fall through */
+ case get_action:
+ if (c == '\n' || isspace (c))
+ {
+ int a;
+
+ state = got_action;
+ rescan = 1;
+ if (alen == 0)
+ {
+ syntax_error (filename, lnum, _("missing action name"),
+ (void *) (long) c, NULL, NULL, NULL);
+ error = 1;
+ }
+ else
+ {
+ act[alen] = '\0';
+ a = lookup_action (act);
+ if (a != -1)
+ {
+ char av = a;
+
+ if (!(add_to_section (&sections[section], seq, slen)
+ && add_to_section (&sections[section], "", 1)
+ && add_to_section (&sections[section], &av, 1)))
+ {
+ syntax_error (filename, lnum, _("section too long"),
+ NULL, NULL, NULL, NULL);
+ error = 1;
+ }
+ }
+ else
+ {
+ syntax_error (filename, lnum, _("unknown action `%s'"),
+ act, NULL, NULL, NULL);
+ error = 1;
+ }
+ }
+ }
+ else if (alen < sizeof act - 1)
+ act[alen++] = c;
+ else
+ {
+ syntax_error (filename, lnum, _("action name too long"),
+ NULL, NULL, NULL, NULL);
+ error = 1;
+ }
+ break;
+
+ case got_action:
+ if (c == '#')
+ state = in_trailing_comment;
+ else if (c == '\n')
+ state = start_of_line;
+ else if (!isspace (c))
+ {
+ syntax_error (filename, lnum,
+ _("extra characters following action `%s'"),
+ act, NULL, NULL, NULL);
+ error = 1;
+ }
+ break;
+
+ case get_varname:
+ if (c == '=')
+ {
+ if (varlen == 0)
+ {
+ syntax_error (filename, lnum, _("missing variable name"),
+ NULL, NULL, NULL, NULL);
+ error = 1;
+ }
+ state = get_value;
+ vallen = 0;
+ }
+ else if (c == '\n' || isspace (c))
+ {
+ syntax_error (filename, lnum,
+ _("missing `=' immediately after variable name"),
+ NULL, NULL, NULL, NULL);
+ error = 1;
+ }
+ else if (varlen < sizeof varn)
+ varn[varlen++] = c;
+ else
+ {
+ syntax_error (filename, lnum, _("variable name too long"),
+ NULL, NULL, NULL, NULL);
+ error = 1;
+ }
+ break;
+
+ case get_value:
+ if (c == '\n')
+ {
+ state = start_of_line;
+ if (!(add_to_section (&sections[section], varn, varlen)
+ && add_to_section (&sections[section], "", 1)
+ && add_to_section (&sections[section], val, vallen)
+ && add_to_section (&sections[section], "", 1)))
+ {
+ syntax_error (filename, lnum, _("section too long"),
+ NULL, NULL, NULL, NULL);
+ error = 1;
+ }
+ }
+ else if (vallen < sizeof val)
+ val[vallen++] = c;
+ else
+ {
+ syntax_error (filename, lnum, _("value too long"),
+ NULL, NULL, NULL, NULL);
+ error = 1;
+ }
+ break;
+
+ case get_equals:
+ case got_equals:
+ case got_varname:
+ break;
+ }
+ }
+
+#undef To_seq
+
+ return !error;
+}
+
+/* Add some characters to a section's data. Return true if all the
+ characters fit, or false if the section's size limit was exceeded.
+ */
+static int
+add_to_section (struct sect *s, const char *str, unsigned int len)
+{
+ if (s->cur + len > sizeof s->data)
+ return 0;
+ strncpy ((char *) s->data + s->cur, str, len);
+ s->cur += len;
+ return 1;
+}
+
+/* Translate from an action name to its numeric code. This uses the
+ auto-generated array in key.c.
+ */
+static int
+lookup_action (const char *actname)
+{
+ int i;
+
+ if (strcmp ("invalid", actname) == 0)
+ return A_INVALID;
+ for (i = 0; function_key_array[i].name != NULL; i++)
+ if (strcmp (function_key_array[i].name, actname) == 0)
+ return function_key_array[i].code;
+ return -1;
+}
+
+/* Put an integer to an infokey file.
+ Integers are stored as two bytes, low order first,
+ in radix INFOKEY_RADIX.
+ */
+static int
+putint (int i, FILE *fp)
+{
+ return fputc (i % INFOKEY_RADIX, fp) != EOF
+ && fputc ((i / INFOKEY_RADIX) % INFOKEY_RADIX, fp) != EOF;
+}
+
+/* Write an entire section to an infokey file. If the section is
+ empty, simply omit it.
+ */
+static int
+putsect (struct sect *s, int code, FILE *fp)
+{
+ if (s->cur == 0)
+ return 1;
+ return fputc (code, fp) != EOF
+ && putint (s->cur, fp)
+ && fwrite (s->data, s->cur, 1, fp) == 1;
+}
+
+/* Write an entire infokey file, given an array containing its sections.
+ */
+static int
+write_infokey_file (FILE *fp, struct sect *sections)
+{
+ /* Get rid of sections with no effect. */
+ if (sections[info].cur == 1 && sections[info].data[0] == 0)
+ sections[info].cur = 0;
+ if (sections[ea].cur == 1 && sections[ea].data[0] == 0)
+ sections[ea].cur = 0;
+
+ /* Write all parts of the file out in order (no lseeks),
+ checking for errors all the way. */
+ return fputc (INFOKEY_MAGIC_S0, fp) != EOF
+ && fputc (INFOKEY_MAGIC_S1, fp) != EOF
+ && fputc (INFOKEY_MAGIC_S2, fp) != EOF
+ && fputc (INFOKEY_MAGIC_S3, fp) != EOF
+ && fputs (VERSION, fp) != EOF
+ && fputc ('\0', fp) != EOF
+ && putsect (&sections[info], INFOKEY_SECTION_INFO, fp)
+ && putsect (&sections[ea], INFOKEY_SECTION_EA, fp)
+ && putsect (&sections[var], INFOKEY_SECTION_VAR, fp)
+ && fputc (INFOKEY_MAGIC_E0, fp) != EOF
+ && fputc (INFOKEY_MAGIC_E1, fp) != EOF
+ && fputc (INFOKEY_MAGIC_E2, fp) != EOF
+ && fputc (INFOKEY_MAGIC_E3, fp) != EOF;
+}
+
+
+/* Error handling. */
+
+/* Give the user a "syntax error" message in the form
+ progname: "filename", line N: message
+ */
+static void
+error_message (int error_code, const char *fmt,
+ const void *a1, const void *a2, const void *a3, const void *a4)
+{
+ fprintf (stderr, "%s: ", program_name);
+ fprintf (stderr, fmt, a1, a2, a3, a4);
+ if (error_code)
+ fprintf (stderr, " - %s", strerror (error_code));
+ fprintf (stderr, "\n");
+}
+
+/* Give the user a generic error message in the form
+ progname: message
+ */
+static void
+syntax_error (const char *filename,
+ unsigned int linenum, const char *fmt,
+ const void *a1, const void *a2, const void *a3, const void *a4)
+{
+ fprintf (stderr, "%s: ", program_name);
+ fprintf (stderr, _("\"%s\", line %u: "), filename, linenum);
+ fprintf (stderr, fmt, a1, a2, a3, a4);
+ fprintf (stderr, "\n");
+}
+
+/* Produce a gentle rtfm. */
+static void
+suggest_help (void)
+{
+ fprintf (stderr, _("Try --help for more information.\n"));
+}
+
+/* Produce a scaled down description of the available options to Info. */
+static void
+short_help (void)
+{
+ printf (_("\
+Usage: %s [OPTION]... [INPUT-FILE]\n\
+\n\
+Compile infokey source file to infokey file. Reads INPUT-FILE (default\n\
+$HOME/.infokey) and writes compiled key file to (by default) $HOME/.info.\n\
+\n\
+Options:\n\
+ --output FILE output to FILE instead of $HOME/.info\n\
+ --help display this help and exit.\n\
+ --version display version information and exit.\n\
+"), program_name);
+
+ puts (_("\n\
+Email bug reports to bug-texinfo@gnu.org,\n\
+general questions and discussion to help-texinfo@gnu.org.\n\
+Texinfo home page: http://www.gnu.org/software/texinfo/"));
+
+ xexit (0);
+}
diff --git a/info/infokey.h b/info/infokey.h
new file mode 100644
index 0000000..783d921
--- /dev/null
+++ b/info/infokey.h
@@ -0,0 +1,127 @@
+/* infokey.h -- Custom keystroke definition support.
+ $Id: infokey.h,v 1.5 2007/07/01 21:20:30 karl Exp $
+
+ Copyright (C) 1999, 2002, 2007 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 Andrew Bettison <andrewb@zip.com.au>.
+
+ This design was derived from the "lesskey" system in less 3.4.0. by
+ Mark Nudelman.
+
+ The following terminology is confusing:
+ source file = $HOME/.infokey
+ infokey file = $HOME/.info
+ Oh, well.
+ */
+
+
+/* Default source file, where user writes text definitions to be
+ compiled to the infokey file. MS-DOS doesn't allow leading
+ dots in file names. */
+#ifdef __MSDOS__
+#define INFOKEY_SRCFILE "_infokey"
+#else
+#define INFOKEY_SRCFILE ".infokey"
+#endif
+
+/* Default "infokey file", where compiled user defs are kept and
+ read by Info. MS-DOS doesn't allow leading dots in file names. */
+#ifdef __MSDOS__
+#define INFOKEY_FILE "_info"
+#else
+#define INFOKEY_FILE ".info"
+#endif
+
+/*
+Format of entire infokey file:
+
+ 4 bytes magic number S
+ X bytes version string
+ 1 byte '\0' terminator
+
+ any number of sections:
+ 1 byte section id
+ 2 bytes section length (N)
+ N bytes section definitions: format depends on section
+
+ 4 bytes magic number E
+
+Format of INFO and EA sections:
+
+ 1 byte flag: 1 == suppress default key bindings
+ Repeat:
+ X bytes key sequence
+ 1 byte '\0' terminator
+ 1 byte action code (A_xxx)
+
+Format of VAR section:
+
+ Repeat:
+ X bytes variable name
+ 1 byte '\0' terminator
+ Y bytes value
+ 1 byte '\0' terminator
+
+*/
+
+#define INFOKEY_NMAGIC 8
+
+#define INFOKEY_MAGIC_S0 '\001'
+#define INFOKEY_MAGIC_S1 'I'
+#define INFOKEY_MAGIC_S2 'n'
+#define INFOKEY_MAGIC_S3 'f'
+
+#define INFOKEY_SECTION_INFO 'i'
+#define INFOKEY_SECTION_EA 'e'
+#define INFOKEY_SECTION_VAR 'v'
+
+#define INFOKEY_MAGIC_E0 'A'
+#define INFOKEY_MAGIC_E1 'l'
+#define INFOKEY_MAGIC_E2 'f'
+#define INFOKEY_MAGIC_E3 'n'
+
+#define INFOKEY_RADIX 64
+#define INFOKEY_MAX_SECTIONLEN 500
+#define INFOKEY_MAX_DEFLEN 16
+
+#define A_MAX_COMMAND 120
+#define A_INVALID 121
+
+/* Character transformations (independent of info's own) */
+
+#define CONTROL(c) ((c) & 0x1f)
+#define ISCONTROL(c) (((c) & ~0x1f) == 0)
+#define META(c) ((c) | 0x80)
+#define UNMETA(c) ((c) & ~0x80)
+#define ISMETA(c) (((c) & 0x80) != 0)
+
+/* Special keys (keys which output different strings on different terminals) */
+
+#define SK_ESCAPE CONTROL('k')
+#define SK_RIGHT_ARROW 1
+#define SK_LEFT_ARROW 2
+#define SK_UP_ARROW 3
+#define SK_DOWN_ARROW 4
+#define SK_PAGE_UP 5
+#define SK_PAGE_DOWN 6
+#define SK_HOME 7
+#define SK_END 8
+#define SK_DELETE 9
+#define SK_INSERT 10
+#define SK_CTL_LEFT_ARROW 11
+#define SK_CTL_RIGHT_ARROW 12
+#define SK_CTL_DELETE 13
+#define SK_LITERAL 40
diff --git a/info/infomap.c b/info/infomap.c
new file mode 100644
index 0000000..b964d01
--- /dev/null
+++ b/info/infomap.c
@@ -0,0 +1,1285 @@
+/* infomap.c -- keymaps for Info.
+ $Id: infomap.c,v 1.21 2008/06/11 09:55:42 gray Exp $
+
+ Copyright (C) 1993, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2007, 2008
+ 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 Brian Fox (bfox@ai.mit.edu). */
+
+#include "info.h"
+#include "infomap.h"
+#include "funs.h"
+#include "terminal.h"
+
+#if defined(INFOKEY)
+#include "infokey.h"
+#include "variables.h"
+#endif /* INFOKEY */
+
+static int keymap_bind_keyseq (Keymap map, const char *keyseq,
+ KEYMAP_ENTRY *keyentry);
+
+/* Return a new keymap which has all the uppercase letters mapped to run
+ the function info_do_lowercase_version (). */
+Keymap
+keymap_make_keymap (void)
+{
+ int i;
+ Keymap keymap;
+
+ keymap = (Keymap)xmalloc (256 * sizeof (KEYMAP_ENTRY));
+
+ for (i = 0; i < 256; i++)
+ {
+ keymap[i].type = ISFUNC;
+ keymap[i].function = NULL;
+ }
+
+ for (i = 'A'; i < ('Z' + 1); i++)
+ {
+ keymap[i].type = ISFUNC;
+#if defined(INFOKEY)
+ keymap[Meta(i)].type = ISFUNC;
+ keymap[Meta(i)].function =
+#endif /* INFOKEY */
+ keymap[i].function = InfoCmd(info_do_lowercase_version);
+ }
+
+ return keymap;
+}
+
+#if defined(INFOKEY)
+static FUNCTION_KEYSEQ *
+find_function_keyseq (Keymap map, int c, Keymap rootmap)
+{
+ FUNCTION_KEYSEQ *k;
+
+ if (map[c].type != ISFUNC)
+ abort();
+ if (map[c].function == NULL)
+ return NULL;
+ for (k = map[c].function->keys; k; k = k->next)
+ {
+ const unsigned char *p;
+ Keymap m = rootmap;
+ if (k->map != rootmap)
+ continue;
+ for (p = (unsigned char *) k->keyseq; *p && m[*p].type == ISKMAP; p++)
+ m = (Keymap)m[*p].function;
+ if (*p != c || p[1])
+ continue;
+ if (m[*p].type != ISFUNC)
+ abort ();
+ break;
+ }
+ return k;
+}
+
+static void
+add_function_keyseq (InfoCommand *function,
+ const char *keyseq, Keymap rootmap)
+{
+ FUNCTION_KEYSEQ *ks;
+
+ if (function == NULL ||
+ function == InfoCmd(info_do_lowercase_version) ||
+ function == InfoCmd(ea_insert))
+ return;
+ ks = xmalloc (sizeof(FUNCTION_KEYSEQ));
+ ks->next = function->keys;
+ ks->map = rootmap;
+ ks->keyseq = xstrdup(keyseq);
+ function->keys = ks;
+}
+
+static void
+remove_function_keyseq (InfoCommand *function,
+ const char *keyseq, Keymap rootmap)
+{
+
+ FUNCTION_KEYSEQ *k, *kp;
+
+ if (function == NULL ||
+ function == InfoCmd(info_do_lowercase_version) ||
+ function == InfoCmd(ea_insert))
+ return;
+ for (kp = NULL, k = function->keys; k; kp = k, k = k->next)
+ if (k->map == rootmap && strcmp(k->keyseq, keyseq) == 0)
+ break;
+ if (!k)
+ abort ();
+ if (kp)
+ kp->next = k->next;
+ else
+ function->keys = k->next;
+}
+#endif /* INFOKEY */
+
+/* Return a new keymap which is a copy of MAP. */
+Keymap
+keymap_copy_keymap (Keymap map, Keymap rootmap, Keymap newroot)
+{
+ int i;
+ Keymap keymap;
+#if defined(INFOKEY)
+ FUNCTION_KEYSEQ *ks;
+#endif /* INFOKEY */
+
+ keymap = keymap_make_keymap ();
+ if (!newroot)
+ newroot = keymap;
+
+ for (i = 0; i < 256; i++)
+ {
+ keymap[i].type = map[i].type;
+ switch (map[i].type)
+ {
+ case ISFUNC:
+ keymap[i].function = map[i].function;
+#if defined(INFOKEY)
+ ks = find_function_keyseq (map, i, rootmap);
+ if (ks)
+ add_function_keyseq(map[i].function, ks->keyseq, newroot);
+#endif /* INFOKEY */
+ break;
+ case ISKMAP:
+ keymap[i].function = (InfoCommand *)keymap_copy_keymap
+ ((Keymap)map[i].function, rootmap, NULL);
+ break;
+ }
+ }
+ return keymap;
+}
+
+/* Free the keymap and its descendants. */
+void
+keymap_discard_keymap (Keymap map, Keymap rootmap)
+{
+ int i;
+
+ if (!map)
+ return;
+ if (!rootmap)
+ rootmap = map;
+
+ for (i = 0; i < 256; i++)
+ {
+#if defined(INFOKEY)
+ FUNCTION_KEYSEQ *ks;
+#endif /* INFOKEY */
+ switch (map[i].type)
+ {
+ case ISFUNC:
+#if defined(INFOKEY)
+ ks = find_function_keyseq(map, i, rootmap);
+ if (ks)
+ remove_function_keyseq (map[i].function, ks->keyseq, rootmap);
+#endif /* INFOKEY */
+ break;
+
+ case ISKMAP:
+ keymap_discard_keymap ((Keymap)map[i].function, rootmap);
+ break;
+
+ }
+ }
+ free(map);
+}
+
+/* Conditionally bind key sequence. */
+static int
+keymap_bind_keyseq (Keymap map,
+ const char *keyseq, KEYMAP_ENTRY *keyentry)
+{
+ Keymap m = map;
+ const unsigned char *s = (unsigned char *) keyseq;
+ int c;
+
+ if (s == NULL || *s == '\0') return 0;
+
+ while ((c = *s++) != '\0')
+ {
+#if defined(INFOKEY)
+ FUNCTION_KEYSEQ *ks;
+#endif /* INFOKEY */
+ switch (m[c].type)
+ {
+ case ISFUNC:
+#if defined(INFOKEY)
+ ks = find_function_keyseq(m, c, map);
+ if (ks)
+ remove_function_keyseq (m[c].function, ks->keyseq, map);
+#else /* !INFOKEY */
+ if (!(m[c].function == NULL || (
+ m != map &&
+ m[c].function == InfoCmd(info_do_lowercase_version))
+ ))
+ return 0;
+#endif /* !INFOKEY */
+
+ if (*s != '\0')
+ {
+ m[c].type = ISKMAP;
+ /* Here we are casting the Keymap pointer returned from
+ keymap_make_keymap to an InfoCommand pointer. Ugh.
+ This makes the `function' structure garbage
+ if it's actually interpreted as an InfoCommand.
+ Should really be using a union, and taking steps to
+ avoid the possible error. */
+ m[c].function = (InfoCommand *)keymap_make_keymap ();
+ }
+ break;
+
+ case ISKMAP:
+#if defined(INFOKEY)
+ if (*s == '\0')
+ keymap_discard_keymap ((Keymap)m[c].function, map);
+#else /* !INFOKEY */
+ if (*s == '\0')
+ return 0;
+#endif
+ break;
+ }
+ if (*s != '\0')
+ {
+ m = (Keymap)m[c].function;
+ }
+ else
+ {
+#if defined(INFOKEY)
+ add_function_keyseq (keyentry->function, keyseq, map);
+#endif /* INFOKEY */
+ m[c] = *keyentry;
+ }
+ }
+
+ return 1;
+}
+
+
+/* Initialize the standard info keymaps. */
+
+Keymap info_keymap = NULL;
+Keymap echo_area_keymap = NULL;
+
+/* Make sure that we don't have too many command codes defined. */
+
+#if A_NCOMMANDS > A_MAX_COMMAND + 1
+#error "too many commands defined"
+#endif
+
+/* Initialize the keymaps from the .info keymap file. */
+
+#define NUL '\0'
+
+static unsigned char default_emacs_like_info_keys[] =
+{
+ 0, /* suppress-default-keybindings flag */
+ TAB, NUL, A_info_move_to_next_xref,
+ LFD, NUL, A_info_select_reference_this_line,
+ RET, NUL, A_info_select_reference_this_line,
+ CONTROL('a'), NUL, A_info_beginning_of_line,
+ CONTROL('b'), NUL, A_info_backward_char,
+ CONTROL('e'), NUL, A_info_end_of_line,
+ CONTROL('f'), NUL, A_info_forward_char,
+ CONTROL('h'), NUL, A_info_get_help_window,
+ CONTROL('l'), NUL, A_info_redraw_display,
+ CONTROL('n'), NUL, A_info_next_line,
+ CONTROL('p'), NUL, A_info_prev_line,
+ CONTROL('r'), NUL, A_isearch_backward,
+ CONTROL('s'), NUL, A_isearch_forward,
+ CONTROL('u'), NUL, A_info_universal_argument,
+ CONTROL('v'), NUL, A_info_scroll_forward_page_only,
+ ',', NUL, A_info_next_index_match,
+ '/', NUL, A_info_search,
+ '0', NUL, A_info_last_menu_item,
+ '1', NUL, A_info_menu_digit,
+ '2', NUL, A_info_menu_digit,
+ '3', NUL, A_info_menu_digit,
+ '4', NUL, A_info_menu_digit,
+ '5', NUL, A_info_menu_digit,
+ '6', NUL, A_info_menu_digit,
+ '7', NUL, A_info_menu_digit,
+ '8', NUL, A_info_menu_digit,
+ '9', NUL, A_info_menu_digit,
+ '<', NUL, A_info_first_node,
+ '>', NUL, A_info_last_node,
+ '?', NUL, A_info_get_help_window,
+ '[', NUL, A_info_global_prev_node,
+ ']', NUL, A_info_global_next_node,
+ 'b', NUL, A_info_beginning_of_node,
+ 'd', NUL, A_info_dir_node,
+ 'e', NUL, A_info_end_of_node,
+ 'f', NUL, A_info_xref_item,
+ 'g', NUL, A_info_goto_node,
+ 'G', NUL, A_info_menu_sequence,
+ 'h', NUL, A_info_get_help_window,
+ 'H', NUL, A_info_get_info_help_node,
+ 'i', NUL, A_info_index_search,
+ 'l', NUL, A_info_history_node,
+ 'm', NUL, A_info_menu_item,
+ 'n', NUL, A_info_next_node,
+ 'O', NUL, A_info_goto_invocation_node,
+ 'p', NUL, A_info_prev_node,
+ 'r', NUL, A_info_xref_item,
+ 'R', NUL, A_info_toggle_regexp,
+ 's', NUL, A_info_search,
+ 'S', NUL, A_info_search_case_sensitively,
+ 't', NUL, A_info_top_node,
+ 'u', NUL, A_info_up_node,
+ ESC, '0', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '1', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '2', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '3', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '4', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '5', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '6', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '7', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '8', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '9', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '-', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, CONTROL('f'), NUL, A_info_show_footnotes,
+ ESC, CONTROL('g'), NUL, A_info_abort_key,
+ ESC, TAB, NUL, A_info_move_to_prev_xref,
+ ESC, CONTROL('v'), NUL, A_info_scroll_other_window,
+ ESC, '<', NUL, A_info_beginning_of_node,
+ ESC, '>', NUL, A_info_end_of_node,
+ ESC, 'b', NUL, A_info_backward_word,
+ ESC, 'f', NUL, A_info_forward_word,
+ ESC, 'r', NUL, A_info_move_to_window_line,
+ ESC, 'v', NUL, A_info_scroll_backward_page_only,
+ Meta('0'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('1'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('2'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('3'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('4'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('5'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('6'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('7'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('8'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('9'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('-'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta(CONTROL('f')), NUL, A_info_show_footnotes,
+ Meta(CONTROL('g')), NUL, A_info_abort_key,
+ Meta(TAB), NUL, A_info_move_to_prev_xref,
+ Meta(CONTROL('v')), NUL, A_info_scroll_other_window,
+ Meta('<'), NUL, A_info_beginning_of_node,
+ Meta('>'), NUL, A_info_end_of_node,
+ Meta('b'), NUL, A_info_backward_word,
+ Meta('f'), NUL, A_info_forward_word,
+ Meta('r'), NUL, A_info_move_to_window_line,
+ Meta('v'), NUL, A_info_scroll_backward_page_only,
+#if defined (NAMED_FUNCTIONS)
+ ESC, 'x', NUL, A_info_execute_command,
+ Meta('x'), NUL, A_info_execute_command,
+#endif /* NAMED_FUNCTIONS */
+
+ CONTROL('x'), CONTROL('b'), NUL, A_list_visited_nodes,
+ CONTROL('x'), CONTROL('c'), NUL, A_info_quit,
+ CONTROL('x'), CONTROL('f'), NUL, A_info_view_file,
+ CONTROL('x'), CONTROL('g'), NUL, A_info_abort_key,
+ CONTROL('x'), CONTROL('v'), NUL, A_info_view_file,
+ CONTROL('x'), '0', NUL, A_info_delete_window,
+ CONTROL('x'), '1', NUL, A_info_keep_one_window,
+ CONTROL('x'), '2', NUL, A_info_split_window,
+ CONTROL('x'), '^', NUL, A_info_grow_window,
+ CONTROL('x'), 'b', NUL, A_select_visited_node,
+ CONTROL('x'), 'k', NUL, A_info_kill_node,
+ CONTROL('x'), 'n', NUL, A_info_search_next,
+ CONTROL('x'), 'N', NUL, A_info_search_previous,
+ CONTROL('x'), 'o', NUL, A_info_next_window,
+ CONTROL('x'), 't', NUL, A_info_tile_windows,
+ CONTROL('x'), 'w', NUL, A_info_toggle_wrap,
+
+/* Arrow key bindings for info keymaps. It seems that some
+ terminals do not match their termcap entries, so it's best to just
+ define everything with both of the usual prefixes. */
+
+ SK_ESCAPE, SK_PAGE_UP, NUL, A_info_scroll_backward,
+ SK_ESCAPE, SK_PAGE_DOWN, NUL, A_info_scroll_forward,
+ '\033', 'O', 'A', NUL, A_info_prev_line,
+ '\033', '[', 'A', NUL, A_info_prev_line,
+ '\033', 'O', 'B', NUL, A_info_next_line,
+ '\033', '[', 'B', NUL, A_info_next_line,
+ SK_ESCAPE, SK_RIGHT_ARROW, NUL, A_info_forward_char,
+ '\033', 'O', 'C', NUL, A_info_forward_char,
+ '\033', '[', 'C', NUL, A_info_forward_char,
+ SK_ESCAPE, SK_LEFT_ARROW, NUL, A_info_backward_char,
+ '\033', 'O', 'D', NUL, A_info_backward_char,
+ '\033', '[', 'D', NUL, A_info_backward_char,
+ SK_ESCAPE, SK_HOME, NUL, A_info_beginning_of_node,
+ SK_ESCAPE, SK_END, NUL, A_info_end_of_node,
+ SK_ESCAPE, SK_DELETE, NUL, A_info_scroll_backward,
+
+ ESC, SK_ESCAPE, SK_PAGE_UP, NUL, A_info_scroll_other_window_backward,
+ ESC, SK_ESCAPE, SK_PAGE_DOWN, NUL, A_info_scroll_other_window,
+ ESC, SK_ESCAPE, SK_UP_ARROW, NUL, A_info_prev_line,
+ ESC, '\033', 'O', 'A', NUL, A_info_prev_line,
+ ESC, '\033', '[', 'A', NUL, A_info_prev_line,
+ ESC, SK_ESCAPE, SK_DOWN_ARROW, NUL, A_info_next_line,
+ ESC, '\033', 'O', 'B', NUL, A_info_next_line,
+ ESC, '\033', '[', 'B', NUL, A_info_next_line,
+ ESC, SK_ESCAPE, SK_RIGHT_ARROW, NUL, A_info_forward_word,
+ ESC, '\033', 'O', 'C', NUL, A_info_forward_word,
+ ESC, '\033', '[', 'C', NUL, A_info_forward_word,
+ ESC, SK_ESCAPE, SK_LEFT_ARROW, NUL, A_info_backward_word,
+ ESC, '\033', 'O', 'D', NUL, A_info_backward_word,
+ ESC, '\033', '[', 'D', NUL, A_info_backward_word,
+
+ /* We want help to report q, not C-x C-c, etc. */
+ 'q', NUL, A_info_quit,
+ 'x', NUL, A_info_delete_window,
+ SPC, NUL, A_info_scroll_forward,
+ DEL, NUL, A_info_scroll_backward,
+ '{', NUL, A_info_search_previous,
+ '}', NUL, A_info_search_next,
+ CONTROL('g'), NUL, A_info_abort_key,
+ SK_ESCAPE, SK_UP_ARROW, NUL, A_info_prev_line,
+ SK_ESCAPE, SK_DOWN_ARROW, NUL, A_info_next_line,
+};
+
+
+static unsigned char default_emacs_like_ea_keys[] =
+{
+ 0, /* suppress-default-keybindings flag */
+ ESC, '0', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '1', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '2', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '3', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '4', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '5', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '6', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '7', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '8', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '9', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '-', NUL, A_info_add_digit_to_numeric_arg,
+ Meta('0'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('1'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('2'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('3'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('4'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('5'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('6'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('7'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('8'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('9'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('-'), NUL, A_info_add_digit_to_numeric_arg,
+ ESC, CONTROL('g'), NUL, A_ea_abort,
+ ESC, CONTROL('v'), NUL, A_ea_scroll_completions_window,
+ ESC, 'b', NUL, A_ea_backward_word,
+ ESC, 'd', NUL, A_ea_kill_word,
+ ESC, 'f', NUL, A_ea_forward_word,
+ ESC, 'y', NUL, A_ea_yank_pop,
+ ESC, '?', NUL, A_ea_possible_completions,
+ ESC, TAB, NUL, A_ea_tab_insert,
+ ESC, DEL, NUL, A_ea_backward_kill_word,
+ Meta(CONTROL('g')), NUL, A_ea_abort,
+ Meta(CONTROL('v')), NUL, A_ea_scroll_completions_window,
+ Meta('b'), NUL, A_ea_backward_word,
+ Meta('d'), NUL, A_ea_kill_word,
+ Meta('f'), NUL, A_ea_forward_word,
+ Meta('y'), NUL, A_ea_yank_pop,
+ Meta('?'), NUL, A_ea_possible_completions,
+ Meta(TAB), NUL, A_ea_tab_insert,
+ Meta(DEL), NUL, A_ea_backward_kill_word,
+ CONTROL('a'), NUL, A_ea_beg_of_line,
+ CONTROL('b'), NUL, A_ea_backward,
+ CONTROL('d'), NUL, A_ea_delete,
+ CONTROL('e'), NUL, A_ea_end_of_line,
+ CONTROL('f'), NUL, A_ea_forward,
+ CONTROL('g'), NUL, A_ea_abort,
+ CONTROL('h'), NUL, A_ea_rubout,
+/* CONTROL('k') */
+ SK_ESCAPE, SK_LITERAL, NUL, A_ea_kill_line,
+ CONTROL('l'), NUL, A_info_redraw_display,
+ CONTROL('q'), NUL, A_ea_quoted_insert,
+ CONTROL('t'), NUL, A_ea_transpose_chars,
+ CONTROL('u'), NUL, A_info_universal_argument,
+ CONTROL('y'), NUL, A_ea_yank,
+ LFD, NUL, A_ea_newline,
+ RET, NUL, A_ea_newline,
+ SPC, NUL, A_ea_complete,
+ TAB, NUL, A_ea_complete,
+ '?', NUL, A_ea_possible_completions,
+#ifdef __MSDOS__
+ /* PC users will lynch me if I don't give them their usual DEL
+ effect... */
+ DEL, NUL, A_ea_delete,
+#else
+ DEL, NUL, A_ea_rubout,
+#endif
+#if defined (NAMED_FUNCTIONS)
+ /* ESC, 'x', NUL, A_info_execute_command, */
+ /* Meta('x'), NUL, A_info_execute_command, */
+#endif /* NAMED_FUNCTIONS */
+ CONTROL('x'), 'o', NUL, A_info_next_window,
+ CONTROL('x'), DEL, NUL, A_ea_backward_kill_line,
+
+/* Arrow key bindings for echo area keymaps. It seems that some
+ terminals do not match their termcap entries, so it's best to just
+ define everything with both of the usual prefixes. */
+
+ SK_ESCAPE, SK_RIGHT_ARROW, NUL, A_ea_forward,
+ '\033', 'O', 'C', NUL, A_ea_forward,
+ '\033', '[', 'C', NUL, A_ea_forward,
+ SK_ESCAPE, SK_LEFT_ARROW, NUL, A_ea_backward,
+ '\033', 'O', 'D', NUL, A_ea_backward,
+ '\033', '[', 'D', NUL, A_ea_backward,
+ ESC, SK_ESCAPE, SK_RIGHT_ARROW, NUL, A_ea_forward_word,
+ ESC, '\033', 'O', 'C', NUL, A_ea_forward_word,
+ ESC, '\033', '[', 'C', NUL, A_ea_forward_word,
+ ESC, SK_ESCAPE, SK_LEFT_ARROW, NUL, A_ea_backward_word,
+ ESC, '\033', 'O', 'D', NUL, A_ea_backward_word,
+ ESC, '\033', '[', 'D', NUL, A_ea_backward_word,
+#ifdef __MSDOS__
+ SK_ESCAPE, SK_DELETE, NUL, A_ea_delete,
+#else
+ SK_ESCAPE, SK_DELETE, NUL, A_ea_rubout,
+#endif
+ SK_ESCAPE, SK_HOME, NUL, A_ea_beg_of_line,
+ SK_ESCAPE, SK_END, NUL, A_ea_end_of_line,
+ ESC, SK_ESCAPE, SK_DELETE, NUL, A_ea_backward_kill_word,
+ CONTROL('x'), SK_ESCAPE, SK_DELETE, NUL,A_ea_backward_kill_line,
+};
+
+
+static unsigned char default_vi_like_info_keys[] =
+{
+ 0, /* suppress-default-keybindings flag */
+ '0', NUL, A_info_add_digit_to_numeric_arg,
+ '1', NUL, A_info_add_digit_to_numeric_arg,
+ '2', NUL, A_info_add_digit_to_numeric_arg,
+ '3', NUL, A_info_add_digit_to_numeric_arg,
+ '4', NUL, A_info_add_digit_to_numeric_arg,
+ '5', NUL, A_info_add_digit_to_numeric_arg,
+ '6', NUL, A_info_add_digit_to_numeric_arg,
+ '7', NUL, A_info_add_digit_to_numeric_arg,
+ '8', NUL, A_info_add_digit_to_numeric_arg,
+ '9', NUL, A_info_add_digit_to_numeric_arg,
+ '-', NUL, A_info_add_digit_to_numeric_arg,
+ TAB, NUL, A_info_move_to_next_xref,
+ LFD, NUL, A_info_down_line,
+ RET, NUL, A_info_down_line,
+ CONTROL('a'), NUL, A_info_beginning_of_line,
+ CONTROL('b'), NUL, A_info_scroll_backward_page_only,
+ CONTROL('d'), NUL, A_info_scroll_half_screen_down,
+ CONTROL('e'), NUL, A_info_down_line,
+ CONTROL('f'), NUL, A_info_scroll_forward_page_only,
+ CONTROL('k'), NUL, A_info_up_line,
+ CONTROL('l'), NUL, A_info_redraw_display,
+ CONTROL('n'), NUL, A_info_down_line,
+ CONTROL('p'), NUL, A_info_up_line,
+ CONTROL('r'), NUL, A_info_redraw_display,
+ CONTROL('s'), NUL, A_isearch_forward,
+ CONTROL('u'), NUL, A_info_scroll_half_screen_up,
+ CONTROL('v'), NUL, A_info_scroll_forward_page_only,
+ CONTROL('y'), NUL, A_info_up_line,
+ ',', NUL, A_info_next_index_match,
+ '/', NUL, A_info_search,
+ ESC, '0', NUL, A_info_last_menu_item,
+ ESC, '1', NUL, A_info_menu_digit,
+ ESC, '2', NUL, A_info_menu_digit,
+ ESC, '3', NUL, A_info_menu_digit,
+ ESC, '4', NUL, A_info_menu_digit,
+ ESC, '5', NUL, A_info_menu_digit,
+ ESC, '6', NUL, A_info_menu_digit,
+ ESC, '7', NUL, A_info_menu_digit,
+ ESC, '8', NUL, A_info_menu_digit,
+ ESC, '9', NUL, A_info_menu_digit,
+ Meta('0'), NUL, A_info_last_menu_item,
+ Meta('1'), NUL, A_info_menu_digit,
+ Meta('2'), NUL, A_info_menu_digit,
+ Meta('3'), NUL, A_info_menu_digit,
+ Meta('4'), NUL, A_info_menu_digit,
+ Meta('5'), NUL, A_info_menu_digit,
+ Meta('6'), NUL, A_info_menu_digit,
+ Meta('7'), NUL, A_info_menu_digit,
+ Meta('8'), NUL, A_info_menu_digit,
+ Meta('9'), NUL, A_info_menu_digit,
+ '<', NUL, A_info_first_node,
+ '>', NUL, A_info_last_node,
+ '?', NUL, A_info_search_backward,
+ '[', NUL, A_info_global_prev_node,
+ ']', NUL, A_info_global_next_node,
+ '\'', NUL, A_info_history_node,
+ 'b', NUL, A_info_scroll_backward,
+ 'd', NUL, A_info_scroll_half_screen_down,
+ 'e', NUL, A_info_down_line,
+ 'E', NUL, A_info_view_file,
+ ':', 'e', NUL, A_info_view_file,
+ 'f', NUL, A_info_scroll_forward_page_only,
+ 'F', NUL, A_info_scroll_forward_page_only,
+ 'g', NUL, A_info_first_node,
+ 'G', NUL, A_info_last_node,
+ 'h', NUL, A_info_get_help_window,
+ 'H', NUL, A_info_get_help_window,
+ 'i', NUL, A_info_index_search,
+ 'I', NUL, A_info_goto_invocation_node,
+ 'j', NUL, A_info_next_line,
+ 'k', NUL, A_info_prev_line,
+ 'l', NUL, A_info_history_node,
+ 'm', NUL, A_info_menu_item,
+ 'n', NUL, A_info_search_next,
+ 'N', NUL, A_info_search_previous,
+ 'O', NUL, A_info_goto_invocation_node,
+ 'p', NUL, A_info_prev_node,
+ 'Q', NUL, A_info_quit,
+ ':', 'q', NUL, A_info_quit,
+ ':', 'Q', NUL, A_info_quit,
+ 'Z', 'Z', NUL, A_info_quit,
+ 'r', NUL, A_info_redraw_display,
+ 'R', NUL, A_info_toggle_regexp,
+ 's', NUL, A_info_search,
+ 'S', NUL, A_info_search_case_sensitively,
+ 't', NUL, A_info_top_node,
+ 'u', NUL, A_info_scroll_half_screen_up,
+ 'w', NUL, A_info_scroll_backward_page_only_set_window,
+ 'y', NUL, A_info_up_line,
+ 'z', NUL, A_info_scroll_forward_page_only_set_window,
+ ESC, CONTROL('f'), NUL, A_info_show_footnotes,
+ ESC, CONTROL('g'), NUL, A_info_abort_key,
+ ESC, TAB, NUL, A_info_move_to_prev_xref,
+ ESC, SPC, NUL, A_info_scroll_forward_page_only,
+ ESC, CONTROL('v'), NUL, A_info_scroll_other_window,
+ ESC, '<', NUL, A_info_beginning_of_node,
+ ESC, '>', NUL, A_info_end_of_node,
+ ESC, '/', NUL, A_info_search,
+ ESC, '?', NUL, A_info_search_backward,
+ ESC, 'b', NUL, A_info_beginning_of_node,
+ ESC, 'd', NUL, A_info_dir_node,
+ ESC, 'e', NUL, A_info_end_of_node,
+ ESC, 'f', NUL, A_info_xref_item,
+ ESC, 'g', NUL, A_info_select_reference_this_line,
+ ESC, 'h', NUL, A_info_get_info_help_node,
+ ESC, 'm', NUL, A_info_menu_item,
+ ESC, 'n', NUL, A_info_search,
+ ESC, 'N', NUL, A_info_search_backward,
+ ESC, 'r', NUL, A_isearch_backward,
+ ESC, 's', NUL, A_isearch_forward,
+ ESC, 't', NUL, A_info_top_node,
+ ESC, 'v', NUL, A_info_scroll_backward_page_only,
+#if defined (NAMED_FUNCTIONS)
+ ESC, 'x', NUL, A_info_execute_command,
+ Meta('x'), NUL, A_info_execute_command,
+#endif /* NAMED_FUNCTIONS */
+ ESC, DEL, NUL, A_info_scroll_other_window_backward,
+ CONTROL('x'), CONTROL('b'), NUL, A_list_visited_nodes,
+ CONTROL('x'), CONTROL('c'), NUL, A_info_quit,
+ CONTROL('x'), CONTROL('f'), NUL, A_info_view_file,
+ CONTROL('x'), CONTROL('g'), NUL, A_info_abort_key,
+ CONTROL('x'), CONTROL('v'), NUL, A_info_view_file,
+ CONTROL('x'), LFD, NUL, A_info_select_reference_this_line,
+ CONTROL('x'), RET, NUL, A_info_select_reference_this_line,
+ CONTROL('x'), '0', NUL, A_info_delete_window,
+ CONTROL('x'), '1', NUL, A_info_keep_one_window,
+ CONTROL('x'), '2', NUL, A_info_split_window,
+ CONTROL('x'), '^', NUL, A_info_grow_window,
+ CONTROL('x'), 'b', NUL, A_select_visited_node,
+ CONTROL('x'), 'g', NUL, A_info_goto_node,
+ CONTROL('x'), 'i', NUL, A_info_index_search,
+ CONTROL('x'), 'I', NUL, A_info_goto_invocation_node,
+ CONTROL('x'), 'k', NUL, A_info_kill_node,
+ CONTROL('x'), 'n', NUL, A_info_next_node,
+ CONTROL('x'), 'o', NUL, A_info_next_window,
+ CONTROL('x'), 'O', NUL, A_info_goto_invocation_node,
+ CONTROL('x'), 'p', NUL, A_info_prev_node,
+ CONTROL('x'), 'r', NUL, A_info_xref_item,
+ CONTROL('x'), 't', NUL, A_info_tile_windows,
+ CONTROL('x'), 'u', NUL, A_info_up_node,
+ CONTROL('x'), 'w', NUL, A_info_toggle_wrap,
+ CONTROL('x'), ',', NUL, A_info_next_index_match,
+
+/* Arrow key bindings for info keymaps. It seems that some
+ terminals do not match their termcap entries, so it's best to just
+ define everything with both of the usual prefixes. */
+
+ SK_ESCAPE, SK_PAGE_UP, NUL, A_info_scroll_backward,
+ SK_ESCAPE, SK_PAGE_DOWN, NUL, A_info_scroll_forward,
+ '\033', 'O', 'A', NUL, A_info_up_line,
+ '\033', '[', 'A', NUL, A_info_up_line,
+ '\033', 'O', 'B', NUL, A_info_down_line,
+ '\033', '[', 'B', NUL, A_info_down_line,
+ SK_ESCAPE, SK_RIGHT_ARROW, NUL, A_info_scroll_forward_page_only,
+ '\033', 'O', 'C', NUL, A_info_scroll_forward_page_only,
+ '\033', '[', 'C', NUL, A_info_scroll_forward_page_only,
+ SK_ESCAPE, SK_LEFT_ARROW, NUL, A_info_scroll_backward_page_only,
+ '\033', 'O', 'D', NUL, A_info_scroll_backward_page_only,
+ '\033', '[', 'D', NUL, A_info_scroll_backward_page_only,
+ SK_ESCAPE, SK_HOME, NUL, A_info_beginning_of_node,
+ SK_ESCAPE, SK_END, NUL, A_info_end_of_node,
+ ESC, SK_ESCAPE, SK_PAGE_DOWN, NUL, A_info_scroll_other_window,
+ ESC, SK_ESCAPE, SK_PAGE_UP, NUL, A_info_scroll_other_window_backward,
+ ESC, SK_ESCAPE, SK_DELETE, NUL, A_info_scroll_other_window_backward,
+ ESC, SK_ESCAPE, SK_UP_ARROW, NUL, A_info_prev_node,
+ ESC, '\033', 'O', 'A', NUL, A_info_prev_node,
+ ESC, '\033', '[', 'A', NUL, A_info_prev_node,
+ ESC, SK_ESCAPE, SK_DOWN_ARROW, NUL, A_info_next_node,
+ ESC, '\033', 'O', 'B', NUL, A_info_next_node,
+ ESC, '\033', '[', 'B', NUL, A_info_next_node,
+ ESC, SK_ESCAPE, SK_RIGHT_ARROW, NUL, A_info_xref_item,
+ ESC, '\033', 'O', 'C', NUL, A_info_xref_item,
+ ESC, '\033', '[', 'C', NUL, A_info_xref_item,
+ ESC, SK_ESCAPE, SK_LEFT_ARROW, NUL, A_info_beginning_of_node,
+ ESC, '\033', 'O', 'D', NUL, A_info_beginning_of_node,
+ ESC, '\033', '[', 'D', NUL, A_info_beginning_of_node,
+ CONTROL('x'), SK_ESCAPE, SK_DELETE, NUL,A_ea_backward_kill_line,
+
+ /* We want help to report q, not C-x C-c, etc. */
+ 'q', NUL, A_info_quit,
+ 'x', NUL, A_info_delete_window,
+ SPC, NUL, A_info_scroll_forward,
+ DEL, NUL, A_info_scroll_backward,
+ '{', NUL, A_info_search_previous,
+ '}', NUL, A_info_search_next,
+ CONTROL('g'), NUL, A_info_abort_key,
+ SK_ESCAPE, SK_UP_ARROW, NUL, A_info_up_line,
+ SK_ESCAPE, SK_DOWN_ARROW, NUL, A_info_down_line,
+};
+
+
+static unsigned char default_vi_like_ea_keys[] =
+{
+ 0, /* suppress-default-keybindings flag */
+ ESC, '1', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '2', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '3', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '4', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '5', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '6', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '7', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '8', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '9', NUL, A_info_add_digit_to_numeric_arg,
+ ESC, '-', NUL, A_info_add_digit_to_numeric_arg,
+ Meta('1'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('2'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('3'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('4'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('5'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('6'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('7'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('8'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('9'), NUL, A_info_add_digit_to_numeric_arg,
+ Meta('-'), NUL, A_info_add_digit_to_numeric_arg,
+ ESC, CONTROL('g'), NUL, A_ea_abort,
+ ESC, CONTROL('h'), NUL, A_ea_backward_kill_word,
+ ESC, CONTROL('v'), NUL, A_ea_scroll_completions_window,
+ ESC, '0', NUL, A_ea_beg_of_line,
+ ESC, '$', NUL, A_ea_end_of_line,
+ ESC, 'b', NUL, A_ea_backward_word,
+ ESC, 'd', NUL, A_ea_kill_word,
+ ESC, 'f', NUL, A_ea_forward_word,
+ ESC, 'h', NUL, A_ea_forward,
+ ESC, 'l', NUL, A_ea_backward,
+ ESC, 'w', NUL, A_ea_forward_word,
+ ESC, 'x', NUL, A_ea_delete,
+ ESC, 'X', NUL, A_ea_kill_word,
+ ESC, 'y', NUL, A_ea_yank_pop,
+ ESC, '?', NUL, A_ea_possible_completions,
+ ESC, TAB, NUL, A_ea_tab_insert,
+ ESC, DEL, NUL, A_ea_kill_word,
+ Meta(CONTROL('g')), NUL, A_ea_abort,
+ Meta(CONTROL('h')), NUL, A_ea_backward_kill_word,
+ Meta(CONTROL('v')), NUL, A_ea_scroll_completions_window,
+ Meta('0'), NUL, A_ea_beg_of_line,
+ Meta('$'), NUL, A_ea_end_of_line,
+ Meta('b'), NUL, A_ea_backward_word,
+ Meta('d'), NUL, A_ea_kill_word,
+ Meta('f'), NUL, A_ea_forward_word,
+ Meta('h'), NUL, A_ea_forward,
+ Meta('l'), NUL, A_ea_backward,
+ Meta('w'), NUL, A_ea_forward_word,
+ Meta('x'), NUL, A_ea_delete,
+ Meta('X'), NUL, A_ea_kill_word,
+ Meta('y'), NUL, A_ea_yank_pop,
+ Meta('?'), NUL, A_ea_possible_completions,
+ Meta(TAB), NUL, A_ea_tab_insert,
+ Meta(DEL), NUL, A_ea_kill_word,
+ CONTROL('a'), NUL, A_ea_beg_of_line,
+ CONTROL('b'), NUL, A_ea_backward,
+ CONTROL('d'), NUL, A_ea_delete,
+ CONTROL('e'), NUL, A_ea_end_of_line,
+ CONTROL('f'), NUL, A_ea_forward,
+ CONTROL('g'), NUL, A_ea_abort,
+ CONTROL('h'), NUL, A_ea_rubout,
+/* CONTROL('k') */
+ SK_ESCAPE, SK_LITERAL, NUL, A_ea_kill_line,
+ CONTROL('l'), NUL, A_info_redraw_display,
+ CONTROL('q'), NUL, A_ea_quoted_insert,
+ CONTROL('t'), NUL, A_ea_transpose_chars,
+ CONTROL('u'), NUL, A_ea_abort,
+ CONTROL('v'), NUL, A_ea_quoted_insert,
+ CONTROL('y'), NUL, A_ea_yank,
+ LFD, NUL, A_ea_newline,
+ RET, NUL, A_ea_newline,
+ SPC, NUL, A_ea_complete,
+ TAB, NUL, A_ea_complete,
+ '?', NUL, A_ea_possible_completions,
+#ifdef __MSDOS__
+ /* PC users will lynch me if I don't give them their usual DEL
+ effect... */
+ DEL, NUL, A_ea_delete,
+#else
+ DEL, NUL, A_ea_rubout,
+#endif
+ CONTROL('x'), 'o', NUL, A_info_next_window,
+ CONTROL('x'), DEL, NUL, A_ea_backward_kill_line,
+
+ /* Arrow key bindings for echo area keymaps. It seems that some
+ terminals do not match their termcap entries, so it's best to just
+ define everything with both of the usual prefixes. */
+
+ SK_ESCAPE, SK_RIGHT_ARROW, NUL, A_ea_forward,
+ '\033', 'O', 'C', NUL, A_ea_forward,
+ '\033', '[', 'C', NUL, A_ea_forward,
+ SK_ESCAPE, SK_LEFT_ARROW, NUL, A_ea_backward,
+ '\033', 'O', 'D', NUL, A_ea_backward,
+ '\033', '[', 'D', NUL, A_ea_backward,
+ SK_ESCAPE, SK_HOME, NUL, A_ea_beg_of_line,
+ SK_ESCAPE, SK_END, NUL, A_ea_end_of_line,
+#ifdef __MSDOS__
+ SK_ESCAPE, SK_DELETE, NUL, A_ea_delete,
+#else
+ SK_DELETE, SK_DELETE, NUL, A_ea_rubout,
+#endif
+ ESC, SK_ESCAPE, SK_RIGHT_ARROW, NUL, A_ea_forward_word,
+ ESC, '\033', 'O', 'C', NUL, A_ea_forward_word,
+ ESC, '\033', '[', 'C', NUL, A_ea_forward_word,
+ ESC, SK_ESCAPE, SK_LEFT_ARROW, NUL, A_ea_backward_word,
+ ESC, '\033', 'O', 'D', NUL, A_ea_backward_word,
+ ESC, '\033', '[', 'D', NUL, A_ea_backward_word,
+ ESC, SK_ESCAPE, SK_DELETE, NUL, A_ea_kill_word,
+ CONTROL('x'), SK_ESCAPE, SK_DELETE, NUL,A_ea_backward_kill_line,
+};
+
+
+static unsigned char *user_info_keys;
+static unsigned int user_info_keys_len;
+static unsigned char *user_ea_keys;
+static unsigned int user_ea_keys_len;
+static unsigned char *user_vars;
+static unsigned int user_vars_len;
+
+/*
+ * Return the size of a file, or 0 if the size can't be determined.
+ */
+static unsigned long
+filesize (int f)
+{
+ long pos = lseek(f, 0L, SEEK_CUR);
+ long sz = -1L;
+ if (pos != -1L)
+ {
+ sz = lseek(f, 0L, SEEK_END);
+ lseek(f, pos, SEEK_SET);
+ }
+ return sz == -1L ? 0L : sz;
+}
+
+/* Get an integer from a infokey file.
+ Integers are stored as two bytes, low order first, in radix INFOKEY_RADIX.
+ */
+static int
+getint (unsigned char **sp)
+{
+ int n;
+
+ if ( !((*sp)[0] < INFOKEY_RADIX && (*sp)[1] < INFOKEY_RADIX) )
+ return -1;
+ n = (*sp)[0] + (*sp)[1] * INFOKEY_RADIX;
+ *sp += 2;
+ return n;
+}
+
+
+/* Fetch the contents of the standard infokey file "$HOME/.info". Return
+ true if ok, false if not. */
+static int
+fetch_user_maps (void)
+{
+ char *filename = NULL;
+ char *homedir;
+ int f;
+ unsigned char *buf;
+ unsigned long len;
+ long nread;
+ unsigned char *p;
+ int n;
+
+ /* Find and open file. */
+ if ((filename = getenv("INFOKEY")) != NULL)
+ filename = xstrdup(filename);
+ else if ((homedir = getenv("HOME")) != NULL)
+ {
+ filename = xmalloc(strlen(homedir) + 2 + strlen(INFOKEY_FILE));
+ strcpy(filename, homedir);
+ strcat(filename, "/");
+ strcat(filename, INFOKEY_FILE);
+ }
+#ifdef __MSDOS__
+ /* Poor baby, she doesn't have a HOME... */
+ else
+ filename = xstrdup(INFOKEY_FILE); /* try current directory */
+#endif
+ if (filename == NULL || (f = open(filename, O_RDONLY)) == (-1))
+ {
+ if (filename && errno != ENOENT)
+ {
+ info_error(filesys_error_string(filename, errno),
+ NULL, NULL);
+ free(filename);
+ }
+ return 0;
+ }
+ SET_BINARY (f);
+
+ /* Ensure that the file is a reasonable size. */
+ len = filesize(f);
+ if (len < INFOKEY_NMAGIC + 2 || len > 100 * 1024)
+ {
+ /* Bad file (a valid file must have at least 9 chars, and
+ more than 100 KB is a problem). */
+ if (len < INFOKEY_NMAGIC + 2)
+ info_error(_("Ignoring invalid infokey file `%s' - too small"),
+ filename, NULL);
+ else
+ info_error(_("Ignoring invalid infokey file `%s' - too big"),
+ filename, NULL);
+ close(f);
+ free(filename);
+ return 0;
+ }
+
+ /* Read the file into a buffer. */
+ buf = xmalloc((int)len);
+ nread = read(f, buf, (unsigned int) len);
+ close(f);
+ if ((unsigned int) nread != len)
+ {
+ info_error(_("Error reading infokey file `%s' - short read"),
+ filename, NULL);
+ free(buf);
+ free(filename);
+ return 0;
+ }
+
+ /* Check the header, trailer, and version of the file to increase
+ our confidence that the contents are valid. */
+ if ( buf[0] != INFOKEY_MAGIC_S0
+ || buf[1] != INFOKEY_MAGIC_S1
+ || buf[2] != INFOKEY_MAGIC_S2
+ || buf[3] != INFOKEY_MAGIC_S3
+ || buf[len - 4] != INFOKEY_MAGIC_E0
+ || buf[len - 3] != INFOKEY_MAGIC_E1
+ || buf[len - 2] != INFOKEY_MAGIC_E2
+ || buf[len - 1] != INFOKEY_MAGIC_E3
+ )
+ {
+ info_error(_("Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"),
+ filename, NULL);
+ free(filename);
+ return 0;
+ }
+ if (len < INFOKEY_NMAGIC + strlen(VERSION) + 1
+ || strcmp(VERSION, (char *) (buf + 4)) != 0)
+ {
+ info_error
+ (_("Your infokey file `%s' is out of date -- run infokey to update it"),
+ filename, NULL);
+ free(filename);
+ return 0;
+ }
+
+ /* Extract the pieces. */
+ for (p = buf + 4 + strlen(VERSION) + 1;
+ (unsigned int) (p - buf) < len - 4;
+ p += n)
+ {
+ int s = *p++;
+
+ n = getint(&p);
+ if (n < 0 || (unsigned int) n > len - 4 - (p - buf))
+ {
+ info_error(_("Invalid infokey file `%s' (bad section length) -- run infokey to update it"),
+ filename, NULL);
+ free(filename);
+ return 0;
+ }
+
+ switch (s)
+ {
+ case INFOKEY_SECTION_INFO:
+ user_info_keys = p;
+ user_info_keys_len = n;
+ break;
+ case INFOKEY_SECTION_EA:
+ user_ea_keys = p;
+ user_ea_keys_len = n;
+ break;
+ case INFOKEY_SECTION_VAR:
+ user_vars = p;
+ user_vars_len = n;
+ break;
+ default:
+ info_error(_("Invalid infokey file `%s' (bad section code) -- run infokey to update it"),
+ filename, NULL);
+ free(filename);
+ return 0;
+ }
+ }
+
+ free(filename);
+ return 1;
+}
+
+/* Decode special key sequences from the infokey file. Return zero
+ if the key sequence includes special keys which the terminal
+ doesn't define.
+ */
+static int
+decode_keys(unsigned char *src, unsigned int slen,
+ unsigned char *dst, unsigned int dlen)
+{
+ unsigned char *s = src;
+ unsigned char *d = dst;
+
+#define To_dst(c) do { \
+ if ((unsigned int) (d - dst) < dlen) *d++ = (c); \
+} while (0)
+
+ while ((unsigned int) (s - src) < slen)
+ {
+ unsigned char c = ISMETA(*s) ? UNMETA(*s) : *s;
+
+ if (c == SK_ESCAPE)
+ {
+ char *t;
+ static char lit[] = { SK_ESCAPE, NUL };
+
+ switch ((unsigned int) (s + 1 - src) < slen ? s[1] : '\0')
+ {
+ case SK_RIGHT_ARROW: t = term_kr; break;
+ case SK_LEFT_ARROW: t = term_kl; break;
+ case SK_UP_ARROW: t = term_ku; break;
+ case SK_DOWN_ARROW: t = term_kd; break;
+ case SK_PAGE_UP: t = term_kP; break;
+ case SK_PAGE_DOWN: t = term_kN; break;
+ case SK_HOME: t = term_kh; break;
+ case SK_END: t = term_ke; break;
+ case SK_DELETE: t = term_kx; break;
+ case SK_INSERT: t = term_ki; break;
+ case SK_LITERAL:
+ default: t = lit; break;
+ }
+ if (t == NULL)
+ return 0;
+ while (*t)
+ To_dst(ISMETA(*s) ? Meta(*t++) : *t++);
+ s += 2;
+ }
+ else
+ {
+ if (ISMETA(*s))
+ To_dst(Meta(*s++));
+ else
+ To_dst(*s++);
+ }
+ }
+
+ To_dst('\0');
+
+ return 1;
+
+#undef To_dst
+
+}
+
+/* Convert an infokey file section to keymap bindings. Return false if
+ the default bindings are to be suppressed. */
+static int
+section_to_keymaps(Keymap map, unsigned char *table, unsigned int len)
+{
+ int stop;
+ unsigned char *p;
+ unsigned char *seq = NULL;
+ unsigned int seqlen = 0;
+ enum { getseq, gotseq, getaction } state = getseq;
+
+ stop = len > 0 ? table[0] : 0;
+
+ for (p = table + 1; (unsigned int) (p - table) < len; p++)
+ {
+ switch (state)
+ {
+ case getseq:
+ if (*p)
+ {
+ seq = p;
+ state = gotseq;
+ }
+ break;
+
+ case gotseq:
+ if (!*p)
+ {
+ seqlen = p - seq;
+ state = getaction;
+ }
+ break;
+
+ case getaction:
+ {
+ unsigned int action = *p;
+ unsigned char keyseq[256];
+ KEYMAP_ENTRY ke;
+
+ state = getseq;
+ /* If decode_keys returns zero, it
+ means that seq includes keys which
+ the terminal doesn't support, like
+ PageDown. In that case, don't bind
+ the key sequence. */
+ if (decode_keys(seq, seqlen, keyseq,
+ sizeof keyseq))
+ {
+ keyseq[sizeof keyseq - 1] = '\0';
+ ke.type = ISFUNC;
+ ke.function =
+ action < A_NCOMMANDS
+ ? &function_doc_array[action]
+ : NULL;
+ keymap_bind_keyseq(map,
+ (const char *) keyseq, &ke);
+ }
+ }
+ break;
+ }
+ }
+ if (state != getseq)
+ info_error(_("Bad data in infokey file -- some key bindings ignored"),
+ NULL, NULL);
+ return !stop;
+}
+
+/* Convert an infokey file section to variable settings.
+ */
+static void
+section_to_vars(unsigned char *table, unsigned int len)
+{
+ enum { getvar, gotvar, getval, gotval } state = getvar;
+ unsigned char *var = NULL;
+ unsigned char *val = NULL;
+ unsigned char *p;
+
+ for (p = table; (unsigned int) (p - table) < len; p++)
+ {
+ switch (state)
+ {
+ case getvar:
+ if (*p)
+ {
+ var = p;
+ state = gotvar;
+ }
+ break;
+
+ case gotvar:
+ if (!*p)
+ state = getval;
+ break;
+
+ case getval:
+ if (*p)
+ {
+ val = p;
+ state = gotval;
+ }
+ break;
+
+ case gotval:
+ if (!*p)
+ {
+ set_variable_to_value((char *) var, (char *) val);
+ state = getvar;
+ }
+ break;
+ }
+ }
+ if (state != getvar)
+ info_error(_("Bad data in infokey file -- some var settings ignored"),
+ NULL, NULL);
+}
+
+void
+initialize_info_keymaps (void)
+{
+ int i;
+ int suppress_info_default_bindings = 0;
+ int suppress_ea_default_bindings = 0;
+
+ if (!info_keymap)
+ {
+ info_keymap = keymap_make_keymap ();
+ echo_area_keymap = keymap_make_keymap ();
+ }
+
+ /* Bind the echo area insert routines. */
+ for (i = 0; i < 256; i++)
+ if (isprint (i))
+ echo_area_keymap[i].function = InfoCmd(ea_insert);
+
+ /* Get user-defined keys and variables. */
+ if (fetch_user_maps())
+ {
+ if (user_info_keys_len && user_info_keys[0])
+ suppress_info_default_bindings = 1;
+ if (user_ea_keys_len && user_ea_keys[0])
+ suppress_ea_default_bindings = 1;
+ }
+
+ /* Apply the default bindings, unless the user says to suppress
+ them. */
+ if (vi_keys_p)
+ {
+ if (!suppress_info_default_bindings)
+ section_to_keymaps(info_keymap, default_vi_like_info_keys,
+ sizeof(default_vi_like_info_keys));
+ if (!suppress_ea_default_bindings)
+ section_to_keymaps(echo_area_keymap, default_vi_like_ea_keys,
+ sizeof(default_vi_like_ea_keys));
+ }
+ else
+ {
+ if (!suppress_info_default_bindings)
+ section_to_keymaps(info_keymap, default_emacs_like_info_keys,
+ sizeof(default_emacs_like_info_keys));
+ if (!suppress_ea_default_bindings)
+ section_to_keymaps(echo_area_keymap, default_emacs_like_ea_keys,
+ sizeof(default_emacs_like_ea_keys));
+ }
+
+ /* If the user specified custom bindings, apply them on top of the
+ default ones. */
+ if (user_info_keys_len)
+ section_to_keymaps(info_keymap, user_info_keys, user_info_keys_len);
+
+ if (user_ea_keys_len)
+ section_to_keymaps(echo_area_keymap, user_ea_keys, user_ea_keys_len);
+
+ if (user_vars_len)
+ section_to_vars(user_vars, user_vars_len);
+}
+
+/* vim: set sw=2 cino={1s>2sn-s^-se-s: */
diff --git a/info/infomap.h b/info/infomap.h
new file mode 100644
index 0000000..1e67069
--- /dev/null
+++ b/info/infomap.h
@@ -0,0 +1,81 @@
+/* infomap.h -- description of a keymap in Info and related functions.
+ $Id: infomap.h,v 1.6 2007/07/01 21:20:30 karl Exp $
+
+ Copyright (C) 1993, 2001, 2004, 2007 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 Brian Fox (bfox@ai.mit.edu). */
+
+#ifndef INFOMAP_H
+#define INFOMAP_H
+
+#include "info.h"
+
+#define ESC '\033'
+#define DEL '\177'
+#define TAB '\011'
+#define RET '\r'
+#define LFD '\n'
+#define SPC ' '
+
+#define meta_character_threshold (DEL + 1)
+#define control_character_threshold (SPC)
+
+#define meta_character_bit 0x80
+#define control_character_bit 0x40
+
+#define Meta_p(c) (((c) > meta_character_threshold))
+#define Control_p(c) ((c) < control_character_threshold)
+
+#define Meta(c) ((c) | (meta_character_bit))
+#define UnMeta(c) ((c) & (~meta_character_bit))
+#define Control(c) ((toupper (c)) & (~control_character_bit))
+#define UnControl(c) (tolower ((c) | control_character_bit))
+
+/* A keymap contains one entry for each key in the ASCII set.
+ Each entry consists of a type and a pointer.
+ FUNCTION is the address of a function to run, or the
+ address of a keymap to indirect through.
+ TYPE says which kind of thing FUNCTION is. */
+typedef struct keymap_entry
+{
+ char type;
+ InfoCommand *function;
+} KEYMAP_ENTRY;
+
+typedef KEYMAP_ENTRY *Keymap;
+
+/* The values that TYPE can have in a keymap entry. */
+#define ISFUNC 0
+#define ISKMAP 1
+
+extern Keymap info_keymap;
+extern Keymap echo_area_keymap;
+
+/* Return a new keymap which has all the uppercase letters mapped to run
+ the function info_do_lowercase_version (). */
+extern Keymap keymap_make_keymap (void);
+
+/* Return a new keymap which is a copy of MAP. */
+extern Keymap keymap_copy_keymap (Keymap map, Keymap rootmap,
+ Keymap newroot);
+
+/* Free MAP and it's descendents. */
+extern void keymap_discard_keymap (Keymap map, Keymap rootmap);
+
+/* Initialize the info keymaps. */
+extern void initialize_info_keymaps (void);
+
+#endif /* not INFOMAP_H */
diff --git a/info/key.h b/info/key.h
new file mode 100644
index 0000000..e8409da
--- /dev/null
+++ b/info/key.h
@@ -0,0 +1,34 @@
+/* key.h -- Structure associating function names with numeric codes. */
+
+/* This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+
+ Copyright (C) 1993, 2007 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 Andrew Bettison <andrewb@zip.com.au> */
+
+#if !defined (KEY_H)
+#define KEY_H
+
+typedef struct {
+ char *name;
+ unsigned char code;
+}
+ FUNCTION_KEY;
+
+extern FUNCTION_KEY function_key_array[];
+
+#endif /* !KEY_H */
diff --git a/info/m-x.c b/info/m-x.c
new file mode 100644
index 0000000..a66f3ed
--- /dev/null
+++ b/info/m-x.c
@@ -0,0 +1,213 @@
+/* m-x.c -- Meta-x minibuffer reader.
+ $Id: m-x.c,v 1.8 2008/06/11 09:55:42 gray Exp $
+
+ Copyright (C) 1993, 1997, 1998, 2001, 2002, 2004, 2007, 2008
+ 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/>.
+
+ Originally written by Brian Fox (bfox@ai.mit.edu). */
+
+#include "info.h"
+#include "funs.h"
+
+/* **************************************************************** */
+/* */
+/* Reading Named Commands */
+/* */
+/* **************************************************************** */
+
+/* Read the name of an Info function in the echo area and return the
+ name. A return value of NULL indicates that no function name could
+ be read. */
+char *
+read_function_name (const char *prompt, WINDOW *window)
+{
+ register int i;
+ char *line;
+ REFERENCE **array = NULL;
+ int array_index = 0, array_slots = 0;
+
+ /* Make an array of REFERENCE which actually contains the names of
+ the functions available in Info. */
+ for (i = 0; function_doc_array[i].func; i++)
+ {
+ REFERENCE *entry;
+
+ entry = xmalloc (sizeof (REFERENCE));
+ entry->label = xstrdup (function_doc_array[i].func_name);
+ entry->nodename = NULL;
+ entry->filename = NULL;
+
+ add_pointer_to_array
+ (entry, array_index, array, array_slots, 200, REFERENCE *);
+ }
+
+ line = info_read_completing_in_echo_area (window, prompt, array);
+
+ info_free_references (array);
+
+ if (!echo_area_is_active)
+ window_clear_echo_area ();
+
+ return line;
+}
+
+DECLARE_INFO_COMMAND (describe_command,
+ _("Read the name of an Info command and describe it"))
+{
+ char *line;
+
+ line = read_function_name (_("Describe command: "), window);
+
+ if (!line)
+ {
+ info_abort_key (active_window, count, key);
+ return;
+ }
+
+ /* Describe the function named in "LINE". */
+ if (*line)
+ {
+ InfoCommand *cmd = named_function (line);
+
+ if (!cmd)
+ return;
+
+ window_message_in_echo_area ("%s: %s.",
+ line, function_documentation (cmd));
+ }
+ free (line);
+}
+
+DECLARE_INFO_COMMAND (info_execute_command,
+ _("Read a command name in the echo area and execute it"))
+{
+ char *line;
+ char *keys;
+ char *prompt;
+
+ prompt = xmalloc (20);
+
+ keys = where_is (info_keymap, InfoCmd(info_execute_command));
+ /* If the where_is () function thinks that this command doesn't exist,
+ there's something very wrong! */
+ if (!keys)
+ abort();
+
+ if (info_explicit_arg || count != 1)
+ sprintf (prompt, "%d %s ", count, keys);
+ else
+ sprintf (prompt, "%s ", keys);
+
+ /* Ask the completer to read a reference for us. */
+ line = read_function_name (prompt, window);
+
+ /* User aborted? */
+ if (!line)
+ {
+ info_abort_key (active_window, count, key);
+ return;
+ }
+
+ /* User accepted "default"? (There is none.) */
+ if (!*line)
+ {
+ free (line);
+ return;
+ }
+
+ /* User wants to execute a named command. Do it. */
+ {
+ InfoCommand *command;
+
+ if ((active_window != the_echo_area) &&
+ (strncmp (line, "echo-area-", 10) == 0))
+ {
+ free (line);
+ info_error (_("Cannot execute an `echo-area' command here."),
+ NULL, NULL);
+ return;
+ }
+
+ command = named_function (line);
+ free (line);
+
+ if (!command)
+ return;
+
+ if (InfoFunction(command))
+ (*InfoFunction(command)) (active_window, count, 0);
+ else
+ info_error (_("Undefined command: %s"), line, NULL);
+ }
+}
+
+/* Okay, now that we have M-x, let the user set the screen height. */
+DECLARE_INFO_COMMAND (set_screen_height,
+ _("Set the height of the displayed window"))
+{
+ int new_height, old_height = screenheight;
+
+ if (info_explicit_arg || count != 1)
+ new_height = count;
+ else
+ {
+ char prompt[80];
+ char *line;
+
+ new_height = screenheight;
+
+ sprintf (prompt, _("Set screen height to (%d): "), new_height);
+
+ line = info_read_in_echo_area (window, prompt);
+
+ /* If the user aborted, do that now. */
+ if (!line)
+ {
+ info_abort_key (active_window, count, 0);
+ return;
+ }
+
+ /* Find out what the new height is supposed to be. */
+ if (*line)
+ new_height = atoi (line);
+
+ /* Clear the echo area if it isn't active. */
+ if (!echo_area_is_active)
+ window_clear_echo_area ();
+
+ free (line);
+ }
+
+ terminal_clear_screen ();
+ display_clear_display (the_display);
+ screenheight = new_height;
+#ifdef SET_SCREEN_SIZE_HELPER
+ SET_SCREEN_SIZE_HELPER;
+#endif
+ if (screenheight == old_height)
+ {
+ /* Display dimensions didn't actually change, so
+ window_new_screen_size won't do anything, but we've
+ already cleared the display above. Undo the damage. */
+ window_mark_chain (windows, W_UpdateWindow);
+ display_update_display (windows);
+ }
+ else
+ {
+ display_initialize_display (screenwidth, screenheight);
+ window_new_screen_size (screenwidth, screenheight);
+ }
+}
diff --git a/info/makedoc.c b/info/makedoc.c
new file mode 100644
index 0000000..21fcb3b
--- /dev/null
+++ b/info/makedoc.c
@@ -0,0 +1,584 @@
+/* makedoc.c -- make doc.c and funs.h from input files.
+ $Id: makedoc.c,v 1.10 2008/06/11 09:55:42 gray Exp $
+
+ Copyright (C) 1993, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2007,
+ 2008 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/>.
+
+ Originally written by Brian Fox (bfox@ai.mit.edu). */
+
+/* This program grovels the contents of the source files passed as arguments
+ and writes out a file of function pointers and documentation strings, and
+ a header file which describes the contents. This only does the functions
+ declared with DECLARE_INFO_COMMAND. */
+
+#include "info.h"
+#include "infokey.h"
+
+char *program_name = "makedoc";
+
+static void fatal_file_error (char *filename);
+
+/* Name of the header file which receives the declarations of functions. */
+static char *funs_filename = "funs.h";
+
+/* Name of the documentation to function pointer file. */
+static char *doc_filename = "doc.c";
+static char *key_filename = "key.c";
+
+static char *doc_header[] = {
+ "/* doc.c -- Generated structure containing function names and doc strings.",
+ "",
+ " This file was automatically made from various source files with the",
+ " command `%s'. DO NOT EDIT THIS FILE, only `%s.c'.",
+ NULL
+};
+
+static char *doc_header_1[] = {
+ " An entry in the array FUNCTION_DOC_ARRAY is made for each command",
+ " found in the above files; each entry consists of a function pointer,",
+#if defined (NAMED_FUNCTIONS)
+ " a string which is the user-visible name of the function,",
+#endif /* NAMED_FUNCTIONS */
+ " and a string which documents its purpose. */",
+ "",
+ "#include \"info.h\"",
+ "#include \"funs.h\"",
+ "",
+ "FUNCTION_DOC function_doc_array[] = {",
+ "",
+ NULL
+};
+
+static char *key_header[] = {
+ "/* key.c -- Generated array containing function names.",
+ "",
+ " This file was automatically made from various source files with the",
+ " command \"%s\". DO NOT EDIT THIS FILE, only \"%s.c\".",
+ "",
+ NULL
+};
+
+static char *key_header_1[] = {
+ " An entry in the array FUNCTION_KEY_ARRAY is made for each command",
+ " found in the above files; each entry consists of",
+ " a string which is the user-visible name of the function. */",
+ "",
+ "#include \"key.h\"",
+ "#include \"funs.h\"",
+ "",
+ "FUNCTION_KEY function_key_array[] = {",
+ "",
+ NULL
+};
+
+/* How to remember the locations of the functions found so that Emacs
+ can use the information in a tag table. */
+typedef struct {
+ char *name; /* Name of the tag. */
+ int line; /* Line number at which it appears. */
+ long char_offset; /* Character offset at which it appears. */
+} EMACS_TAG;
+
+typedef struct {
+ char *filename; /* Name of the file containing entries. */
+ long entrylen; /* Total number of characters in tag block. */
+ EMACS_TAG **entries; /* Entries found in FILENAME. */
+ int entries_index;
+ int entries_slots;
+} EMACS_TAG_BLOCK;
+
+EMACS_TAG_BLOCK **emacs_tags = NULL;
+int emacs_tags_index = 0;
+int emacs_tags_slots = 0;
+
+#define DECLARATION_STRING "\nDECLARE_INFO_COMMAND"
+
+static void process_one_file (char *filename, FILE *doc_stream,
+ FILE *key_stream, FILE *funs_stream);
+static void maybe_dump_tags (FILE *stream);
+static FILE *must_fopen (char *filename, char *mode);
+static void init_func_key (unsigned int val);
+static unsigned int next_func_key (void);
+
+int
+main (int argc, char **argv)
+{
+ register int i;
+ int tags_only = 0;
+ FILE *funs_stream, *doc_stream;
+ FILE *key_stream;
+
+#if STRIP_DOT_EXE
+ {
+ char *dot = strrchr (argv[0], '.');
+
+ if (dot && FILENAME_CMP (dot, ".exe") == 0)
+ *dot = 0;
+ }
+#endif
+
+ for (i = 1; i < argc; i++)
+ if (strcmp (argv[i], "-tags") == 0)
+ {
+ tags_only++;
+ break;
+ }
+
+ if (tags_only)
+ {
+ funs_filename = NULL_DEVICE;
+ doc_filename = NULL_DEVICE;
+ key_filename = NULL_DEVICE;
+ }
+
+ /* The order of these calls depends exactly on the order in the
+ Makefile.{in,am}, or they might fail on filesystems with
+ high-precision times; see also the fclose calls below. */
+ funs_stream = must_fopen (funs_filename, "w");
+ key_stream = must_fopen (key_filename, "w");
+ doc_stream = must_fopen (doc_filename, "w");
+
+ fprintf (funs_stream,
+ "/* %s -- Generated declarations for Info commands. */\n\n\
+#include \"info.h\"\n",
+ funs_filename);
+
+ for (i = 0; doc_header[i]; i++)
+ {
+ fprintf (doc_stream, doc_header[i], argv[0], argv[0]);
+ fprintf (doc_stream, "\n");
+ }
+
+ fprintf (doc_stream,
+ _(" Source files groveled to make this file include:\n\n"));
+
+ for (i = 0; key_header[i]; i++)
+ {
+ fprintf (key_stream, key_header[i], argv[0], argv[0]);
+ fprintf (key_stream, "\n");
+ }
+ fprintf (key_stream,
+ _(" Source files groveled to make this file include:\n\n"));
+
+ for (i = 1; i < argc; i++)
+ {
+ fprintf (doc_stream, "\t%s\n", argv[i]);
+ fprintf (key_stream, "\t%s\n", argv[i]);
+ }
+
+ fprintf (doc_stream, "\n");
+ for (i = 0; doc_header_1[i]; i++)
+ fprintf (doc_stream, "%s\n", doc_header_1[i]);
+
+ fprintf (key_stream, "\n");
+ for (i = 0; key_header_1[i]; i++)
+ fprintf (key_stream, "%s\n", key_header_1[i]);
+
+ init_func_key(0);
+
+ for (i = 1; i < argc; i++)
+ {
+ char *curfile;
+ curfile = argv[i];
+
+ if (*curfile == '-')
+ continue;
+
+ fprintf (doc_stream, "/* Commands found in \"%s\". */\n", curfile);
+ fprintf (key_stream, "/* Commands found in \"%s\". */\n", curfile);
+ fprintf (funs_stream, "\n/* Functions declared in \"%s\". */\n",
+ curfile);
+
+ process_one_file (curfile, doc_stream, key_stream, funs_stream);
+ }
+
+#if defined (INFOKEY)
+
+#if defined (NAMED_FUNCTIONS)
+ fprintf (doc_stream,
+ " { NULL, NULL, NULL, NULL }\n};\n");
+#else /* !NAMED_FUNCTIONS */
+ fprintf (doc_stream, " { NULL, NULL, NULL }\n};\n");
+#endif /* !NAMED_FUNCTIONS */
+
+#else /* !INFOKEY */
+
+#if defined (NAMED_FUNCTIONS)
+ fprintf (doc_stream,
+ " { NULL, NULL, NULL }\n};\n");
+#else /* !NAMED_FUNCTIONS */
+ fprintf (doc_stream, " { NULL, NULL }\n};\n");
+#endif /* !NAMED_FUNCTIONS */
+
+#endif /* !INFOKEY */
+
+ fprintf (key_stream, " { NULL, 0 }\n};\n");
+ fprintf (funs_stream, "\n#define A_NCOMMANDS %u\n", next_func_key());
+
+ /* The order of these calls also depends exactly on the order in the
+ * Makefile.{in,am}; see the must_fopen calls above. */
+ fclose (funs_stream);
+ fclose (key_stream);
+ fclose (doc_stream);
+
+ if (tags_only)
+ maybe_dump_tags (stdout);
+ return 0;
+}
+
+/* Dumping out the contents of an Emacs tags table. */
+static void
+maybe_dump_tags (FILE *stream)
+{
+ register int i;
+
+ /* Emacs needs its TAGS file to be in Unix text format (i.e., only
+ newline at end of every line, no CR), so when we generate a
+ TAGS table, we must switch the output stream to binary mode.
+ (If the table is written to a terminal, this is obviously not needed.) */
+ SET_BINARY (fileno (stream));
+
+ /* Print out the information for each block. */
+ for (i = 0; i < emacs_tags_index; i++)
+ {
+ register int j;
+ register EMACS_TAG_BLOCK *block;
+ register EMACS_TAG *etag;
+ long block_len;
+
+ block_len = 0;
+ block = emacs_tags[i];
+
+ /* Calculate the length of the dumped block first. */
+ for (j = 0; j < block->entries_index; j++)
+ {
+ char digits[30];
+ etag = block->entries[j];
+ block_len += 3 + strlen (etag->name);
+ sprintf (digits, "%d,%ld", etag->line, etag->char_offset);
+ block_len += strlen (digits);
+ }
+
+ /* Print out the defining line. */
+ fprintf (stream, "\f\n%s,%ld\n", block->filename, block_len);
+
+ /* Print out the individual tags. */
+ for (j = 0; j < block->entries_index; j++)
+ {
+ etag = block->entries[j];
+
+ fprintf (stream, "%s,\177%d,%ld\n",
+ etag->name, etag->line, etag->char_offset);
+ }
+ }
+}
+
+/* Keeping track of names, line numbers and character offsets of functions
+ found in source files. */
+static EMACS_TAG_BLOCK *
+make_emacs_tag_block (char *filename)
+{
+ EMACS_TAG_BLOCK *block;
+
+ block = xmalloc (sizeof (EMACS_TAG_BLOCK));
+ block->filename = xstrdup (filename);
+ block->entrylen = 0;
+ block->entries = NULL;
+ block->entries_index = 0;
+ block->entries_slots = 0;
+ return block;
+}
+
+static void
+add_tag_to_block (EMACS_TAG_BLOCK *block,
+ char *name, int line, long int char_offset)
+{
+ EMACS_TAG *tag;
+
+ tag = xmalloc (sizeof (EMACS_TAG));
+ tag->name = name;
+ tag->line = line;
+ tag->char_offset = char_offset;
+ add_pointer_to_array (tag, block->entries_index, block->entries,
+ block->entries_slots, 50, EMACS_TAG *);
+}
+
+/* Read the file represented by FILENAME into core, and search it for Info
+ function declarations. Output the declarations in various forms to the
+ DOC_STREAM, KEY_STREAM, and FUNS_STREAM. */
+static void
+process_one_file (char *filename, FILE *doc_stream,
+ FILE *key_stream, FILE *funs_stream)
+{
+ int descriptor, decl_len;
+ char *buffer, *decl_str;
+ struct stat finfo;
+ long offset;
+ long file_size;
+ EMACS_TAG_BLOCK *block;
+
+ if (stat (filename, &finfo) == -1)
+ fatal_file_error (filename);
+
+ descriptor = open (filename, O_RDONLY, 0666);
+
+ if (descriptor == -1)
+ fatal_file_error (filename);
+
+ file_size = (long) finfo.st_size;
+ buffer = xmalloc (1 + file_size);
+ /* On some systems, the buffer will actually contain
+ less characters than the full file's size, because
+ the CR characters are removed from line endings. */
+ file_size = read (descriptor, buffer, file_size);
+ close (descriptor);
+
+ offset = 0;
+ decl_str = DECLARATION_STRING;
+ decl_len = strlen (decl_str);
+
+ block = make_emacs_tag_block (filename);
+
+ while (1)
+ {
+ long point = 0;
+ long line_start = 0;
+ int line_number = 0;
+
+ char *func, *doc;
+#if defined (INFOKEY) || defined (NAMED_FUNCTIONS)
+ char *func_name;
+#endif /* INFOKEY || NAMED_FUNCTIONS */
+
+ for (; offset < (file_size - decl_len); offset++)
+ {
+ if (buffer[offset] == '\n')
+ {
+ line_number++;
+ line_start = offset + 1;
+ }
+
+ if (strncmp (buffer + offset, decl_str, decl_len) == 0)
+ {
+ offset += decl_len;
+ point = offset;
+ break;
+ }
+ }
+
+ if (!point)
+ break;
+
+ /* Skip forward until we find the open paren. */
+ while (point < file_size)
+ {
+ if (buffer[point] == '\n')
+ {
+ line_number++;
+ line_start = point + 1;
+ }
+ else if (buffer[point] == '(')
+ break;
+
+ point++;
+ }
+
+ while (point++ < file_size)
+ {
+ if (!whitespace_or_newline (buffer[point]))
+ break;
+ else if (buffer[point] == '\n')
+ {
+ line_number++;
+ line_start = point + 1;
+ }
+ }
+
+ if (point >= file_size)
+ break;
+
+ /* Now looking at name of function. Get it. */
+ for (offset = point; buffer[offset] != ','; offset++);
+ func = xmalloc (1 + (offset - point));
+ strncpy (func, buffer + point, offset - point);
+ func[offset - point] = '\0';
+
+ /* Remember this tag in the current block. */
+ {
+ char *tag_name;
+
+ tag_name = xmalloc (1 + (offset - line_start));
+ strncpy (tag_name, buffer + line_start, offset - line_start);
+ tag_name[offset - line_start] = '\0';
+ add_tag_to_block (block, tag_name, line_number, point);
+ }
+
+#if defined (INFOKEY) || defined (NAMED_FUNCTIONS)
+ /* Generate the user-visible function name from the function's name. */
+ {
+ register int i;
+ char *name_start;
+
+ name_start = func;
+
+ if (strncmp (name_start, "info_", 5) == 0)
+ name_start += 5;
+
+ func_name = xstrdup (name_start);
+
+ /* Fix up "ea" commands. */
+ if (strncmp (func_name, "ea_", 3) == 0)
+ {
+ char *temp_func_name;
+
+ temp_func_name = xmalloc (10 + strlen (func_name));
+ strcpy (temp_func_name, "echo_area_");
+ strcat (temp_func_name, func_name + 3);
+ free (func_name);
+ func_name = temp_func_name;
+ }
+
+ for (i = 0; func_name[i]; i++)
+ if (func_name[i] == '_')
+ func_name[i] = '-';
+ }
+#endif /* INFOKEY || NAMED_FUNCTIONS */
+
+ /* Find doc string. */
+ point = offset + 1;
+
+ while (point < file_size)
+ {
+ if (buffer[point] == '\n')
+ {
+ line_number++;
+ line_start = point + 1;
+ }
+
+ if (buffer[point] == '"')
+ break;
+ else
+ point++;
+ }
+
+ offset = point + 1;
+
+ while (offset < file_size)
+ {
+ if (buffer[offset] == '\n')
+ {
+ line_number++;
+ line_start = offset + 1;
+ }
+
+ if (buffer[offset] == '\\')
+ offset += 2;
+ else if (buffer[offset] == '"')
+ break;
+ else
+ offset++;
+ }
+
+ offset++;
+ if (offset >= file_size)
+ break;
+
+ doc = xmalloc (1 + (offset - point));
+ strncpy (doc, buffer + point, offset - point);
+ doc[offset - point] = '\0';
+
+#if defined (INFOKEY)
+
+#if defined (NAMED_FUNCTIONS)
+ fprintf (doc_stream,
+ " { (VFunction *)%s, \"%s\", (FUNCTION_KEYSEQ *)0, %s },\n",
+ func, func_name, doc);
+#else /* !NAMED_FUNCTIONS */
+ fprintf (doc_stream,
+ " { (VFunction *) %s, (FUNCTION_KEYSEQ *)0, %s },\n", func, doc);
+#endif /* !NAMED_FUNCTIONS */
+
+ fprintf (key_stream, " { \"%s\", A_%s },\n", func_name, func);
+
+#else /* !INFOKEY */
+
+#if defined (NAMED_FUNCTIONS)
+ fprintf (doc_stream, " { %s, \"%s\", %s },\n", func, func_name, doc);
+#else /* !NAMED_FUNCTIONS */
+ fprintf (doc_stream, " { %s, %s },\n", func, doc);
+#endif /* !NAMED_FUNCTIONS */
+
+#endif /* !INFOKEY */
+
+#if defined (INFOKEY) || defined (NAMED_FUNCTIONS)
+ free (func_name);
+#endif /* INFOKEY || NAMED_FUNCTIONS */
+
+#if defined (INFOKEY)
+ fprintf (funs_stream, "#define A_%s %u\n", func, next_func_key());
+#endif /* INFOKEY */
+ fprintf (funs_stream,
+ "extern void %s (WINDOW *window, int count, unsigned char key);\n",
+ func);
+ free (func);
+ free (doc);
+ }
+ free (buffer);
+
+ /* If we created any tags, remember this file on our global list. Otherwise,
+ free the memory already allocated to it. */
+ if (block->entries)
+ add_pointer_to_array (block, emacs_tags_index, emacs_tags,
+ emacs_tags_slots, 10, EMACS_TAG_BLOCK *);
+ else
+ {
+ free (block->filename);
+ free (block);
+ }
+}
+
+static void
+fatal_file_error (char *filename)
+{
+ fprintf (stderr, _("Couldn't manipulate the file %s.\n"), filename);
+ xexit (2);
+}
+
+static FILE *
+must_fopen (char *filename, char *mode)
+{
+ FILE *stream;
+
+ stream = fopen (filename, mode);
+ if (!stream)
+ fatal_file_error (filename);
+
+ return stream;
+}
+
+static unsigned int func_key;
+
+static void
+init_func_key(unsigned int val)
+{
+ func_key = val;
+}
+
+static unsigned int
+next_func_key(void)
+{
+ return func_key++;
+}
diff --git a/info/man.c b/info/man.c
new file mode 100644
index 0000000..27d1c27
--- /dev/null
+++ b/info/man.c
@@ -0,0 +1,678 @@
+/* man.c: How to read and format man files.
+ $Id: man.c,v 1.14 2008/06/28 08:09:32 gray Exp $
+
+ Copyright (C) 1995, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005,
+ 2007, 2008 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/>.
+
+ Originally written by Brian Fox Thu May 4 09:17:52 1995. */
+
+#include "info.h"
+#include <sys/ioctl.h>
+#include "signals.h"
+#if defined (HAVE_SYS_TIME_H)
+#include <sys/time.h>
+#endif
+#if defined (HAVE_SYS_WAIT_H)
+#include <sys/wait.h>
+#endif
+
+#include "tilde.h"
+#include "man.h"
+
+#if !defined (_POSIX_VERSION)
+#define pid_t int
+#endif
+
+#if defined (FD_SET)
+# if defined (hpux)
+# define fd_set_cast(x) (int *)(x)
+# else
+# define fd_set_cast(x) (fd_set *)(x)
+# endif /* !hpux */
+#endif /* FD_SET */
+
+#if STRIP_DOT_EXE
+static char const * const exec_extensions[] = {
+ ".exe", ".com", ".bat", ".btm", ".sh", ".ksh", ".pl", ".sed", "", NULL
+};
+#else
+static char const * const exec_extensions[] = { "", NULL };
+#endif
+
+static char *read_from_fd (int fd);
+static NODE *manpage_node_of_file_buffer (FILE_BUFFER *file_buffer,
+ char *pagename);
+static char *get_manpage_contents (char *pagename);
+
+NODE *
+make_manpage_node (char *pagename)
+{
+ return info_get_node (MANPAGE_FILE_BUFFER_NAME, pagename);
+}
+
+NODE *
+get_manpage_node (FILE_BUFFER *file_buffer, char *pagename)
+{
+ NODE *node;
+
+ node = manpage_node_of_file_buffer (file_buffer, pagename);
+
+ if (!node)
+ {
+ char *page;
+
+ page = get_manpage_contents (pagename);
+
+ if (page)
+ {
+ char header[1024];
+ long oldsize, newsize;
+ int hlen, plen;
+ char *old_contents = file_buffer->contents;
+
+ sprintf (header, "\n\n%c\n%s %s, %s %s, %s (dir)\n\n",
+ INFO_COOKIE,
+ INFO_FILE_LABEL, file_buffer->filename,
+ INFO_NODE_LABEL, pagename,
+ INFO_UP_LABEL);
+ oldsize = file_buffer->filesize;
+ hlen = strlen (header);
+ plen = strlen (page);
+ newsize = (oldsize + hlen + plen);
+ file_buffer->contents = xrealloc (file_buffer->contents, 1 + newsize);
+ memcpy (file_buffer->contents + oldsize, header, hlen);
+ memcpy (file_buffer->contents + oldsize + hlen, page, plen);
+ file_buffer->contents[newsize] = '\0';
+ file_buffer->filesize = newsize;
+ file_buffer->finfo.st_size = newsize;
+ build_tags_and_nodes (file_buffer);
+ free (page);
+ /* We have just relocated file_buffer->contents from under
+ the feet of info_windows[] array. Therefore, all the
+ nodes on that list which are showing man pages have their
+ contents member pointing into the blue. Undo that harm. */
+ if (old_contents && oldsize && old_contents != file_buffer->contents)
+ {
+ int iw;
+ INFO_WINDOW *info_win;
+ char *old_contents_end = old_contents + oldsize;
+
+ for (iw = 0; (info_win = info_windows[iw]); iw++)
+ {
+ int in;
+
+ for (in = 0; in < info_win->nodes_index; in++)
+ {
+ NODE *tmp_node = info_win->nodes[in];
+
+ /* It really only suffices to see that node->filename
+ is "*manpages*". But after several hours of
+ debugging this, would you blame me for being a bit
+ paranoid? */
+ if (tmp_node && tmp_node->filename
+ && tmp_node->contents
+ && strcmp (tmp_node->filename,
+ MANPAGE_FILE_BUFFER_NAME) == 0
+ && tmp_node->contents >= old_contents
+ && tmp_node->contents + tmp_node->nodelen
+ <= old_contents_end)
+ {
+ info_win->nodes[in] =
+ manpage_node_of_file_buffer (file_buffer,
+ tmp_node->nodename);
+ free (tmp_node->nodename);
+ free (tmp_node);
+ }
+ }
+ }
+ }
+ }
+
+ node = manpage_node_of_file_buffer (file_buffer, pagename);
+ }
+
+ return node;
+}
+
+FILE_BUFFER *
+create_manpage_file_buffer (void)
+{
+ FILE_BUFFER *file_buffer = make_file_buffer ();
+ file_buffer->filename = xstrdup (MANPAGE_FILE_BUFFER_NAME);
+ file_buffer->fullpath = xstrdup (MANPAGE_FILE_BUFFER_NAME);
+ file_buffer->finfo.st_size = 0;
+ file_buffer->filesize = 0;
+ file_buffer->contents = NULL;
+ file_buffer->flags = (N_IsInternal | N_CannotGC | N_IsManPage);
+
+ return file_buffer;
+}
+
+/* Scan the list of directories in PATH looking for FILENAME. If we find
+ one that is an executable file, return it as a new string. Otherwise,
+ return a NULL pointer. */
+static char *
+executable_file_in_path (char *filename, char *path)
+{
+ struct stat finfo;
+ char *temp_dirname;
+ int statable, dirname_index;
+
+ dirname_index = 0;
+
+ while ((temp_dirname = extract_colon_unit (path, &dirname_index)))
+ {
+ char *temp;
+ char *temp_end;
+ int i;
+
+ /* Expand a leading tilde if one is present. */
+ if (*temp_dirname == '~')
+ {
+ char *expanded_dirname;
+
+ expanded_dirname = tilde_expand_word (temp_dirname);
+ free (temp_dirname);
+ temp_dirname = expanded_dirname;
+ }
+
+ temp = xmalloc (34 + strlen (temp_dirname) + strlen (filename));
+ strcpy (temp, temp_dirname);
+ if (!IS_SLASH (temp[(strlen (temp)) - 1]))
+ strcat (temp, "/");
+ strcat (temp, filename);
+ temp_end = temp + strlen (temp);
+
+ free (temp_dirname);
+
+ /* Look for FILENAME, possibly with any of the extensions
+ in EXEC_EXTENSIONS[]. */
+ for (i = 0; exec_extensions[i]; i++)
+ {
+ if (exec_extensions[i][0])
+ strcpy (temp_end, exec_extensions[i]);
+ statable = (stat (temp, &finfo) == 0);
+
+ /* If we have found a regular executable file, then use it. */
+ if ((statable) && (S_ISREG (finfo.st_mode)) &&
+ (access (temp, X_OK) == 0))
+ return temp;
+ }
+
+ free (temp);
+ }
+ return NULL;
+}
+
+/* Return the full pathname of the system man page formatter. */
+static char *
+find_man_formatter (void)
+{
+ char *man_command = getenv ("INFO_MAN_COMMAND");
+ return man_command ? man_command :
+ executable_file_in_path ("man", getenv ("PATH"));
+}
+
+static char *manpage_pagename = NULL;
+static char *manpage_section = NULL;
+
+static void
+get_page_and_section (char *pagename)
+{
+ register int i;
+
+ if (manpage_pagename)
+ free (manpage_pagename);
+
+ if (manpage_section)
+ free (manpage_section);
+
+ manpage_pagename = NULL;
+ manpage_section = NULL;
+
+ for (i = 0; pagename[i] != '\0' && pagename[i] != '('; i++);
+
+ manpage_pagename = xmalloc (1 + i);
+ strncpy (manpage_pagename, pagename, i);
+ manpage_pagename[i] = '\0';
+
+ if (pagename[i] == '(')
+ {
+ int start;
+
+ start = i + 1;
+
+ for (i = start; pagename[i] != '\0' && pagename[i] != ')'; i++);
+
+ manpage_section = xmalloc (1 + (i - start));
+ strncpy (manpage_section, pagename + start, (i - start));
+ manpage_section[i - start] = '\0';
+ }
+}
+
+#if PIPE_USE_FORK
+static void
+reap_children (int sig)
+{
+ wait (NULL);
+}
+#endif
+
+static char *
+get_manpage_contents (char *pagename)
+{
+ static char *formatter_args[4] = { NULL };
+ int pipes[2];
+ pid_t child;
+ RETSIGTYPE (*sigsave) (int signum);
+ char *formatted_page = NULL;
+ int arg_index = 1;
+
+ if (formatter_args[0] == NULL)
+ formatter_args[0] = find_man_formatter ();
+
+ if (formatter_args[0] == NULL)
+ return NULL;
+
+ get_page_and_section (pagename);
+
+ if (manpage_section)
+ formatter_args[arg_index++] = manpage_section;
+ else
+ formatter_args[arg_index++] = "-a";
+
+ formatter_args[arg_index++] = manpage_pagename;
+ formatter_args[arg_index] = NULL;
+
+ /* Open a pipe to this program, read the output, and save it away
+ in FORMATTED_PAGE. The reader end of the pipe is pipes[0]; the
+ writer end is pipes[1]. */
+#if PIPE_USE_FORK
+ pipe (pipes);
+
+ sigsave = signal (SIGCHLD, reap_children);
+
+ child = fork ();
+ if (child == -1)
+ return NULL;
+
+ if (child != 0)
+ {
+ /* In the parent, close the writing end of the pipe, and read from
+ the exec'd child. */
+ close (pipes[1]);
+ formatted_page = read_from_fd (pipes[0]);
+ close (pipes[0]);
+ signal (SIGCHLD, sigsave);
+ }
+ else
+ { /* In the child, close the read end of the pipe, make the write end
+ of the pipe be stdout, and execute the man page formatter. */
+ close (pipes[0]);
+ freopen (NULL_DEVICE, "w", stderr);
+ freopen (NULL_DEVICE, "r", stdin);
+ dup2 (pipes[1], fileno (stdout));
+
+ execv (formatter_args[0], formatter_args);
+
+ /* If we get here, we couldn't exec, so close out the pipe and
+ exit. */
+ close (pipes[1]);
+ xexit (0);
+ }
+#else /* !PIPE_USE_FORK */
+ /* Cannot fork/exec, but can popen/pclose. */
+ {
+ FILE *fpipe;
+ char *cmdline = xmalloc (strlen (formatter_args[0])
+ + strlen (manpage_pagename)
+ + (arg_index > 2 ? strlen (manpage_section) : 0)
+ + 3);
+ int save_stderr = dup (fileno (stderr));
+ int fd_err = open (NULL_DEVICE, O_WRONLY, 0666);
+
+ if (fd_err > 2)
+ dup2 (fd_err, fileno (stderr)); /* Don't print errors. */
+ sprintf (cmdline, "%s %s %s", formatter_args[0], manpage_pagename,
+ arg_index > 2 ? manpage_section : "");
+ fpipe = popen (cmdline, "r");
+ free (cmdline);
+ if (fd_err > 2)
+ close (fd_err);
+ dup2 (save_stderr, fileno (stderr));
+ if (fpipe == 0)
+ return NULL;
+ formatted_page = read_from_fd (fileno (fpipe));
+ if (pclose (fpipe) == -1)
+ {
+ if (formatted_page)
+ free (formatted_page);
+ return NULL;
+ }
+ }
+#endif /* !PIPE_USE_FORK */
+
+ /* If we have the page, then clean it up. */
+ if (formatted_page)
+ clean_manpage (formatted_page);
+
+ return formatted_page;
+}
+
+static NODE *
+manpage_node_of_file_buffer (FILE_BUFFER *file_buffer, char *pagename)
+{
+ NODE *node = NULL;
+ TAG *tag = NULL;
+
+ if (file_buffer->contents)
+ {
+ register int i;
+
+ for (i = 0; (tag = file_buffer->tags[i]); i++)
+ {
+ if (mbscasecmp (pagename, tag->nodename) == 0)
+ break;
+ }
+ }
+
+ if (tag)
+ {
+ node = xmalloc (sizeof (NODE));
+ node->filename = file_buffer->filename;
+ node->nodename = xstrdup (tag->nodename);
+ node->contents = file_buffer->contents + tag->nodestart;
+ node->nodelen = tag->nodelen;
+ node->flags = 0;
+ node->display_pos = 0;
+ node->parent = NULL;
+ node->flags = (N_HasTagsTable | N_IsManPage);
+ node->contents += skip_node_separator (node->contents);
+ }
+
+ return node;
+}
+
+static char *
+read_from_fd (int fd)
+{
+ struct timeval timeout;
+ char *buffer = NULL;
+ int bsize = 0;
+ int bindex = 0;
+ int select_result;
+#if defined (FD_SET)
+ fd_set read_fds;
+
+ timeout.tv_sec = 15;
+ timeout.tv_usec = 0;
+
+ FD_ZERO (&read_fds);
+ FD_SET (fd, &read_fds);
+
+ select_result = select (fd + 1, fd_set_cast (&read_fds), 0, 0, &timeout);
+#else /* !FD_SET */
+ select_result = 1;
+#endif /* !FD_SET */
+
+ switch (select_result)
+ {
+ case 0:
+ case -1:
+ break;
+
+ default:
+ {
+ int amount_read;
+ int done = 0;
+
+ while (!done)
+ {
+ while ((bindex + 1024) > (bsize))
+ buffer = xrealloc (buffer, (bsize += 1024));
+ buffer[bindex] = '\0';
+
+ amount_read = read (fd, buffer + bindex, 1023);
+
+ if (amount_read < 0)
+ {
+ done = 1;
+ }
+ else
+ {
+ bindex += amount_read;
+ buffer[bindex] = '\0';
+ if (amount_read == 0)
+ done = 1;
+ }
+ }
+ }
+ }
+
+ if ((buffer != NULL) && (*buffer == '\0'))
+ {
+ free (buffer);
+ buffer = NULL;
+ }
+
+ return buffer;
+}
+
+static char *reference_section_starters[] =
+{
+ "\nRELATED INFORMATION",
+ "\nRELATED\tINFORMATION",
+ "RELATED INFORMATION\n",
+ "RELATED\tINFORMATION\n",
+ "\nSEE ALSO",
+ "\nSEE\tALSO",
+ "SEE ALSO\n",
+ "SEE\tALSO\n",
+ NULL
+};
+
+static SEARCH_BINDING frs_binding;
+
+static SEARCH_BINDING *
+find_reference_section (NODE *node)
+{
+ register int i;
+ long position = -1;
+
+ frs_binding.buffer = node->contents;
+ frs_binding.start = 0;
+ frs_binding.end = node->nodelen;
+ frs_binding.flags = S_SkipDest;
+
+ for (i = 0; reference_section_starters[i] != NULL; i++)
+ {
+ position = search_forward (reference_section_starters[i], &frs_binding);
+ if (position != -1)
+ break;
+ }
+
+ if (position == -1)
+ return NULL;
+
+ /* We found the start of the reference section, and point is right after
+ the string which starts it. The text from here to the next header
+ (or end of buffer) contains the only references in this manpage. */
+ frs_binding.start = position;
+
+ for (i = frs_binding.start; i < frs_binding.end - 2; i++)
+ {
+ if ((frs_binding.buffer[i] == '\n') &&
+ (!whitespace (frs_binding.buffer[i + 1])))
+ {
+ frs_binding.end = i;
+ break;
+ }
+ }
+
+ return &frs_binding;
+}
+
+REFERENCE **
+xrefs_of_manpage (NODE *node)
+{
+ SEARCH_BINDING *reference_section;
+ REFERENCE **refs = NULL;
+ int refs_index = 0;
+ int refs_slots = 0;
+ long position;
+
+ reference_section = find_reference_section (node);
+
+ if (reference_section == NULL)
+ return NULL;
+
+ /* Grovel the reference section building a list of references found there.
+ A reference is alphabetic characters followed by non-whitespace text
+ within parenthesis. */
+ reference_section->flags = 0;
+
+ while ((position = search_forward ("(", reference_section)) != -1)
+ {
+ register int start, end;
+
+ for (start = position; start > reference_section->start; start--)
+ if (whitespace (reference_section->buffer[start]))
+ break;
+
+ start++;
+
+ for (end = position; end < reference_section->end; end++)
+ {
+ if (whitespace (reference_section->buffer[end]))
+ {
+ end = start;
+ break;
+ }
+
+ if (reference_section->buffer[end] == ')')
+ {
+ end++;
+ break;
+ }
+ }
+
+ if (end != start)
+ {
+ REFERENCE *entry;
+ int len = end - start;
+
+ entry = xmalloc (sizeof (REFERENCE));
+ entry->label = xmalloc (1 + len);
+ strncpy (entry->label, (reference_section->buffer) + start, len);
+ entry->label[len] = '\0';
+ entry->filename = xstrdup (node->filename);
+ entry->nodename = xstrdup (entry->label);
+ entry->start = start;
+ entry->end = end;
+
+ add_pointer_to_array
+ (entry, refs_index, refs, refs_slots, 10, REFERENCE *);
+ }
+
+ reference_section->start = position + 1;
+ }
+
+ return refs;
+}
+
+long
+locate_manpage_xref (NODE *node, long int start, int dir)
+{
+ REFERENCE **refs;
+ long position = -1;
+
+ refs = xrefs_of_manpage (node);
+
+ if (refs)
+ {
+ register int i, count;
+ REFERENCE *entry;
+
+ for (i = 0; refs[i]; i++);
+ count = i;
+
+ if (dir > 0)
+ {
+ for (i = 0; (entry = refs[i]); i++)
+ if (entry->start > start)
+ {
+ position = entry->start;
+ break;
+ }
+ }
+ else
+ {
+ for (i = count - 1; i > -1; i--)
+ {
+ entry = refs[i];
+
+ if (entry->start < start)
+ {
+ position = entry->start;
+ break;
+ }
+ }
+ }
+
+ info_free_references (refs);
+ }
+ return position;
+}
+
+/* This one was a little tricky. The binding buffer that is passed in has
+ a START and END value of 0 -- strlen (window-line-containing-point).
+ The BUFFER is a pointer to the start of that line. */
+REFERENCE **
+manpage_xrefs_in_binding (NODE *node, SEARCH_BINDING *binding)
+{
+ register int i;
+ REFERENCE **all_refs = xrefs_of_manpage (node);
+ REFERENCE **brefs = NULL;
+ REFERENCE *entry;
+ int brefs_index = 0;
+ int brefs_slots = 0;
+ int start, end;
+
+ if (!all_refs)
+ return NULL;
+
+ start = binding->start + (binding->buffer - node->contents);
+ end = binding->end + (binding->buffer - node->contents);
+
+ for (i = 0; (entry = all_refs[i]); i++)
+ {
+ if ((entry->start > start) && (entry->end < end))
+ {
+ add_pointer_to_array
+ (entry, brefs_index, brefs, brefs_slots, 10, REFERENCE *);
+ }
+ else
+ {
+ maybe_free (entry->label);
+ maybe_free (entry->filename);
+ maybe_free (entry->nodename);
+ free (entry);
+ }
+ }
+
+ free (all_refs);
+ return brefs;
+}
diff --git a/info/man.h b/info/man.h
new file mode 100644
index 0000000..89377cb
--- /dev/null
+++ b/info/man.h
@@ -0,0 +1,38 @@
+/* man.h: Defines and external function declarations for man.c.
+ $Id: man.h,v 1.6 2007/07/01 21:20:30 karl Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+
+ Copyright (C) 1993, 1997, 2004, 2007 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/>.
+
+ Author: Brian J. Fox (bfox@ai.mit.edu) Sat May 6 16:19:13 1995. */
+
+#ifndef INFO_MAN_H
+#define INFO_MAN_H
+
+#define MANPAGE_FILE_BUFFER_NAME "*manpages*"
+
+extern NODE *make_manpage_node (char *pagename);
+extern NODE *get_manpage_node (FILE_BUFFER *file_buffer,
+ char *pagename);
+extern FILE_BUFFER *create_manpage_file_buffer (void);
+extern long locate_manpage_xref (NODE *node, long int start, int dir);
+extern REFERENCE **xrefs_of_manpage (NODE *node);
+extern REFERENCE **manpage_xrefs_in_binding (NODE *node,
+ SEARCH_BINDING *binding);
+
+#endif /* INFO_MAN_H */
diff --git a/info/nodemenu.c b/info/nodemenu.c
new file mode 100644
index 0000000..9b46014
--- /dev/null
+++ b/info/nodemenu.c
@@ -0,0 +1,346 @@
+/* nodemenu.c -- produce a menu of all visited nodes.
+ $Id: nodemenu.c,v 1.11 2008/06/11 09:55:42 gray Exp $
+
+ Copyright (C) 1993, 1997, 1998, 2002, 2003, 2004, 2007, 2008
+ 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 Brian Fox (bfox@ai.mit.edu). */
+
+#include "info.h"
+
+NODE * get_visited_nodes (Function *filter_func);
+
+/* Return a line describing the format of a node information line. */
+static const char *
+nodemenu_format_info (void)
+{
+ return _("\n\
+* Menu:\n\
+ (File)Node Lines Size Containing File\n\
+ ---------- ----- ---- ---------------");
+}
+
+/* Produce a formatted line of information about NODE. Here is what we want
+ the output listing to look like:
+
+* Menu:
+ (File)Node Lines Size Containing File
+ ---------- ----- ---- ---------------
+* (emacs)Buffers:: 48 2230 /usr/gnu/info/emacs/emacs-1
+* (autoconf)Writing configure.in:: 123 58789 /usr/gnu/info/autoconf/autoconf-1
+* (dir)Top:: 40 589 /usr/gnu/info/dir
+*/
+static char *
+format_node_info (NODE *node)
+{
+ register int i, len;
+ char *parent, *containing_file;
+ static char *line_buffer = NULL;
+
+ if (!line_buffer)
+ line_buffer = xmalloc (1000);
+
+ if (node->parent)
+ {
+ parent = filename_non_directory (node->parent);
+ if (!parent)
+ parent = node->parent;
+ }
+ else
+ parent = NULL;
+
+ containing_file = node->filename;
+
+ if (!parent && !*containing_file)
+ sprintf (line_buffer, "* %s::", node->nodename);
+ else
+ {
+ char *file = NULL;
+
+ if (parent)
+ file = parent;
+ else
+ file = filename_non_directory (containing_file);
+
+ if (!file)
+ file = containing_file;
+
+ if (!*file)
+ file = "dir";
+
+ sprintf (line_buffer, "* (%s)%s::", file, node->nodename);
+ }
+
+ len = pad_to (36, line_buffer);
+
+ {
+ int lines = 1;
+
+ for (i = 0; i < node->nodelen; i++)
+ if (node->contents[i] == '\n')
+ lines++;
+
+ sprintf (line_buffer + len, "%d", lines);
+ }
+
+ len = pad_to (44, line_buffer);
+ sprintf (line_buffer + len, "%ld", node->nodelen);
+
+ if (node->filename && *(node->filename))
+ {
+ len = pad_to (51, line_buffer);
+ strcpy (line_buffer + len, node->filename);
+ }
+
+ return xstrdup (line_buffer);
+}
+
+/* Little string comparison routine for qsort (). */
+static int
+compare_strings (const void *entry1, const void *entry2)
+{
+ char **e1 = (char **) entry1;
+ char **e2 = (char **) entry2;
+
+ return mbscasecmp (*e1, *e2);
+}
+
+/* The name of the nodemenu node. */
+static char *nodemenu_nodename = "*Node Menu*";
+
+/* Produce an informative listing of all the visited nodes, and return it
+ in a node. If FILTER_FUNC is non-null, it is a function which filters
+ which nodes will appear in the listing. FILTER_FUNC takes an argument
+ of NODE, and returns non-zero if the node should appear in the listing. */
+NODE *
+get_visited_nodes (Function *filter_func)
+{
+ register int i, iw_index;
+ INFO_WINDOW *info_win;
+ NODE *node;
+ char **lines = NULL;
+ int lines_index = 0, lines_slots = 0;
+
+ if (!info_windows)
+ return NULL;
+
+ for (iw_index = 0; (info_win = info_windows[iw_index]); iw_index++)
+ {
+ for (i = 0; i < info_win->nodes_index; i++)
+ {
+ node = info_win->nodes[i];
+
+ /* We skip mentioning "*Node Menu*" nodes. */
+ if (internal_info_node_p (node) &&
+ (strcmp (node->nodename, nodemenu_nodename) == 0))
+ continue;
+
+ if (node && (!filter_func || (*filter_func) (node)))
+ {
+ char *line;
+
+ line = format_node_info (node);
+ add_pointer_to_array
+ (line, lines_index, lines, lines_slots, 20, char *);
+ }
+ }
+ }
+
+ /* Sort the array of information lines, if there are any. */
+ if (lines)
+ {
+ register int j, newlen;
+ char **temp;
+
+ qsort (lines, lines_index, sizeof (char *), compare_strings);
+
+ /* Delete duplicates. */
+ for (i = 0, newlen = 1; i < lines_index - 1; i++)
+ {
+ /* Use FILENAME_CMP here, since the most important piece
+ of info in each line is the file name of the node. */
+ if (FILENAME_CMP (lines[i], lines[i + 1]) == 0)
+ {
+ free (lines[i]);
+ lines[i] = NULL;
+ }
+ else
+ newlen++;
+ }
+
+ /* We have free ()'d and marked all of the duplicate slots.
+ Copy the live slots rather than pruning the dead slots. */
+ temp = xmalloc ((1 + newlen) * sizeof (char *));
+ for (i = 0, j = 0; i < lines_index; i++)
+ if (lines[i])
+ temp[j++] = lines[i];
+
+ temp[j] = NULL;
+ free (lines);
+ lines = temp;
+ lines_index = newlen;
+ }
+
+ initialize_message_buffer ();
+
+ printf_to_message_buffer
+ ("%s", replace_in_documentation
+ (_("Here is the menu of nodes you have recently visited.\n\
+Select one from this menu, or use `\\[history-node]' in another window.\n"), 0),
+ NULL, NULL);
+
+ printf_to_message_buffer ("%s\n", (char *) nodemenu_format_info (),
+ NULL, NULL);
+
+ for (i = 0; (lines != NULL) && (i < lines_index); i++)
+ {
+ printf_to_message_buffer ("%s\n", lines[i], NULL, NULL);
+ free (lines[i]);
+ }
+
+ if (lines)
+ free (lines);
+
+ node = message_buffer_to_node ();
+ add_gcable_pointer (node->contents);
+ return node;
+}
+
+DECLARE_INFO_COMMAND (list_visited_nodes,
+ _("Make a window containing a menu of all of the currently visited nodes"))
+{
+ WINDOW *new;
+ NODE *node;
+
+ set_remembered_pagetop_and_point (window);
+
+ /* If a window is visible and showing the buffer list already, re-use it. */
+ for (new = windows; new; new = new->next)
+ {
+ node = new->node;
+
+ if (internal_info_node_p (node) &&
+ (strcmp (node->nodename, nodemenu_nodename) == 0))
+ break;
+ }
+
+ /* If we couldn't find an existing window, try to use the next window
+ in the chain. */
+ if (!new)
+ {
+ if (window->next)
+ new = window->next;
+ /* If there is more than one window, wrap around. */
+ else if (window != windows)
+ new = windows;
+ }
+
+ /* If we still don't have a window, make a new one to contain the list. */
+ if (!new)
+ {
+ WINDOW *old_active;
+
+ old_active = active_window;
+ active_window = window;
+ new = window_make_window (NULL);
+ active_window = old_active;
+ }
+
+ /* If we couldn't make a new window, use this one. */
+ if (!new)
+ new = window;
+
+ /* Lines do not wrap in this window. */
+ new->flags |= W_NoWrap;
+ node = get_visited_nodes (NULL);
+ name_internal_node (node, nodemenu_nodename);
+
+#if 0
+ /* Even if this is an internal node, we don't want the window
+ system to treat it specially. So we turn off the internalness
+ of it here. */
+ /* Why? We depend on internal_info_node_p returning true, so we must
+ not remove the flag. Otherwise, the *Node Menu* nodes themselves
+ appear in the node menu. --Andreas Schwab
+ <schwab@issan.informatik.uni-dortmund.de>. */
+ node->flags &= ~N_IsInternal;
+#endif
+
+ /* If this window is already showing a node menu, reuse the existing node
+ slot. */
+ {
+ int remember_me = 1;
+
+#if defined (NOTDEF)
+ if (internal_info_node_p (new->node) &&
+ (strcmp (new->node->nodename, nodemenu_nodename) == 0))
+ remember_me = 0;
+#endif /* NOTDEF */
+
+ window_set_node_of_window (new, node);
+
+ if (remember_me)
+ remember_window_and_node (new, node);
+ }
+
+ active_window = new;
+}
+
+DECLARE_INFO_COMMAND (select_visited_node,
+ _("Select a node which has been previously visited in a visible window"))
+{
+ char *line;
+ NODE *node;
+ REFERENCE **menu;
+
+ node = get_visited_nodes (NULL);
+
+ menu = info_menu_of_node (node);
+ free (node);
+
+ line =
+ info_read_completing_in_echo_area (window,
+ _("Select visited node: "), menu);
+
+ window = active_window;
+
+ /* User aborts, just quit. */
+ if (!line)
+ {
+ info_abort_key (window, 0, 0);
+ info_free_references (menu);
+ return;
+ }
+
+ if (*line)
+ {
+ REFERENCE *entry;
+
+ /* Find the selected label in the references. */
+ entry = info_get_labeled_reference (line, menu);
+
+ if (!entry)
+ info_error (_("The reference disappeared! (%s)."), line, NULL);
+ else
+ info_select_reference (window, entry);
+ }
+
+ free (line);
+ info_free_references (menu);
+
+ if (!info_error_was_printed)
+ window_clear_echo_area ();
+}
diff --git a/info/nodes.c b/info/nodes.c
new file mode 100644
index 0000000..41a748c
--- /dev/null
+++ b/info/nodes.c
@@ -0,0 +1,1269 @@
+/* nodes.c -- how to get an Info file and node.
+ $Id: nodes.c,v 1.11 2008/06/11 09:55:42 gray Exp $
+
+ Copyright (C) 1993, 1998, 1999, 2000, 2002, 2003, 2004, 2006, 2007,
+ 2008 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/>.
+
+ Originally written by Brian Fox (bfox@ai.mit.edu). */
+
+#include "info.h"
+
+#include "nodes.h"
+#include "search.h"
+#include "filesys.h"
+#include "info-utils.h"
+
+#if defined (HANDLE_MAN_PAGES)
+# include "man.h"
+#endif /* HANDLE_MAN_PAGES */
+
+static void forget_info_file (char *filename);
+static void remember_info_file (FILE_BUFFER *file_buffer);
+static void free_file_buffer_tags (FILE_BUFFER *file_buffer);
+static void free_info_tag (TAG *tag);
+static void get_nodes_of_tags_table (FILE_BUFFER *file_buffer,
+ SEARCH_BINDING *buffer_binding);
+static void get_nodes_of_info_file (FILE_BUFFER *file_buffer);
+static void get_tags_of_indirect_tags_table (FILE_BUFFER *file_buffer,
+ SEARCH_BINDING *indirect_binding, SEARCH_BINDING *tags_binding);
+static void info_reload_file_buffer_contents (FILE_BUFFER *fb);
+static char *adjust_nodestart (NODE *node, int min, int max);
+static FILE_BUFFER *info_load_file_internal (char *filename, int get_tags);
+static FILE_BUFFER *info_find_file_internal (char *filename, int get_tags);
+static NODE *info_node_of_file_buffer_tags (FILE_BUFFER *file_buffer,
+ char *nodename);
+
+static long get_node_length (SEARCH_BINDING *binding);
+
+/* Magic number that RMS used to decide how much a tags table pointer could
+ be off by. I feel that it should be much smaller, like 4. */
+#define DEFAULT_INFO_FUDGE 1000
+
+/* Passed to *_internal functions. INFO_GET_TAGS says to do what is
+ neccessary to fill in the nodes or tags arrays in FILE_BUFFER. */
+#define INFO_NO_TAGS 0
+#define INFO_GET_TAGS 1
+
+/* Global variables. */
+
+/* When non-zero, this is a string describing the recent file error. */
+char *info_recent_file_error = NULL;
+
+/* The list of already loaded nodes. */
+FILE_BUFFER **info_loaded_files = NULL;
+
+/* The number of slots currently allocated to LOADED_FILES. */
+int info_loaded_files_slots = 0;
+
+/* Public functions for node manipulation. */
+
+/* Used to build `dir' menu from `localdir' files found in INFOPATH. */
+extern void maybe_build_dir_node (char *dirname);
+
+/* Return a pointer to a NODE structure for the Info node (FILENAME)NODENAME.
+ If FILENAME is NULL, `dir' is used.
+ IF NODENAME is NULL, `Top' is used.
+ If the node cannot be found, return NULL. */
+NODE *
+info_get_node (char *filename, char *nodename)
+{
+ NODE *node;
+ FILE_BUFFER *file_buffer = NULL;
+
+ info_recent_file_error = NULL;
+ info_parse_node (nodename, DONT_SKIP_NEWLINES);
+ nodename = NULL;
+
+ if (info_parsed_filename)
+ filename = info_parsed_filename;
+
+ if (info_parsed_nodename)
+ nodename = info_parsed_nodename;
+
+ /* If FILENAME is not specified, it defaults to "dir". */
+ if (!filename)
+ filename = "dir";
+
+ /* If the file to be looked up is "dir", build the contents from all of
+ the "dir"s and "localdir"s found in INFOPATH. */
+ if (is_dir_name (filename))
+ maybe_build_dir_node (filename);
+
+ /* Find the correct info file, or give up. */
+ file_buffer = info_find_file (filename);
+ if (!file_buffer)
+ {
+ if (filesys_error_number)
+ info_recent_file_error =
+ filesys_error_string (filename, filesys_error_number);
+ return NULL;
+ }
+
+ /* Look for the node. */
+ node = info_get_node_of_file_buffer (nodename, file_buffer);
+
+ /* If the node not found was "Top", try again with different case,
+ unless this was a man page. */
+ if (!node
+ && mbscasecmp (filename, MANPAGE_FILE_BUFFER_NAME) != 0
+ && (nodename == NULL || mbscasecmp (nodename, "Top") == 0))
+ {
+ node = info_get_node_of_file_buffer ("Top", file_buffer);
+ if (!node)
+ node = info_get_node_of_file_buffer ("top", file_buffer);
+ if (!node)
+ node = info_get_node_of_file_buffer ("TOP", file_buffer);
+ }
+
+ return node;
+}
+
+/* Return a pointer to a NODE structure for the Info node NODENAME in
+ FILE_BUFFER. NODENAME can be passed as NULL, in which case the
+ nodename of "Top" is used. If the node cannot be found, return a
+ NULL pointer. */
+NODE *
+info_get_node_of_file_buffer (char *nodename, FILE_BUFFER *file_buffer)
+{
+ NODE *node = NULL;
+ int implicit_nodename = 0;
+
+ /* If we are unable to find the file, we have to give up. There isn't
+ anything else we can do. */
+ if (!file_buffer)
+ return NULL;
+
+ /* If the file buffer was gc'ed, reload the contents now. */
+ if (!file_buffer->contents)
+ info_reload_file_buffer_contents (file_buffer);
+
+ /* If NODENAME is not specified, it defaults to "Top". */
+ if (!nodename)
+ {
+ nodename = "Top";
+ implicit_nodename = 1; /* don't return man page for top */
+ }
+
+ /* If the name of the node that we wish to find is exactly "*", then the
+ node body is the contents of the entire file. Create and return such
+ a node. */
+ if (strcmp (nodename, "*") == 0)
+ {
+ node = xmalloc (sizeof (NODE));
+ node->filename = file_buffer->fullpath;
+ node->parent = NULL;
+ node->nodename = xstrdup ("*");
+ node->contents = file_buffer->contents;
+ node->nodelen = file_buffer->filesize;
+ node->flags = 0;
+ node->display_pos = 0;
+ }
+#if defined (HANDLE_MAN_PAGES)
+ /* If the file buffer is the magic one associated with manpages, call
+ the manpage node finding function instead. */
+ else if (!implicit_nodename && file_buffer->flags & N_IsManPage)
+ {
+ node = get_manpage_node (file_buffer, nodename);
+ }
+#endif /* HANDLE_MAN_PAGES */
+ /* If this is the "main" info file, it might contain a tags table. Search
+ the tags table for an entry which matches the node that we want. If
+ there is a tags table, get the file which contains this node, but don't
+ bother building a node list for it. */
+ else if (file_buffer->tags)
+ {
+ node = info_node_of_file_buffer_tags (file_buffer, nodename);
+ }
+
+ /* Return the results of our node search. */
+ return node;
+}
+
+/* Locate the file named by FILENAME, and return the information structure
+ describing this file. The file may appear in our list of loaded files
+ already, or it may not. If it does not already appear, find the file,
+ and add it to the list of loaded files. If the file cannot be found,
+ return a NULL FILE_BUFFER *. */
+FILE_BUFFER *
+info_find_file (char *filename)
+{
+ return info_find_file_internal (filename, INFO_GET_TAGS);
+}
+
+/* Load the info file FILENAME, remembering information about it in a
+ file buffer. */
+FILE_BUFFER *
+info_load_file (char *filename)
+{
+ return info_load_file_internal (filename, INFO_GET_TAGS);
+}
+
+
+/* Private functions implementation. */
+
+/* The workhorse for info_find_file (). Non-zero 2nd argument says to
+ try to build a tags table (or otherwise glean the nodes) for this
+ file once found. By default, we build the tags table, but when this
+ function is called by info_get_node () when we already have a valid
+ tags table describing the nodes, it is unnecessary. */
+static FILE_BUFFER *
+info_find_file_internal (char *filename, int get_tags)
+{
+ int i;
+ FILE_BUFFER *file_buffer;
+
+ /* First try to find the file in our list of already loaded files. */
+ if (info_loaded_files)
+ {
+ for (i = 0; (file_buffer = info_loaded_files[i]); i++)
+ if ((FILENAME_CMP (filename, file_buffer->filename) == 0)
+ || (FILENAME_CMP (filename, file_buffer->fullpath) == 0)
+ || (!IS_ABSOLUTE (filename)
+ && FILENAME_CMP (filename,
+ filename_non_directory (file_buffer->fullpath))
+ == 0))
+ {
+ struct stat new_info, *old_info;
+
+ /* This file is loaded. If the filename that we want is
+ specifically "dir", then simply return the file buffer. */
+ if (is_dir_name (filename_non_directory (filename)))
+ return file_buffer;
+
+#if defined (HANDLE_MAN_PAGES)
+ /* Do the same for the magic MANPAGE file. */
+ if (file_buffer->flags & N_IsManPage)
+ return file_buffer;
+#endif /* HANDLE_MAN_PAGES */
+
+ /* The file appears to be already loaded, and is not "dir". Check
+ to see if it's changed since the last time it was loaded. */
+ if (stat (file_buffer->fullpath, &new_info) == -1)
+ {
+ filesys_error_number = errno;
+ return NULL;
+ }
+
+ old_info = &file_buffer->finfo;
+
+ if (new_info.st_size != old_info->st_size
+ || new_info.st_mtime != old_info->st_mtime)
+ {
+ /* The file has changed. Forget that we ever had loaded it
+ in the first place. */
+ forget_info_file (filename);
+ break;
+ }
+ else
+ {
+ /* The info file exists, and has not changed since the last
+ time it was loaded. If the caller requested a nodes list
+ for this file, and there isn't one here, build the nodes
+ for this file_buffer. In any case, return the file_buffer
+ object. */
+ if (!file_buffer->contents)
+ {
+ /* The file's contents have been gc'ed. Reload it. */
+ info_reload_file_buffer_contents (file_buffer);
+ if (!file_buffer->contents)
+ return NULL;
+ }
+
+ if (get_tags && !file_buffer->tags)
+ build_tags_and_nodes (file_buffer);
+
+ return file_buffer;
+ }
+ }
+ }
+
+ /* The file wasn't loaded. Try to load it now. */
+#if defined (HANDLE_MAN_PAGES)
+ /* If the name of the file that we want is our special file buffer for
+ Unix manual pages, then create the file buffer, and return it now. */
+ if (mbscasecmp (filename, MANPAGE_FILE_BUFFER_NAME) == 0)
+ file_buffer = create_manpage_file_buffer ();
+ else
+#endif /* HANDLE_MAN_PAGES */
+ file_buffer = info_load_file_internal (filename, get_tags);
+
+ /* If the file was loaded, remember the name under which it was found. */
+ if (file_buffer)
+ remember_info_file (file_buffer);
+
+ return file_buffer;
+}
+
+/* The workhorse function for info_load_file (). Non-zero second argument
+ says to build a list of tags (or nodes) for this file. This is the
+ default behaviour when info_load_file () is called, but it is not
+ necessary when loading a subfile for which we already have tags. */
+static FILE_BUFFER *
+info_load_file_internal (char *filename, int get_tags)
+{
+ char *fullpath, *contents;
+ long filesize;
+ struct stat finfo;
+ int retcode, compressed;
+ FILE_BUFFER *file_buffer = NULL;
+
+ /* Get the full pathname of this file, as known by the info system.
+ That is to say, search along INFOPATH and expand tildes, etc. */
+ fullpath = info_find_fullpath (filename);
+
+ /* Did we actually find the file? */
+ retcode = stat (fullpath, &finfo);
+
+ /* If the file referenced by the name returned from info_find_fullpath ()
+ doesn't exist, then try again with the last part of the filename
+ appearing in lowercase. */
+ /* This is probably not needed at all on those systems which define
+ FILENAME_CMP to be mbscasecmp. But let's do it anyway, lest some
+ network redirector supports case sensitivity. */
+ if (retcode < 0)
+ {
+ char *lowered_name;
+ char *tmp_basename;
+
+ lowered_name = xstrdup (filename);
+ tmp_basename = filename_non_directory (lowered_name);
+
+ while (*tmp_basename)
+ {
+ if (isupper (*tmp_basename))
+ *tmp_basename = tolower (*tmp_basename);
+
+ tmp_basename++;
+ }
+
+ fullpath = info_find_fullpath (lowered_name);
+
+ retcode = stat (fullpath, &finfo);
+ free (lowered_name);
+ }
+
+ /* If the file wasn't found, give up, returning a NULL pointer. */
+ if (retcode < 0)
+ {
+ filesys_error_number = errno;
+ return NULL;
+ }
+
+ /* Otherwise, try to load the file. */
+ contents = filesys_read_info_file (fullpath, &filesize, &finfo, &compressed);
+
+ if (!contents)
+ return NULL;
+
+ /* The file was found, and can be read. Allocate FILE_BUFFER and fill
+ in the various members. */
+ file_buffer = make_file_buffer ();
+ file_buffer->filename = xstrdup (filename);
+ file_buffer->fullpath = xstrdup (fullpath);
+ file_buffer->finfo = finfo;
+ file_buffer->filesize = filesize;
+ file_buffer->contents = contents;
+ if (compressed)
+ file_buffer->flags |= N_IsCompressed;
+
+ /* If requested, build the tags and nodes for this file buffer. */
+ if (get_tags)
+ build_tags_and_nodes (file_buffer);
+
+ return file_buffer;
+}
+
+/* Grovel FILE_BUFFER->contents finding tags and nodes, and filling in the
+ various slots. This can also be used to rebuild a tag or node table. */
+void
+build_tags_and_nodes (FILE_BUFFER *file_buffer)
+{
+ SEARCH_BINDING binding;
+ long position;
+
+ free_file_buffer_tags (file_buffer);
+ file_buffer->flags &= ~N_HasTagsTable;
+
+ /* See if there is a tags table in this info file. */
+ binding.buffer = file_buffer->contents;
+ binding.start = file_buffer->filesize;
+ binding.end = binding.start - 1000;
+ if (binding.end < 0)
+ binding.end = 0;
+ binding.flags = S_FoldCase;
+
+ position = search_backward (TAGS_TABLE_END_LABEL, &binding);
+
+ /* If there is a tag table, find the start of it, and grovel over it
+ extracting tag information. */
+ if (position != -1)
+ while (1)
+ {
+ long tags_table_begin, tags_table_end;
+
+ binding.end = position;
+ binding.start = binding.end - 5 - strlen (TAGS_TABLE_END_LABEL);
+ if (binding.start < 0)
+ binding.start = 0;
+
+ position = find_node_separator (&binding);
+
+ /* For this test, (and all others here) failure indicates a bogus
+ tags table. Grovel the file. */
+ if (position == -1)
+ break;
+
+ /* Remember the end of the tags table. */
+ binding.start = position;
+ tags_table_end = binding.start;
+ binding.end = 0;
+
+ /* Locate the start of the tags table. */
+ position = search_backward (TAGS_TABLE_BEG_LABEL, &binding);
+
+ if (position == -1)
+ break;
+
+ binding.end = position;
+ binding.start = binding.end - 5 - strlen (TAGS_TABLE_BEG_LABEL);
+ position = find_node_separator (&binding);
+
+ if (position == -1)
+ break;
+
+ /* The file contains a valid tags table. Fill the FILE_BUFFER's
+ tags member. */
+ file_buffer->flags |= N_HasTagsTable;
+ tags_table_begin = position;
+
+ /* If this isn't an indirect tags table, just remember the nodes
+ described locally in this tags table. Note that binding.end
+ is pointing to just after the beginning label. */
+ binding.start = binding.end;
+ binding.end = file_buffer->filesize;
+
+ if (!looking_at (TAGS_TABLE_IS_INDIRECT_LABEL, &binding))
+ {
+ binding.start = tags_table_begin;
+ binding.end = tags_table_end;
+ get_nodes_of_tags_table (file_buffer, &binding);
+ return;
+ }
+ else
+ {
+ /* This is an indirect tags table. Build TAGS member. */
+ SEARCH_BINDING indirect;
+
+ indirect.start = tags_table_begin;
+ indirect.end = 0;
+ indirect.buffer = binding.buffer;
+ indirect.flags = S_FoldCase;
+
+ position = search_backward (INDIRECT_TAGS_TABLE_LABEL, &indirect);
+
+ if (position == -1)
+ {
+ /* This file is malformed. Give up. */
+ return;
+ }
+
+ indirect.start = position;
+ indirect.end = tags_table_begin;
+ binding.start = tags_table_begin;
+ binding.end = tags_table_end;
+ get_tags_of_indirect_tags_table (file_buffer, &indirect, &binding);
+ return;
+ }
+ }
+
+ /* This file doesn't contain any kind of tags table. Grovel the
+ file and build node entries for it. */
+ get_nodes_of_info_file (file_buffer);
+}
+
+/* Search through FILE_BUFFER->contents building an array of TAG *,
+ one entry per each node present in the file. Store the tags in
+ FILE_BUFFER->tags, and the number of allocated slots in
+ FILE_BUFFER->tags_slots. */
+static void
+get_nodes_of_info_file (FILE_BUFFER *file_buffer)
+{
+ long nodestart;
+ int tags_index = 0;
+ SEARCH_BINDING binding;
+
+ binding.buffer = file_buffer->contents;
+ binding.start = 0;
+ binding.end = file_buffer->filesize;
+ binding.flags = S_FoldCase;
+
+ while ((nodestart = find_node_separator (&binding)) != -1)
+ {
+ int start, end;
+ char *nodeline;
+ TAG *entry;
+ int anchor = 0;
+
+ /* Skip past the characters just found. */
+ binding.start = nodestart;
+ binding.start += skip_node_separator (binding.buffer + binding.start);
+
+ /* Move to the start of the line defining the node. */
+ nodeline = binding.buffer + binding.start;
+
+ /* Find "Node:" */
+ start = string_in_line (INFO_NODE_LABEL, nodeline);
+ /* No Node:. Maybe it's a Ref:. */
+ if (start == -1)
+ {
+ start = string_in_line (INFO_REF_LABEL, nodeline);
+ if (start != -1)
+ anchor = 1;
+ }
+
+ /* If not there, this is not the start of a node. */
+ if (start == -1)
+ continue;
+
+ /* Find the start of the nodename. */
+ start += skip_whitespace (nodeline + start);
+
+ /* Find the end of the nodename. */
+ end = start +
+ skip_node_characters (nodeline + start, DONT_SKIP_NEWLINES);
+
+ /* Okay, we have isolated the node name, and we know where the
+ node starts. Remember this information. */
+ entry = xmalloc (sizeof (TAG));
+ entry->nodename = xmalloc (1 + (end - start));
+ strncpy (entry->nodename, nodeline + start, end - start);
+ entry->nodename[end - start] = 0;
+ entry->nodestart = nodestart;
+ if (anchor)
+ entry->nodelen = 0;
+ else
+ {
+ SEARCH_BINDING node_body;
+
+ node_body.buffer = binding.buffer + binding.start;
+ node_body.start = 0;
+ node_body.end = binding.end - binding.start;
+ node_body.flags = S_FoldCase;
+ entry->nodelen = get_node_length (&node_body);
+ }
+
+ entry->filename = file_buffer->fullpath;
+
+ /* Add this tag to the array of tag structures in this FILE_BUFFER. */
+ add_pointer_to_array (entry, tags_index, file_buffer->tags,
+ file_buffer->tags_slots, 100, TAG *);
+ }
+}
+
+/* Return the length of the node which starts at BINDING. */
+static long
+get_node_length (SEARCH_BINDING *binding)
+{
+ int i;
+ char *body;
+
+ /* [A node] ends with either a ^_, a ^L, or end of file. */
+ for (i = binding->start, body = binding->buffer; i < binding->end; i++)
+ {
+ if (body[i] == INFO_FF || body[i] == INFO_COOKIE)
+ break;
+ }
+ return i - binding->start;
+}
+
+/* Build and save the array of nodes in FILE_BUFFER by searching through the
+ contents of BUFFER_BINDING for a tags table, and groveling the contents. */
+static void
+get_nodes_of_tags_table (FILE_BUFFER *file_buffer,
+ SEARCH_BINDING *buffer_binding)
+{
+ int name_offset;
+ SEARCH_BINDING *tmp_search;
+ long position;
+ int tags_index = 0;
+
+ tmp_search = copy_binding (buffer_binding);
+
+ /* Find the start of the tags table. */
+ position = find_tags_table (tmp_search);
+
+ /* If none, we're all done. */
+ if (position == -1)
+ return;
+
+ /* Move to one character before the start of the actual table. */
+ tmp_search->start = position;
+ tmp_search->start += skip_node_separator
+ (tmp_search->buffer + tmp_search->start);
+ tmp_search->start += strlen (TAGS_TABLE_BEG_LABEL);
+ tmp_search->start--;
+
+ /* The tag table consists of lines containing node names and positions.
+ Do each line until we find one that doesn't contain a node name. */
+ while ((position = search_forward ("\n", tmp_search)) != -1)
+ {
+ TAG *entry;
+ char *nodedef;
+ unsigned p;
+ int anchor = 0;
+
+ /* Prepare to skip this line. */
+ tmp_search->start = position;
+ tmp_search->start++;
+
+ /* Skip past informative "(Indirect)" tags table line. */
+ if (!tags_index && looking_at (TAGS_TABLE_IS_INDIRECT_LABEL, tmp_search))
+ continue;
+
+ /* Find the label preceding the node name. */
+ name_offset =
+ string_in_line (INFO_NODE_LABEL, tmp_search->buffer + tmp_search->start);
+
+ /* If no node label, maybe it's an anchor. */
+ if (name_offset == -1)
+ {
+ name_offset = string_in_line (INFO_REF_LABEL,
+ tmp_search->buffer + tmp_search->start);
+ if (name_offset != -1)
+ anchor = 1;
+ }
+
+ /* If not there, not a defining line, so we must be out of the
+ tags table. */
+ if (name_offset == -1)
+ break;
+
+ entry = xmalloc (sizeof (TAG));
+
+ /* Find the beginning of the node definition. */
+ tmp_search->start += name_offset;
+ nodedef = tmp_search->buffer + tmp_search->start;
+ nodedef += skip_whitespace (nodedef);
+
+ /* Move past the node's name in this tag to the TAGSEP character. */
+ for (p = 0; nodedef[p] && nodedef[p] != INFO_TAGSEP; p++)
+ ;
+ if (nodedef[p] != INFO_TAGSEP)
+ continue;
+
+ entry->nodename = xmalloc (p + 1);
+ strncpy (entry->nodename, nodedef, p);
+ entry->nodename[p] = 0;
+ p++;
+ entry->nodestart = atol (nodedef + p);
+
+ /* If a node, we don't know the length yet, but if it's an
+ anchor, the length is 0. */
+ entry->nodelen = anchor ? 0 : -1;
+
+ /* The filename of this node is currently known as the same as the
+ name of this file. */
+ entry->filename = file_buffer->fullpath;
+
+ /* Add this node structure to the array of node structures in this
+ FILE_BUFFER. */
+ add_pointer_to_array (entry, tags_index, file_buffer->tags,
+ file_buffer->tags_slots, 100, TAG *);
+ }
+ free (tmp_search);
+}
+
+/* A structure used only in `get_tags_of_indirect_tags_table' to hold onto
+ an intermediate value. */
+typedef struct {
+ char *filename;
+ long first_byte;
+} SUBFILE;
+
+/* Remember in FILE_BUFFER the nodenames, subfilenames, and offsets within the
+ subfiles of every node which appears in TAGS_BINDING. The 2nd argument is
+ a binding surrounding the indirect files list. */
+static void
+get_tags_of_indirect_tags_table (FILE_BUFFER *file_buffer,
+ SEARCH_BINDING *indirect_binding, SEARCH_BINDING *tags_binding)
+{
+ int i;
+ SUBFILE **subfiles = NULL;
+ int subfiles_index = 0, subfiles_slots = 0;
+ TAG *entry;
+
+ /* First get the list of tags from the tags table. Then lookup the
+ associated file in the indirect list for each tag, and update it. */
+ get_nodes_of_tags_table (file_buffer, tags_binding);
+
+ /* We have the list of tags in file_buffer->tags. Get the list of
+ subfiles from the indirect table. */
+ {
+ char *start, *end, *line;
+ SUBFILE *subfile;
+
+ start = indirect_binding->buffer + indirect_binding->start;
+ end = indirect_binding->buffer + indirect_binding->end;
+ line = start;
+
+ while (line < end)
+ {
+ int colon;
+
+ colon = string_in_line (":", line);
+
+ if (colon == -1)
+ break;
+
+ subfile = xmalloc (sizeof (SUBFILE));
+ subfile->filename = xmalloc (colon);
+ strncpy (subfile->filename, line, colon - 1);
+ subfile->filename[colon - 1] = 0;
+ subfile->first_byte = (long) atol (line + colon);
+
+ add_pointer_to_array
+ (subfile, subfiles_index, subfiles, subfiles_slots, 10, SUBFILE *);
+
+ while (*line++ != '\n');
+ }
+ }
+
+ /* If we have successfully built the indirect files table, then
+ merge the information in the two tables. */
+ if (!subfiles)
+ {
+ free_file_buffer_tags (file_buffer);
+ return;
+ }
+ else
+ {
+ int tags_index;
+ long header_length;
+ SEARCH_BINDING binding;
+
+ /* Find the length of the header of the file containing the indirect
+ tags table. This header appears at the start of every file. We
+ want the absolute position of each node within each subfile, so
+ we subtract the start of the containing subfile from the logical
+ position of the node, and then add the length of the header in. */
+ binding.buffer = file_buffer->contents;
+ binding.start = 0;
+ binding.end = file_buffer->filesize;
+ binding.flags = S_FoldCase;
+
+ header_length = find_node_separator (&binding);
+ if (header_length == -1)
+ header_length = 0;
+
+ /* Build the file buffer's list of subfiles. */
+ {
+ char *containing_dir = xstrdup (file_buffer->fullpath);
+ char *temp = filename_non_directory (containing_dir);
+ int len_containing_dir;
+
+ if (temp > containing_dir)
+ {
+ if (HAVE_DRIVE (file_buffer->fullpath) &&
+ temp == containing_dir + 2)
+ {
+ /* Avoid converting "d:foo" into "d:/foo" below. */
+ *temp = '.';
+ temp += 2;
+ }
+ temp[-1] = 0;
+ }
+
+ len_containing_dir = strlen (containing_dir);
+
+ for (i = 0; subfiles[i]; i++);
+
+ file_buffer->subfiles = xmalloc ((1 + i) * sizeof (char *));
+
+ for (i = 0; subfiles[i]; i++)
+ {
+ char *fullpath;
+
+ fullpath = xmalloc
+ (2 + strlen (subfiles[i]->filename) + len_containing_dir);
+
+ sprintf (fullpath, "%s/%s",
+ containing_dir, subfiles[i]->filename);
+
+ file_buffer->subfiles[i] = fullpath;
+ }
+ file_buffer->subfiles[i] = NULL;
+ free (containing_dir);
+ }
+
+ /* For each node in the file's tags table, remember the starting
+ position. */
+ for (tags_index = 0; (entry = file_buffer->tags[tags_index]);
+ tags_index++)
+ {
+ for (i = 0;
+ subfiles[i] && entry->nodestart >= subfiles[i]->first_byte;
+ i++);
+
+ /* If the Info file containing the indirect tags table is
+ malformed, then give up. */
+ if (!i)
+ {
+ /* The Info file containing the indirect tags table is
+ malformed. Give up. */
+ for (i = 0; subfiles[i]; i++)
+ {
+ free (subfiles[i]->filename);
+ free (subfiles[i]);
+ free (file_buffer->subfiles[i]);
+ }
+ file_buffer->subfiles = NULL;
+ free_file_buffer_tags (file_buffer);
+ return;
+ }
+
+ /* SUBFILES[i] is the index of the first subfile whose logical
+ first byte is greater than the logical offset of this node's
+ starting position. This means that the subfile directly
+ preceding this one is the one containing the node. */
+
+ entry->filename = file_buffer->subfiles[i - 1];
+ entry->nodestart -= subfiles[i - 1]->first_byte;
+ entry->nodestart += header_length;
+ }
+
+ /* We have successfully built the tags table. Remember that it
+ was indirect. */
+ file_buffer->flags |= N_TagsIndirect;
+ }
+
+ /* Free the structures assigned to SUBFILES. Free the names as well
+ as the structures themselves, then finally, the array. */
+ for (i = 0; subfiles[i]; i++)
+ {
+ free (subfiles[i]->filename);
+ free (subfiles[i]);
+ }
+ free (subfiles);
+}
+
+
+/* Return the node that contains TAG in FILE_BUFFER, else
+ (pathologically) NULL. Called from info_node_of_file_buffer_tags. */
+static NODE *
+find_node_of_anchor (FILE_BUFFER *file_buffer, TAG *tag)
+{
+ int anchor_pos, node_pos;
+ TAG *node_tag;
+ NODE *node;
+
+ /* Look through the tag list for the anchor. */
+ for (anchor_pos = 0; file_buffer->tags[anchor_pos]; anchor_pos++)
+ {
+ TAG *t = file_buffer->tags[anchor_pos];
+ if (t->nodestart == tag->nodestart)
+ break;
+ }
+
+ /* Should not happen, because we should always find the anchor. */
+ if (!file_buffer->tags[anchor_pos])
+ return NULL;
+
+ /* We've found the anchor. Look backwards in the tag table for the
+ preceding node (we're assuming the tags are given in order),
+ skipping over any preceding anchors. */
+ for (node_pos = anchor_pos - 1;
+ node_pos >= 0 && file_buffer->tags[node_pos]->nodelen == 0;
+ node_pos--)
+ ;
+
+ /* An info file with an anchor before any nodes is pathological, but
+ it's possible, so don't crash. */
+ if (node_pos < 0)
+ return NULL;
+
+ /* We have the tag for the node that contained the anchor tag. */
+ node_tag = file_buffer->tags[node_pos];
+
+ /* Look up the node name in the tag table to get the actual node.
+ This is a recursive call, but it can't recurse again, because we
+ call it with a real node. */
+ node = info_node_of_file_buffer_tags (file_buffer, node_tag->nodename);
+
+ /* Start displaying the node at the anchor position. */
+ if (node)
+ { /* The nodestart for real nodes is three characters before the `F'
+ in the `File:' line (a newline, the CTRL-_, and another
+ newline). The nodestart for anchors is the actual position.
+ But we offset by only 2, rather than 3, because if an anchor is
+ at the beginning of a paragraph, it's nicer for it to end up on
+ the beginning of the first line of the paragraph rather than
+ the blank line before it. (makeinfo has no way of knowing that
+ a paragraph is going to start, so we can't fix it there.) */
+ node->display_pos = file_buffer->tags[anchor_pos]->nodestart
+ - (node_tag->nodestart + 2);
+
+ /* Otherwise an anchor at the end of a node ends up displaying at
+ the end of the last line of the node (way over on the right of
+ the screen), which looks wrong. */
+ if (node->display_pos >= (unsigned long) node->nodelen)
+ node->display_pos = node->nodelen - 1;
+
+ /* Don't search in the node for the xref text, it's not there. */
+ node->flags |= N_FromAnchor;
+ }
+
+ return node;
+}
+
+
+/* Return the node from FILE_BUFFER which matches NODENAME by searching
+ the tags table in FILE_BUFFER, or NULL. */
+static NODE *
+info_node_of_file_buffer_tags (FILE_BUFFER *file_buffer, char *nodename)
+{
+ TAG *tag;
+ int i;
+
+ /* If no tags at all (possibly a misformatted info file), quit. */
+ if (!file_buffer->tags) {
+ return NULL;
+ }
+
+ for (i = 0; (tag = file_buffer->tags[i]); i++)
+ if (strcmp (nodename, tag->nodename) == 0)
+ {
+ FILE_BUFFER *subfile = info_find_file_internal (tag->filename,
+ INFO_NO_TAGS);
+ if (!subfile)
+ return NULL;
+
+ if (!subfile->contents)
+ {
+ info_reload_file_buffer_contents (subfile);
+ if (!subfile->contents)
+ return NULL;
+ }
+
+ /* If we were able to find this file and load it, then return
+ the node within it. */
+ {
+ NODE *node = xmalloc (sizeof (NODE));
+ node->filename = subfile->fullpath;
+ node->parent = NULL;
+ node->nodename = tag->nodename;
+ node->contents = subfile->contents + tag->nodestart;
+ node->display_pos = 0;
+ node->flags = 0;
+
+ if (file_buffer->flags & N_HasTagsTable)
+ {
+ node->flags |= N_HasTagsTable;
+
+ if (file_buffer->flags & N_TagsIndirect)
+ {
+ node->flags |= N_TagsIndirect;
+ node->parent = file_buffer->fullpath;
+ }
+ }
+
+ if (subfile->flags & N_IsCompressed)
+ node->flags |= N_IsCompressed;
+
+ /* If TAG->nodelen hasn't been calculated yet, then we aren't
+ in a position to trust the entry pointer. Adjust things so
+ that ENTRY->nodestart gets the exact address of the start of
+ the node separator which starts this node, and NODE->contents
+ gets the address of the line defining this node. If we cannot
+ do that, the node isn't really here. */
+ if (tag->nodelen == -1)
+ {
+ int min, max;
+ char *node_sep;
+ SEARCH_BINDING node_body;
+ char *buff_end;
+
+ min = max = DEFAULT_INFO_FUDGE;
+
+ if (tag->nodestart < DEFAULT_INFO_FUDGE)
+ min = tag->nodestart;
+
+ if (DEFAULT_INFO_FUDGE >
+ (subfile->filesize - tag->nodestart))
+ max = subfile->filesize - tag->nodestart;
+
+ /* NODE_SEP gets the address of the separator which defines
+ this node, or NULL if the node wasn't found.
+ NODE->contents is side-effected to point to right after
+ the separator. */
+ node_sep = adjust_nodestart (node, min, max);
+ if (node_sep == NULL)
+ {
+ free (node);
+ return NULL;
+ }
+ /* Readjust tag->nodestart. */
+ tag->nodestart = node_sep - subfile->contents;
+
+ /* Calculate the length of the current node. */
+ buff_end = subfile->contents + subfile->filesize;
+
+ node_body.buffer = node->contents;
+ node_body.start = 0;
+ node_body.end = buff_end - node_body.buffer;
+ node_body.flags = 0;
+ tag->nodelen = get_node_length (&node_body);
+ node->nodelen = tag->nodelen;
+ }
+
+ else if (tag->nodelen == 0) /* anchor, return containing node */
+ {
+ free (node);
+ node = find_node_of_anchor (file_buffer, tag);
+ }
+
+ else
+ {
+ /* Since we know the length of this node, we have already
+ adjusted tag->nodestart to point to the exact start of
+ it. Simply skip the node separator. */
+ node->contents += skip_node_separator (node->contents);
+ node->nodelen = tag->nodelen;
+ }
+
+ return node;
+ }
+ }
+
+ /* There was a tag table for this file, and the node wasn't found.
+ Return NULL, since this file doesn't contain the desired node. */
+ return NULL;
+}
+
+/* Managing file_buffers, nodes, and tags. */
+
+/* Create a new, empty file buffer. */
+FILE_BUFFER *
+make_file_buffer (void)
+{
+ FILE_BUFFER *file_buffer = xmalloc (sizeof (FILE_BUFFER));
+
+ file_buffer->filename = file_buffer->fullpath = NULL;
+ file_buffer->contents = NULL;
+ file_buffer->tags = NULL;
+ file_buffer->subfiles = NULL;
+ file_buffer->tags_slots = 0;
+ file_buffer->flags = 0;
+
+ return file_buffer;
+}
+
+/* Add FILE_BUFFER to our list of already loaded info files. */
+static void
+remember_info_file (FILE_BUFFER *file_buffer)
+{
+ int i;
+
+ for (i = 0; info_loaded_files && info_loaded_files[i]; i++)
+ ;
+
+ add_pointer_to_array (file_buffer, i, info_loaded_files,
+ info_loaded_files_slots, 10, FILE_BUFFER *);
+}
+
+/* Forget the contents, tags table, nodes list, and names of FILENAME. */
+static void
+forget_info_file (char *filename)
+{
+ int i;
+ FILE_BUFFER *file_buffer;
+
+ if (!info_loaded_files)
+ return;
+
+ for (i = 0; (file_buffer = info_loaded_files[i]); i++)
+ if (FILENAME_CMP (filename, file_buffer->filename) == 0
+ || FILENAME_CMP (filename, file_buffer->fullpath) == 0)
+ {
+ free (file_buffer->filename);
+ free (file_buffer->fullpath);
+
+ if (file_buffer->contents)
+ free (file_buffer->contents);
+
+ /* free_file_buffer_tags () also kills the subfiles list, since
+ the subfiles list is only of use in conjunction with tags. */
+ free_file_buffer_tags (file_buffer);
+
+ /* Move rest of list down. */
+ while (info_loaded_files[i + 1])
+ {
+ info_loaded_files[i] = info_loaded_files[i + 1];
+ i++;
+ }
+ info_loaded_files[i] = 0;
+
+ break;
+ }
+}
+
+/* Free the tags (if any) associated with FILE_BUFFER. */
+static void
+free_file_buffer_tags (FILE_BUFFER *file_buffer)
+{
+ int i;
+
+ if (file_buffer->tags)
+ {
+ TAG *tag;
+
+ for (i = 0; (tag = file_buffer->tags[i]); i++)
+ free_info_tag (tag);
+
+ free (file_buffer->tags);
+ file_buffer->tags = NULL;
+ file_buffer->tags_slots = 0;
+ }
+
+ if (file_buffer->subfiles)
+ {
+ for (i = 0; file_buffer->subfiles[i]; i++)
+ free (file_buffer->subfiles[i]);
+
+ free (file_buffer->subfiles);
+ file_buffer->subfiles = NULL;
+ }
+}
+
+/* Free the data associated with TAG, as well as TAG itself. */
+static void
+free_info_tag (TAG *tag)
+{
+ free (tag->nodename);
+
+ /* We don't free tag->filename, because that filename is part of the
+ subfiles list for the containing FILE_BUFFER. free_info_tags ()
+ will free the subfiles when it is appropriate. */
+
+ free (tag);
+}
+
+/* Load the contents of FILE_BUFFER->contents. This function is called
+ when a file buffer was loaded, and then in order to conserve memory, the
+ file buffer's contents were freed and the pointer was zero'ed. Note that
+ the file was already loaded at least once successfully, so the tags and/or
+ nodes members are still correctly filled. */
+static void
+info_reload_file_buffer_contents (FILE_BUFFER *fb)
+{
+ int is_compressed;
+
+#if defined (HANDLE_MAN_PAGES)
+ /* If this is the magic manpage node, don't try to reload, just give up. */
+ if (fb->flags & N_IsManPage)
+ return;
+#endif
+
+ fb->flags &= ~N_IsCompressed;
+
+ /* Let the filesystem do all the work for us. */
+ fb->contents =
+ filesys_read_info_file (fb->fullpath, &(fb->filesize), &(fb->finfo),
+ &is_compressed);
+ if (is_compressed)
+ fb->flags |= N_IsCompressed;
+}
+
+/* Return the actual starting memory location of NODE, side-effecting
+ NODE->contents. MIN and MAX are bounds for a search if one is necessary.
+ Because of the way that tags are implemented, the physical nodestart may
+ not actually be where the tag says it is. If that is the case, but the
+ node was found anyway, set N_UpdateTags in NODE->flags. If the node is
+ found, return non-zero. NODE->contents is returned positioned right after
+ the node separator that precedes this node, while the return value is
+ position directly on the separator that precedes this node. If the node
+ could not be found, return a NULL pointer. */
+static char *
+adjust_nodestart (NODE *node, int min, int max)
+{
+ long position;
+ SEARCH_BINDING node_body;
+
+ /* Define the node body. */
+ node_body.buffer = node->contents;
+ node_body.start = 0;
+ node_body.end = max;
+ node_body.flags = 0;
+
+ /* Try the optimal case first. Who knows? This file may actually be
+ formatted (mostly) correctly. */
+ if (node_body.buffer[0] != INFO_COOKIE && min > 2)
+ node_body.buffer -= 3;
+
+ position = find_node_separator (&node_body);
+
+ /* If we found a node start, then check it out. */
+ if (position != -1)
+ {
+ int sep_len;
+
+ sep_len = skip_node_separator (node->contents);
+
+ /* If we managed to skip a node separator, then check for this node
+ being the right one. */
+ if (sep_len != 0)
+ {
+ char *nodedef, *nodestart;
+ int offset;
+
+ nodestart = node_body.buffer + position + sep_len;
+ nodedef = nodestart;
+ offset = string_in_line (INFO_NODE_LABEL, nodedef);
+
+ if (offset != -1)
+ {
+ nodedef += offset;
+ nodedef += skip_whitespace (nodedef);
+ offset = skip_node_characters (nodedef, DONT_SKIP_NEWLINES);
+ if (((unsigned int) offset == strlen (node->nodename)) &&
+ (strncmp (node->nodename, nodedef, offset) == 0))
+ {
+ node->contents = nodestart;
+ return node_body.buffer + position;
+ }
+ }
+ }
+ }
+
+ /* Oh well, I guess we have to try to find it in a larger area. */
+ node_body.buffer = node->contents - min;
+ node_body.start = 0;
+ node_body.end = min + max;
+ node_body.flags = 0;
+
+ position = find_node_in_binding (node->nodename, &node_body);
+
+ /* If the node couldn't be found, we lose big. */
+ if (position == -1)
+ return NULL;
+
+ /* Otherwise, the node was found, but the tags table could need updating
+ (if we used a tag to get here, that is). Set the flag in NODE->flags. */
+ node->contents = node_body.buffer + position;
+ node->contents += skip_node_separator (node->contents);
+ if (node->flags & N_HasTagsTable)
+ node->flags |= N_UpdateTags;
+ return node_body.buffer + position;
+}
diff --git a/info/nodes.h b/info/nodes.h
new file mode 100644
index 0000000..213dc3c
--- /dev/null
+++ b/info/nodes.h
@@ -0,0 +1,156 @@
+/* nodes.h -- How we represent nodes internally.
+ $Id: nodes.h,v 1.6 2007/07/01 21:20:31 karl Exp $
+
+ Copyright (C) 1993, 1997, 1998, 2002, 2004, 2007
+ 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 Brian Fox (bfox@ai.mit.edu). */
+
+#ifndef NODES_H
+#define NODES_H
+
+#include "info.h"
+
+/* User code interface. */
+
+/* Callers generally only want the node itself. This structure is used
+ to pass node information around. None of the information in this
+ structure should ever be directly freed. The structure itself can
+ be passed to free (). Note that NODE->parent is non-null if this
+ node's file is a subfile. In that case, NODE->parent is the logical
+ name of the file containing this node. Both names are given as full
+ paths, so you might have: node->filename = "/usr/gnu/info/emacs-1",
+ with node->parent = "/usr/gnu/info/emacs". */
+typedef struct {
+ char *filename; /* The physical file containing this node. */
+ char *parent; /* Non-null is the logical file name. */
+ char *nodename; /* The name of this node. */
+ char *contents; /* Characters appearing in this node. */
+ long nodelen; /* The length of the CONTENTS member. */
+ unsigned long display_pos; /* Where to display at, if nonzero. */
+ int flags; /* See immediately below. */
+} NODE;
+
+/* Defines that can appear in NODE->flags. All informative. */
+#define N_HasTagsTable 0x01 /* This node was found through a tags table. */
+#define N_TagsIndirect 0x02 /* The tags table was an indirect one. */
+#define N_UpdateTags 0x04 /* The tags table is out of date. */
+#define N_IsCompressed 0x08 /* The file is compressed on disk. */
+#define N_IsInternal 0x10 /* This node was made by Info. */
+#define N_CannotGC 0x20 /* File buffer cannot be gc'ed. */
+#define N_IsManPage 0x40 /* This node is a manpage. */
+#define N_FromAnchor 0x80 /* Synthesized for an anchor reference. */
+
+/* Internal data structures. */
+
+/* String constants. */
+#define INFO_FILE_LABEL "File:"
+#define INFO_REF_LABEL "Ref:"
+#define INFO_NODE_LABEL "Node:"
+#define INFO_PREV_LABEL "Prev:"
+#define INFO_ALTPREV_LABEL "Previous:"
+#define INFO_NEXT_LABEL "Next:"
+#define INFO_UP_LABEL "Up:"
+#define INFO_MENU_LABEL "\n* Menu:"
+#define INFO_MENU_ENTRY_LABEL "\n* "
+#define INFO_XREF_LABEL "*Note"
+#define TAGS_TABLE_END_LABEL "\nEnd Tag Table"
+#define TAGS_TABLE_BEG_LABEL "Tag Table:\n"
+#define INDIRECT_TAGS_TABLE_LABEL "Indirect:\n"
+#define TAGS_TABLE_IS_INDIRECT_LABEL "(Indirect)"
+
+/* Character constants. */
+#define INFO_COOKIE '\037'
+#define INFO_FF '\014'
+#define INFO_TAGSEP '\177'
+
+/* For each logical file that we have loaded, we keep a list of the names
+ of the nodes that are found in that file. A pointer to a node in an
+ info file is called a "tag". For split files, the tag pointer is
+ "indirect"; that is, the pointer also contains the name of the split
+ file where the node can be found. For non-split files, the filename
+ member in the structure below simply contains the name of the current
+ file. The following structure describes a single node within a file. */
+typedef struct {
+ char *filename; /* The file where this node can be found. */
+ char *nodename; /* The node pointed to by this tag. */
+ long nodestart; /* The offset of the start of this node. */
+ long nodelen; /* The length of this node. */
+} TAG;
+
+/* The following structure is used to remember information about the contents
+ of Info files that we have loaded at least once before. The FINFO member
+ is present so that we can reload the file if it has been modified since
+ last being loaded. All of the arrays appearing within this structure
+ are NULL terminated, and each array which can change size has a
+ corresponding SLOTS member which says how many slots have been allocated
+ (with malloc ()) for this array. */
+typedef struct {
+ char *filename; /* The filename used to find this file. */
+ char *fullpath; /* The full pathname of this info file. */
+ struct stat finfo; /* Information about this file. */
+ char *contents; /* The contents of this particular file. */
+ long filesize; /* The number of bytes this file expands to. */
+ char **subfiles; /* If non-null, the list of subfiles. */
+ TAG **tags; /* If non-null, the indirect tags table. */
+ int tags_slots; /* Number of slots allocated for TAGS. */
+ int flags; /* Various flags. Mimics of N_* flags. */
+} FILE_BUFFER;
+
+/* Externally visible functions. */
+
+/* Array of FILE_BUFFER * which represents the currently loaded info files. */
+extern FILE_BUFFER **info_loaded_files;
+
+/* The number of slots currently allocated to INFO_LOADED_FILES. */
+extern int info_loaded_files_slots;
+
+/* Locate the file named by FILENAME, and return the information structure
+ describing this file. The file may appear in our list of loaded files
+ already, or it may not. If it does not already appear, find the file,
+ and add it to the list of loaded files. If the file cannot be found,
+ return a NULL FILE_BUFFER *. */
+extern FILE_BUFFER *info_find_file (char *filename);
+
+/* Force load the file named FILENAME, and return the information structure
+ describing this file. Even if the file was already loaded, this loads
+ a new buffer, rebuilds tags and nodes, and returns a new FILE_BUFFER *. */
+extern FILE_BUFFER *info_load_file (char *filename);
+
+/* Return a pointer to a NODE structure for the Info node (FILENAME)NODENAME.
+ FILENAME can be passed as NULL, in which case the filename of "dir" is used.
+ NODENAME can be passed as NULL, in which case the nodename of "Top" is used.
+ If the node cannot be found, return a NULL pointer. */
+extern NODE *info_get_node (char *filename, char *nodename);
+
+/* Return a pointer to a NODE structure for the Info node NODENAME in
+ FILE_BUFFER. NODENAME can be passed as NULL, in which case the
+ nodename of "Top" is used. If the node cannot be found, return a
+ NULL pointer. */
+extern NODE *info_get_node_of_file_buffer (char *nodename,
+ FILE_BUFFER *file_buffer);
+
+/* Grovel FILE_BUFFER->contents finding tags and nodes, and filling in the
+ various slots. This can also be used to rebuild a tag or node table. */
+extern void build_tags_and_nodes (FILE_BUFFER *file_buffer);
+
+/* When non-zero, this is a string describing the most recent file error. */
+extern char *info_recent_file_error;
+
+/* Create a new, empty file buffer. */
+extern FILE_BUFFER *make_file_buffer (void);
+
+#endif /* not NODES_H */
diff --git a/info/pcterm.c b/info/pcterm.c
new file mode 100644
index 0000000..7eeb80f
--- /dev/null
+++ b/info/pcterm.c
@@ -0,0 +1,759 @@
+/* pcterm.c -- How to handle the PC terminal for Info under MS-DOS/MS-Windows.
+ $Id: pcterm.c,v 1.8 2008/06/11 09:55:42 gray Exp $
+
+ Copyright (C) 1998, 1999, 2003, 2004, 2007, 2008
+ 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/>. */
+
+
+/* WARNING WARNING WARNING!!!
+ This probably won't work as is with anything but DJGPP! However, Borland
+ should come close, and other PC compilers will need minor modifications. */
+
+/* intl/libintl.h defines a macro `gettext' which
+ conflicts with conio.h header. */
+#ifdef gettext
+# undef gettext
+# define gettext _gettext
+#endif
+
+#include <pc.h>
+#include <keys.h>
+#include <conio.h>
+
+#include "variables.h"
+
+extern int speech_friendly; /* defined in info.c */
+
+/* **************************************************************** */
+/* */
+/* PC Terminal Output Functions */
+/* */
+/* **************************************************************** */
+
+static struct text_info outside_info; /* holds screen params outside Info */
+static unsigned char norm_attr, inv_attr;
+
+static unsigned const char * find_sequence (int);
+
+/* Turn on reverse video. */
+static void
+pc_begin_inverse (void)
+{
+ textattr (inv_attr);
+}
+
+/* Turn off reverse video. */
+static void
+pc_end_inverse (void)
+{
+ textattr (norm_attr);
+}
+
+/* Move the cursor up one line. */
+static void
+pc_up_line (void)
+{
+ int x, y;
+ ScreenGetCursor (&y, &x);
+ ScreenSetCursor (MAX (y-1, 0), x);
+}
+
+/* Move the cursor down one line. */
+static void
+pc_down_line (void)
+{
+ int x, y;
+ ScreenGetCursor (&y, &x);
+ ScreenSetCursor (MIN (screenheight-1, y+1), x);
+}
+
+/* Clear the entire terminal screen. */
+static void
+pc_clear_screen (void)
+{
+ ScreenClear ();
+}
+
+/* Clear from the current position of the cursor to the end of the line. */
+static void
+pc_clear_to_eol (void)
+{
+ clreol (); /* perhaps to be replaced by a loop */
+}
+
+/* Set the global variables SCREENWIDTH and SCREENHEIGHT. */
+static void
+pc_get_screen_size(void)
+{
+ /* Current screen dimensions are the default. */
+ if (!outside_info.screenheight) /* paranoia */
+ gettextinfo (&outside_info);
+ screenwidth = outside_info.screenwidth;
+ screenheight = outside_info.screenheight;
+
+ /* Environment variable "LINES" overrides the default. */
+ if (getenv ("LINES") != NULL)
+ screenheight = atoi (getenv ("LINES"));
+
+ /* Environment variable "INFO_LINES" overrides "LINES". */
+ if (getenv ("INFO_LINES") != NULL)
+ screenheight = atoi (getenv ("INFO_LINES"));
+}
+
+/* Move the cursor to the terminal location of X and Y. */
+static void
+pc_goto_xy (x, y)
+ int x, y;
+{
+ ScreenSetCursor (y, x); /* yes, pc.h says ScreenSetCursor (row, column) !! */
+}
+
+/* Print STRING to the terminal at the current position. */
+static void
+pc_put_text (string)
+ char *string;
+{
+ if (speech_friendly)
+ fputs (string, stdout);
+ else
+ cputs (string);
+}
+
+/* Ring the terminal bell. The bell is rung visibly if the terminal is
+ capable of doing that, and if terminal_use_visible_bell_p is non-zero. */
+static void
+pc_ring_bell(void)
+{
+ if (terminal_has_visible_bell_p && terminal_use_visible_bell_p)
+ ScreenVisualBell ();
+ else
+ {
+ printf ("%c",'\a');
+ fflush (stdout);
+ }
+}
+
+/* Print NCHARS from STRING to the terminal at the current position. */
+static void
+pc_write_chars (string, nchars)
+ char *string;
+ int nchars;
+{
+ if (!nchars)
+ return;
+
+ if (speech_friendly)
+ printf ("%.*s",nchars, string);
+ else
+ cprintf ("%..*s",nchars, string);
+}
+
+/* Scroll an area of the terminal from START to (and excluding) END,
+ AMOUNT lines. If AMOUNT is negative, the lines are scrolled
+ towards the top of the screen, else they are scrolled towards the
+ bottom of the screen. The lines of the old region which do not
+ overlap the new region are cleared, to mimic terminal operation. */
+static void
+pc_scroll_terminal (start, end, amount)
+ int start, end, amount;
+{
+ int line_to_clear = amount > 0 ? start : end + amount;
+
+ /* Move the text. Note that `movetext' expects 1-based coordinates. */
+ movetext (1, start + 1, ScreenCols (), end, 1, start + amount + 1);
+
+ /* Now clear the lines which were left unoccupied. */
+ if (amount < 0)
+ amount = -amount;
+ while (amount--)
+ {
+ ScreenSetCursor (line_to_clear++, 0);
+ clreol ();
+ }
+}
+
+/* Put the screen in the video mode and colors which Info will use.
+ Prepare to start using the terminal to read characters singly. */
+static void
+pc_prep_terminal (void)
+{
+ int tty;
+
+ /* Do not set screen height if we already have it, because
+ doing so erases the screen. */
+ if (screenheight != ScreenRows ())
+ _set_screen_lines (screenheight);
+
+ /* Don't fail if they asked for screen dimensions that their
+ hardware cannot support. */
+ screenheight = ScreenRows ();
+ screenwidth = ScreenCols ();
+
+ /* Try setting the colors user asked for. */
+ textattr (norm_attr);
+ ScreenClear ();
+
+ /* Switch console reads to binary mode. */
+ tty = fileno (stdin);
+#ifdef __DJGPP__
+ setmode (tty, O_BINARY);
+ __djgpp_set_ctrl_c (1); /* re-enable SIGINT generation by Ctrl-C */
+#endif
+}
+
+/* Restore the tty settings back to what they were before we started using
+ this terminal. */
+static void
+pc_unprep_terminal (void)
+{
+ int tty;
+
+ textattr (outside_info.normattr);
+
+ /* Do not set screen height if we already have it, because
+ doing so erases the screen. */
+ if (outside_info.screenheight != ScreenRows ())
+ {
+ _set_screen_lines (outside_info.screenheight);
+ textmode (LASTMODE);
+ }
+ else
+ pc_clear_to_eol (); /* for text attributes to really take effect */
+
+ /* Switch back to text mode on stdin. */
+ tty = fileno (stdin);
+#ifdef __DJGPP__
+ setmode (tty, O_TEXT);
+#endif
+}
+
+/* Initialize the terminal which is known as TERMINAL_NAME. If this
+ terminal doesn't have cursor addressability, `terminal_is_dumb_p'
+ becomes nonzero. The variables SCREENHEIGHT and SCREENWIDTH are set
+ to the dimensions that this terminal actually has. The variable
+ TERMINAL_HAS_META_P becomes nonzero if this terminal supports a Meta
+ key. Finally, the terminal screen is cleared. */
+static void
+pc_initialize_terminal (term_name)
+ char *term_name;
+{
+ char *info_colors;
+
+ if (!term_name)
+ {
+ term_name = getenv ("TERM");
+ if (!term_name)
+ term_name = "pc-dos"; /* ``what's in a name?'' */
+ }
+
+ /* Get current video information, to be restored later. */
+ if (outside_info.screenwidth == 0)
+ gettextinfo (&outside_info);
+
+ /* Current screen colors are the default. */
+ norm_attr = outside_info.normattr;
+ inv_attr = (((outside_info.normattr & 7) << 4) |
+ ((outside_info.normattr & 0x7f) >> 4));
+
+ /* Does the user want non-default colors? */
+ info_colors = getenv ("INFO_COLORS");
+ if ((info_colors != (char *)0) && !speech_friendly)
+ {
+ /* Decode a color from a string descriptor.
+ The descriptor string is a sequence of color specifiers separated
+ by a non-numeric character. Each color specifier should represent
+ a small integer which fits into an unsigned char, and can be given
+ in any base supported by strtoul. Examples of valid descriptors:
+
+ "10 31"
+ "0x13/0x45"
+ "007.077"
+
+ The separator between two color specifiers can be any character which
+ cannot be used in a printed representation of an integer number. */
+ char *endp;
+ unsigned long color_desc = strtoul (info_colors, &endp, 0);
+
+ if (color_desc <= UCHAR_MAX)
+ {
+ norm_attr = (unsigned char)color_desc;
+ color_desc = strtoul (endp + 1, &endp, 0);
+ if (color_desc <= UCHAR_MAX)
+ inv_attr = (unsigned char)color_desc;
+ }
+ }
+
+ /* We can scroll. */
+ terminal_can_scroll = 1;
+
+ /* We know how to produce a visible bell, if somebody's looking... */
+ if (!speech_friendly)
+ terminal_has_visible_bell_p = 1;
+
+ /* We have a Meta key. */
+ terminal_has_meta_p = 1;
+
+ /* We are *certainly* NOT dumb! */
+ terminal_is_dumb_p = 0;
+
+ pc_get_screen_size ();
+
+ /* Store the arrow keys. */
+ term_ku = (char *)find_sequence (K_Up);
+ term_kd = (char *)find_sequence (K_Down);
+ term_kr = (char *)find_sequence (K_Right);
+ term_kl = (char *)find_sequence (K_Left);
+
+ term_kP = (char *)find_sequence (K_PageUp);
+ term_kN = (char *)find_sequence (K_PageDown);
+
+#if defined(INFOKEY)
+ term_kh = (char *)find_sequence (K_Home);
+ term_ke = (char *)find_sequence (K_End);
+ term_ki = (char *)find_sequence (K_Insert);
+ term_kx = (char *)find_sequence (K_Delete);
+#endif
+
+ /* Set all the hooks to our PC-specific functions. */
+ terminal_begin_inverse_hook = pc_begin_inverse;
+ terminal_end_inverse_hook = pc_end_inverse;
+ terminal_prep_terminal_hook = pc_prep_terminal;
+ terminal_unprep_terminal_hook = pc_unprep_terminal;
+ terminal_up_line_hook = pc_up_line;
+ terminal_down_line_hook = pc_down_line;
+ terminal_clear_screen_hook = pc_clear_screen;
+ terminal_clear_to_eol_hook = pc_clear_to_eol;
+ terminal_get_screen_size_hook = pc_get_screen_size;
+ terminal_goto_xy_hook = pc_goto_xy;
+ terminal_put_text_hook = pc_put_text;
+ terminal_ring_bell_hook = pc_ring_bell;
+ terminal_write_chars_hook = pc_write_chars;
+ terminal_scroll_terminal_hook = pc_scroll_terminal;
+}
+
+/* **************************************************************** */
+/* */
+/* How to Read Characters From the PC Terminal */
+/* */
+/* **************************************************************** */
+
+/* This will most certainly work ONLY with DJGPP. */
+#ifdef __DJGPP__
+
+#include <errno.h>
+#include <sys/fsext.h>
+#include <dpmi.h>
+
+/* Translation table for some special keys.
+ Arrow keys which are standard on other keyboards are translated into
+ standard ESC-sequences, in case somebody rebinds the simple keys
+ (like C-f, C-b, C-n, etc.).
+
+ The strange "\033\061" prefix in some keys is a numeric argument of
+ one, which means ``do the next command once''. It is here so that
+ when the according PC key is pressed in the middle of an incremental
+ search, Info doesn't see just an ASCII character like `n' or `B',
+ and doesn't add it to the search string; instead, it will exit the
+ incremental search and then perform the command. */
+static struct
+{
+ int inkey;
+ unsigned char const * const sequence;
+} DJGPP_keytab[] = { /* these are for moving between nodes... */
+ {K_Control_PageDown, "\033\061n"},
+ {K_Control_PageUp, "\033\061p"},
+ {K_Control_Up, "\033\061u"},
+ {K_Control_Down, "\033\061m"},
+ {K_Control_Center, "\033\061l"},
+
+#if defined(INFOKEY)
+ {K_Home, "\033[H"}, /* ...and these are for moving IN a node */
+ {K_End, "\033[F"}, /* they're Numeric-Keypad-Keys, so */
+#else
+ {K_Home, "\001"},
+ {K_End, "\005"},
+#endif
+ {K_Left, "\033[D"}, /* NUMLOCK should be off !! */
+ {K_Right, "\033[C"},
+ {K_Down, "\033[B"},
+ {K_Up, "\033[A"},
+ {K_PageDown, "\033[G"},
+ {K_PageUp, "\033[I"},
+ {K_Control_Left, "\033b"},
+ {K_Control_Right, "\033f"},
+ {K_Control_Home, "\033<"},
+ {K_Control_End, "\033>"},
+
+#if defined(INFOKEY)
+ {K_EHome, "\033[H"}, /* these are also for moving IN a node */
+ {K_EEnd, "\033[F"}, /* they're the "extended" (Grey) keys */
+#else
+ {K_EHome, "\001"},
+ {K_EEnd, "\005"},
+#endif
+ {K_ELeft, "\033[D"},
+ {K_ERight, "\033[C"},
+ {K_EDown, "\033[B"},
+ {K_EUp, "\033[A"},
+ {K_EPageDown, "\033[G"},
+ {K_EPageUp, "\033[I"},
+ {K_Control_ELeft, "\033b"},
+ {K_Control_ERight, "\033f"},
+ {K_Control_EHome, "\033<"},
+ {K_Control_EEnd, "\033>"},
+
+ {K_BackTab, "\033\011"},
+ {K_F1, "\10"}, /* YEAH, gimme that good old F-one-thing */
+ {K_Delete, "\177"}, /* to make Kp-Del be DEL (0x7f) */
+ {K_EDelete, "\177"}, /* to make Delete be DEL (0x7f) */
+#if defined(INFOKEY)
+ {K_Insert, "\033[L"},
+ {K_EInsert, "\033[L"},
+#endif
+
+ /* These are here to map more Alt-X keys to ESC X sequences. */
+ {K_Alt_Q, "\033q"},
+ {K_Alt_W, "\033w"},
+ {K_Alt_E, "\033e"},
+ {K_Alt_R, "\033r"},
+ {K_Alt_T, "\033t"},
+ {K_Alt_Y, "\033y"},
+ {K_Alt_U, "\033u"},
+ {K_Alt_I, "\033i"},
+ {K_Alt_O, "\033o"},
+ {K_Alt_P, "\033p"},
+ {K_Alt_LBracket, "\033["},
+ {K_Alt_RBracket, "\033]"},
+ {K_Alt_Return, "\033\015"},
+ {K_Alt_A, "\033a"},
+ {K_Alt_S, "\033s"},
+ {K_Alt_D, "\033d"},
+ {K_Alt_F, "\033f"},
+ {K_Alt_G, "\033g"},
+ {K_Alt_H, "\033h"},
+ {K_Alt_J, "\033j"},
+ {K_Alt_K, "\033k"},
+ {K_Alt_L, "\033l"},
+ {K_Alt_Semicolon, "\033;"},
+ {K_Alt_Quote, "\033'"},
+ {K_Alt_Backquote, "\033`"},
+ {K_Alt_Backslash, "\033\\"},
+ {K_Alt_Z, "\033z"},
+ {K_Alt_X, "\033x"},
+ {K_Alt_C, "\033c"},
+ {K_Alt_V, "\033v"},
+ {K_Alt_B, "\033b"},
+ {K_Alt_N, "\033n"},
+ {K_Alt_M, "\033m"},
+ {K_Alt_Comma, "\033<"}, /* our reader cannot distinguish between */
+ {K_Alt_Period, "\033>"}, /* Alt-. and Alt->, so we cheat a little */
+ {K_Alt_Slash, "\033?"}, /* ditto, to get Alt-? */
+ {K_Alt_Backspace, "\033\177"}, /* M-DEL, to delete word backwards */
+ {K_Alt_1, "\033\061"},
+ {K_Alt_2, "\033\062"},
+ {K_Alt_3, "\033\063"},
+ {K_Alt_4, "\033\064"},
+ {K_Alt_5, "\033\065"},
+ {K_Alt_6, "\033\066"},
+ {K_Alt_7, "\033\067"},
+ {K_Alt_8, "\033\070"},
+ {K_Alt_9, "\033\071"},
+ {K_Alt_0, "\033\060"},
+ {K_Alt_Dash, "\033\055"},
+ {K_Alt_EPageUp, "\033\033[I"},
+ {K_Alt_EPageDown, "\033\033[G"},
+ {K_Alt_Equals, "\033\075"},
+ {K_Alt_EDelete, "\033\177"},
+ {K_Alt_Tab, "\033\011"},
+ {0, 0}
+};
+
+/* Given a key, return the sequence of characters which
+ our keyboard driver generates. */
+static unsigned const char *
+find_sequence (int key)
+{
+ int i;
+
+ for (i = 0; DJGPP_keytab[i].inkey; i++)
+ if (key == DJGPP_keytab[i].inkey)
+ return DJGPP_keytab[i].sequence;
+
+ return NULL;
+}
+
+/* Return zero if a key is pending in the
+ keyboard buffer, non-zero otherwise. */
+static int
+kbd_buffer_empty (void)
+{
+ __dpmi_regs r;
+ int retval;
+
+ r.h.ah = 0x11; /* Get enhanced keyboard status */
+ __dpmi_int (0x16, &r);
+
+ /* If the keyboard buffer is empty, the Zero Flag will be set. */
+ return (r.x.flags & 0x40) == 0x40;
+}
+
+/* The buffered characters pending to be read.
+ Actually, Info usually reads a single character, but when we
+ translate a key into a sequence of characters, we keep them here. */
+static unsigned char buffered[512];
+
+/* Index of the next buffered character to be returned. */
+static int buf_idx;
+
+/* Return the number of characters waiting to be read. */
+long
+pc_term_chars_avail (void)
+{
+ if (buf_idx >= sizeof (buffered)) /* paranoia */
+ {
+ buf_idx = 0;
+ buffered[buf_idx] = '\0';
+ return 0;
+ }
+ else
+ return strlen (buffered + buf_idx);
+}
+
+/* Our special terminal keyboard reader. It will be called by
+ low-level libc functions when the application calls `read' or
+ the ANSI-standard stream-oriented read functions. If the
+ caller wants to read the terminal, we redirect the call to
+ the BIOS keyboard functions, since that lets us recognize more
+ keys than DOS does. */
+static int
+keyboard_read (__FSEXT_Fnumber func, int *retval, va_list rest_args)
+{
+ /* When we are called, REST_ARGS are: file_descriptor, buf, nbytes. */
+ unsigned char *buf;
+ size_t nbytes, nread = 0;
+ int fd = va_arg (rest_args, int);
+
+ /* Is this call for us? */
+ if (func != __FSEXT_read || !isatty (fd))
+ return 0; /* and the usual DOS call will be issued */
+
+ buf = va_arg (rest_args, unsigned char *);
+ nbytes = va_arg (rest_args, size_t);
+
+ if (!buf)
+ {
+ errno = EINVAL;
+ *retval = -1;
+ return 1;
+ }
+ if (!nbytes)
+ {
+ *retval = 0;
+ return 1;
+ }
+
+ /* Loop here until enough bytes has been read. */
+ do
+ {
+ int key;
+
+ /* If any ``buffered characters'' are left, return as much
+ of them as the caller wanted. */
+ while (buffered[buf_idx] && nbytes)
+ {
+ *buf++ = buffered[buf_idx++];
+ nread++;
+ nbytes--;
+ }
+
+ if (nbytes <= 0)
+ break;
+
+ /* Wait for another key.
+ We do that in a busy-waiting loop so we don't get parked
+ inside a BIOS call, which will effectively disable signals.
+ While we wait for them to type something, we repeatedly
+ release the rest of our time slice, so that other programs
+ in a multitasking environment, such as Windows, get more cycles. */
+ while (kbd_buffer_empty ())
+ __dpmi_yield ();
+
+ key = getxkey ();
+
+ /* Translate the key if necessary.
+ Untranslated non-ASCII keys are silently ignored. */
+ if ((key & 0x300) != 0)
+ {
+ unsigned char const * key_sequence = find_sequence (key);
+
+ if (key_sequence != NULL)
+ {
+ strcpy (buffered, key_sequence);
+ buf_idx = 0;
+ }
+ }
+ else if (key == K_Control_Z)
+ raise (SIGUSR1); /* we don't have SIGTSTP, so simulate it */
+ else if (key <= 0xff)
+ {
+ *buf++ = key;
+ nbytes--;
+ nread++;
+ }
+ }
+ while (nbytes > 0);
+
+ *retval = nread;
+ return 1; /* meaning that we handled the call */
+}
+
+/* Install our keyboard handler.
+ This is called by the startup code before `main'. */
+static void __attribute__((constructor))
+install_keyboard_handler (void)
+{
+ __FSEXT_set_function (fileno (stdin), keyboard_read);
+
+ /* We need to set this single hook here; the rest
+ will be set by pc_initialize_terminal when it is called. */
+ terminal_initialize_terminal_hook = pc_initialize_terminal;
+}
+
+#endif /* __DJGPP__ */
+
+/* **************************************************************** */
+/* */
+/* Emulation of SIGTSTP on Ctrl-Z */
+/* */
+/* **************************************************************** */
+
+#include <limits.h>
+#include "signals.h"
+#include "session.h"
+
+#ifndef PATH_MAX
+# define PATH_MAX 512
+#endif
+
+/* Effectively disable signals which aren't defined
+ (assuming no signal can ever be zero).
+ SIGINT is ANSI, so we expect it to be always defined. */
+#ifndef SIGUSR1
+# define SIGUSR1 0
+#endif
+#ifndef SIGQUIT
+# define SIGQUIT 0
+#endif
+
+int
+kill (pid_t pid, int sig)
+{
+ static char interrupted_msg[] = "Interrupted\r\n";
+ static char stopped_msg[] = "Stopped. Type `exit RET' to return.\r\n";
+ char cwd[PATH_MAX + 1];
+
+ if (pid == getpid ()
+ || pid == 0
+ || pid == -1
+ || pid == -getpid ())
+ {
+ switch (sig)
+ {
+ RETSIGTYPE (*old_INT)(int), (*old_QUIT)(int);
+
+ case SIGINT:
+#ifdef __DJGPP__
+ /* If SIGINT was generated by a readable key, we want to remove
+ it from the PC keyboard buffer, so that DOS and other
+ programs never see it. DJGPP signal-handling mechanism
+ doesn't remove the INT key from the keyboard buffer. */
+ if (!kbd_buffer_empty ())
+ getxkey ();
+#endif
+ pc_write_chars (interrupted_msg, sizeof (interrupted_msg) - 1);
+ xexit (1);
+ case SIGUSR1:
+ /* Simulate SIGTSTP by invoking a subsidiary shell. */
+ pc_goto_xy (0, outside_info.screenheight - 1);
+ pc_clear_to_eol ();
+ pc_write_chars (stopped_msg, sizeof (stopped_msg) - 1);
+
+ /* The child shell can change the working directory, so
+ we need to save and restore it, since it is global. */
+ if (!getcwd (cwd, PATH_MAX)) /* should never happen */
+ cwd[0] = '\0';
+
+ /* We don't want to get fatal signals while the subshell runs. */
+ old_INT = signal (SIGINT, SIG_IGN);
+ old_QUIT = signal (SIGQUIT, SIG_IGN);
+ system ("");
+ if (*cwd)
+ chdir (cwd);
+ signal (SIGINT, old_INT);
+ signal (SIGQUIT, old_QUIT);
+ break;
+ default:
+ if (sig)
+ raise (sig);
+ break;
+ }
+ return 0;
+ }
+ else
+ return -1;
+}
+
+/* These should never be called, but they make the linker happy. */
+
+void tputs (char *a, int b, int (*c)())
+{
+ perror ("tputs");
+}
+
+char* tgoto (char*a, int b, int c)
+{
+ perror ("tgoto"); return 0; /* here and below, added dummy retvals */
+}
+
+int tgetnum (char*a)
+{
+ perror ("tgetnum"); return 0;
+}
+
+int tgetflag (char*a)
+{
+ perror ("tgetflag"); return 0;
+}
+
+char* tgetstr (char *a, char **b)
+{
+ perror ("tgetstr"); return 0;
+}
+
+int tgetent (char*a, char*b)
+{
+ perror ("tgetent"); return 0;
+}
+
+int tcgetattr(int fildes, struct termios *termios_p)
+{
+ perror ("tcgetattr"); return 0;
+}
+
+int tcsetattr(int fd, int opt_actions, const struct termios *termios_p)
+{
+ perror ("tcsetattr"); return 0;
+}
diff --git a/info/search.c b/info/search.c
new file mode 100644
index 0000000..44010bf
--- /dev/null
+++ b/info/search.c
@@ -0,0 +1,677 @@
+/* search.c -- searching large bodies of text.
+ $Id: search.c,v 1.9 2008/06/11 09:55:42 gray Exp $
+
+ Copyright (C) 1993, 1997, 1998, 2002, 2004, 2007, 2008
+ 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/>.
+
+ Originally written by Brian Fox (bfox@ai.mit.edu). */
+
+#include "info.h"
+#include <regex.h>
+
+#include "search.h"
+#include "nodes.h"
+
+/* The search functions take two arguments:
+
+ 1) a string to search for, and
+
+ 2) a pointer to a SEARCH_BINDING which contains the buffer, start,
+ and end of the search.
+
+ They return a long, which is the offset from the start of the buffer
+ at which the match was found. An offset of -1 indicates failure. */
+
+/* A function which makes a binding with buffer and bounds. */
+SEARCH_BINDING *
+make_binding (char *buffer, long int start, long int end)
+{
+ SEARCH_BINDING *binding;
+
+ binding = xmalloc (sizeof (SEARCH_BINDING));
+ binding->buffer = buffer;
+ binding->start = start;
+ binding->end = end;
+ binding->flags = 0;
+
+ return binding;
+}
+
+/* Make a copy of BINDING without duplicating the data. */
+SEARCH_BINDING *
+copy_binding (SEARCH_BINDING *binding)
+{
+ SEARCH_BINDING *copy;
+
+ copy = make_binding (binding->buffer, binding->start, binding->end);
+ copy->flags = binding->flags;
+ return copy;
+}
+
+
+/* **************************************************************** */
+/* */
+/* The Actual Searching Functions */
+/* */
+/* **************************************************************** */
+
+/* Search forwards or backwards for the text delimited by BINDING.
+ The search is forwards if BINDING->start is greater than BINDING->end. */
+long
+search (char *string, SEARCH_BINDING *binding)
+{
+ long result;
+
+ /* If the search is backwards, then search backwards, otherwise forwards. */
+ if (binding->start > binding->end)
+ result = search_backward (string, binding);
+ else
+ result = search_forward (string, binding);
+
+ return result;
+}
+
+/* Search forwards or backwards for anything matching the regexp in the text
+ delimited by BINDING. The search is forwards if BINDING->start is greater
+ than BINDING->end.
+
+ If PRET is specified, it receives a copy of BINDING at the end of a
+ succeded search. Its START and END fields contain bounds of the found
+ string instance.
+*/
+long
+regexp_search (char *regexp, SEARCH_BINDING *binding, long length,
+ SEARCH_BINDING *pret)
+{
+ static char *previous_regexp = NULL;
+ static char *previous_content = NULL;
+ static int was_insensitive = 0;
+ static regex_t preg;
+ static regmatch_t *matches;
+ static int match_alloc = 0;
+ static int match_count = 0;
+ regoff_t pos;
+
+ if (previous_regexp == NULL
+ || ((binding->flags & S_FoldCase) != was_insensitive)
+ || (strcmp (previous_regexp, regexp) != 0))
+ {
+ /* need to compile a new regexp */
+ int result;
+ char *unescaped_regexp;
+ char *p, *q;
+
+ previous_content = NULL;
+
+ if (previous_regexp != NULL)
+ {
+ free (previous_regexp);
+ previous_regexp = NULL;
+ regfree (&preg);
+ }
+
+ was_insensitive = binding->flags & S_FoldCase;
+
+ /* expand the \n and \t in regexp */
+ unescaped_regexp = xmalloc (1 + strlen (regexp));
+ for (p = regexp, q = unescaped_regexp; *p != '\0'; p++, q++)
+ {
+ if (*p == '\\')
+ switch(*++p)
+ {
+ case 'n':
+ *q = '\n';
+ break;
+ case 't':
+ *q = '\t';
+ break;
+ case '\0':
+ *q = '\\';
+ p--;
+ break;
+ default:
+ *q++ = '\\';
+ *q = *p;
+ break;
+ }
+ else
+ *q = *p;
+ }
+ *q = '\0';
+
+ result = regcomp (&preg, unescaped_regexp,
+ REG_EXTENDED|
+ REG_NEWLINE|
+ (was_insensitive ? REG_ICASE : 0));
+ free (unescaped_regexp);
+
+ if (result != 0)
+ {
+ int size = regerror (result, &preg, NULL, 0);
+ char *buf = xmalloc (size);
+ regerror (result, &preg, buf, size);
+ info_error (_("regexp error: %s"), buf, NULL);
+ return -1;
+ }
+
+ previous_regexp = xstrdup(regexp);
+ }
+
+ if (previous_content != binding->buffer)
+ {
+ /* new buffer to search in, let's scan it */
+ regoff_t start = 0;
+ char saved_char;
+
+ previous_content = binding->buffer;
+ saved_char = previous_content[length-1];
+ previous_content[length-1] = '\0';
+
+ for (match_count = 0; start < length; )
+ {
+ int result = 0;
+ if (match_count >= match_alloc)
+ {
+ /* match list full. Initially allocate 256 entries, then double
+ every time we fill it */
+ match_alloc = (match_alloc > 0 ? match_alloc * 2 : 256);
+ matches = xrealloc (matches,
+ match_alloc * sizeof(regmatch_t));
+ }
+
+ result = regexec (&preg, &previous_content[start],
+ 1, &matches[match_count], 0);
+ if (result == 0)
+ {
+ if (matches[match_count].rm_eo == 0)
+ {
+ /* ignore empty matches */
+ start++;
+ }
+ else
+ {
+ matches[match_count].rm_so += start;
+ matches[match_count].rm_eo += start;
+ start = matches[match_count++].rm_eo;
+ }
+ }
+ else
+ {
+ break;
+ }
+ }
+ previous_content[length-1] = saved_char;
+ }
+
+ pos = binding->start;
+ if (pos > binding->end)
+ {
+ /* searching backward */
+ int i;
+ for (i = match_count - 1; i >= 0; i--)
+ {
+ if (matches[i].rm_so <= pos)
+ {
+ if (pret)
+ {
+ pret->buffer = binding->buffer;
+ pret->flags = binding->flags;
+ pret->start = matches[i].rm_so;
+ pret->end = matches[i].rm_eo;
+ }
+ return matches[i].rm_so;
+ }
+ }
+ }
+ else
+ {
+ /* searching forward */
+ int i;
+ for (i = 0; i < match_count; i++)
+ {
+ if (matches[i].rm_so >= pos)
+ {
+ if (pret)
+ {
+ pret->buffer = binding->buffer;
+ pret->flags = binding->flags;
+ pret->start = matches[i].rm_so;
+ pret->end = matches[i].rm_eo;
+ }
+ if (binding->flags & S_SkipDest)
+ return matches[i].rm_eo;
+ else
+ return matches[i].rm_so;
+ }
+ }
+ }
+
+ /* not found */
+ return -1;
+}
+
+/* Search forwards for STRING through the text delimited in BINDING. */
+long
+search_forward (char *string, SEARCH_BINDING *binding)
+{
+ register int c, i, len;
+ register char *buff, *end;
+ char *alternate = NULL;
+
+ len = strlen (string);
+
+ /* We match characters in the search buffer against STRING and ALTERNATE.
+ ALTERNATE is a case reversed version of STRING; this is cheaper than
+ case folding each character before comparison. Alternate is only
+ used if the case folding bit is turned on in the passed BINDING. */
+
+ if (binding->flags & S_FoldCase)
+ {
+ alternate = xstrdup (string);
+
+ for (i = 0; i < len; i++)
+ {
+ if (islower (alternate[i]))
+ alternate[i] = toupper (alternate[i]);
+ else if (isupper (alternate[i]))
+ alternate[i] = tolower (alternate[i]);
+ }
+ }
+
+ buff = binding->buffer + binding->start;
+ end = binding->buffer + binding->end + 1;
+
+ while (buff < (end - len))
+ {
+ for (i = 0; i < len; i++)
+ {
+ c = buff[i];
+
+ if ((c != string[i]) && (!alternate || c != alternate[i]))
+ break;
+ }
+
+ if (!string[i])
+ {
+ if (alternate)
+ free (alternate);
+ if (binding->flags & S_SkipDest)
+ buff += len;
+ return buff - binding->buffer;
+ }
+
+ buff++;
+ }
+
+ if (alternate)
+ free (alternate);
+
+ return -1;
+}
+
+/* Search for STRING backwards through the text delimited in BINDING. */
+long
+search_backward (char *input_string, SEARCH_BINDING *binding)
+{
+ register int c, i, len;
+ register char *buff, *end;
+ char *string;
+ char *alternate = NULL;
+
+ len = strlen (input_string);
+
+ /* Reverse the characters in the search string. */
+ string = xmalloc (1 + len);
+ for (c = 0, i = len - 1; input_string[c]; c++, i--)
+ string[i] = input_string[c];
+
+ string[c] = '\0';
+
+ /* We match characters in the search buffer against STRING and ALTERNATE.
+ ALTERNATE is a case reversed version of STRING; this is cheaper than
+ case folding each character before comparison. ALTERNATE is only
+ used if the case folding bit is turned on in the passed BINDING. */
+
+ if (binding->flags & S_FoldCase)
+ {
+ alternate = xstrdup (string);
+
+ for (i = 0; i < len; i++)
+ {
+ if (islower (alternate[i]))
+ alternate[i] = toupper (alternate[i]);
+ else if (isupper (alternate[i]))
+ alternate[i] = tolower (alternate[i]);
+ }
+ }
+
+ buff = binding->buffer + binding->start - 1;
+ end = binding->buffer + binding->end;
+
+ while (buff > (end + len))
+ {
+ for (i = 0; i < len; i++)
+ {
+ c = *(buff - i);
+
+ if (c != string[i] && (!alternate || c != alternate[i]))
+ break;
+ }
+
+ if (!string[i])
+ {
+ free (string);
+ if (alternate)
+ free (alternate);
+
+ if (binding->flags & S_SkipDest)
+ buff -= len;
+ return 1 + buff - binding->buffer;
+ }
+
+ buff--;
+ }
+
+ free (string);
+ if (alternate)
+ free (alternate);
+
+ return -1;
+}
+
+/* Find STRING in LINE, returning the offset of the end of the string.
+ Return an offset of -1 if STRING does not appear in LINE. The search
+ is bound by the end of the line (i.e., either NEWLINE or 0). */
+int
+string_in_line (char *string, char *line)
+{
+ register int end;
+ SEARCH_BINDING binding;
+
+ /* Find the end of the line. */
+ for (end = 0; line[end] && line[end] != '\n'; end++);
+
+ /* Search for STRING within these confines. */
+ binding.buffer = line;
+ binding.start = 0;
+ binding.end = end;
+ binding.flags = S_FoldCase | S_SkipDest;
+
+ return search_forward (string, &binding);
+}
+
+/* Return non-zero if STRING is the first text to appear at BINDING. */
+int
+looking_at (char *string, SEARCH_BINDING *binding)
+{
+ long search_end;
+
+ search_end = search (string, binding);
+
+ /* If the string was not found, SEARCH_END is -1. If the string was found,
+ but not right away, SEARCH_END is != binding->start. Otherwise, the
+ string was found at binding->start. */
+ return search_end == binding->start;
+}
+
+/* **************************************************************** */
+/* */
+/* Small String Searches */
+/* */
+/* **************************************************************** */
+
+/* Function names that start with "skip" are passed a string, and return
+ an offset from the start of that string. Function names that start
+ with "find" are passed a SEARCH_BINDING, and return an absolute position
+ marker of the item being searched for. "Find" functions return a value
+ of -1 if the item being looked for couldn't be found. */
+
+/* Return the index of the first non-whitespace character in STRING. */
+int
+skip_whitespace (char *string)
+{
+ register int i;
+
+ for (i = 0; string && whitespace (string[i]); i++);
+ return i;
+}
+
+/* Return the index of the first non-whitespace or newline character in
+ STRING. */
+int
+skip_whitespace_and_newlines (char *string)
+{
+ register int i;
+
+ for (i = 0; string && whitespace_or_newline (string[i]); i++);
+ return i;
+}
+
+/* Return the index of the first whitespace character in STRING. */
+int
+skip_non_whitespace (char *string)
+{
+ register int i;
+
+ for (i = 0; string && string[i] && !whitespace (string[i]); i++);
+ return i;
+}
+
+/* Return the index of the first non-node character in STRING. Note that
+ this function contains quite a bit of hair to ignore periods in some
+ special cases. This is because we here at GNU ship some info files which
+ contain nodenames that contain periods. No such nodename can start with
+ a period, or continue with whitespace, newline, or ')' immediately following
+ the period. If second argument NEWLINES_OKAY is non-zero, newlines should
+ be skipped while parsing out the nodename specification. */
+int
+skip_node_characters (char *string, int newlines_okay)
+{
+ register int c, i = 0;
+ int paren_seen = 0;
+ int paren = 0;
+
+ /* Handle special case. This is when another function has parsed out the
+ filename component of the node name, and we just want to parse out the
+ nodename proper. In that case, a period at the start of the nodename
+ indicates an empty nodename. */
+ if (string && *string == '.')
+ return 0;
+
+ if (string && *string == '(')
+ {
+ paren++;
+ paren_seen++;
+ i++;
+ }
+
+ for (; string && (c = string[i]); i++)
+ {
+ if (paren)
+ {
+ if (c == '(')
+ paren++;
+ else if (c == ')')
+ paren--;
+
+ continue;
+ }
+
+ /* If the character following the close paren is a space or period,
+ then this node name has no more characters associated with it. */
+ if (c == '\t' ||
+ c == ',' ||
+ c == INFO_TAGSEP ||
+ ((!newlines_okay) && (c == '\n')) ||
+ ((paren_seen && string[i - 1] == ')') &&
+ (c == ' ' || c == '.')) ||
+ (c == '.' &&
+ (
+#if 0
+/* This test causes a node name ending in a period, like `This.', not to
+ be found. The trailing . is stripped. This occurs in the jargon
+ file (`I see no X here.' is a node name). */
+ (!string[i + 1]) ||
+#endif
+ (whitespace_or_newline (string[i + 1])) ||
+ (string[i + 1] == ')'))))
+ break;
+ }
+ return i;
+}
+
+
+/* **************************************************************** */
+/* */
+/* Searching FILE_BUFFER's */
+/* */
+/* **************************************************************** */
+
+/* Return the absolute position of the first occurence of a node separator in
+ BINDING-buffer. The search starts at BINDING->start. Return -1 if no node
+ separator was found. */
+long
+find_node_separator (SEARCH_BINDING *binding)
+{
+ register long i;
+ char *body;
+
+ body = binding->buffer;
+
+ /* A node is started by [^L]^_[^L]\n. That is to say, the C-l's are
+ optional, but the DELETE and NEWLINE are not. This separator holds
+ true for all separated elements in an Info file, including the tags
+ table (if present) and the indirect tags table (if present). */
+ for (i = binding->start; i < binding->end - 1; i++)
+ if (((body[i] == INFO_FF && body[i + 1] == INFO_COOKIE) &&
+ (body[i + 2] == '\n' ||
+ (body[i + 2] == INFO_FF && body[i + 3] == '\n'))) ||
+ ((body[i] == INFO_COOKIE) &&
+ (body[i + 1] == '\n' ||
+ (body[i + 1] == INFO_FF && body[i + 2] == '\n'))))
+ return i;
+ return -1;
+}
+
+/* Return the length of the node separator characters that BODY is
+ currently pointing at. */
+int
+skip_node_separator (char *body)
+{
+ register int i;
+
+ i = 0;
+
+ if (body[i] == INFO_FF)
+ i++;
+
+ if (body[i++] != INFO_COOKIE)
+ return 0;
+
+ if (body[i] == INFO_FF)
+ i++;
+
+ if (body[i++] != '\n')
+ return 0;
+
+ return i;
+}
+
+/* Return the number of characters from STRING to the start of
+ the next line. */
+int
+skip_line (char *string)
+{
+ register int i;
+
+ for (i = 0; string && string[i] && string[i] != '\n'; i++);
+
+ if (string[i] == '\n')
+ i++;
+
+ return i;
+}
+
+/* Return the absolute position of the beginning of a tags table in this
+ binding starting the search at binding->start. */
+long
+find_tags_table (SEARCH_BINDING *binding)
+{
+ SEARCH_BINDING tmp_search;
+ long position;
+
+ tmp_search.buffer = binding->buffer;
+ tmp_search.start = binding->start;
+ tmp_search.end = binding->end;
+ tmp_search.flags = S_FoldCase;
+
+ while ((position = find_node_separator (&tmp_search)) != -1 )
+ {
+ tmp_search.start = position;
+ tmp_search.start += skip_node_separator (tmp_search.buffer
+ + tmp_search.start);
+
+ if (looking_at (TAGS_TABLE_BEG_LABEL, &tmp_search))
+ return position;
+ }
+ return -1;
+}
+
+/* Return the absolute position of the node named NODENAME in BINDING.
+ This is a brute force search, and we wish to avoid it when possible.
+ This function is called when a tag (indirect or otherwise) doesn't
+ really point to the right node. It returns the absolute position of
+ the separator preceding the node. */
+long
+find_node_in_binding (char *nodename, SEARCH_BINDING *binding)
+{
+ long position;
+ int offset, namelen;
+ SEARCH_BINDING tmp_search;
+
+ namelen = strlen (nodename);
+
+ tmp_search.buffer = binding->buffer;
+ tmp_search.start = binding->start;
+ tmp_search.end = binding->end;
+ tmp_search.flags = 0;
+
+ while ((position = find_node_separator (&tmp_search)) != -1)
+ {
+ tmp_search.start = position;
+ tmp_search.start += skip_node_separator
+ (tmp_search.buffer + tmp_search.start);
+
+ offset = string_in_line
+ (INFO_NODE_LABEL, tmp_search.buffer + tmp_search.start);
+
+ if (offset == -1)
+ continue;
+
+ tmp_search.start += offset;
+ tmp_search.start += skip_whitespace (tmp_search.buffer + tmp_search.start);
+ offset = skip_node_characters
+ (tmp_search.buffer + tmp_search.start, DONT_SKIP_NEWLINES);
+
+ /* Notice that this is an exact match. You cannot grovel through
+ the buffer with this function looking for random nodes. */
+ if ((offset == namelen) &&
+ (tmp_search.buffer[tmp_search.start] == nodename[0]) &&
+ (strncmp (tmp_search.buffer + tmp_search.start, nodename, offset) == 0))
+ return position;
+ }
+ return -1;
+}
diff --git a/info/search.h b/info/search.h
new file mode 100644
index 0000000..ac2ce76
--- /dev/null
+++ b/info/search.h
@@ -0,0 +1,77 @@
+/* search.h -- Structure used to search large bodies of text, with bounds.
+ $Id: search.h,v 1.8 2008/06/11 09:02:11 gray Exp $
+
+ Copyright (C) 1993, 1997, 1998, 2002, 2004, 2007
+ 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/>.
+
+ Originally written by Brian Fox (bfox@ai.mit.edu). */
+
+/* The search functions take two arguments:
+
+ 1) a string to search for, and
+
+ 2) a pointer to a SEARCH_BINDING which contains the buffer, start,
+ and end of the search.
+
+ They return a long, which is the offset from the start of the buffer
+ at which the match was found. An offset of -1 indicates failure. */
+
+#ifndef INFO_SEARCH_H
+#define INFO_SEARCH_H
+
+typedef struct {
+ char *buffer; /* The buffer of text to search. */
+ long start; /* Offset of the start of the search. */
+ long end; /* Offset of the end of the searh. */
+ int flags; /* Flags controlling the type of search. */
+} SEARCH_BINDING;
+
+#define S_FoldCase 0x01 /* Set means fold case in searches. */
+#define S_SkipDest 0x02 /* Set means return pointing after the dest. */
+
+SEARCH_BINDING *make_binding (char *buffer, long int start, long int end);
+SEARCH_BINDING *copy_binding (SEARCH_BINDING *binding);
+extern long search_forward (char *string, SEARCH_BINDING *binding);
+extern long search_backward (char *input_string, SEARCH_BINDING *binding);
+extern long search (char *string, SEARCH_BINDING *binding);
+extern long regexp_search (char *regexp, SEARCH_BINDING *binding, long length,
+ SEARCH_BINDING *pret);
+extern int looking_at (char *string, SEARCH_BINDING *binding);
+
+/* Note that STRING_IN_LINE () always returns the offset of the 1st character
+ after the string. */
+extern int string_in_line (char *string, char *line);
+
+/* Function names that start with "skip" are passed a string, and return
+ an offset from the start of that string. Function names that start
+ with "find" are passed a SEARCH_BINDING, and return an absolute position
+ marker of the item being searched for. "Find" functions return a value
+ of -1 if the item being looked for couldn't be found. */
+extern int skip_whitespace (char *string);
+extern int skip_non_whitespace (char *string);
+extern int skip_whitespace_and_newlines (char *string);
+extern int skip_line (char *string);
+extern int skip_node_characters (char *string, int newlines_okay);
+extern int skip_node_separator (char *body);
+
+#define DONT_SKIP_NEWLINES 0
+#define SKIP_NEWLINES 1
+
+extern long find_node_separator (SEARCH_BINDING *binding);
+extern long find_tags_table (SEARCH_BINDING *binding);
+extern long find_node_in_binding (char *nodename, SEARCH_BINDING *binding);
+
+#endif /* not INFO_SEARCH_H */
diff --git a/info/session.c b/info/session.c
new file mode 100644
index 0000000..6eaea61
--- /dev/null
+++ b/info/session.c
@@ -0,0 +1,5455 @@
+/* session.c -- user windowing interface to Info.
+ $Id: session.c,v 1.43 2008/06/11 17:38:33 gray Exp $
+
+ Copyright (C) 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+ 2004, 2007, 2008 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/>.
+
+ Originally written by Brian Fox (bfox@ai.mit.edu). */
+
+#include "info.h"
+#include "search.h"
+#include <sys/ioctl.h>
+
+#if defined (HAVE_SYS_TIME_H)
+# include <sys/time.h>
+# define HAVE_STRUCT_TIMEVAL
+#endif /* HAVE_SYS_TIME_H */
+
+#if defined (HANDLE_MAN_PAGES)
+# include "man.h"
+#endif
+
+static void info_clear_pending_input (void);
+static void info_set_pending_input (unsigned char key);
+static void info_handle_pointer (char *label, WINDOW *window);
+static void display_info_keyseq (int expecting_future_input);
+char *node_printed_rep (NODE *node);
+
+/* **************************************************************** */
+/* */
+/* Running an Info Session */
+/* */
+/* **************************************************************** */
+
+/* The place that we are reading input from. */
+static FILE *info_input_stream = NULL;
+
+/* The last executed command. */
+VFunction *info_last_executed_command = NULL;
+
+/* Becomes non-zero when 'q' is typed to an Info window. */
+int quit_info_immediately = 0;
+
+/* Array of structures describing for each window which nodes have been
+ visited in that window. */
+INFO_WINDOW **info_windows = NULL;
+
+/* Where to add the next window, if we need to add one. */
+static int info_windows_index = 0;
+
+/* Number of slots allocated to `info_windows'. */
+static int info_windows_slots = 0;
+
+/* Whether to use regexps or not for search. */
+static int use_regex = 1;
+
+void remember_window_and_node (WINDOW *window, NODE *node);
+void forget_window_and_nodes (WINDOW *window);
+void display_startup_message_and_start (void);
+
+/* Begin an info session finding the nodes specified by FILENAME and NODENAMES.
+ For each loaded node, create a new window. Always split the largest of the
+ available windows. */
+void
+begin_multiple_window_info_session (char *filename, char **nodenames)
+{
+ register int i;
+ WINDOW *window = NULL;
+
+ for (i = 0; nodenames[i]; i++)
+ {
+ NODE *node;
+
+ node = info_get_node (filename, nodenames[i]);
+
+ if (!node)
+ break;
+
+ /* If this is the first node, initialize the info session. */
+ if (!window)
+ {
+ initialize_info_session (node, 1);
+ window = active_window;
+ }
+ else
+ {
+ /* Find the largest window in WINDOWS, and make that be the active
+ one. Then split it and add our window and node to the list
+ of remembered windows and nodes. Then tile the windows. */
+ WINDOW *win, *largest = NULL;
+ int max_height = 0;
+
+ for (win = windows; win; win = win->next)
+ if (win->height > max_height)
+ {
+ max_height = win->height;
+ largest = win;
+ }
+
+ if (!largest)
+ {
+ display_update_display (windows);
+ info_error (msg_cant_find_window, NULL, NULL);
+ info_session ();
+ xexit (0);
+ }
+
+ active_window = largest;
+ window = window_make_window (node);
+ if (window)
+ {
+ window_tile_windows (TILE_INTERNALS);
+ remember_window_and_node (window, node);
+ }
+ else
+ {
+ display_update_display (windows);
+ info_error (msg_win_too_small, NULL, NULL);
+ info_session ();
+ xexit (0);
+ }
+ }
+ }
+ display_startup_message_and_start ();
+}
+
+/* Start an info session with INITIAL_NODE, and an error message in the echo
+ area made from FORMAT and ARG. */
+void
+begin_info_session_with_error (NODE *initial_node, const char *format,
+ void *arg1, void *arg2)
+{
+ initialize_info_session (initial_node, 1);
+ info_error (format, arg1, arg2);
+ info_session ();
+}
+
+/* Start an info session with INITIAL_NODE. */
+void
+begin_info_session (NODE *initial_node)
+{
+ initialize_info_session (initial_node, 1);
+ display_startup_message_and_start ();
+}
+
+void
+display_startup_message_and_start (void)
+{
+ char *format;
+
+ format = replace_in_documentation
+ (_("Welcome to Info version %s. Type \\[get-help-window] for help, \\[menu-item] for menu item."),
+ 0);
+
+ window_message_in_echo_area (format, VERSION, NULL);
+ info_session ();
+}
+
+/* Run an info session with an already initialized window and node. */
+void
+info_session (void)
+{
+ display_update_display (windows);
+ info_last_executed_command = NULL;
+ info_read_and_dispatch ();
+ /* On program exit, leave the cursor at the bottom of the window, and
+ restore the terminal I/O. */
+ terminal_goto_xy (0, screenheight - 1);
+ terminal_clear_to_eol ();
+ fflush (stdout);
+ terminal_unprep_terminal ();
+ close_dribble_file ();
+}
+
+/* Here is a window-location dependent event loop. Called from the
+ functions info_session (), and from read_xxx_in_echo_area (). */
+void
+info_read_and_dispatch (void)
+{
+ unsigned char key;
+ int done;
+ done = 0;
+
+ while (!done && !quit_info_immediately)
+ {
+ int lk = 0;
+
+ /* If we haven't just gone up or down a line, there is no
+ goal column for this window. */
+ if ((info_last_executed_command != (VFunction *) info_next_line) &&
+ (info_last_executed_command != (VFunction *) info_prev_line))
+ active_window->goal_column = -1;
+
+ if (echo_area_is_active)
+ {
+ lk = echo_area_last_command_was_kill;
+ echo_area_prep_read ();
+ }
+
+ if (!info_any_buffered_input_p ())
+ display_update_display (windows);
+
+ display_cursor_at_point (active_window);
+ info_initialize_numeric_arg ();
+
+ initialize_keyseq ();
+ key = info_get_input_char ();
+
+ /* No errors yet. We just read a character, that's all. Only clear
+ the echo_area if it is not currently active. */
+ if (!echo_area_is_active)
+ window_clear_echo_area ();
+
+ info_error_was_printed = 0;
+
+ /* Do the selected command. */
+ info_dispatch_on_key (key, active_window->keymap);
+
+ if (echo_area_is_active)
+ {
+ /* Echo area commands that do killing increment the value of
+ ECHO_AREA_LAST_COMMAND_WAS_KILL. Thus, if there is no
+ change in the value of this variable, the last command
+ executed was not a kill command. */
+ if (lk == echo_area_last_command_was_kill)
+ echo_area_last_command_was_kill = 0;
+
+ if (ea_last_executed_command == (VFunction *) ea_newline ||
+ info_aborted_echo_area)
+ {
+ ea_last_executed_command = NULL;
+ done = 1;
+ }
+
+ if (info_last_executed_command == (VFunction *) info_quit)
+ quit_info_immediately = 1;
+ }
+ else if (info_last_executed_command == (VFunction *) info_quit)
+ done = 1;
+ }
+}
+
+/* Found in signals.c */
+extern void initialize_info_signal_handler (void );
+
+/* Initialize the first info session by starting the terminal, window,
+ and display systems. If CLEAR_SCREEN is 0, don't clear the screen. */
+void
+initialize_info_session (NODE *node, int clear_screen)
+{
+ char *term_name = getenv ("TERM");
+ terminal_initialize_terminal (term_name);
+
+ if (terminal_is_dumb_p)
+ {
+ if (!term_name)
+ term_name = "dumb";
+
+ info_error (msg_term_too_dumb, term_name, NULL);
+ xexit (1);
+ }
+
+ if (clear_screen)
+ {
+ terminal_prep_terminal ();
+ terminal_clear_screen ();
+ }
+
+ initialize_info_keymaps ();
+ window_initialize_windows (screenwidth, screenheight);
+ initialize_info_signal_handler ();
+ display_initialize_display (screenwidth, screenheight);
+ info_set_node_of_window (0, active_window, node);
+
+ /* Tell the window system how to notify us when a window needs to be
+ asynchronously deleted (e.g., user resizes window very small). */
+ window_deletion_notifier = (VFunction *) forget_window_and_nodes;
+
+ /* If input has not been redirected yet, make it come from unbuffered
+ standard input. */
+ if (!info_input_stream)
+ {
+ setbuf (stdin, NULL);
+ info_input_stream = stdin;
+ }
+
+ info_windows_initialized_p = 1;
+}
+
+/* Tell Info that input is coming from the file FILENAME. */
+void
+info_set_input_from_file (char *filename)
+{
+ FILE *stream;
+
+ /* Input may include binary characters. */
+ stream = fopen (filename, FOPEN_RBIN);
+
+ if (!stream)
+ return;
+
+ if ((info_input_stream != NULL) &&
+ (info_input_stream != stdin))
+ fclose (info_input_stream);
+
+ info_input_stream = stream;
+
+ if (stream != stdin)
+ display_inhibited = 1;
+}
+
+/* Return the INFO_WINDOW containing WINDOW, or NULL if there isn't one. */
+static INFO_WINDOW *
+get_info_window_of_window (WINDOW *window)
+{
+ register int i;
+ INFO_WINDOW *info_win = NULL;
+
+ for (i = 0; info_windows && (info_win = info_windows[i]); i++)
+ if (info_win->window == window)
+ break;
+
+ return info_win;
+}
+
+/* Reset the remembered pagetop and point of WINDOW to WINDOW's current
+ values if the window and node are the same as the current one being
+ displayed. */
+void
+set_remembered_pagetop_and_point (WINDOW *window)
+{
+ INFO_WINDOW *info_win;
+
+ info_win = get_info_window_of_window (window);
+
+ if (!info_win)
+ return;
+
+ if (info_win->nodes_index &&
+ (info_win->nodes[info_win->current] == window->node))
+ {
+ info_win->pagetops[info_win->current] = window->pagetop;
+ info_win->points[info_win->current] = window->point;
+ }
+}
+
+void
+remember_window_and_node (WINDOW *window, NODE *node)
+{
+ /* See if we already have this window in our list. */
+ INFO_WINDOW *info_win = get_info_window_of_window (window);
+
+ /* If the window wasn't already on our list, then make a new entry. */
+ if (!info_win)
+ {
+ info_win = xmalloc (sizeof (INFO_WINDOW));
+ info_win->window = window;
+ info_win->nodes = NULL;
+ info_win->pagetops = NULL;
+ info_win->points = NULL;
+ info_win->current = 0;
+ info_win->nodes_index = 0;
+ info_win->nodes_slots = 0;
+
+ add_pointer_to_array (info_win, info_windows_index, info_windows,
+ info_windows_slots, 10, INFO_WINDOW *);
+ }
+
+ /* If this node, the current pagetop, and the current point are the
+ same as the current saved node and pagetop, don't really add this to
+ the list of history nodes. This may happen only at the very
+ beginning of the program, I'm not sure. --karl */
+ if (info_win->nodes
+ && info_win->current >= 0
+ && info_win->nodes[info_win->current]->contents == node->contents
+ && info_win->pagetops[info_win->current] == window->pagetop
+ && info_win->points[info_win->current] == window->point)
+ return;
+
+ /* Remember this node, the currently displayed pagetop, and the current
+ location of point in this window. Because we are updating pagetops
+ and points as well as nodes, it is more efficient to avoid the
+ add_pointer_to_array macro here. */
+ if (info_win->nodes_index + 2 >= info_win->nodes_slots)
+ {
+ info_win->nodes_slots += 20;
+ info_win->nodes = (NODE **) xrealloc (info_win->nodes,
+ info_win->nodes_slots * sizeof (NODE *));
+ info_win->pagetops = (int *) xrealloc (info_win->pagetops,
+ info_win->nodes_slots * sizeof (int));
+ info_win->points = (long *) xrealloc (info_win->points,
+ info_win->nodes_slots * sizeof (long));
+ }
+
+ info_win->nodes[info_win->nodes_index] = node;
+ info_win->pagetops[info_win->nodes_index] = window->pagetop;
+ info_win->points[info_win->nodes_index] = window->point;
+ info_win->current = info_win->nodes_index++;
+ info_win->nodes[info_win->nodes_index] = NULL;
+ info_win->pagetops[info_win->nodes_index] = 0;
+ info_win->points[info_win->nodes_index] = 0;
+}
+
+#define DEBUG_FORGET_WINDOW_AND_NODES
+#if defined (DEBUG_FORGET_WINDOW_AND_NODES)
+static void
+consistency_check_info_windows (void)
+{
+ register int i;
+
+ for (i = 0; i < info_windows_index; i++)
+ {
+ WINDOW *win;
+
+ for (win = windows; win; win = win->next)
+ if (win == info_windows[i]->window)
+ break;
+
+ if (!win)
+ abort ();
+ }
+}
+#endif /* DEBUG_FORGET_WINDOW_AND_NODES */
+
+/* Remove WINDOW and its associated list of nodes from INFO_WINDOWS. */
+void
+forget_window_and_nodes (WINDOW *window)
+{
+ register int i;
+ INFO_WINDOW *info_win = NULL;
+
+ for (i = 0; info_windows && (info_win = info_windows[i]); i++)
+ if (info_win->window == window)
+ break;
+
+ /* If we found the window to forget, then do so. */
+ if (info_win)
+ {
+ while (i < info_windows_index)
+ {
+ info_windows[i] = info_windows[i + 1];
+ i++;
+ }
+
+ info_windows_index--;
+ info_windows[info_windows_index] = NULL;
+
+ if (info_win->nodes)
+ {
+ /* Free the node structures which held onto internal node contents
+ here. This doesn't free the contents; we have a garbage collector
+ which does that. */
+ for (i = 0; info_win->nodes[i]; i++)
+ if (internal_info_node_p (info_win->nodes[i]))
+ free (info_win->nodes[i]);
+ free (info_win->nodes);
+
+ maybe_free (info_win->pagetops);
+ maybe_free (info_win->points);
+ }
+
+ free (info_win);
+ }
+#if defined (DEBUG_FORGET_WINDOW_AND_NODES)
+ consistency_check_info_windows ();
+#endif /* DEBUG_FORGET_WINDOW_AND_NODES */
+}
+
+/* Set WINDOW to show NODE. Remember the new window in our list of Info
+ windows. If we are doing automatic footnote display, also try to display
+ the footnotes for this window. If REMEMBER is nonzero, first call
+ set_remembered_pagetop_and_point. */
+void
+info_set_node_of_window (int remember, WINDOW *window, NODE *node)
+{
+ if (remember)
+ set_remembered_pagetop_and_point (window);
+
+ /* Put this node into the window. */
+ window_set_node_of_window (window, node);
+
+ /* Remember this node and window in our list of info windows. */
+ remember_window_and_node (window, node);
+
+ /* If doing auto-footnote display/undisplay, show the footnotes belonging
+ to this window's node. */
+ if (auto_footnotes_p)
+ info_get_or_remove_footnotes (window);
+}
+
+
+/* **************************************************************** */
+/* */
+/* Info Movement Commands */
+/* */
+/* **************************************************************** */
+
+/* Change the pagetop of WINDOW to DESIRED_TOP, perhaps scrolling the screen
+ to do so. */
+void
+set_window_pagetop (WINDOW *window, int desired_top)
+{
+ int point_line, old_pagetop;
+
+ if (desired_top < 0)
+ desired_top = 0;
+ else if (desired_top > window->line_count)
+ desired_top = window->line_count - 1;
+
+ if (window->pagetop == desired_top)
+ return;
+
+ old_pagetop = window->pagetop;
+ window->pagetop = desired_top;
+
+ /* Make sure that point appears in this window. */
+ point_line = window_line_of_point (window);
+ if ((point_line < window->pagetop) ||
+ ((point_line - window->pagetop) > window->height - 1))
+ window->point =
+ window->line_starts[window->pagetop] - window->node->contents;
+
+ window->flags |= W_UpdateWindow;
+
+ /* Find out which direction to scroll, and scroll the window in that
+ direction. Do this only if there would be a savings in redisplay
+ time. This is true if the amount to scroll is less than the height
+ of the window, and if the number of lines scrolled would be greater
+ than 10 % of the window's height. */
+ if (old_pagetop < desired_top)
+ {
+ int start, end, amount;
+
+ amount = desired_top - old_pagetop;
+
+ if ((amount >= window->height) ||
+ (((window->height - amount) * 10) < window->height))
+ return;
+
+ start = amount + window->first_row;
+ end = window->height + window->first_row;
+
+ display_scroll_display (start, end, -amount);
+ }
+ else
+ {
+ int start, end, amount;
+
+ amount = old_pagetop - desired_top;
+
+ if ((amount >= window->height) ||
+ (((window->height - amount) * 10) < window->height))
+ return;
+
+ start = window->first_row;
+ end = (window->first_row + window->height) - amount;
+ display_scroll_display (start, end, amount);
+ }
+}
+
+/* Immediately make WINDOW->point visible on the screen, and move the
+ terminal cursor there. */
+static void
+info_show_point (WINDOW *window)
+{
+ int old_pagetop;
+
+ old_pagetop = window->pagetop;
+ window_adjust_pagetop (window);
+ if (old_pagetop != window->pagetop)
+ {
+ int new_pagetop;
+
+ new_pagetop = window->pagetop;
+ window->pagetop = old_pagetop;
+ set_window_pagetop (window, new_pagetop);
+ }
+
+ if (window->flags & W_UpdateWindow)
+ display_update_one_window (window);
+
+ display_cursor_at_point (window);
+}
+
+/* Move WINDOW->point from OLD line index to NEW line index. */
+static void
+move_to_new_line (int old, int new, WINDOW *window)
+{
+ if (old == -1)
+ {
+ info_error (msg_cant_find_point, NULL, NULL);
+ }
+ else
+ {
+ int goal;
+
+ if (new >= window->line_count || new < 0)
+ return;
+
+ goal = window_get_goal_column (window);
+ window->goal_column = goal;
+
+ window->point = window->line_starts[new] - window->node->contents;
+ window->point += window_chars_to_goal (window, goal);
+ info_show_point (window);
+ }
+}
+
+static int forward_move_node_structure (WINDOW *window, int behaviour);
+static int backward_move_node_structure (WINDOW *window, int behaviour);
+
+/* Move WINDOW's point down to the next line if possible. */
+DECLARE_INFO_COMMAND (info_next_line, _("Move down to the next line"))
+{
+ int old_line, new_line;
+
+ if (count < 0)
+ info_prev_line (window, -count, key);
+ else
+ while (count)
+ {
+ int diff;
+
+ old_line = window_line_of_point (window);
+ diff = window->line_count - old_line;
+ if (diff > count)
+ diff = count;
+
+ count -= diff;
+ new_line = old_line + diff;
+ if (new_line >= window->line_count)
+ {
+ if (cursor_movement_scrolls_p)
+ {
+ if (forward_move_node_structure (window,
+ info_scroll_behaviour))
+ break;
+ move_to_new_line (0, 0, window);
+ }
+ else
+ break;
+ }
+ else
+ move_to_new_line (old_line, new_line, window);
+ }
+}
+
+/* Move WINDOW's point up to the previous line if possible. */
+DECLARE_INFO_COMMAND (info_prev_line, _("Move up to the previous line"))
+{
+ int old_line, new_line;
+
+ if (count < 0)
+ info_next_line (window, -count, key);
+ else
+ while (count)
+ {
+ int diff;
+
+ old_line = window_line_of_point (window);
+ diff = old_line + 1;
+ if (diff > count)
+ diff = count;
+
+ count -= diff;
+ new_line = old_line - diff;
+
+ if (new_line < 0
+ && cursor_movement_scrolls_p)
+ {
+ if (backward_move_node_structure (window, info_scroll_behaviour))
+ break;
+ if (window->line_count > window->height)
+ set_window_pagetop (window, window->line_count - window->height);
+ move_to_new_line (window->line_count,
+ window->line_count - 1, window);
+ }
+ else
+ move_to_new_line (old_line, new_line, window);
+ }
+}
+
+/* Return true if POINT sits on a newline character. */
+static int
+_looking_at_newline (WINDOW *win, long point)
+{
+ mbi_iterator_t iter;
+
+ mbi_init (iter, win->node->contents + point,
+ win->node->nodelen - point);
+ mbi_avail (iter);
+ return mbi_cur (iter).wc_valid && mbi_cur (iter).wc == '\n';
+}
+
+/* Advance point of WIN to the beginning of the next logical line.
+ Return 1 if there is no next line. */
+static int
+point_next_line (WINDOW *win)
+{
+ int line = window_line_of_point (win);
+ if (line + 1 >= win->line_count)
+ return 1;
+ win->point = win->line_starts[line + 1] - win->node->contents;
+ window_compute_line_map (win);
+ return 0;
+}
+
+/* Move point of WIN to the beginning of the previous logical
+ line.
+ Return 1 if there is no previous line. */
+static int
+point_prev_line (WINDOW *win)
+{
+ int line = window_line_of_point (win);
+ if (line == 0)
+ return 1;
+ win->point = win->line_starts[line - 1] - win->node->contents;
+ window_compute_line_map (win);
+ return 0;
+}
+
+/* Advance point to the next multibyte character. Return 1 if this would
+ cause pointing past the end of node buffer. */
+static int
+point_forward_char (WINDOW *win)
+{
+ long point = win->point;
+ int col;
+
+ window_compute_line_map (win);
+ col = window_point_to_column (win, point, &point) + 1;
+ if (col >= win->line_map.used)
+ {
+ if (point_next_line (win))
+ return 1;
+ col = 0;
+ }
+ win->point = win->line_map.map[col];
+ return 0;
+}
+
+/* Set point to the previous multibyte character.
+ Return 1 if already on the beginning of node buffer. */
+static int
+point_backward_char (WINDOW *win)
+{
+ long point = win->point;
+ int col;
+
+ window_compute_line_map (win);
+ col = window_point_to_column (win, point, &point);
+ for (; col >= 0 && win->line_map.map[col] == point; col--)
+ ;
+ if (col < 0)
+ {
+ if (point_prev_line (win))
+ return 1;
+ col = win->line_map.used - 1;
+ }
+ win->point = win->line_map.map[col];
+ return 0;
+}
+
+/* Skip forward any white space characters starting from column *PCOL in
+ the current line, advancing line if necessary. Return 1 if going past
+ the end of node buffer. */
+static int
+point_skip_ws_forward (WINDOW *win, int *pcol)
+{
+ mbi_iterator_t iter;
+ int col = *pcol;
+
+ while (1)
+ {
+ char *buffer = win->node->contents;
+ size_t buflen = win->node->nodelen;
+
+ for (; col < win->line_map.used; col++)
+ {
+ mbi_init (iter, buffer + win->line_map.map[col],
+ buflen - win->line_map.map[col]);
+ mbi_avail (iter);
+ if (!mbi_cur (iter).wc_valid || iswalnum (mbi_cur (iter).wc))
+ {
+ *pcol = col;
+ return 0;
+ }
+ }
+ if (point_next_line (win))
+ return 1;
+ col = 0;
+ }
+ return 1;
+}
+
+/* Skip backward any white space characters starting from column *PCOL in
+ the current line, retracting line if necessary. Return 1 if going
+ before the beginning of node buffer. */
+static int
+point_skip_ws_backward (WINDOW *win, int *pcol)
+{
+ mbi_iterator_t iter;
+ int col = *pcol;
+
+ while (1)
+ {
+ char *buffer = win->node->contents;
+ size_t buflen = win->node->nodelen;
+
+ for (; col > 0; col--)
+ {
+ mbi_init (iter, buffer + win->line_map.map[col],
+ buflen - win->line_map.map[col]);
+ mbi_avail (iter);
+ if (!mbi_cur (iter).wc_valid || iswalnum (mbi_cur (iter).wc))
+ {
+ *pcol = col;
+ return 0;
+ }
+ }
+ if (point_prev_line (win))
+ return 1;
+ col = win->line_map.used - 1;
+ }
+ return 1;
+}
+
+/* Advance window point to the beginning of the next word. Return 1
+ if there are no more words in the buffer. */
+static int
+point_forward_word (WINDOW *win)
+{
+ mbi_iterator_t iter;
+ int col;
+
+ window_compute_line_map (win);
+ col = window_point_to_column (win, win->point, &win->point);
+
+ if (point_skip_ws_forward (win, &col))
+ return 1;
+
+ while (1)
+ {
+ char *buffer = win->node->contents;
+ size_t buflen = win->node->nodelen;
+
+ for (; col < win->line_map.used; col++)
+ {
+ mbi_init (iter, buffer + win->line_map.map[col],
+ buflen - win->line_map.map[col]);
+ mbi_avail (iter);
+ if (!(mbi_cur (iter).wc_valid && iswalnum (mbi_cur (iter).wc)))
+ {
+ if (point_skip_ws_forward (win, &col))
+ return 1;
+ win->point = win->line_map.map[col];
+ return 0;
+ }
+ }
+ if (point_next_line (win))
+ return 1;
+ col = 0;
+ }
+ return 1;
+}
+
+/* Set window point to the beginning of the previous word. Return 1
+ if looking at the very first word in the buffer. */
+static int
+point_backward_word (WINDOW *win)
+{
+ mbi_iterator_t iter;
+ int col;
+
+ window_compute_line_map (win);
+ col = window_point_to_column (win, win->point, &win->point);
+
+ while (1)
+ {
+ long point;
+ char *buffer;
+ size_t buflen;
+
+ if (col <= 0)
+ {
+ if (point_prev_line (win))
+ return 1;
+ col = win->line_map.used;
+ }
+ col--;
+ if (point_skip_ws_backward (win, &col))
+ return 1;
+
+ buffer = win->node->contents;
+ buflen = win->node->nodelen;
+
+ for (; col >= 0; col--)
+ {
+ mbi_init (iter, buffer + win->line_map.map[col],
+ buflen - win->line_map.map[col]);
+ mbi_avail (iter);
+ if (!(mbi_cur (iter).wc_valid && iswalnum (mbi_cur (iter).wc)))
+ {
+ win->point = win->line_map.map[col+1];
+ return 0;
+ }
+ }
+ point = win->line_map.map[0] - 1;
+ if (point > 0 && _looking_at_newline (win, point))
+ {
+ win->point = win->line_map.map[0];
+ return 0;
+ }
+ }
+ return 1;
+}
+
+/* Move WINDOW's point to the end of the true line. */
+DECLARE_INFO_COMMAND (info_end_of_line, _("Move to the end of the line"))
+{
+ int point = window_end_of_line (window);
+ if (point != window->point)
+ {
+ window->point = point;
+ info_show_point (window);
+ }
+}
+
+/* Move WINDOW's point to the beginning of the true line. */
+DECLARE_INFO_COMMAND (info_beginning_of_line, _("Move to the start of the line"))
+{
+ int old_point = window->point;
+ int point;
+
+ while (1)
+ {
+ window_compute_line_map (window);
+ point = window->line_map.map[0];
+ if (point == 0 || _looking_at_newline (window, point-1))
+ break;
+ point_prev_line (window);
+ }
+
+ if (point != old_point)
+ {
+ window->point = point;
+ info_show_point (window);
+ }
+ else
+ window->point = old_point;
+}
+
+/* Move point forward in the node. */
+DECLARE_INFO_COMMAND (info_forward_char, _("Move forward a character"))
+{
+ if (count < 0)
+ info_backward_char (window, -count, key);
+ else
+ {
+ while (count)
+ {
+ if (point_forward_char (window))
+ {
+ if (cursor_movement_scrolls_p
+ && forward_move_node_structure (window,
+ info_scroll_behaviour) == 0)
+ window->point = 0;
+ else
+ {
+ window->point = window->node->nodelen - 1;
+ break;
+ }
+ }
+ count--;
+ }
+ info_show_point (window);
+ }
+}
+
+/* Move point backward in the node. */
+DECLARE_INFO_COMMAND (info_backward_char, _("Move backward a character"))
+{
+ if (count < 0)
+ info_forward_char (window, -count, key);
+ else
+ {
+ while (count)
+ {
+ if (point_backward_char (window))
+ {
+ if (cursor_movement_scrolls_p
+ && backward_move_node_structure (window,
+ info_scroll_behaviour) == 0)
+ {
+ window->point = window->node->nodelen - 1;
+ if (window->line_count > window->height)
+ set_window_pagetop (window,
+ window->line_count - window->height);
+ }
+ else
+ {
+ window->point = 0;
+ break;
+ }
+ }
+ count--;
+ }
+ info_show_point (window);
+ }
+}
+
+/* Move forward a word in this node. */
+DECLARE_INFO_COMMAND (info_forward_word, _("Move forward a word"))
+{
+ if (count < 0)
+ {
+ info_backward_word (window, -count, key);
+ return;
+ }
+
+ while (count)
+ {
+ if (point_forward_word (window))
+ {
+ if (cursor_movement_scrolls_p
+ && forward_move_node_structure (window,
+ info_scroll_behaviour) == 0)
+ window->point = 0;
+ else
+ return;
+ }
+ --count;
+ }
+ info_show_point (window);
+}
+
+DECLARE_INFO_COMMAND (info_backward_word, _("Move backward a word"))
+{
+ if (count < 0)
+ {
+ info_forward_word (window, -count, key);
+ return;
+ }
+
+ while (count)
+ {
+ if (point_backward_word (window))
+ {
+ if (cursor_movement_scrolls_p
+ && backward_move_node_structure (window,
+ info_scroll_behaviour) == 0)
+ {
+ if (window->line_count > window->height)
+ set_window_pagetop (window,
+ window->line_count - window->height);
+ window->point = window->node->nodelen;
+ }
+ else
+ break;
+ }
+ --count;
+ }
+ info_show_point (window);
+}
+
+/* Variable controlling the behaviour of default scrolling when you are
+ already at the bottom of a node. Possible values are defined in session.h.
+ The meanings are:
+
+ IS_Continuous Try to get first menu item, or failing that, the
+ "Next:" pointer, or failing that, the "Up:" and
+ "Next:" of the up.
+ IS_NextOnly Try to get "Next:" menu item.
+ IS_PageOnly Simply give up at the bottom of a node. */
+
+int info_scroll_behaviour = IS_Continuous;
+
+/* Choices used by the completer when reading a value for the user-visible
+ variable "scroll-behaviour". */
+char *info_scroll_choices[] = {
+ "Continuous", "Next Only", "Page Only", NULL
+};
+
+/* Controls whether scroll-behavior affects line movement commands */
+int cursor_movement_scrolls_p = 1;
+
+/* Choices for the scroll-last-node variable */
+char *scroll_last_node_choices[] = {
+ "Stop", "Scroll", "Top", NULL
+};
+
+/* Controls what to do when a scrolling command is issued at the end of the
+ last node. */
+int scroll_last_node = SLN_Stop;
+
+/* Default window sizes for scrolling commands. */
+int default_window_size = -1; /* meaning 1 window-full */
+int default_scroll_size = -1; /* meaning half screen size */
+
+#define INFO_LABEL_FOUND() \
+ (info_parsed_nodename || (info_parsed_filename \
+ && !is_dir_name (info_parsed_filename)))
+
+static int
+last_node_p (NODE *node)
+{
+ info_next_label_of_node (node);
+ if (!INFO_LABEL_FOUND ())
+ {
+ info_up_label_of_node (node);
+ return !INFO_LABEL_FOUND () || strcmp (info_parsed_nodename, "Top") == 0;
+ }
+ return 0;
+}
+
+/* Move to 1st menu item, Next, Up/Next, or error in this window. */
+static int
+forward_move_node_structure (WINDOW *window, int behaviour)
+{
+ switch (behaviour)
+ {
+ case IS_PageOnly:
+ info_error (msg_at_node_bottom, NULL, NULL);
+ return 1;
+
+ case IS_NextOnly:
+ info_next_label_of_node (window->node);
+ if (!info_parsed_nodename && !info_parsed_filename)
+ {
+ info_error (msg_no_pointer, (char *) _("Next"), NULL);
+ return 1;
+ }
+ else
+ {
+ info_handle_pointer ("Next", window);
+ }
+ break;
+
+ case IS_Continuous:
+ {
+ if (last_node_p (window->node))
+ {
+ switch (scroll_last_node)
+ {
+ case SLN_Stop:
+ info_error (_("No more nodes within this document."),
+ NULL, NULL);
+ return 1;
+
+ case SLN_Scroll:
+ break;
+
+ case SLN_Top:
+ info_top_node (window, 1, 0);
+ return 0;
+
+ default:
+ abort ();
+ }
+ }
+
+ /* First things first. If this node contains a menu, move down
+ into the menu. */
+ {
+ REFERENCE **menu;
+
+ menu = info_menu_of_node (window->node);
+
+ if (menu)
+ {
+ info_free_references (menu);
+ info_menu_digit (window, 1, '1');
+ return 0;
+ }
+ }
+
+ /* Okay, this node does not contain a menu. If it contains a
+ "Next:" pointer, use that. */
+ info_next_label_of_node (window->node);
+ if (INFO_LABEL_FOUND ())
+ {
+ info_handle_pointer ("Next", window);
+ return 0;
+ }
+
+ /* Okay, there wasn't a "Next:" for this node. Move "Up:" until we
+ can move "Next:". If that isn't possible, complain that there
+ are no more nodes. */
+ {
+ int up_counter, old_current;
+ INFO_WINDOW *info_win;
+
+ /* Remember the current node and location. */
+ info_win = get_info_window_of_window (window);
+ old_current = info_win->current;
+
+ /* Back up through the "Up:" pointers until we have found a "Next:"
+ that isn't the same as the first menu item found in that node. */
+ up_counter = 0;
+ while (!info_error_was_printed)
+ {
+ info_up_label_of_node (window->node);
+ if (INFO_LABEL_FOUND ())
+ {
+ info_handle_pointer ("Up", window);
+ if (info_error_was_printed)
+ continue;
+
+ up_counter++;
+
+ info_next_label_of_node (window->node);
+
+ /* If no "Next" pointer, keep backing up. */
+ if (!INFO_LABEL_FOUND ())
+ continue;
+
+ /* If this node's first menu item is the same as this node's
+ Next pointer, keep backing up. */
+ if (!info_parsed_filename)
+ {
+ REFERENCE **menu;
+ char *next_nodename;
+
+ /* Remember the name of the Next node, since reading
+ the menu can overwrite the contents of the
+ info_parsed_xxx strings. */
+ next_nodename = xstrdup (info_parsed_nodename);
+
+ menu = info_menu_of_node (window->node);
+ if (menu &&
+ (strcmp
+ (menu[0]->nodename, next_nodename) == 0))
+ {
+ info_free_references (menu);
+ free (next_nodename);
+ continue;
+ }
+ else
+ {
+ /* Restore the world to where it was before
+ reading the menu contents. */
+ info_free_references (menu);
+ free (next_nodename);
+ info_next_label_of_node (window->node);
+ }
+ }
+
+ /* This node has a "Next" pointer, and it is not the
+ same as the first menu item found in this node. */
+ info_handle_pointer ("Next", window);
+ return 0;
+ }
+ else
+ {
+ /* No more "Up" pointers. Print an error, and call it
+ quits. */
+ register int i;
+
+ for (i = 0; i < up_counter; i++)
+ {
+ info_win->nodes_index--;
+ free (info_win->nodes[info_win->nodes_index]);
+ info_win->nodes[info_win->nodes_index] = NULL;
+ }
+ info_win->current = old_current;
+ window->node = info_win->nodes[old_current];
+ window->pagetop = info_win->pagetops[old_current];
+ window->point = info_win->points[old_current];
+ recalculate_line_starts (window);
+ window->flags |= W_UpdateWindow;
+ info_error (_("No more nodes within this document."),
+ NULL, NULL);
+ return 1;
+ }
+ }
+ }
+ break;
+ }
+ }
+ return info_error_was_printed; /*FIXME*/
+}
+
+/* Move Prev, Up or error in WINDOW depending on BEHAVIOUR. */
+static int
+backward_move_node_structure (WINDOW *window, int behaviour)
+{
+ switch (behaviour)
+ {
+ case IS_PageOnly:
+ info_error (msg_at_node_top, NULL, NULL);
+ return 1;
+
+ case IS_NextOnly:
+ info_prev_label_of_node (window->node);
+ if (!info_parsed_nodename && !info_parsed_filename)
+ {
+ info_error (_("No `Prev' for this node."), NULL, NULL);
+ return 1;
+ }
+ else
+ {
+ info_handle_pointer ("Prev", window);
+ }
+ break;
+
+ case IS_Continuous:
+ info_prev_label_of_node (window->node);
+
+ if (!info_parsed_nodename && (!info_parsed_filename
+ || is_dir_name (info_parsed_filename)))
+ {
+ info_up_label_of_node (window->node);
+ if (!info_parsed_nodename && (!info_parsed_filename
+ || is_dir_name (info_parsed_filename)))
+ {
+ info_error (
+ _("No `Prev' or `Up' for this node within this document."),
+ NULL, NULL);
+ return 1;
+ }
+ else
+ {
+ info_handle_pointer ("Up", window);
+ }
+ }
+ else
+ {
+ REFERENCE **menu;
+ int inhibit_menu_traversing = 0;
+
+ /* Watch out! If this node's Prev is the same as the Up, then
+ move Up. Otherwise, we could move Prev, and then to the last
+ menu item in the Prev. This would cause the user to loop
+ through a subsection of the info file. */
+ if (!info_parsed_filename && info_parsed_nodename)
+ {
+ char *pnode;
+
+ pnode = xstrdup (info_parsed_nodename);
+ info_up_label_of_node (window->node);
+
+ if (!info_parsed_filename && info_parsed_nodename &&
+ strcmp (info_parsed_nodename, pnode) == 0)
+ {
+ /* The nodes are the same. Inhibit moving to the last
+ menu item. */
+ free (pnode);
+ inhibit_menu_traversing = 1;
+ }
+ else
+ {
+ free (pnode);
+ info_prev_label_of_node (window->node);
+ }
+ }
+
+ /* Move to the previous node. If this node now contains a menu,
+ and we have not inhibited movement to it, move to the node
+ corresponding to the last menu item. */
+ info_handle_pointer ("Prev", window);
+
+ if (!inhibit_menu_traversing)
+ {
+ while (!info_error_was_printed &&
+ (menu = info_menu_of_node (window->node)))
+ {
+ info_free_references (menu);
+ info_menu_digit (window, 1, '0');
+ }
+ }
+ }
+ break;
+ }
+ return 0;
+}
+
+/* Move continuously forward through the node structure of this info file. */
+DECLARE_INFO_COMMAND (info_global_next_node,
+ _("Move forwards or down through node structure"))
+{
+ if (count < 0)
+ info_global_prev_node (window, -count, key);
+ else
+ {
+ while (count && !info_error_was_printed)
+ {
+ forward_move_node_structure (window, IS_Continuous);
+ count--;
+ }
+ }
+}
+
+/* Move continuously backward through the node structure of this info file. */
+DECLARE_INFO_COMMAND (info_global_prev_node,
+ _("Move backwards or up through node structure"))
+{
+ if (count < 0)
+ info_global_next_node (window, -count, key);
+ else
+ {
+ while (count && !info_error_was_printed)
+ {
+ backward_move_node_structure (window, IS_Continuous);
+ count--;
+ }
+ }
+}
+
+static void _scroll_forward(WINDOW *window, int count,
+ unsigned char key, int behaviour);
+static void _scroll_backward(WINDOW *window, int count,
+ unsigned char key, int behaviour);
+
+static void
+_scroll_forward(WINDOW *window, int count, unsigned char key, int behaviour)
+{
+ if (count < 0)
+ _scroll_backward (window, -count, key, behaviour);
+ else
+ {
+ int desired_top;
+
+ /* Without an explicit numeric argument, scroll the bottom two
+ lines to the top of this window, Or, if at bottom of window,
+ and the chosen behaviour is to scroll through nodes get the
+ "Next" node for this window. */
+ if (default_window_size > 0)
+ desired_top = window->pagetop + default_window_size;
+ else if (!info_explicit_arg && count == 1)
+ {
+ desired_top = window->pagetop + (window->height - 2);
+
+ /* If there are no more lines to scroll here, error, or get
+ another node, depending on BEHAVIOUR. */
+ if (desired_top > window->line_count)
+ {
+ if (forward_move_node_structure (window, behaviour))
+ info_end_of_node (window, 1, 0);
+ return;
+ }
+ }
+ else
+ desired_top = window->pagetop + count;
+
+ if (desired_top >= window->line_count)
+ desired_top = window->line_count - 2;
+
+ if (window->pagetop > desired_top)
+ return;
+ else
+ set_window_pagetop (window, desired_top);
+ }
+}
+
+static void
+_scroll_backward(WINDOW *window, int count, unsigned char key, int behaviour)
+{
+ if (count < 0)
+ _scroll_forward (window, -count, key, behaviour);
+ else
+ {
+ int desired_top;
+
+ /* Without an explicit numeric argument, scroll the top two lines
+ to the bottom of this window, or, depending on the selected
+ behaviour, move to the previous, or Up'th node. */
+ if (default_window_size > 0)
+ desired_top = window->pagetop - default_window_size;
+ else if (!info_explicit_arg && count == 1)
+ {
+ desired_top = window->pagetop - (window->height - 2);
+
+ if ((desired_top < 0) && (window->pagetop == 0))
+ {
+ if ((backward_move_node_structure (window, behaviour) == 0)
+ && (cursor_movement_scrolls_p))
+ info_end_of_node (window, 1, 0);
+ window->point = (window->line_starts[window->pagetop]
+ - window->node->contents);
+ return;
+ }
+ }
+ else
+ desired_top = window->pagetop - count;
+
+ if (desired_top < 0)
+ desired_top = 0;
+
+ set_window_pagetop (window, desired_top);
+ window->point = (window->line_starts[window->pagetop]
+ - window->node->contents);
+ }
+}
+
+/* Show the next screen of WINDOW's node. */
+DECLARE_INFO_COMMAND (info_scroll_forward, _("Scroll forward in this window"))
+{
+ _scroll_forward (window, count, key, info_scroll_behaviour);
+}
+
+/* Like info_scroll_forward, but sets default_window_size as a side
+ effect. */
+DECLARE_INFO_COMMAND (info_scroll_forward_set_window,
+ _("Scroll forward in this window and set default window size"))
+{
+ if (info_explicit_arg)
+ default_window_size = count;
+ _scroll_forward (window, count, key, info_scroll_behaviour);
+}
+
+/* Show the next screen of WINDOW's node but never advance to next node. */
+DECLARE_INFO_COMMAND (info_scroll_forward_page_only, _("Scroll forward in this window staying within node"))
+{
+ _scroll_forward (window, count, key, IS_PageOnly);
+}
+
+/* Like info_scroll_forward_page_only, but sets default_window_size as a side
+ effect. */
+DECLARE_INFO_COMMAND (info_scroll_forward_page_only_set_window,
+ _("Scroll forward in this window staying within node and set default window size"))
+{
+ if (info_explicit_arg)
+ default_window_size = count;
+ _scroll_forward (window, count, key, IS_PageOnly);
+}
+
+/* Show the previous screen of WINDOW's node. */
+DECLARE_INFO_COMMAND (info_scroll_backward, _("Scroll backward in this window"))
+{
+ _scroll_backward (window, count, key, info_scroll_behaviour);
+}
+
+/* Like info_scroll_backward, but sets default_window_size as a side
+ effect. */
+DECLARE_INFO_COMMAND (info_scroll_backward_set_window,
+ _("Scroll backward in this window and set default window size"))
+{
+ if (info_explicit_arg)
+ default_window_size = count;
+ _scroll_backward (window, count, key, info_scroll_behaviour);
+}
+
+/* Show the previous screen of WINDOW's node but never move to previous
+ node. */
+DECLARE_INFO_COMMAND (info_scroll_backward_page_only, _("Scroll backward in this window staying within node"))
+{
+ _scroll_backward (window, count, key, IS_PageOnly);
+}
+
+/* Like info_scroll_backward_page_only, but sets default_window_size as a side
+ effect. */
+DECLARE_INFO_COMMAND (info_scroll_backward_page_only_set_window,
+ _("Scroll backward in this window staying within node and set default window size"))
+{
+ if (info_explicit_arg)
+ default_window_size = count;
+ _scroll_backward (window, count, key, IS_PageOnly);
+}
+
+/* Move to the beginning of the node. */
+DECLARE_INFO_COMMAND (info_beginning_of_node, _("Move to the start of this node"))
+{
+ window->pagetop = window->point = 0;
+ window->flags |= W_UpdateWindow;
+}
+
+/* Move to the end of the node. */
+DECLARE_INFO_COMMAND (info_end_of_node, _("Move to the end of this node"))
+{
+ window->point = window->node->nodelen - 1;
+ info_show_point (window);
+}
+
+/* Scroll the window forward by N lines. */
+DECLARE_INFO_COMMAND (info_down_line, _("Scroll down by lines"))
+{
+ if (count < 0)
+ info_up_line (window, -count, key);
+ else
+ {
+ int desired_top = window->pagetop + count;
+
+ if (desired_top >= window->line_count)
+ desired_top = window->line_count - 2;
+
+ if (window->pagetop <= desired_top)
+ set_window_pagetop (window, desired_top);
+ }
+}
+
+/* Scroll the window backward by N lines. */
+DECLARE_INFO_COMMAND (info_up_line, _("Scroll up by lines"))
+{
+ if (count < 0)
+ info_down_line (window, -count, key);
+ else
+ {
+ int desired_top = window->pagetop - count;
+
+ if (desired_top < 0)
+ desired_top = 0;
+
+ set_window_pagetop (window, desired_top);
+ }
+}
+
+/* Scroll the window forward by N lines and remember N as default for
+ subsequent commands. */
+DECLARE_INFO_COMMAND (info_scroll_half_screen_down,
+ _("Scroll down by half screen size"))
+{
+ if (count < 0)
+ info_scroll_half_screen_up (window, -count, key);
+ else
+ {
+ int scroll_size = (the_screen->height + 1) / 2;
+ int desired_top;
+
+ if (info_explicit_arg)
+ default_scroll_size = count;
+ if (default_scroll_size > 0)
+ scroll_size = default_scroll_size;
+
+ desired_top = window->pagetop + scroll_size;
+ if (desired_top >= window->line_count)
+ desired_top = window->line_count - 2;
+
+ if (window->pagetop <= desired_top)
+ set_window_pagetop (window, desired_top);
+ }
+}
+
+/* Scroll the window backward by N lines and remember N as default for
+ subsequent commands. */
+DECLARE_INFO_COMMAND (info_scroll_half_screen_up,
+ _("Scroll up by half screen size"))
+{
+ if (count < 0)
+ info_scroll_half_screen_down (window, -count, key);
+ else
+ {
+ int scroll_size = (the_screen->height + 1) / 2;
+ int desired_top;
+
+ if (info_explicit_arg)
+ default_scroll_size = count;
+ if (default_scroll_size > 0)
+ scroll_size = default_scroll_size;
+
+ desired_top = window->pagetop - scroll_size;
+ if (desired_top < 0)
+ desired_top = 0;
+
+ set_window_pagetop (window, desired_top);
+ }
+}
+
+/* **************************************************************** */
+/* */
+/* Commands for Manipulating Windows */
+/* */
+/* **************************************************************** */
+
+/* Make the next window in the chain be the active window. */
+DECLARE_INFO_COMMAND (info_next_window, _("Select the next window"))
+{
+ if (count < 0)
+ {
+ info_prev_window (window, -count, key);
+ return;
+ }
+
+ /* If no other window, error now. */
+ if (!windows->next && !echo_area_is_active)
+ {
+ info_error (msg_one_window, NULL, NULL);
+ return;
+ }
+
+ while (count--)
+ {
+ if (window->next)
+ window = window->next;
+ else
+ {
+ if (window == the_echo_area || !echo_area_is_active)
+ window = windows;
+ else
+ window = the_echo_area;
+ }
+ }
+
+ if (active_window != window)
+ {
+ if (auto_footnotes_p)
+ info_get_or_remove_footnotes (window);
+
+ window->flags |= W_UpdateWindow;
+ active_window = window;
+ }
+}
+
+/* Make the previous window in the chain be the active window. */
+DECLARE_INFO_COMMAND (info_prev_window, _("Select the previous window"))
+{
+ if (count < 0)
+ {
+ info_next_window (window, -count, key);
+ return;
+ }
+
+ /* Only one window? */
+
+ if (!windows->next && !echo_area_is_active)
+ {
+ info_error (msg_one_window, NULL, NULL);
+ return;
+ }
+
+ while (count--)
+ {
+ /* If we are in the echo area, or if the echo area isn't active and we
+ are in the first window, find the last window in the chain. */
+ if (window == the_echo_area ||
+ (window == windows && !echo_area_is_active))
+ {
+ register WINDOW *win, *last = NULL;
+
+ for (win = windows; win; win = win->next)
+ last = win;
+
+ window = last;
+ }
+ else
+ {
+ if (window == windows)
+ window = the_echo_area;
+ else
+ window = window->prev;
+ }
+ }
+
+ if (active_window != window)
+ {
+ if (auto_footnotes_p)
+ info_get_or_remove_footnotes (window);
+
+ window->flags |= W_UpdateWindow;
+ active_window = window;
+ }
+}
+
+/* Split WINDOW into two windows, both showing the same node. If we
+ are automatically tiling windows, re-tile after the split. */
+DECLARE_INFO_COMMAND (info_split_window, _("Split the current window"))
+{
+ WINDOW *split, *old_active;
+ int pagetop;
+
+ /* Remember the current pagetop of the window being split. If it doesn't
+ change, we can scroll its contents around after the split. */
+ pagetop = window->pagetop;
+
+ /* Make the new window. */
+ old_active = active_window;
+ active_window = window;
+ split = window_make_window (window->node);
+ active_window = old_active;
+
+ if (!split)
+ {
+ info_error (msg_win_too_small, NULL, NULL);
+ }
+ else
+ {
+#if defined (SPLIT_BEFORE_ACTIVE)
+ /* Try to scroll the old window into its new postion. */
+ if (pagetop == window->pagetop)
+ {
+ int start, end, amount;
+
+ start = split->first_row;
+ end = start + window->height;
+ amount = split->height + 1;
+ display_scroll_display (start, end, amount);
+ }
+#else /* !SPLIT_BEFORE_ACTIVE */
+ /* Make sure point still appears in the active window. */
+ info_show_point (window);
+#endif /* !SPLIT_BEFORE_ACTIVE */
+
+ /* If the window just split was one internal to Info, try to display
+ something else in it. */
+ if (internal_info_node_p (split->node))
+ {
+ register int i, j;
+ INFO_WINDOW *iw;
+ NODE *node = NULL;
+ char *filename;
+
+ for (i = 0; (iw = info_windows[i]); i++)
+ {
+ for (j = 0; j < iw->nodes_index; j++)
+ if (!internal_info_node_p (iw->nodes[j]))
+ {
+ if (iw->nodes[j]->parent)
+ filename = iw->nodes[j]->parent;
+ else
+ filename = iw->nodes[j]->filename;
+
+ node = info_get_node (filename, iw->nodes[j]->nodename);
+ if (node)
+ {
+ window_set_node_of_window (split, node);
+ i = info_windows_index - 1;
+ break;
+ }
+ }
+ }
+ }
+ split->pagetop = window->pagetop;
+
+ if (auto_tiling_p)
+ window_tile_windows (DONT_TILE_INTERNALS);
+ else
+ window_adjust_pagetop (split);
+
+ remember_window_and_node (split, split->node);
+ }
+}
+
+/* Delete WINDOW, forgetting the list of last visited nodes. If we are
+ automatically displaying footnotes, show or remove the footnotes
+ window. If we are automatically tiling windows, re-tile after the
+ deletion. */
+DECLARE_INFO_COMMAND (info_delete_window, _("Delete the current window"))
+{
+ if (!windows->next)
+ {
+ info_error (msg_cant_kill_last, NULL, NULL);
+ }
+ else if (window->flags & W_WindowIsPerm)
+ {
+ info_error (_("Cannot delete a permanent window"), NULL, NULL);
+ }
+ else
+ {
+ info_delete_window_internal (window);
+
+ if (auto_footnotes_p)
+ info_get_or_remove_footnotes (active_window);
+
+ if (auto_tiling_p)
+ window_tile_windows (DONT_TILE_INTERNALS);
+ }
+}
+
+/* Do the physical deletion of WINDOW, and forget this window and
+ associated nodes. */
+void
+info_delete_window_internal (WINDOW *window)
+{
+ if (windows->next && ((window->flags & W_WindowIsPerm) == 0))
+ {
+ /* We not only delete the window from the display, we forget it from
+ our list of remembered windows. */
+ forget_window_and_nodes (window);
+ window_delete_window (window);
+
+ if (echo_area_is_active)
+ echo_area_inform_of_deleted_window (window);
+ }
+}
+
+/* Just keep WINDOW, deleting all others. */
+DECLARE_INFO_COMMAND (info_keep_one_window, _("Delete all other windows"))
+{
+ int num_deleted; /* The number of windows we deleted. */
+ int pagetop, start, end;
+
+ /* Remember a few things about this window. We may be able to speed up
+ redisplay later by scrolling its contents. */
+ pagetop = window->pagetop;
+ start = window->first_row;
+ end = start + window->height;
+
+ num_deleted = 0;
+
+ while (1)
+ {
+ WINDOW *win;
+
+ /* Find an eligible window and delete it. If no eligible windows
+ are found, we are done. A window is eligible for deletion if
+ is it not permanent, and it is not WINDOW. */
+ for (win = windows; win; win = win->next)
+ if (win != window && ((win->flags & W_WindowIsPerm) == 0))
+ break;
+
+ if (!win)
+ break;
+
+ info_delete_window_internal (win);
+ num_deleted++;
+ }
+
+ /* Scroll the contents of this window into the right place so that the
+ user doesn't have to wait any longer than necessary for redisplay. */
+ if (num_deleted)
+ {
+ int amount;
+
+ amount = (window->first_row - start);
+ amount -= (window->pagetop - pagetop);
+ display_scroll_display (start, end, amount);
+ }
+
+ window->flags |= W_UpdateWindow;
+}
+
+/* Scroll the "other" window of WINDOW. */
+DECLARE_INFO_COMMAND (info_scroll_other_window, _("Scroll the other window"))
+{
+ WINDOW *other;
+
+ /* If only one window, give up. */
+ if (!windows->next)
+ {
+ info_error (msg_one_window, NULL, NULL);
+ return;
+ }
+
+ other = window->next;
+
+ if (!other)
+ other = window->prev;
+
+ info_scroll_forward (other, count, key);
+}
+
+/* Scroll the "other" window of WINDOW. */
+DECLARE_INFO_COMMAND (info_scroll_other_window_backward,
+ _("Scroll the other window backward"))
+{
+ info_scroll_other_window (window, -count, key);
+}
+
+/* Change the size of WINDOW by AMOUNT. */
+DECLARE_INFO_COMMAND (info_grow_window, _("Grow (or shrink) this window"))
+{
+ window_change_window_height (window, count);
+}
+
+/* When non-zero, tiling takes place automatically when info_split_window
+ is called. */
+int auto_tiling_p = 0;
+
+/* Tile all of the visible windows. */
+DECLARE_INFO_COMMAND (info_tile_windows,
+ _("Divide the available screen space among the visible windows"))
+{
+ window_tile_windows (TILE_INTERNALS);
+}
+
+/* Toggle the state of this window's wrapping of lines. */
+DECLARE_INFO_COMMAND (info_toggle_wrap,
+ _("Toggle the state of line wrapping in the current window"))
+{
+ window_toggle_wrap (window);
+}
+
+/* Toggle the usage of regular expressions in searches. */
+DECLARE_INFO_COMMAND (info_toggle_regexp,
+ _("Toggle the usage of regular expressions in searches"))
+{
+ use_regex = 1 - use_regex;
+ window_message_in_echo_area (use_regex
+ ? _("Using regular expressions for searches.")
+ : _("Using literal strings for searches."),
+ NULL, NULL);
+}
+
+/* **************************************************************** */
+/* */
+/* Info Node Commands */
+/* */
+/* **************************************************************** */
+
+/* Return (FILENAME)NODENAME for NODE, or just NODENAME if NODE's
+ filename is not set. */
+char *
+node_printed_rep (NODE *node)
+{
+ char *rep;
+
+ if (node->filename)
+ {
+ char *filename
+ = filename_non_directory (node->parent ? node->parent : node->filename);
+ rep = xmalloc (1 + strlen (filename) + 1 + strlen (node->nodename) + 1);
+ sprintf (rep, "(%s)%s", filename, node->nodename);
+ }
+ else
+ rep = node->nodename;
+
+ return rep;
+}
+
+
+/* Using WINDOW for various defaults, select the node referenced by ENTRY
+ in it. If the node is selected, the window and node are remembered. */
+void
+info_select_reference (WINDOW *window, REFERENCE *entry)
+{
+ NODE *node;
+ char *filename, *nodename, *file_system_error;
+
+ file_system_error = NULL;
+
+ filename = entry->filename;
+ if (!filename)
+ filename = window->node->parent;
+ if (!filename)
+ filename = window->node->filename;
+
+ if (filename)
+ filename = xstrdup (filename);
+
+ if (entry->nodename)
+ nodename = xstrdup (entry->nodename);
+ else
+ nodename = xstrdup ("Top");
+
+ node = info_get_node (filename, nodename);
+
+ /* Try something a little weird. If the node couldn't be found, and the
+ reference was of the form "foo::", see if the entry->label can be found
+ as a file, with a node of "Top". */
+ if (!node)
+ {
+ if (info_recent_file_error)
+ file_system_error = xstrdup (info_recent_file_error);
+
+ if (entry->nodename && (strcmp (entry->nodename, entry->label) == 0))
+ {
+ node = info_get_node (entry->label, "Top");
+ if (!node && info_recent_file_error)
+ {
+ maybe_free (file_system_error);
+ file_system_error = xstrdup (info_recent_file_error);
+ }
+ }
+ }
+
+ if (!node)
+ {
+ if (file_system_error)
+ info_error (file_system_error, NULL, NULL);
+ else
+ info_error (msg_cant_find_node, nodename, NULL);
+ }
+
+ maybe_free (file_system_error);
+ maybe_free (filename);
+ maybe_free (nodename);
+
+ if (node)
+ info_set_node_of_window (1, window, node);
+}
+
+/* Parse the node specification in LINE using WINDOW to default the filename.
+ Select the parsed node in WINDOW and remember it, or error if the node
+ couldn't be found. */
+static void
+info_parse_and_select (char *line, WINDOW *window)
+{
+ REFERENCE entry;
+
+ info_parse_node (line, DONT_SKIP_NEWLINES);
+
+ entry.nodename = info_parsed_nodename;
+ entry.filename = info_parsed_filename;
+ entry.label = "*info-parse-and-select*";
+
+ info_select_reference (window, &entry);
+}
+
+/* Given that the values of INFO_PARSED_FILENAME and INFO_PARSED_NODENAME
+ are previously filled, try to get the node represented by them into
+ WINDOW. The node should have been pointed to by the LABEL pointer of
+ WINDOW->node. */
+static void
+info_handle_pointer (char *label, WINDOW *window)
+{
+ if (info_parsed_filename || info_parsed_nodename)
+ {
+ char *filename, *nodename;
+ NODE *node;
+
+ filename = nodename = NULL;
+
+ if (info_parsed_filename)
+ filename = xstrdup (info_parsed_filename);
+ else
+ {
+ if (window->node->parent)
+ filename = xstrdup (window->node->parent);
+ else if (window->node->filename)
+ filename = xstrdup (window->node->filename);
+ }
+
+ if (info_parsed_nodename)
+ nodename = xstrdup (info_parsed_nodename);
+ else
+ nodename = xstrdup ("Top");
+
+ node = info_get_node (filename, nodename);
+
+ if (node)
+ {
+ INFO_WINDOW *info_win;
+
+ info_win = get_info_window_of_window (window);
+ if (info_win)
+ {
+ info_win->pagetops[info_win->current] = window->pagetop;
+ info_win->points[info_win->current] = window->point;
+ }
+ info_set_node_of_window (1, window, node);
+ }
+ else
+ {
+ if (info_recent_file_error)
+ info_error (info_recent_file_error, NULL, NULL);
+ else
+ info_error (msg_cant_file_node, filename, nodename);
+ }
+
+ free (filename);
+ free (nodename);
+ }
+ else
+ {
+ info_error (msg_no_pointer, label, NULL);
+ }
+}
+
+/* Make WINDOW display the "Next:" node of the node currently being
+ displayed. */
+DECLARE_INFO_COMMAND (info_next_node, _("Select the Next node"))
+{
+ info_next_label_of_node (window->node);
+ info_handle_pointer ("Next", window);
+}
+
+/* Make WINDOW display the "Prev:" node of the node currently being
+ displayed. */
+DECLARE_INFO_COMMAND (info_prev_node, _("Select the Prev node"))
+{
+ info_prev_label_of_node (window->node);
+ info_handle_pointer ("Prev", window);
+}
+
+/* Make WINDOW display the "Up:" node of the node currently being
+ displayed. */
+DECLARE_INFO_COMMAND (info_up_node, _("Select the Up node"))
+{
+ info_up_label_of_node (window->node);
+ info_handle_pointer ("Up", window);
+}
+
+/* Make WINDOW display the last node of this info file. */
+DECLARE_INFO_COMMAND (info_last_node, _("Select the last node in this file"))
+{
+ register int i;
+ FILE_BUFFER *fb = file_buffer_of_window (window);
+ NODE *node = NULL;
+
+ if (fb && fb->tags)
+ {
+ int last_node_tag_idx = -1;
+
+ /* If no explicit argument, or argument of zero, default to the
+ last node. */
+ if (count == 0 || (count == 1 && !info_explicit_arg))
+ count = -1;
+ for (i = 0; count && fb->tags[i]; i++)
+ if (fb->tags[i]->nodelen != 0) /* don't count anchor tags */
+ {
+ count--;
+ last_node_tag_idx = i;
+ }
+ if (count > 0)
+ i = last_node_tag_idx + 1;
+ if (i > 0)
+ node = info_get_node (fb->filename, fb->tags[i - 1]->nodename);
+ }
+
+ if (!node)
+ info_error (_("This window has no additional nodes"), NULL, NULL);
+ else
+ info_set_node_of_window (1, window, node);
+}
+
+/* Make WINDOW display the first node of this info file. */
+DECLARE_INFO_COMMAND (info_first_node, _("Select the first node in this file"))
+{
+ FILE_BUFFER *fb = file_buffer_of_window (window);
+ NODE *node = NULL;
+
+ /* If no explicit argument, or argument of zero, default to the
+ first node. */
+ if (count == 0)
+ count = 1;
+ if (fb && fb->tags)
+ {
+ register int i;
+ int last_node_tag_idx = -1;
+
+ for (i = 0; count && fb->tags[i]; i++)
+ if (fb->tags[i]->nodelen != 0) /* don't count anchor tags */
+ {
+ count--;
+ last_node_tag_idx = i;
+ }
+ if (count > 0)
+ i = last_node_tag_idx + 1;
+ if (i > 0)
+ node = info_get_node (fb->filename, fb->tags[i - 1]->nodename);
+ }
+
+ if (!node)
+ info_error (_("This window has no additional nodes"), NULL, NULL);
+ else
+ info_set_node_of_window (1, window, node);
+}
+
+/* Select the last menu item in WINDOW->node. */
+DECLARE_INFO_COMMAND (info_last_menu_item,
+ _("Select the last item in this node's menu"))
+{
+ info_menu_digit (window, 1, '0');
+}
+
+/* Use KEY (a digit) to select the Nth menu item in WINDOW->node. */
+DECLARE_INFO_COMMAND (info_menu_digit, _("Select this menu item"))
+{
+ register int i, item;
+ register REFERENCE **menu;
+
+ menu = info_menu_of_node (window->node);
+
+ if (!menu)
+ {
+ info_error (msg_no_menu_node, NULL, NULL);
+ return;
+ }
+
+ /* We have the menu. See if there are this many items in it. */
+ item = key - '0';
+
+ /* Special case. Item "0" is the last item in this menu. */
+ if (item == 0)
+ for (i = 0; menu[i + 1]; i++);
+ else
+ {
+ for (i = 0; menu[i]; i++)
+ if (i == item - 1)
+ break;
+ }
+
+ if (menu[i])
+ {
+ info_select_reference (window, menu[i]);
+ if (menu[i]->line_number > 0)
+ info_next_line (window, menu[i]->line_number - 1, key);
+ }
+ else
+ info_error (_("There aren't %d items in this menu."),
+ (void *) (long) item, NULL);
+
+ info_free_references (menu);
+ return;
+}
+
+
+
+/* Return a pointer to the xref in XREF_LIST that is nearest to POS, or
+ NULL if XREF_LIST is empty. That is, if POS is within any of the
+ given xrefs, return that one. Otherwise, return the one with the
+ nearest beginning or end. If there are two that are equidistant,
+ prefer the one forward. The return is in newly-allocated memory,
+ since the caller frees it.
+
+ This is called from info_menu_or_ref_item with XREF_LIST being all
+ the xrefs in the node, and POS being point. The ui function that
+ starts it all off is select-reference-this-line.
+
+ This is not the same logic as in info.el. Info-get-token prefers
+ searching backwards to searching forwards, and has a hardwired search
+ limit of 200 chars (in Emacs 21.2). */
+
+static REFERENCE **
+nearest_xref (REFERENCE **xref_list, long int pos)
+{
+ int this_xref;
+ int nearest = -1;
+ long best_delta = -1;
+
+ for (this_xref = 0; xref_list[this_xref]; this_xref++)
+ {
+ long delta;
+ REFERENCE *xref = xref_list[this_xref];
+ if (xref->start <= pos && pos <= xref->end)
+ { /* POS is within this xref, we're done */
+ nearest = this_xref;
+ break;
+ }
+
+ /* See how far POS is from this xref. Take into account the
+ `*Note' that begins the xref, since as far as the user is
+ concerned, that's where it starts. */
+ delta = MIN (labs (pos - (xref->start - strlen (INFO_XREF_LABEL))),
+ labs (pos - xref->end));
+
+ /* It's the <= instead of < that makes us choose the forward xref
+ of POS if two are equidistant. Of course, because of all the
+ punctuation surrounding xrefs, it's not necessarily obvious
+ where one ends. */
+ if (delta <= best_delta || best_delta < 0)
+ {
+ nearest = this_xref;
+ best_delta = delta;
+ }
+ }
+
+ /* Maybe there was no list to search through. */
+ if (nearest < 0)
+ return NULL;
+
+ /* Ok, we have a nearest xref, make a list of it. */
+ {
+ REFERENCE **ret = xmalloc (sizeof (REFERENCE *) * 2);
+ ret[0] = info_copy_reference (xref_list[nearest]);
+ ret[1] = NULL;
+ return ret;
+ }
+}
+
+
+/* Read a menu or followed reference from the user defaulting to the
+ reference found on the current line, and select that node. The
+ reading is done with completion. BUILDER is the function used
+ to build the list of references. ASK_P is non-zero if the user
+ should be prompted, or zero to select the default item. */
+static void
+info_menu_or_ref_item (WINDOW *window, int count,
+ unsigned char key, REFERENCE **(*builder) (NODE *node), int ask_p)
+{
+ char *line;
+ REFERENCE *entry;
+ REFERENCE *defentry = NULL;
+ REFERENCE **menu = (*builder) (window->node);
+
+ if (!menu)
+ {
+ if (builder == info_menu_of_node)
+ info_error (msg_no_menu_node, NULL, NULL);
+ else
+ info_error (msg_no_xref_node, NULL, NULL);
+ return;
+ }
+
+ /* Default the selected reference to the one which is on the line that
+ point is in. */
+ {
+ REFERENCE **refs = NULL;
+ int point_line = window_line_of_point (window);
+
+ if (point_line != -1)
+ {
+ SEARCH_BINDING binding;
+
+ binding.buffer = window->node->contents;
+ binding.start = window->line_starts[point_line] - binding.buffer;
+ if (window->line_starts[point_line + 1])
+ binding.end = window->line_starts[point_line + 1] - binding.buffer;
+ else
+ binding.end = window->node->nodelen;
+ binding.flags = 0;
+
+ if (builder == info_menu_of_node)
+ {
+ if (point_line)
+ {
+ binding.start--;
+ refs = info_menu_items (&binding);
+ }
+ }
+ else
+ {
+#if defined (HANDLE_MAN_PAGES)
+ if (window->node->flags & N_IsManPage)
+ refs = manpage_xrefs_in_binding (window->node, &binding);
+ else
+#endif /* HANDLE_MAN_PAGES */
+ refs = nearest_xref (menu, window->point);
+ }
+
+ if (refs && refs[0])
+ {
+ if (strcmp (refs[0]->label, "Menu") != 0
+ || builder == info_xrefs_of_node)
+ {
+ int which = 0;
+
+ /* For xrefs, find the closest reference to point,
+ unless we only have one reference (as we will if
+ we've called nearest_xref above). It would be better
+ to have only one piece of code, but the conditions
+ when we call this are tangled. */
+ if (builder == info_xrefs_of_node && refs[1])
+ {
+ int closest = -1;
+
+ for (; refs[which]; which++)
+ {
+ if (window->point >= refs[which]->start
+ && window->point <= refs[which]->end)
+ {
+ closest = which;
+ break;
+ }
+ else if (window->point < refs[which]->start)
+ break;
+ }
+ if (which > 0)
+ {
+ if (closest == -1)
+ which--;
+ else
+ which = closest;
+ }
+ }
+
+ defentry = xmalloc (sizeof (REFERENCE));
+ defentry->label = xstrdup (refs[which]->label);
+ defentry->filename = refs[which]->filename;
+ defentry->nodename = refs[which]->nodename;
+ defentry->line_number = refs[which]->line_number;
+
+ if (defentry->filename)
+ defentry->filename = xstrdup (defentry->filename);
+ if (defentry->nodename)
+ defentry->nodename = xstrdup (defentry->nodename);
+ }
+ info_free_references (refs);
+ }
+ }
+ }
+
+ /* If we are going to ask the user a question, do it now. */
+ if (ask_p)
+ {
+ char *prompt;
+
+ /* Build the prompt string. */
+ if (builder == info_menu_of_node)
+ {
+ if (defentry)
+ {
+ prompt = xmalloc (strlen (defentry->label)
+ + strlen (_("Menu item (%s): ")));
+ sprintf (prompt, _("Menu item (%s): "), defentry->label);
+ }
+ else
+ prompt = xstrdup (_("Menu item: "));
+ }
+ else
+ {
+ if (defentry)
+ {
+ prompt = xmalloc (strlen (defentry->label)
+ + strlen (_("Follow xref (%s): ")));
+ sprintf (prompt, _("Follow xref (%s): "), defentry->label);
+ }
+ else
+ prompt = xstrdup (_("Follow xref: "));
+ }
+
+ line = info_read_completing_in_echo_area (window, prompt, menu);
+ free (prompt);
+
+ window = active_window;
+
+ /* User aborts, just quit. */
+ if (!line)
+ {
+ maybe_free (defentry);
+ info_free_references (menu);
+ info_abort_key (window, 0, 0);
+ return;
+ }
+
+ /* If we had a default and the user accepted it, use that. */
+ if (!*line)
+ {
+ free (line);
+ if (defentry)
+ line = xstrdup (defentry->label);
+ else
+ line = NULL;
+ }
+ }
+ else
+ {
+ /* Not going to ask any questions. If we have a default entry, use
+ that, otherwise return. */
+ if (!defentry)
+ return;
+ else
+ line = xstrdup (defentry->label);
+ }
+
+ if (line)
+ {
+ /* It is possible that the references have more than a single
+ entry with the same label, and also LINE is down-cased, which
+ complicates matters even more. Try to be as accurate as we
+ can: if they've chosen the default, use defentry directly. */
+ if (defentry && strcmp (line, defentry->label) == 0)
+ entry = defentry;
+ else
+ /* Find the selected label in the references. If there are
+ more than one label which matches, find the one that's
+ closest to point. */
+ {
+ register int i;
+ int best = -1, min_dist = window->node->nodelen;
+ REFERENCE *ref;
+
+ for (i = 0; menu && (ref = menu[i]); i++)
+ {
+ /* Need to use mbscasecmp because LINE is downcased
+ inside info_read_completing_in_echo_area. */
+ if (mbscasecmp (line, ref->label) == 0)
+ {
+ /* ref->end is more accurate estimate of position
+ for menus than ref->start. Go figure. */
+ int dist = abs (window->point - ref->end);
+
+ if (dist < min_dist)
+ {
+ min_dist = dist;
+ best = i;
+ }
+ }
+ }
+ if (best != -1)
+ entry = menu[best];
+ else
+ entry = NULL;
+ }
+
+ if (!entry && defentry)
+ info_error (_("The reference disappeared! (%s)."), line, NULL);
+ else
+ {
+ NODE *orig = window->node;
+ info_select_reference (window, entry);
+
+ if (builder == info_xrefs_of_node && window->node != orig
+ && !(window->node->flags & N_FromAnchor))
+ { /* Search for this reference in the node. */
+ long offset;
+ long start;
+
+ if (window->line_count > 0)
+ start = window->line_starts[1] - window->node->contents;
+ else
+ start = 0;
+
+ offset =
+ info_target_search_node (window->node, entry->label, start);
+
+ if (offset != -1)
+ {
+ window->point = offset;
+ window_adjust_pagetop (window);
+ }
+ }
+
+ if (entry->line_number > 0)
+ /* next_line starts at line 1? Anyway, the -1 makes it
+ move to the right line. */
+ info_next_line (window, entry->line_number - 1, key);
+ }
+
+ free (line);
+ if (defentry)
+ {
+ free (defentry->label);
+ maybe_free (defentry->filename);
+ maybe_free (defentry->nodename);
+ free (defentry);
+ }
+ }
+
+ info_free_references (menu);
+
+ if (!info_error_was_printed)
+ window_clear_echo_area ();
+}
+
+/* Read a line (with completion) which is the name of a menu item,
+ and select that item. */
+DECLARE_INFO_COMMAND (info_menu_item, _("Read a menu item and select its node"))
+{
+ info_menu_or_ref_item (window, count, key, info_menu_of_node, 1);
+}
+
+/* Read a line (with completion) which is the name of a reference to
+ follow, and select the node. */
+DECLARE_INFO_COMMAND
+ (info_xref_item, _("Read a footnote or cross reference and select its node"))
+{
+ info_menu_or_ref_item (window, count, key, info_xrefs_of_node, 1);
+}
+
+/* Position the cursor at the start of this node's menu. */
+DECLARE_INFO_COMMAND (info_find_menu, _("Move to the start of this node's menu"))
+{
+ SEARCH_BINDING binding;
+ long position;
+
+ binding.buffer = window->node->contents;
+ binding.start = 0;
+ binding.end = window->node->nodelen;
+ binding.flags = S_FoldCase | S_SkipDest;
+
+ position = search (INFO_MENU_LABEL, &binding);
+
+ if (position == -1)
+ info_error (msg_no_menu_node, NULL, NULL);
+ else
+ {
+ window->point = position;
+ window_adjust_pagetop (window);
+ window->flags |= W_UpdateWindow;
+ }
+}
+
+/* Visit as many menu items as is possible, each in a separate window. */
+DECLARE_INFO_COMMAND (info_visit_menu,
+ _("Visit as many menu items at once as possible"))
+{
+ register int i;
+ REFERENCE *entry, **menu;
+
+ menu = info_menu_of_node (window->node);
+
+ if (!menu)
+ info_error (msg_no_menu_node, NULL, NULL);
+
+ for (i = 0; (!info_error_was_printed) && (entry = menu[i]); i++)
+ {
+ WINDOW *new;
+
+ new = window_make_window (window->node);
+ window_tile_windows (TILE_INTERNALS);
+
+ if (!new)
+ info_error (msg_win_too_small, NULL, NULL);
+ else
+ {
+ active_window = new;
+ info_select_reference (new, entry);
+ }
+ }
+}
+
+/* Read a line of input which is a node name, and go to that node. */
+DECLARE_INFO_COMMAND (info_goto_node, _("Read a node name and select it"))
+{
+ char *line;
+
+#define GOTO_COMPLETES
+#if defined (GOTO_COMPLETES)
+ /* Build a completion list of all of the known nodes. */
+ {
+ register int fbi, i;
+ FILE_BUFFER *current;
+ REFERENCE **items = NULL;
+ int items_index = 0;
+ int items_slots = 0;
+
+ current = file_buffer_of_window (window);
+
+ for (fbi = 0; info_loaded_files && info_loaded_files[fbi]; fbi++)
+ {
+ FILE_BUFFER *fb;
+ REFERENCE *entry;
+ int this_is_the_current_fb;
+
+ fb = info_loaded_files[fbi];
+ this_is_the_current_fb = (current == fb);
+
+ entry = xmalloc (sizeof (REFERENCE));
+ entry->filename = entry->nodename = NULL;
+ entry->label = xmalloc (4 + strlen (fb->filename));
+ sprintf (entry->label, "(%s)*", fb->filename);
+
+ add_pointer_to_array
+ (entry, items_index, items, items_slots, 10, REFERENCE *);
+
+ if (fb->tags)
+ {
+ for (i = 0; fb->tags[i]; i++)
+ {
+ entry = xmalloc (sizeof (REFERENCE));
+ entry->filename = entry->nodename = NULL;
+ if (this_is_the_current_fb)
+ entry->label = xstrdup (fb->tags[i]->nodename);
+ else
+ {
+ entry->label = xmalloc
+ (4 + strlen (fb->filename) +
+ strlen (fb->tags[i]->nodename));
+ sprintf (entry->label, "(%s)%s",
+ fb->filename, fb->tags[i]->nodename);
+ }
+
+ add_pointer_to_array
+ (entry, items_index, items, items_slots, 100, REFERENCE *);
+ }
+ }
+ }
+ line = info_read_maybe_completing (window, _("Goto node: "),
+ items);
+ info_free_references (items);
+ }
+#else /* !GOTO_COMPLETES */
+ line = info_read_in_echo_area (window, _("Goto node: "));
+#endif /* !GOTO_COMPLETES */
+
+ /* If the user aborted, quit now. */
+ if (!line)
+ {
+ info_abort_key (window, 0, 0);
+ return;
+ }
+
+ canonicalize_whitespace (line);
+
+ if (*line)
+ info_parse_and_select (line, window);
+
+ free (line);
+ if (!info_error_was_printed)
+ window_clear_echo_area ();
+}
+
+/* Follow the menu list in MENUS (list of strings terminated by a NULL
+ entry) from INITIAL_NODE. If can't continue at any point (no menu or
+ no menu entry for the next item), return the node so far -- that
+ might be INITIAL_NODE itself. If error, *ERRSTR and *ERRARG[12] will
+ be set to the error message and argument for message, otherwise they
+ will be NULL. */
+
+NODE *
+info_follow_menus (NODE *initial_node, char **menus,
+ const char **errstr, char **errarg1, char **errarg2)
+{
+ NODE *node = NULL;
+ *errstr = *errarg1 = *errarg2 = NULL;
+
+ for (; *menus; menus++)
+ {
+ static char *first_arg = NULL;
+ REFERENCE **menu;
+ REFERENCE *entry;
+ char *arg = *menus; /* Remember the name of the menu entry we want. */
+
+ /* A leading space is certainly NOT part of a node name. Most
+ probably, they typed a space after the separating comma. The
+ strings in menus[] have their whitespace canonicalized, so
+ there's at most one space to ignore. */
+ if (*arg == ' ')
+ arg++;
+ if (!first_arg)
+ first_arg = arg;
+
+ /* Build and return a list of the menu items in this node. */
+ menu = info_menu_of_node (initial_node);
+
+ /* If no menu item in this node, stop here, but let the user
+ continue to use Info. Perhaps they wanted this node and didn't
+ realize it. */
+ if (!menu)
+ {
+ if (arg == first_arg)
+ {
+ node = make_manpage_node (first_arg);
+ if (node)
+ goto maybe_got_node;
+ }
+ *errstr = _("No menu in node `%s'.");
+ *errarg1 = node_printed_rep (initial_node);
+ return initial_node;
+ }
+
+ /* Find the specified menu item. */
+ entry = info_get_labeled_reference (arg, menu);
+
+ /* If the item wasn't found, search the list sloppily. Perhaps this
+ user typed "buffer" when they really meant "Buffers". */
+ if (!entry)
+ {
+ int i;
+ int best_guess = -1;
+
+ for (i = 0; (entry = menu[i]); i++)
+ {
+ if (mbscasecmp (entry->label, arg) == 0)
+ break;
+ else
+ if ((best_guess == -1)
+ && (mbsncasecmp (entry->label, arg, strlen (arg)) == 0))
+ best_guess = i;
+ }
+
+ if (!entry && best_guess != -1)
+ entry = menu[best_guess];
+ }
+
+ /* If we still failed to find the reference, start Info with the current
+ node anyway. It is probably a misspelling. */
+ if (!entry)
+ {
+ if (arg == first_arg)
+ {
+ /* Maybe they typed "info foo" instead of "info -f foo". */
+ node = info_get_node (first_arg, 0);
+ if (node)
+ add_file_directory_to_path (first_arg);
+ else
+ node = make_manpage_node (first_arg);
+ if (node)
+ goto maybe_got_node;
+ }
+
+ info_free_references (menu);
+ *errstr = _("No menu item `%s' in node `%s'.");
+ *errarg1 = arg;
+ *errarg2 = node_printed_rep (initial_node);
+ return initial_node;
+ }
+
+ /* We have found the reference that the user specified. If no
+ filename in this reference, define it. */
+ if (!entry->filename)
+ entry->filename = xstrdup (initial_node->parent ? initial_node->parent
+ : initial_node->filename);
+
+ /* Try to find this node. */
+ node = info_get_node (entry->filename, entry->nodename);
+ if (!node && arg == first_arg)
+ {
+ node = make_manpage_node (first_arg);
+ if (node)
+ goto maybe_got_node;
+ }
+
+ /* Since we cannot find it, try using the label of the entry as a
+ file, i.e., "(LABEL)Top". */
+ if (!node && entry->nodename
+ && strcmp (entry->label, entry->nodename) == 0)
+ node = info_get_node (entry->label, "Top");
+
+ maybe_got_node:
+ if (!node)
+ {
+ *errstr = _("Unable to find node referenced by `%s' in `%s'.");
+ *errarg1 = xstrdup (entry->label);
+ *errarg2 = node_printed_rep (initial_node);
+ info_free_references (menu);
+ return initial_node;
+ }
+
+ info_free_references (menu);
+
+ /* Success. Go round the loop again. */
+ free (initial_node);
+ initial_node = node;
+ }
+
+ return initial_node;
+}
+
+/* Split STR into individual node names by writing null bytes in wherever
+ there are commas and constructing a list of the resulting pointers.
+ (We can do this since STR has had canonicalize_whitespace called on it.)
+ Return array terminated with NULL. */
+
+static char **
+split_list_of_nodenames (char *str)
+{
+ unsigned len = 2;
+ char **nodes = xmalloc (len * sizeof (char *));
+
+ nodes[len - 2] = str;
+
+ while (*str++)
+ {
+ if (*str == ',')
+ {
+ *str++ = 0; /* get past the null byte */
+ len++;
+ nodes = xrealloc (nodes, len * sizeof (char *));
+ nodes[len - 2] = str;
+ }
+ }
+
+ nodes[len - 1] = NULL;
+
+ return nodes;
+}
+
+
+/* Read a line of input which is a sequence of menus (starting from
+ dir), and follow them. */
+DECLARE_INFO_COMMAND (info_menu_sequence,
+ _("Read a list of menus starting from dir and follow them"))
+{
+ char *line = info_read_in_echo_area (window, _("Follow menus: "));
+
+ /* If the user aborted, quit now. */
+ if (!line)
+ {
+ info_abort_key (window, 0, 0);
+ return;
+ }
+
+ canonicalize_whitespace (line);
+
+ if (*line)
+ {
+ const char *errstr;
+ char *errarg1, *errarg2;
+ NODE *dir_node = info_get_node (NULL, NULL);
+ char **nodes = split_list_of_nodenames (line);
+ NODE *node = NULL;
+
+ /* If DIR_NODE is NULL, they might be reading a file directly,
+ like in "info -d . -f ./foo". Try using "Top" instead. */
+ if (!dir_node)
+ {
+ char *file_name = window->node->parent;
+
+ if (!file_name)
+ file_name = window->node->filename;
+ dir_node = info_get_node (file_name, NULL);
+ }
+
+ /* If we still cannot find the starting point, give up.
+ We cannot allow a NULL pointer inside info_follow_menus. */
+ if (!dir_node)
+ info_error (msg_cant_find_node, "Top", NULL);
+ else
+ node = info_follow_menus (dir_node, nodes, &errstr, &errarg1, &errarg2);
+
+ free (nodes);
+ if (!errstr)
+ info_set_node_of_window (1, window, node);
+ else
+ info_error (errstr, errarg1, errarg2);
+ }
+
+ free (line);
+ if (!info_error_was_printed)
+ window_clear_echo_area ();
+}
+
+/* Search the menu MENU for a (possibly mis-spelled) entry ARG.
+ Return the menu entry, or the best guess for what they meant by ARG,
+ or NULL if there's nothing in this menu seems to fit the bill.
+ If EXACT is non-zero, allow only exact matches. */
+static REFERENCE *
+entry_in_menu (char *arg, REFERENCE **menu, int exact)
+{
+ REFERENCE *entry;
+
+ /* First, try to find the specified menu item verbatim. */
+ entry = info_get_labeled_reference (arg, menu);
+
+ /* If the item wasn't found, search the list sloppily. Perhaps we
+ have "Option Summary", but ARG is "option". */
+ if (!entry && !exact)
+ {
+ int i;
+ int best_guess = -1;
+
+ for (i = 0; (entry = menu[i]); i++)
+ {
+ if (mbscasecmp (entry->label, arg) == 0)
+ break;
+ else
+ if (mbsncasecmp (entry->label, arg, strlen (arg)) == 0)
+ best_guess = i;
+ }
+
+ if (!entry && best_guess != -1)
+ entry = menu[best_guess];
+ }
+
+ return entry;
+}
+
+/* Find the node that is the best candidate to list the PROGRAM's
+ invocation info and its command-line options, by looking for menu
+ items and chains of menu items with characteristic names. */
+void
+info_intuit_options_node (WINDOW *window, NODE *initial_node, char *program)
+{
+ /* The list of node names typical for GNU manuals where the program
+ usage and specifically the command-line arguments are described.
+ This is pure heuristics. I gathered these node names by looking
+ at all the Info files I could put my hands on. If you are
+ looking for evidence to complain to the GNU project about
+ non-uniform style of documentation, here you have your case! */
+ static const char *invocation_nodes[] = {
+ "%s invocation",
+ "Invoking %s",
+ "Preliminaries", /* m4 has Invoking under Preliminaries! */
+ "Invocation",
+ "Command Arguments",/* Emacs */
+ "Invoking `%s'",
+ "%s options",
+ "Options",
+ "Option ", /* e.g. "Option Summary" */
+ "Invoking",
+ "All options", /* tar, paxutils */
+ "Arguments",
+ "%s cmdline", /* ar */
+ "%s", /* last resort */
+ (const char *)0
+ };
+ NODE *node = NULL;
+ REFERENCE **menu;
+ const char **try_node;
+
+ /* We keep looking deeper and deeper in the menu structure until
+ there are no more menus or no menu items from the above list.
+ Some manuals have the invocation node sitting 3 or 4 levels deep
+ in the menu hierarchy... */
+ for (node = initial_node; node; initial_node = node)
+ {
+ REFERENCE *entry = NULL;
+
+ /* Build and return a list of the menu items in this node. */
+ menu = info_menu_of_node (initial_node);
+
+ /* If no menu item in this node, stop here. Perhaps this node
+ is the one they need. */
+ if (!menu)
+ break;
+
+ /* Look for node names typical for usage nodes in this menu. */
+ for (try_node = invocation_nodes; *try_node; try_node++)
+ {
+ char *nodename;
+
+ nodename = xmalloc (strlen (program) + strlen (*try_node));
+ sprintf (nodename, *try_node, program);
+ /* The last resort "%s" is dangerous, so we restrict it
+ to exact matches here. */
+ entry = entry_in_menu (nodename, menu,
+ strcmp (*try_node, "%s") == 0);
+ free (nodename);
+ if (entry)
+ break;
+ }
+
+ if (!entry)
+ break;
+
+ if (!entry->filename)
+ entry->filename = xstrdup (initial_node->parent ? initial_node->parent
+ : initial_node->filename);
+ /* Try to find this node. */
+ node = info_get_node (entry->filename, entry->nodename);
+ info_free_references (menu);
+ if (!node)
+ break;
+ }
+
+ /* We've got our best shot at the invocation node. Now select it. */
+ if (initial_node)
+ info_set_node_of_window (1, window, initial_node);
+ if (!info_error_was_printed)
+ window_clear_echo_area ();
+}
+
+/* Given a name of an Info file, find the name of the package it
+ describes by removing the leading directories and extensions. */
+char *
+program_name_from_file_name (char *file_name)
+{
+ int i;
+ char *program_name = xstrdup (filename_non_directory (file_name));
+
+ for (i = strlen (program_name) - 1; i > 0; i--)
+ if (program_name[i] == '.'
+ && (FILENAME_CMPN (program_name + i, ".info", 5) == 0
+ || FILENAME_CMPN (program_name + i, ".inf", 4) == 0
+#ifdef __MSDOS__
+ || FILENAME_CMPN (program_name + i, ".i", 2) == 0
+#endif
+ || isdigit (program_name[i + 1]))) /* a man page foo.1 */
+ {
+ program_name[i] = 0;
+ break;
+ }
+ return program_name;
+}
+
+DECLARE_INFO_COMMAND (info_goto_invocation_node,
+ _("Find the node describing program invocation"))
+{
+ const char *invocation_prompt = _("Find Invocation node of [%s]: ");
+ char *program_name, *line;
+ char *default_program_name, *prompt, *file_name;
+ NODE *top_node;
+
+ /* Intuit the name of the program they are likely to want.
+ We use the file name of the current Info file as a hint. */
+ file_name = window->node->parent ? window->node->parent
+ : window->node->filename;
+ default_program_name = program_name_from_file_name (file_name);
+
+ prompt = xmalloc (strlen (default_program_name) +
+ strlen (invocation_prompt));
+ sprintf (prompt, invocation_prompt, default_program_name);
+ line = info_read_in_echo_area (window, prompt);
+ free (prompt);
+ if (!line)
+ {
+ info_abort_key (window, 0, 0);
+ return;
+ }
+ if (*line)
+ program_name = line;
+ else
+ program_name = default_program_name;
+
+ /* In interactive usage they'd probably expect us to begin looking
+ from the Top node. */
+ top_node = info_get_node (file_name, NULL);
+ if (!top_node)
+ info_error (msg_cant_find_node, "Top", NULL);
+
+ info_intuit_options_node (window, top_node, program_name);
+ free (line);
+ free (default_program_name);
+}
+
+#if defined (HANDLE_MAN_PAGES)
+DECLARE_INFO_COMMAND (info_man, _("Read a manpage reference and select it"))
+{
+ char *line;
+
+ line = info_read_in_echo_area (window, _("Get Manpage: "));
+
+ if (!line)
+ {
+ info_abort_key (window, 0, 0);
+ return;
+ }
+
+ canonicalize_whitespace (line);
+
+ if (*line)
+ {
+ char *goto_command;
+
+ goto_command = xmalloc
+ (4 + strlen (MANPAGE_FILE_BUFFER_NAME) + strlen (line));
+
+ sprintf (goto_command, "(%s)%s", MANPAGE_FILE_BUFFER_NAME, line);
+
+ info_parse_and_select (goto_command, window);
+ free (goto_command);
+ }
+
+ free (line);
+ if (!info_error_was_printed)
+ window_clear_echo_area ();
+}
+#endif /* HANDLE_MAN_PAGES */
+
+/* Move to the "Top" node in this file. */
+DECLARE_INFO_COMMAND (info_top_node, _("Select the node `Top' in this file"))
+{
+ info_parse_and_select ("Top", window);
+}
+
+/* Move to the node "(dir)Top". */
+DECLARE_INFO_COMMAND (info_dir_node, _("Select the node `(dir)'"))
+{
+ info_parse_and_select ("(dir)Top", window);
+}
+
+
+/* Read the name of a node to kill. The list of available nodes comes
+ from the nodes appearing in the current window configuration. */
+static char *
+read_nodename_to_kill (WINDOW *window)
+{
+ int iw;
+ char *nodename;
+ INFO_WINDOW *info_win;
+ REFERENCE **menu = NULL;
+ int menu_index = 0, menu_slots = 0;
+ char *default_nodename = xstrdup (active_window->node->nodename);
+ char *prompt = xmalloc (strlen (_("Kill node (%s): ")) + strlen (default_nodename));
+
+ sprintf (prompt, _("Kill node (%s): "), default_nodename);
+
+ for (iw = 0; (info_win = info_windows[iw]); iw++)
+ {
+ REFERENCE *entry = xmalloc (sizeof (REFERENCE));
+ entry->label = xstrdup (info_win->window->node->nodename);
+ entry->filename = entry->nodename = NULL;
+
+ add_pointer_to_array (entry, menu_index, menu, menu_slots, 10,
+ REFERENCE *);
+ }
+
+ nodename = info_read_completing_in_echo_area (window, prompt, menu);
+ free (prompt);
+ info_free_references (menu);
+ if (nodename && !*nodename)
+ {
+ free (nodename);
+ nodename = default_nodename;
+ }
+ else
+ free (default_nodename);
+
+ return nodename;
+}
+
+
+/* Delete NODENAME from this window, showing the most
+ recently selected node in this window. */
+static void
+kill_node (WINDOW *window, char *nodename)
+{
+ int iw, i;
+ INFO_WINDOW *info_win;
+ NODE *temp;
+
+ /* If there is no nodename to kill, quit now. */
+ if (!nodename)
+ {
+ info_abort_key (window, 0, 0);
+ return;
+ }
+
+ /* If there is a nodename, find it in our window list. */
+ for (iw = 0; (info_win = info_windows[iw]); iw++)
+ if (strcmp (nodename, info_win->nodes[info_win->current]->nodename) == 0
+ && info_win->window == window)
+ break;
+
+ if (!info_win)
+ {
+ if (*nodename)
+ info_error (_("Cannot kill node `%s'"), nodename, NULL);
+ else
+ window_clear_echo_area ();
+
+ return;
+ }
+
+ /* If there are no more nodes left anywhere to view, complain and exit. */
+ if (info_windows_index == 1 && info_windows[0]->nodes_index == 1)
+ {
+ info_error (_("Cannot kill the last node"), NULL, NULL);
+ return;
+ }
+
+ /* INFO_WIN contains the node that the user wants to stop viewing. Delete
+ this node from the list of nodes previously shown in this window. */
+ for (i = info_win->current; i < info_win->nodes_index; i++)
+ info_win->nodes[i] = info_win->nodes[i + 1];
+
+ /* There is one less node in this window's history list. */
+ info_win->nodes_index--;
+
+ /* Make this window show the most recent history node. */
+ info_win->current = info_win->nodes_index - 1;
+
+ /* If there aren't any nodes left in this window, steal one from the
+ next window. */
+ if (info_win->current < 0)
+ {
+ INFO_WINDOW *stealer;
+ int which, pagetop;
+ long point;
+
+ if (info_windows[iw + 1])
+ stealer = info_windows[iw + 1];
+ else
+ stealer = info_windows[0];
+
+ /* If the node being displayed in the next window is not the most
+ recently loaded one, get the most recently loaded one. */
+ if ((stealer->nodes_index - 1) != stealer->current)
+ which = stealer->nodes_index - 1;
+
+ /* Else, if there is another node behind the stealers current node,
+ use that one. */
+ else if (stealer->current > 0)
+ which = stealer->current - 1;
+
+ /* Else, just use the node appearing in STEALER's window. */
+ else
+ which = stealer->current;
+
+ /* Copy this node. */
+ {
+ NODE *copy = xmalloc (sizeof (NODE));
+
+ temp = stealer->nodes[which];
+ point = stealer->points[which];
+ pagetop = stealer->pagetops[which];
+
+ copy->filename = temp->filename;
+ copy->parent = temp->parent;
+ copy->nodename = temp->nodename;
+ copy->contents = temp->contents;
+ copy->nodelen = temp->nodelen;
+ copy->flags = temp->flags;
+ copy->display_pos = temp->display_pos;
+
+ temp = copy;
+ }
+
+ window_set_node_of_window (info_win->window, temp);
+ window->point = point;
+ window->pagetop = pagetop;
+ remember_window_and_node (info_win->window, temp);
+ }
+ else
+ {
+ temp = info_win->nodes[info_win->current];
+ temp->display_pos = info_win->points[info_win->current];
+ window_set_node_of_window (info_win->window, temp);
+ }
+
+ if (!info_error_was_printed)
+ window_clear_echo_area ();
+
+ if (auto_footnotes_p)
+ info_get_or_remove_footnotes (window);
+}
+
+/* Kill current node, thus going back one in the node history. I (karl)
+ do not think this is completely correct yet, because of the
+ window-changing stuff in kill_node, but it's a lot better than the
+ previous implementation, which did not account for nodes being
+ visited twice at all. */
+DECLARE_INFO_COMMAND (info_history_node,
+ _("Select the most recently selected node"))
+{
+ kill_node (window, active_window->node->nodename);
+}
+
+/* Kill named node. */
+DECLARE_INFO_COMMAND (info_kill_node, _("Kill this node"))
+{
+ char *nodename = read_nodename_to_kill (window);
+ kill_node (window, nodename);
+}
+
+
+/* Read the name of a file and select the entire file. */
+DECLARE_INFO_COMMAND (info_view_file, _("Read the name of a file and select it"))
+{
+ char *line;
+
+ line = info_read_in_echo_area (window, _("Find file: "));
+ if (!line)
+ {
+ info_abort_key (active_window, 1, 0);
+ return;
+ }
+
+ if (*line)
+ {
+ NODE *node;
+
+ node = info_get_node (line, "*");
+ if (!node)
+ {
+ if (info_recent_file_error)
+ info_error (info_recent_file_error, NULL, NULL);
+ else
+ info_error (_("Cannot find `%s'."), line, NULL);
+ }
+ else
+ info_set_node_of_window (1, window, node);
+
+ free (line);
+ }
+
+ if (!info_error_was_printed)
+ window_clear_echo_area ();
+}
+
+/* **************************************************************** */
+/* */
+/* Dumping and Printing Nodes */
+/* */
+/* **************************************************************** */
+
+#define VERBOSE_NODE_DUMPING
+static void write_node_to_stream (NODE *node, FILE *stream);
+static void dump_node_to_stream (char *filename, char *nodename,
+ FILE *stream, int dump_subnodes);
+static void initialize_dumping (void);
+
+/* Dump the nodes specified by FILENAME and NODENAMES to the file named
+ in OUTPUT_FILENAME. If DUMP_SUBNODES is non-zero, recursively dump
+ the nodes which appear in the menu of each node dumped. */
+void
+dump_nodes_to_file (char *filename, char **nodenames,
+ char *output_filename, int dump_subnodes)
+{
+ register int i;
+ FILE *output_stream;
+
+ /* Get the stream to print the nodes to. Special case of an output
+ filename of "-" means to dump the nodes to stdout. */
+ if (strcmp (output_filename, "-") == 0)
+ output_stream = stdout;
+ else
+ output_stream = fopen (output_filename, "w");
+
+ if (!output_stream)
+ {
+ info_error (_("Could not create output file `%s'."),
+ output_filename, NULL);
+ return;
+ }
+
+ /* Print each node to stream. */
+ initialize_dumping ();
+ for (i = 0; nodenames[i]; i++)
+ dump_node_to_stream (filename, nodenames[i], output_stream, dump_subnodes);
+
+ if (output_stream != stdout)
+ fclose (output_stream);
+
+#if defined (VERBOSE_NODE_DUMPING)
+ info_error (_("Done."), NULL, NULL);
+#endif /* VERBOSE_NODE_DUMPING */
+}
+
+/* A place to remember already dumped nodes. */
+static char **dumped_already = NULL;
+static int dumped_already_index = 0;
+static int dumped_already_slots = 0;
+
+static void
+initialize_dumping (void)
+{
+ dumped_already_index = 0;
+}
+
+/* Get and print the node specified by FILENAME and NODENAME to STREAM.
+ If DUMP_SUBNODES is non-zero, recursively dump the nodes which appear
+ in the menu of each node dumped. */
+static void
+dump_node_to_stream (char *filename, char *nodename,
+ FILE *stream, int dump_subnodes)
+{
+ register int i;
+ NODE *node;
+
+ node = info_get_node (filename, nodename);
+
+ if (!node)
+ {
+ if (info_recent_file_error)
+ info_error (info_recent_file_error, NULL, NULL);
+ else
+ {
+ if (filename && *nodename != '(')
+ info_error (msg_cant_file_node,
+ filename_non_directory (filename),
+ nodename);
+ else
+ info_error (msg_cant_find_node, nodename, NULL);
+ }
+ return;
+ }
+
+ /* If we have already dumped this node, don't dump it again. */
+ for (i = 0; i < dumped_already_index; i++)
+ if (strcmp (node->nodename, dumped_already[i]) == 0)
+ {
+ free (node);
+ return;
+ }
+ add_pointer_to_array (node->nodename, dumped_already_index, dumped_already,
+ dumped_already_slots, 50, char *);
+
+#if defined (VERBOSE_NODE_DUMPING)
+ /* Maybe we should print some information about the node being output. */
+ info_error (_("Writing node %s..."), node_printed_rep (node), NULL);
+#endif /* VERBOSE_NODE_DUMPING */
+
+ write_node_to_stream (node, stream);
+
+ /* If we are dumping subnodes, get the list of menu items in this node,
+ and dump each one recursively. */
+ if (dump_subnodes)
+ {
+ REFERENCE **menu = NULL;
+
+ /* If this node is an Index, do not dump the menu references. */
+ if (string_in_line ("Index", node->nodename) == -1)
+ menu = info_menu_of_node (node);
+
+ if (menu)
+ {
+ for (i = 0; menu[i]; i++)
+ {
+ /* We don't dump Info files which are different than the
+ current one. */
+ if (!menu[i]->filename)
+ dump_node_to_stream
+ (filename, menu[i]->nodename, stream, dump_subnodes);
+ }
+ info_free_references (menu);
+ }
+ }
+
+ free (node);
+}
+
+/* Dump NODE to FILENAME. If DUMP_SUBNODES is non-zero, recursively dump
+ the nodes which appear in the menu of each node dumped. */
+void
+dump_node_to_file (NODE *node, char *filename, int dump_subnodes)
+{
+ FILE *output_stream;
+ char *nodes_filename;
+
+ /* Get the stream to print this node to. Special case of an output
+ filename of "-" means to dump the nodes to stdout. */
+ if (strcmp (filename, "-") == 0)
+ output_stream = stdout;
+ else
+ output_stream = fopen (filename, "w");
+
+ if (!output_stream)
+ {
+ info_error (_("Could not create output file `%s'."), filename,
+ NULL);
+ return;
+ }
+
+ if (node->parent)
+ nodes_filename = node->parent;
+ else
+ nodes_filename = node->filename;
+
+ initialize_dumping ();
+ dump_node_to_stream
+ (nodes_filename, node->nodename, output_stream, dump_subnodes);
+
+ if (output_stream != stdout)
+ fclose (output_stream);
+
+#if defined (VERBOSE_NODE_DUMPING)
+ info_error (_("Done."), NULL, NULL);
+#endif /* VERBOSE_NODE_DUMPING */
+}
+
+#if !defined (DEFAULT_INFO_PRINT_COMMAND)
+# define DEFAULT_INFO_PRINT_COMMAND "lpr"
+#endif /* !DEFAULT_INFO_PRINT_COMMAND */
+
+DECLARE_INFO_COMMAND (info_print_node,
+ _("Pipe the contents of this node through INFO_PRINT_COMMAND"))
+{
+ print_node (window->node);
+}
+
+/* Print NODE on a printer piping it into INFO_PRINT_COMMAND. */
+void
+print_node (NODE *node)
+{
+ FILE *printer_pipe;
+ char *print_command = getenv ("INFO_PRINT_COMMAND");
+ int piping = 0;
+
+ if (!print_command || !*print_command)
+ print_command = DEFAULT_INFO_PRINT_COMMAND;
+
+ /* Note that on MS-DOS/MS-Windows, this MUST open the pipe in the
+ (default) text mode, since the printer drivers there need to see
+ DOS-style CRLF pairs at the end of each line.
+
+ FIXME: if we are to support Mac-style text files, we might need
+ to convert the text here. */
+
+ /* INFO_PRINT_COMMAND which says ">file" means write to that file.
+ Presumably, the name of the file is the local printer device. */
+ if (*print_command == '>')
+ printer_pipe = fopen (++print_command, "w");
+ else
+ {
+ printer_pipe = popen (print_command, "w");
+ piping = 1;
+ }
+
+ if (!printer_pipe)
+ {
+ info_error (_("Cannot open pipe to `%s'."), print_command, NULL);
+ return;
+ }
+
+#if defined (VERBOSE_NODE_DUMPING)
+ /* Maybe we should print some information about the node being output. */
+ info_error (_("Printing node %s..."), node_printed_rep (node), NULL);
+#endif /* VERBOSE_NODE_DUMPING */
+
+ write_node_to_stream (node, printer_pipe);
+ if (piping)
+ pclose (printer_pipe);
+ else
+ fclose (printer_pipe);
+
+#if defined (VERBOSE_NODE_DUMPING)
+ info_error (_("Done."), NULL, NULL);
+#endif /* VERBOSE_NODE_DUMPING */
+}
+
+static void
+write_node_to_stream (NODE *node, FILE *stream)
+{
+ fwrite (node->contents, 1, node->nodelen, stream);
+}
+
+/* **************************************************************** */
+/* */
+/* Info Searching Commands */
+/* */
+/* **************************************************************** */
+
+/* Variable controlling the garbage collection of files briefly visited
+ during searches. Such files are normally gc'ed, unless they were
+ compressed to begin with. If this variable is non-zero, it says
+ to gc even those file buffer contents which had to be uncompressed. */
+int gc_compressed_files = 0;
+
+static void info_gc_file_buffers (void);
+static void info_search_1 (WINDOW *window, int count,
+ unsigned char key, int case_sensitive, int ask_for_string);
+
+static char *search_string = NULL;
+static int search_string_size = 0;
+static int isearch_is_active = 0;
+
+static int last_search_direction = 0;
+static int last_search_case_sensitive = 0;
+
+/* Return the file buffer which belongs to WINDOW's node. */
+FILE_BUFFER *
+file_buffer_of_window (WINDOW *window)
+{
+ /* If this window has no node, then it has no file buffer. */
+ if (!window->node)
+ return NULL;
+
+ if (window->node->parent)
+ return info_find_file (window->node->parent);
+
+ if (window->node->filename)
+ return info_find_file (window->node->filename);
+
+ return NULL;
+}
+
+/* Search for STRING in NODE starting at START. Return -1 if the string
+ was not found, or the location of the string if it was. If WINDOW is
+ passed as non-null, set the window's node to be NODE, its point to be
+ the found string, and readjust the window's pagetop. The DIR argument
+ says which direction to search in. If it is positive, search
+ forward, else backwards.
+
+ The last argument, RESBND, makes sense only when USE_REGEX is set.
+ If the regexp search succeeds, RESBND is filled with the final state
+ of the search binding. In particular, its START and END fields contain
+ bounds of the found string instance.
+*/
+static long
+info_search_in_node_internal (char *string, NODE *node, long int start,
+ WINDOW *window, int dir, int case_sensitive,
+ SEARCH_BINDING *resbnd)
+{
+ SEARCH_BINDING binding;
+ long offset;
+
+ binding.buffer = node->contents;
+ binding.start = start;
+ binding.end = node->nodelen;
+ binding.flags = 0;
+ if (!case_sensitive)
+ binding.flags |= S_FoldCase;
+
+ if (dir < 0)
+ {
+ binding.end = 0;
+ binding.flags |= S_SkipDest;
+ }
+
+ if (binding.start < 0)
+ return -1;
+
+ /* For incremental searches, we always wish to skip past the string. */
+ if (isearch_is_active)
+ binding.flags |= S_SkipDest;
+
+ offset = (use_regex ?
+ regexp_search (string, &binding, node->nodelen, resbnd):
+ search (string, &binding));
+
+ if (offset != -1 && window)
+ {
+ set_remembered_pagetop_and_point (window);
+ if (window->node != node)
+ window_set_node_of_window (window, node);
+ window->point = offset;
+ window_adjust_pagetop (window);
+ }
+ return offset;
+}
+
+long
+info_search_in_node (char *string, NODE *node, long int start,
+ WINDOW *window, int dir, int case_sensitive)
+{
+ return info_search_in_node_internal (string, node, start,
+ window, dir, case_sensitive, NULL);
+}
+
+/* Search NODE, looking for the largest possible match of STRING. Start the
+ search at START. Return the absolute position of the match, or -1, if
+ no part of the string could be found. */
+long
+info_target_search_node (NODE *node, char *string, long int start)
+{
+ register int i;
+ long offset = 0;
+ char *target;
+
+ target = xstrdup (string);
+ i = strlen (target);
+
+ /* Try repeatedly searching for this string while removing words from
+ the end of it. */
+ while (i)
+ {
+ target[i] = '\0';
+ offset = info_search_in_node (target, node, start, NULL, 1, 0);
+
+ if (offset != -1)
+ break;
+
+ /* Delete the last word from TARGET. */
+ for (; i && (!whitespace (target[i]) && (target[i] != ',')); i--);
+ }
+ free (target);
+ return offset;
+}
+
+/* Search for STRING starting in WINDOW. The starting position is determined
+ by DIR and RESBND argument. If the latter is given, and its START field
+ is not -1, it gives starting position. Otherwise, the search begins at
+ window point + DIR.
+
+ If the string is found in this node, set point to that position.
+ Otherwise, get the file buffer associated with WINDOW's node, and search
+ through each node in that file.
+
+ If the search succeeds and RESBND is given, its START and END fields
+ contain bounds of the found string instance (only for regexp searches).
+
+ If the search fails, return non-zero, else zero. Side-effect window
+ leaving the node and point where the string was found current. */
+static int
+info_search_internal (char *string, WINDOW *window,
+ int dir, int case_sensitive,
+ SEARCH_BINDING *resbnd)
+{
+ register int i;
+ FILE_BUFFER *file_buffer;
+ char *initial_nodename;
+ long ret, start;
+
+ file_buffer = file_buffer_of_window (window);
+ initial_nodename = window->node->nodename;
+
+ if (resbnd && resbnd->start != -1)
+ start = resbnd->start;
+ else
+ /* This used to begin from window->point, unless this was a repeated
+ search command. But invoking search with an argument loses with
+ that logic, since info_last_executed_command is then set to
+ info_add_digit_to_numeric_arg. I think there's no sense in
+ ``finding'' a string that is already under the cursor, anyway. */
+ start = window->point + dir;
+
+ ret = info_search_in_node_internal
+ (string, window->node, start, window, dir,
+ case_sensitive, resbnd);
+
+ if (ret != -1)
+ {
+ /* We won! */
+ if (!echo_area_is_active && !isearch_is_active)
+ window_clear_echo_area ();
+ return 0;
+ }
+
+ start = 0;
+
+ /* The string wasn't found in the current node. Search through the
+ window's file buffer, iff the current node is not "*". */
+ if (!file_buffer || (strcmp (initial_nodename, "*") == 0))
+ return -1;
+
+ /* If this file has tags, search through every subfile, starting at
+ this node's subfile and node. Otherwise, search through the
+ file's node list. */
+ if (file_buffer->tags)
+ {
+ register int current_tag = 0, number_of_tags;
+ char *last_subfile;
+ TAG *tag;
+ char *msg = NULL;
+
+ /* Find number of tags and current tag. */
+ last_subfile = NULL;
+ for (i = 0; file_buffer->tags[i]; i++)
+ if (strcmp (initial_nodename, file_buffer->tags[i]->nodename) == 0)
+ {
+ current_tag = i;
+ last_subfile = file_buffer->tags[i]->filename;
+ }
+
+ number_of_tags = i;
+
+ /* If there is no last_subfile, our tag wasn't found. */
+ if (!last_subfile)
+ return -1;
+
+ /* Search through subsequent nodes, wrapping around to the top
+ of the info file until we find the string or return to this
+ window's node and point. */
+ while (1)
+ {
+ NODE *node;
+
+ /* Allow C-g to quit the search, failing it if pressed. */
+ return_if_control_g (-1);
+
+ /* Find the next tag that isn't an anchor. */
+ for (i = current_tag + dir; i != current_tag; i += dir)
+ {
+ if (i < 0)
+ {
+ msg = N_("Search continued from the end of the document.");
+ i = number_of_tags - 1;
+ }
+ else if (i == number_of_tags)
+ {
+ msg = N_("Search continued from the beginning of the document.");
+ i = 0;
+ }
+
+ tag = file_buffer->tags[i];
+ if (tag->nodelen != 0)
+ break;
+ }
+
+ /* If we got past out starting point, bail out. */
+ if (i == current_tag)
+ return -1;
+ current_tag = i;
+
+ if (!echo_area_is_active && (last_subfile != tag->filename))
+ {
+ window_message_in_echo_area
+ (_("Searching subfile %s ..."),
+ filename_non_directory (tag->filename), NULL);
+
+ last_subfile = tag->filename;
+ }
+
+ node = info_get_node (file_buffer->filename, tag->nodename);
+
+ if (!node)
+ {
+ /* If not doing i-search... */
+ if (!echo_area_is_active)
+ {
+ if (info_recent_file_error)
+ info_error (info_recent_file_error, NULL, NULL);
+ else
+ info_error (msg_cant_file_node,
+ filename_non_directory (file_buffer->filename),
+ tag->nodename);
+ }
+ return -1;
+ }
+
+ if (dir < 0)
+ start = tag->nodelen;
+
+ ret =
+ info_search_in_node_internal (string, node, start, window, dir,
+ case_sensitive, resbnd);
+
+ /* Did we find the string in this node? */
+ if (ret != -1)
+ {
+ /* Yes! We win. */
+ remember_window_and_node (window, node);
+ if (!echo_area_is_active)
+ {
+ if (msg)
+ window_message_in_echo_area ("%s", (char *) _(msg), NULL);
+ else
+ window_clear_echo_area ();
+ }
+ return 0;
+ }
+
+ /* No. Free this node, and make sure that we haven't passed
+ our starting point. */
+ free (node);
+
+ if (strcmp (initial_nodename, tag->nodename) == 0)
+ return -1;
+ }
+ }
+ return -1;
+}
+
+DECLARE_INFO_COMMAND (info_search_case_sensitively,
+ _("Read a string and search for it case-sensitively"))
+{
+ last_search_direction = count > 0 ? 1 : -1;
+ last_search_case_sensitive = 1;
+ info_search_1 (window, count, key, 1, 1);
+}
+
+DECLARE_INFO_COMMAND (info_search, _("Read a string and search for it"))
+{
+ last_search_direction = count > 0 ? 1 : -1;
+ last_search_case_sensitive = 0;
+ info_search_1 (window, count, key, 0, 1);
+}
+
+DECLARE_INFO_COMMAND (info_search_backward,
+ _("Read a string and search backward for it"))
+{
+ last_search_direction = count > 0 ? -1 : 1;
+ last_search_case_sensitive = 0;
+ info_search_1 (window, -count, key, 0, 1);
+}
+
+static void
+info_search_1 (WINDOW *window, int count, unsigned char key,
+ int case_sensitive, int ask_for_string)
+{
+ char *line, *prompt;
+ int result, old_pagetop;
+ int direction;
+
+ if (count < 0)
+ {
+ direction = -1;
+ count = -count;
+ }
+ else
+ {
+ direction = 1;
+ if (count == 0)
+ count = 1; /* for backward compatibility */
+ }
+
+ /* Read a string from the user, defaulting the search to SEARCH_STRING. */
+ if (!search_string)
+ {
+ search_string = xmalloc (search_string_size = 100);
+ search_string[0] = '\0';
+ }
+
+ if (ask_for_string)
+ {
+ prompt = xmalloc (strlen (_("%s%s%s [%s]: "))
+ + strlen (_("Regexp search"))
+ + strlen (_(" case-sensitively"))
+ + strlen (_(" backward"))
+ + strlen (search_string));
+
+ sprintf (prompt, _("%s%s%s [%s]: "),
+ use_regex ? _("Regexp search") : _("Search"),
+ case_sensitive ? _(" case-sensitively") : "",
+ direction < 0 ? _(" backward") : "",
+ search_string);
+
+ line = info_read_in_echo_area (window, prompt);
+ free (prompt);
+
+ if (!line)
+ {
+ info_abort_key (window, 0, 0);
+ return;
+ }
+
+ if (*line)
+ {
+ if (strlen (line) + 1 > (unsigned int) search_string_size)
+ search_string = xrealloc
+ (search_string, (search_string_size += 50 + strlen (line)));
+
+ strcpy (search_string, line);
+ free (line);
+ }
+ }
+
+ /* If the search string includes upper-case letters, make the search
+ case-sensitive. */
+ if (case_sensitive == 0)
+ for (line = search_string; *line; line++)
+ if (isupper (*line))
+ {
+ case_sensitive = 1;
+ break;
+ }
+
+ old_pagetop = active_window->pagetop;
+ for (result = 0; result == 0 && count--; )
+ result = info_search_internal (search_string,
+ active_window, direction, case_sensitive,
+ NULL);
+
+ if (result != 0 && !info_error_was_printed)
+ info_error (_("Search failed."), NULL, NULL);
+ else if (old_pagetop != active_window->pagetop)
+ {
+ int new_pagetop;
+
+ new_pagetop = active_window->pagetop;
+ active_window->pagetop = old_pagetop;
+ set_window_pagetop (active_window, new_pagetop);
+ if (auto_footnotes_p)
+ info_get_or_remove_footnotes (active_window);
+ }
+
+ /* Perhaps free the unreferenced file buffers that were searched, but
+ not retained. */
+ info_gc_file_buffers ();
+}
+
+DECLARE_INFO_COMMAND (info_search_next,
+ _("Repeat last search in the same direction"))
+{
+ if (!last_search_direction)
+ info_error (_("No previous search string"), NULL, NULL);
+ else
+ info_search_1 (window, last_search_direction * count,
+ key, last_search_case_sensitive, 0);
+}
+
+DECLARE_INFO_COMMAND (info_search_previous,
+ _("Repeat last search in the reverse direction"))
+{
+ if (!last_search_direction)
+ info_error (_("No previous search string"), NULL, NULL);
+ else
+ info_search_1 (window, -last_search_direction * count,
+ key, last_search_case_sensitive, 0);
+}
+
+/* **************************************************************** */
+/* */
+/* Incremental Searching */
+/* */
+/* **************************************************************** */
+
+static void incremental_search (WINDOW *window, int count,
+ unsigned char ignore);
+
+DECLARE_INFO_COMMAND (isearch_forward,
+ _("Search interactively for a string as you type it"))
+{
+ incremental_search (window, count, key);
+}
+
+DECLARE_INFO_COMMAND (isearch_backward,
+ _("Search interactively for a string as you type it"))
+{
+ incremental_search (window, -count, key);
+}
+
+/* Incrementally search for a string as it is typed. */
+/* The last accepted incremental search string. */
+static char *last_isearch_accepted = NULL;
+
+/* The current incremental search string. */
+static char *isearch_string = NULL;
+static int isearch_string_index = 0;
+static int isearch_string_size = 0;
+static unsigned char isearch_terminate_search_key = ESC;
+
+/* Array of search states. */
+static SEARCH_STATE **isearch_states = NULL;
+static int isearch_states_index = 0;
+static int isearch_states_slots = 0;
+
+/* Push the state of this search. */
+static void
+push_isearch (WINDOW *window, int search_index, int direction, int failing)
+{
+ SEARCH_STATE *state;
+
+ state = xmalloc (sizeof (SEARCH_STATE));
+ window_get_state (window, state);
+ state->search_index = search_index;
+ state->direction = direction;
+ state->failing = failing;
+
+ add_pointer_to_array (state, isearch_states_index, isearch_states,
+ isearch_states_slots, 20, SEARCH_STATE *);
+}
+
+/* Pop the state of this search to WINDOW, SEARCH_INDEX, and DIRECTION. */
+static void
+pop_isearch (WINDOW *window, int *search_index, int *direction, int *failing)
+{
+ SEARCH_STATE *state;
+
+ if (isearch_states_index)
+ {
+ isearch_states_index--;
+ state = isearch_states[isearch_states_index];
+ window_set_state (window, state);
+ *search_index = state->search_index;
+ *direction = state->direction;
+ *failing = state->failing;
+
+ free (state);
+ isearch_states[isearch_states_index] = NULL;
+ }
+}
+
+/* Free the memory used by isearch_states. */
+static void
+free_isearch_states (void)
+{
+ register int i;
+
+ for (i = 0; i < isearch_states_index; i++)
+ {
+ free (isearch_states[i]);
+ isearch_states[i] = NULL;
+ }
+ isearch_states_index = 0;
+}
+
+/* Display the current search in the echo area. */
+static void
+show_isearch_prompt (int dir, unsigned char *string, int failing_p)
+{
+ register int i;
+ const char *prefix;
+ char *prompt, *p_rep;
+ unsigned int prompt_len, p_rep_index, p_rep_size;
+
+ if (dir < 0)
+ prefix = use_regex ? _("Regexp I-search backward: ")
+ : _("I-search backward: ");
+ else
+ prefix = use_regex ? _("Regexp I-search: ")
+ : _("I-search: ");
+
+ p_rep_index = p_rep_size = 0;
+ p_rep = NULL;
+ for (i = 0; string[i]; i++)
+ {
+ char *rep;
+
+ switch (string[i])
+ {
+ case ' ': rep = " "; break;
+ case LFD: rep = "\\n"; break;
+ case TAB: rep = "\\t"; break;
+ default:
+ rep = pretty_keyname (string[i]);
+ }
+ if ((p_rep_index + strlen (rep) + 1) >= p_rep_size)
+ p_rep = xrealloc (p_rep, p_rep_size += 100);
+
+ strcpy (p_rep + p_rep_index, rep);
+ p_rep_index += strlen (rep);
+ }
+
+ prompt_len = strlen (prefix) + p_rep_index + 1;
+ if (failing_p)
+ prompt_len += strlen (_("Failing "));
+ prompt = xmalloc (prompt_len);
+ sprintf (prompt, "%s%s%s", failing_p ? _("Failing ") : "", prefix,
+ p_rep ? p_rep : "");
+
+ window_message_in_echo_area ("%s", prompt, NULL);
+ maybe_free (p_rep);
+ free (prompt);
+ display_cursor_at_point (active_window);
+}
+
+static void
+incremental_search (WINDOW *window, int count, unsigned char ignore)
+{
+ unsigned char key;
+ int last_search_result, search_result, dir;
+ SEARCH_STATE mystate, orig_state;
+ char *p;
+ int case_sensitive = 0;
+ SEARCH_BINDING bnd;
+
+ bnd.start = -1;
+
+ if (count < 0)
+ dir = -1;
+ else
+ dir = 1;
+
+ last_search_result = search_result = 0;
+
+ window_get_state (window, &orig_state);
+
+ isearch_string_index = 0;
+ if (!isearch_string_size)
+ isearch_string = xmalloc (isearch_string_size = 50);
+
+ /* Show the search string in the echo area. */
+ isearch_string[isearch_string_index] = '\0';
+ show_isearch_prompt (dir, (unsigned char *) isearch_string, search_result);
+
+ isearch_is_active = 1;
+
+ while (isearch_is_active)
+ {
+ VFunction *func = NULL;
+ int quoted = 0;
+
+ /* If a recent display was interrupted, then do the redisplay now if
+ it is convenient. */
+ if (!info_any_buffered_input_p () && display_was_interrupted_p)
+ {
+ display_update_one_window (window);
+ display_cursor_at_point (active_window);
+ }
+
+ /* Read a character and dispatch on it. */
+ key = info_get_input_char ();
+ window_get_state (window, &mystate);
+
+ if (key == DEL || key == Control ('h'))
+ {
+ /* User wants to delete one level of search? */
+ if (!isearch_states_index)
+ {
+ terminal_ring_bell ();
+ continue;
+ }
+ else
+ {
+ pop_isearch
+ (window, &isearch_string_index, &dir, &search_result);
+ isearch_string[isearch_string_index] = '\0';
+ show_isearch_prompt (dir, (unsigned char *) isearch_string,
+ search_result);
+ goto after_search;
+ }
+ }
+ else if (key == Control ('q'))
+ {
+ key = info_get_input_char ();
+ quoted = 1;
+ }
+
+ /* We are about to search again, or quit. Save the current search. */
+ push_isearch (window, isearch_string_index, dir, search_result);
+
+ if (quoted)
+ goto insert_and_search;
+
+ if (!Meta_p (key) || key > 32)
+ {
+ /* If this key is not a keymap, get its associated function,
+ if any. If it is a keymap, then it's probably ESC from an
+ arrow key, and we handle that case below. */
+ char type = window->keymap[key].type;
+ func = type == ISFUNC
+ ? InfoFunction(window->keymap[key].function)
+ : NULL; /* function member is a Keymap if ISKMAP */
+
+ if (isprint (key) || (type == ISFUNC && func == NULL))
+ {
+ insert_and_search:
+
+ if (isearch_string_index + 2 >= isearch_string_size)
+ isearch_string = xrealloc
+ (isearch_string, isearch_string_size += 100);
+
+ isearch_string[isearch_string_index++] = key;
+ isearch_string[isearch_string_index] = '\0';
+ goto search_now;
+ }
+ else if (func == (VFunction *) isearch_forward
+ || func == (VFunction *) isearch_backward)
+ {
+ /* If this key invokes an incremental search, then this
+ means that we will either search again in the same
+ direction, search again in the reverse direction, or
+ insert the last search string that was accepted through
+ incremental searching. */
+ if ((func == (VFunction *) isearch_forward && dir > 0) ||
+ (func == (VFunction *) isearch_backward && dir < 0))
+ {
+ /* If the user has typed no characters, then insert the
+ last successful search into the current search string. */
+ if (isearch_string_index == 0)
+ {
+ /* Of course, there must be something to insert. */
+ if (last_isearch_accepted)
+ {
+ if (strlen ((char *) last_isearch_accepted) + 1
+ >= (unsigned int) isearch_string_size)
+ isearch_string = (char *)
+ xrealloc (isearch_string,
+ isearch_string_size += 10 +
+ strlen (last_isearch_accepted));
+ strcpy (isearch_string, last_isearch_accepted);
+ isearch_string_index = strlen (isearch_string);
+ goto search_now;
+ }
+ else
+ continue;
+ }
+ else
+ {
+ /* Search again in the same direction. This means start
+ from a new place if the last search was successful. */
+ if (search_result == 0)
+ {
+ window->point += dir;
+ bnd.start = -1;
+ }
+ }
+ }
+ else
+ {
+ /* Reverse the direction of the search. */
+ dir = -dir;
+ }
+ }
+ else if (func == (VFunction *) info_abort_key)
+ {
+ /* If C-g pressed, and the search is failing, pop the search
+ stack back to the last unfailed search. */
+ if (isearch_states_index && (search_result != 0))
+ {
+ terminal_ring_bell ();
+ while (isearch_states_index && (search_result != 0))
+ pop_isearch
+ (window, &isearch_string_index, &dir, &search_result);
+ isearch_string[isearch_string_index] = '\0';
+ show_isearch_prompt (dir, (unsigned char *) isearch_string,
+ search_result);
+ continue;
+ }
+ else
+ goto exit_search;
+ }
+ else
+ goto exit_search;
+ }
+ else
+ {
+ exit_search:
+ /* The character is not printable, or it has a function which is
+ non-null. Exit the search, remembering the search string. If
+ the key is not the same as the isearch_terminate_search_key,
+ then push it into pending input. */
+ if (isearch_string_index && func != (VFunction *) info_abort_key)
+ {
+ maybe_free (last_isearch_accepted);
+ last_isearch_accepted = xstrdup (isearch_string);
+ }
+
+ /* If the key is the isearch_terminate_search_key, but some buffered
+ input is pending, it is almost invariably because the ESC key is
+ actually the beginning of an escape sequence, like in case they
+ pressed an arrow key. So don't gobble the ESC key, push it back
+ into pending input. */
+ /* FIXME: this seems like a kludge! We need a more reliable
+ mechanism to know when ESC is a separate key and when it is
+ part of an escape sequence. */
+ if (key != RET /* Emacs addicts want RET to get lost */
+ && (key != isearch_terminate_search_key
+ || info_any_buffered_input_p ()))
+ info_set_pending_input (key);
+
+ if (func == (VFunction *) info_abort_key)
+ {
+ if (isearch_states_index)
+ window_set_state (window, &orig_state);
+ }
+
+ if (!echo_area_is_active)
+ window_clear_echo_area ();
+
+ if (auto_footnotes_p)
+ info_get_or_remove_footnotes (active_window);
+
+ isearch_is_active = 0;
+ continue;
+ }
+
+ /* Search for the contents of isearch_string. */
+ search_now:
+ show_isearch_prompt (dir, (unsigned char *) isearch_string, search_result);
+
+ /* If the search string includes upper-case letters, make the
+ search case-sensitive. */
+ for (p = isearch_string; *p; p++)
+ if (isupper (*p))
+ {
+ case_sensitive = 1;
+ break;
+ }
+
+ /* Regex isearch means we better search again every time. We
+ might have had a failed search for "\", for example, but now we
+ have "\.". */
+ if (use_regex)
+ {
+ search_result = info_search_internal (isearch_string,
+ window, dir, case_sensitive,
+ &bnd);
+ }
+ else if (search_result == 0)
+ { /* We test for search_result being zero because a non-zero
+ value means the string was not found in entire document. */
+ /* Check to see if the current search string is right here. If
+ we are looking at it, then don't bother calling the search
+ function. */
+ if (((dir < 0) &&
+ ((case_sensitive ? strncmp : mbsncasecmp)
+ (window->node->contents + window->point,
+ isearch_string, isearch_string_index) == 0)) ||
+ ((dir > 0) &&
+ ((window->point - isearch_string_index) >= 0) &&
+ ((case_sensitive ? strncmp : mbsncasecmp)
+ (window->node->contents +
+ (window->point - (isearch_string_index - 1)),
+ isearch_string, isearch_string_index) == 0)))
+ {
+ if (dir > 0)
+ window->point++;
+ }
+ else
+ search_result = info_search_internal (isearch_string,
+ window, dir, case_sensitive,
+ NULL);
+ }
+
+ /* If this search failed, and we didn't already have a failed search,
+ then ring the terminal bell. */
+ if (search_result != 0 && last_search_result == 0)
+ terminal_ring_bell ();
+
+ after_search:
+ show_isearch_prompt (dir, (unsigned char *) isearch_string, search_result);
+
+ if (search_result == 0)
+ {
+ if ((mystate.node == window->node) &&
+ (mystate.pagetop != window->pagetop))
+ {
+ int newtop = window->pagetop;
+ window->pagetop = mystate.pagetop;
+ set_window_pagetop (window, newtop);
+ }
+ display_update_one_window (window);
+ display_cursor_at_point (window);
+ }
+
+ last_search_result = search_result;
+ }
+
+ /* Free the memory used to remember each search state. */
+ free_isearch_states ();
+
+ /* Perhaps GC some file buffers. */
+ info_gc_file_buffers ();
+
+ /* After searching, leave the window in the correct state. */
+ if (!echo_area_is_active)
+ window_clear_echo_area ();
+}
+
+/* GC some file buffers. A file buffer can be gc-ed if there we have
+ no nodes in INFO_WINDOWS that reference this file buffer's contents.
+ Garbage collecting a file buffer means to free the file buffers
+ contents. */
+static void
+info_gc_file_buffers (void)
+{
+ register int fb_index, iw_index, i;
+ register FILE_BUFFER *fb;
+ register INFO_WINDOW *iw;
+
+ if (!info_loaded_files)
+ return;
+
+ for (fb_index = 0; (fb = info_loaded_files[fb_index]); fb_index++)
+ {
+ int fb_referenced_p = 0;
+
+ /* If already gc-ed, do nothing. */
+ if (!fb->contents)
+ continue;
+
+ /* If this file had to be uncompressed, check to see if we should
+ gc it. This means that the user-variable "gc-compressed-files"
+ is non-zero. */
+ if ((fb->flags & N_IsCompressed) && !gc_compressed_files)
+ continue;
+
+ /* If this file's contents are not gc-able, move on. */
+ if (fb->flags & N_CannotGC)
+ continue;
+
+ /* Check each INFO_WINDOW to see if it has any nodes which reference
+ this file. */
+ for (iw_index = 0; (iw = info_windows[iw_index]); iw_index++)
+ {
+ for (i = 0; iw->nodes && iw->nodes[i]; i++)
+ {
+ if ((FILENAME_CMP (fb->fullpath, iw->nodes[i]->filename) == 0) ||
+ (FILENAME_CMP (fb->filename, iw->nodes[i]->filename) == 0))
+ {
+ fb_referenced_p = 1;
+ break;
+ }
+ }
+ }
+
+ /* If this file buffer wasn't referenced, free its contents. */
+ if (!fb_referenced_p)
+ {
+ free (fb->contents);
+ fb->contents = NULL;
+ }
+ }
+}
+
+/* **************************************************************** */
+/* */
+/* Traversing and Selecting References */
+/* */
+/* **************************************************************** */
+
+/* Move to the next or previous cross reference in this node. */
+static int
+info_move_to_xref (WINDOW *window, int count, unsigned char key, int dir)
+{
+ long firstmenu, firstxref;
+ long nextmenu, nextxref;
+ long placement = -1;
+ long start = 0;
+ NODE *node = window->node;
+ int save_use_regex = use_regex;
+
+ /* Most of our keywords contain * characters; don't use regexes. */
+ use_regex = 0;
+
+ if (dir < 0)
+ start = node->nodelen;
+
+ /* This search is only allowed to fail if there is no menu or cross
+ reference in the current node. Otherwise, the first menu or xref
+ found is moved to. */
+
+ firstmenu = info_search_in_node
+ (INFO_MENU_ENTRY_LABEL, node, start, NULL, dir, 0);
+
+ /* FIRSTMENU may point directly to the line defining the menu. Skip that
+ and go directly to the first item. */
+
+ if (firstmenu != -1)
+ {
+ char *text = node->contents + firstmenu;
+
+ if (strncmp (text, INFO_MENU_LABEL, strlen (INFO_MENU_LABEL)) == 0)
+ firstmenu = info_search_in_node
+ (INFO_MENU_ENTRY_LABEL, node, firstmenu + dir, NULL, dir, 0);
+ }
+
+ firstxref =
+ info_search_in_node (INFO_XREF_LABEL, node, start, NULL, dir, 0);
+
+#if defined (HANDLE_MAN_PAGES)
+ if ((firstxref == -1) && (node->flags & N_IsManPage))
+ {
+ firstxref = locate_manpage_xref (node, start, dir);
+ }
+#endif /* HANDLE_MAN_PAGES */
+
+ if (firstmenu == -1 && firstxref == -1)
+ {
+ if (!cursor_movement_scrolls_p)
+ info_error (msg_no_xref_node, NULL, NULL);
+ use_regex = save_use_regex;
+ return cursor_movement_scrolls_p;
+ }
+
+ /* There is at least one cross reference or menu entry in this node.
+ Try hard to find the next available one. */
+
+ nextmenu = info_search_in_node
+ (INFO_MENU_ENTRY_LABEL, node, window->point + dir, NULL, dir, 0);
+
+ nextxref = info_search_in_node
+ (INFO_XREF_LABEL, node, window->point + dir, NULL, dir, 0);
+
+#if defined (HANDLE_MAN_PAGES)
+ if ((nextxref == -1) && (node->flags & N_IsManPage) && (firstxref != -1))
+ nextxref = locate_manpage_xref (node, window->point + dir, dir);
+#endif /* HANDLE_MAN_PAGES */
+
+ /* Ignore "Menu:" as a menu item. */
+ if (nextmenu != -1)
+ {
+ char *text = node->contents + nextmenu;
+
+ if (strncmp (text, INFO_MENU_LABEL, strlen (INFO_MENU_LABEL)) == 0)
+ nextmenu = info_search_in_node
+ (INFO_MENU_ENTRY_LABEL, node, nextmenu + dir, NULL, dir, 0);
+ }
+
+ /* No more searches, back to whatever the user wanted. */
+ use_regex = save_use_regex;
+
+ /* If there is both a next menu entry, and a next xref entry, choose the
+ one which occurs first. Otherwise, select the one which actually
+ appears in this node following point. */
+ if (nextmenu != -1 && nextxref != -1)
+ {
+ if (((dir == 1) && (nextmenu < nextxref)) ||
+ ((dir == -1) && (nextmenu > nextxref)))
+ placement = nextmenu + 1;
+ else
+ placement = nextxref;
+ }
+ else if (nextmenu != -1)
+ placement = nextmenu + 1;
+ else if (nextxref != -1)
+ placement = nextxref;
+
+ /* If there was neither a menu or xref entry appearing in this node after
+ point, choose the first menu or xref entry appearing in this node. */
+ if (placement == -1)
+ {
+ if (cursor_movement_scrolls_p)
+ return 1;
+ else
+ {
+ if (firstmenu != -1 && firstxref != -1)
+ {
+ if (((dir == 1) && (firstmenu < firstxref)) ||
+ ((dir == -1) && (firstmenu > firstxref)))
+ placement = firstmenu + 1;
+ else
+ placement = firstxref;
+ }
+ else if (firstmenu != -1)
+ placement = firstmenu + 1;
+ else
+ placement = firstxref;
+ }
+ }
+ window->point = placement;
+ window_adjust_pagetop (window);
+ window->flags |= W_UpdateWindow;
+ return 0;
+}
+
+DECLARE_INFO_COMMAND (info_move_to_prev_xref,
+ _("Move to the previous cross reference"))
+{
+ if (count < 0)
+ info_move_to_prev_xref (window, -count, key);
+ else
+ {
+ while (info_move_to_xref (window, count, key, -1))
+ {
+ info_error_was_printed = 0;
+ if (backward_move_node_structure (window, info_scroll_behaviour))
+ break;
+ move_to_new_line (window->line_count, window->line_count - 1,
+ window);
+ }
+ }
+}
+
+DECLARE_INFO_COMMAND (info_move_to_next_xref,
+ _("Move to the next cross reference"))
+{
+ if (count < 0)
+ info_move_to_next_xref (window, -count, key);
+ else
+ {
+ /* Note: This can cause some blinking when the next cross reference is
+ located several nodes further. This effect can be easily suppressed
+ by setting display_inhibited to 1, however this will also make
+ error messages to be dumped on stderr, instead on the echo area. */
+ while (info_move_to_xref (window, count, key, 1))
+ {
+ info_error_was_printed = 0;
+ if (forward_move_node_structure (window, info_scroll_behaviour))
+ break;
+ move_to_new_line (0, 0, window);
+ }
+ }
+}
+
+/* Select the menu item or reference that appears on this line. */
+DECLARE_INFO_COMMAND (info_select_reference_this_line,
+ _("Select reference or menu item appearing on this line"))
+{
+ char *line;
+
+ if (window->line_starts)
+ line = window->line_starts[window_line_of_point (window)];
+ else
+ line = "";
+
+ /* If this line contains a menu item, select that one. */
+ if (strncmp ("* ", line, 2) == 0)
+ info_menu_or_ref_item (window, count, key, info_menu_of_node, 0);
+ else
+ info_menu_or_ref_item (window, count, key, info_xrefs_of_node, 0);
+}
+
+/* **************************************************************** */
+/* */
+/* Miscellaneous Info Commands */
+/* */
+/* **************************************************************** */
+
+/* What to do when C-g is pressed in a window. */
+DECLARE_INFO_COMMAND (info_abort_key, _("Cancel current operation"))
+{
+ /* If error printing doesn't oridinarily ring the bell, do it now,
+ since C-g always rings the bell. Otherwise, let the error printer
+ do it. */
+ if (!info_error_rings_bell_p)
+ terminal_ring_bell ();
+ info_error (_("Quit"), NULL, NULL);
+
+ info_initialize_numeric_arg ();
+ info_clear_pending_input ();
+ info_last_executed_command = NULL;
+}
+
+/* Move the cursor to the desired line of the window. */
+DECLARE_INFO_COMMAND (info_move_to_window_line,
+ _("Move the cursor to a specific line of the window"))
+{
+ int line;
+
+ /* With no numeric argument of any kind, default to the center line. */
+ if (!info_explicit_arg && count == 1)
+ line = (window->height / 2) + window->pagetop;
+ else
+ {
+ if (count < 0)
+ line = (window->height + count) + window->pagetop;
+ else
+ line = window->pagetop + count;
+ }
+
+ /* If the line doesn't appear in this window, make it do so. */
+ if ((line - window->pagetop) >= window->height)
+ line = window->pagetop + (window->height - 1);
+
+ /* If the line is too small, make it fit. */
+ if (line < window->pagetop)
+ line = window->pagetop;
+
+ /* If the selected line is past the bottom of the node, force it back. */
+ if (line >= window->line_count)
+ line = window->line_count - 1;
+
+ window->point = (window->line_starts[line] - window->node->contents);
+}
+
+/* Clear the screen and redraw its contents. Given a numeric argument,
+ move the line the cursor is on to the COUNT'th line of the window. */
+DECLARE_INFO_COMMAND (info_redraw_display, _("Redraw the display"))
+{
+ if ((!info_explicit_arg && count == 1) || echo_area_is_active)
+ {
+ terminal_clear_screen ();
+ display_clear_display (the_display);
+ window_mark_chain (windows, W_UpdateWindow);
+ display_update_display (windows);
+ }
+ else
+ {
+ int desired_line, point_line;
+ int new_pagetop;
+
+ point_line = window_line_of_point (window) - window->pagetop;
+
+ if (count < 0)
+ desired_line = window->height + count;
+ else
+ desired_line = count;
+
+ if (desired_line < 0)
+ desired_line = 0;
+
+ if (desired_line >= window->height)
+ desired_line = window->height - 1;
+
+ if (desired_line == point_line)
+ return;
+
+ new_pagetop = window->pagetop + (point_line - desired_line);
+
+ set_window_pagetop (window, new_pagetop);
+ }
+}
+/* This command does nothing. It is the fact that a key is bound to it
+ that has meaning. See the code at the top of info_session (). */
+DECLARE_INFO_COMMAND (info_quit, _("Quit using Info"))
+{}
+
+
+/* **************************************************************** */
+/* */
+/* Reading Keys and Dispatching on Them */
+/* */
+/* **************************************************************** */
+
+/* Declaration only. Special cased in info_dispatch_on_key ().
+ Doc string is to avoid ugly results with describe_key etc. */
+DECLARE_INFO_COMMAND (info_do_lowercase_version,
+ _("Run command bound to this key's lowercase variant"))
+{}
+
+static void
+dispatch_error (char *keyseq)
+{
+ char *rep;
+
+ rep = pretty_keyseq (keyseq);
+
+ if (!echo_area_is_active)
+ info_error (_("Unknown command (%s)."), rep, NULL);
+ else
+ {
+ char *temp = xmalloc (1 + strlen (rep) + strlen (_("\"%s\" is invalid")));
+ sprintf (temp, _("`%s' is invalid"), rep);
+ terminal_ring_bell ();
+ inform_in_echo_area (temp);
+ free (temp);
+ }
+}
+
+/* Keeping track of key sequences. */
+static char *info_keyseq = NULL;
+static int info_keyseq_index = 0;
+static int info_keyseq_size = 0;
+static int info_keyseq_displayed_p = 0;
+
+/* Initialize the length of the current key sequence. */
+void
+initialize_keyseq (void)
+{
+ info_keyseq_index = 0;
+ info_keyseq_displayed_p = 0;
+}
+
+/* Add CHARACTER to the current key sequence. */
+void
+add_char_to_keyseq (char character)
+{
+ if (info_keyseq_index + 2 >= info_keyseq_size)
+ info_keyseq = (char *)xrealloc (info_keyseq, info_keyseq_size += 10);
+
+ info_keyseq[info_keyseq_index++] = character;
+ info_keyseq[info_keyseq_index] = '\0';
+}
+
+/* Display the current value of info_keyseq. If argument EXPECTING is
+ non-zero, input is expected to be read after the key sequence is
+ displayed, so add an additional prompting character to the sequence. */
+static void
+display_info_keyseq (int expecting_future_input)
+{
+ char *rep;
+
+ rep = pretty_keyseq (info_keyseq);
+ if (expecting_future_input)
+ strcat (rep, "-");
+
+ if (echo_area_is_active)
+ inform_in_echo_area (rep);
+ else
+ {
+ window_message_in_echo_area (rep, NULL, NULL);
+ display_cursor_at_point (active_window);
+ }
+ info_keyseq_displayed_p = 1;
+}
+
+/* Called by interactive commands to read a keystroke. */
+unsigned char
+info_get_another_input_char (void)
+{
+ int ready = !info_keyseq_displayed_p; /* ready if new and pending key */
+
+ /* If there isn't any input currently available, then wait a
+ moment looking for input. If we don't get it fast enough,
+ prompt a little bit with the current key sequence. */
+ if (!info_keyseq_displayed_p)
+ {
+ ready = 1;
+ if (!info_any_buffered_input_p () &&
+ !info_input_pending_p ())
+ {
+#if defined (FD_SET)
+ struct timeval timer;
+ fd_set readfds;
+
+ FD_ZERO (&readfds);
+ FD_SET (fileno (info_input_stream), &readfds);
+ timer.tv_sec = 1;
+ timer.tv_usec = 750;
+ ready = select (fileno(info_input_stream)+1, &readfds,
+ NULL, NULL, &timer);
+#else
+ ready = 0;
+#endif /* FD_SET */
+ }
+ }
+
+ if (!ready)
+ display_info_keyseq (1);
+
+ return info_get_input_char ();
+}
+
+/* Do the command associated with KEY in MAP. If the associated command is
+ really a keymap, then read another key, and dispatch into that map. */
+void
+info_dispatch_on_key (unsigned char key, Keymap map)
+{
+#if !defined(INFOKEY)
+ if (Meta_p (key) && (!ISO_Latin_p || map[key].function != ea_insert))
+ {
+ if (map[ESC].type == ISKMAP)
+ {
+ map = (Keymap)map[ESC].function;
+ add_char_to_keyseq (ESC);
+ key = UnMeta (key);
+ info_dispatch_on_key (key, map);
+ }
+ else
+ {
+ dispatch_error (info_keyseq);
+ }
+ return;
+ }
+#endif /* INFOKEY */
+
+ switch (map[key].type)
+ {
+ case ISFUNC:
+ {
+ VFunction *func;
+
+ func = InfoFunction(map[key].function);
+ if (func != NULL)
+ {
+ /* Special case info_do_lowercase_version (). */
+ if (func == (VFunction *) info_do_lowercase_version)
+ {
+#if defined(INFOKEY)
+ unsigned char lowerkey;
+
+ lowerkey = Meta_p(key) ? Meta (tolower (UnMeta (key))) : tolower (key);
+ if (lowerkey == key)
+ {
+ add_char_to_keyseq (key);
+ dispatch_error (info_keyseq);
+ return;
+ }
+ info_dispatch_on_key (lowerkey, map);
+#else /* !INFOKEY */
+ info_dispatch_on_key (tolower (key), map);
+#endif /* INFOKEY */
+ return;
+ }
+
+ add_char_to_keyseq (key);
+
+ if (info_keyseq_displayed_p)
+ display_info_keyseq (0);
+
+ {
+ WINDOW *where;
+
+ where = active_window;
+ (*InfoFunction(map[key].function))
+ (active_window, info_numeric_arg * info_numeric_arg_sign, key);
+
+ /* If we have input pending, then the last command was a prefix
+ command. Don't change the value of the last function vars.
+ Otherwise, remember the last command executed in the var
+ appropriate to the window in which it was executed. */
+ if (!info_input_pending_p ())
+ {
+ if (where == the_echo_area)
+ ea_last_executed_command = InfoFunction(map[key].function);
+ else
+ info_last_executed_command = InfoFunction(map[key].function);
+ }
+ }
+ }
+ else
+ {
+ add_char_to_keyseq (key);
+ dispatch_error (info_keyseq);
+ return;
+ }
+ }
+ break;
+
+ case ISKMAP:
+ add_char_to_keyseq (key);
+ if (map[key].function != NULL)
+ {
+ unsigned char newkey;
+
+ newkey = info_get_another_input_char ();
+ info_dispatch_on_key (newkey, (Keymap)map[key].function);
+ }
+ else
+ {
+ dispatch_error (info_keyseq);
+ return;
+ }
+ break;
+ }
+}
+
+/* **************************************************************** */
+/* */
+/* Numeric Arguments */
+/* */
+/* **************************************************************** */
+
+/* Handle C-u style numeric args, as well as M--, and M-digits. */
+
+/* Non-zero means that an explicit argument has been passed to this
+ command, as in C-u C-v. */
+int info_explicit_arg = 0;
+
+/* The sign of the numeric argument. */
+int info_numeric_arg_sign = 1;
+
+/* The value of the argument itself. */
+int info_numeric_arg = 1;
+
+/* Add the current digit to the argument in progress. */
+DECLARE_INFO_COMMAND (info_add_digit_to_numeric_arg,
+ _("Add this digit to the current numeric argument"))
+{
+ info_numeric_arg_digit_loop (window, 0, key);
+}
+
+/* C-u, universal argument. Multiply the current argument by 4.
+ Read a key. If the key has nothing to do with arguments, then
+ dispatch on it. If the key is the abort character then abort. */
+DECLARE_INFO_COMMAND (info_universal_argument,
+ _("Start (or multiply by 4) the current numeric argument"))
+{
+ info_numeric_arg *= 4;
+ info_numeric_arg_digit_loop (window, 0, 0);
+}
+
+/* Create a default argument. */
+void
+info_initialize_numeric_arg (void)
+{
+ info_numeric_arg = info_numeric_arg_sign = 1;
+ info_explicit_arg = 0;
+}
+
+DECLARE_INFO_COMMAND (info_numeric_arg_digit_loop,
+ _("Internally used by \\[universal-argument]"))
+{
+ unsigned char pure_key;
+ Keymap keymap = window->keymap;
+
+ while (1)
+ {
+ if (key)
+ pure_key = key;
+ else
+ {
+ if (display_was_interrupted_p && !info_any_buffered_input_p ())
+ display_update_display (windows);
+
+ if (active_window != the_echo_area)
+ display_cursor_at_point (active_window);
+
+ pure_key = key = info_get_another_input_char ();
+
+#if !defined(INFOKEY)
+ if (Meta_p (key))
+ add_char_to_keyseq (ESC);
+
+ add_char_to_keyseq (UnMeta (key));
+#else /* defined(INFOKEY) */
+ add_char_to_keyseq (key);
+#endif /* defined(INFOKEY) */
+ }
+
+#if !defined(INFOKEY)
+ if (Meta_p (key))
+ key = UnMeta (key);
+#endif /* !defined(INFOKEY) */
+
+ if (keymap[key].type == ISFUNC
+ && InfoFunction(keymap[key].function)
+ == (VFunction *) info_universal_argument)
+ {
+ info_numeric_arg *= 4;
+ key = 0;
+ continue;
+ }
+
+#if defined(INFOKEY)
+ if (Meta_p (key))
+ key = UnMeta (key);
+#endif /* !defined(INFOKEY) */
+
+
+ if (isdigit (key))
+ {
+ if (info_explicit_arg)
+ info_numeric_arg = (info_numeric_arg * 10) + (key - '0');
+ else
+ info_numeric_arg = (key - '0');
+ info_explicit_arg = 1;
+ }
+ else
+ {
+ if (key == '-' && !info_explicit_arg)
+ {
+ info_numeric_arg_sign = -1;
+ info_numeric_arg = 1;
+ }
+ else
+ {
+ info_keyseq_index--;
+ info_dispatch_on_key (pure_key, keymap);
+ return;
+ }
+ }
+ key = 0;
+ }
+}
+
+/* **************************************************************** */
+/* */
+/* Input Character Buffering */
+/* */
+/* **************************************************************** */
+
+/* Character waiting to be read next. */
+static int pending_input_character = 0;
+
+/* How to make there be no pending input. */
+static void
+info_clear_pending_input (void)
+{
+ pending_input_character = 0;
+}
+
+/* How to set the pending input character. */
+static void
+info_set_pending_input (unsigned char key)
+{
+ pending_input_character = key;
+}
+
+/* How to see if there is any pending input. */
+unsigned char
+info_input_pending_p (void)
+{
+ return pending_input_character;
+}
+
+/* Largest number of characters that we can read in advance. */
+#define MAX_INFO_INPUT_BUFFERING 512
+
+static int pop_index = 0, push_index = 0;
+static unsigned char info_input_buffer[MAX_INFO_INPUT_BUFFERING];
+
+/* Add KEY to the buffer of characters to be read. */
+static void
+info_push_typeahead (unsigned char key)
+{
+ /* Flush all pending input in the case of C-g pressed. */
+ if (key == Control ('g'))
+ {
+ push_index = pop_index;
+ info_set_pending_input (Control ('g'));
+ }
+ else
+ {
+ info_input_buffer[push_index++] = key;
+ if ((unsigned int) push_index >= sizeof (info_input_buffer))
+ push_index = 0;
+ }
+}
+
+/* Return the amount of space available in INFO_INPUT_BUFFER for new chars. */
+static int
+info_input_buffer_space_available (void)
+{
+ if (pop_index > push_index)
+ return pop_index - push_index;
+ else
+ return sizeof (info_input_buffer) - (push_index - pop_index);
+}
+
+/* Get a key from the buffer of characters to be read.
+ Return the key in KEY.
+ Result is non-zero if there was a key, or 0 if there wasn't. */
+static int
+info_get_key_from_typeahead (unsigned char *key)
+{
+ if (push_index == pop_index)
+ return 0;
+
+ *key = info_input_buffer[pop_index++];
+
+ if ((unsigned int) pop_index >= sizeof (info_input_buffer))
+ pop_index = 0;
+
+ return 1;
+}
+
+int
+info_any_buffered_input_p (void)
+{
+ info_gather_typeahead ();
+ return push_index != pop_index;
+}
+
+/* If characters are available to be read, then read them and stuff them into
+ info_input_buffer. Otherwise, do nothing. */
+void
+info_gather_typeahead (void)
+{
+ register int i = 0;
+ int tty, space_avail;
+ long chars_avail;
+ unsigned char input[MAX_INFO_INPUT_BUFFERING];
+
+ tty = fileno (info_input_stream);
+ chars_avail = 0;
+
+ space_avail = info_input_buffer_space_available ();
+
+ /* If we can just find out how many characters there are to read, do so. */
+#if defined (FIONREAD)
+ {
+ ioctl (tty, FIONREAD, &chars_avail);
+
+ if (chars_avail > space_avail)
+ chars_avail = space_avail;
+
+ if (chars_avail)
+ chars_avail = read (tty, &input[0], chars_avail);
+ }
+#else /* !FIONREAD */
+# if defined (O_NDELAY)
+ {
+ int flags;
+
+ flags = fcntl (tty, F_GETFL, 0);
+
+ fcntl (tty, F_SETFL, (flags | O_NDELAY));
+ chars_avail = read (tty, &input[0], space_avail);
+ fcntl (tty, F_SETFL, flags);
+
+ if (chars_avail == -1)
+ chars_avail = 0;
+ }
+# else /* !O_NDELAY */
+# ifdef __DJGPP__
+ {
+ extern long pc_term_chars_avail (void);
+
+ if (isatty (tty))
+ chars_avail = pc_term_chars_avail ();
+ else
+ {
+ /* We could be more accurate by calling ltell, but we have no idea
+ whether tty is buffered by stdio functions, and if so, how many
+ characters are already waiting in the buffer. So we punt. */
+ struct stat st;
+
+ if (fstat (tty, &st) < 0)
+ chars_avail = 1;
+ else
+ chars_avail = st.st_size;
+ }
+ if (chars_avail > space_avail)
+ chars_avail = space_avail;
+ if (chars_avail)
+ chars_avail = read (tty, &input[0], chars_avail);
+ }
+# endif/* __DJGPP__ */
+# endif /* O_NDELAY */
+#endif /* !FIONREAD */
+
+ while (i < chars_avail)
+ {
+ info_push_typeahead (input[i]);
+ i++;
+ }
+}
+
+/* How to read a single character. */
+unsigned char
+info_get_input_char (void)
+{
+ unsigned char keystroke;
+
+ info_gather_typeahead ();
+
+ if (pending_input_character)
+ {
+ keystroke = pending_input_character;
+ pending_input_character = 0;
+ }
+ else if (info_get_key_from_typeahead (&keystroke) == 0)
+ {
+ int rawkey;
+ unsigned char c;
+ int tty = fileno (info_input_stream);
+
+ /* Using stream I/O causes FIONREAD etc to fail to work
+ so unless someone can find a portable way of finding
+ out how many characters are currently buffered, we
+ should stay with away from stream I/O.
+ --Egil Kvaleberg <egilk@sn.no>, January 1997. */
+#ifdef EINTR
+ /* Keep reading if we got EINTR, so that we don't just exit.
+ --Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>,
+ 22 Dec 1997. */
+ {
+ int n;
+ do
+ n = read (tty, &c, 1);
+ while (n == -1 && errno == EINTR);
+ rawkey = n == 1 ? c : EOF;
+ }
+#else
+ rawkey = (read (tty, &c, 1) == 1) ? c : EOF;
+#endif
+
+ keystroke = rawkey;
+
+ if (rawkey == EOF)
+ {
+ if (info_input_stream != stdin)
+ {
+ fclose (info_input_stream);
+ info_input_stream = stdin;
+ tty = fileno (info_input_stream);
+ display_inhibited = 0;
+ display_update_display (windows);
+ display_cursor_at_point (active_window);
+ rawkey = (read (tty, &c, 1) == 1) ? c : EOF;
+ keystroke = rawkey;
+ }
+
+ if (rawkey == EOF)
+ {
+ terminal_unprep_terminal ();
+ close_dribble_file ();
+ xexit (0);
+ }
+ }
+ }
+
+ if (info_dribble_file)
+ dribble (keystroke);
+
+ return keystroke;
+}
diff --git a/info/session.h b/info/session.h
new file mode 100644
index 0000000..2052d07
--- /dev/null
+++ b/info/session.h
@@ -0,0 +1,249 @@
+/* session.h -- Functions found in session.c.
+ $Id: session.h,v 1.10 2008/03/04 09:44:57 gray Exp $
+
+ Copyright (C) 1993, 1998, 1999, 2001, 2002, 2004, 2007
+ 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/>.
+
+ Originally written by Brian Fox (bfox@ai.mit.edu). */
+
+#ifndef SESSION_H
+#define SESSION_H
+
+#include "info.h"
+#include "dribble.h"
+
+/* All commands that can be invoked from within info_session () receive
+ arguments in the same way. This simple define declares the header
+ of a function named NAME, with associated documentation DOC. The
+ documentation string is groveled out of the source files by the
+ utility program `makedoc', which is also responsible for making
+ the documentation/function-pointer maps. */
+#define DECLARE_INFO_COMMAND(name, doc) \
+void name (WINDOW *window, int count, unsigned char key)
+
+/* Variables found in session.h. */
+extern VFunction *info_last_executed_command;
+
+/* Variable controlling the garbage collection of files briefly visited
+ during searches. Such files are normally gc'ed, unless they were
+ compressed to begin with. If this variable is non-zero, it says
+ to gc even those file buffer contents which had to be uncompressed. */
+extern int gc_compressed_files;
+
+/* When non-zero, tiling takes place automatically when info_split_window
+ is called. */
+extern int auto_tiling_p;
+
+/* Variable controlling the behaviour of default scrolling when you are
+ already at the bottom of a node. */
+extern int info_scroll_behaviour;
+extern char *info_scroll_choices[];
+
+/* Values for info_scroll_behaviour. */
+#define IS_Continuous 0 /* Try to get first menu item, or failing that, the
+ "Next:" pointer, or failing that, the "Up:" and
+ "Next:" of the up. */
+#define IS_NextOnly 1 /* Try to get "Next:" menu item. */
+#define IS_PageOnly 2 /* Simply give up at the bottom of a node. */
+
+extern int cursor_movement_scrolls_p;
+
+/* Values for scroll_last_node */
+#define SLN_Stop 0 /* Stop at the last node */
+#define SLN_Scroll 1 /* Do usual scrolling */
+#define SLN_Top 2 /* Go to the top node */
+
+extern char *scroll_last_node_choices[];
+/* Controls what to do when a scrolling command is issued at the end of the
+ last node. */
+extern int scroll_last_node;
+
+/* Utility functions found in session.c */
+extern void info_dispatch_on_key (unsigned char key, Keymap map);
+extern unsigned char info_get_input_char (void);
+extern unsigned char info_get_another_input_char (void);
+extern unsigned char info_input_pending_p (void);
+extern void remember_window_and_node (WINDOW *window, NODE *node);
+extern void set_remembered_pagetop_and_point (WINDOW *window);
+extern void set_window_pagetop (WINDOW *window, int desired_top);
+extern void info_set_node_of_window (int remember, WINDOW *window,
+ NODE *node);
+extern void initialize_keyseq (void);
+extern void add_char_to_keyseq (char character);
+extern void info_gather_typeahead (void);
+extern FILE_BUFFER *file_buffer_of_window (WINDOW *window);
+extern long info_search_in_node (char *string, NODE *node,
+ long int start, WINDOW *window, int dir, int case_sensitive);
+extern long info_target_search_node (NODE *node, char *string,
+ long int start);
+extern void info_select_reference (WINDOW *window, REFERENCE *entry);
+extern int info_any_buffered_input_p (void);
+extern void print_node (NODE *node);
+extern void dump_node_to_file (NODE *node, char *filename,
+ int dump_subnodes);
+extern void dump_nodes_to_file (char *filename, char **nodenames,
+ char *output_filename, int dump_subnodes);
+extern char *program_name_from_file_name (char *file_name);
+
+/* Do the physical deletion of WINDOW, and forget this window and
+ associated nodes. */
+extern void info_delete_window_internal (WINDOW *window);
+
+/* Tell Info that input is coming from the file FILENAME. */
+extern void info_set_input_from_file (char *filename);
+
+#define return_if_control_g(val) \
+ do { \
+ info_gather_typeahead (); \
+ if (info_input_pending_p () == Control ('g')) \
+ return (val); \
+ } while (0)
+
+/* The names of the functions that run an info session. */
+
+/* Starting an info session. */
+extern void begin_multiple_window_info_session (char *filename,
+ char **nodenames);
+extern void begin_info_session (NODE *initial_node);
+extern void begin_info_session_with_error (NODE *initial_node,
+ const char *format, void *arg1, void *arg2);
+extern void info_session (void);
+extern void initialize_info_session (NODE *node, int clear_screen);
+extern void info_read_and_dispatch (void);
+extern void info_intuit_options_node (WINDOW *window,
+ NODE *initial_node, char *program);
+
+/* Moving the point within a node. */
+extern void info_next_line (WINDOW *window, int count, unsigned char key);
+extern void info_prev_line (WINDOW *window, int count, unsigned char key);
+extern void info_end_of_line (WINDOW *window, int count, unsigned char key);
+extern void info_beginning_of_line (WINDOW *window, int count, unsigned char key);
+extern void info_forward_char (WINDOW *window, int count, unsigned char key);
+extern void info_backward_char (WINDOW *window, int count, unsigned char key);
+extern void info_forward_word (WINDOW *window, int count, unsigned char key);
+extern void info_backward_word (WINDOW *window, int count, unsigned char key);
+extern void info_beginning_of_node (WINDOW *window, int count, unsigned char key);
+extern void info_end_of_node (WINDOW *window, int count, unsigned char key);
+extern void info_move_to_prev_xref (WINDOW *window, int count, unsigned char key);
+extern void info_move_to_next_xref (WINDOW *window, int count, unsigned char key);
+
+/* Scrolling text within a window. */
+extern void info_scroll_forward (WINDOW *window, int count, unsigned char key);
+extern void info_scroll_backward (WINDOW *window, int count, unsigned char key);
+extern void info_redraw_display (WINDOW *window, int count, unsigned char key);
+extern void info_toggle_wrap (WINDOW *window, int count, unsigned char key);
+extern void info_toggle_regexp (WINDOW *window, int count, unsigned char key);
+extern void info_move_to_window_line (WINDOW *window, int count,
+ unsigned char key);
+extern void info_up_line (WINDOW *window, int count, unsigned char key);
+extern void info_down_line (WINDOW *window, int count, unsigned char key);
+extern void info_scroll_half_screen_down (WINDOW *window, int count,
+ unsigned char key);
+extern void info_scroll_half_screen_up (WINDOW *window, int count,
+ unsigned char key);
+extern void info_scroll_forward_set_window (WINDOW *window, int count,
+ unsigned char key);
+extern void info_scroll_forward_page_only (WINDOW *window, int count,
+ unsigned char key);
+extern void info_scroll_forward_page_only_set_window (WINDOW *window, int count,
+ unsigned char key);
+extern void info_scroll_backward_set_window (WINDOW *window, int count,
+ unsigned char key);
+extern void info_scroll_backward_page_only (WINDOW *window, int count,
+ unsigned char key);
+extern void info_scroll_backward_page_only_set_window (WINDOW *window, int count,
+ unsigned char key);
+extern void info_scroll_other_window_backward (WINDOW *window, int count,
+ unsigned char key);
+
+/* Manipulating multiple windows. */
+extern void info_split_window (WINDOW *window, int count, unsigned char key);
+extern void info_delete_window (WINDOW *window, int count, unsigned char key);
+extern void info_keep_one_window (WINDOW *window, int count, unsigned char key);
+extern void info_grow_window (WINDOW *window, int count, unsigned char key);
+extern void info_scroll_other_window (WINDOW *window, int count,
+ unsigned char key);
+extern void info_tile_windows (WINDOW *window, int count, unsigned char key);
+extern void info_next_window (WINDOW *window, int count, unsigned char key);
+extern void info_prev_window (WINDOW *window, int count, unsigned char key);
+
+/* Selecting nodes. */
+extern void info_next_node (WINDOW *window, int count, unsigned char key);
+extern void info_prev_node (WINDOW *window, int count, unsigned char key);
+extern void info_up_node (WINDOW *window, int count, unsigned char key);
+extern void info_last_node (WINDOW *window, int count, unsigned char key);
+extern void info_first_node (WINDOW *window, int count, unsigned char key);
+extern void info_history_node (WINDOW *window, int count, unsigned char key);
+extern void info_goto_node (WINDOW *window, int count, unsigned char key);
+extern void info_goto_invocation_node (WINDOW *window, int count,
+ unsigned char key);
+extern void info_top_node (WINDOW *window, int count, unsigned char key);
+extern void info_dir_node (WINDOW *window, int count, unsigned char key);
+extern void info_global_next_node (WINDOW *window, int count, unsigned char key);
+extern void info_global_prev_node (WINDOW *window, int count, unsigned char key);
+extern void info_kill_node (WINDOW *window, int count, unsigned char key);
+extern void info_view_file (WINDOW *window, int count, unsigned char key);
+extern void info_menu_sequence (WINDOW *window, int count, unsigned char key);
+extern NODE *info_follow_menus (NODE *initial_node, char **menus,
+ const char **errstr, char **errarg1, char **errarg2);
+extern void info_man (WINDOW *window, int count, unsigned char key);
+extern void list_visited_nodes (WINDOW *window, int count, unsigned char key);
+extern void select_visited_node (WINDOW *window, int count, unsigned char key);
+
+/* Selecting cross references. */
+extern void info_menu_digit (WINDOW *window, int count, unsigned char key);
+extern void info_menu_item (WINDOW *window, int count, unsigned char key);
+extern void info_xref_item (WINDOW *window, int count, unsigned char key);
+extern void info_find_menu (WINDOW *window, int count, unsigned char key);
+extern void info_select_reference_this_line (WINDOW *window, int count,
+ unsigned char key);
+extern void info_last_menu_item (WINDOW *window, int count, unsigned char key);
+extern void info_visit_menu (WINDOW *window, int count, unsigned char key);
+
+/* Hacking numeric arguments. */
+extern int info_explicit_arg, info_numeric_arg, info_numeric_arg_sign;
+
+extern void info_add_digit_to_numeric_arg (WINDOW *window, int count,
+ unsigned char key);
+extern void info_universal_argument (WINDOW *window, int count,
+ unsigned char key);
+extern void info_initialize_numeric_arg (void);
+extern void info_numeric_arg_digit_loop (WINDOW *window, int count,
+ unsigned char key);
+
+/* Searching commands. */
+extern void info_search (WINDOW *window, int count, unsigned char key);
+extern void isearch_forward (WINDOW *window, int count, unsigned char key);
+extern void isearch_backward (WINDOW *window, int count, unsigned char key);
+extern void info_search_case_sensitively (WINDOW *window, int count,
+ unsigned char key);
+extern void info_search_backward (WINDOW *window, int count, unsigned char key);
+extern void info_search_next (WINDOW *window, int count, unsigned char key);
+extern void info_search_previous (WINDOW *window, int count, unsigned char key);
+
+/* Dumping and printing nodes. */
+extern void info_print_node (WINDOW *window, int count, unsigned char key);
+
+/* Footnotes. */
+extern void info_show_footnotes (WINDOW *window, int count, unsigned char key);
+
+/* Miscellaneous commands. */
+extern void info_abort_key (WINDOW *window, int count, unsigned char key);
+extern void info_quit (WINDOW *window, int count, unsigned char key);
+extern void info_do_lowercase_version (WINDOW *window, int count,
+ unsigned char key);
+
+#endif /* not SESSION_H */
diff --git a/info/signals.c b/info/signals.c
new file mode 100644
index 0000000..0657f97
--- /dev/null
+++ b/info/signals.c
@@ -0,0 +1,294 @@
+/* signals.c -- install and maintain signal handlers.
+ $Id: signals.c,v 1.10 2007/07/01 21:20:31 karl Exp $
+
+ Copyright (C) 1993, 1994, 1995, 1998, 2002, 2003, 2004, 2007
+ 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/>.
+
+ Originally written by Brian Fox (bfox@ai.mit.edu). */
+
+#include "info.h"
+#include "signals.h"
+
+void initialize_info_signal_handler (void);
+
+/* **************************************************************** */
+/* */
+/* Pretending That We Have POSIX Signals */
+/* */
+/* **************************************************************** */
+
+#if !defined (HAVE_SIGPROCMASK) && defined (HAVE_SIGSETMASK)
+/* Perform OPERATION on NEWSET, perhaps leaving information in OLDSET. */
+static void
+sigprocmask (int operation, int *newset, int *oldset)
+{
+ switch (operation)
+ {
+ case SIG_UNBLOCK:
+ sigsetmask (sigblock (0) & ~(*newset));
+ break;
+
+ case SIG_BLOCK:
+ *oldset = sigblock (*newset);
+ break;
+
+ case SIG_SETMASK:
+ sigsetmask (*newset);
+ break;
+
+ default:
+ abort ();
+ }
+}
+#endif /* !HAVE_SIGPROCMASK && HAVE_SIGSETMASK */
+
+/* **************************************************************** */
+/* */
+/* Signal Handling for Info */
+/* */
+/* **************************************************************** */
+
+#if defined (HAVE_SIGACTION) || defined (HAVE_SIGPROCMASK) ||\
+ defined (HAVE_SIGSETMASK)
+static void
+mask_termsig (sigset_t *set)
+{
+# if defined (SIGTSTP)
+ sigaddset (set, SIGTSTP);
+ sigaddset (set, SIGTTOU);
+ sigaddset (set, SIGTTIN);
+# endif
+# if defined (SIGWINCH)
+ sigaddset (set, SIGWINCH);
+# endif
+#if defined (SIGQUIT)
+ sigaddset (set, SIGQUIT);
+#endif
+#if defined (SIGINT)
+ sigaddset (set, SIGINT);
+#endif
+# if defined (SIGUSR1)
+ sigaddset (set, SIGUSR1);
+# endif
+}
+#endif /* HAVE_SIGACTION || HAVE_SIGPROCMASK || HAVE_SIGSETMASK */
+
+static RETSIGTYPE info_signal_proc (int sig);
+#if defined (HAVE_SIGACTION)
+typedef struct sigaction signal_info;
+signal_info info_signal_handler;
+
+static void
+set_termsig (int sig, signal_info *old)
+{
+ sigaction (sig, &info_signal_handler, old);
+}
+
+static void
+restore_termsig (int sig, const signal_info *saved)
+{
+ sigaction (sig, saved, NULL);
+}
+#else /* !HAVE_SIGACTION */
+typedef RETSIGTYPE (*signal_info) ();
+#define set_termsig(sig, old) (void)(*(old) = signal (sig, info_signal_proc))
+#define restore_termsig(sig, saved) (void)signal (sig, *(saved))
+#define info_signal_handler info_signal_proc
+static int term_conf_busy = 0;
+#endif /* !HAVE_SIGACTION */
+
+static signal_info old_TSTP, old_TTOU, old_TTIN;
+static signal_info old_WINCH, old_INT, old_USR1;
+static signal_info old_QUIT;
+
+void
+initialize_info_signal_handler (void)
+{
+#ifdef SA_NOCLDSTOP
+ /* (Based on info from Paul Eggert found in coreutils.) Don't use
+ HAVE_SIGACTION to decide whether to use the sa_handler, sa_flags,
+ sa_mask members, as some systems (Solaris 7+) don't define them. Use
+ SA_NOCLDSTOP instead; it's been part of POSIX.1 since day 1 (in 1988). */
+ info_signal_handler.sa_handler = info_signal_proc;
+ info_signal_handler.sa_flags = 0;
+ mask_termsig (&info_signal_handler.sa_mask);
+#endif /* SA_NOCLDSTOP */
+
+#if defined (SIGTSTP)
+ set_termsig (SIGTSTP, &old_TSTP);
+ set_termsig (SIGTTOU, &old_TTOU);
+ set_termsig (SIGTTIN, &old_TTIN);
+#endif /* SIGTSTP */
+
+#if defined (SIGWINCH)
+ set_termsig (SIGWINCH, &old_WINCH);
+#endif
+
+#if defined (SIGQUIT)
+ set_termsig (SIGQUIT, &old_QUIT);
+#endif
+
+#if defined (SIGINT)
+ set_termsig (SIGINT, &old_INT);
+#endif
+
+#if defined (SIGUSR1)
+ /* Used by DJGPP to simulate SIGTSTP on Ctrl-Z. */
+ set_termsig (SIGUSR1, &old_USR1);
+#endif
+}
+
+static void
+redisplay_after_signal (void)
+{
+ terminal_clear_screen ();
+ display_clear_display (the_display);
+ window_mark_chain (windows, W_UpdateWindow);
+ display_update_display (windows);
+ display_cursor_at_point (active_window);
+ fflush (stdout);
+}
+
+static void
+reset_info_window_sizes (void)
+{
+ terminal_goto_xy (0, 0);
+ fflush (stdout);
+ terminal_unprep_terminal ();
+ terminal_get_screen_size ();
+ terminal_prep_terminal ();
+ display_initialize_display (screenwidth, screenheight);
+ window_new_screen_size (screenwidth, screenheight);
+ redisplay_after_signal ();
+}
+
+static RETSIGTYPE
+info_signal_proc (int sig)
+{
+ signal_info *old_signal_handler = NULL;
+
+#if !defined (HAVE_SIGACTION)
+ /* best effort: first increment this counter and later block signals */
+ if (term_conf_busy)
+ return;
+ term_conf_busy++;
+#if defined (HAVE_SIGPROCMASK) || defined (HAVE_SIGSETMASK)
+ {
+ sigset_t nvar, ovar;
+ sigemptyset (&nvar);
+ mask_termsig (&nvar);
+ sigprocmask (SIG_BLOCK, &nvar, &ovar);
+ }
+#endif /* HAVE_SIGPROCMASK || HAVE_SIGSETMASK */
+#endif /* !HAVE_SIGACTION */
+ switch (sig)
+ {
+#if defined (SIGTSTP)
+ case SIGTSTP:
+ case SIGTTOU:
+ case SIGTTIN:
+#endif
+#if defined (SIGQUIT)
+ case SIGQUIT:
+#endif
+#if defined (SIGINT)
+ case SIGINT:
+#endif
+ {
+#if defined (SIGTSTP)
+ if (sig == SIGTSTP)
+ old_signal_handler = &old_TSTP;
+ if (sig == SIGTTOU)
+ old_signal_handler = &old_TTOU;
+ if (sig == SIGTTIN)
+ old_signal_handler = &old_TTIN;
+#endif /* SIGTSTP */
+#if defined (SIGQUIT)
+ if (sig == SIGQUIT)
+ old_signal_handler = &old_QUIT;
+#endif /* SIGQUIT */
+#if defined (SIGINT)
+ if (sig == SIGINT)
+ old_signal_handler = &old_INT;
+#endif /* SIGINT */
+
+ /* For stop signals, restore the terminal IO, leave the cursor
+ at the bottom of the window, and stop us. */
+ terminal_goto_xy (0, screenheight - 1);
+ terminal_clear_to_eol ();
+ fflush (stdout);
+ terminal_unprep_terminal ();
+ restore_termsig (sig, old_signal_handler);
+ UNBLOCK_SIGNAL (sig);
+ kill (getpid (), sig);
+
+ /* The program is returning now. Restore our signal handler,
+ turn on terminal handling, redraw the screen, and place the
+ cursor where it belongs. */
+ terminal_prep_terminal ();
+ set_termsig (sig, old_signal_handler);
+ /* window size might be changed while sleeping */
+ reset_info_window_sizes ();
+ }
+ break;
+
+#if defined (SIGWINCH) || defined (SIGUSR1)
+#ifdef SIGWINCH
+ case SIGWINCH:
+#endif
+#ifdef SIGUSR1
+ case SIGUSR1:
+#endif
+ {
+ /* Turn off terminal IO, tell our parent that the window has changed,
+ then reinitialize the terminal and rebuild our windows. */
+#ifdef SIGWINCH
+ if (sig == SIGWINCH)
+ old_signal_handler = &old_WINCH;
+#endif
+#ifdef SIGUSR1
+ if (sig == SIGUSR1)
+ old_signal_handler = &old_USR1;
+#endif
+ terminal_goto_xy (0, 0);
+ fflush (stdout);
+ terminal_unprep_terminal (); /* needless? */
+ restore_termsig (sig, old_signal_handler);
+ UNBLOCK_SIGNAL (sig);
+ kill (getpid (), sig);
+
+ /* After our old signal handler returns... */
+ set_termsig (sig, old_signal_handler); /* needless? */
+ terminal_prep_terminal ();
+ reset_info_window_sizes ();
+ }
+ break;
+#endif /* SIGWINCH || SIGUSR1 */
+ }
+#if !defined (HAVE_SIGACTION)
+ /* at this time it is safer to perform unblock after decrement */
+ term_conf_busy--;
+#if defined (HAVE_SIGPROCMASK) || defined (HAVE_SIGSETMASK)
+ {
+ sigset_t nvar, ovar;
+ sigemptyset (&nvar);
+ mask_termsig (&nvar);
+ sigprocmask (SIG_UNBLOCK, &nvar, &ovar);
+ }
+#endif /* HAVE_SIGPROCMASK || HAVE_SIGSETMASK */
+#endif /* !HAVE_SIGACTION */
+}
+/* vim: set sw=2 cino={1s>2sn-s^-se-s: */
diff --git a/info/signals.h b/info/signals.h
new file mode 100644
index 0000000..08992ad
--- /dev/null
+++ b/info/signals.h
@@ -0,0 +1,96 @@
+/* signals.h -- header to include system dependent signal definitions.
+ $Id: signals.h,v 1.5 2007/07/01 21:20:31 karl Exp $
+
+ Copyright (C) 1993, 1994, 1995, 1997, 2002, 2004, 2007
+ 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/>.
+
+ Originally written by Brian Fox (bfox@ai.mit.edu). */
+
+#ifndef INFO_SIGNALS_H
+#define INFO_SIGNALS_H
+
+#include <sys/types.h>
+#include <signal.h>
+
+/* For sysV68 --phdm@info.ucl.ac.be. */
+#if !defined (SIGCHLD) && defined (SIGCLD)
+#define SIGCHLD SIGCLD
+#endif
+
+#if !defined (HAVE_SIGPROCMASK) && !defined (sigmask)
+# define sigmask(x) (1 << ((x)-1))
+#endif /* !HAVE_SIGPROCMASK && !sigmask */
+
+/* Without SA_NOCLDSTOP, sigset_t might end up being undefined even
+ though we have sigprocmask, on older systems, according to Nelson
+ Beebe. The test is from coreutils/sort.c, via Paul Eggert. */
+#if !defined (HAVE_SIGPROCMASK) || !defined (SA_NOCLDSTOP)
+# if !defined (SIG_BLOCK)
+# define SIG_UNBLOCK 1
+# define SIG_BLOCK 2
+# define SIG_SETMASK 3
+# endif /* SIG_BLOCK */
+
+/* Type of a signal set. */
+# define sigset_t int
+
+/* Make SET have no signals in it. */
+# define sigemptyset(set) (*(set) = (sigset_t)0x0)
+
+/* Make SET have the full range of signal specifications possible. */
+# define sigfillset(set) (*(set) = (sigset_t)0xffffffffff)
+
+/* Add SIG to the contents of SET. */
+# define sigaddset(set, sig) *(set) |= sigmask (sig)
+
+/* Delete SIG from the contents of SET. */
+# define sigdelset(set, sig) *(set) &= ~(sigmask (sig))
+
+/* Tell if SET contains SIG. */
+# define sigismember(set, sig) (*(set) & (sigmask (sig)))
+
+/* Suspend the process until the reception of one of the signals
+ not present in SET. */
+# define sigsuspend(set) sigpause (*(set))
+#endif /* !HAVE_SIGPROCMASK */
+
+#if defined (HAVE_SIGPROCMASK) || defined (HAVE_SIGSETMASK)
+/* These definitions are used both in POSIX and non-POSIX implementations. */
+
+#define BLOCK_SIGNAL(sig) \
+ do { \
+ sigset_t nvar, ovar; \
+ sigemptyset (&nvar); \
+ sigemptyset (&ovar); \
+ sigaddset (&nvar, sig); \
+ sigprocmask (SIG_BLOCK, &nvar, &ovar); \
+ } while (0)
+
+#define UNBLOCK_SIGNAL(sig) \
+ do { \
+ sigset_t nvar, ovar; \
+ sigemptyset (&ovar); \
+ sigemptyset (&nvar); \
+ sigaddset (&nvar, sig); \
+ sigprocmask (SIG_UNBLOCK, &nvar, &ovar); \
+ } while (0)
+
+#else /* !HAVE_SIGPROCMASK && !HAVE_SIGSETMASK */
+# define BLOCK_SIGNAL(sig)
+# define UNBLOCK_SIGNAL(sig)
+#endif /* !HAVE_SIGPROCMASK && !HAVE_SIGSETMASK */
+
+#endif /* not INFO_SIGNALS_H */
diff --git a/info/termdep.h b/info/termdep.h
new file mode 100644
index 0000000..d8343d5
--- /dev/null
+++ b/info/termdep.h
@@ -0,0 +1,58 @@
+/* termdep.h -- system things that terminal.c depends on.
+ $Id: termdep.h,v 1.5 2007/07/01 21:20:31 karl Exp $
+
+ Copyright (C) 1993, 1996, 1997, 1998, 2001, 2002, 2007
+ 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 Brian Fox (bfox@ai.mit.edu). */
+
+#ifndef INFO_TERMDEP_H
+#define INFO_TERMDEP_H
+
+/* NeXT supplies <termios.h> but it is broken. Probably Autoconf should
+ have a separate test, but anyway ... */
+#ifdef NeXT
+#undef HAVE_TERMIOS_H
+#endif
+
+#ifdef HAVE_TERMIOS_H
+# include <termios.h>
+#else
+# if defined (HAVE_TERMIO_H)
+# include <termio.h>
+# if defined (HAVE_SYS_PTEM_H)
+# if defined (M_UNIX) || !defined (M_XENIX)
+# include <sys/stream.h>
+# include <sys/ptem.h>
+# undef TIOCGETC
+# else /* M_XENIX */
+# define tchars tc
+# endif /* M_XENIX */
+# endif /* HAVE_SYS_PTEM_H */
+# else /* !HAVE_TERMIO_H */
+# include <sgtty.h>
+# endif /* !HAVE_TERMIO_H */
+#endif /* !HAVE_TERMIOS_H */
+
+#ifdef GWINSZ_IN_SYS_IOCTL
+# include <sys/ioctl.h>
+#endif
+
+#ifdef HAVE_SYS_TTOLD_H
+# include <sys/ttold.h>
+#endif /* HAVE_SYS_TTOLD_H */
+
+#endif /* not INFO_TERMDEP_H */
diff --git a/info/terminal.c b/info/terminal.c
new file mode 100644
index 0000000..660b8e3
--- /dev/null
+++ b/info/terminal.c
@@ -0,0 +1,872 @@
+/* terminal.c -- how to handle the physical terminal for Info.
+ $Id: terminal.c,v 1.7 2008/06/11 09:55:43 gray Exp $
+
+ Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1996, 1997, 1998,
+ 1999, 2001, 2002, 2004, 2007, 2008 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/>.
+
+ Originally written by Brian Fox (bfox@ai.mit.edu). */
+
+#include "info.h"
+#include "terminal.h"
+#include "termdep.h"
+
+#include <sys/types.h>
+#include <signal.h>
+
+/* The Unix termcap interface code. */
+#ifdef HAVE_NCURSES_TERMCAP_H
+#include <ncurses/termcap.h>
+#else
+#ifdef HAVE_TERMCAP_H
+#include <termcap.h>
+#else
+/* On Solaris2, sys/types.h #includes sys/reg.h, which #defines PC.
+ Unfortunately, PC is a global variable used by the termcap library. */
+#undef PC
+
+/* Termcap requires these variables, whether we access them or not. */
+char *BC, *UP;
+char PC; /* Pad character */
+short ospeed; /* Terminal output baud rate */
+extern int tgetnum (), tgetflag (), tgetent ();
+extern char *tgetstr (), *tgoto ();
+extern void tputs ();
+#endif /* not HAVE_TERMCAP_H */
+#endif /* not HAVE_NCURSES_TERMCAP_H */
+
+/* Function "hooks". If you make one of these point to a function, that
+ function is called when appropriate instead of its namesake. Your
+ function is called with exactly the same arguments that were passed
+ to the namesake function. */
+VFunction *terminal_begin_inverse_hook = NULL;
+VFunction *terminal_end_inverse_hook = NULL;
+VFunction *terminal_prep_terminal_hook = NULL;
+VFunction *terminal_unprep_terminal_hook = NULL;
+VFunction *terminal_up_line_hook = NULL;
+VFunction *terminal_down_line_hook = NULL;
+VFunction *terminal_clear_screen_hook = NULL;
+VFunction *terminal_clear_to_eol_hook = NULL;
+VFunction *terminal_get_screen_size_hook = NULL;
+VFunction *terminal_goto_xy_hook = NULL;
+VFunction *terminal_initialize_terminal_hook = NULL;
+VFunction *terminal_new_terminal_hook = NULL;
+VFunction *terminal_put_text_hook = NULL;
+VFunction *terminal_ring_bell_hook = NULL;
+VFunction *terminal_write_chars_hook = NULL;
+VFunction *terminal_scroll_terminal_hook = NULL;
+
+/* **************************************************************** */
+/* */
+/* Terminal and Termcap */
+/* */
+/* **************************************************************** */
+
+/* A buffer which holds onto the current terminal description, and a pointer
+ used to float within it. And the name of the terminal. */
+static char *term_buffer = NULL;
+static char *term_string_buffer = NULL;
+static char *term_name;
+
+/* Some strings to control terminal actions. These are output by tputs (). */
+static char *term_goto, *term_clreol, *term_cr, *term_clrpag;
+static char *term_begin_use, *term_end_use;
+static char *term_AL, *term_DL, *term_al, *term_dl;
+
+static char *term_keypad_on, *term_keypad_off;
+
+/* How to go up a line. */
+static char *term_up;
+
+/* How to go down a line. */
+static char *term_dn;
+
+/* An audible bell, if the terminal can be made to make noise. */
+static char *audible_bell;
+
+/* A visible bell, if the terminal can be made to flash the screen. */
+static char *visible_bell;
+
+/* The string to write to turn on the meta key, if this term has one. */
+static char *term_mm;
+
+/* The string to turn on inverse mode, if this term has one. */
+static char *term_invbeg;
+
+/* The string to turn off inverse mode, if this term has one. */
+static char *term_invend;
+
+/* Although I can't find any documentation that says this is supposed to
+ return its argument, all the code I've looked at (termutils, less)
+ does so, so fine. */
+static int
+output_character_function (int c)
+{
+ putc (c, stdout);
+ return c;
+}
+
+/* Macro to send STRING to the terminal. */
+#define send_to_terminal(string) \
+ do { \
+ if (string) \
+ tputs (string, 1, output_character_function); \
+ } while (0)
+
+/* Tell the terminal that we will be doing cursor addressable motion. */
+static void
+terminal_begin_using_terminal (void)
+{
+ RETSIGTYPE (*sigsave) (int signum);
+
+ if (term_keypad_on)
+ send_to_terminal (term_keypad_on);
+
+ if (!term_begin_use || !*term_begin_use)
+ return;
+
+#ifdef SIGWINCH
+ sigsave = signal (SIGWINCH, SIG_IGN);
+#endif
+
+ send_to_terminal (term_begin_use);
+ fflush (stdout);
+ if (STREQ (term_name, "sun-cmd"))
+ /* Without this fflush and sleep, running info in a shelltool or
+ cmdtool (TERM=sun-cmd) with scrollbars loses -- the scrollbars are
+ not restored properly.
+ From: strube@physik3.gwdg.de (Hans Werner Strube). */
+ sleep (1);
+
+#ifdef SIGWINCH
+ signal (SIGWINCH, sigsave);
+#endif
+}
+
+/* Tell the terminal that we will not be doing any more cursor
+ addressable motion. */
+static void
+terminal_end_using_terminal (void)
+{
+ RETSIGTYPE (*sigsave) (int signum);
+
+ if (term_keypad_off)
+ send_to_terminal (term_keypad_off);
+
+ if (!term_end_use || !*term_end_use)
+ return;
+
+#ifdef SIGWINCH
+ sigsave = signal (SIGWINCH, SIG_IGN);
+#endif
+
+ send_to_terminal (term_end_use);
+ fflush (stdout);
+ if (STREQ (term_name, "sun-cmd"))
+ /* See comments at other sleep. */
+ sleep (1);
+
+#ifdef SIGWINCH
+ signal (SIGWINCH, sigsave);
+#endif
+}
+
+/* **************************************************************** */
+/* */
+/* Necessary Terminal Functions */
+/* */
+/* **************************************************************** */
+
+/* The functions and variables on this page implement the user visible
+ portion of the terminal interface. */
+
+/* The width and height of the terminal. */
+int screenwidth, screenheight;
+
+/* Non-zero means this terminal can't really do anything. */
+int terminal_is_dumb_p = 0;
+
+/* Non-zero means that this terminal has a meta key. */
+int terminal_has_meta_p = 0;
+
+/* Non-zero means that this terminal can produce a visible bell. */
+int terminal_has_visible_bell_p = 0;
+
+/* Non-zero means to use that visible bell if at all possible. */
+int terminal_use_visible_bell_p = 0;
+
+/* Non-zero means that the terminal can do scrolling. */
+int terminal_can_scroll = 0;
+
+/* The key sequences output by the arrow keys, if this terminal has any. */
+char *term_ku = NULL;
+char *term_kd = NULL;
+char *term_kr = NULL;
+char *term_kl = NULL;
+char *term_kP = NULL; /* page-up */
+char *term_kN = NULL; /* page-down */
+char *term_kh = NULL; /* home */
+char *term_ke = NULL; /* end */
+char *term_kD = NULL; /* delete */
+char *term_ki = NULL; /* ins */
+char *term_kx = NULL; /* del */
+
+/* Move the cursor to the terminal location of X and Y. */
+void
+terminal_goto_xy (int x, int y)
+{
+ if (terminal_goto_xy_hook)
+ (*terminal_goto_xy_hook) (x, y);
+ else
+ {
+ if (term_goto)
+ tputs (tgoto (term_goto, x, y), 1, output_character_function);
+ }
+}
+
+/* Print STRING to the terminal at the current position. */
+void
+terminal_put_text (char *string)
+{
+ if (terminal_put_text_hook)
+ (*terminal_put_text_hook) (string);
+ else
+ {
+ printf ("%s", string);
+ }
+}
+
+/* Print NCHARS from STRING to the terminal at the current position. */
+void
+terminal_write_chars (char *string, int nchars)
+{
+ if (terminal_write_chars_hook)
+ (*terminal_write_chars_hook) (string, nchars);
+ else
+ {
+ if (nchars)
+ fwrite (string, 1, nchars, stdout);
+ }
+}
+
+/* Clear from the current position of the cursor to the end of the line. */
+void
+terminal_clear_to_eol (void)
+{
+ if (terminal_clear_to_eol_hook)
+ (*terminal_clear_to_eol_hook) ();
+ else
+ {
+ send_to_terminal (term_clreol);
+ }
+}
+
+/* Clear the entire terminal screen. */
+void
+terminal_clear_screen (void)
+{
+ if (terminal_clear_screen_hook)
+ (*terminal_clear_screen_hook) ();
+ else
+ {
+ send_to_terminal (term_clrpag);
+ }
+}
+
+/* Move the cursor up one line. */
+void
+terminal_up_line (void)
+{
+ if (terminal_up_line_hook)
+ (*terminal_up_line_hook) ();
+ else
+ {
+ send_to_terminal (term_up);
+ }
+}
+
+/* Move the cursor down one line. */
+void
+terminal_down_line (void)
+{
+ if (terminal_down_line_hook)
+ (*terminal_down_line_hook) ();
+ else
+ {
+ send_to_terminal (term_dn);
+ }
+}
+
+/* Turn on reverse video if possible. */
+void
+terminal_begin_inverse (void)
+{
+ if (terminal_begin_inverse_hook)
+ (*terminal_begin_inverse_hook) ();
+ else
+ {
+ send_to_terminal (term_invbeg);
+ }
+}
+
+/* Turn off reverse video if possible. */
+void
+terminal_end_inverse (void)
+{
+ if (terminal_end_inverse_hook)
+ (*terminal_end_inverse_hook) ();
+ else
+ {
+ send_to_terminal (term_invend);
+ }
+}
+
+/* Ring the terminal bell. The bell is run visibly if it both has one and
+ terminal_use_visible_bell_p is non-zero. */
+void
+terminal_ring_bell (void)
+{
+ if (terminal_ring_bell_hook)
+ (*terminal_ring_bell_hook) ();
+ else
+ {
+ if (terminal_has_visible_bell_p && terminal_use_visible_bell_p)
+ send_to_terminal (visible_bell);
+ else
+ send_to_terminal (audible_bell);
+ }
+}
+
+/* At the line START, delete COUNT lines from the terminal display. */
+static void
+terminal_delete_lines (int start, int count)
+{
+ int lines;
+
+ /* Normalize arguments. */
+ if (start < 0)
+ start = 0;
+
+ lines = screenheight - start;
+ terminal_goto_xy (0, start);
+ if (term_DL)
+ tputs (tgoto (term_DL, 0, count), lines, output_character_function);
+ else
+ {
+ while (count--)
+ tputs (term_dl, lines, output_character_function);
+ }
+
+ fflush (stdout);
+}
+
+/* At the line START, insert COUNT lines in the terminal display. */
+static void
+terminal_insert_lines (int start, int count)
+{
+ int lines;
+
+ /* Normalize arguments. */
+ if (start < 0)
+ start = 0;
+
+ lines = screenheight - start;
+ terminal_goto_xy (0, start);
+
+ if (term_AL)
+ tputs (tgoto (term_AL, 0, count), lines, output_character_function);
+ else
+ {
+ while (count--)
+ tputs (term_al, lines, output_character_function);
+ }
+
+ fflush (stdout);
+}
+
+/* Scroll an area of the terminal, starting with the region from START
+ to END, AMOUNT lines. If AMOUNT is negative, the lines are scrolled
+ towards the top of the screen, else they are scrolled towards the
+ bottom of the screen. */
+void
+terminal_scroll_terminal (int start, int end, int amount)
+{
+ if (!terminal_can_scroll)
+ return;
+
+ /* Any scrolling at all? */
+ if (amount == 0)
+ return;
+
+ if (terminal_scroll_terminal_hook)
+ (*terminal_scroll_terminal_hook) (start, end, amount);
+ else
+ {
+ /* If we are scrolling down, delete AMOUNT lines at END. Then insert
+ AMOUNT lines at START. */
+ if (amount > 0)
+ {
+ terminal_delete_lines (end, amount);
+ terminal_insert_lines (start, amount);
+ }
+
+ /* If we are scrolling up, delete AMOUNT lines before START. This
+ actually does the upwards scroll. Then, insert AMOUNT lines
+ after the already scrolled region (i.e., END - AMOUNT). */
+ if (amount < 0)
+ {
+ int abs_amount = -amount;
+ terminal_delete_lines (start - abs_amount, abs_amount);
+ terminal_insert_lines (end - abs_amount, abs_amount);
+ }
+ }
+}
+
+/* Re-initialize the terminal considering that the TERM/TERMCAP variable
+ has changed. */
+void
+terminal_new_terminal (char *terminal_name)
+{
+ if (terminal_new_terminal_hook)
+ (*terminal_new_terminal_hook) (terminal_name);
+ else
+ {
+ terminal_initialize_terminal (terminal_name);
+ }
+}
+
+/* Set the global variables SCREENWIDTH and SCREENHEIGHT. */
+void
+terminal_get_screen_size (void)
+{
+ if (terminal_get_screen_size_hook)
+ (*terminal_get_screen_size_hook) ();
+ else
+ {
+ screenwidth = screenheight = 0;
+
+#if defined (TIOCGWINSZ)
+ {
+ struct winsize window_size;
+
+ if (ioctl (fileno (stdout), TIOCGWINSZ, &window_size) == 0)
+ {
+ screenwidth = (int) window_size.ws_col;
+ screenheight = (int) window_size.ws_row;
+ }
+ }
+#endif /* TIOCGWINSZ */
+
+ /* Environment variable COLUMNS overrides setting of "co". */
+ if (screenwidth <= 0)
+ {
+ char *sw = getenv ("COLUMNS");
+
+ if (sw)
+ screenwidth = atoi (sw);
+
+ if (screenwidth <= 0)
+ screenwidth = tgetnum ("co");
+ }
+
+ /* Environment variable LINES overrides setting of "li". */
+ if (screenheight <= 0)
+ {
+ char *sh = getenv ("LINES");
+
+ if (sh)
+ screenheight = atoi (sh);
+
+ if (screenheight <= 0)
+ screenheight = tgetnum ("li");
+ }
+
+ /* If all else fails, default to 80x24 terminal. */
+ if (screenwidth <= 0)
+ screenwidth = 80;
+
+ if (screenheight <= 0)
+ screenheight = 24;
+ }
+}
+
+/* Initialize the terminal which is known as TERMINAL_NAME. If this
+ terminal doesn't have cursor addressability, `terminal_is_dumb_p'
+ becomes nonzero. The variables SCREENHEIGHT and SCREENWIDTH are set
+ to the dimensions that this terminal actually has. The variable
+ TERMINAL_HAS_META_P becomes nonzero if this terminal supports a Meta
+ key. Finally, the terminal screen is cleared. */
+void
+terminal_initialize_terminal (char *terminal_name)
+{
+ char *buffer;
+
+ terminal_is_dumb_p = 0;
+
+ if (terminal_initialize_terminal_hook)
+ {
+ (*terminal_initialize_terminal_hook) (terminal_name);
+ return;
+ }
+
+ term_name = terminal_name ? terminal_name : getenv ("TERM");
+ if (!term_name)
+ term_name = "dumb";
+
+ if (!term_string_buffer)
+ term_string_buffer = xmalloc (2048);
+
+ if (!term_buffer)
+ term_buffer = xmalloc (2048);
+
+ buffer = term_string_buffer;
+
+ term_clrpag = term_cr = term_clreol = NULL;
+
+ /* HP-UX 11.x returns 0 for OK --jeff.hull@state.co.us. */
+ if (tgetent (term_buffer, term_name) < 0)
+ {
+ terminal_is_dumb_p = 1;
+ screenwidth = 80;
+ screenheight = 24;
+ term_cr = "\r";
+ term_up = term_dn = audible_bell = visible_bell = NULL;
+ term_ku = term_kd = term_kl = term_kr = NULL;
+ term_kP = term_kN = NULL;
+ term_kh = term_ke = NULL;
+ term_kD = NULL;
+ return;
+ }
+
+ BC = tgetstr ("pc", &buffer);
+ PC = BC ? *BC : 0;
+
+#if defined (HAVE_TERMIOS_H)
+ {
+ struct termios ti;
+ if (tcgetattr (fileno(stdout), &ti) != -1)
+ ospeed = cfgetospeed (&ti);
+ else
+ ospeed = B9600;
+ }
+#else
+# if defined (TIOCGETP)
+ {
+ struct sgttyb sg;
+
+ if (ioctl (fileno (stdout), TIOCGETP, &sg) != -1)
+ ospeed = sg.sg_ospeed;
+ else
+ ospeed = B9600;
+ }
+# else
+ ospeed = B9600;
+# endif /* !TIOCGETP */
+#endif
+
+ term_cr = tgetstr ("cr", &buffer);
+ term_clreol = tgetstr ("ce", &buffer);
+ term_clrpag = tgetstr ("cl", &buffer);
+ term_goto = tgetstr ("cm", &buffer);
+
+ /* Find out about this terminal's scrolling capability. */
+ term_AL = tgetstr ("AL", &buffer);
+ term_DL = tgetstr ("DL", &buffer);
+ term_al = tgetstr ("al", &buffer);
+ term_dl = tgetstr ("dl", &buffer);
+
+ terminal_can_scroll = ((term_AL || term_al) && (term_DL || term_dl));
+
+ term_invbeg = tgetstr ("mr", &buffer);
+ if (term_invbeg)
+ term_invend = tgetstr ("me", &buffer);
+ else
+ term_invend = NULL;
+
+ if (!term_cr)
+ term_cr = "\r";
+
+ terminal_get_screen_size ();
+
+ term_up = tgetstr ("up", &buffer);
+ term_dn = tgetstr ("dn", &buffer);
+ visible_bell = tgetstr ("vb", &buffer);
+ terminal_has_visible_bell_p = (visible_bell != NULL);
+ audible_bell = tgetstr ("bl", &buffer);
+ if (!audible_bell)
+ audible_bell = "\007";
+ term_begin_use = tgetstr ("ti", &buffer);
+ term_end_use = tgetstr ("te", &buffer);
+
+ term_keypad_on = tgetstr ("ks", &buffer);
+ term_keypad_off = tgetstr ("ke", &buffer);
+
+ /* Check to see if this terminal has a meta key. */
+ terminal_has_meta_p = (tgetflag ("km") || tgetflag ("MT"));
+ if (terminal_has_meta_p)
+ {
+ term_mm = tgetstr ("mm", &buffer);
+ }
+ else
+ {
+ term_mm = NULL;
+ }
+
+ /* Attempt to find the arrow keys. */
+ term_ku = tgetstr ("ku", &buffer);
+ term_kd = tgetstr ("kd", &buffer);
+ term_kr = tgetstr ("kr", &buffer);
+ term_kl = tgetstr ("kl", &buffer);
+
+ term_kP = tgetstr ("kP", &buffer);
+ term_kN = tgetstr ("kN", &buffer);
+
+#if defined(INFOKEY)
+ term_kh = tgetstr ("kh", &buffer);
+ term_ke = tgetstr ("@7", &buffer);
+ term_ki = tgetstr ("kI", &buffer);
+ term_kx = tgetstr ("kD", &buffer);
+#endif /* defined(INFOKEY) */
+
+ /* Home and end keys. */
+ term_kh = tgetstr ("kh", &buffer);
+ term_ke = tgetstr ("@7", &buffer);
+
+ term_kD = tgetstr ("kD", &buffer);
+
+ /* If this terminal is not cursor addressable, then it is really dumb. */
+ if (!term_goto)
+ terminal_is_dumb_p = 1;
+}
+
+/* How to read characters from the terminal. */
+
+#if defined (HAVE_TERMIOS_H)
+struct termios original_termios, ttybuff;
+#else
+# if defined (HAVE_TERMIO_H)
+/* A buffer containing the terminal mode flags upon entry to info. */
+struct termio original_termio, ttybuff;
+# else /* !HAVE_TERMIO_H */
+/* Buffers containing the terminal mode flags upon entry to info. */
+int original_tty_flags = 0;
+int original_lmode;
+struct sgttyb ttybuff;
+
+# if defined(TIOCGETC) && defined(M_XENIX)
+/* SCO 3.2v5.0.2 defines but does not support TIOCGETC. Gak. Maybe
+ better fix would be to use Posix termios in preference. --gildea,
+ 1jul99. */
+# undef TIOCGETC
+# endif
+
+# if defined (TIOCGETC)
+/* A buffer containing the terminal interrupt characters upon entry
+ to Info. */
+struct tchars original_tchars;
+# endif
+
+# if defined (TIOCGLTC)
+/* A buffer containing the local terminal mode characters upon entry
+ to Info. */
+struct ltchars original_ltchars;
+# endif
+# endif /* !HAVE_TERMIO_H */
+#endif /* !HAVE_TERMIOS_H */
+
+/* Prepare to start using the terminal to read characters singly. */
+void
+terminal_prep_terminal (void)
+{
+ int tty;
+
+ if (terminal_prep_terminal_hook)
+ {
+ (*terminal_prep_terminal_hook) ();
+ return;
+ }
+
+ terminal_begin_using_terminal ();
+
+ tty = fileno (stdin);
+
+#if defined (HAVE_TERMIOS_H)
+ tcgetattr (tty, &original_termios);
+ tcgetattr (tty, &ttybuff);
+#else
+# if defined (HAVE_TERMIO_H)
+ ioctl (tty, TCGETA, &original_termio);
+ ioctl (tty, TCGETA, &ttybuff);
+# endif
+#endif
+
+#if defined (HAVE_TERMIOS_H) || defined (HAVE_TERMIO_H)
+ ttybuff.c_iflag &= (~ISTRIP & ~INLCR & ~IGNCR & ~ICRNL & ~IXON);
+/* These output flags are not part of POSIX, so only use them if they
+ are defined. */
+#ifdef ONLCR
+ ttybuff.c_oflag &= ~ONLCR ;
+#endif
+#ifdef OCRNL
+ ttybuff.c_oflag &= ~OCRNL;
+#endif
+ ttybuff.c_lflag &= (~ICANON & ~ECHO);
+
+ ttybuff.c_cc[VMIN] = 1;
+ ttybuff.c_cc[VTIME] = 0;
+
+ if (ttybuff.c_cc[VINTR] == '\177')
+ ttybuff.c_cc[VINTR] = -1;
+
+ if (ttybuff.c_cc[VQUIT] == '\177')
+ ttybuff.c_cc[VQUIT] = -1;
+
+#ifdef VLNEXT
+ if (ttybuff.c_cc[VLNEXT] == '\026')
+ ttybuff.c_cc[VLNEXT] = -1;
+#endif /* VLNEXT */
+#endif /* TERMIOS or TERMIO */
+
+/* cf. emacs/src/sysdep.c for being sure output is on. */
+#if defined (HAVE_TERMIOS_H)
+ /* linux kernel 2.2.x needs a TCOFF followed by a TCOON to turn output
+ back on if the user presses ^S at the very beginning; just a TCOON
+ doesn't work. --Kevin Ryde <user42@zip.com.au>, 16jun2000. */
+ tcsetattr (tty, TCSANOW, &ttybuff);
+# ifdef TCOON
+ tcflow (tty, TCOOFF);
+ tcflow (tty, TCOON);
+# endif
+#else
+# if defined (HAVE_TERMIO_H)
+ ioctl (tty, TCSETA, &ttybuff);
+# ifdef TCXONC
+ ioctl (tty, TCXONC, 1);
+# endif
+# endif
+#endif
+
+#if !defined (HAVE_TERMIOS_H) && !defined (HAVE_TERMIO_H)
+ ioctl (tty, TIOCGETP, &ttybuff);
+
+ if (!original_tty_flags)
+ original_tty_flags = ttybuff.sg_flags;
+
+ /* Make this terminal pass 8 bits around while we are using it. */
+# if defined (PASS8)
+ ttybuff.sg_flags |= PASS8;
+# endif /* PASS8 */
+
+# if defined (TIOCLGET) && defined (LPASS8)
+ {
+ int flags;
+ ioctl (tty, TIOCLGET, &flags);
+ original_lmode = flags;
+ flags |= LPASS8;
+ ioctl (tty, TIOCLSET, &flags);
+ }
+# endif /* TIOCLGET && LPASS8 */
+
+# if defined (TIOCGETC)
+ {
+ struct tchars temp;
+
+ ioctl (tty, TIOCGETC, &original_tchars);
+ temp = original_tchars;
+
+ /* C-s and C-q. */
+ temp.t_startc = temp.t_stopc = -1;
+
+ /* Often set to C-d. */
+ temp.t_eofc = -1;
+
+ /* If the a quit or interrupt character conflicts with one of our
+ commands, then make it go away. */
+ if (temp.t_intrc == '\177')
+ temp.t_intrc = -1;
+
+ if (temp.t_quitc == '\177')
+ temp.t_quitc = -1;
+
+ ioctl (tty, TIOCSETC, &temp);
+ }
+# endif /* TIOCGETC */
+
+# if defined (TIOCGLTC)
+ {
+ struct ltchars temp;
+
+ ioctl (tty, TIOCGLTC, &original_ltchars);
+ temp = original_ltchars;
+
+ /* Make the interrupt keys go away. Just enough to make people happy. */
+ temp.t_lnextc = -1; /* C-v. */
+ temp.t_dsuspc = -1; /* C-y. */
+ temp.t_flushc = -1; /* C-o. */
+ ioctl (tty, TIOCSLTC, &temp);
+ }
+# endif /* TIOCGLTC */
+
+ ttybuff.sg_flags &= ~ECHO;
+ ttybuff.sg_flags |= CBREAK;
+ ioctl (tty, TIOCSETN, &ttybuff);
+#endif /* !HAVE_TERMIOS_H && !HAVE_TERMIO_H */
+}
+
+/* Restore the tty settings back to what they were before we started using
+ this terminal. */
+void
+terminal_unprep_terminal (void)
+{
+ int tty;
+
+ if (terminal_unprep_terminal_hook)
+ {
+ (*terminal_unprep_terminal_hook) ();
+ return;
+ }
+
+ tty = fileno (stdin);
+
+#if defined (HAVE_TERMIOS_H)
+ tcsetattr (tty, TCSANOW, &original_termios);
+#else
+# if defined (HAVE_TERMIO_H)
+ ioctl (tty, TCSETA, &original_termio);
+# else /* !HAVE_TERMIO_H */
+ ioctl (tty, TIOCGETP, &ttybuff);
+ ttybuff.sg_flags = original_tty_flags;
+ ioctl (tty, TIOCSETN, &ttybuff);
+
+# if defined (TIOCGETC)
+ ioctl (tty, TIOCSETC, &original_tchars);
+# endif /* TIOCGETC */
+
+# if defined (TIOCGLTC)
+ ioctl (tty, TIOCSLTC, &original_ltchars);
+# endif /* TIOCGLTC */
+
+# if defined (TIOCLGET) && defined (LPASS8)
+ ioctl (tty, TIOCLSET, &original_lmode);
+# endif /* TIOCLGET && LPASS8 */
+
+# endif /* !HAVE_TERMIO_H */
+#endif /* !HAVE_TERMIOS_H */
+ terminal_end_using_terminal ();
+}
+
+#ifdef __MSDOS__
+# include "pcterm.c"
+#endif
diff --git a/info/terminal.h b/info/terminal.h
new file mode 100644
index 0000000..135b3ae
--- /dev/null
+++ b/info/terminal.h
@@ -0,0 +1,129 @@
+/* terminal.h -- The external interface to terminal I/O.
+ $Id: terminal.h,v 1.6 2007/07/01 21:20:31 karl Exp $
+
+ Copyright (C) 1993, 1996, 1997, 2001, 2002, 2004, 2007
+ 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 Brian Fox (bfox@ai.mit.edu). */
+
+#if !defined (TERMINAL_H)
+#define TERMINAL_H
+
+#include "info.h"
+
+/* For almost every function externally visible from terminal.c, there is
+ a corresponding "hook" function which can be bound in order to replace
+ the functionality of the one found in terminal.c. This is how we go
+ about implemented X window display. */
+
+/* The width and height of the terminal. */
+extern int screenwidth, screenheight;
+
+/* Non-zero means this terminal can't really do anything. */
+extern int terminal_is_dumb_p;
+
+/* Non-zero means that this terminal has a meta key. */
+extern int terminal_has_meta_p;
+
+/* Non-zero means that this terminal can produce a visible bell. */
+extern int terminal_has_visible_bell_p;
+
+/* Non-zero means to use that visible bell if at all possible. */
+extern int terminal_use_visible_bell_p;
+
+/* Non-zero means that this terminal can scroll lines up and down. */
+extern int terminal_can_scroll;
+
+/* Initialize the terminal which is known as TERMINAL_NAME. If this terminal
+ doesn't have cursor addressability, TERMINAL_IS_DUMB_P becomes non-zero.
+ The variables SCREENHEIGHT and SCREENWIDTH are set to the dimensions that
+ this terminal actually has. The variable TERMINAL_HAS_META_P becomes non-
+ zero if this terminal supports a Meta key. */
+extern void terminal_initialize_terminal (char *terminal_name);
+extern VFunction *terminal_initialize_terminal_hook;
+
+/* Return the current screen width and height in the variables
+ SCREENWIDTH and SCREENHEIGHT. */
+extern void terminal_get_screen_size (void);
+extern VFunction *terminal_get_screen_size_hook;
+
+/* Save and restore tty settings. */
+extern void terminal_prep_terminal (void);
+extern void terminal_unprep_terminal (void);
+
+extern VFunction *terminal_prep_terminal_hook;
+extern VFunction *terminal_unprep_terminal_hook;
+
+/* Re-initialize the terminal to TERMINAL_NAME. */
+extern void terminal_new_terminal (char *terminal_name);
+extern VFunction *terminal_new_terminal_hook;
+
+/* Move the cursor to the terminal location of X and Y. */
+extern void terminal_goto_xy (int x, int y);
+extern VFunction *terminal_goto_xy_hook;
+
+/* Print STRING to the terminal at the current position. */
+extern void terminal_put_text (char *string);
+extern VFunction *terminal_put_text_hook;
+
+/* Print NCHARS from STRING to the terminal at the current position. */
+extern void terminal_write_chars (char *string, int nchars);
+extern VFunction *terminal_write_chars_hook;
+
+/* Clear from the current position of the cursor to the end of the line. */
+extern void terminal_clear_to_eol (void);
+extern VFunction *terminal_clear_to_eol_hook;
+
+/* Clear the entire terminal screen. */
+extern void terminal_clear_screen (void);
+extern VFunction *terminal_clear_screen_hook;
+
+/* Move the cursor up one line. */
+extern void terminal_up_line (void);
+extern VFunction *terminal_up_line_hook;
+
+/* Move the cursor down one line. */
+extern void terminal_down_line (void);
+extern VFunction *terminal_down_line_hook;
+
+/* Turn on reverse video if possible. */
+extern void terminal_begin_inverse (void);
+extern VFunction *terminal_begin_inverse_hook;
+
+/* Turn off reverse video if possible. */
+extern void terminal_end_inverse (void);
+extern VFunction *terminal_end_inverse_hook;
+
+/* Scroll an area of the terminal, starting with the region from START
+ to END, AMOUNT lines. If AMOUNT is negative, the lines are scrolled
+ towards the top of the screen, else they are scrolled towards the
+ bottom of the screen. */
+extern void terminal_scroll_terminal (int start, int end, int amount);
+extern VFunction *terminal_scroll_terminal_hook;
+
+/* Ring the terminal bell. The bell is run visibly if it both has one and
+ terminal_use_visible_bell_p is non-zero. */
+extern void terminal_ring_bell (void);
+extern VFunction *terminal_ring_bell_hook;
+
+/* The key sequences output by special keys, if this terminal has any. */
+extern char *term_ku, *term_kd, *term_kr, *term_kl;
+extern char *term_kP, *term_kN;
+extern char *term_ke, *term_kh;
+extern char *term_kx, *term_ki;
+extern char *term_kD;
+
+#endif /* !TERMINAL_H */
diff --git a/info/tilde.c b/info/tilde.c
new file mode 100644
index 0000000..9bd8852
--- /dev/null
+++ b/info/tilde.c
@@ -0,0 +1,340 @@
+/* tilde.c -- tilde expansion code (~/foo := $HOME/foo).
+ $Id: tilde.c,v 1.8 2008/06/11 09:55:43 gray Exp $
+
+ Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1996, 1998, 1999,
+ 2002, 2004, 2006, 2007, 2008 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 Brian Fox (bfox@ai.mit.edu). */
+
+#include "info.h"
+#include "tilde.h"
+
+#if defined (TEST) || defined (STATIC_MALLOC)
+static void *xmalloc (), *xrealloc ();
+#endif /* TEST || STATIC_MALLOC */
+
+/* The default value of tilde_additional_prefixes. This is set to
+ whitespace preceding a tilde so that simple programs which do not
+ perform any word separation get desired behaviour. */
+static char *default_prefixes[] =
+ { " ~", "\t~", NULL };
+
+/* The default value of tilde_additional_suffixes. This is set to
+ whitespace or newline so that simple programs which do not
+ perform any word separation get desired behaviour. */
+static char *default_suffixes[] =
+ { " ", "\n", NULL };
+
+/* If non-null, this contains the address of a function to call if the
+ standard meaning for expanding a tilde fails. The function is called
+ with the text (sans tilde, as in "foo"), and returns a malloc()'ed string
+ which is the expansion, or a NULL pointer if there is no expansion. */
+CFunction *tilde_expansion_failure_hook = NULL;
+
+/* When non-null, this is a NULL terminated array of strings which
+ are duplicates for a tilde prefix. Bash uses this to expand
+ `=~' and `:~'. */
+char **tilde_additional_prefixes = default_prefixes;
+
+/* When non-null, this is a NULL terminated array of strings which match
+ the end of a username, instead of just "/". Bash sets this to
+ `:' and `=~'. */
+char **tilde_additional_suffixes = default_suffixes;
+
+/* Find the start of a tilde expansion in STRING, and return the index of
+ the tilde which starts the expansion. Place the length of the text
+ which identified this tilde starter in LEN, excluding the tilde itself. */
+static int
+tilde_find_prefix (char *string, int *len)
+{
+ register int i, j, string_len;
+ register char **prefixes = tilde_additional_prefixes;
+
+ string_len = strlen (string);
+ *len = 0;
+
+ if (!*string || *string == '~')
+ return 0;
+
+ if (prefixes)
+ {
+ for (i = 0; i < string_len; i++)
+ {
+ for (j = 0; prefixes[j]; j++)
+ {
+ if (strncmp (string + i, prefixes[j], strlen (prefixes[j])) == 0)
+ {
+ *len = strlen (prefixes[j]) - 1;
+ return i + *len;
+ }
+ }
+ }
+ }
+ return string_len;
+}
+
+/* Find the end of a tilde expansion in STRING, and return the index of
+ the character which ends the tilde definition. */
+static int
+tilde_find_suffix (char *string)
+{
+ register int i, j, string_len;
+ register char **suffixes = tilde_additional_suffixes;
+
+ string_len = strlen (string);
+
+ for (i = 0; i < string_len; i++)
+ {
+ if (IS_SLASH (string[i]) || !string[i])
+ break;
+
+ for (j = 0; suffixes && suffixes[j]; j++)
+ {
+ if (strncmp (string + i, suffixes[j], strlen (suffixes[j])) == 0)
+ return i;
+ }
+ }
+ return i;
+}
+
+/* Return a new string which is the result of tilde expanding STRING. */
+char *
+tilde_expand (char *string)
+{
+ char *result;
+ int result_size, result_index;
+
+ result_size = result_index = 0;
+ result = NULL;
+
+ /* Scan through STRING expanding tildes as we come to them. */
+ while (1)
+ {
+ register int start, end;
+ char *tilde_word, *expansion;
+ int len;
+
+ /* Make START point to the tilde which starts the expansion. */
+ start = tilde_find_prefix (string, &len);
+
+ /* Copy the skipped text into the result. */
+ if ((result_index + start + 1) > result_size)
+ result = xrealloc (result, 1 + (result_size += (start + 20)));
+
+ strncpy (result + result_index, string, start);
+ result_index += start;
+
+ /* Advance STRING to the starting tilde. */
+ string += start;
+
+ /* Make END be the index of one after the last character of the
+ username. */
+ end = tilde_find_suffix (string);
+
+ /* If both START and END are zero, we are all done. */
+ if (!start && !end)
+ break;
+
+ /* Expand the entire tilde word, and copy it into RESULT. */
+ tilde_word = xmalloc (1 + end);
+ strncpy (tilde_word, string, end);
+ tilde_word[end] = '\0';
+ string += end;
+
+ expansion = tilde_expand_word (tilde_word);
+ free (tilde_word);
+
+ len = strlen (expansion);
+ if ((result_index + len + 1) > result_size)
+ result = xrealloc (result, 1 + (result_size += (len + 20)));
+
+ strcpy (result + result_index, expansion);
+ result_index += len;
+ free (expansion);
+ }
+
+ result[result_index] = '\0';
+
+ return result;
+}
+
+/* Do the work of tilde expansion on FILENAME. FILENAME starts with a
+ tilde. If there is no expansion, call tilde_expansion_failure_hook. */
+char *
+tilde_expand_word (char *filename)
+{
+ char *dirname = filename ? xstrdup (filename) : NULL;
+
+ if (dirname && *dirname == '~')
+ {
+ char *temp_name;
+ if (!dirname[1] || IS_SLASH (dirname[1]))
+ {
+ /* Prepend $HOME to the rest of the string. */
+ char *temp_home = getenv ("HOME");
+
+ /* If there is no HOME variable, look up the directory in
+ the password database. */
+ if (!temp_home)
+ {
+ struct passwd *entry;
+
+ entry = (struct passwd *) getpwuid (getuid ());
+ if (entry)
+ temp_home = entry->pw_dir;
+ }
+
+ temp_name = xmalloc (1 + strlen (&dirname[1])
+ + (temp_home ? strlen (temp_home) : 0));
+ if (temp_home)
+ strcpy (temp_name, temp_home);
+ else
+ temp_name[0] = 0;
+ strcat (temp_name, &dirname[1]);
+ free (dirname);
+ dirname = xstrdup (temp_name);
+ free (temp_name);
+ }
+ else
+ {
+ struct passwd *user_entry;
+ char *username = xmalloc (257);
+ int i, c;
+
+ for (i = 1; (c = dirname[i]); i++)
+ {
+ if (IS_SLASH (c))
+ break;
+ else
+ username[i - 1] = c;
+ }
+ username[i - 1] = 0;
+
+ if (!(user_entry = (struct passwd *) getpwnam (username)))
+ {
+ /* If the calling program has a special syntax for
+ expanding tildes, and we couldn't find a standard
+ expansion, then let them try. */
+ if (tilde_expansion_failure_hook)
+ {
+ char *expansion = (*tilde_expansion_failure_hook) (username);
+
+ if (expansion)
+ {
+ temp_name = xmalloc (1 + strlen (expansion)
+ + strlen (&dirname[i]));
+ strcpy (temp_name, expansion);
+ strcat (temp_name, &dirname[i]);
+ free (expansion);
+ goto return_name;
+ }
+ }
+ /* We shouldn't report errors. */
+ }
+ else
+ {
+ temp_name = xmalloc (1 + strlen (user_entry->pw_dir)
+ + strlen (&dirname[i]));
+ strcpy (temp_name, user_entry->pw_dir);
+ strcat (temp_name, &dirname[i]);
+
+ return_name:
+ free (dirname);
+ dirname = xstrdup (temp_name);
+ free (temp_name);
+ }
+
+ endpwent ();
+ free (username);
+ }
+ }
+ return dirname;
+}
+
+
+#if defined (TEST)
+#undef NULL
+#include <stdio.h>
+
+main (argc, argv)
+ int argc;
+ char **argv;
+{
+ char *result, line[512];
+ int done = 0;
+
+ while (!done)
+ {
+ printf ("~expand: ");
+ fflush (stdout);
+
+ if (!gets (line))
+ strcpy (line, "done");
+
+ if ((strcmp (line, "done") == 0) ||
+ (strcmp (line, "quit") == 0) ||
+ (strcmp (line, "exit") == 0))
+ {
+ done = 1;
+ break;
+ }
+
+ result = tilde_expand (line);
+ printf (" --> %s\n", result);
+ free (result);
+ }
+ xexit (0);
+}
+
+static void memory_error_and_abort ();
+
+static void *
+xmalloc (bytes)
+ int bytes;
+{
+ void *temp = (void *)malloc (bytes);
+
+ if (!temp)
+ memory_error_and_abort ();
+ return temp;
+}
+
+static void *
+xrealloc (pointer, bytes)
+ void *pointer;
+ int bytes;
+{
+ void *temp;
+
+ if (!pointer)
+ temp = (char *)malloc (bytes);
+ else
+ temp = (char *)realloc (pointer, bytes);
+
+ if (!temp)
+ memory_error_and_abort ();
+
+ return temp;
+}
+
+static void
+memory_error_and_abort ()
+{
+ fprintf (stderr, _("readline: Out of virtual memory!\n"));
+ abort ();
+}
+#endif /* TEST */
+
diff --git a/info/tilde.h b/info/tilde.h
new file mode 100644
index 0000000..4287cb5
--- /dev/null
+++ b/info/tilde.h
@@ -0,0 +1,53 @@
+/* tilde.h: Externally available variables and function in libtilde.a.
+ $Id: tilde.h,v 1.6 2007/07/01 21:20:31 karl Exp $
+
+ This file has appeared in prior works by the Free Software Foundation;
+ thus it carries copyright dates from 1988 through 1993.
+
+ Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 2004, 2007
+ 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 Brian Fox (bfox@ai.mit.edu). */
+
+#ifndef TILDE_H
+#define TILDE_H
+
+#include "info.h"
+
+/* If non-null, this contains the address of a function to call if the
+ standard meaning for expanding a tilde fails. The function is called
+ with the text (sans tilde, as in "foo"), and returns a malloc()'ed string
+ which is the expansion, or a NULL pointer if there is no expansion. */
+extern CFunction *tilde_expansion_failure_hook;
+
+/* When non-null, this is a NULL terminated array of strings which
+ are duplicates for a tilde prefix. Bash uses this to expand
+ `=~' and `:~'. */
+extern char **tilde_additional_prefixes;
+
+/* When non-null, this is a NULL terminated array of strings which match
+ the end of a username, instead of just "/". Bash sets this to
+ `:' and `=~'. */
+extern char **tilde_additional_suffixes;
+
+/* Return a new string which is the result of tilde expanding STRING. */
+extern char *tilde_expand (char *string);
+
+/* Do the work of tilde expansion on FILENAME. FILENAME starts with a
+ tilde. If there is no expansion, call tilde_expansion_failure_hook. */
+extern char *tilde_expand_word (char *filename);
+
+#endif /* not TILDE_H */
diff --git a/info/variables.c b/info/variables.c
new file mode 100644
index 0000000..292e45d
--- /dev/null
+++ b/info/variables.c
@@ -0,0 +1,319 @@
+/* variables.c -- how to manipulate user visible variables in Info.
+ $Id: variables.c,v 1.10 2008/06/11 09:55:43 gray Exp $
+
+ Copyright (C) 1993, 1997, 2001, 2002, 2004, 2007, 2008
+ 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 Brian Fox (bfox@ai.mit.edu). */
+
+#include "info.h"
+#include "variables.h"
+
+/* **************************************************************** */
+/* */
+/* User Visible Variables in Info */
+/* */
+/* **************************************************************** */
+
+/* Choices used by the completer when reading a zero/non-zero value for
+ a variable. */
+static char *on_off_choices[] = { "Off", "On", NULL };
+
+VARIABLE_ALIST info_variables[] = {
+ { "automatic-footnotes",
+ N_("When \"On\", footnotes appear and disappear automatically"),
+ &auto_footnotes_p, (char **)on_off_choices },
+
+ { "automatic-tiling",
+ N_("When \"On\", creating or deleting a window resizes other windows"),
+ &auto_tiling_p, (char **)on_off_choices },
+
+ { "visible-bell",
+ N_("When \"On\", flash the screen instead of ringing the bell"),
+ &terminal_use_visible_bell_p, (char **)on_off_choices },
+
+ { "errors-ring-bell",
+ N_("When \"On\", errors cause the bell to ring"),
+ &info_error_rings_bell_p, (char **)on_off_choices },
+
+ { "gc-compressed-files",
+ N_("When \"On\", Info garbage collects files which had to be uncompressed"),
+ &gc_compressed_files, (char **)on_off_choices },
+ { "show-index-match",
+ N_("When \"On\", the portion of the matched search string is highlighted"),
+ &show_index_match, (char **)on_off_choices },
+
+ { "scroll-behaviour",
+ N_("Controls what happens when scrolling is requested at the end of a node"),
+ &info_scroll_behaviour, (char **)info_scroll_choices },
+
+ /* Alternate spelling */
+ { "scroll-behavior",
+ N_("Same as scroll-behaviour"),
+ &info_scroll_behaviour, (char **)info_scroll_choices },
+
+ { "scroll-step",
+ N_("The number lines to scroll when the cursor moves out of the window"),
+ &window_scroll_step, NULL },
+
+ { "cursor-movement-scrolls",
+ N_("Controls whether scroll-behavior affects cursor movement commands"),
+ &cursor_movement_scrolls_p, (char **)on_off_choices },
+
+ { "ISO-Latin",
+ N_("When \"On\", Info accepts and displays ISO Latin characters"),
+ &ISO_Latin_p, (char **)on_off_choices },
+
+ { "scroll-last-node",
+ N_("What to do when a scrolling command is issued at the end of the "
+ "last node"),
+ &scroll_last_node, (char**)scroll_last_node_choices },
+
+ { NULL }
+};
+
+DECLARE_INFO_COMMAND (describe_variable, _("Explain the use of a variable"))
+{
+ VARIABLE_ALIST *var;
+ char *description;
+
+ /* Get the variable's name. */
+ var = read_variable_name (_("Describe variable: "), window);
+
+ if (!var)
+ return;
+
+ description = xmalloc (20 + strlen (var->name)
+ + strlen (_(var->doc)));
+
+ if (var->choices)
+ sprintf (description, "%s (%s): %s.",
+ var->name, var->choices[*(var->value)], _(var->doc));
+ else
+ sprintf (description, "%s (%d): %s.",
+ var->name, *(var->value), _(var->doc));
+
+ window_message_in_echo_area ("%s", description, NULL);
+ free (description);
+}
+
+DECLARE_INFO_COMMAND (set_variable, _("Set the value of an Info variable"))
+{
+ VARIABLE_ALIST *var;
+ char *line;
+
+ /* Get the variable's name and value. */
+ var = read_variable_name (_("Set variable: "), window);
+
+ if (!var)
+ return;
+
+ /* Read a new value for this variable. */
+ {
+ char prompt[100];
+
+ if (!var->choices)
+ {
+ int potential_value;
+
+ if (info_explicit_arg || count != 1)
+ potential_value = count;
+ else
+ potential_value = *(var->value);
+
+ sprintf (prompt, _("Set %s to value (%d): "),
+ var->name, potential_value);
+ line = info_read_in_echo_area (active_window, prompt);
+
+ /* If no error was printed, clear the echo area. */
+ if (!info_error_was_printed)
+ window_clear_echo_area ();
+
+ /* User aborted? */
+ if (!line)
+ return;
+
+ /* If the user specified a value, get that, otherwise, we are done. */
+ canonicalize_whitespace (line);
+ if (*line)
+ *(var->value) = atoi (line);
+ else
+ *(var->value) = potential_value;
+
+ free (line);
+ }
+ else
+ {
+ register int i;
+ REFERENCE **array = NULL;
+ int array_index = 0;
+ int array_slots = 0;
+
+ for (i = 0; var->choices[i]; i++)
+ {
+ REFERENCE *entry;
+
+ entry = xmalloc (sizeof (REFERENCE));
+ entry->label = xstrdup (var->choices[i]);
+ entry->nodename = NULL;
+ entry->filename = NULL;
+
+ add_pointer_to_array
+ (entry, array_index, array, array_slots, 10, REFERENCE *);
+ }
+
+ sprintf (prompt, _("Set %s to value (%s): "),
+ var->name, var->choices[*(var->value)]);
+
+ /* Ask the completer to read a variable value for us. */
+ line = info_read_completing_in_echo_area (window, prompt, array);
+
+ info_free_references (array);
+
+ if (!echo_area_is_active)
+ window_clear_echo_area ();
+
+ /* User aborted? */
+ if (!line)
+ {
+ info_abort_key (active_window, 0, 0);
+ return;
+ }
+
+ /* User accepted default choice? If so, no change. */
+ if (!*line)
+ {
+ free (line);
+ return;
+ }
+
+ /* Find the choice in our list of choices. */
+ for (i = 0; var->choices[i]; i++)
+ if (strcmp (var->choices[i], line) == 0)
+ break;
+
+ if (var->choices[i])
+ *(var->value) = i;
+ }
+ }
+}
+
+/* Read the name of an Info variable in the echo area and return the
+ address of a VARIABLE_ALIST member. A return value of NULL indicates
+ that no variable could be read. */
+VARIABLE_ALIST *
+read_variable_name (const char *prompt, WINDOW *window)
+{
+ register int i;
+ char *line;
+ REFERENCE **variables;
+
+ /* Get the completion array of variable names. */
+ variables = make_variable_completions_array ();
+
+ /* Ask the completer to read a variable for us. */
+ line =
+ info_read_completing_in_echo_area (window, prompt, variables);
+
+ info_free_references (variables);
+
+ if (!echo_area_is_active)
+ window_clear_echo_area ();
+
+ /* User aborted? */
+ if (!line)
+ {
+ info_abort_key (active_window, 0, 0);
+ return NULL;
+ }
+
+ /* User accepted "default"? (There is none.) */
+ if (!*line)
+ {
+ free (line);
+ return NULL;
+ }
+
+ /* Find the variable in our list of variables. */
+ for (i = 0; info_variables[i].name; i++)
+ if (strcmp (info_variables[i].name, line) == 0)
+ break;
+
+ if (!info_variables[i].name)
+ return NULL;
+ else
+ return &info_variables[i];
+}
+
+/* Make an array of REFERENCE which actually contains the names of the
+ variables available in Info. */
+REFERENCE **
+make_variable_completions_array (void)
+{
+ register int i;
+ REFERENCE **array = NULL;
+ int array_index = 0, array_slots = 0;
+
+ for (i = 0; info_variables[i].name; i++)
+ {
+ REFERENCE *entry;
+
+ entry = xmalloc (sizeof (REFERENCE));
+ entry->label = xstrdup (info_variables[i].name);
+ entry->nodename = NULL;
+ entry->filename = NULL;
+
+ add_pointer_to_array
+ (entry, array_index, array, array_slots, 200, REFERENCE *);
+ }
+
+ return array;
+}
+
+#if defined(INFOKEY)
+
+void
+set_variable_to_value(char *name, char *value)
+{
+ register int i;
+
+ /* Find the variable in our list of variables. */
+ for (i = 0; info_variables[i].name; i++)
+ if (strcmp(info_variables[i].name, name) == 0)
+ break;
+
+ if (!info_variables[i].name)
+ return;
+
+ if (info_variables[i].choices)
+ {
+ register int j;
+
+ /* Find the choice in our list of choices. */
+ for (j = 0; info_variables[i].choices[j]; j++)
+ if (strcmp (info_variables[i].choices[j], value) == 0)
+ break;
+
+ if (info_variables[i].choices[j])
+ *info_variables[i].value = j;
+ }
+ else
+ {
+ *info_variables[i].value = atoi(value);
+ }
+}
+
+#endif /* INFOKEY */
diff --git a/info/variables.h b/info/variables.h
new file mode 100644
index 0000000..309814e
--- /dev/null
+++ b/info/variables.h
@@ -0,0 +1,67 @@
+/* variables.h -- Description of user visible variables in Info.
+ $Id: variables.h,v 1.9 2008/03/04 09:45:27 gray Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+
+ Copyright (C) 1993, 1997, 2004, 2007 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 Brian Fox (bfox@ai.mit.edu). */
+
+#ifndef INFO_VARIABLES_H
+#define INFO_VARIABLES_H
+
+/* A variable (in the Info sense) is an integer value with a user-visible
+ name. You may supply an array of strings to complete over when the
+ variable is set; in that case, the variable is set to the index of the
+ string that the user chose. If you supply a null list, the user can
+ set the variable to a numeric value. */
+
+/* Structure describing a user visible variable. */
+typedef struct {
+ char *name; /* Polite name. */
+ char *doc; /* Documentation string. */
+ int *value; /* Address of value. */
+ char **choices; /* Array of strings or NULL if numeric only. */
+} VARIABLE_ALIST;
+
+/* Read the name of an Info variable in the echo area and return the
+ address of a VARIABLE_ALIST member. A return value of NULL indicates
+ that no variable could be read. */
+extern VARIABLE_ALIST *read_variable_name (const char *prompt, WINDOW *window);
+
+/* Make an array of REFERENCE which actually contains the names of the
+ variables available in Info. */
+extern REFERENCE **make_variable_completions_array (void);
+
+/* Set the value of an info variable. */
+extern void set_variable (WINDOW *window, int count, unsigned char key);
+extern void describe_variable (WINDOW *window, int count, unsigned char key);
+
+/* The list of user-visible variables. */
+extern int auto_footnotes_p;
+extern int auto_tiling_p;
+extern int terminal_use_visible_bell_p;
+extern int info_error_rings_bell_p;
+extern int gc_compressed_files;
+extern int show_index_match;
+extern int info_scroll_behaviour;
+extern int window_scroll_step;
+extern int cursor_movement_scrolls_p;
+extern int ISO_Latin_p;
+extern int scroll_last_node;
+
+#endif /* not INFO_VARIABLES_H */
diff --git a/info/window.c b/info/window.c
new file mode 100644
index 0000000..fdbeb33
--- /dev/null
+++ b/info/window.c
@@ -0,0 +1,1958 @@
+/* window.c -- windows in Info.
+ $Id: window.c,v 1.17 2008/09/13 10:01:31 gray Exp $
+
+ Copyright (C) 1993, 1997, 1998, 2001, 2002, 2003, 2004, 2007, 2008
+ 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 Brian Fox (bfox@ai.mit.edu). */
+
+#include "info.h"
+#include "nodes.h"
+#include "window.h"
+#include "display.h"
+#include "info-utils.h"
+#include "infomap.h"
+
+/* The window which describes the screen. */
+WINDOW *the_screen = NULL;
+
+/* The window which describes the echo area. */
+WINDOW *the_echo_area = NULL;
+
+/* The list of windows in Info. */
+WINDOW *windows = NULL;
+
+/* Pointer to the active window in WINDOW_LIST. */
+WINDOW *active_window = NULL;
+
+/* The size of the echo area in Info. It never changes, irregardless of the
+ size of the screen. */
+#define ECHO_AREA_HEIGHT 1
+
+/* Macro returns the amount of space that the echo area truly requires relative
+ to the entire screen. */
+#define echo_area_required (1 + the_echo_area->height)
+
+/* Show malformed multibyte sequences */
+int show_malformed_multibyte_p = 0;
+
+/* Initalize the window system by creating THE_SCREEN and THE_ECHO_AREA.
+ Create the first window ever.
+ You pass the dimensions of the total screen size. */
+void
+window_initialize_windows (int width, int height)
+{
+ the_screen = xmalloc (sizeof (WINDOW));
+ the_echo_area = xmalloc (sizeof (WINDOW));
+ windows = xmalloc (sizeof (WINDOW));
+ active_window = windows;
+
+ zero_mem (the_screen, sizeof (WINDOW));
+ zero_mem (the_echo_area, sizeof (WINDOW));
+ zero_mem (active_window, sizeof (WINDOW));
+
+ /* None of these windows has a goal column yet. */
+ the_echo_area->goal_column = -1;
+ active_window->goal_column = -1;
+ the_screen->goal_column = -1;
+
+ /* The active and echo_area windows are visible.
+ The echo_area is permanent.
+ The screen is permanent. */
+ active_window->flags = W_WindowVisible;
+ the_echo_area->flags = W_WindowIsPerm | W_InhibitMode | W_WindowVisible;
+ the_screen->flags = W_WindowIsPerm;
+
+ /* The height of the echo area never changes. It is statically set right
+ here, and it must be at least 1 line for display. The size of the
+ initial window cannot be the same size as the screen, since the screen
+ includes the echo area. So, we make the height of the initial window
+ equal to the screen's displayable region minus the height of the echo
+ area. */
+ the_echo_area->height = ECHO_AREA_HEIGHT;
+ active_window->height = the_screen->height - 1 - the_echo_area->height;
+ window_new_screen_size (width, height);
+
+ /* The echo area uses a different keymap than normal info windows. */
+ the_echo_area->keymap = echo_area_keymap;
+ active_window->keymap = info_keymap;
+}
+
+/* Given that the size of the screen has changed to WIDTH and HEIGHT
+ from whatever it was before (found in the_screen->height, ->width),
+ change the size (and possibly location) of each window in the screen.
+ If a window would become too small, call the function DELETER on it,
+ after deleting the window from our chain of windows. If DELETER is NULL,
+ nothing extra is done. The last window can never be deleted, but it can
+ become invisible. */
+
+/* If non-null, a function to call with WINDOW as argument when the function
+ window_new_screen_size () has deleted WINDOW. */
+VFunction *window_deletion_notifier = NULL;
+
+void
+window_new_screen_size (int width, int height)
+{
+ register WINDOW *win;
+ int delta_height, delta_each, delta_leftover;
+ int numwins;
+
+ /* If no change, do nothing. */
+ if (width == the_screen->width && height == the_screen->height)
+ return;
+
+ /* If the new window height is too small, make it be zero. */
+ if (height < (WINDOW_MIN_SIZE + the_echo_area->height))
+ height = 0;
+ if (width < 0)
+ width = 0;
+
+ /* Find out how many windows will change. */
+ for (numwins = 0, win = windows; win; win = win->next, numwins++);
+
+ /* See if some windows will need to be deleted. This is the case if
+ the screen is getting smaller, and the available space divided by
+ the number of windows is less than WINDOW_MIN_SIZE. In that case,
+ delete some windows and try again until there is either enough
+ space to divy up among the windows, or until there is only one
+ window left. */
+ while ((height - echo_area_required) / numwins <= WINDOW_MIN_SIZE)
+ {
+ /* If only one window, make the size of it be zero, and return
+ immediately. */
+ if (!windows->next)
+ {
+ windows->height = 0;
+ maybe_free (windows->line_starts);
+ windows->line_starts = NULL;
+ windows->line_count = 0;
+ break;
+ }
+
+ /* If we have some temporary windows, delete one of them. */
+ for (win = windows; win; win = win->next)
+ if (win->flags & W_TempWindow)
+ break;
+
+ /* Otherwise, delete the first window, and try again. */
+ if (!win)
+ win = windows;
+
+ if (window_deletion_notifier)
+ (*window_deletion_notifier) (win);
+
+ window_delete_window (win);
+ numwins--;
+ }
+
+ /* The screen has changed height and width. */
+ delta_height = height - the_screen->height; /* This is how much. */
+ the_screen->height = height; /* This is the new height. */
+ the_screen->width = width; /* This is the new width. */
+
+ /* Set the start of the echo area. */
+ the_echo_area->first_row = height - the_echo_area->height;
+ the_echo_area->width = width;
+
+ /* Check to see if the screen can really be changed this way. */
+ if ((!windows->next) && ((windows->height == 0) && (delta_height < 0)))
+ return;
+
+ /* Divide the change in height among the available windows. */
+ delta_each = delta_height / numwins;
+ delta_leftover = delta_height - (delta_each * numwins);
+
+ /* Change the height of each window in the chain by delta_each. Change
+ the height of the last window in the chain by delta_each and by the
+ leftover amount of change. Change the width of each window to be
+ WIDTH. */
+ for (win = windows; win; win = win->next)
+ {
+ if ((win->width != width) && ((win->flags & W_InhibitMode) == 0))
+ {
+ win->width = width;
+ maybe_free (win->modeline);
+ win->modeline = xmalloc (1 + width);
+ }
+
+ win->height += delta_each;
+
+ /* If the previous height of this window was zero, it was the only
+ window, and it was not visible. Thus we need to compensate for
+ the echo_area. */
+ if (win->height == delta_each)
+ win->height -= (1 + the_echo_area->height);
+
+ /* If this is not the first window in the chain, then change the
+ first row of it. We cannot just add delta_each to the first row,
+ since this window's first row is the sum of the collective increases
+ that have gone before it. So we just add one to the location of the
+ previous window's modeline. */
+ if (win->prev)
+ win->first_row = (win->prev->first_row + win->prev->height) + 1;
+
+ /* The last window in the chain gets the extra space (or shrinkage). */
+ if (!win->next)
+ win->height += delta_leftover;
+
+ if (win->node)
+ recalculate_line_starts (win);
+
+ win->flags |= W_UpdateWindow;
+ }
+
+ /* If the screen got smaller, check over the windows just shrunk to
+ keep them within bounds. Some of the windows may have gotten smaller
+ than WINDOW_MIN_HEIGHT in which case some of the other windows are
+ larger than the available display space in the screen. Because of our
+ intial test above, we know that there is enough space for all of the
+ windows. */
+ if ((delta_each < 0) && ((windows->height != 0) && windows->next))
+ {
+ int avail;
+
+ avail = the_screen->height - (numwins + the_echo_area->height);
+ win = windows;
+
+ while (win)
+ {
+ if ((win->height < WINDOW_MIN_HEIGHT) ||
+ (win->height > avail))
+ {
+ WINDOW *lastwin = NULL;
+
+ /* Split the space among the available windows. */
+ delta_each = avail / numwins;
+ delta_leftover = avail - (delta_each * numwins);
+
+ for (win = windows; win; win = win->next)
+ {
+ lastwin = win;
+ if (win->prev)
+ win->first_row =
+ (win->prev->first_row + win->prev->height) + 1;
+ win->height = delta_each;
+ }
+
+ /* Give the leftover space (if any) to the last window. */
+ lastwin->height += delta_leftover;
+ break;
+ }
+ else
+ win = win->next;
+ }
+ }
+
+ /* One more loop. If any heights or widths have become negative,
+ set them to zero. This can apparently happen with resizing down to
+ very small sizes. Sadly, it is not apparent to me where in the
+ above calculations it goes wrong. */
+ for (win = windows; win; win = win->next)
+ {
+ if (win->height < 0)
+ win->height = 0;
+
+ if (win->width < 0)
+ win->width = 0;
+ }
+}
+
+/* Make a new window showing NODE, and return that window structure.
+ If NODE is passed as NULL, then show the node showing in the active
+ window. If the window could not be made return a NULL pointer. The
+ active window is not changed.*/
+WINDOW *
+window_make_window (NODE *node)
+{
+ WINDOW *window;
+
+ if (!node)
+ node = active_window->node;
+
+ /* If there isn't enough room to make another window, return now. */
+ if ((active_window->height / 2) < WINDOW_MIN_SIZE)
+ return NULL;
+
+ /* Make and initialize the new window.
+ The fudging about with -1 and +1 is because the following window in the
+ chain cannot start at window->height, since that is where the modeline
+ for the previous window is displayed. The inverse adjustment is made
+ in window_delete_window (). */
+ window = xmalloc (sizeof (WINDOW));
+ window->width = the_screen->width;
+ window->height = (active_window->height / 2) - 1;
+#if defined (SPLIT_BEFORE_ACTIVE)
+ window->first_row = active_window->first_row;
+#else
+ window->first_row = active_window->first_row +
+ (active_window->height - window->height);
+#endif
+ window->keymap = info_keymap;
+ window->goal_column = -1;
+ memset (&window->line_map, 0, sizeof (window->line_map));
+ window->modeline = xmalloc (1 + window->width);
+ window->line_starts = NULL;
+ window->flags = W_UpdateWindow | W_WindowVisible;
+ window_set_node_of_window (window, node);
+
+ /* Adjust the height of the old active window. */
+ active_window->height -= (window->height + 1);
+#if defined (SPLIT_BEFORE_ACTIVE)
+ active_window->first_row += (window->height + 1);
+#endif
+ active_window->flags |= W_UpdateWindow;
+
+ /* Readjust the new and old windows so that their modelines and contents
+ will be displayed correctly. */
+#if defined (NOTDEF)
+ /* We don't have to do this for WINDOW since window_set_node_of_window ()
+ already did. */
+ window_adjust_pagetop (window);
+ window_make_modeline (window);
+#endif /* NOTDEF */
+
+ /* We do have to readjust the existing active window. */
+ window_adjust_pagetop (active_window);
+ window_make_modeline (active_window);
+
+#if defined (SPLIT_BEFORE_ACTIVE)
+ /* This window is just before the active one. The active window gets
+ bumped down one. The active window is not changed. */
+ window->next = active_window;
+
+ window->prev = active_window->prev;
+ active_window->prev = window;
+
+ if (window->prev)
+ window->prev->next = window;
+ else
+ windows = window;
+#else
+ /* This window is just after the active one. Which window is active is
+ not changed. */
+ window->prev = active_window;
+ window->next = active_window->next;
+ active_window->next = window;
+ if (window->next)
+ window->next->prev = window;
+#endif /* !SPLIT_BEFORE_ACTIVE */
+ return window;
+}
+
+/* These useful macros make it possible to read the code in
+ window_change_window_height (). */
+#define grow_me_shrinking_next(me, next, diff) \
+ do { \
+ me->height += diff; \
+ next->height -= diff; \
+ next->first_row += diff; \
+ window_adjust_pagetop (next); \
+ } while (0)
+
+#define grow_me_shrinking_prev(me, prev, diff) \
+ do { \
+ me->height += diff; \
+ prev->height -= diff; \
+ me->first_row -=diff; \
+ window_adjust_pagetop (prev); \
+ } while (0)
+
+#define shrink_me_growing_next(me, next, diff) \
+ do { \
+ me->height -= diff; \
+ next->height += diff; \
+ next->first_row -= diff; \
+ window_adjust_pagetop (next); \
+ } while (0)
+
+#define shrink_me_growing_prev(me, prev, diff) \
+ do { \
+ me->height -= diff; \
+ prev->height += diff; \
+ me->first_row += diff; \
+ window_adjust_pagetop (prev); \
+ } while (0)
+
+/* Change the height of WINDOW by AMOUNT. This also automagically adjusts
+ the previous and next windows in the chain. If there is only one user
+ window, then no change takes place. */
+void
+window_change_window_height (WINDOW *window, int amount)
+{
+ register WINDOW *win, *prev, *next;
+
+ /* If there is only one window, or if the amount of change is zero,
+ return immediately. */
+ if (!windows->next || amount == 0)
+ return;
+
+ /* Find this window in our chain. */
+ for (win = windows; win; win = win->next)
+ if (win == window)
+ break;
+
+ /* If the window is isolated (i.e., doesn't appear in our window list,
+ then quit now. */
+ if (!win)
+ return;
+
+ /* Change the height of this window by AMOUNT, if that is possible.
+ It can be impossible if there isn't enough available room on the
+ screen, or if the resultant window would be too small. */
+
+ prev = window->prev;
+ next = window->next;
+
+ /* WINDOW decreasing in size? */
+ if (amount < 0)
+ {
+ int abs_amount = -amount; /* It is easier to deal with this way. */
+
+ /* If the resultant window would be too small, stop here. */
+ if ((window->height - abs_amount) < WINDOW_MIN_HEIGHT)
+ return;
+
+ /* If we have two neighboring windows, choose the smaller one to get
+ larger. */
+ if (next && prev)
+ {
+ if (prev->height < next->height)
+ shrink_me_growing_prev (window, prev, abs_amount);
+ else
+ shrink_me_growing_next (window, next, abs_amount);
+ }
+ else if (next)
+ shrink_me_growing_next (window, next, abs_amount);
+ else
+ shrink_me_growing_prev (window, prev, abs_amount);
+ }
+
+ /* WINDOW increasing in size? */
+ if (amount > 0)
+ {
+ int total_avail, next_avail = 0, prev_avail = 0;
+
+ if (next)
+ next_avail = next->height - WINDOW_MIN_SIZE;
+
+ if (prev)
+ prev_avail = prev->height - WINDOW_MIN_SIZE;
+
+ total_avail = next_avail + prev_avail;
+
+ /* If there isn't enough space available to grow this window, give up. */
+ if (amount > total_avail)
+ return;
+
+ /* If there aren't two neighboring windows, or if one of the neighbors
+ is larger than the other one by at least AMOUNT, grow that one. */
+ if ((next && !prev) || ((next_avail - amount) >= prev_avail))
+ grow_me_shrinking_next (window, next, amount);
+ else if ((prev && !next) || ((prev_avail - amount) >= next_avail))
+ grow_me_shrinking_prev (window, prev, amount);
+ else
+ {
+ int change;
+
+ /* This window has two neighbors. They both must be shrunk in to
+ make enough space for WINDOW to grow. Make them both the same
+ size. */
+ if (prev_avail > next_avail)
+ {
+ change = prev_avail - next_avail;
+ grow_me_shrinking_prev (window, prev, change);
+ amount -= change;
+ }
+ else
+ {
+ change = next_avail - prev_avail;
+ grow_me_shrinking_next (window, next, change);
+ amount -= change;
+ }
+
+ /* Both neighbors are the same size. Split the difference in
+ AMOUNT between them. */
+ while (amount)
+ {
+ window->height++;
+ amount--;
+
+ /* Odd numbers grow next, even grow prev. */
+ if (amount & 1)
+ {
+ prev->height--;
+ window->first_row--;
+ }
+ else
+ {
+ next->height--;
+ next->first_row++;
+ }
+ }
+ window_adjust_pagetop (prev);
+ window_adjust_pagetop (next);
+ }
+ }
+ if (prev)
+ prev->flags |= W_UpdateWindow;
+
+ if (next)
+ next->flags |= W_UpdateWindow;
+
+ window->flags |= W_UpdateWindow;
+ window_adjust_pagetop (window);
+}
+
+/* Tile all of the windows currently displayed in the global variable
+ WINDOWS. If argument STYLE is TILE_INTERNALS, tile windows displaying
+ internal nodes as well, otherwise do not change the height of such
+ windows. */
+void
+window_tile_windows (int style)
+{
+ WINDOW *win, *last_adjusted;
+ int numwins, avail, per_win_height, leftover;
+ int do_internals;
+
+ numwins = avail = 0;
+ do_internals = (style == TILE_INTERNALS);
+
+ for (win = windows; win; win = win->next)
+ if (do_internals || !win->node ||
+ (win->node->flags & N_IsInternal) == 0)
+ {
+ avail += win->height;
+ numwins++;
+ }
+
+ if (numwins <= 1 || !the_screen->height)
+ return;
+
+ /* Find the size for each window. Divide the size of the usable portion
+ of the screen by the number of windows. */
+ per_win_height = avail / numwins;
+ leftover = avail - (per_win_height * numwins);
+
+ last_adjusted = NULL;
+ for (win = windows; win; win = win->next)
+ {
+ if (do_internals || !win->node ||
+ (win->node->flags & N_IsInternal) == 0)
+ {
+ last_adjusted = win;
+ win->height = per_win_height;
+ }
+ }
+
+ if (last_adjusted)
+ last_adjusted->height += leftover;
+
+ /* Readjust the first_row of every window in the chain. */
+ for (win = windows; win; win = win->next)
+ {
+ if (win->prev)
+ win->first_row = win->prev->first_row + win->prev->height + 1;
+
+ window_adjust_pagetop (win);
+ win->flags |= W_UpdateWindow;
+ }
+}
+
+/* Toggle the state of line wrapping in WINDOW. This can do a bit of fancy
+ redisplay. */
+void
+window_toggle_wrap (WINDOW *window)
+{
+ if (window->flags & W_NoWrap)
+ window->flags &= ~W_NoWrap;
+ else
+ window->flags |= W_NoWrap;
+
+ if (window != the_echo_area)
+ {
+ char **old_starts;
+ int old_lines, old_pagetop;
+
+ old_starts = window->line_starts;
+ old_lines = window->line_count;
+ old_pagetop = window->pagetop;
+
+ calculate_line_starts (window);
+
+ /* Make sure that point appears within this window. */
+ window_adjust_pagetop (window);
+
+ /* If the pagetop hasn't changed maybe we can do some scrolling now
+ to speed up the display. Many of the line starts will be the same,
+ so scrolling here is a very good optimization.*/
+ if (old_pagetop == window->pagetop)
+ display_scroll_line_starts
+ (window, old_pagetop, old_starts, old_lines);
+ maybe_free (old_starts);
+ }
+ window->flags |= W_UpdateWindow;
+}
+
+/* Set WINDOW to display NODE. */
+void
+window_set_node_of_window (WINDOW *window, NODE *node)
+{
+ window->node = node;
+ window->pagetop = 0;
+ window->point = 0;
+ recalculate_line_starts (window);
+ window->flags |= W_UpdateWindow;
+ /* The display_pos member is nonzero if we're displaying an anchor. */
+ window->point = node ? node->display_pos : 0;
+ window_adjust_pagetop (window);
+ window_make_modeline (window);
+}
+
+/* Delete WINDOW from the list of known windows. If this window was the
+ active window, make the next window in the chain be the active window.
+ If the active window is the next or previous window, choose that window
+ as the recipient of the extra space. Otherwise, prefer the next window. */
+void
+window_delete_window (WINDOW *window)
+{
+ WINDOW *next, *prev, *window_to_fix;
+
+ next = window->next;
+ prev = window->prev;
+
+ /* You cannot delete the only window or a permanent window. */
+ if ((!next && !prev) || (window->flags & W_WindowIsPerm))
+ return;
+
+ if (next)
+ next->prev = prev;
+
+ if (!prev)
+ windows = next;
+ else
+ prev->next = next;
+
+ if (window->line_starts)
+ free (window->line_starts);
+
+ if (window->modeline)
+ free (window->modeline);
+
+ if (window == active_window)
+ {
+ /* If there isn't a next window, then there must be a previous one,
+ since we cannot delete the last window. If there is a next window,
+ prefer to use that as the active window. */
+ if (next)
+ active_window = next;
+ else
+ active_window = prev;
+ }
+
+ if (next && active_window == next)
+ window_to_fix = next;
+ else if (prev && active_window == prev)
+ window_to_fix = prev;
+ else if (next)
+ window_to_fix = next;
+ else if (prev)
+ window_to_fix = prev;
+ else
+ window_to_fix = windows;
+
+ if (window_to_fix->first_row > window->first_row)
+ {
+ int diff;
+
+ /* Try to adjust the visible part of the node so that as little
+ text as possible has to move. */
+ diff = window_to_fix->first_row - window->first_row;
+ window_to_fix->first_row = window->first_row;
+
+ window_to_fix->pagetop -= diff;
+ if (window_to_fix->pagetop < 0)
+ window_to_fix->pagetop = 0;
+ }
+
+ /* The `+ 1' is to offset the difference between the first_row locations.
+ See the code in window_make_window (). */
+ window_to_fix->height += window->height + 1;
+ window_to_fix->flags |= W_UpdateWindow;
+
+ free (window);
+}
+
+/* For every window in CHAIN, set the flags member to have FLAG set. */
+void
+window_mark_chain (WINDOW *chain, int flag)
+{
+ register WINDOW *win;
+
+ for (win = chain; win; win = win->next)
+ win->flags |= flag;
+}
+
+/* For every window in CHAIN, clear the flags member of FLAG. */
+void
+window_unmark_chain (WINDOW *chain, int flag)
+{
+ register WINDOW *win;
+
+ for (win = chain; win; win = win->next)
+ win->flags &= ~flag;
+}
+
+/* Return the number of characters it takes to display CHARACTER on the
+ screen at HPOS. */
+int
+character_width (int character, int hpos)
+{
+ int printable_limit = 127;
+ int width = 1;
+
+ if (ISO_Latin_p)
+ printable_limit = 255;
+
+ if (character > printable_limit)
+ width = 3;
+ else if (iscntrl (character))
+ {
+ switch (character)
+ {
+ case '\r':
+ case '\n':
+ width = the_screen->width - hpos;
+ break;
+ case '\t':
+ width = ((hpos + 8) & 0xf8) - hpos;
+ break;
+ default:
+ width = 2;
+ }
+ }
+ else if (character == DEL)
+ width = 2;
+
+ return width;
+}
+
+/* Return the number of characters it takes to display STRING on the screen
+ at HPOS. */
+int
+string_width (char *string, int hpos)
+{
+ register int i, width, this_char_width;
+
+ for (width = 0, i = 0; string[i]; i++)
+ {
+ /* Support ANSI escape sequences for -R. */
+ if (raw_escapes_p
+ && string[i] == '\033'
+ && string[i+1] == '['
+ && isdigit (string[i+2])
+ && (string[i+3] == 'm'
+ || (isdigit (string[i+3]) && string[i+4] == 'm')))
+ {
+ while (string[i] != 'm')
+ i++;
+ this_char_width = 0;
+ }
+ else
+ this_char_width = character_width (string[i], hpos);
+ width += this_char_width;
+ hpos += this_char_width;
+ }
+ return width;
+}
+
+/* Quickly guess the approximate number of lines that NODE would
+ take to display. This really only counts carriage returns. */
+int
+window_physical_lines (NODE *node)
+{
+ register int i, lines;
+ char *contents;
+
+ if (!node)
+ return 0;
+
+ contents = node->contents;
+ for (i = 0, lines = 1; i < node->nodelen; i++)
+ if (contents[i] == '\n')
+ lines++;
+
+ return lines;
+}
+
+
+struct calc_closure {
+ WINDOW *win;
+ int line_starts_slots; /* FIXME: size_t */
+};
+
+static int
+_calc_line_starts (void *closure, size_t line_index,
+ const char *src_line,
+ char *printed_line, size_t pl_index, size_t pl_count)
+{
+ struct calc_closure *cp = closure;
+ add_pointer_to_array (src_line,
+ cp->win->line_count, cp->win->line_starts,
+ cp->line_starts_slots, 100, char *);
+ return 0;
+}
+
+void
+calculate_line_starts (WINDOW *window)
+{
+ struct calc_closure closure;
+
+ window->line_starts = NULL;
+ window->line_count = 0;
+
+ if (!window->node)
+ return;
+
+ closure.win = window;
+ closure.line_starts_slots = 0;
+ process_node_text (window, window->node->contents, 0,
+ _calc_line_starts, &closure);
+}
+
+/* Given WINDOW, recalculate the line starts for the node it displays. */
+void
+recalculate_line_starts (WINDOW *window)
+{
+ maybe_free (window->line_starts);
+ calculate_line_starts (window);
+}
+
+
+/* Global variable control redisplay of scrolled windows. If non-zero,
+ it is the desired number of lines to scroll the window in order to
+ make point visible. A value of 1 produces smooth scrolling. If set
+ to zero, the line containing point is centered within the window. */
+int window_scroll_step = 1;
+
+/* Adjust the pagetop of WINDOW such that the cursor point will be visible. */
+void
+window_adjust_pagetop (WINDOW *window)
+{
+ register int line = 0;
+ char *contents;
+
+ if (!window->node)
+ return;
+
+ contents = window->node->contents;
+
+ /* Find the first printed line start which is after WINDOW->point. */
+ for (line = 0; line < window->line_count; line++)
+ {
+ char *line_start;
+
+ line_start = window->line_starts[line];
+
+ if ((line_start - contents) > window->point)
+ break;
+ }
+
+ /* The line index preceding the line start which is past point is the
+ one containing point. */
+ line--;
+
+ /* If this line appears in the current displayable page, do nothing.
+ Otherwise, adjust the top of the page to make this line visible. */
+ if ((line < window->pagetop) ||
+ (line - window->pagetop > (window->height - 1)))
+ {
+ /* The user-settable variable "scroll-step" is used to attempt
+ to make point visible, iff it is non-zero. If that variable
+ is zero, then the line containing point is centered within
+ the window. */
+ if (window_scroll_step < window->height)
+ {
+ if ((line < window->pagetop) &&
+ ((window->pagetop - window_scroll_step) <= line))
+ window->pagetop -= window_scroll_step;
+ else if ((line - window->pagetop > (window->height - 1)) &&
+ ((line - (window->pagetop + window_scroll_step)
+ < window->height)))
+ window->pagetop += window_scroll_step;
+ else
+ window->pagetop = line - ((window->height - 1) / 2);
+ }
+ else
+ window->pagetop = line - ((window->height - 1) / 2);
+
+ if (window->pagetop < 0)
+ window->pagetop = 0;
+ window->flags |= W_UpdateWindow;
+ }
+}
+
+/* Return the index of the line containing point. */
+int
+window_line_of_point (WINDOW *window)
+{
+ register int i, start = 0;
+
+ /* Try to optimize. Check to see if point is past the pagetop for
+ this window, and if so, start searching forward from there. */
+ if ((window->pagetop > -1 && window->pagetop < window->line_count) &&
+ (window->line_starts[window->pagetop] - window->node->contents)
+ <= window->point)
+ start = window->pagetop;
+
+ for (i = start; i < window->line_count; i++)
+ {
+ if ((window->line_starts[i] - window->node->contents) > window->point)
+ break;
+ }
+
+ return i - 1;
+}
+
+/* Get and return the goal column for this window. */
+int
+window_get_goal_column (WINDOW *window)
+{
+ if (!window->node)
+ return -1;
+
+ if (window->goal_column != -1)
+ return window->goal_column;
+
+ /* Okay, do the work. Find the printed offset of the cursor
+ in this window. */
+ return window_get_cursor_column (window);
+}
+
+/* Get and return the printed column offset of the cursor in this window. */
+int
+window_get_cursor_column (WINDOW *window)
+{
+ return window_point_to_column (window, window->point, &window->point);
+}
+
+/* Count the number of characters in LINE that precede the printed column
+ offset of GOAL. */
+int
+window_chars_to_goal (WINDOW *win, int goal)
+{
+ window_compute_line_map (win);
+ if (goal >= win->line_map.used)
+ goal = win->line_map.used - 1;
+ return win->line_map.map[goal] - win->line_map.map[0];
+}
+
+/* Create a modeline for WINDOW, and store it in window->modeline. */
+void
+window_make_modeline (WINDOW *window)
+{
+ register int i;
+ char *modeline;
+ char location_indicator[4];
+ int lines_remaining;
+
+ /* Only make modelines for those windows which have one. */
+ if (window->flags & W_InhibitMode)
+ return;
+
+ /* Find the number of lines actually displayed in this window. */
+ lines_remaining = window->line_count - window->pagetop;
+
+ if (window->pagetop == 0)
+ {
+ if (lines_remaining <= window->height)
+ strcpy (location_indicator, "All");
+ else
+ strcpy (location_indicator, "Top");
+ }
+ else
+ {
+ if (lines_remaining <= window->height)
+ strcpy (location_indicator, "Bot");
+ else
+ {
+ float pt, lc;
+ int percentage;
+
+ pt = (float)window->pagetop;
+ lc = (float)window->line_count;
+
+ percentage = 100 * (pt / lc);
+
+ sprintf (location_indicator, "%2d%%", percentage);
+ }
+ }
+
+ /* Calculate the maximum size of the information to stick in MODELINE. */
+ {
+ int modeline_len = 0;
+ char *parent = NULL, *filename = "*no file*";
+ char *nodename = "*no node*";
+ const char *update_message = NULL;
+ NODE *node = window->node;
+
+ if (node)
+ {
+ if (node->nodename)
+ nodename = node->nodename;
+
+ if (node->parent)
+ {
+ parent = filename_non_directory (node->parent);
+ modeline_len += strlen ("Subfile: ") + strlen (node->filename);
+ }
+
+ if (node->filename)
+ filename = filename_non_directory (node->filename);
+
+ if (node->flags & N_UpdateTags)
+ update_message = _("--*** Tags out of Date ***");
+ }
+
+ if (update_message)
+ modeline_len += strlen (update_message);
+ modeline_len += strlen (filename);
+ modeline_len += strlen (nodename);
+ modeline_len += 4; /* strlen (location_indicator). */
+
+ /* 10 for the decimal representation of the number of lines in this
+ node, and the remainder of the text that can appear in the line. */
+ modeline_len += 10 + strlen (_("-----Info: (), lines ----, "));
+ modeline_len += window->width;
+
+ modeline = xmalloc (1 + modeline_len);
+
+ /* Special internal windows have no filename. */
+ if (!parent && !*filename)
+ sprintf (modeline, _("-%s---Info: %s, %d lines --%s--"),
+ (window->flags & W_NoWrap) ? "$" : "-",
+ nodename, window->line_count, location_indicator);
+ else
+ sprintf (modeline, _("-%s%s-Info: (%s)%s, %d lines --%s--"),
+ (window->flags & W_NoWrap) ? "$" : "-",
+ (node && (node->flags & N_IsCompressed)) ? "zz" : "--",
+ parent ? parent : filename,
+ nodename, window->line_count, location_indicator);
+
+ if (parent)
+ sprintf (modeline + strlen (modeline), _(" Subfile: %s"), filename);
+
+ if (update_message)
+ sprintf (modeline + strlen (modeline), "%s", update_message);
+
+ i = strlen (modeline);
+
+ if (i >= window->width)
+ modeline[window->width] = '\0';
+ else
+ {
+ while (i < window->width)
+ modeline[i++] = '-';
+ modeline[i] = '\0';
+ }
+
+ strcpy (window->modeline, modeline);
+ free (modeline);
+ }
+}
+
+/* Make WINDOW start displaying at PERCENT percentage of its node. */
+void
+window_goto_percentage (WINDOW *window, int percent)
+{
+ int desired_line;
+
+ if (!percent)
+ desired_line = 0;
+ else
+ desired_line =
+ (int) ((float)window->line_count * ((float)percent / 100.0));
+
+ window->pagetop = desired_line;
+ window->point =
+ window->line_starts[window->pagetop] - window->node->contents;
+ window->flags |= W_UpdateWindow;
+ window_make_modeline (window);
+}
+
+/* Get the state of WINDOW, and save it in STATE. */
+void
+window_get_state (WINDOW *window, SEARCH_STATE *state)
+{
+ state->node = window->node;
+ state->pagetop = window->pagetop;
+ state->point = window->point;
+}
+
+/* Set the node, pagetop, and point of WINDOW. */
+void
+window_set_state (WINDOW *window, SEARCH_STATE *state)
+{
+ if (window->node != state->node)
+ window_set_node_of_window (window, state->node);
+ window->pagetop = state->pagetop;
+ window->point = state->point;
+}
+
+
+/* Manipulating home-made nodes. */
+
+/* A place to buffer echo area messages. */
+static NODE *echo_area_node = NULL;
+
+/* Make the node of the_echo_area be an empty one. */
+static void
+free_echo_area (void)
+{
+ if (echo_area_node)
+ {
+ maybe_free (echo_area_node->contents);
+ free (echo_area_node);
+ }
+
+ echo_area_node = NULL;
+ window_set_node_of_window (the_echo_area, echo_area_node);
+}
+
+/* Clear the echo area, removing any message that is already present.
+ The echo area is cleared immediately. */
+void
+window_clear_echo_area (void)
+{
+ free_echo_area ();
+ display_update_one_window (the_echo_area);
+}
+
+/* Make a message appear in the echo area, built from FORMAT, ARG1 and ARG2.
+ The arguments are treated similar to printf () arguments, but not all of
+ printf () hair is present. The message appears immediately. If there was
+ already a message appearing in the echo area, it is removed. */
+void
+window_message_in_echo_area (const char *format, void *arg1, void *arg2)
+{
+ free_echo_area ();
+ echo_area_node = build_message_node (format, arg1, arg2);
+ window_set_node_of_window (the_echo_area, echo_area_node);
+ display_update_one_window (the_echo_area);
+}
+
+/* Place a temporary message in the echo area built from FORMAT, ARG1
+ and ARG2. The message appears immediately, but does not destroy
+ any existing message. A future call to unmessage_in_echo_area ()
+ restores the old contents. */
+static NODE **old_echo_area_nodes = NULL;
+static int old_echo_area_nodes_index = 0;
+static int old_echo_area_nodes_slots = 0;
+
+void
+message_in_echo_area (const char *format, void *arg1, void *arg2)
+{
+ if (echo_area_node)
+ {
+ add_pointer_to_array (echo_area_node, old_echo_area_nodes_index,
+ old_echo_area_nodes, old_echo_area_nodes_slots,
+ 4, NODE *);
+ }
+ echo_area_node = NULL;
+ window_message_in_echo_area (format, arg1, arg2);
+}
+
+void
+unmessage_in_echo_area (void)
+{
+ free_echo_area ();
+
+ if (old_echo_area_nodes_index)
+ echo_area_node = old_echo_area_nodes[--old_echo_area_nodes_index];
+
+ window_set_node_of_window (the_echo_area, echo_area_node);
+ display_update_one_window (the_echo_area);
+}
+
+/* A place to build a message. */
+static char *message_buffer = NULL;
+static int message_buffer_index = 0;
+static int message_buffer_size = 0;
+
+/* Ensure that there is enough space to stuff LENGTH characters into
+ MESSAGE_BUFFER. */
+static void
+message_buffer_resize (int length)
+{
+ if (!message_buffer)
+ {
+ message_buffer_size = length + 1;
+ message_buffer = xmalloc (message_buffer_size);
+ message_buffer_index = 0;
+ }
+
+ while (message_buffer_size <= message_buffer_index + length)
+ message_buffer = (char *)
+ xrealloc (message_buffer,
+ message_buffer_size += 100 + (2 * length));
+}
+
+/* Format MESSAGE_BUFFER with the results of printing FORMAT with ARG1 and
+ ARG2. */
+static void
+build_message_buffer (const char *format, void *arg1, void *arg2, void *arg3)
+{
+ register int i, len;
+ void *args[3];
+ int arg_index = 0;
+
+ args[0] = arg1;
+ args[1] = arg2;
+ args[2] = arg3;
+
+ len = strlen (format);
+
+ message_buffer_resize (len);
+
+ for (i = 0; format[i]; i++)
+ {
+ if (format[i] != '%')
+ {
+ message_buffer[message_buffer_index++] = format[i];
+ len--;
+ }
+ else
+ {
+ char c;
+ const char *fmt_start = format + i;
+ char *fmt;
+ int fmt_len, formatted_len;
+ int paramed = 0;
+
+ format_again:
+ i++;
+ while (format[i] && strchr ("-. +0123456789", format[i]))
+ i++;
+ c = format[i];
+
+ if (c == '\0')
+ abort ();
+
+ if (c == '$') {
+ /* position parameter parameter */
+ /* better to use bprintf from bfox's metahtml? */
+ arg_index = atoi(fmt_start + 1) - 1;
+ if (arg_index < 0)
+ arg_index = 0;
+ if (arg_index >= 2)
+ arg_index = 1;
+ paramed = 1;
+ goto format_again;
+ }
+
+ fmt_len = format + i - fmt_start + 1;
+ fmt = xmalloc (fmt_len + 1);
+ strncpy (fmt, fmt_start, fmt_len);
+ fmt[fmt_len] = '\0';
+
+ if (paramed) {
+ /* removed positioned parameter */
+ char *p;
+ for (p = fmt + 1; *p && *p != '$'; p++) {
+ ;
+ }
+ strcpy(fmt + 1, p + 1);
+ }
+
+ /* If we have "%-98s", maybe 98 calls for a longer string. */
+ if (fmt_len > 2)
+ {
+ int j;
+
+ for (j = fmt_len - 2; j >= 0; j--)
+ if (isdigit (fmt[j]) || fmt[j] == '$')
+ break;
+
+ formatted_len = atoi (fmt + j);
+ }
+ else
+ formatted_len = c == 's' ? 0 : 1; /* %s can produce empty string */
+
+ switch (c)
+ {
+ case '%': /* Insert a percent sign. */
+ message_buffer_resize (len + formatted_len);
+ sprintf
+ (message_buffer + message_buffer_index, fmt, "%");
+ message_buffer_index += formatted_len;
+ break;
+
+ case 's': /* Insert the current arg as a string. */
+ {
+ char *string;
+ int string_len;
+
+ string = (char *)args[arg_index++];
+ string_len = strlen (string);
+
+ if (formatted_len > string_len)
+ string_len = formatted_len;
+ message_buffer_resize (len + string_len);
+ sprintf
+ (message_buffer + message_buffer_index, fmt, string);
+ message_buffer_index += string_len;
+ }
+ break;
+
+ case 'd': /* Insert the current arg as an integer. */
+ {
+ long long_val;
+ int integer;
+
+ long_val = (long)args[arg_index++];
+ integer = (int)long_val;
+
+ message_buffer_resize (len + formatted_len > 32
+ ? formatted_len : 32);
+ sprintf
+ (message_buffer + message_buffer_index, fmt, integer);
+ message_buffer_index = strlen (message_buffer);
+ }
+ break;
+
+ case 'c': /* Insert the current arg as a character. */
+ {
+ long long_val;
+ int character;
+
+ long_val = (long)args[arg_index++];
+ character = (int)long_val;
+
+ message_buffer_resize (len + formatted_len);
+ sprintf
+ (message_buffer + message_buffer_index, fmt, character);
+ message_buffer_index += formatted_len;
+ }
+ break;
+
+ default:
+ abort ();
+ }
+ free (fmt);
+ }
+ }
+ message_buffer[message_buffer_index] = '\0';
+}
+
+/* Build a new node which has FORMAT printed with ARG1 and ARG2 as the
+ contents. */
+NODE *
+build_message_node (const char *format, void *arg1, void *arg2)
+{
+ NODE *node;
+
+ message_buffer_index = 0;
+ build_message_buffer (format, arg1, arg2, 0);
+
+ node = message_buffer_to_node ();
+ return node;
+}
+
+/* Convert the contents of the message buffer to a node. */
+NODE *
+message_buffer_to_node (void)
+{
+ NODE *node;
+
+ node = xmalloc (sizeof (NODE));
+ node->filename = NULL;
+ node->parent = NULL;
+ node->nodename = NULL;
+ node->flags = 0;
+ node->display_pos =0;
+
+ /* Make sure that this buffer ends with a newline. */
+ node->nodelen = 1 + strlen (message_buffer);
+ node->contents = xmalloc (1 + node->nodelen);
+ strcpy (node->contents, message_buffer);
+ node->contents[node->nodelen - 1] = '\n';
+ node->contents[node->nodelen] = '\0';
+ return node;
+}
+
+/* Useful functions can be called from outside of window.c. */
+void
+initialize_message_buffer (void)
+{
+ message_buffer_index = 0;
+}
+
+/* Print FORMAT with ARG1,2 to the end of the current message buffer. */
+void
+printf_to_message_buffer (const char *format, void *arg1, void *arg2, void *arg3)
+{
+ build_message_buffer (format, arg1, arg2, arg3);
+}
+
+/* Return the current horizontal position of the "cursor" on the most
+ recently output message buffer line. */
+int
+message_buffer_length_this_line (void)
+{
+ register int i;
+
+ if (!message_buffer_index)
+ return 0;
+
+ for (i = message_buffer_index; i && message_buffer[i - 1] != '\n'; i--);
+
+ return string_width (message_buffer + i, 0);
+}
+
+/* Pad STRING to COUNT characters by inserting blanks. */
+int
+pad_to (int count, char *string)
+{
+ register int i;
+
+ i = strlen (string);
+
+ if (i >= count)
+ string[i++] = ' ';
+ else
+ {
+ while (i < count)
+ string[i++] = ' ';
+ }
+ string[i] = '\0';
+
+ return i;
+}
+
+
+#define ITER_SETBYTES(iter,n) ((iter).cur.bytes = n)
+#define ITER_LIMIT(iter) ((iter).limit - (iter).cur.ptr)
+
+/* If ITER points to an ANSI escape sequence, process it, set PLEN to its
+ length in bytes, and return 1.
+ Otherwise, return 0.
+ */
+static int
+ansi_escape (mbi_iterator_t iter, size_t *plen)
+{
+ if (raw_escapes_p && *mbi_cur_ptr (iter) == '\033' && mbi_avail (iter))
+ {
+ mbi_advance (iter);
+ if (*mbi_cur_ptr (iter) == '[' && mbi_avail (iter))
+ {
+ ITER_SETBYTES (iter, 1);
+ mbi_advance (iter);
+ if (isdigit (*mbi_cur_ptr (iter)) && mbi_avail (iter))
+ {
+ ITER_SETBYTES (iter, 1);
+ mbi_advance (iter);
+ if (*mbi_cur_ptr (iter) == 'm')
+ {
+ *plen = 4;
+ return 1;
+ }
+ else if (isdigit (*mbi_cur_ptr (iter)) && mbi_avail (iter))
+ {
+ ITER_SETBYTES (iter, 1);
+ mbi_advance (iter);
+ if (*mbi_cur_ptr (iter) == 'm')
+ {
+ *plen = 5;
+ return 1;
+ }
+ }
+ }
+ }
+ }
+
+ return 0;
+}
+
+/* If ITER points to an info tag, process it, set PLEN to its
+ length in bytes, and return 1.
+ Otherwise, return 0.
+
+ Collected tag is processed if HANDLE!=0.
+*/
+static int
+info_tag (mbi_iterator_t iter, int handle, size_t *plen)
+{
+ if (*mbi_cur_ptr (iter) == '\0' && mbi_avail (iter))
+ {
+ mbi_advance (iter);
+ if (*mbi_cur_ptr (iter) == '\b' && mbi_avail (iter))
+ {
+ mbi_advance (iter);
+ if (*mbi_cur_ptr (iter) == '[' && mbi_avail (iter))
+ {
+ const char *ptr, *end;
+ mbi_advance (iter);
+ ptr = mbi_cur_ptr (iter);
+ end = memmem (ptr, ITER_LIMIT (iter), "\0\b]", 3);
+ if (end)
+ {
+ size_t len = end - ptr;
+
+ if (handle)
+ {
+ char *elt = xmalloc (len + 1);
+ memcpy (elt, ptr, len);
+ elt[len] = 0;
+ handle_tag (elt);
+ free (elt);
+ }
+ *plen = len + 6;
+ return 1;
+ }
+ }
+ }
+ }
+
+ return 0;
+}
+
+/* Process contents of the current node from WIN, beginning from START, using
+ callback function FUN.
+
+ FUN is called for every line collected from the node. Its arguments:
+
+ int (*fun) (void *closure, size_t line_no,
+ const char *src_line, char *prt_line,
+ size_t prt_bytes, size_t prt_chars)
+
+ closure -- An opaque pointer passed as 5th parameter to process_node_text;
+ line_no -- Number of processed line (starts from 0);
+ src_line -- Pointer to the source line (unmodified);
+ prt_line -- Collected line contents, ready for output;
+ prt_bytes -- Number of bytes in prt_line;
+ prt_chars -- Number of characters in prt_line.
+
+ If FUN returns non zero, process_node_text stops processing and returns
+ immediately.
+
+ If DO_TAGS is not zero, process info tags, otherwise ignore them.
+
+ Return value: number of lines processed.
+*/
+
+size_t
+process_node_text (WINDOW *win, char *start,
+ int do_tags,
+ int (*fun) (void *, size_t, const char *, char *, size_t, size_t),
+ void *closure)
+{
+ char *printed_line; /* Buffer for a printed line. */
+ size_t pl_count = 0; /* Number of *characters* written to PRINTED_LINE */
+ size_t pl_index = 0; /* Index into PRINTED_LINE. */
+ size_t in_index = 0;
+ size_t line_index = 0; /* Number of lines done so far. */
+ size_t allocated_win_width;
+ mbi_iterator_t iter;
+
+ /* Print each line in the window into our local buffer, and then
+ check the contents of that buffer against the display. If they
+ differ, update the display. */
+ allocated_win_width = win->width + 1;
+ printed_line = xmalloc (allocated_win_width);
+
+ for (mbi_init (iter, start,
+ win->node->contents + win->node->nodelen - start),
+ pl_count = 0;
+ mbi_avail (iter);
+ mbi_advance (iter))
+ {
+ const char *carried_over_ptr;
+ size_t carried_over_len, carried_over_count;
+ const char *cur_ptr = mbi_cur_ptr (iter);
+ int cur_len = mb_len (mbi_cur (iter));
+ int replen;
+ int delim = 0;
+ int rc;
+
+ if (mb_isprint (mbi_cur (iter)))
+ {
+ replen = 1;
+ }
+ else if (cur_len == 1)
+ {
+ if (*cur_ptr == '\r' || *cur_ptr == '\n')
+ {
+ replen = win->width - pl_count;
+ delim = 1;
+ }
+ else if (ansi_escape (iter, &cur_len))
+ {
+ replen = 0;
+ ITER_SETBYTES (iter, cur_len);
+ }
+ else if (info_tag (iter, do_tags, &cur_len))
+ {
+ ITER_SETBYTES (iter, cur_len);
+ continue;
+ }
+ else
+ {
+ if (*cur_ptr == '\t')
+ delim = 1;
+ cur_ptr = printed_representation (cur_ptr, cur_len, pl_count,
+ &cur_len);
+ replen = cur_len;
+ }
+ }
+ else if (show_malformed_multibyte_p || mbi_cur (iter).wc_valid)
+ {
+ /* FIXME: I'm not sure it's the best way to deal with unprintable
+ multibyte characters */
+ cur_ptr = printed_representation (cur_ptr, cur_len, pl_count,
+ &cur_len);
+ replen = cur_len;
+ }
+
+ /* Ensure there is enough space in the buffer */
+ while (pl_index + cur_len + 2 > allocated_win_width - 1)
+ printed_line = x2realloc (printed_line, &allocated_win_width);
+
+ /* If this character can be printed without passing the width of
+ the line, then stuff it into the line. */
+ if (pl_count + replen < win->width)
+ {
+ int i;
+
+ for (i = 0; i < cur_len; i++)
+ printed_line[pl_index++] = cur_ptr[i];
+ pl_count += replen;
+ in_index += mb_len (mbi_cur (iter));
+ }
+ else
+ {
+ /* If this character cannot be printed in this line, we have
+ found the end of this line as it would appear on the screen.
+ Carefully print the end of the line, and then compare. */
+ if (delim)
+ {
+ printed_line[pl_index] = '\0';
+ carried_over_ptr = NULL;
+ }
+ else
+ {
+ /* The printed representation of this character extends into
+ the next line. */
+
+ carried_over_count = replen;
+ if (replen == 1)
+ {
+ /* It is a single (possibly multibyte) character */
+ /* FIXME? */
+ carried_over_ptr = cur_ptr;
+ carried_over_len = cur_len;
+ }
+ else
+ {
+ int i;
+
+ /* Remember the offset of the last character printed out of
+ REP so that we can carry the character over to the next
+ line. */
+ for (i = 0; pl_count < (win->width - 1);
+ pl_count++)
+ printed_line[pl_index++] = cur_ptr[i++];
+
+ carried_over_ptr = cur_ptr + i;
+ carried_over_len = cur_len;
+ }
+
+ /* If printing the last character in this window couldn't
+ possibly cause the screen to scroll, place a backslash
+ in the rightmost column. */
+ if (1 + line_index + win->first_row < the_screen->height)
+ {
+ if (win->flags & W_NoWrap)
+ printed_line[pl_index++] = '$';
+ else
+ printed_line[pl_index++] = '\\';
+ pl_count++;
+ }
+ printed_line[pl_index] = '\0';
+ }
+
+ rc = fun (closure, line_index, mbi_cur_ptr (iter) - in_index,
+ printed_line, pl_index, pl_count);
+
+ ++line_index;
+
+ /* Reset all data to the start of the line. */
+ pl_index = 0;
+ pl_count = 0;
+ in_index = 0;
+
+ if (rc)
+ break;
+
+ /* If there are bytes carried over, stuff them
+ into the buffer now. */
+ if (carried_over_ptr)
+ {
+ for (; carried_over_len;
+ carried_over_len--, carried_over_ptr++, pl_index++)
+ printed_line[pl_index] = *carried_over_ptr;
+ pl_count += carried_over_count;
+ }
+
+ /* If this window has chosen not to wrap lines, skip to the end
+ of the physical line in the buffer, and start a new line here. */
+ if (pl_index && win->flags & W_NoWrap)
+ {
+ for (; mbi_avail (iter); mbi_advance (iter))
+ if (mb_len (mbi_cur (iter)) == 1
+ && *mbi_cur_ptr (iter) == '\n')
+ break;
+
+ pl_index = 0;
+ pl_count = 0;
+ in_index = 0;
+ printed_line[0] = 0;
+ }
+ }
+ }
+
+ if (pl_count)
+ fun (closure, line_index, mbi_cur_ptr (iter) - in_index,
+ printed_line, pl_index, pl_count);
+
+ free (printed_line);
+ return line_index;
+}
+
+void
+clean_manpage (char *manpage)
+{
+ mbi_iterator_t iter;
+ size_t len = strlen (manpage);
+ char *newpage = xmalloc (len + 1);
+ char *np = newpage;
+ int prev_len = 0;
+
+ for (mbi_init (iter, manpage, len);
+ mbi_avail (iter);
+ mbi_advance (iter))
+ {
+ const char *cur_ptr = mbi_cur_ptr (iter);
+ int cur_len = mb_len (mbi_cur (iter));
+
+ if (cur_len == 1)
+ {
+ if (*cur_ptr == '\b' || *cur_ptr == '\f')
+ {
+ if (np >= newpage + prev_len)
+ np -= prev_len;
+ }
+ else if (ansi_escape (iter, &cur_len))
+ {
+ memcpy (np, cur_ptr, cur_len);
+ np += cur_len;
+ ITER_SETBYTES (iter, cur_len);
+ }
+ else if (show_malformed_multibyte_p || mbi_cur (iter).wc_valid)
+ *np++ = *cur_ptr;
+ }
+ else
+ {
+ memcpy (np, cur_ptr, cur_len);
+ np += cur_len;
+ }
+ prev_len = cur_len;
+ }
+ *np = 0;
+
+ strcpy (manpage, newpage);
+ free (newpage);
+}
+
+static void
+line_map_init (LINE_MAP *map, NODE *node, int line)
+{
+ map->node = node;
+ map->nline = line;
+ map->used = 0;
+}
+
+static void
+line_map_add (LINE_MAP *map, long pos)
+{
+ if (map->used == map->size)
+ {
+ if (map->size == 0)
+ map->size = 80; /* Initial allocation */
+ map->map = x2nrealloc (map->map,
+ &map->size,
+ sizeof (map->map[0]));
+ }
+
+ map->map[map->used++] = pos;
+}
+
+/* Initialize (clear) WIN's line map. */
+void
+window_line_map_init (WINDOW *win)
+{
+ win->line_map.used = 0;
+}
+
+/* Scan the line number LINE in WIN. If PHYS is true, stop scanning at
+ the end of physical line, i.e. at the newline character. Otherwise,
+ stop it at the end of logical line.
+
+ If FUN is supplied, call it for each processed multibyte character.
+ Arguments of FUN are
+
+ closure - Function-specific data passed as 5th argument to
+ window_scan_line;
+ cpos - Current point value;
+ replen - Size of screen representation of this character, in
+ columns. This value may be 0 (for ANSI sequences and
+ info tags), or > 1 (for tabs).
+ */
+int
+window_scan_line (WINDOW *win, int line, int phys,
+ void (*fun) (void *closure, long cpos, int replen),
+ void *closure)
+{
+ mbi_iterator_t iter;
+ long cpos = win->line_starts[line] - win->node->contents;
+ int delim = 0;
+ char *endp;
+
+ if (!phys && line + 1 < win->line_count)
+ endp = win->line_starts[line + 1];
+ else
+ endp = win->node->contents + win->node->nodelen;
+
+ for (mbi_init (iter,
+ win->line_starts[line],
+ win->node->contents + win->node->nodelen -
+ win->line_starts[line]);
+ !delim && mbi_avail (iter);
+ mbi_advance (iter))
+ {
+ const char *cur_ptr = mbi_cur_ptr (iter);
+ int cur_len = mb_len (mbi_cur (iter));
+ int replen;
+
+ if (cur_ptr >= endp)
+ break;
+
+ if (mb_isprint (mbi_cur (iter)))
+ {
+ replen = 1;
+ }
+ else if (cur_len == 1)
+ {
+ if (*cur_ptr == '\r' || *cur_ptr == '\n')
+ {
+ replen = 1;
+ delim = 1;
+ }
+ else if (ansi_escape (iter, &cur_len))
+ {
+ ITER_SETBYTES (iter, cur_len);
+ replen = 0;
+ }
+ else if (info_tag (iter, 0, &cur_len))
+ {
+ ITER_SETBYTES (iter, cur_len);
+ cpos += cur_len;
+ replen = 0;
+ }
+ else
+ {
+ printed_representation (cur_ptr, cur_len,
+ win->line_map.used,
+ &replen);
+ }
+ }
+ else
+ {
+ /* FIXME: I'm not sure it's the best way to deal with unprintable
+ multibyte characters */
+ printed_representation (cur_ptr, cur_len, win->line_map.used,
+ &replen);
+ }
+
+ if (fun)
+ fun (closure, cpos, replen);
+ cpos += cur_len;
+ }
+ return cpos;
+}
+
+static void
+add_line_map (void *closure, long cpos, int replen)
+{
+ WINDOW *win = closure;
+
+ while (replen--)
+ line_map_add (&win->line_map, cpos);
+}
+
+/* Compute the line map for the current line in WIN. */
+void
+window_compute_line_map (WINDOW *win)
+{
+ int line = window_line_of_point (win);
+
+ if (win->line_map.node == win->node && win->line_map.nline == line
+ && win->line_map.used)
+ return;
+ line_map_init (&win->line_map, win->node, line);
+ if (win->node)
+ window_scan_line (win, line, 0, add_line_map, win);
+}
+
+/* Return offset of the end of current physical line.
+ */
+long
+window_end_of_line (WINDOW *win)
+{
+ int line = window_line_of_point (win);
+ if (win->node)
+ return window_scan_line (win, line, 1, NULL, NULL) - 1;
+ return 0;
+}
+
+/* Translate the value of POINT into a column number. If NP is given
+ store there the value of point corresponding to the beginning of a
+ multibyte character in this column.
+ */
+int
+window_point_to_column (WINDOW *win, long point, long *np)
+{
+ int i;
+
+ window_compute_line_map (win);
+ if (!win->line_map.map || point < win->line_map.map[0])
+ return 0;
+ for (i = 0; i < win->line_map.used; i++)
+ if (win->line_map.map[i] > point)
+ break;
+ if (np)
+ *np = win->line_map.map[i-1];
+ return i - 1;
+}
+
diff --git a/info/window.h b/info/window.h
new file mode 100644
index 0000000..648120d
--- /dev/null
+++ b/info/window.h
@@ -0,0 +1,270 @@
+/* window.h -- Structure and flags used in manipulating Info windows.
+ $Id: window.h,v 1.12 2008/09/13 10:02:01 gray Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+
+ Copyright (C) 1993, 1997, 2004, 2007 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 Brian Fox (bfox@ai.mit.edu). */
+
+#ifndef INFO_WINDOW_H
+#define INFO_WINDOW_H
+
+#include "infomap.h"
+#include "nodes.h"
+
+/* Smallest number of visible lines in a window. The actual height is
+ always one more than this number because each window has a modeline. */
+#define WINDOW_MIN_HEIGHT 2
+
+/* Smallest number of screen lines that can be used to fully present a
+ window. This number includes the modeline of the window. */
+#define WINDOW_MIN_SIZE (WINDOW_MIN_HEIGHT + 1)
+
+/* A line map structure keeps a table of point values corresponding to
+ column offsets within the current line. It is used to convert
+ point values into columns on screen and vice versa. */
+typedef struct line_map_struct
+{
+ NODE *node; /* Node to which this line pertains */
+ size_t nline; /* Line number for which the map is computed. */
+ size_t size; /* Number of elements map can accomodate */
+ size_t used; /* Number of used map slots */
+ long *map; /* The map itself */
+} LINE_MAP;
+
+/* The exact same elements are used within the WINDOW_STATE structure and a
+ subsection of the WINDOW structure. We could define a structure which
+ contains this elements, and include that structure in each of WINDOW_STATE
+ and WINDOW. But that would lead references in the code such as
+ window->state->node which we would like to avoid. Instead, we #define the
+ elements here, and simply include the define in both data structures. Thus,
+ if you need to change window state information, here is where you would
+ do it. NB> The last element does NOT end with a semi-colon. */
+#define WINDOW_STATE_DECL \
+ NODE *node; /* The node displayed in this window. */ \
+ int pagetop; /* LINE_STARTS[PAGETOP] is first line in WINDOW. */ \
+ long point /* Offset within NODE of the cursor position. */
+
+/* Structure which defines a window. Windows are doubly linked, next
+ and prev. The list of windows is kept on WINDOWS. The structure member
+ window->height is the total height of the window. The position location
+ (0, window->height + window->first_row) is the first character of this
+ windows modeline. The number of lines that can be displayed in a window
+ is equal to window->height - 1. */
+typedef struct window_struct
+{
+ struct window_struct *next; /* Next window in this chain. */
+ struct window_struct *prev; /* Previous window in this chain. */
+ int width; /* Width of this window. */
+ int height; /* Height of this window. */
+ int first_row; /* Offset of the first line in the_screen. */
+ int goal_column; /* The column we would like the cursor to appear in. */
+ Keymap keymap; /* Keymap used to read commands in this window. */
+ WINDOW_STATE_DECL; /* Node, pagetop and point. */
+ LINE_MAP line_map; /* Current line map */
+ char *modeline; /* Calculated text of the modeline for this window. */
+ char **line_starts; /* Array of printed line starts for this node. */
+ int line_count; /* Number of lines appearing in LINE_STARTS. */
+ int flags; /* See below for details. */
+} WINDOW;
+
+typedef struct {
+ WINDOW_STATE_DECL; /* What gets saved. */
+} WINDOW_STATE;
+
+/* Structure defining the current state of an incremental search. */
+typedef struct {
+ WINDOW_STATE_DECL; /* The node, pagetop and point. */
+ int search_index; /* Offset of the last char in the search string. */
+ int direction; /* The direction that this search is heading in. */
+ int failing; /* Whether or not this search failed. */
+} SEARCH_STATE;
+
+#define W_UpdateWindow 0x01 /* WINDOW needs updating. */
+#define W_WindowIsPerm 0x02 /* This WINDOW is a permanent object. */
+#define W_WindowVisible 0x04 /* This WINDOW is currently visible. */
+#define W_InhibitMode 0x08 /* This WINDOW has no modeline. */
+#define W_NoWrap 0x10 /* Lines do not wrap in this window. */
+#define W_InputWindow 0x20 /* Window accepts input. */
+#define W_TempWindow 0x40 /* Window is less important. */
+
+extern WINDOW *windows; /* List of visible Info windows. */
+extern WINDOW *active_window; /* The currently active window. */
+extern WINDOW *the_screen; /* The Info screen is just another window. */
+extern WINDOW *the_echo_area; /* THE_ECHO_AREA is a window in THE_SCREEN. */
+
+extern int show_malformed_multibyte_p; /* Show malformed multibyte sequences */
+
+/* Global variable control redisplay of scrolled windows. If non-zero, it
+ is the desired number of lines to scroll the window in order to make
+ point visible. A user might set this to 1 for smooth scrolling. If
+ set to zero, the line containing point is centered within the window. */
+extern int window_scroll_step;
+
+ /* Make the modeline member for WINDOW. */
+extern void window_make_modeline (WINDOW *window);
+
+/* Initalize the window system by creating THE_SCREEN and THE_ECHO_AREA.
+ Create the first window ever, and make it permanent.
+ You pass WIDTH and HEIGHT; the dimensions of the total screen size. */
+extern void window_initialize_windows (int width, int height);
+
+/* Make a new window showing NODE, and return that window structure.
+ The new window is made to be the active window. If NODE is passed
+ as NULL, then show the node showing in the active window. If the
+ window could not be made return a NULL pointer. The active window
+ is not changed.*/
+extern WINDOW *window_make_window (NODE *node);
+
+/* Delete WINDOW from the list of known windows. If this window was the
+ active window, make the next window in the chain be the active window,
+ or the previous window in the chain if there is no next window. */
+extern void window_delete_window (WINDOW *window);
+
+/* A function to call when the screen changes size, and some windows have
+ to get deleted. The function is called with the window to be deleted
+ as an argument, and it can't do anything about the window getting deleted;
+ it can only clean up dangling references to that window. */
+extern VFunction *window_deletion_notifier;
+
+/* Set WINDOW to display NODE. */
+extern void window_set_node_of_window (WINDOW *window, NODE *node);
+
+/* Tell the window system that the size of the screen has changed. This
+ causes lots of interesting things to happen. The permanent windows
+ are resized, as well as every visible window. You pass WIDTH and HEIGHT;
+ the dimensions of the total screen size. */
+extern void window_new_screen_size (int width, int height);
+
+/* Change the height of WINDOW by AMOUNT. This also automagically adjusts
+ the previous and next windows in the chain. If there is only one user
+ window, then no change takes place. */
+extern void window_change_window_height (WINDOW *window, int amount);
+
+/* Adjust the pagetop of WINDOW such that the cursor point will be visible. */
+extern void window_adjust_pagetop (WINDOW *window);
+
+/* Tile all of the windows currently displayed in the global variable
+ WINDOWS. If argument DO_INTERNALS is non-zero, tile windows displaying
+ internal nodes as well. */
+#define DONT_TILE_INTERNALS 0
+#define TILE_INTERNALS 1
+extern void window_tile_windows (int style);
+
+/* Toggle the state of line wrapping in WINDOW. This can do a bit of fancy
+ redisplay. */
+extern void window_toggle_wrap (WINDOW *window);
+
+/* For every window in CHAIN, set the flags member to have FLAG set. */
+extern void window_mark_chain (WINDOW *chain, int flag);
+
+/* For every window in CHAIN, clear the flags member of FLAG. */
+extern void window_unmark_chain (WINDOW *chain, int flag);
+
+/* Make WINDOW start displaying at PERCENT percentage of its node. */
+extern void window_goto_percentage (WINDOW *window, int percent);
+
+/* Build a new node which has FORMAT printed with ARG1 and ARG2 as the
+ contents. */
+extern NODE *build_message_node (const char *format, void *arg1, void *arg2);
+
+/* Useful functions can be called from outside of window.c. */
+extern void initialize_message_buffer (void);
+
+/* Print FORMAT with ARG1,2 to the end of the current message buffer. */
+extern void printf_to_message_buffer (const char *format, void *arg1, void *arg2,
+ void *arg3);
+
+/* Convert the contents of the message buffer to a node. */
+extern NODE *message_buffer_to_node (void);
+
+/* Return the length of the most recently printed line in message buffer. */
+extern int message_buffer_length_this_line (void);
+
+/* Pad STRING to COUNT characters by inserting blanks. */
+extern int pad_to (int count, char *string);
+
+/* Make a message appear in the echo area, built from FORMAT, ARG1 and ARG2.
+ The arguments are treated similar to printf () arguments, but not all of
+ printf () hair is present. The message appears immediately. If there was
+ already a message appearing in the echo area, it is removed. */
+extern void window_message_in_echo_area (const char *format, void *arg1, void *arg2);
+
+/* Place a temporary message in the echo area built from FORMAT, ARG1
+ and ARG2. The message appears immediately, but does not destroy
+ any existing message. A future call to unmessage_in_echo_area ()
+ restores the old contents. */
+extern void message_in_echo_area (const char *format, void *arg1, void *arg2);
+extern void unmessage_in_echo_area (void);
+
+/* Clear the echo area, removing any message that is already present.
+ The echo area is cleared immediately. */
+extern void window_clear_echo_area (void);
+
+/* Quickly guess the approximate number of lines to that NODE would
+ take to display. This really only counts carriage returns. */
+extern int window_physical_lines (NODE *node);
+
+/* Calculate a list of line starts for the node belonging to WINDOW. The line
+ starts are pointers to the actual text within WINDOW->NODE. */
+extern void calculate_line_starts (WINDOW *window);
+
+/* Given WINDOW, recalculate the line starts for the node it displays. */
+extern void recalculate_line_starts (WINDOW *window);
+
+/* Return the number of characters it takes to display CHARACTER on the
+ screen at HPOS. */
+extern int character_width (int character, int hpos);
+
+/* Return the number of characters it takes to display STRING on the
+ screen at HPOS. */
+extern int string_width (char *string, int hpos);
+
+/* Return the index of the line containing point. */
+extern int window_line_of_point (WINDOW *window);
+
+/* Get and return the goal column for this window. */
+extern int window_get_goal_column (WINDOW *window);
+
+/* Get and return the printed column offset of the cursor in this window. */
+extern int window_get_cursor_column (WINDOW *window);
+
+/* Get and Set the node, pagetop, and point of WINDOW. */
+extern void window_get_state (WINDOW *window, SEARCH_STATE *state);
+extern void window_set_state (WINDOW *window, SEARCH_STATE *state);
+
+/* Count the number of characters in current line of WIN that precede
+ the printed column offset of GOAL. */
+extern int window_chars_to_goal (WINDOW *win, int goal);
+
+extern size_t process_node_text
+ (WINDOW *win, char *start, int do_tags,
+ int (*fun) (void *, size_t, const char *, char *, size_t, size_t),
+ void *closure);
+
+void clean_manpage (char *manpage);
+
+extern void window_compute_line_map (WINDOW *win);
+
+int window_point_to_column (WINDOW *win, long point, long *np);
+
+void window_line_map_init (WINDOW *win);
+
+long window_end_of_line (WINDOW *win);
+
+#endif /* not INFO_WINDOW_H */
diff --git a/install-info/Makefile.am b/install-info/Makefile.am
new file mode 100644
index 0000000..d81a48b
--- /dev/null
+++ b/install-info/Makefile.am
@@ -0,0 +1,31 @@
+# $Id: Makefile.am,v 1.1 2008/01/02 01:36:16 karl Exp $
+# Makefile.am for texinfo/install-info.
+# Run automake in .. to produce Makefile.in from this.
+#
+# This file is free software; as a special exception the author 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.
+
+SUBDIRS = tests
+bin_PROGRAMS = ginstall-info
+
+# Use `ginstall-info' in the definition of PROGRAMS and in dependencies
+# because automake generates an install-info target in every Makefile
+# (this is easier than changing Automake.)
+ginstall_info_SOURCES = install-info.c
+
+# Transform `ginstall-info' to `install-info' before applying any
+# user-specified name transformations.
+transform = s/ginstall-info/install-info/; $(program_transform_name)
+
+localedir = $(datadir)/locale
+AM_CPPFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/gnulib/lib \
+ -I$(top_builddir)/gnulib/lib \
+ -DLOCALEDIR=\"$(localedir)\"
+LDADD = ../lib/libtxi.a $(top_builddir)/gnulib/lib/libgnu.a $(LIBINTL)
diff --git a/install-info/Makefile.in b/install-info/Makefile.in
new file mode 100644
index 0000000..7dc0f62
--- /dev/null
+++ b/install-info/Makefile.in
@@ -0,0 +1,816 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008 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@
+
+# $Id: Makefile.am,v 1.1 2008/01/02 01:36:16 karl Exp $
+# Makefile.am for texinfo/install-info.
+# Run automake in .. to produce Makefile.in from this.
+#
+# This file is free software; as a special exception the author 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@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@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)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = ginstall-info$(EXEEXT)
+subdir = install-info
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/gnulib/m4/alloca.m4 \
+ $(top_srcdir)/gnulib/m4/argz.m4 \
+ $(top_srcdir)/gnulib/m4/codeset.m4 \
+ $(top_srcdir)/gnulib/m4/eealloc.m4 \
+ $(top_srcdir)/gnulib/m4/environ.m4 \
+ $(top_srcdir)/gnulib/m4/error.m4 \
+ $(top_srcdir)/gnulib/m4/exitfail.m4 \
+ $(top_srcdir)/gnulib/m4/extensions.m4 \
+ $(top_srcdir)/gnulib/m4/getopt.m4 \
+ $(top_srcdir)/gnulib/m4/gettext.m4 \
+ $(top_srcdir)/gnulib/m4/gettimeofday.m4 \
+ $(top_srcdir)/gnulib/m4/glibc21.m4 \
+ $(top_srcdir)/gnulib/m4/gnulib-common.m4 \
+ $(top_srcdir)/gnulib/m4/gnulib-comp.m4 \
+ $(top_srcdir)/gnulib/m4/iconv.m4 \
+ $(top_srcdir)/gnulib/m4/include_next.m4 \
+ $(top_srcdir)/gnulib/m4/inline.m4 \
+ $(top_srcdir)/gnulib/m4/intlmacosx.m4 \
+ $(top_srcdir)/gnulib/m4/lib-ld.m4 \
+ $(top_srcdir)/gnulib/m4/lib-link.m4 \
+ $(top_srcdir)/gnulib/m4/lib-prefix.m4 \
+ $(top_srcdir)/gnulib/m4/localcharset.m4 \
+ $(top_srcdir)/gnulib/m4/longlong.m4 \
+ $(top_srcdir)/gnulib/m4/malloc.m4 \
+ $(top_srcdir)/gnulib/m4/malloca.m4 \
+ $(top_srcdir)/gnulib/m4/mbchar.m4 \
+ $(top_srcdir)/gnulib/m4/mbiter.m4 \
+ $(top_srcdir)/gnulib/m4/mbrtowc.m4 \
+ $(top_srcdir)/gnulib/m4/mbscasecmp.m4 \
+ $(top_srcdir)/gnulib/m4/mbschr.m4 \
+ $(top_srcdir)/gnulib/m4/mbslen.m4 \
+ $(top_srcdir)/gnulib/m4/mbsncasecmp.m4 \
+ $(top_srcdir)/gnulib/m4/mbsstr.m4 \
+ $(top_srcdir)/gnulib/m4/mbstate_t.m4 \
+ $(top_srcdir)/gnulib/m4/mbswidth.m4 \
+ $(top_srcdir)/gnulib/m4/memchr.m4 \
+ $(top_srcdir)/gnulib/m4/memcmp.m4 \
+ $(top_srcdir)/gnulib/m4/memcpy.m4 \
+ $(top_srcdir)/gnulib/m4/memmem.m4 \
+ $(top_srcdir)/gnulib/m4/memmove.m4 \
+ $(top_srcdir)/gnulib/m4/mempcpy.m4 \
+ $(top_srcdir)/gnulib/m4/mkstemp.m4 \
+ $(top_srcdir)/gnulib/m4/nls.m4 \
+ $(top_srcdir)/gnulib/m4/onceonly.m4 \
+ $(top_srcdir)/gnulib/m4/po.m4 \
+ $(top_srcdir)/gnulib/m4/progtest.m4 \
+ $(top_srcdir)/gnulib/m4/setenv.m4 \
+ $(top_srcdir)/gnulib/m4/stdbool.m4 \
+ $(top_srcdir)/gnulib/m4/stdint.m4 \
+ $(top_srcdir)/gnulib/m4/stdlib_h.m4 \
+ $(top_srcdir)/gnulib/m4/stpcpy.m4 \
+ $(top_srcdir)/gnulib/m4/strdup.m4 \
+ $(top_srcdir)/gnulib/m4/strerror.m4 \
+ $(top_srcdir)/gnulib/m4/string_h.m4 \
+ $(top_srcdir)/gnulib/m4/strndup.m4 \
+ $(top_srcdir)/gnulib/m4/strnlen.m4 \
+ $(top_srcdir)/gnulib/m4/sys_stat_h.m4 \
+ $(top_srcdir)/gnulib/m4/sys_time_h.m4 \
+ $(top_srcdir)/gnulib/m4/tempname.m4 \
+ $(top_srcdir)/gnulib/m4/unistd_h.m4 \
+ $(top_srcdir)/gnulib/m4/wchar.m4 \
+ $(top_srcdir)/gnulib/m4/wchar_t.m4 \
+ $(top_srcdir)/gnulib/m4/wctype.m4 \
+ $(top_srcdir)/gnulib/m4/wcwidth.m4 \
+ $(top_srcdir)/gnulib/m4/wint_t.m4 \
+ $(top_srcdir)/gnulib/m4/xalloc.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 =
+am__installdirs = "$(DESTDIR)$(bindir)"
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS)
+am_ginstall_info_OBJECTS = install-info.$(OBJEXT)
+ginstall_info_OBJECTS = $(am_ginstall_info_OBJECTS)
+ginstall_info_LDADD = $(LDADD)
+am__DEPENDENCIES_1 =
+ginstall_info_DEPENDENCIES = ../lib/libtxi.a \
+ $(top_builddir)/gnulib/lib/libgnu.a $(am__DEPENDENCIES_1)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(ginstall_info_SOURCES)
+DIST_SOURCES = $(ginstall_info_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-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 uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+# Transform `ginstall-info' to `install-info' before applying any
+# user-specified name transformations.
+transform = s/ginstall-info/install-info/; $(program_transform_name)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+ARGZ_H = @ARGZ_H@
+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@
+GETOPT_H = @GETOPT_H@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_DUP2 = @GNULIB_DUP2@
+GNULIB_ENVIRON = @GNULIB_ENVIRON@
+GNULIB_FCHDIR = @GNULIB_FCHDIR@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+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_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRSEP = @GNULIB_STRSEP@
+GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
+GNULIB_STRSTR = @GNULIB_STRSTR@
+GNULIB_STRTOD = @GNULIB_STRTOD@
+GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
+GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GREP = @GREP@
+HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR = @HAVE_DECL_STRERROR@
+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_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SETENV = @HAVE_SETENV@
+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_SLEEP = @HAVE_SLEEP@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRNDUP = @HAVE_STRNDUP@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNSETENV = @HAVE_UNSETENV@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE__BOOL = @HAVE__BOOL@
+HELP2MAN = @HELP2MAN@
+HEVEA = @HEVEA@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LDFLAGS = @LDFLAGS@
+LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@
+LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_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_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_FCHDIR = @REPLACE_FCHDIR@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+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@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYS_STAT_H = @SYS_STAT_H@
+SYS_TIME_H = @SYS_TIME_H@
+TERMLIBS = @TERMLIBS@
+TEX = @TEX@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+VOID_UNSETENV = @VOID_UNSETENV@
+WCHAR_H = @WCHAR_H@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WCTYPE_H = @WCTYPE_H@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+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@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_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@
+localedir = $(datadir)/locale
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+native_tools = @native_tools@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+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@
+SUBDIRS = tests
+
+# Use `ginstall-info' in the definition of PROGRAMS and in dependencies
+# because automake generates an install-info target in every Makefile
+# (this is easier than changing Automake.)
+ginstall_info_SOURCES = install-info.c
+AM_CPPFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/gnulib/lib \
+ -I$(top_builddir)/gnulib/lib \
+ -DLOCALEDIR=\"$(localedir)\"
+
+LDADD = ../lib/libtxi.a $(top_builddir)/gnulib/lib/libgnu.a $(LIBINTL)
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu install-info/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu install-info/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ if test -f $$p \
+ ; then \
+ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+ $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+ else :; fi; \
+ done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+ rm -f "$(DESTDIR)$(bindir)/$$f"; \
+ done
+
+clean-binPROGRAMS:
+ -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+ginstall-info$(EXEEXT): $(ginstall_info_OBJECTS) $(ginstall_info_DEPENDENCIES)
+ @rm -f ginstall-info$(EXEEXT)
+ $(LINK) $(ginstall_info_OBJECTS) $(ginstall_info_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/install-info.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(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.
+$(RECURSIVE_TARGETS):
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; 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; \
+ (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"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ 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 || \
+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+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 $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$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 \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ distdir=`$(am__cd) $(distdir) && pwd`; \
+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+ (cd $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$top_distdir" \
+ distdir="$$distdir/$$subdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(PROGRAMS)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(bindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+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:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+ install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-binPROGRAMS \
+ clean-generic ctags ctags-recursive distclean \
+ distclean-compile distclean-generic distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-binPROGRAMS 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-compile mostlyclean-generic pdf pdf-am \
+ ps ps-am tags tags-recursive uninstall uninstall-am \
+ uninstall-binPROGRAMS
+
+# 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/install-info/README b/install-info/README
new file mode 100644
index 0000000..1ad2119
--- /dev/null
+++ b/install-info/README
@@ -0,0 +1,15 @@
+$Id: README,v 1.1 2008/01/02 01:36:16 karl Exp $
+texinfo/install-info/README
+
+ Copyright (C) 2008 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.
+
+install-info updates the top-level dir file in the Info tree.
+(It does not actually install files into the Info directory, oddly enough.)
+
+Debian has a completely different implementation (in Perl) of
+install-info. This has been a point of great confusion. We are trying
+to reconcile the two. Bug reports and help are welcome, as always.
diff --git a/install-info/install-info.c b/install-info/install-info.c
new file mode 100644
index 0000000..d61697d
--- /dev/null
+++ b/install-info/install-info.c
@@ -0,0 +1,2685 @@
+/* install-info -- create Info directory entry(ies) for an Info file.
+ $Id: install-info.c,v 1.13 2008/05/18 16:54:02 karl Exp $
+
+ Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+ 2005, 2007, 2008 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 "system.h"
+#include <getopt.h>
+#include <regex.h>
+#include <argz.h>
+
+#define TAB_WIDTH 8
+
+static char *progname = "install-info";
+
+struct spec_entry;
+struct spec_section;
+
+struct line_data *findlines (char *data, int size, int *nlinesp);
+void insert_entry_here (struct spec_entry *entry, int line_number,
+ struct line_data *dir_lines, int n_entries);
+int compare_section_names (const void *s1, const void *s2);
+int compare_entries_text (const void *e1, const void *e2);
+
+/* Data structures. */
+
+
+/* Record info about a single line from a file as read into core. */
+struct line_data
+{
+ /* The start of the line. */
+ char *start;
+ /* The number of characters in the line,
+ excluding the terminating newline. */
+ int size;
+ /* Vector containing pointers to the entries to add before this line.
+ The vector is null-terminated. */
+ struct spec_entry **add_entries_before;
+ /* Vector containing pointers to the sections to add before this line.
+ The vector is not null-terminated. */
+ struct spec_section **add_sections_before;
+ /* The vector ADD_SECTIONS_BEFORE_HERE contains exactly this many
+ pointers to sections. */
+ int num_sections_to_add;
+ /* 1 means don't output this line. */
+ int delete;
+};
+
+
+/* This is used for a list of the specified menu section names
+ in which entries should be added. */
+struct spec_section
+{
+ struct spec_section *next;
+ char *name;
+ /* 1 means we have not yet found an existing section with this name
+ in the dir file--so we will need to add a new section. */
+ int missing;
+};
+
+
+/* This is used for a list of the entries specified to be added. */
+struct spec_entry
+{
+ struct spec_entry *next;
+ char *text;
+ size_t text_len;
+ /* A pointer to the list of sections to which this entry should be
+ added. */
+ struct spec_section *entry_sections;
+ /* A pointer to a section that is beyond the end of the chain whose
+ head is pointed to by entry_sections. */
+ struct spec_section *entry_sections_tail;
+ /* Non-zero means that the entry doesn't have a name specified. This
+ can only happen if a --description preceeds a --name option. */
+ int missing_name;
+ /* Non-zero means that the entry doesn't have a description. This
+ happens when a --name option is given prior to a --description
+ option. */
+ int missing_description;
+ /* Non-zero means that the entry doesn't have an Info file specified.
+ This means that the entry was taken from the command-line but it
+ only contains the name, and not the info file's basename, which
+ we get later on. This only happens on entries that originate
+ from --name options. */
+ int missing_basename;
+};
+
+
+/* This is used for a list of nodes found by parsing the dir file. */
+struct node
+{
+ struct node *next;
+ /* The node name. */
+ char *name;
+ /* The line number of the line where the node starts.
+ This is the line that contains control-underscore. */
+ int start_line;
+ /* The line number of the line where the node ends,
+ which is the end of the file or where the next line starts. */
+ int end_line;
+ /* Start of first line in this node's menu
+ (the line after the * Menu: line). */
+ char *menu_start;
+ /* The start of the chain of sections in this node's menu. */
+ struct menu_section *sections;
+ /* The last menu section in the chain. */
+ struct menu_section *last_section;
+};
+
+
+/* This is used for a list of sections found in a node's menu.
+ Each struct node has such a list in the sections field. */
+struct menu_section
+{
+ struct menu_section *next;
+ char *name;
+ /* Line number of start of section. */
+ int start_line;
+ /* Line number of end of section. */
+ int end_line;
+};
+
+/* This table defines all the long-named options, says whether they
+ use an argument, and maps them into equivalent single-letter options. */
+
+struct option longopts[] =
+{
+ { "add-once", no_argument, NULL, '1'},
+ { "align", required_argument, NULL, 'A'},
+ { "append-new-sections", no_argument, NULL, 'a'},
+ { "calign", required_argument, NULL, 'C'},
+ { "debug", no_argument, NULL, 'g' },
+ { "delete", no_argument, NULL, 'r' },
+ { "dir-file", required_argument, NULL, 'd' },
+ { "entry", required_argument, NULL, 'e' },
+ { "name", required_argument, NULL, 't' },
+ { "menuentry", required_argument, NULL, 't' },
+ { "description", required_argument, NULL, 'c' },
+ { "help", no_argument, NULL, 'h' },
+ { "no-indent", no_argument, NULL, 'I' },
+ { "infodir", required_argument, NULL, 'D' },
+ { "info-dir", required_argument, NULL, 'D' },
+ { "info-file", required_argument, NULL, 'i' },
+ { "item", required_argument, NULL, 'e' },
+ { "keep-old", no_argument, NULL, 'k' },
+ { "maxwidth", required_argument, NULL, 'W'},
+ { "max-width", required_argument, NULL, 'W'},
+ { "quiet", no_argument, NULL, 'q' },
+ { "remove", no_argument, NULL, 'r' },
+ { "remove-exactly", no_argument, NULL, 'x' },
+ { "section", required_argument, NULL, 's' },
+ { "regex", required_argument, NULL, 'R' },
+ { "silent", no_argument, NULL, 'q' },
+ { "test", no_argument, NULL, 'n' },
+ { "dry-run", no_argument, NULL, 'n' },
+ { "version", no_argument, NULL, 'V' },
+ { 0 }
+};
+
+regex_t *psecreg = NULL;
+
+/* Nonzero means that the name specified for the Info file will be used
+ (without removing .gz, .info extension or leading path) to match the
+ entries that must be removed. */
+int remove_exactly = 0;
+
+/* Nonzero means that sections that don't have entries in them will be
+ deleted. */
+int remove_empty_sections = 1;
+
+/* Nonzero means that new Info entries into the DIR file will go into all
+ sections that match with --section-regex or --section. Zero means
+ that new entries wil go into the first section that matches.*/
+int add_entries_into_all_matching_sections = 1;
+
+/* Nonzero means we do not replace same-named info entries. */
+int keep_old_flag = 0;
+
+/* Nonzero means --test was specified, to inhibit updating the dir file. */
+int chicken_flag = 0;
+
+/* Zero means that entries will not be formatted when they are either
+ added or replaced. */
+int indent_flag = 1;
+
+/* Zero means that new sections will be added at the end of the DIR file. */
+int order_new_sections_alphabetically_flag = 1;
+
+
+/* Error message functions. */
+
+/* Print error message. S1 is printf control string, S2 and S3 args for it. */
+
+/* VARARGS1 */
+void
+error (const char *s1, const char *s2, const char *s3)
+{
+ fprintf (stderr, "%s: ", progname);
+ fprintf (stderr, s1, s2, s3);
+ putc ('\n', stderr);
+}
+
+/* VARARGS1 */
+void
+warning (const char *s1, const char *s2, const char *s3)
+{
+ fprintf (stderr, _("%s: warning: "), progname);
+ fprintf (stderr, s1, s2, s3);
+ putc ('\n', stderr);
+}
+
+/* Print error message and exit. */
+
+void
+fatal (const char *s1, const char *s2, const char *s3)
+{
+ error (s1, s2, s3);
+ xexit (1);
+}
+
+/* Return a newly-allocated string
+ whose contents concatenate those of S1, S2, S3. */
+char *
+concat (const char *s1, const char *s2, const char *s3)
+{
+ int len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3);
+ char *result = (char *) xmalloc (len1 + len2 + len3 + 1);
+
+ strcpy (result, s1);
+ strcpy (result + len1, s2);
+ strcpy (result + len1 + len2, s3);
+ *(result + len1 + len2 + len3) = 0;
+
+ return result;
+}
+
+/* Return a string containing SIZE characters
+ copied from starting at STRING. */
+
+char *
+copy_string (const char *string, int size)
+{
+ int i;
+ char *copy = (char *) xmalloc (size + 1);
+ for (i = 0; i < size; i++)
+ copy[i] = string[i];
+ copy[size] = 0;
+ return copy;
+}
+
+/* Print fatal error message based on errno, with file name NAME. */
+
+void
+pfatal_with_name (const char *name)
+{
+ char *s = concat ("", strerror (errno), _(" for %s"));
+ fatal (s, name, 0);
+}
+
+/* Compare the menu item names in LINE1 (line length LEN1)
+ and LINE2 (line length LEN2). Return 1 if the item name
+ in LINE1 is less, 0 otherwise. */
+
+static int
+menu_line_lessp (char *line1, int len1, char *line2, int len2)
+{
+ int minlen = (len1 < len2 ? len1 : len2);
+ int i;
+
+ for (i = 0; i < minlen; i++)
+ {
+ /* If one item name is a prefix of the other,
+ the former one is less. */
+ if (line1[i] == ':' && line2[i] != ':')
+ return 1;
+ if (line2[i] == ':' && line1[i] != ':')
+ return 0;
+ /* If they both continue and differ, one is less. */
+ if (line1[i] < line2[i])
+ return 1;
+ if (line1[i] > line2[i])
+ return 0;
+ }
+ /* With a properly formatted dir file,
+ we can only get here if the item names are equal. */
+ return 0;
+}
+
+/* Compare the menu item names in LINE1 (line length LEN1)
+ and LINE2 (line length LEN2). Return 1 if the item names are equal,
+ 0 otherwise. */
+
+static int
+menu_line_equal (char *line1, int len1, char *line2, int len2)
+{
+ int minlen = (len1 < len2 ? len1 : len2);
+ int i;
+
+ for (i = 0; i < minlen; i++)
+ {
+ /* If both item names end here, they are equal. */
+ if (line1[i] == ':' && line2[i] == ':')
+ return 1;
+ /* If they both continue and differ, one is less. */
+ if (line1[i] != line2[i])
+ return 0;
+ }
+ /* With a properly formatted dir file,
+ we can only get here if the item names are equal. */
+ return 1;
+}
+
+
+/* Given the full text of a menu entry, null terminated,
+ return just the menu item name (copied). */
+
+char *
+extract_menu_item_name (char *item_text)
+{
+ char *p;
+
+ if (*item_text == '*')
+ item_text++;
+ while (*item_text == ' ')
+ item_text++;
+
+ p = item_text;
+ while (*p && *p != ':') p++;
+ return copy_string (item_text, p - item_text);
+}
+
+/* Given the full text of a menu entry, terminated by null or newline,
+ return just the menu item file (copied). */
+
+char *
+extract_menu_file_name (char *item_text)
+{
+ char *p = item_text;
+
+ /* If we have text that looks like * ITEM: (FILE)NODE...,
+ extract just FILE. Otherwise return "(none)". */
+
+ if (*p == '*')
+ p++;
+ while (*p == ' ')
+ p++;
+
+ /* Skip to and past the colon. */
+ while (*p && *p != '\n' && *p != ':') p++;
+ if (*p == ':') p++;
+
+ /* Skip past the open-paren. */
+ while (1)
+ {
+ if (*p == '(')
+ break;
+ else if (*p == ' ' || *p == '\t')
+ p++;
+ else
+ return "(none)";
+ }
+ p++;
+
+ item_text = p;
+
+ /* File name ends just before the close-paren. */
+ while (*p && *p != '\n' && *p != ')') p++;
+ if (*p != ')')
+ return "(none)";
+
+ return copy_string (item_text, p - item_text);
+}
+
+
+
+/* Return FNAME with any [.info][.gz] suffix removed. */
+
+static char *
+strip_info_suffix (char *fname)
+{
+ char *ret = xstrdup (fname);
+ unsigned len = strlen (ret);
+
+ if (len > 3 && FILENAME_CMP (ret + len - 3, ".gz") == 0)
+ {
+ len -= 3;
+ ret[len] = 0;
+ }
+ else if (len > 4 && FILENAME_CMP (ret + len - 4, ".bz2") == 0)
+ {
+ len -= 4;
+ ret[len] = 0;
+ }
+ else if (len > 5 && FILENAME_CMP (ret + len - 5, ".lzma") == 0)
+ {
+ len -= 5;
+ ret[len] =0;
+ }
+
+ if (len > 5 && FILENAME_CMP (ret + len - 5, ".info") == 0)
+ {
+ len -= 5;
+ ret[len] = 0;
+ }
+ else if (len > 4 && FILENAME_CMP (ret + len - 4, ".inf") == 0)
+ {
+ len -= 4;
+ ret[len] = 0;
+ }
+#ifdef __MSDOS__
+ else if (len > 4 && (FILENAME_CMP (ret + len - 4, ".inz") == 0
+ || FILENAME_CMP (ret + len - 4, ".igz") == 0))
+ {
+ len -= 4;
+ ret[len] = 0;
+ }
+#endif /* __MSDOS__ */
+
+ return ret;
+}
+
+
+/* Return true if ITEM matches NAME and is followed by TERM_CHAR. ITEM
+ can also be followed by `.gz', `.info.gz', or `.info' (and then
+ TERM_CHAR) and still match. */
+
+static int
+menu_item_equal (const char *item, char term_char, const char *name)
+{
+ int ret;
+ const char *item_basename = item;
+ unsigned name_len = strlen (name);
+
+ /* We must compare the basename in ITEM, since we are passed the
+ basename of the original info file. Otherwise, a new entry like
+ "lilypond/lilypond" won't match "lilypond".
+
+ Actually, it seems to me that we should really compare the whole
+ name, and not just the basename. Couldn't there be dir1/foo.info
+ and dir2/foo.info? Also, it seems like we should be using the
+ filename from the new dir entries, not the filename on the command
+ line. Not worrying about those things right now, though. --karl,
+ 26mar04. */
+ if (!remove_exactly) {
+ while (*item_basename && !IS_SLASH (*item_basename)
+ && *item_basename != term_char)
+ item_basename++;
+ if (! *item_basename || *item_basename == term_char)
+ item_basename = item; /* no /, use original */
+ else
+ item_basename++; /* have /, move past it */
+ }
+
+ /* First, ITEM must actually match NAME (usually it won't). */
+ ret = mbsncasecmp (item_basename, name, name_len) == 0;
+ if (ret)
+ {
+ /* Then, `foobar' doesn't match `foo', so be sure we've got all of
+ ITEM. The various suffixes should never actually appear in the
+ dir file, but sometimes people put them in. */
+ static char *suffixes[]
+ = { "", ".info.gz", ".info", ".inf", ".gz",
+#ifdef __MSDOS__
+ ".inz", ".igz",
+#endif
+ NULL };
+ unsigned i;
+ ret = 0;
+ for (i = 0; !ret && suffixes[i]; i++)
+ {
+ char *suffix = suffixes[i];
+ unsigned suffix_len = strlen (suffix);
+ ret = mbsncasecmp (item_basename + name_len, suffix, suffix_len) == 0
+ && item_basename[name_len + suffix_len] == term_char;
+ }
+ }
+
+ return ret;
+}
+
+
+
+void
+suggest_asking_for_help (void)
+{
+ fprintf (stderr, _("\tTry `%s --help' for a complete list of options.\n"),
+ progname);
+ xexit (1);
+}
+
+void
+print_help (void)
+{
+ printf (_("Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"), progname);
+ puts ("");
+ puts (_("Add or remove entries in INFO-FILE from the Info directory DIR-FILE."));
+ puts ("");
+
+ puts (_("\
+Options:\n\
+ --debug report what is being done.\n\
+ --delete delete existing entries for INFO-FILE from DIR-FILE;\n\
+ don't insert any new entries.\n\
+ --description=TEXT the description of the entry is TEXT; used with\n\
+ the --name option to become synonymous with the\n\
+ --entry option.\n\
+ --dir-file=NAME specify file name of Info directory file;\n\
+ equivalent to using the DIR-FILE argument.\n\
+ --dry-run same as --test."));
+
+ puts (_("\
+ --entry=TEXT insert TEXT as an Info directory entry.\n\
+ TEXT is written as an Info menu item line followed\n\
+ by zero or more extra lines starting with whitespace.\n\
+ If you specify more than one entry, all are added.\n\
+ If you don't specify any entries, they are determined\n\
+ from information in the Info file itself.\n\
+ When removing, TEXT specifies the entry to remove.\n\
+ TEXT is only removed as a last resort, if the\n\
+ entry as determined from the Info file is not present,\n\
+ and the basename of the Info file isn't found either."));
+
+ puts (_("\
+ --help display this help and exit.\n\
+ --info-dir=DIR same as --dir-file=DIR/dir.\n\
+ --info-file=FILE specify Info file to install in the directory;\n\
+ equivalent to using the INFO-FILE argument.\n\
+ --item=TEXT same as --entry=TEXT.\n\
+ --keep-old do not replace entries, or remove empty sections.\n\
+ --menuentry=TEXT same as --name=TEXT.\n\
+ --name=TEXT the name of the entry is TEXT; used with --description\n\
+ to become synonymous with the --entry option.\n\
+ --no-indent do not format new entries in the DIR file.\n\
+ --quiet suppress warnings."));
+
+ puts (_("\
+ --regex=R put this file's entries in all sections that match the\n\
+ regular expression R (ignoring case).\n\
+ --remove same as --delete.\n\
+ --remove-exactly only remove if the info file name matches exactly;\n\
+ suffixes such as .info and .gz are not ignored.\n\
+ --section=SEC put entries in section SEC of the directory.\n\
+ If you specify more than one section, all the entries\n\
+ are added in each of the sections.\n\
+ If you don't specify any sections, they are determined\n\
+ from information in the Info file itself.\n\
+ --section R SEC equivalent to --regex=R --section=SEC --add-once."));
+
+ puts (_("\
+ --silent suppress warnings.\n\
+ --test suppress updating of DIR-FILE.\n\
+ --version display version information and exit."));
+
+ puts ("");
+
+ puts (_("\
+Email bug reports to bug-texinfo@gnu.org,\n\
+general questions and discussion to help-texinfo@gnu.org.\n\
+Texinfo home page: http://www.gnu.org/software/texinfo/"));
+}
+
+
+/* If DIRFILE does not exist, and we are not in test mode, create a
+ minimal one (or abort). If it already exists, do nothing. */
+
+static void
+ensure_dirfile_exists (char *dirfile)
+{
+ int desc;
+
+ if (chicken_flag)
+ return;
+
+ desc = open (dirfile, O_RDONLY);
+ if (desc < 0 && errno == ENOENT)
+ {
+ FILE *f;
+ char *readerr = strerror (errno);
+ close (desc);
+ f = fopen (dirfile, "w");
+ if (f)
+ {
+ fprintf (f, _("This is the file .../info/dir, which contains the\n\
+topmost node of the Info hierarchy, called (dir)Top.\n\
+The first time you invoke Info you start off looking at this node.\n\
+\x1f\n\
+%s\tThis is the top of the INFO tree\n\
+\n\
+ This (the Directory node) gives a menu of major topics.\n\
+ Typing \"q\" exits, \"?\" lists all Info commands, \"d\" returns here,\n\
+ \"h\" gives a primer for first-timers,\n\
+ \"mEmacs<Return>\" visits the Emacs manual, etc.\n\
+\n\
+ In Emacs, you can click mouse button 2 on a menu item or cross reference\n\
+ to select it.\n\
+\n\
+%s\n\
+"), "File: dir,\tNode: Top", /* These keywords must not be translated. */
+ "* Menu:"
+);
+ if (fclose (f) < 0)
+ pfatal_with_name (dirfile);
+ }
+ else
+ {
+ /* Didn't exist, but couldn't open for writing. */
+ fprintf (stderr,
+ _("%s: could not read (%s) and could not create (%s)\n"),
+ dirfile, readerr, strerror (errno));
+ xexit (1);
+ }
+ }
+ else
+ close (desc); /* It already existed, so fine. */
+}
+
+/* Open FILENAME and return the resulting stream pointer. If it doesn't
+ exist, try FILENAME.gz. If that doesn't exist either, call
+ CREATE_CALLBACK (with FILENAME as arg) to create it, if that is
+ non-NULL. If still no luck, fatal error.
+
+ If we do open it, return the actual name of the file opened in
+ OPENED_FILENAME and the compress program to use to (de)compress it in
+ COMPRESSION_PROGRAM. The compression program is determined by the
+ magic number, not the filename. */
+
+FILE *
+open_possibly_compressed_file (char *filename,
+ void (*create_callback) (char *),
+ char **opened_filename, char **compression_program, int *is_pipe)
+{
+ char *local_opened_filename, *local_compression_program;
+ int nread;
+ char data[13];
+ FILE *f;
+
+ /* We let them pass NULL if they don't want this info, but it's easier
+ to always determine it. */
+ if (!opened_filename)
+ opened_filename = &local_opened_filename;
+
+ *opened_filename = filename;
+ f = fopen (*opened_filename, FOPEN_RBIN);
+ if (!f)
+ {
+ *opened_filename = concat (filename, ".gz", "");
+ f = fopen (*opened_filename, FOPEN_RBIN);
+ if (!f)
+ {
+ free (*opened_filename);
+ *opened_filename = concat (filename, ".bz2", "");
+ f = fopen (*opened_filename, FOPEN_RBIN);
+ }
+ if (!f)
+ {
+ free (*opened_filename);
+ *opened_filename = concat (filename, ".lzma", "");
+ f = fopen (*opened_filename, FOPEN_RBIN);
+ }
+
+#ifdef __MSDOS__
+ if (!f)
+ {
+ free (*opened_filename);
+ *opened_filename = concat (filename, ".igz", "");
+ f = fopen (*opened_filename, FOPEN_RBIN);
+ }
+ if (!f)
+ {
+ free (*opened_filename);
+ *opened_filename = concat (filename, ".inz", "");
+ f = fopen (*opened_filename, FOPEN_RBIN);
+ }
+#endif
+ if (!f)
+ {
+ if (create_callback)
+ { /* That didn't work either. Create the file if we can. */
+ (*create_callback) (filename);
+
+ /* And try opening it again. */
+ free (*opened_filename);
+ *opened_filename = filename;
+ f = fopen (*opened_filename, FOPEN_RBIN);
+ if (!f)
+ pfatal_with_name (filename);
+ }
+ else
+ pfatal_with_name (filename);
+ }
+ }
+
+ /* Read first few bytes of file rather than relying on the filename.
+ If the file is shorter than this it can't be usable anyway. */
+ nread = fread (data, sizeof (data), 1, f);
+ if (nread != 1)
+ {
+ /* Empty files don't set errno, so we get something like
+ "install-info: No error for foo", which is confusing. */
+ if (nread == 0)
+ fatal (_("%s: empty file"), *opened_filename, 0);
+ pfatal_with_name (*opened_filename);
+ }
+
+ if (!compression_program)
+ compression_program = &local_compression_program;
+
+ if (data[0] == '\x1f' && data[1] == '\x8b')
+#if STRIP_DOT_EXE
+ /* An explicit .exe yields a better diagnostics from popen below
+ if they don't have gzip installed. */
+ *compression_program = "gzip.exe";
+#else
+ *compression_program = "gzip";
+#endif
+ else if (data[0] == 'B' && data[1] == 'Z' && data[2] == 'h')
+#ifndef STRIP_DOT_EXE
+ *compression_program = "bzip2.exe";
+#else
+ *compression_program = "bzip2";
+#endif
+ else if (data[0] == 'B' && data[1] == 'Z' && data[2] == '0')
+#ifndef STRIP_DOT_EXE
+ *compression_program = "bzip.exe";
+#else
+ *compression_program = "bzip";
+#endif
+ /* We (try to) match against old lzma format (which lacks proper
+ header, two first matches), as well as the new format (last match). */
+ else if ((data[9] == 0x00 && data[10] == 0x00 && data[11] == 0x00
+ && data[12] == 0x00)
+ || (data[5] == '\xFF' && data[6] == '\xFF' && data[7] == '\xFF'
+ && data[8] == '\xFF' && data[9] == '\xFF' && data[10] == '\xFF'
+ && data[11] == '\xFF' && data[12] == '\xFF')
+ || (data[0] == '\xFF' && data[1] == 'L' && data[2] == 'Z'
+ && data[3] == 'M' && data[4] == 'A' && data[5] == 0x00))
+#ifndef STRIP_DOT_EXE
+ *compression_program = "lzma.exe";
+#else
+ *compression_program = "lzma";
+#endif
+ else
+ *compression_program = NULL;
+
+ if (*compression_program)
+ { /* It's compressed, so fclose the file and then open a pipe. */
+ char *command = concat (*compression_program," -cd <", *opened_filename);
+ if (fclose (f) < 0)
+ pfatal_with_name (*opened_filename);
+ f = popen (command, "r");
+ if (f)
+ *is_pipe = 1;
+ else
+ pfatal_with_name (command);
+ }
+ else
+ { /* It's a plain file, seek back over the magic bytes. */
+ if (fseek (f, 0, 0) < 0)
+ pfatal_with_name (*opened_filename);
+#if O_BINARY
+ /* Since this is a text file, and we opened it in binary mode,
+ switch back to text mode. */
+ f = freopen (*opened_filename, "r", f);
+#endif
+ *is_pipe = 0;
+ }
+
+ return f;
+}
+
+/* Read all of file FILENAME into memory and return the address of the
+ data. Store the size of the data into SIZEP. If need be, uncompress
+ (i.e., try FILENAME.gz et al. if FILENAME does not exist) and store
+ the actual file name that was opened into OPENED_FILENAME (if it is
+ non-NULL), and the companion compression program (if any, else NULL)
+ into COMPRESSION_PROGRAM (if that is non-NULL). If trouble, do
+ a fatal error. */
+
+char *
+readfile (char *filename, int *sizep,
+ void (*create_callback) (char *), char **opened_filename,
+ char **compression_program)
+{
+ char *real_name;
+ FILE *f;
+ int pipe_p;
+ int filled = 0;
+ int data_size = 8192;
+ char *data = xmalloc (data_size);
+
+ /* If they passed the space for the file name to return, use it. */
+ f = open_possibly_compressed_file (filename, create_callback,
+ opened_filename ? opened_filename
+ : &real_name,
+ compression_program, &pipe_p);
+
+ for (;;)
+ {
+ int nread = fread (data + filled, 1, data_size - filled, f);
+ if (nread < 0)
+ pfatal_with_name (real_name);
+ if (nread == 0)
+ break;
+
+ filled += nread;
+ if (filled == data_size)
+ {
+ data_size += 65536;
+ data = xrealloc (data, data_size);
+ }
+ }
+
+ /* We'll end up wasting space if we're not passing the filename back
+ and it is not just FILENAME, but so what. */
+ /* We need to close the stream, since on some systems the pipe created
+ by popen is simulated by a temporary file which only gets removed
+ inside pclose. */
+ if (pipe_p)
+ pclose (f);
+ else
+ fclose (f);
+
+ *sizep = filled;
+ return data;
+}
+
+/* Output the old dir file, interpolating the new sections
+ and/or new entries where appropriate. If COMPRESSION_PROGRAM is not
+ null, pipe to it to create DIRFILE. Thus if we read dir.gz on input,
+ we'll write dir.gz on output. */
+
+static void
+output_dirfile (char *dirfile, int dir_nlines, struct line_data *dir_lines,
+ int n_entries_to_add, struct spec_entry *entries_to_add,
+ struct spec_section *input_sections, char *compression_program)
+{
+ int n_entries_added = 0;
+ int i;
+ FILE *output;
+
+ if (compression_program)
+ {
+ char *command = concat (compression_program, ">", dirfile);
+ output = popen (command, "w");
+ }
+ else
+ output = fopen (dirfile, "w");
+
+ if (!output)
+ {
+ perror (dirfile);
+ xexit (1);
+ }
+
+ for (i = 0; i <= dir_nlines; i++)
+ {
+ int j;
+
+ /* If we decided to output some new entries before this line,
+ output them now. */
+ if (dir_lines[i].add_entries_before)
+ for (j = 0; j < n_entries_to_add; j++)
+ {
+ struct spec_entry *this = dir_lines[i].add_entries_before[j];
+ if (this == 0)
+ break;
+ if (n_entries_added >= 1 &&
+ !add_entries_into_all_matching_sections)
+ break;
+ fputs (this->text, output);
+ n_entries_added++;
+ }
+ /* If we decided to add some sections here
+ because there are no such sections in the file,
+ output them now.
+ FIXME: we add all sections here, but they should
+ be interspersed throughout the DIR file in
+ alphabetic order. */
+ if (dir_lines[i].add_sections_before)
+ {
+ struct spec_section *spec;
+ struct spec_entry *entry;
+ struct spec_entry **entries;
+ int n_entries = 0;
+
+ /* If we specified --add-once, and we've added an entry, then
+ it's time to bail. */
+ if (n_entries_added >= 1 &&
+ !add_entries_into_all_matching_sections)
+ break;
+
+ qsort (dir_lines[i].add_sections_before,
+ dir_lines[i].num_sections_to_add,
+ sizeof (struct spec_section *), compare_section_names);
+
+ /* Count the entries and allocate a vector for all of them. */
+ for (entry = entries_to_add; entry; entry = entry->next)
+ n_entries++;
+ entries = ((struct spec_entry **)
+ xmalloc (n_entries * sizeof (struct spec_entry *)));
+
+ /* Fill the vector ENTRIES with pointers to all the sections,
+ and sort them. */
+ j = 0;
+ for (entry = entries_to_add; entry; entry = entry->next)
+ entries[j++] = entry;
+ qsort (entries, n_entries, sizeof (struct spec_entry *),
+ compare_entries_text);
+
+ /* Generate the new sections in alphabetical order. In each
+ new section, output all of the entries that belong to that
+ section, in alphabetical order. */
+ for (j = 0; j < dir_lines[i].num_sections_to_add; j++)
+ {
+ spec = dir_lines[i].add_sections_before[j];
+ if (spec->missing)
+ {
+ int k;
+
+ putc ('\n', output);
+ fputs (spec->name, output);
+ putc ('\n', output);
+ spec->missing = 0;
+ for (k = 0; k < n_entries; k++)
+ {
+ struct spec_section *spec1;
+ /* Did they at all want this entry to be put into
+ this section? */
+ entry = entries[k];
+ for (spec1 = entry->entry_sections;
+ spec1 && spec1 != entry->entry_sections_tail;
+ spec1 = spec1->next)
+ {
+ if (!strcmp (spec1->name, spec->name))
+ break;
+ }
+ if (spec1 && spec1 != entry->entry_sections_tail)
+ fputs (entry->text, output);
+ }
+ }
+ }
+
+ n_entries_added++;
+ free (entries);
+ }
+
+ /* Output the original dir lines unless marked for deletion. */
+ if (i < dir_nlines && !dir_lines[i].delete)
+ {
+ fwrite (dir_lines[i].start, 1, dir_lines[i].size, output);
+ putc ('\n', output);
+ }
+ }
+
+ /* Some systems, such as MS-DOS, simulate pipes with temporary files.
+ On those systems, the compressor actually gets run inside pclose,
+ so we must call pclose. */
+ if (compression_program)
+ pclose (output);
+ else
+ fclose (output);
+}
+
+/* Parse the input to find the section names and the entry names it
+ specifies. Return the number of entries to add from this file. */
+int
+parse_input (const struct line_data *lines, int nlines,
+ struct spec_section **sections, struct spec_entry **entries,
+ int delete_flag)
+{
+ int n_entries = 0;
+ int prefix_length = strlen ("INFO-DIR-SECTION ");
+ struct spec_section *head = *sections, *tail = NULL;
+ int reset_tail = 0;
+ char *start_of_this_entry = 0;
+ int ignore_sections = *sections != 0;
+ int ignore_entries = delete_flag ? 0: *entries != 0;
+
+ int i;
+
+ if (ignore_sections && ignore_entries)
+ return 0;
+
+ /* Loop here processing lines from the input file. Each
+ INFO-DIR-SECTION entry is added to the SECTIONS linked list.
+ Each START-INFO-DIR-ENTRY block is added to the ENTRIES linked
+ list, and all its entries inherit the chain of SECTION entries
+ defined by the last group of INFO-DIR-SECTION entries we have
+ seen until that point. */
+ for (i = 0; i < nlines; i++)
+ {
+ if (!ignore_sections
+ && !strncmp ("INFO-DIR-SECTION ", lines[i].start, prefix_length))
+ {
+ struct spec_section *next
+ = (struct spec_section *) xmalloc (sizeof (struct spec_section));
+ next->name = copy_string (lines[i].start + prefix_length,
+ lines[i].size - prefix_length);
+ next->next = *sections;
+ next->missing = 1;
+ if (reset_tail)
+ {
+ tail = *sections;
+ reset_tail = 0;
+ }
+ *sections = next;
+ head = *sections;
+ }
+ /* If entries were specified explicitly with command options,
+ ignore the entries in the input file. */
+ else if (!ignore_entries)
+ {
+ if (!strncmp ("START-INFO-DIR-ENTRY", lines[i].start, lines[i].size)
+ && sizeof ("START-INFO-DIR-ENTRY") - 1 == lines[i].size)
+ {
+ if (!*sections)
+ {
+ /* We found an entry, but didn't yet see any sections
+ specified. Default to section "Miscellaneous". */
+ *sections = (struct spec_section *)
+ xmalloc (sizeof (struct spec_section));
+ (*sections)->name = "Miscellaneous";
+ (*sections)->next = 0;
+ (*sections)->missing = 1;
+ head = *sections;
+ }
+ /* Next time we see INFO-DIR-SECTION, we will reset the
+ tail pointer. */
+ reset_tail = 1;
+
+ if (start_of_this_entry != 0)
+ fatal (_("START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"), 0, 0);
+ start_of_this_entry = lines[i + 1].start;
+ }
+ else if (start_of_this_entry)
+ {
+ if ((!strncmp ("* ", lines[i].start, 2)
+ && lines[i].start > start_of_this_entry)
+ || (!strncmp ("END-INFO-DIR-ENTRY",
+ lines[i].start, lines[i].size)
+ && sizeof ("END-INFO-DIR-ENTRY") - 1 == lines[i].size))
+ {
+ /* We found an end of this entry. Allocate another
+ entry, fill its data, and add it to the linked
+ list. */
+ struct spec_entry *next
+ = (struct spec_entry *) xmalloc (sizeof (struct spec_entry));
+ next->text
+ = copy_string (start_of_this_entry,
+ lines[i].start - start_of_this_entry);
+ next->text_len = lines[i].start - start_of_this_entry;
+ next->entry_sections = head;
+ next->entry_sections_tail = tail;
+ next->next = *entries;
+ *entries = next;
+ n_entries++;
+ if (!strncmp ("END-INFO-DIR-ENTRY",
+ lines[i].start, lines[i].size)
+ && sizeof ("END-INFO-DIR-ENTRY") - 1 == lines[i].size)
+ start_of_this_entry = 0;
+ else
+ start_of_this_entry = lines[i].start;
+ }
+ else if (!strncmp ("END-INFO-DIR-ENTRY",
+ lines[i].start, lines[i].size)
+ && sizeof ("END-INFO-DIR-ENTRY") - 1 == lines[i].size)
+ fatal (_("END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"), 0, 0);
+ }
+ }
+ }
+ if (start_of_this_entry != 0)
+ fatal (_("START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"),
+ 0, 0);
+
+ /* If we ignored the INFO-DIR-ENTRY directives, we need now go back
+ and plug the names of all the sections we found into every
+ element of the ENTRIES list. */
+ if (ignore_entries && *entries)
+ {
+ struct spec_entry *entry;
+
+ for (entry = *entries; entry; entry = entry->next)
+ {
+ entry->entry_sections = head;
+ entry->entry_sections_tail = tail;
+ }
+ }
+
+ return n_entries;
+}
+
+
+/* Parse the dir file whose basename is BASE_NAME. Find all the
+ nodes, and their menus, and the sections of their menus. */
+static void
+parse_dir_file (struct line_data *lines, int nlines, struct node **nodes)
+{
+ int node_header_flag = 0;
+ int i;
+
+ *nodes = 0;
+ for (i = 0; i < nlines; i++)
+ {
+ /* Parse node header lines. */
+ if (node_header_flag)
+ {
+ int j, end;
+ for (j = 0; j < lines[i].size; j++)
+ /* Find the node name and store it in the `struct node'. */
+ if (!strncmp ("Node:", lines[i].start + j, 5))
+ {
+ char *line = lines[i].start;
+ /* Find the start of the node name. */
+ j += 5;
+ while (line[j] == ' ' || line[j] == '\t')
+ j++;
+ /* Find the end of the node name. */
+ end = j;
+ while (line[end] != 0 && line[end] != ',' && line[end] != '\n'
+ && line[end] != '\t')
+ end++;
+ (*nodes)->name = copy_string (line + j, end - j);
+ }
+ node_header_flag = 0;
+ }
+
+ /* Notice the start of a node. */
+ if (*lines[i].start == 037)
+ {
+ struct node *next = (struct node *) xmalloc (sizeof (struct node));
+
+ next->next = *nodes;
+ next->name = NULL;
+ next->start_line = i;
+ next->end_line = 0;
+ next->menu_start = NULL;
+ next->sections = NULL;
+ next->last_section = NULL;
+
+ if (*nodes != 0)
+ (*nodes)->end_line = i;
+ /* Fill in the end of the last menu section
+ of the previous node. */
+ if (*nodes != 0 && (*nodes)->last_section != 0)
+ (*nodes)->last_section->end_line = i;
+
+ *nodes = next;
+
+ /* The following line is the header of this node;
+ parse it. */
+ node_header_flag = 1;
+ }
+
+ /* Notice the lines that start menus. */
+ if (*nodes != 0 && !strncmp ("* Menu:", lines[i].start, 7))
+ (*nodes)->menu_start = lines[i + 1].start;
+
+ /* Notice sections in menus. */
+ if (*nodes != 0
+ && (*nodes)->menu_start != 0
+ && *lines[i].start != '\n'
+ && *lines[i].start != '*'
+ && *lines[i].start != ' '
+ && *lines[i].start != '\t')
+ {
+ /* Add this menu section to the node's list.
+ This list grows in forward order. */
+ struct menu_section *next
+ = (struct menu_section *) xmalloc (sizeof (struct menu_section));
+
+ next->start_line = i + 1;
+ next->next = 0;
+ next->end_line = 0;
+ next->name = copy_string (lines[i].start, lines[i].size);
+ if ((*nodes)->sections)
+ {
+ (*nodes)->last_section->next = next;
+ (*nodes)->last_section->end_line = i;
+ }
+ else
+ (*nodes)->sections = next;
+ (*nodes)->last_section = next;
+ }
+
+ }
+
+ /* Finish the info about the end of the last node. */
+ if (*nodes != 0)
+ {
+ (*nodes)->end_line = nlines;
+ if ((*nodes)->last_section != 0)
+ (*nodes)->last_section->end_line = nlines;
+ }
+}
+
+
+/* Iterate through NLINES LINES looking for an entry that has a name
+ that matches NAME. If such an entry is found, flag the entry for
+ deletion later on. */
+
+int
+mark_entry_for_deletion (struct line_data *lines, int nlines, char *name)
+{
+ int something_deleted = 0;
+ int i;
+ for (i = 0; i < nlines; i++)
+ {
+ /* Check for an existing entry that should be deleted.
+ Delete all entries which specify this file name. */
+ if (*lines[i].start == '*')
+ {
+ char *q;
+ char *p = lines[i].start;
+
+ p++; /* skip * */
+ while (*p == ' ') p++; /* ignore following spaces */
+ q = p; /* remember this, it's the beginning of the menu item. */
+
+ /* Read menu item. */
+ while (*p != 0 && *p != ':')
+ p++;
+ p++; /* skip : */
+
+ if (*p == ':')
+ { /* XEmacs-style entry, as in * Mew::Messaging. */
+ if (menu_item_equal (q, ':', name))
+ {
+ lines[i].delete = 1;
+ something_deleted = 1;
+ }
+ }
+ else
+ { /* Emacs-style entry, as in * Emacs: (emacs). */
+ while (*p == ' ') p++; /* skip spaces after : */
+ if (*p == '(') /* if at parenthesized (FILENAME) */
+ {
+ p++;
+ if (menu_item_equal (p, ')', name))
+ {
+ lines[i].delete = 1;
+ something_deleted = 1;
+ }
+ }
+ }
+ }
+
+ /* Treat lines that start with whitespace
+ as continuations; if we are deleting an entry,
+ delete all its continuations as well. */
+ else if (i > 0 && (*lines[i].start == ' ' || *lines[i].start == '\t'))
+ {
+ lines[i].delete = lines[i - 1].delete;
+ }
+ }
+ return something_deleted;
+}
+
+
+/* Assuming the current column is COLUMN, return the column that
+ printing C will move the cursor to.
+ The first column is 0.
+ This function is used to assist in indenting of entries. */
+
+static size_t
+adjust_column (size_t column, char c)
+{
+ if (c == '\b')
+ {
+ if (column > 0)
+ column--;
+ }
+ else if (c == '\r')
+ column = 0;
+ else if (c == '\t')
+ column += TAB_WIDTH - column % TAB_WIDTH;
+ else /* if (isprint (c)) */
+ column++;
+ return column;
+}
+
+/* Indent the Info entry's NAME and DESCRIPTION. Lines are wrapped at the
+ WIDTH column. The description on first line is indented at the CALIGN-th
+ column, and all subsequent lines are indented at the ALIGN-th column.
+ The resulting Info entry is put into OUTSTR.
+ NAME is of the form "* TEXT (TEXT)[:TEXT].".
+ */
+static int
+format_entry (char *name, size_t name_len, char *desc, size_t desc_len,
+ int calign, int align, size_t width,
+ char **outstr, size_t *outstr_len)
+{
+ int i, j;
+ char c;
+ size_t column = 0; /* Screen column where next char will go */
+ size_t offset_out = 0; /* Index in `line_out' for next char. */
+ static char *line_out = NULL;
+ static size_t allocated_out = 0;
+ int saved_errno;
+ if (!desc || !name)
+ return 1;
+
+ *outstr = malloc (width +
+ (((desc_len + width) / (width - align)) * width) * 2
+ * sizeof (char));
+ *outstr[0] = '\0';
+
+ strncat (*outstr, name, name_len);
+
+ column = name_len;
+
+ if (name_len > calign - 2)
+ {
+ /* Name is too long to have description on the same line. */
+ if (desc_len > 1)
+ {
+ strncat (*outstr, "\n", 1);
+ column = 0;
+ for (j = 0; j < calign - 1; j++)
+ {
+ column = adjust_column (column, ' ');
+ strncat (*outstr, " ", 1);
+ }
+ }
+ }
+ else
+ for (j = 0; j < calign - name_len - 1; j++)
+ {
+ if (desc_len <= 2)
+ break;
+ column = adjust_column (column, ' ');
+ strncat (*outstr, " ", 1);
+ }
+
+ for (i = 0; i < desc_len; i++)
+ {
+ if (desc_len <= 2)
+ break;
+ c = desc[i];
+ if (offset_out + 1 >= allocated_out)
+ {
+ allocated_out = offset_out + 1;
+ line_out = (char *) realloc ((void *)line_out, allocated_out);
+ }
+
+ if (c == '\n')
+ {
+ line_out[offset_out++] = c;
+ strncat (*outstr, line_out, offset_out);
+ column = offset_out = 0;
+ continue;
+ }
+
+ rescan:
+ column = adjust_column (column, c);
+
+ if (column > width)
+ {
+ /* This character would make the line too long.
+ Print the line plus a newline, and make this character
+ start the next line. */
+
+ int found_blank = 0;
+ size_t logical_end = offset_out;
+
+ /* Look for the last blank. */
+ while (logical_end)
+ {
+ --logical_end;
+ if (line_out[logical_end] == ' '
+ || line_out[logical_end] == '\t')
+ {
+ found_blank = 1;
+ break;
+ }
+ }
+
+ if (found_blank)
+ {
+ size_t i;
+
+ /* Found a blank. Don't output the part after it. */
+ logical_end++;
+ strncat (*outstr, line_out, logical_end);
+ strncat (*outstr, "\n", 1);
+ for (j = 0; j < align - 1; j++)
+ {
+ column = adjust_column (column, ' ');
+ strncat (*outstr, " ", 1);
+ }
+
+ /* Move the remainder to the beginning of the next
+ line.
+ The areas being copied here might overlap. */
+ memmove (line_out, line_out + logical_end,
+ offset_out - logical_end);
+ offset_out -= logical_end;
+ for (column = i = 0; i < offset_out; i++)
+ column = adjust_column (column, line_out[i]);
+ goto rescan;
+ }
+
+ if (offset_out == 0)
+ {
+ line_out[offset_out++] = c;
+ continue;
+ }
+
+ line_out[offset_out++] = '\n';
+ strncat (*outstr, line_out, offset_out);
+ column = offset_out = 0;
+ goto rescan;
+ }
+
+ line_out[offset_out++] = c;
+ }
+
+ saved_errno = errno;
+
+ if (desc_len <= 2)
+ strncat (*outstr, "\n", 1);
+
+ if (offset_out)
+ strncat (*outstr, line_out, offset_out);
+
+ *outstr_len = strlen (*outstr);
+ return 1;
+}
+
+
+/* Extract the NAME and DESCRIPTION from ENTRY. NAME and DESCRIPTION must be
+ free'd.
+ */
+static void
+split_entry (const char *entry, char **name, size_t *name_len,
+ char **description, size_t *description_len)
+{
+ char *endptr;
+
+ /* on the first line, the description starts after the first ". ";
+ that's a period and space -- our heuristic to handle item names like
+ "config.status", and node names like "config.status Invocation".
+ Also accept period-tab and period-newline. */
+ char *ptr = strchr (entry, '.');
+ while (ptr && ptr[1] != ' ' && ptr[1] != '\t' && ptr[1] != '\n') {
+ ptr = strchr (ptr + 1, '.');
+ }
+
+ /* Maybe there's no period, and no description */
+ if (!ptr)
+ {
+ size_t length = strlen (entry);
+ if (length == 0)
+ return;
+ *name = strdup (entry);
+ *name_len = length + 1;
+ return;
+ }
+
+ /* The name is everything up to and including the period. */
+ *name_len = (size_t) (ptr - entry + 1);
+ *name = xmalloc (*name_len + 1);
+ (*name)[0] = '\0';
+ strncat (*name, entry, *name_len);
+
+ ptr++;
+ *description = xmalloc (strlen (entry));
+ (*description)[0] = '\0';
+
+ while (ptr[0] != '\0')
+ {
+ /* Eat up the whitespace after the name, and at the start of a line. */
+ while (isspace(ptr[0]))
+ ptr++;
+
+ /* Okay, we're at the start of the description. */
+ if (ptr[0] == '\0')
+ continue;
+
+ /* See how far the description goes... */
+ endptr = strchr (ptr, '\n');
+ /* Either the description continues up to the next newline. */
+ if (endptr)
+ {
+ size_t length = (size_t) (endptr - ptr) / sizeof (char);
+ strncat (*description, ptr, length);
+ ptr = endptr;
+ /* First of all, we eat the newline here. But then what?
+ Sometimes the newline separates 2 sentences, so we
+ end up with the next word starting directly after the period,
+ instead of after the customary 2 spaces in english.
+ If the previous character was a `.', then we should add 2
+ spaces if there is anything on the next line.
+ if it's a comma, then we should put one space.
+ If it's neither, we just put a space.
+ If it's some other whitespace, we shouldn't do anything. */
+ ptr++;
+ if (length > 1 && strlen (ptr) > 0)
+ {
+ endptr--;
+ /* *ENDPTR is the 2nd last character */
+ if (*endptr == '.')
+ strncat (*description, " ", 2);
+ else if (!isspace (*endptr))
+ strncat (*description, " ", 1);
+ }
+ }
+ /* Or the description continues to the end of the string. */
+ else
+ {
+ /* Just show the rest when there's no newline. */
+ size_t length = strlen (ptr);
+ strncat (*description, ptr, length);
+ ptr += length;
+ }
+ }
+ /* Descriptions end in a new line. */
+ strncat (*description, "\n", 1);
+ *description_len = strlen (*description);
+}
+
+
+/* Indent all ENTRIES according to some formatting options.
+ CALIGN_CLI is the starting column for the first line of the description.
+ ALIGN_CLI is the starting column for all subsequent lines of the
+ description. MAXWIDTH_CLI is the number of columns in the line.
+ When CALIGN_CLI, ALIGN_CLI, or MAXWIDTH_CLI is -1, choose a sane default. */
+
+static void
+reformat_new_entries (struct spec_entry *entries, int calign_cli, int align_cli,
+ int maxwidth_cli)
+{
+ struct spec_entry *entry;
+ for (entry = entries; entry; entry = entry->next)
+ {
+ int calign = -1, align = -1, maxwidth = -1;
+ char *name = NULL, *desc = NULL;
+ size_t name_len = 0, desc_len = 0;
+ split_entry (entry->text, &name, &name_len, &desc, &desc_len);
+ free (entry->text);
+
+ /* Specify sane defaults if we need to */
+ if (calign_cli == -1 || align_cli == -1)
+ {
+ struct spec_section *section;
+ calign = calign_cli;
+ align = align_cli;
+ for (section = entry->entry_sections;
+ section && section != entry->entry_sections_tail;
+ section = section->next)
+ {
+ if (!strcmp (section->name, "Individual utilities"))
+ {
+ if (calign == -1)
+ calign = 48 + 1;
+ if (align == -1)
+ align = 50 + 1;
+ break;
+ }
+ }
+ if (calign == -1)
+ calign = 32 + 1;
+ if (align == -1)
+ align = 34 + 1;
+ }
+ else
+ {
+ calign = calign_cli;
+ align = align_cli;
+ }
+
+ if (maxwidth_cli == -1)
+ maxwidth = 79;
+
+ format_entry (name, name_len, desc, desc_len, calign, align,
+ maxwidth, &entry->text, &entry->text_len);
+ }
+}
+
+/* Insert NAME into every entry in ENTRIES that requires it.
+ NAME is the basename of the Info file being installed.
+ The idea here is that there was a --name on the command-line
+ and we need to put the basename in the empty parentheses. */
+void
+add_missing_basenames (struct spec_entry *entries, char *name)
+{
+ struct spec_entry *entry;
+ for (entry = entries; entry; entry = entry->next)
+ {
+ if (entry->missing_basename)
+ {
+ /* Insert NAME into the right place in ENTRY->TEXT. */
+ char *info, *rest, *text;
+ size_t name_len = strlen (name);
+ char *ptr = strstr (entry->text, ": (). ");
+ if (!ptr)
+ return;
+ ptr[0] = '\0';
+ rest = ptr += strlen (": (). ");
+
+ info = xmalloc (name_len + 7);
+ snprintf (info, name_len + 7, ": (%s). ", name);
+ text = concat (entry->text, info, rest);
+ free (info);
+ if (entry->text)
+ free (entry->text);
+ entry->text = text;
+ entry->text_len = strlen (entry->text);
+ entry->missing_name = 0;
+ entry->missing_basename = 0;
+ }
+ }
+}
+
+
+/* Add NAME to the start of any entry in ENTRIES that is missing a name
+ component. If NAME doesn't start with `*', it is formatted to look
+ like an Info entry. */
+void
+add_missing_names (struct spec_entry *entries, char *name)
+{
+ struct spec_entry *entry;
+ for (entry = entries; entry; entry = entry->next)
+ {
+ if (entry->missing_name)
+ {
+ char *text;
+ /* Prepend NAME onto ENTRY->TEXT. */
+ int add_nl = 1;
+ if (entry->text)
+ if (entry->text[entry->text_len - 1] == '\n')
+ add_nl = 0;
+
+ if (name[0] == '*')
+ text = concat (name, entry->text == NULL ? "" : entry->text,
+ add_nl ? "\n" : "");
+ else
+ {
+ size_t full_name_len = strlen (name) * 2 + 9;
+ char *full_name = xmalloc (full_name_len);
+ snprintf (full_name, full_name_len, "* %s: (%s).", name, name);
+ text = concat (full_name,
+ entry->text == NULL ? "" : entry->text,
+ add_nl ? "\n" : "");
+ free (full_name);
+ }
+ if (entry->text)
+ free (entry->text);
+ entry->text = text;
+ entry->text_len = strlen (entry->text);
+ entry->missing_name = 0;
+ entry->missing_basename = 0;
+ }
+ }
+}
+
+/* Append DESC to every entry in ENTRIES that needs it. */
+
+void
+add_missing_descriptions (struct spec_entry *entries, char *desc)
+{
+ struct spec_entry *entry;
+ for (entry = entries; entry; entry = entry->next)
+ {
+ if (entry->missing_description)
+ {
+ char *text;
+ int add_nl = 1;
+ if (strlen (desc) > 1)
+ if (desc[strlen (desc) - 1] == '\n')
+ add_nl = 0;
+ /* Append DESC onto ENTRY->TEXT. */
+ text = concat (entry->text == NULL ? "" : entry->text, desc,
+ add_nl ? "\n" : "");
+ if (entry->text)
+ free (entry->text);
+ entry->text = text;
+ entry->text_len = strlen (entry->text);
+ }
+ }
+}
+
+
+/* Detect old-style Debian `--section REGEX TITLE' semantics in ARGV.
+ When detected the options are munged to look like:
+ `--regex REGEX --section TITLE --add-once'
+ Return 1 if munging took place, return 0 if not.
+ Otherwise return a negative number if something went wrong.
+ NEW_ARGC, and NEW_ARGV are filled with the newly munged options
+ when munging took place.
+ */
+static int
+munge_old_style_debian_options (int argc, char **argv,
+ int *new_argc, char ***new_argv)
+{
+ char *opt = NULL;
+ int i, err;
+ char *argz = NULL;
+ size_t argz_len = 0;
+ const char *regex, *title;
+ int munge = 0;
+
+ /* Flip through the options to detect the old `--section REGEX TITLE'
+ syntax */
+ for (i = 0; i < argc; i++)
+ {
+ if (strcmp (argv[i], "--section") == 0)
+ {
+ FILE *fileptr;
+ /* Go forward one arg and obtain the REGEX. */
+ if (i + 1 < argc)
+ i++;
+ else
+ return -1;
+ regex = argv[i];
+ /* Go forward another arg and obtain the TITLE. */
+ if (i + 1 < argc)
+ i++;
+ else
+ return -1;
+ title = argv[i];
+ /* When the title starts with a `-' it's probably an option,
+ and not a title. */
+ if (title[0] == '-')
+ break;
+ /* When the title is a filename it's probably an Info file, or
+ a dir file, and not a title. */
+ fileptr = fopen (title, "r");
+ if (fileptr)
+ {
+ fclose (fileptr);
+ break;
+ }
+ /* Okay, it looks like we're using the old debian syntax
+ for --section. */
+ munge = 1;
+
+ /* Okay, we munge the options to look like this:
+ --regex=REGEX --section=TITLE --add-once */
+ opt = xmalloc (strlen (regex) + sizeof ("--regex="));
+ if (sprintf (opt, "--regex=%s", regex) == -1)
+ err = 1;
+ if (!err)
+ err = argz_add (&argz, &argz_len, opt);
+ free (opt); opt = NULL;
+
+ opt = xmalloc (strlen (regex) + sizeof ("--section="));
+ if (sprintf (opt, "--section=%s", title) == -1)
+ err = 1;
+ if (!err)
+ err = argz_add (&argz, &argz_len, opt);
+ free (opt); opt = NULL;
+
+ if (!err)
+ err = argz_add (&argz, &argz_len, "--add-once");
+ }
+ else
+ err = argz_add (&argz, &argz_len, argv[i]);
+ if (err)
+ return -1;
+ }
+
+ if (munge)
+ {
+ *new_argc = argz_count (argz, argz_len);
+ *new_argv = xmalloc ((*new_argc + 1) * sizeof (char *));
+
+ opt = NULL; i = 0;
+ while ((opt = argz_next (argz, argz_len, opt)))
+ {
+ (*new_argv)[i] = xstrdup (opt);
+ i++;
+ }
+ (*new_argv)[*new_argc] = NULL;
+ }
+ free (argz);
+ return munge;
+}
+
+
+int
+main (int argc, char *argv[])
+{
+ char *opened_dirfilename;
+ char *compression_program;
+ char *infile_sans_info;
+ char *infile = 0, *dirfile = 0;
+ int calign = -1;
+ int align = -1;
+ int maxwidth = -1;
+
+ /* Record the text of the Info file, as a sequence of characters
+ and as a sequence of lines. */
+ char *input_data = NULL;
+ int input_size = 0;
+ struct line_data *input_lines = NULL;
+ int input_nlines = 0;
+
+ /* Record here the specified section names and directory entries. */
+ struct spec_section *input_sections = NULL;
+ struct spec_entry *entries_to_add = NULL;
+ struct spec_entry *entries_to_add_from_file = NULL;
+ int n_entries_to_add = 0;
+
+ /* Record the old text of the dir file, as plain characters,
+ as lines, and as nodes. */
+ char *dir_data;
+ int dir_size;
+ int dir_nlines;
+ struct line_data *dir_lines;
+ struct node *dir_nodes;
+
+ /* Nonzero means --delete was specified (just delete existing entries). */
+ int delete_flag = 0;
+ int something_deleted = 0;
+
+ /* Nonzero means -quiet/--silent was specified. */
+ int quiet_flag = 0;
+
+ /* Nonzero means --debug was specified. */
+ int debug_flag = 0;
+
+ int i;
+
+#ifdef HAVE_SETLOCALE
+ /* Set locale via LC_ALL. */
+ setlocale (LC_ALL, "");
+#endif
+
+ /* Set the text message domain. */
+ bindtextdomain (PACKAGE, LOCALEDIR);
+ textdomain (PACKAGE);
+
+ munge_old_style_debian_options (argc, argv, &argc, &argv);
+
+ while (1)
+ {
+ int opt = getopt_long (argc, argv,
+ "i:d:e:s:t:E:c:C:W:A:hHrk1Ia", longopts, 0);
+
+ if (opt == EOF)
+ break;
+
+ switch (opt)
+ {
+ case 0:
+ /* If getopt returns 0, then it has already processed a
+ long-named option. We should do nothing. */
+ break;
+
+ case 1:
+ abort ();
+
+ case '1':
+ add_entries_into_all_matching_sections = 0;
+ break;
+
+ case 'a':
+ order_new_sections_alphabetically_flag = 0;
+ break;
+
+ case 'A':
+ {
+ char *end = NULL;
+ unsigned long int val;
+ val = strtoul (optarg, &end, 0);
+ if (end == NULL || end == optarg || *end != '\0')
+ suggest_asking_for_help ();
+ align = val;
+ if (align <= 0)
+ suggest_asking_for_help ();
+ }
+ break;
+
+ case 'c':
+
+ {
+ struct spec_entry *next;
+ size_t length = strlen (optarg);
+
+ if (!entries_to_add)
+ {
+ next =
+ (struct spec_entry *) xmalloc (sizeof (struct spec_entry));
+
+ next->text = NULL;
+ next->text_len = 0;
+ next->entry_sections = NULL;
+ next->entry_sections_tail = NULL;
+ next->missing_name = 1;
+ next->missing_basename = 1;
+ next->next = entries_to_add;
+ entries_to_add = next;
+ n_entries_to_add++;
+ }
+ else
+ next = entries_to_add;
+
+ next->missing_description = 0;
+ if (next->text)
+ {
+ char *nl = strrchr (next->text, '\n');
+ if (nl)
+ nl[0] = '\0';
+ }
+ /* Concat the description onto the current entry, adding a
+ newline if we need one. Prepend a space if we have no
+ previous text, since eventually we will be adding the
+ "* foo ()." and we want to end up with a ". " for parsing. */
+ next->text = concat (next->text ? next->text : " ",
+ optarg,
+ optarg[length - 1] == '\n' ? "" : "\n");
+ next->text_len = strlen (next->text);
+ }
+ break;
+
+ case 'C':
+ {
+ char *end = NULL;
+ unsigned long int val;
+ val = strtoul (optarg, &end, 0);
+ if (end == NULL || end == optarg || *end != '\0')
+ suggest_asking_for_help ();
+ calign = val;
+ if (calign <= 0)
+ suggest_asking_for_help ();
+ }
+ break;
+
+ case 'd':
+ if (dirfile)
+ {
+ fprintf (stderr, _("%s: already have dir file: %s\n"),
+ progname, dirfile);
+ suggest_asking_for_help ();
+ }
+ dirfile = optarg;
+ break;
+
+ case 'D':
+ if (dirfile)
+ {
+ fprintf (stderr, _("%s: already have dir file: %s\n"),
+ progname, dirfile);
+ suggest_asking_for_help ();
+ }
+ dirfile = concat (optarg, "", "/dir");
+ break;
+
+ case 't':
+ {
+ struct spec_entry *next
+ = (struct spec_entry *) xmalloc (sizeof (struct spec_entry));
+
+ size_t length;
+ if (optarg[0] != '*')
+ {
+ /* Make enough space for "* foo: (). ". */
+ length = strlen (optarg) + 9;
+ next->text = xmalloc (length);
+ snprintf (next->text, length, "* %s: (). ", optarg);
+ next->missing_basename = 1;
+ /* The basename will be inserted in between the parentheses
+ at a later time. See add_missing_basenames. */
+ }
+ else
+ {
+ /* Make enough space for "foo ". */
+ length = strlen (optarg) + 2;
+ next->text = xmalloc (length);
+ snprintf (next->text, length, "%s ", optarg);
+ next->missing_basename = 0;
+ /* FIXME: check for info entry correctness in TEXT.
+ e.g. `* Aaa: (bbb).' */
+ }
+
+ next->text_len = length - 1;
+ next->entry_sections = NULL;
+ next->entry_sections_tail = NULL;
+ next->next = entries_to_add;
+ next->missing_name = 0;
+ next->missing_description = 1;
+ entries_to_add = next;
+ n_entries_to_add++;
+ }
+ break;
+
+ case 'e':
+ {
+ struct spec_entry *next
+ = (struct spec_entry *) xmalloc (sizeof (struct spec_entry));
+ int olen = strlen (optarg);
+ if (! (*optarg != 0 && optarg[olen - 1] == '\n'))
+ {
+ optarg = concat (optarg, "\n", "");
+ olen++;
+ }
+ next->text = optarg;
+ next->text_len = olen;
+ next->entry_sections = NULL;
+ next->entry_sections_tail = NULL;
+ next->next = entries_to_add;
+ next->missing_name = 0;
+ next->missing_basename = 0;
+ next->missing_description = 0;
+ entries_to_add = next;
+ n_entries_to_add++;
+ }
+ break;
+
+ case 'g':
+ debug_flag = 1;
+ break;
+
+ case 'h':
+ case 'H':
+ print_help ();
+ xexit (0);
+
+ case 'i':
+ if (infile)
+ {
+ fprintf (stderr, _("%s: Specify the Info file only once.\n"),
+ progname);
+ suggest_asking_for_help ();
+ }
+ infile = optarg;
+ break;
+
+ case 'I':
+ indent_flag = 0;
+ break;
+
+ case 'k':
+ keep_old_flag = 1;
+ break;
+
+ case 'n':
+ chicken_flag = 1;
+ break;
+
+ case 'q':
+ quiet_flag = 1;
+ break;
+
+ case 'r':
+ delete_flag = 1;
+ break;
+
+ case 'R':
+ {
+ int error;
+ if (psecreg)
+ {
+ warning
+ (_("Extra regular expression specified, ignoring `%s'"),
+ optarg, 0);
+ break;
+ }
+ psecreg = (regex_t *) xmalloc (sizeof (regex_t));
+
+ error = regcomp (psecreg, optarg, REG_ICASE|REG_NOSUB);
+ if (error != 0)
+ {
+ int errbuf_size = regerror (error, psecreg, NULL, 0);
+ char *errbuf = (char *) xmalloc (errbuf_size);
+ regerror (error, psecreg, errbuf, errbuf_size);
+ fatal (_("Error in regular expression `%s': %s"),
+ optarg, errbuf);
+ };
+ }
+ break;
+
+ case 's':
+ {
+ struct spec_section *next
+ = (struct spec_section *) xmalloc (sizeof (struct spec_section));
+ next->name = optarg;
+ next->next = input_sections;
+ next->missing = 1;
+ input_sections = next;
+ }
+ break;
+
+ case 'V':
+ printf ("install-info (GNU %s) %s\n", PACKAGE, VERSION);
+ puts ("");
+ printf (_("Copyright (C) %s Free Software Foundation, Inc.\n\
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n\
+This is free software: you are free to change and redistribute it.\n\
+There is NO WARRANTY, to the extent permitted by law.\n"),
+ "2008");
+ xexit (0);
+
+ case 'W':
+ {
+ char *end = NULL;
+ unsigned long int val;
+ val = strtoul (optarg, &end, 0);
+ if (end == NULL || end == optarg || *end != '\0')
+ suggest_asking_for_help ();
+ maxwidth = val;
+ if (maxwidth <= 0)
+ suggest_asking_for_help ();
+ }
+ break;
+
+ case 'x':
+ delete_flag = 1;
+ remove_exactly = 1;
+ break;
+
+ default:
+ suggest_asking_for_help ();
+ }
+ }
+
+ /* Interpret the non-option arguments as file names. */
+ for (; optind < argc; ++optind)
+ {
+ if (infile == 0)
+ infile = argv[optind];
+ else if (dirfile == 0)
+ dirfile = argv[optind];
+ else
+ error (_("excess command line argument `%s'"), argv[optind], 0);
+ }
+
+ if (!infile)
+ fatal (_("No input file specified; try --help for more information."),
+ 0, 0);
+ if (!dirfile)
+ fatal (_("No dir file specified; try --help for more information."), 0, 0);
+
+ /* Now read in the Info dir file. */
+ if (debug_flag)
+ printf ("debug: reading dir file %s\n", dirfile);
+ dir_data = readfile (dirfile, &dir_size, ensure_dirfile_exists,
+ &opened_dirfilename, &compression_program);
+ dir_lines = findlines (dir_data, dir_size, &dir_nlines);
+
+ parse_dir_file (dir_lines, dir_nlines, &dir_nodes);
+
+ if (!delete_flag)
+ {
+ /* Find which sections match our regular expression. */
+ if (psecreg)
+ {
+ struct node *node;
+ struct menu_section *section;
+ for (node = dir_nodes; node ; node = node->next)
+ for (section = node->sections; section ; section = section->next)
+ if (regexec (psecreg, section->name, 0, NULL, 0) == 0)
+ {
+ /* we have a match! */
+ struct spec_section *next =
+ (struct spec_section *) xmalloc
+ (sizeof (struct spec_section));
+ next->name = section->name;
+ next->next = input_sections;
+ next->missing = 0;
+ input_sections = next;
+ }
+ }
+
+ }
+
+ /* We will be comparing the entries in the dir file against the
+ current filename, so need to strip off any directory prefix and/or
+ [.info][.gz] suffix. */
+ if (!remove_exactly) {
+ char *infile_basename = infile + strlen (infile);
+
+ if (HAVE_DRIVE (infile))
+ infile += 2; /* get past the drive spec X: */
+
+ while (infile_basename > infile && !IS_SLASH (infile_basename[-1]))
+ infile_basename--;
+
+ infile_sans_info = strip_info_suffix (infile_basename);
+ } else
+ infile_sans_info = xstrdup(infile);
+
+ /* Now Read the Info file and parse it into lines, unless we're
+ removing exactly. */
+ if (!remove_exactly)
+ {
+ if (debug_flag)
+ printf ("debug: reading input file %s\n", infile);
+ input_data = readfile (infile, &input_size, NULL, NULL, NULL);
+ input_lines = findlines (input_data, input_size, &input_nlines);
+ }
+
+ i = parse_input (input_lines, input_nlines,
+ &input_sections, &entries_to_add_from_file, delete_flag);
+ if (!delete_flag)
+ {
+ /* If there are no entries on the command-line at all, so we use the
+ entries found in the Info file itself (if any). */
+ if (entries_to_add == NULL)
+ {
+ entries_to_add = entries_to_add_from_file;
+ n_entries_to_add = i;
+ }
+ /* There are entries on the command-line, and they override the entries
+ found in the Info file. */
+ else if (entries_to_add)
+ {
+ if (entries_to_add_from_file == NULL)
+ {
+ /* No entries found in the file anyway. Fill in any
+ missing names with the info file's basename. We're out
+ of luck for any missing descriptions. */
+ add_missing_names (entries_to_add, infile_sans_info);
+ /* add_missing_descriptions (entries_to_add, "\n"); */
+ }
+ else
+ {
+ /* Fill in any missing names or descriptions with what was
+ found in the Info file. */
+ char *desc = NULL;
+ size_t desc_len = 0;
+ char *name = NULL;
+ size_t name_len = 0;
+ split_entry (entries_to_add_from_file->text, &name, &name_len,
+ &desc, &desc_len);
+ if (name)
+ {
+ /* If the name doesn't look right, bail and use the
+ name based on the Info file. */
+ if (name[0] != '*')
+ add_missing_names (entries_to_add, infile_sans_info);
+ else
+ add_missing_names (entries_to_add, name);
+ free (name);
+ }
+
+ if (desc)
+ {
+ add_missing_descriptions (entries_to_add, desc);
+ free (desc);
+ }
+ }
+ }
+
+ /* Lastly, fill in any missing basenames that might still be hanging
+ around from --name options on the command-line. */
+ add_missing_basenames (entries_to_add, infile_sans_info);
+
+ /* Reformat the new entries if we're doing that. */
+ if (indent_flag)
+ {
+ char *no_indent = getenv ("INSTALL_INFO_NO_INDENT");
+ if (!no_indent)
+ reformat_new_entries (entries_to_add, calign, align, maxwidth);
+ }
+
+ /* If we got no sections, default to "Miscellaneous". */
+ if (input_sections == NULL)
+ {
+ input_sections = (struct spec_section *)
+ xmalloc (sizeof (struct spec_section));
+ input_sections->name = "Miscellaneous";
+ input_sections->next = NULL;
+ input_sections->missing = 1;
+ }
+
+ if (entries_to_add == 0)
+ { /* No need to abort here, the original info file may not
+ have the requisite Texinfo commands. This is not
+ something an installer should have to correct (it's a
+ problem for the maintainer), and there's no need to cause
+ subsequent parts of `make install' to fail. */
+ if (!quiet_flag)
+ warning (_("no info dir entry in `%s'"), infile, 0);
+ xexit (0);
+ }
+
+ /* If the entries came from the command-line arguments, their
+ entry_sections pointers are not yet set. Walk the chain of
+ the entries and for each entry update entry_sections to point
+ to the head of the list of sections where this entry should
+ be put. Note that all the entries specified on the command
+ line get put into ALL the sections we've got, either from the
+ Info file, or (under --section) from the command line,
+ because in the loop below every entry inherits the entire
+ chain of sections. */
+ if (n_entries_to_add > 0 && entries_to_add->entry_sections == NULL)
+ {
+ struct spec_entry *ep;
+
+ for (ep = entries_to_add; ep; ep = ep->next)
+ ep->entry_sections = input_sections;
+ }
+ }
+
+ if (delete_flag)
+ {
+ something_deleted = mark_entry_for_deletion (dir_lines, dir_nlines,
+ infile_sans_info);
+ if (!something_deleted && !remove_exactly)
+ {
+ struct spec_entry *entry;
+ for (entry = entries_to_add; entry; entry = entry->next)
+ {
+ /* If the entry came from the info file... */
+ if (entry->entry_sections != NULL)
+ {
+ char *name = extract_menu_item_name (entry->text);
+ something_deleted =
+ mark_entry_for_deletion (dir_lines, dir_nlines, name);
+ free (name);
+ }
+ }
+
+ if (!something_deleted)
+ {
+ struct spec_entry *entry;
+ for (entry = entries_to_add; entry; entry = entry->next)
+ {
+ /* If the entry came from the command-line... */
+ if (entry->entry_sections == NULL)
+ something_deleted =
+ mark_entry_for_deletion (dir_lines, dir_nlines,
+ entry->text);
+ }
+ }
+ }
+ }
+
+ /* Check for sections with zero entries and mark them for deletion. */
+ if (delete_flag && something_deleted && !keep_old_flag)
+ {
+ struct node *node;
+ struct menu_section *section;
+ int section_empty;
+
+ for (node = dir_nodes; node ; node = node->next)
+ for (section = node->sections; section ; section = section->next)
+ {
+ section_empty = 1;
+ for (i = section->end_line; i > section->start_line; i--)
+ {
+ if (dir_lines[i - 1].delete == 0 &&
+ dir_lines[i - 1].size != 0)
+ {
+ section_empty = 0;
+ break;
+ }
+ }
+
+ if (section_empty)
+ {
+ /* This gets rid of any trailing empty lines at the end
+ of the section, and the title too. */
+ for (i = section->end_line; i >= section->start_line; i--)
+ dir_lines[i - 1].delete = 1;
+ }
+ }
+ }
+
+ /* Decide where to add the new entries (unless --delete was used).
+ Find the menu sections to add them in.
+ In each section, find the proper alphabetical place to add
+ each of the entries. */
+ if (!delete_flag)
+ {
+ struct node *node;
+ struct menu_section *section;
+ struct spec_section *spec;
+
+ for (node = dir_nodes; node; node = node->next)
+ for (section = node->sections; section; section = section->next)
+ {
+ for (i = section->end_line; i > section->start_line; i--)
+ if (dir_lines[i - 1].size != 0)
+ break;
+ section->end_line = i;
+
+ for (spec = input_sections; spec; spec = spec->next)
+ if (!strcmp (spec->name, section->name))
+ break;
+ if (spec)
+ {
+ int add_at_line = section->end_line;
+ struct spec_entry *entry;
+ /* Say we have found at least one section with this name,
+ so we need not add such a section. */
+ spec->missing = 0;
+ /* For each entry, find the right place in this section
+ to add it. */
+ for (entry = entries_to_add; entry; entry = entry->next)
+ {
+ /* Did they at all want this entry to be put into
+ this section? */
+ for (spec = entry->entry_sections;
+ spec && spec != entry->entry_sections_tail;
+ spec = spec->next)
+ {
+ if (!strcmp (spec->name, section->name))
+ break;
+ }
+ if (!spec || spec == entry->entry_sections_tail)
+ continue;
+
+ /* Subtract one because dir_lines is zero-based,
+ but the `end_line' and `start_line' members are
+ one-based. */
+ for (i = section->end_line - 1;
+ i >= section->start_line - 1; i--)
+ {
+ /* If an entry exists with the same name,
+ and was not marked for deletion
+ (which means it is for some other file),
+ we are in trouble. */
+ if (dir_lines[i].start[0] == '*'
+ && menu_line_equal (entry->text, entry->text_len,
+ dir_lines[i].start,
+ dir_lines[i].size)
+ && !dir_lines[i].delete)
+ {
+ if (keep_old_flag)
+ {
+ add_at_line = -1;
+ break;
+ }
+ else
+ {
+ int j;
+ dir_lines[i].delete = 1;
+ for (j = i + 1; j < section->end_line; j++)
+ {
+ if (dir_lines[j].start[0] == '*')
+ break;
+ dir_lines[j].delete = 1;
+ }
+ }
+ }
+ if (dir_lines[i].start[0] == '*'
+ && menu_line_lessp (entry->text, entry->text_len,
+ dir_lines[i].start,
+ dir_lines[i].size))
+ add_at_line = i;
+ }
+ if (add_at_line < 0)
+ continue;
+ insert_entry_here (entry, add_at_line,
+ dir_lines, n_entries_to_add);
+ }
+ }
+ }
+
+ }
+ /* Decide where to add the new sections (unless --delete was used).
+ Alphabetically find the menu sections to add them before. */
+ if (!delete_flag)
+ {
+ struct node *node;
+ struct node *top = NULL;
+
+ /* Find the `Top' node. */
+ for (node = dir_nodes; node; node = node->next)
+ if (node->name && strcmp (node->name, "Top") == 0)
+ top = node;
+
+ if (top)
+ {
+ struct spec_section *spec;
+ int found = 0;
+ struct line_data *target_line = NULL;
+ for (spec = input_sections; spec; spec = spec->next)
+ {
+ found = 0;
+ target_line = NULL;
+ if (!spec->missing)
+ continue;
+ if (order_new_sections_alphabetically_flag)
+ {
+ struct menu_section *section;
+ struct menu_section *prev_section = NULL;
+
+ /* Look for the first section name that
+ exceeds SPEC->NAME. */
+ for (section = top->sections; section ;
+ section = section->next)
+ {
+ found = (mbscasecmp (spec->name, section->name) < 0);
+ if (found)
+ {
+ /* Mark the section for addition at this point. */
+ if (prev_section)
+ target_line = &dir_lines[prev_section->end_line];
+ else
+ target_line =
+ &dir_lines[top->sections->start_line - 2];
+
+ break;
+ }
+ prev_section = section;
+ }
+ }
+
+ /* When we can't put a section anywhere, we put it at the
+ bottom of the file. */
+ if (!found)
+ target_line = &dir_lines[top->end_line];
+
+ /* Add the section to our list of sections being added
+ at this point of the DIR file. */
+ target_line->num_sections_to_add++;
+ target_line->add_sections_before =
+ (struct spec_section **) xrealloc
+ (target_line->add_sections_before,
+ (target_line->num_sections_to_add *
+ sizeof (struct spec_section *)));
+ i = target_line->num_sections_to_add - 1;
+ target_line->add_sections_before[i] = spec;
+ }
+ }
+ }
+
+ if (delete_flag && !something_deleted && !quiet_flag)
+ warning (_("no entries found for `%s'; nothing deleted"), infile, 0);
+
+ if (debug_flag)
+ printf ("debug: writing dir file %s\n", opened_dirfilename);
+ if (chicken_flag)
+ printf ("test mode, not updating dir file %s\n", opened_dirfilename);
+ else
+ output_dirfile (opened_dirfilename, dir_nlines, dir_lines,
+ n_entries_to_add, entries_to_add,
+ input_sections, compression_program);
+
+ xexit (0);
+ return 0; /* Avoid bogus warnings. */
+}
+
+/* Divide the text at DATA (of SIZE bytes) into lines.
+ Return a vector of struct line_data describing the lines.
+ Store the length of that vector into *NLINESP. */
+
+struct line_data *
+findlines (char *data, int size, int *nlinesp)
+{
+ int i;
+ int lineflag = 1;
+ int lines_allocated = 511;
+ int filled = 0;
+ struct line_data *lines
+ = xmalloc ((lines_allocated + 1) * sizeof (struct line_data));
+
+ for (i = 0; i < size; i++)
+ {
+ if (lineflag)
+ {
+ if (filled == lines_allocated)
+ {
+ /* try to keep things somewhat page-aligned */
+ lines_allocated = ((lines_allocated + 1) * 2) - 1;
+ lines = xrealloc (lines, (lines_allocated + 1)
+ * sizeof (struct line_data));
+ }
+ lines[filled].start = &data[i];
+ lines[filled].add_entries_before = 0;
+ lines[filled].add_sections_before = NULL;
+ lines[filled].num_sections_to_add = 0;
+ lines[filled].delete = 0;
+ if (filled > 0)
+ lines[filled - 1].size
+ = lines[filled].start - lines[filled - 1].start - 1;
+ filled++;
+ }
+ lineflag = (data[i] == '\n');
+ }
+ if (filled > 0)
+ lines[filled - 1].size = &data[i] - lines[filled - 1].start - lineflag;
+
+ /* Do not leave garbage in the last element. */
+ lines[filled].start = NULL;
+ lines[filled].add_entries_before = NULL;
+ lines[filled].add_sections_before = NULL;
+ lines[filled].num_sections_to_add = 0;
+ lines[filled].delete = 0;
+ lines[filled].size = 0;
+
+ *nlinesp = filled;
+ return lines;
+}
+
+/* This is the comparison function for qsort for a vector of pointers to
+ struct spec_section. (Have to use const void * as the parameter type
+ to avoid incompatible-with-qsort warnings.)
+ Compare the section names. */
+
+int
+compare_section_names (const void *p1, const void *p2)
+{
+ struct spec_section **sec1 = (struct spec_section **) p1;
+ struct spec_section **sec2 = (struct spec_section **) p2;
+ char *name1 = (*sec1)->name;
+ char *name2 = (*sec2)->name;
+ return strcmp (name1, name2);
+}
+
+/* This is the comparison function for qsort
+ for a vector of pointers to struct spec_entry.
+ Compare the entries' text. */
+
+int
+compare_entries_text (const void *p1, const void *p2)
+{
+ struct spec_entry **entry1 = (struct spec_entry **) p1;
+ struct spec_entry **entry2 = (struct spec_entry **) p2;
+ char *text1 = (*entry1)->text;
+ char *text2 = (*entry2)->text;
+ char *colon1 = strchr (text1, ':');
+ char *colon2 = strchr (text2, ':');
+ int len1, len2;
+
+ if (!colon1)
+ len1 = strlen (text1);
+ else
+ len1 = colon1 - text1;
+ if (!colon2)
+ len2 = strlen (text2);
+ else
+ len2 = colon2 - text2;
+ return mbsncasecmp (text1, text2, len1 <= len2 ? len1 : len2);
+}
+
+/* Insert ENTRY into the add_entries_before vector
+ for line number LINE_NUMBER of the dir file.
+ DIR_LINES and N_ENTRIES carry information from like-named variables
+ in main. */
+
+void
+insert_entry_here (struct spec_entry *entry, int line_number,
+ struct line_data *dir_lines, int n_entries)
+{
+ int i, j;
+
+ if (dir_lines[line_number].add_entries_before == 0)
+ {
+ dir_lines[line_number].add_entries_before
+ = (struct spec_entry **) xmalloc (n_entries * sizeof (struct spec_entry *));
+ for (i = 0; i < n_entries; i++)
+ dir_lines[line_number].add_entries_before[i] = 0;
+ }
+
+ /* Find the place where this entry belongs. If there are already
+ several entries to add before LINE_NUMBER, make sure they are in
+ alphabetical order. */
+ for (i = 0; i < n_entries; i++)
+ if (dir_lines[line_number].add_entries_before[i] == 0
+ || menu_line_lessp (entry->text, strlen (entry->text),
+ dir_lines[line_number].add_entries_before[i]->text,
+ strlen (dir_lines[line_number].add_entries_before[i]->text)))
+ break;
+
+ if (i == n_entries)
+ abort ();
+
+ /* If we need to plug ENTRY into the middle of the
+ ADD_ENTRIES_BEFORE array, move the entries which should be output
+ after this one down one notch, before adding a new one. */
+ if (dir_lines[line_number].add_entries_before[i] != 0)
+ for (j = n_entries - 1; j > i; j--)
+ dir_lines[line_number].add_entries_before[j]
+ = dir_lines[line_number].add_entries_before[j - 1];
+
+ dir_lines[line_number].add_entries_before[i] = entry;
+}
diff --git a/install-info/tests/Makefile.am b/install-info/tests/Makefile.am
new file mode 100644
index 0000000..ed52cdf
--- /dev/null
+++ b/install-info/tests/Makefile.am
@@ -0,0 +1,237 @@
+# $Id: Makefile.am,v 1.5 2008/05/22 16:31:54 karl Exp $
+# Makefile.am for texinfo/util/tests/install-info.
+# Run automake in ../../../ to produce Makefile.in from this.
+#
+# This file is free software; as a special exception the author 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.
+
+TESTS=ii-0001-test ii-0002-test ii-0003-test ii-0004-test ii-0005-test \
+ii-0006-test ii-0007-test ii-0008-test ii-0009-test ii-0010-test \
+ii-0011-test ii-0012-test ii-0013-test ii-0014-test ii-0015-test \
+ii-0016-test ii-0017-test ii-0018-test ii-0019-test ii-0020-test \
+ii-0021-test ii-0022-test ii-0023-test ii-0024-test ii-0025-test \
+ii-0026-test ii-0027-test ii-0028-test ii-0029-test ii-0030-test \
+ii-0031-test ii-0032-test ii-0033-test ii-0034-test ii-0035-test \
+ii-0036-test ii-0037-test ii-0038-test ii-0039-test ii-0040-test \
+ii-0041-test ii-0042-test ii-0043-test ii-0044-test ii-0045-test \
+ii-0046-test ii-0047-test ii-0048-test ii-0049-test ii-0050-test \
+ii-0051-test ii-0052-test ii-0053-test
+
+noinst_SCRIPTS=$(TESTS)
+
+EXTRA_DIST=\
+ii-0001-input-dir-file \
+ii-0001-input-info-file \
+ii-0001-expected-dir-file \
+ii-0001-test \
+ii-0002-input-dir-file \
+ii-0002-input-info-file \
+ii-0002-expected-dir-file \
+ii-0002-test \
+ii-0003-input-dir-file \
+ii-0003-input-info-file \
+ii-0003-expected-dir-file \
+ii-0003-test \
+ii-0004-input-dir-file \
+ii-0004-input-info-file \
+ii-0004-expected-dir-file \
+ii-0004-test \
+ii-0005-input-dir-file \
+ii-0005-input-info-file \
+ii-0005-expected-dir-file \
+ii-0005-test \
+ii-0006-input-dir-file \
+ii-0006-input-info-file \
+ii-0006-expected-dir-file \
+ii-0006-test \
+ii-0007-input-dir-file \
+ii-0007-input-info-file \
+ii-0007-expected-dir-file \
+ii-0007-test \
+ii-0008-input-dir-file \
+ii-0008-input-info-file \
+ii-0008-expected-dir-file \
+ii-0008-test \
+ii-0009-input-dir-file \
+ii-0009-input-info-file \
+ii-0009-expected-dir-file \
+ii-0009-test \
+ii-0010-input-dir-file \
+ii-0010-input-info-file \
+ii-0010-expected-dir-file \
+ii-0010-test \
+ii-0011-input-dir-file \
+ii-0011-input-info-file \
+ii-0011-expected-dir-file \
+ii-0011-test \
+ii-0012-input-dir-file \
+ii-0012-input-info-file \
+ii-0012-expected-dir-file \
+ii-0012-test \
+ii-0013-input-dir-file \
+ii-0013-input-info-file \
+ii-0013-expected-dir-file \
+ii-0013-test \
+ii-0014-input-dir-file \
+ii-0014-input-info-file \
+ii-0014-expected-dir-file \
+ii-0014-test \
+ii-0015-input-dir-file \
+ii-0015-input-info-file \
+ii-0015-expected-dir-file \
+ii-0015-test \
+ii-0016-input-dir-file \
+ii-0016-input-info-file \
+ii-0016-expected-dir-file \
+ii-0016-test \
+ii-0017-input-dir-file \
+ii-0017-input-info-file \
+ii-0017-expected-dir-file \
+ii-0017-test \
+ii-0018-input-dir-file \
+ii-0018-input-info-file \
+ii-0018-test \
+ii-0019-input-dir-file \
+ii-0019-input-info-file \
+ii-0019-test \
+ii-0020-input-dir-file \
+ii-0020-input-info-file \
+ii-0020-expected-dir-file \
+ii-0020-test \
+ii-0021-input-dir-file \
+ii-0021-input-info-file \
+ii-0021-expected-dir-file \
+ii-0021-test \
+ii-0022-input-dir-file \
+ii-0022-input-info-file \
+ii-0022-expected-dir-file \
+ii-0022-test \
+ii-0023-input-dir-file \
+ii-0023-input-info-file \
+ii-0023-expected-dir-file \
+ii-0023-test \
+ii-0024-input-dir-file \
+ii-0024-input-info-file \
+ii-0024-expected-dir-file \
+ii-0024-test \
+ii-0025-input-dir-file \
+ii-0025-input-info-file \
+ii-0025-expected-dir-file \
+ii-0025-test \
+ii-0026-input-dir-file \
+ii-0026-input-info-file \
+ii-0026-expected-dir-file \
+ii-0026-test \
+ii-0027-input-dir-file \
+ii-0027-input-info-file \
+ii-0027-expected-dir-file \
+ii-0027-test \
+ii-0028-input-dir-file \
+ii-0028-input-info-file \
+ii-0028-expected-dir-file \
+ii-0028-test \
+ii-0029-input-dir-file \
+ii-0029-input-info-file \
+ii-0029-expected-dir-file \
+ii-0029-test \
+ii-0030-input-dir-file \
+ii-0030-input-info-file \
+ii-0030-expected-dir-file \
+ii-0030-test \
+ii-0031-input-dir-file \
+ii-0031-input-info-file \
+ii-0031-expected-dir-file \
+ii-0031-test \
+ii-0032-input-dir-file \
+ii-0032-input-info-file \
+ii-0032-expected-dir-file \
+ii-0032-test \
+ii-0033-input-dir-file \
+ii-0033-input-info-file \
+ii-0033-expected-dir-file \
+ii-0033-test \
+ii-0034-input-dir-file \
+ii-0034-input-info-file \
+ii-0034-expected-dir-file \
+ii-0034-test \
+ii-0035-input-dir-file \
+ii-0035-input-info-file \
+ii-0035-expected-dir-file \
+ii-0035-test \
+ii-0036-input-dir-file \
+ii-0036-input-info-file \
+ii-0036-expected-dir-file \
+ii-0036-test \
+ii-0037-input-dir-file \
+ii-0037-input-info-file \
+ii-0037-expected-dir-file \
+ii-0037-test \
+ii-0038-input-dir-file \
+ii-0038-input-info-file \
+ii-0038-expected-dir-file \
+ii-0038-test \
+ii-0039-input-dir-file \
+ii-0039-input-info-file \
+ii-0039-expected-dir-file \
+ii-0039-test \
+ii-0040-input-dir-file \
+ii-0040-input-info-file \
+ii-0040-expected-dir-file \
+ii-0040-test \
+ii-0041-input-dir-file.gz \
+ii-0041-input-info-file \
+ii-0041-expected-dir-file.gz \
+ii-0041-test \
+ii-0042-input-dir-file \
+ii-0042-input-info-file \
+ii-0042-expected-dir-file \
+ii-0042-test \
+ii-0043-input-dir-file \
+ii-0043-input-info-file \
+ii-0043-expected-dir-file \
+ii-0043-test \
+ii-0044-input-dir-file \
+ii-0044-input-info-file \
+ii-0044-expected-dir-file \
+ii-0044-test \
+ii-0045-input-dir-file \
+ii-0045-input-info-file \
+ii-0045-expected-dir-file \
+ii-0045-test \
+ii-0046-input-dir-file \
+ii-0046-expected-dir-file \
+ii-0046-test \
+ii-0047-input-dir-file \
+ii-0047-input-info-file \
+ii-0047-expected-dir-file \
+ii-0047-test \
+ii-0048-input-dir-file \
+ii-0048-input-info-file \
+ii-0048-expected-dir-file \
+ii-0048-test \
+ii-0049-input-dir-file \
+ii-0049-input-info-file \
+ii-0049-expected-dir-file \
+ii-0049-test \
+ii-0050-input-dir-file.gz \
+ii-0050-input-info-file \
+ii-0050-expected-dir-file.gz \
+ii-0050-test \
+ii-0051-input-dir-file \
+ii-0051-input-info-file \
+ii-0051-expected-dir-file \
+ii-0051-test \
+ii-0052-input-dir-file \
+ii-0052-input-info-file \
+ii-0052-expected-dir-file \
+ii-0052-test \
+ii-0053-input-dir-file \
+ii-0053-input-info-file \
+ii-0053-expected-dir-file \
+ii-0053-test \
+README
diff --git a/install-info/tests/Makefile.in b/install-info/tests/Makefile.in
new file mode 100644
index 0000000..d47916f
--- /dev/null
+++ b/install-info/tests/Makefile.in
@@ -0,0 +1,872 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008 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@
+
+# $Id: Makefile.am,v 1.5 2008/05/22 16:31:54 karl Exp $
+# Makefile.am for texinfo/util/tests/install-info.
+# Run automake in ../../../ to produce Makefile.in from this.
+#
+# This file is free software; as a special exception the author 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@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@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 = install-info/tests
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/defs.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/gnulib/m4/alloca.m4 \
+ $(top_srcdir)/gnulib/m4/argz.m4 \
+ $(top_srcdir)/gnulib/m4/codeset.m4 \
+ $(top_srcdir)/gnulib/m4/eealloc.m4 \
+ $(top_srcdir)/gnulib/m4/environ.m4 \
+ $(top_srcdir)/gnulib/m4/error.m4 \
+ $(top_srcdir)/gnulib/m4/exitfail.m4 \
+ $(top_srcdir)/gnulib/m4/extensions.m4 \
+ $(top_srcdir)/gnulib/m4/getopt.m4 \
+ $(top_srcdir)/gnulib/m4/gettext.m4 \
+ $(top_srcdir)/gnulib/m4/gettimeofday.m4 \
+ $(top_srcdir)/gnulib/m4/glibc21.m4 \
+ $(top_srcdir)/gnulib/m4/gnulib-common.m4 \
+ $(top_srcdir)/gnulib/m4/gnulib-comp.m4 \
+ $(top_srcdir)/gnulib/m4/iconv.m4 \
+ $(top_srcdir)/gnulib/m4/include_next.m4 \
+ $(top_srcdir)/gnulib/m4/inline.m4 \
+ $(top_srcdir)/gnulib/m4/intlmacosx.m4 \
+ $(top_srcdir)/gnulib/m4/lib-ld.m4 \
+ $(top_srcdir)/gnulib/m4/lib-link.m4 \
+ $(top_srcdir)/gnulib/m4/lib-prefix.m4 \
+ $(top_srcdir)/gnulib/m4/localcharset.m4 \
+ $(top_srcdir)/gnulib/m4/longlong.m4 \
+ $(top_srcdir)/gnulib/m4/malloc.m4 \
+ $(top_srcdir)/gnulib/m4/malloca.m4 \
+ $(top_srcdir)/gnulib/m4/mbchar.m4 \
+ $(top_srcdir)/gnulib/m4/mbiter.m4 \
+ $(top_srcdir)/gnulib/m4/mbrtowc.m4 \
+ $(top_srcdir)/gnulib/m4/mbscasecmp.m4 \
+ $(top_srcdir)/gnulib/m4/mbschr.m4 \
+ $(top_srcdir)/gnulib/m4/mbslen.m4 \
+ $(top_srcdir)/gnulib/m4/mbsncasecmp.m4 \
+ $(top_srcdir)/gnulib/m4/mbsstr.m4 \
+ $(top_srcdir)/gnulib/m4/mbstate_t.m4 \
+ $(top_srcdir)/gnulib/m4/mbswidth.m4 \
+ $(top_srcdir)/gnulib/m4/memchr.m4 \
+ $(top_srcdir)/gnulib/m4/memcmp.m4 \
+ $(top_srcdir)/gnulib/m4/memcpy.m4 \
+ $(top_srcdir)/gnulib/m4/memmem.m4 \
+ $(top_srcdir)/gnulib/m4/memmove.m4 \
+ $(top_srcdir)/gnulib/m4/mempcpy.m4 \
+ $(top_srcdir)/gnulib/m4/mkstemp.m4 \
+ $(top_srcdir)/gnulib/m4/nls.m4 \
+ $(top_srcdir)/gnulib/m4/onceonly.m4 \
+ $(top_srcdir)/gnulib/m4/po.m4 \
+ $(top_srcdir)/gnulib/m4/progtest.m4 \
+ $(top_srcdir)/gnulib/m4/setenv.m4 \
+ $(top_srcdir)/gnulib/m4/stdbool.m4 \
+ $(top_srcdir)/gnulib/m4/stdint.m4 \
+ $(top_srcdir)/gnulib/m4/stdlib_h.m4 \
+ $(top_srcdir)/gnulib/m4/stpcpy.m4 \
+ $(top_srcdir)/gnulib/m4/strdup.m4 \
+ $(top_srcdir)/gnulib/m4/strerror.m4 \
+ $(top_srcdir)/gnulib/m4/string_h.m4 \
+ $(top_srcdir)/gnulib/m4/strndup.m4 \
+ $(top_srcdir)/gnulib/m4/strnlen.m4 \
+ $(top_srcdir)/gnulib/m4/sys_stat_h.m4 \
+ $(top_srcdir)/gnulib/m4/sys_time_h.m4 \
+ $(top_srcdir)/gnulib/m4/tempname.m4 \
+ $(top_srcdir)/gnulib/m4/unistd_h.m4 \
+ $(top_srcdir)/gnulib/m4/wchar.m4 \
+ $(top_srcdir)/gnulib/m4/wchar_t.m4 \
+ $(top_srcdir)/gnulib/m4/wctype.m4 \
+ $(top_srcdir)/gnulib/m4/wcwidth.m4 \
+ $(top_srcdir)/gnulib/m4/wint_t.m4 \
+ $(top_srcdir)/gnulib/m4/xalloc.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 = defs
+SCRIPTS = $(noinst_SCRIPTS)
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+ARGZ_H = @ARGZ_H@
+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@
+GETOPT_H = @GETOPT_H@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_DUP2 = @GNULIB_DUP2@
+GNULIB_ENVIRON = @GNULIB_ENVIRON@
+GNULIB_FCHDIR = @GNULIB_FCHDIR@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+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_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRSEP = @GNULIB_STRSEP@
+GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
+GNULIB_STRSTR = @GNULIB_STRSTR@
+GNULIB_STRTOD = @GNULIB_STRTOD@
+GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
+GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GREP = @GREP@
+HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR = @HAVE_DECL_STRERROR@
+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_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SETENV = @HAVE_SETENV@
+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_SLEEP = @HAVE_SLEEP@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRNDUP = @HAVE_STRNDUP@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNSETENV = @HAVE_UNSETENV@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE__BOOL = @HAVE__BOOL@
+HELP2MAN = @HELP2MAN@
+HEVEA = @HEVEA@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LDFLAGS = @LDFLAGS@
+LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@
+LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_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_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_FCHDIR = @REPLACE_FCHDIR@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+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@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYS_STAT_H = @SYS_STAT_H@
+SYS_TIME_H = @SYS_TIME_H@
+TERMLIBS = @TERMLIBS@
+TEX = @TEX@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+VOID_UNSETENV = @VOID_UNSETENV@
+WCHAR_H = @WCHAR_H@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WCTYPE_H = @WCTYPE_H@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+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@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_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@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+native_tools = @native_tools@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+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@
+TESTS = ii-0001-test ii-0002-test ii-0003-test ii-0004-test ii-0005-test \
+ii-0006-test ii-0007-test ii-0008-test ii-0009-test ii-0010-test \
+ii-0011-test ii-0012-test ii-0013-test ii-0014-test ii-0015-test \
+ii-0016-test ii-0017-test ii-0018-test ii-0019-test ii-0020-test \
+ii-0021-test ii-0022-test ii-0023-test ii-0024-test ii-0025-test \
+ii-0026-test ii-0027-test ii-0028-test ii-0029-test ii-0030-test \
+ii-0031-test ii-0032-test ii-0033-test ii-0034-test ii-0035-test \
+ii-0036-test ii-0037-test ii-0038-test ii-0039-test ii-0040-test \
+ii-0041-test ii-0042-test ii-0043-test ii-0044-test ii-0045-test \
+ii-0046-test ii-0047-test ii-0048-test ii-0049-test ii-0050-test \
+ii-0051-test ii-0052-test ii-0053-test
+
+noinst_SCRIPTS = $(TESTS)
+EXTRA_DIST = \
+ii-0001-input-dir-file \
+ii-0001-input-info-file \
+ii-0001-expected-dir-file \
+ii-0001-test \
+ii-0002-input-dir-file \
+ii-0002-input-info-file \
+ii-0002-expected-dir-file \
+ii-0002-test \
+ii-0003-input-dir-file \
+ii-0003-input-info-file \
+ii-0003-expected-dir-file \
+ii-0003-test \
+ii-0004-input-dir-file \
+ii-0004-input-info-file \
+ii-0004-expected-dir-file \
+ii-0004-test \
+ii-0005-input-dir-file \
+ii-0005-input-info-file \
+ii-0005-expected-dir-file \
+ii-0005-test \
+ii-0006-input-dir-file \
+ii-0006-input-info-file \
+ii-0006-expected-dir-file \
+ii-0006-test \
+ii-0007-input-dir-file \
+ii-0007-input-info-file \
+ii-0007-expected-dir-file \
+ii-0007-test \
+ii-0008-input-dir-file \
+ii-0008-input-info-file \
+ii-0008-expected-dir-file \
+ii-0008-test \
+ii-0009-input-dir-file \
+ii-0009-input-info-file \
+ii-0009-expected-dir-file \
+ii-0009-test \
+ii-0010-input-dir-file \
+ii-0010-input-info-file \
+ii-0010-expected-dir-file \
+ii-0010-test \
+ii-0011-input-dir-file \
+ii-0011-input-info-file \
+ii-0011-expected-dir-file \
+ii-0011-test \
+ii-0012-input-dir-file \
+ii-0012-input-info-file \
+ii-0012-expected-dir-file \
+ii-0012-test \
+ii-0013-input-dir-file \
+ii-0013-input-info-file \
+ii-0013-expected-dir-file \
+ii-0013-test \
+ii-0014-input-dir-file \
+ii-0014-input-info-file \
+ii-0014-expected-dir-file \
+ii-0014-test \
+ii-0015-input-dir-file \
+ii-0015-input-info-file \
+ii-0015-expected-dir-file \
+ii-0015-test \
+ii-0016-input-dir-file \
+ii-0016-input-info-file \
+ii-0016-expected-dir-file \
+ii-0016-test \
+ii-0017-input-dir-file \
+ii-0017-input-info-file \
+ii-0017-expected-dir-file \
+ii-0017-test \
+ii-0018-input-dir-file \
+ii-0018-input-info-file \
+ii-0018-test \
+ii-0019-input-dir-file \
+ii-0019-input-info-file \
+ii-0019-test \
+ii-0020-input-dir-file \
+ii-0020-input-info-file \
+ii-0020-expected-dir-file \
+ii-0020-test \
+ii-0021-input-dir-file \
+ii-0021-input-info-file \
+ii-0021-expected-dir-file \
+ii-0021-test \
+ii-0022-input-dir-file \
+ii-0022-input-info-file \
+ii-0022-expected-dir-file \
+ii-0022-test \
+ii-0023-input-dir-file \
+ii-0023-input-info-file \
+ii-0023-expected-dir-file \
+ii-0023-test \
+ii-0024-input-dir-file \
+ii-0024-input-info-file \
+ii-0024-expected-dir-file \
+ii-0024-test \
+ii-0025-input-dir-file \
+ii-0025-input-info-file \
+ii-0025-expected-dir-file \
+ii-0025-test \
+ii-0026-input-dir-file \
+ii-0026-input-info-file \
+ii-0026-expected-dir-file \
+ii-0026-test \
+ii-0027-input-dir-file \
+ii-0027-input-info-file \
+ii-0027-expected-dir-file \
+ii-0027-test \
+ii-0028-input-dir-file \
+ii-0028-input-info-file \
+ii-0028-expected-dir-file \
+ii-0028-test \
+ii-0029-input-dir-file \
+ii-0029-input-info-file \
+ii-0029-expected-dir-file \
+ii-0029-test \
+ii-0030-input-dir-file \
+ii-0030-input-info-file \
+ii-0030-expected-dir-file \
+ii-0030-test \
+ii-0031-input-dir-file \
+ii-0031-input-info-file \
+ii-0031-expected-dir-file \
+ii-0031-test \
+ii-0032-input-dir-file \
+ii-0032-input-info-file \
+ii-0032-expected-dir-file \
+ii-0032-test \
+ii-0033-input-dir-file \
+ii-0033-input-info-file \
+ii-0033-expected-dir-file \
+ii-0033-test \
+ii-0034-input-dir-file \
+ii-0034-input-info-file \
+ii-0034-expected-dir-file \
+ii-0034-test \
+ii-0035-input-dir-file \
+ii-0035-input-info-file \
+ii-0035-expected-dir-file \
+ii-0035-test \
+ii-0036-input-dir-file \
+ii-0036-input-info-file \
+ii-0036-expected-dir-file \
+ii-0036-test \
+ii-0037-input-dir-file \
+ii-0037-input-info-file \
+ii-0037-expected-dir-file \
+ii-0037-test \
+ii-0038-input-dir-file \
+ii-0038-input-info-file \
+ii-0038-expected-dir-file \
+ii-0038-test \
+ii-0039-input-dir-file \
+ii-0039-input-info-file \
+ii-0039-expected-dir-file \
+ii-0039-test \
+ii-0040-input-dir-file \
+ii-0040-input-info-file \
+ii-0040-expected-dir-file \
+ii-0040-test \
+ii-0041-input-dir-file.gz \
+ii-0041-input-info-file \
+ii-0041-expected-dir-file.gz \
+ii-0041-test \
+ii-0042-input-dir-file \
+ii-0042-input-info-file \
+ii-0042-expected-dir-file \
+ii-0042-test \
+ii-0043-input-dir-file \
+ii-0043-input-info-file \
+ii-0043-expected-dir-file \
+ii-0043-test \
+ii-0044-input-dir-file \
+ii-0044-input-info-file \
+ii-0044-expected-dir-file \
+ii-0044-test \
+ii-0045-input-dir-file \
+ii-0045-input-info-file \
+ii-0045-expected-dir-file \
+ii-0045-test \
+ii-0046-input-dir-file \
+ii-0046-expected-dir-file \
+ii-0046-test \
+ii-0047-input-dir-file \
+ii-0047-input-info-file \
+ii-0047-expected-dir-file \
+ii-0047-test \
+ii-0048-input-dir-file \
+ii-0048-input-info-file \
+ii-0048-expected-dir-file \
+ii-0048-test \
+ii-0049-input-dir-file \
+ii-0049-input-info-file \
+ii-0049-expected-dir-file \
+ii-0049-test \
+ii-0050-input-dir-file.gz \
+ii-0050-input-info-file \
+ii-0050-expected-dir-file.gz \
+ii-0050-test \
+ii-0051-input-dir-file \
+ii-0051-input-info-file \
+ii-0051-expected-dir-file \
+ii-0051-test \
+ii-0052-input-dir-file \
+ii-0052-input-info-file \
+ii-0052-expected-dir-file \
+ii-0052-test \
+ii-0053-input-dir-file \
+ii-0053-input-info-file \
+ii-0053-expected-dir-file \
+ii-0053-test \
+README
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu install-info/tests/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu install-info/tests/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+defs: $(top_builddir)/config.status $(srcdir)/defs.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; ws='[ ]'; \
+ srcdir=$(srcdir); export srcdir; \
+ list=' $(TESTS) '; \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *$$ws$$tst$$ws*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ echo "XPASS: $$tst"; \
+ ;; \
+ *) \
+ echo "PASS: $$tst"; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *$$ws$$tst$$ws*) \
+ xfail=`expr $$xfail + 1`; \
+ echo "XFAIL: $$tst"; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ echo "FAIL: $$tst"; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ echo "SKIP: $$tst"; \
+ fi; \
+ done; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="All $$all tests passed"; \
+ else \
+ banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all tests failed"; \
+ else \
+ banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ skipped="($$skip tests were not run)"; \
+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ echo "$$dashes"; \
+ echo "$$banner"; \
+ test -z "$$skipped" || echo "$$skipped"; \
+ test -z "$$report" || echo "$$report"; \
+ echo "$$dashes"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
+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 $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$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
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(SCRIPTS)
+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:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+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
+
+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-TESTS check-am clean clean-generic \
+ 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 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/install-info/tests/README b/install-info/tests/README
new file mode 100644
index 0000000..c42ecc9
--- /dev/null
+++ b/install-info/tests/README
@@ -0,0 +1,172 @@
+$Id: README,v 1.1 2008/01/02 01:36:16 karl Exp $
+install-info/tests/README
+
+ Copyright (C) 2008 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 describes each of the numbered install-info tests.
+
+0001: The 99% case. Installing an Info file. Take a single entry from the
+ Info file and put it into a pre-existing section in the DIR file.
+0002: Installing an Info file. Take two entries from the Info file and put
+ it into a pre-existing section in the DIR file.
+0003: Installing an Info file. Take two entries from the Info file and put
+ it into a pre-existing section in the DIR file. The entries are
+ described in two different `START-INFO-DIR-ENTRY' declarations.
+0004: Installing an Info file. Take two entries from the Info file and put
+ it into two pre-existing sections in the DIR file. The entries are
+ described in two different `INFO-DIR-SECTION' and `START-INFO-DIR-ENTRY'
+ declarations.
+0005: Installing an Info file. Take two entries from the Info file and put
+ it into one pre-existing section and one non-existing section in the
+ DIR file. The entries are described in two different `INFO-DIR-SECTION'
+ and `START-INFO-DIR-ENTRY' declarations.
+0006: The 99% case, try 2. Installing an Info file. Take a single entry
+ from the Info file and put it into a pre-existing section in the DIR
+ file, but this time the name is not capitalized.
+0007: The 99% case, try 3. Installing an Info file. Take a single entry
+ from the Info file and put it into a pre-existing section in the DIR
+ file, but this time the entry is not the final entry in the section.
+0008: The 99% case, try 4. Installing an Info file. Take a single entry
+ from the Info file and put it into a pre-existing section in the DIR
+ file, but this time the entry's description spans more than one line.
+0009: The 99% case, try 5. Installing an Info file. Take a single entry
+ from the Info file and put it into a pre-existing section in the DIR
+ file, but this time the entry's description does not start on the
+ 33rd column and requires indentation.
+0010: The 99% case, try 6. Installing an Info file. Take a single entry
+ from the Info file and put it into a pre-existing section in the DIR
+ file, but this time the entry's one line description requires
+ multi-line indentation.
+0011: Installing an Info file. Take a single entry from the Info file and
+ put it into a pre-existing section in the DIR file, but this time do
+ not indent the description.
+0012: Installing an Info file. Take a single entry from the Info file and
+ put it into a pre-existing section in the DIR file, but this time the
+ entry already exists and will be replaced.
+0013: Installing an Info file. Take a single entry from the Info file and
+ put it into a pre-existing section in the DIR file, but this time the
+ entry already exists and the --keep-old option is used to override the
+ replacement.
+0014: Installing an Info file. Take a single entry from the Info file and
+ put it into a pre-existing section in the DIR file, but this time the
+ entry already exists with a multi-line description and will be
+ replaced with a single-line description.
+0015: Installing an Info file. Take a single entry from the Info file and
+ put it into a pre-existing section in the DIR file, but this time the
+ entry already exists with a single-line description and will be
+ replaced with a multi-line description.
+0016: Installing an Info file. The Info file does not contain section or
+ entry hints, and neither a section nor an entry is specified on the
+ command-line. Installation does not occur, but is not an error.
+0017: Installing an initial Info file into a minimal DIR file.
+0018: Installing an initial Info file into an empty (0 byte) DIR file.
+ Installation does not occur, and is an error.
+0019: Installing an initial Info file into an empty (2 byte) DIR file.
+ Installation does not occur, and is an error.
+0020: Installing an Info file. The Info file does not contain section or
+ entry hints, and a section is not specified on the command-line, but
+ a --description is.
+0021: Installing an Info file. The Info file does not contain section or
+ entry hints, and a pre-existing --section is stated on the command-line
+ along with a --description.
+0022: Installing an Info file. The Info file does not contain section or
+ entry hints, and a --name is specified on the command-line. The NAME
+ starts with *, so the whole name (up to the period) is replaced.
+0023: Installing an Info file. The Info file does not contain section or
+ entry hints, and a --name is specified on the command-line. The NAME
+ does not start with a *, so just the name (up to the colon) is replaced.
+0024: Installing an Info file. The Info file contains section and entry
+ hints, but we override the section with a non-existing one from the
+ command-line.
+0025: Installing an Info file. The Info file contains section and entry
+ hints, but we override the section with an existing one from the
+ command-line.
+0026: Installing an Info file. The Info file contains section and entry
+ hints, but we override the entry with an --entry on the command-line.
+0027: Installing an Info file. The Info file contains section and entry
+ hints, but we override the entry with an --entry on the command-line,
+ and we also override the section with a --section on the command-line.
+0028: Installing an Info file. The Info file contains section and entry
+ hints, but we override the name portion of the entry with a --name
+ on the command-line. The NAME starts with a `*' so it replaces the
+ entire name, up to the period.
+0029: Installing an Info file. The Info file contains section and entry
+ hints, but we override the name portion of the entry with a --name
+ on the command-line. The NAME does not start with a `*' so it
+ replaces the name, up to the colon and presumes the basename.
+0030: Installing an Info file. The Info file contains section and entry
+ hints, but we override the description portion of the entry with a
+ --description on the command-line.
+0031: Installing an Info file. The Info file contains section and entry
+ hints, but we override the description and the name with
+ --description and --name options on the command-line. The NAME starts
+ with a `*' so it replaces the entire name, up to the period.
+0032: Installing an Info file. The Info file contains section and entry
+ hints, but we try to override the section with a regular expression
+ that does not match any existing sections in the DIR file. The
+ overriding cannot take place, and the entry is installed in the section
+ specified in the Info file.
+0033: Installing an Info file. The Info file contains an entry hint, but no
+ section hint. We try to specify the section with a --regex option on
+ the command-line, but the regular expression does not match any
+ existing sections in the DIR file.
+0034: Installing an Info file. The Info file contains an entry hint, but
+ no section hint, and we try to specify the section with a regular
+ expression that does not match any existing sections in the DIR file.
+ We also specify a --section on the command-line to ensure that the
+ entry will be installed in a section that we explicitly name.
+0035: Installing an Info file. The Info file contains section and entry
+ hints, but we try to specify the section with a regular expression
+ that does not match any existing sections in the DIR file. We also
+ specify a --section on the command-line to ensure that the entry will
+ be installed in a section that we explicitly name.
+0036: Installing an Info file. The Info file contains entry and section
+ hints, but try to specify the section with a --regex option on
+ the command-line, and the regular expression matches an existing
+ section in the DIR file.
+0037: Installing an Info file. The Info file contains section and entry
+ hints, but we try to specify the section with a regular expression
+ that does not match any existing sections in the DIR file. We also
+ specify a --section on the command-line to ensure that the entry will
+ be installed in a section that we explicitly name. We use the
+ alternative Debian --section REGEX TITLE syntax instead of the normal
+ GNU syntax.
+0038: Installing an Info file. The Info file does not contain section or
+ entry hints, and we specify that two entries go into two sections on
+ the command-line. One section already exists, and the other doesn't.
+0039: Installing an Info file. The Info file contains section and entry
+ hints, but we override the entry with an --entry option on the
+ command-line. The entry has a multi-line description and is not
+ indented.
+0040: Installing an Info file. The Info file contains section and entry
+ hints, but we override the entry with --name and --description options
+ on the command-line. The entry is not indented.
+0041: Installing an Info file. The Info file contains section and entry
+ hints, and we're installing the entry into a gzipped DIR file.
+0042: Installing an Info file. The Info file contains section and entry
+ hints for two entries in two sections. Both of the sections do not
+ already exist in the DIR file. The sections will be added prior to
+ all other sections due to the alphabetic ordering of section names.
+0043: Installing an Info file. The Info file contains section and entry
+ hints, and we're going to install the new section admist many other
+ sections. E.g. instead of always at the very bottom or at the very
+ top.
+0044: The 99% case. Removing an Info file. The Info file is responsible
+ for a single entry in the DIR file.
+0045: Removing an Info file. The Info file is responsible for many entries
+ in the DIR file.
+0046: Removing an Info file. We no longer have the Info file, so we
+ specify --remove-exactly to remove it instead.
+0047: Removing an Info file. The Info file is responsible for the final
+ entry in the DIR file. The section also gets removed.
+0048: Removing an Info file. The Info file is responsible for the final
+ entry in the DIR file, but we want to keep the section heading, so
+ we specify --keep-old.
+0049: Removing an Info file. The Info file is not responsible for any
+ entries in the DIR file. A warning is issued, but it isn't an error.
+0050: Removing an Info file. The Info file is responsible for a single
+ entry in the gzipped DIR file.
diff --git a/install-info/tests/defs.in b/install-info/tests/defs.in
new file mode 100644
index 0000000..815ee5f
--- /dev/null
+++ b/install-info/tests/defs.in
@@ -0,0 +1,48 @@
+# @configure_input@
+# $Id: defs.in,v 1.1 2008/04/17 17:54:17 karl Exp $
+#
+# Copyright 2008 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/>.
+
+# (Some snippets copied from Autoconf and/or util/defs.in.)
+# Make sure we override the user shell.
+SHELL='@SHELL@'
+export SHELL
+
+unset CDPATH
+
+# Ensure we are running from the right directory.
+if test ! -f ./defs; then
+ echo "defs: not found in current directory" 1>&2
+ exit 1
+fi
+
+# If srcdir is not set, then we are not running from `make check'.
+if test -z "$srcdir"; then
+ VERBOSE=x
+ # compute $srcdir.
+ srcdir=`echo "$0" | sed -e 's,/[^\\/]*$,,'`
+ test $srcdir = $0 && srcdir=.
+fi
+
+# The two variables we use in the test scripts.
+
+top_builddir=@top_builddir@
+install_info=${top_builddir}/install-info/ginstall-info
+export install_info
+
+top_srcdir=@top_srcdir@
+testdir=${top_srcdir}/install-info/tests
+export testdir
diff --git a/install-info/tests/ii-0001-expected-dir-file b/install-info/tests/ii-0001-expected-dir-file
new file mode 100644
index 0000000..bdcca6d
--- /dev/null
+++ b/install-info/tests/ii-0001-expected-dir-file
@@ -0,0 +1,24 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0001-input-dir-file b/install-info/tests/ii-0001-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0001-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0001-input-info-file b/install-info/tests/ii-0001-input-info-file
new file mode 100644
index 0000000..993920b
--- /dev/null
+++ b/install-info/tests/ii-0001-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0001-test b/install-info/tests/ii-0001-test
new file mode 100755
index 0000000..e298842
--- /dev/null
+++ b/install-info/tests/ii-0001-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii01-XXXXXXXX`
+cp ${testdir}/ii-0001-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} ${testdir}/ii-0001-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0001-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0002-expected-dir-file b/install-info/tests/ii-0002-expected-dir-file
new file mode 100644
index 0000000..f233228
--- /dev/null
+++ b/install-info/tests/ii-0002-expected-dir-file
@@ -0,0 +1,25 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). Wildebeest native to Africa.
+* Wildebeest: (gnu). Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0002-input-dir-file b/install-info/tests/ii-0002-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0002-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0002-input-info-file b/install-info/tests/ii-0002-input-info-file
new file mode 100644
index 0000000..3d08ade
--- /dev/null
+++ b/install-info/tests/ii-0002-input-info-file
@@ -0,0 +1,12 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Wildebeest: (gnu). Wildebeest native to Africa.
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0002-test b/install-info/tests/ii-0002-test
new file mode 100755
index 0000000..78bc2e2
--- /dev/null
+++ b/install-info/tests/ii-0002-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii02-XXXXXXXX`
+cp ${testdir}/ii-0002-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} ${testdir}/ii-0002-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0002-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0003-expected-dir-file b/install-info/tests/ii-0003-expected-dir-file
new file mode 100644
index 0000000..f233228
--- /dev/null
+++ b/install-info/tests/ii-0003-expected-dir-file
@@ -0,0 +1,25 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). Wildebeest native to Africa.
+* Wildebeest: (gnu). Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0003-input-dir-file b/install-info/tests/ii-0003-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0003-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0003-input-info-file b/install-info/tests/ii-0003-input-info-file
new file mode 100644
index 0000000..d782c18
--- /dev/null
+++ b/install-info/tests/ii-0003-input-info-file
@@ -0,0 +1,15 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+START-INFO-DIR-ENTRY
+* Wildebeest: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0003-test b/install-info/tests/ii-0003-test
new file mode 100755
index 0000000..08b4b14
--- /dev/null
+++ b/install-info/tests/ii-0003-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii03-XXXXXXXX`
+cp ${testdir}/ii-0003-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} ${testdir}/ii-0003-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0003-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0004-expected-dir-file b/install-info/tests/ii-0004-expected-dir-file
new file mode 100644
index 0000000..09fa8de
--- /dev/null
+++ b/install-info/tests/ii-0004-expected-dir-file
@@ -0,0 +1,28 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). Wildebeest native to Africa.
+
+Antlered Animals
+* Deer: (deer). Ruminent antlered mammal.
+* Wildebeest: (gnu). Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0004-input-dir-file b/install-info/tests/ii-0004-input-dir-file
new file mode 100644
index 0000000..42590ac
--- /dev/null
+++ b/install-info/tests/ii-0004-input-dir-file
@@ -0,0 +1,26 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+
+Antlered Animals
+* Deer: (deer). Ruminent antlered mammal.
diff --git a/install-info/tests/ii-0004-input-info-file b/install-info/tests/ii-0004-input-info-file
new file mode 100644
index 0000000..10b3896
--- /dev/null
+++ b/install-info/tests/ii-0004-input-info-file
@@ -0,0 +1,16 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+INFO-DIR-SECTION Antlered Animals
+START-INFO-DIR-ENTRY
+* Wildebeest: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0004-test b/install-info/tests/ii-0004-test
new file mode 100755
index 0000000..96d60d1
--- /dev/null
+++ b/install-info/tests/ii-0004-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii04-XXXXXXXX`
+cp ${testdir}/ii-0004-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} ${testdir}/ii-0004-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0004-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0005-expected-dir-file b/install-info/tests/ii-0005-expected-dir-file
new file mode 100644
index 0000000..dcb6f46
--- /dev/null
+++ b/install-info/tests/ii-0005-expected-dir-file
@@ -0,0 +1,27 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). Wildebeest native to Africa.
+
+Antlered Animals
+* Wildebeest: (gnu). Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0005-input-dir-file b/install-info/tests/ii-0005-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0005-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0005-input-info-file b/install-info/tests/ii-0005-input-info-file
new file mode 100644
index 0000000..10b3896
--- /dev/null
+++ b/install-info/tests/ii-0005-input-info-file
@@ -0,0 +1,16 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+INFO-DIR-SECTION Antlered Animals
+START-INFO-DIR-ENTRY
+* Wildebeest: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0005-test b/install-info/tests/ii-0005-test
new file mode 100755
index 0000000..5f139c1
--- /dev/null
+++ b/install-info/tests/ii-0005-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii05-XXXXXXXX`
+cp ${testdir}/ii-0005-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} ${testdir}/ii-0005-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0005-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0006-expected-dir-file b/install-info/tests/ii-0006-expected-dir-file
new file mode 100644
index 0000000..5024593
--- /dev/null
+++ b/install-info/tests/ii-0006-expected-dir-file
@@ -0,0 +1,24 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* gnu: (gnu). Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0006-input-dir-file b/install-info/tests/ii-0006-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0006-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0006-input-info-file b/install-info/tests/ii-0006-input-info-file
new file mode 100644
index 0000000..bf98436
--- /dev/null
+++ b/install-info/tests/ii-0006-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0006-test b/install-info/tests/ii-0006-test
new file mode 100755
index 0000000..78893dc
--- /dev/null
+++ b/install-info/tests/ii-0006-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii06-XXXXXXXX`
+cp ${testdir}/ii-0006-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} ${testdir}/ii-0006-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0006-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0007-expected-dir-file b/install-info/tests/ii-0007-expected-dir-file
new file mode 100644
index 0000000..f944e81
--- /dev/null
+++ b/install-info/tests/ii-0007-expected-dir-file
@@ -0,0 +1,25 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). Wildebeest native to Africa.
+* Hippopotamus: (hippo). A large semi-aquatic African mammal.
diff --git a/install-info/tests/ii-0007-input-dir-file b/install-info/tests/ii-0007-input-dir-file
new file mode 100644
index 0000000..a23460e
--- /dev/null
+++ b/install-info/tests/ii-0007-input-dir-file
@@ -0,0 +1,24 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Hippopotamus: (hippo). A large semi-aquatic African mammal.
diff --git a/install-info/tests/ii-0007-input-info-file b/install-info/tests/ii-0007-input-info-file
new file mode 100644
index 0000000..993920b
--- /dev/null
+++ b/install-info/tests/ii-0007-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0007-test b/install-info/tests/ii-0007-test
new file mode 100755
index 0000000..0f84af1
--- /dev/null
+++ b/install-info/tests/ii-0007-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii07-XXXXXXXX`
+cp ${testdir}/ii-0007-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} ${testdir}/ii-0007-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0007-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0008-expected-dir-file b/install-info/tests/ii-0008-expected-dir-file
new file mode 100644
index 0000000..dbb0b24
--- /dev/null
+++ b/install-info/tests/ii-0008-expected-dir-file
@@ -0,0 +1,25 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). Large hooved animal native to the African
+ savannah.
diff --git a/install-info/tests/ii-0008-input-dir-file b/install-info/tests/ii-0008-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0008-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0008-input-info-file b/install-info/tests/ii-0008-input-info-file
new file mode 100644
index 0000000..053a774
--- /dev/null
+++ b/install-info/tests/ii-0008-input-info-file
@@ -0,0 +1,12 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Large hooved animal native to the African
+ savannah.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0008-test b/install-info/tests/ii-0008-test
new file mode 100755
index 0000000..ff650e8
--- /dev/null
+++ b/install-info/tests/ii-0008-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii08-XXXXXXXX`
+cp ${testdir}/ii-0008-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} ${testdir}/ii-0008-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0008-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0009-expected-dir-file b/install-info/tests/ii-0009-expected-dir-file
new file mode 100644
index 0000000..bdcca6d
--- /dev/null
+++ b/install-info/tests/ii-0009-expected-dir-file
@@ -0,0 +1,24 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0009-input-dir-file b/install-info/tests/ii-0009-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0009-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0009-input-info-file b/install-info/tests/ii-0009-input-info-file
new file mode 100644
index 0000000..bbcf824
--- /dev/null
+++ b/install-info/tests/ii-0009-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0009-test b/install-info/tests/ii-0009-test
new file mode 100755
index 0000000..9280d9b
--- /dev/null
+++ b/install-info/tests/ii-0009-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii09-XXXXXXXX`
+cp ${testdir}/ii-0009-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} ${testdir}/ii-0009-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0009-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0010-expected-dir-file b/install-info/tests/ii-0010-expected-dir-file
new file mode 100644
index 0000000..dbb0b24
--- /dev/null
+++ b/install-info/tests/ii-0010-expected-dir-file
@@ -0,0 +1,25 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). Large hooved animal native to the African
+ savannah.
diff --git a/install-info/tests/ii-0010-input-dir-file b/install-info/tests/ii-0010-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0010-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0010-input-info-file b/install-info/tests/ii-0010-input-info-file
new file mode 100644
index 0000000..417a763
--- /dev/null
+++ b/install-info/tests/ii-0010-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Large hooved animal native to the African savannah.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0010-test b/install-info/tests/ii-0010-test
new file mode 100755
index 0000000..ba8666b
--- /dev/null
+++ b/install-info/tests/ii-0010-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii10-XXXXXXXX`
+cp ${testdir}/ii-0010-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} ${testdir}/ii-0010-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0010-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0011-expected-dir-file b/install-info/tests/ii-0011-expected-dir-file
new file mode 100644
index 0000000..4a5fa11
--- /dev/null
+++ b/install-info/tests/ii-0011-expected-dir-file
@@ -0,0 +1,24 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). Large hooved animal native to the African savannah.
diff --git a/install-info/tests/ii-0011-input-dir-file b/install-info/tests/ii-0011-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0011-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0011-input-info-file b/install-info/tests/ii-0011-input-info-file
new file mode 100644
index 0000000..417a763
--- /dev/null
+++ b/install-info/tests/ii-0011-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Large hooved animal native to the African savannah.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0011-test b/install-info/tests/ii-0011-test
new file mode 100755
index 0000000..bf094a8
--- /dev/null
+++ b/install-info/tests/ii-0011-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii11-XXXXXXXX`
+cp ${testdir}/ii-0011-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} --no-indent ${testdir}/ii-0011-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0011-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0012-expected-dir-file b/install-info/tests/ii-0012-expected-dir-file
new file mode 100644
index 0000000..dbb0b24
--- /dev/null
+++ b/install-info/tests/ii-0012-expected-dir-file
@@ -0,0 +1,25 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). Large hooved animal native to the African
+ savannah.
diff --git a/install-info/tests/ii-0012-input-dir-file b/install-info/tests/ii-0012-input-dir-file
new file mode 100644
index 0000000..92b0058
--- /dev/null
+++ b/install-info/tests/ii-0012-input-dir-file
@@ -0,0 +1,24 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). Large hooved Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0012-input-info-file b/install-info/tests/ii-0012-input-info-file
new file mode 100644
index 0000000..417a763
--- /dev/null
+++ b/install-info/tests/ii-0012-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Large hooved animal native to the African savannah.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0012-test b/install-info/tests/ii-0012-test
new file mode 100755
index 0000000..21433c2
--- /dev/null
+++ b/install-info/tests/ii-0012-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii12-XXXXXXXX`
+cp ${testdir}/ii-0012-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} ${testdir}/ii-0012-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0012-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0013-expected-dir-file b/install-info/tests/ii-0013-expected-dir-file
new file mode 100644
index 0000000..92b0058
--- /dev/null
+++ b/install-info/tests/ii-0013-expected-dir-file
@@ -0,0 +1,24 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). Large hooved Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0013-input-dir-file b/install-info/tests/ii-0013-input-dir-file
new file mode 100644
index 0000000..92b0058
--- /dev/null
+++ b/install-info/tests/ii-0013-input-dir-file
@@ -0,0 +1,24 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). Large hooved Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0013-input-info-file b/install-info/tests/ii-0013-input-info-file
new file mode 100644
index 0000000..6a3c6fc
--- /dev/null
+++ b/install-info/tests/ii-0013-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0013-test b/install-info/tests/ii-0013-test
new file mode 100755
index 0000000..1e74235
--- /dev/null
+++ b/install-info/tests/ii-0013-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii13-XXXXXXXX`
+cp ${testdir}/ii-0013-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} --keep-old ${testdir}/ii-0013-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0013-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0014-expected-dir-file b/install-info/tests/ii-0014-expected-dir-file
new file mode 100644
index 0000000..8d60946
--- /dev/null
+++ b/install-info/tests/ii-0014-expected-dir-file
@@ -0,0 +1,24 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). Large hooved animal native to Africa.
diff --git a/install-info/tests/ii-0014-input-dir-file b/install-info/tests/ii-0014-input-dir-file
new file mode 100644
index 0000000..80a498d
--- /dev/null
+++ b/install-info/tests/ii-0014-input-dir-file
@@ -0,0 +1,25 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). A large hooved Wildebeest native to the
+ African savannah.
diff --git a/install-info/tests/ii-0014-input-info-file b/install-info/tests/ii-0014-input-info-file
new file mode 100644
index 0000000..66689fc
--- /dev/null
+++ b/install-info/tests/ii-0014-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Large hooved animal native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0014-test b/install-info/tests/ii-0014-test
new file mode 100755
index 0000000..8c7d194
--- /dev/null
+++ b/install-info/tests/ii-0014-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii14-XXXXXXXX`
+cp ${testdir}/ii-0014-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} ${testdir}/ii-0014-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0014-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0015-expected-dir-file b/install-info/tests/ii-0015-expected-dir-file
new file mode 100644
index 0000000..dbb0b24
--- /dev/null
+++ b/install-info/tests/ii-0015-expected-dir-file
@@ -0,0 +1,25 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). Large hooved animal native to the African
+ savannah.
diff --git a/install-info/tests/ii-0015-input-dir-file b/install-info/tests/ii-0015-input-dir-file
new file mode 100644
index 0000000..bdcca6d
--- /dev/null
+++ b/install-info/tests/ii-0015-input-dir-file
@@ -0,0 +1,24 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0015-input-info-file b/install-info/tests/ii-0015-input-info-file
new file mode 100644
index 0000000..3625504
--- /dev/null
+++ b/install-info/tests/ii-0015-input-info-file
@@ -0,0 +1,12 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Large hooved animal native to the African
+ savannah.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0015-test b/install-info/tests/ii-0015-test
new file mode 100755
index 0000000..2462253
--- /dev/null
+++ b/install-info/tests/ii-0015-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii15-XXXXXXXX`
+cp ${testdir}/ii-0015-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} ${testdir}/ii-0015-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0015-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0016-expected-dir-file b/install-info/tests/ii-0016-expected-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0016-expected-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0016-input-dir-file b/install-info/tests/ii-0016-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0016-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0016-input-info-file b/install-info/tests/ii-0016-input-info-file
new file mode 100644
index 0000000..57f05a6
--- /dev/null
+++ b/install-info/tests/ii-0016-input-info-file
@@ -0,0 +1,7 @@
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0016-test b/install-info/tests/ii-0016-test
new file mode 100755
index 0000000..5de10b0
--- /dev/null
+++ b/install-info/tests/ii-0016-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii16-XXXXXXXX`
+cp ${testdir}/ii-0016-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} --silent ${testdir}/ii-0016-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0016-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0017-expected-dir-file b/install-info/tests/ii-0017-expected-dir-file
new file mode 100644
index 0000000..60d56da
--- /dev/null
+++ b/install-info/tests/ii-0017-expected-dir-file
@@ -0,0 +1,18 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Gnu: (gnu). Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0017-input-dir-file b/install-info/tests/ii-0017-input-dir-file
new file mode 100644
index 0000000..d2f31fd
--- /dev/null
+++ b/install-info/tests/ii-0017-input-dir-file
@@ -0,0 +1,15 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
diff --git a/install-info/tests/ii-0017-input-info-file b/install-info/tests/ii-0017-input-info-file
new file mode 100644
index 0000000..993920b
--- /dev/null
+++ b/install-info/tests/ii-0017-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0017-test b/install-info/tests/ii-0017-test
new file mode 100755
index 0000000..6ee7cc8
--- /dev/null
+++ b/install-info/tests/ii-0017-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii17-XXXXXXXX`
+cp ${testdir}/ii-0017-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} ${testdir}/ii-0017-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0017-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0018-input-dir-file b/install-info/tests/ii-0018-input-dir-file
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/install-info/tests/ii-0018-input-dir-file
diff --git a/install-info/tests/ii-0018-input-info-file b/install-info/tests/ii-0018-input-info-file
new file mode 100644
index 0000000..993920b
--- /dev/null
+++ b/install-info/tests/ii-0018-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0018-test b/install-info/tests/ii-0018-test
new file mode 100755
index 0000000..4ce56aa
--- /dev/null
+++ b/install-info/tests/ii-0018-test
@@ -0,0 +1,25 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii18-XXXXXXXX`
+cp ${testdir}/ii-0018-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} ${testdir}/ii-0018-input-info-file $outputdirfile 2>/dev/null
+retval=$?
+if [ "x$retval" != "x1" ]; then
+ exit $retval
+fi
+
+rm -f $outputdirfile
+exit 0
diff --git a/install-info/tests/ii-0019-input-dir-file b/install-info/tests/ii-0019-input-dir-file
new file mode 100644
index 0000000..139597f
--- /dev/null
+++ b/install-info/tests/ii-0019-input-dir-file
@@ -0,0 +1,2 @@
+
+
diff --git a/install-info/tests/ii-0019-input-info-file b/install-info/tests/ii-0019-input-info-file
new file mode 100644
index 0000000..993920b
--- /dev/null
+++ b/install-info/tests/ii-0019-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0019-test b/install-info/tests/ii-0019-test
new file mode 100755
index 0000000..6cbd7e6
--- /dev/null
+++ b/install-info/tests/ii-0019-test
@@ -0,0 +1,25 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii19-XXXXXXXX`
+cp ${testdir}/ii-0019-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} ${testdir}/ii-0019-input-info-file $outputdirfile 2>/dev/null
+retval=$?
+if [ "x$retval" != "x1" ]; then
+ exit $retval
+fi
+
+rm -f $outputdirfile
+exit 0
diff --git a/install-info/tests/ii-0020-expected-dir-file b/install-info/tests/ii-0020-expected-dir-file
new file mode 100644
index 0000000..a621b56
--- /dev/null
+++ b/install-info/tests/ii-0020-expected-dir-file
@@ -0,0 +1,27 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+
+Miscellaneous
+* ii-0020-input-info-file: (ii-0020-input-info-file).
+ Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0020-input-dir-file b/install-info/tests/ii-0020-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0020-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0020-input-info-file b/install-info/tests/ii-0020-input-info-file
new file mode 100644
index 0000000..57f05a6
--- /dev/null
+++ b/install-info/tests/ii-0020-input-info-file
@@ -0,0 +1,7 @@
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0020-test b/install-info/tests/ii-0020-test
new file mode 100755
index 0000000..d0dd7f4
--- /dev/null
+++ b/install-info/tests/ii-0020-test
@@ -0,0 +1,27 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii20-XXXXXXXX`
+cp ${testdir}/ii-0020-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+${install_info} --description='Wildebeest native to Africa.' ${testdir}/ii-0020-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0020-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0021-expected-dir-file b/install-info/tests/ii-0021-expected-dir-file
new file mode 100644
index 0000000..bdf71bc
--- /dev/null
+++ b/install-info/tests/ii-0021-expected-dir-file
@@ -0,0 +1,25 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* ii-0021-input-info-file: (ii-0021-input-info-file).
+ Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0021-input-dir-file b/install-info/tests/ii-0021-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0021-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0021-input-info-file b/install-info/tests/ii-0021-input-info-file
new file mode 100644
index 0000000..57f05a6
--- /dev/null
+++ b/install-info/tests/ii-0021-input-info-file
@@ -0,0 +1,7 @@
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0021-test b/install-info/tests/ii-0021-test
new file mode 100755
index 0000000..5e7a39f
--- /dev/null
+++ b/install-info/tests/ii-0021-test
@@ -0,0 +1,27 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii21-XXXXXXXX`
+cp ${testdir}/ii-0021-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+${install_info} --section="Animals" --description='Wildebeest native to Africa.' ${testdir}/ii-0021-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0021-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0022-expected-dir-file b/install-info/tests/ii-0022-expected-dir-file
new file mode 100644
index 0000000..60e2c2d
--- /dev/null
+++ b/install-info/tests/ii-0022-expected-dir-file
@@ -0,0 +1,27 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Hippopotamus: (hippo). A large semi-aquatic African mammal.
+
+Miscellaneous
+* Gnu: (gnu).
diff --git a/install-info/tests/ii-0022-input-dir-file b/install-info/tests/ii-0022-input-dir-file
new file mode 100644
index 0000000..a23460e
--- /dev/null
+++ b/install-info/tests/ii-0022-input-dir-file
@@ -0,0 +1,24 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Hippopotamus: (hippo). A large semi-aquatic African mammal.
diff --git a/install-info/tests/ii-0022-input-info-file b/install-info/tests/ii-0022-input-info-file
new file mode 100644
index 0000000..57f05a6
--- /dev/null
+++ b/install-info/tests/ii-0022-input-info-file
@@ -0,0 +1,7 @@
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0022-test b/install-info/tests/ii-0022-test
new file mode 100755
index 0000000..6eb61f2
--- /dev/null
+++ b/install-info/tests/ii-0022-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii22-XXXXXXXX`
+cp ${testdir}/ii-0022-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} --name='* Gnu: (gnu).' ${testdir}/ii-0022-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0022-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0023-expected-dir-file b/install-info/tests/ii-0023-expected-dir-file
new file mode 100644
index 0000000..6b21b0c
--- /dev/null
+++ b/install-info/tests/ii-0023-expected-dir-file
@@ -0,0 +1,26 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+
+Miscellaneous
+* Gnu: (ii-0023-input-info-file).
diff --git a/install-info/tests/ii-0023-input-dir-file b/install-info/tests/ii-0023-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0023-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0023-input-info-file b/install-info/tests/ii-0023-input-info-file
new file mode 100644
index 0000000..57f05a6
--- /dev/null
+++ b/install-info/tests/ii-0023-input-info-file
@@ -0,0 +1,7 @@
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0023-test b/install-info/tests/ii-0023-test
new file mode 100755
index 0000000..759bf70
--- /dev/null
+++ b/install-info/tests/ii-0023-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii23-XXXXXXXX`
+cp ${testdir}/ii-0023-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} --name="Gnu" ${testdir}/ii-0023-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0023-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0024-expected-dir-file b/install-info/tests/ii-0024-expected-dir-file
new file mode 100644
index 0000000..84cecbf
--- /dev/null
+++ b/install-info/tests/ii-0024-expected-dir-file
@@ -0,0 +1,26 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+
+Antlered Animals
+* Gnu: (gnu). Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0024-input-dir-file b/install-info/tests/ii-0024-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0024-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0024-input-info-file b/install-info/tests/ii-0024-input-info-file
new file mode 100644
index 0000000..993920b
--- /dev/null
+++ b/install-info/tests/ii-0024-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0024-test b/install-info/tests/ii-0024-test
new file mode 100755
index 0000000..077a335
--- /dev/null
+++ b/install-info/tests/ii-0024-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii24-XXXXXXXX`
+cp ${testdir}/ii-0024-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} --section="Antlered Animals" ${testdir}/ii-0024-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0024-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0025-expected-dir-file b/install-info/tests/ii-0025-expected-dir-file
new file mode 100644
index 0000000..bdcca6d
--- /dev/null
+++ b/install-info/tests/ii-0025-expected-dir-file
@@ -0,0 +1,24 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0025-input-dir-file b/install-info/tests/ii-0025-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0025-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0025-input-info-file b/install-info/tests/ii-0025-input-info-file
new file mode 100644
index 0000000..af26df9
--- /dev/null
+++ b/install-info/tests/ii-0025-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Antlered Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0025-test b/install-info/tests/ii-0025-test
new file mode 100755
index 0000000..d8df4ac
--- /dev/null
+++ b/install-info/tests/ii-0025-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii25-XXXXXXXX`
+cp ${testdir}/ii-0025-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} --section="Animals" ${testdir}/ii-0025-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0025-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0026-expected-dir-file b/install-info/tests/ii-0026-expected-dir-file
new file mode 100644
index 0000000..705b840
--- /dev/null
+++ b/install-info/tests/ii-0026-expected-dir-file
@@ -0,0 +1,24 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). Wildebeest native to the African savannah.
diff --git a/install-info/tests/ii-0026-input-dir-file b/install-info/tests/ii-0026-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0026-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0026-input-info-file b/install-info/tests/ii-0026-input-info-file
new file mode 100644
index 0000000..993920b
--- /dev/null
+++ b/install-info/tests/ii-0026-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0026-test b/install-info/tests/ii-0026-test
new file mode 100755
index 0000000..b962a6a
--- /dev/null
+++ b/install-info/tests/ii-0026-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii26-XXXXXXXX`
+cp ${testdir}/ii-0026-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} --entry="* Gnu: (gnu). Wildebeest native to the African savannah." ${testdir}/ii-0026-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0026-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0027-expected-dir-file b/install-info/tests/ii-0027-expected-dir-file
new file mode 100644
index 0000000..0e8dc7f
--- /dev/null
+++ b/install-info/tests/ii-0027-expected-dir-file
@@ -0,0 +1,26 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+
+Antlered Animals
+* Gnu: (gnu). Wildebeest native to the African savannah.
diff --git a/install-info/tests/ii-0027-input-dir-file b/install-info/tests/ii-0027-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0027-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0027-input-info-file b/install-info/tests/ii-0027-input-info-file
new file mode 100644
index 0000000..993920b
--- /dev/null
+++ b/install-info/tests/ii-0027-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0027-test b/install-info/tests/ii-0027-test
new file mode 100755
index 0000000..b90e53a
--- /dev/null
+++ b/install-info/tests/ii-0027-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii27-XXXXXXXX`
+cp ${testdir}/ii-0027-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} --entry="* Gnu: (gnu). Wildebeest native to the African savannah." --section="Antlered Animals" ${testdir}/ii-0027-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0027-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0028-expected-dir-file b/install-info/tests/ii-0028-expected-dir-file
new file mode 100644
index 0000000..b08ed9e
--- /dev/null
+++ b/install-info/tests/ii-0028-expected-dir-file
@@ -0,0 +1,24 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Wildebeest: (gnu). Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0028-input-dir-file b/install-info/tests/ii-0028-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0028-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0028-input-info-file b/install-info/tests/ii-0028-input-info-file
new file mode 100644
index 0000000..993920b
--- /dev/null
+++ b/install-info/tests/ii-0028-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0028-test b/install-info/tests/ii-0028-test
new file mode 100755
index 0000000..ff61258
--- /dev/null
+++ b/install-info/tests/ii-0028-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii28-XXXXXXXX`
+cp ${testdir}/ii-0028-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} --name="* Wildebeest: (gnu)." ${testdir}/ii-0028-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0028-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0029-expected-dir-file b/install-info/tests/ii-0029-expected-dir-file
new file mode 100644
index 0000000..3321a97
--- /dev/null
+++ b/install-info/tests/ii-0029-expected-dir-file
@@ -0,0 +1,25 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Wildebeest: (ii-0029-input-info-file).
+ Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0029-input-dir-file b/install-info/tests/ii-0029-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0029-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0029-input-info-file b/install-info/tests/ii-0029-input-info-file
new file mode 100644
index 0000000..993920b
--- /dev/null
+++ b/install-info/tests/ii-0029-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0029-test b/install-info/tests/ii-0029-test
new file mode 100755
index 0000000..065e7fb
--- /dev/null
+++ b/install-info/tests/ii-0029-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii29-XXXXXXXX`
+cp ${testdir}/ii-0029-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} --name="Wildebeest" ${testdir}/ii-0029-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0029-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0030-expected-dir-file b/install-info/tests/ii-0030-expected-dir-file
new file mode 100644
index 0000000..705b840
--- /dev/null
+++ b/install-info/tests/ii-0030-expected-dir-file
@@ -0,0 +1,24 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). Wildebeest native to the African savannah.
diff --git a/install-info/tests/ii-0030-input-dir-file b/install-info/tests/ii-0030-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0030-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0030-input-info-file b/install-info/tests/ii-0030-input-info-file
new file mode 100644
index 0000000..993920b
--- /dev/null
+++ b/install-info/tests/ii-0030-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0030-test b/install-info/tests/ii-0030-test
new file mode 100755
index 0000000..022f461
--- /dev/null
+++ b/install-info/tests/ii-0030-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii30-XXXXXXXX`
+cp ${testdir}/ii-0030-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} --description="Wildebeest native to the African savannah." ${testdir}/ii-0030-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0030-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0031-expected-dir-file b/install-info/tests/ii-0031-expected-dir-file
new file mode 100644
index 0000000..272fc0e
--- /dev/null
+++ b/install-info/tests/ii-0031-expected-dir-file
@@ -0,0 +1,24 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Wildebeest: (gnu). Wildebeest native to the African savannah.
diff --git a/install-info/tests/ii-0031-input-dir-file b/install-info/tests/ii-0031-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0031-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0031-input-info-file b/install-info/tests/ii-0031-input-info-file
new file mode 100644
index 0000000..993920b
--- /dev/null
+++ b/install-info/tests/ii-0031-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0031-test b/install-info/tests/ii-0031-test
new file mode 100755
index 0000000..d6dbf5d
--- /dev/null
+++ b/install-info/tests/ii-0031-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii31-XXXXXXXX`
+cp ${testdir}/ii-0031-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} --name="* Wildebeest: (gnu)." --description="Wildebeest native to the African savannah." ${testdir}/ii-0031-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0031-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0032-expected-dir-file b/install-info/tests/ii-0032-expected-dir-file
new file mode 100644
index 0000000..bdcca6d
--- /dev/null
+++ b/install-info/tests/ii-0032-expected-dir-file
@@ -0,0 +1,24 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0032-input-dir-file b/install-info/tests/ii-0032-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0032-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0032-input-info-file b/install-info/tests/ii-0032-input-info-file
new file mode 100644
index 0000000..993920b
--- /dev/null
+++ b/install-info/tests/ii-0032-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0032-test b/install-info/tests/ii-0032-test
new file mode 100755
index 0000000..33e5c84
--- /dev/null
+++ b/install-info/tests/ii-0032-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii32-XXXXXXXX`
+cp ${testdir}/ii-0032-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} --regex='^Antlered Animals$' ${testdir}/ii-0032-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0032-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0033-expected-dir-file b/install-info/tests/ii-0033-expected-dir-file
new file mode 100644
index 0000000..cee1fc1
--- /dev/null
+++ b/install-info/tests/ii-0033-expected-dir-file
@@ -0,0 +1,26 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+
+Miscellaneous
+* Gnu: (gnu). Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0033-input-dir-file b/install-info/tests/ii-0033-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0033-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0033-input-info-file b/install-info/tests/ii-0033-input-info-file
new file mode 100644
index 0000000..1be6381
--- /dev/null
+++ b/install-info/tests/ii-0033-input-info-file
@@ -0,0 +1,10 @@
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0033-test b/install-info/tests/ii-0033-test
new file mode 100755
index 0000000..409806f
--- /dev/null
+++ b/install-info/tests/ii-0033-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii33-XXXXXXXX`
+cp ${testdir}/ii-0033-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} --regex='^Antlered Animals$' ${testdir}/ii-0033-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0033-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0034-expected-dir-file b/install-info/tests/ii-0034-expected-dir-file
new file mode 100644
index 0000000..bdcca6d
--- /dev/null
+++ b/install-info/tests/ii-0034-expected-dir-file
@@ -0,0 +1,24 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0034-input-dir-file b/install-info/tests/ii-0034-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0034-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0034-input-info-file b/install-info/tests/ii-0034-input-info-file
new file mode 100644
index 0000000..1be6381
--- /dev/null
+++ b/install-info/tests/ii-0034-input-info-file
@@ -0,0 +1,10 @@
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0034-test b/install-info/tests/ii-0034-test
new file mode 100755
index 0000000..17fe70c
--- /dev/null
+++ b/install-info/tests/ii-0034-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii34-XXXXXXXX`
+cp ${testdir}/ii-0034-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} --regex='^Antlered Animals$' --section="Animals" ${testdir}/ii-0034-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0034-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0035-expected-dir-file b/install-info/tests/ii-0035-expected-dir-file
new file mode 100644
index 0000000..bdcca6d
--- /dev/null
+++ b/install-info/tests/ii-0035-expected-dir-file
@@ -0,0 +1,24 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0035-input-dir-file b/install-info/tests/ii-0035-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0035-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0035-input-info-file b/install-info/tests/ii-0035-input-info-file
new file mode 100644
index 0000000..af26df9
--- /dev/null
+++ b/install-info/tests/ii-0035-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Antlered Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0035-test b/install-info/tests/ii-0035-test
new file mode 100755
index 0000000..d2725c8
--- /dev/null
+++ b/install-info/tests/ii-0035-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii35-XXXXXXXX`
+cp ${testdir}/ii-0035-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} --regex='^Antlered Animals$' --section="Animals" ${testdir}/ii-0035-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0035-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0036-expected-dir-file b/install-info/tests/ii-0036-expected-dir-file
new file mode 100644
index 0000000..bdcca6d
--- /dev/null
+++ b/install-info/tests/ii-0036-expected-dir-file
@@ -0,0 +1,24 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0036-input-dir-file b/install-info/tests/ii-0036-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0036-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0036-input-info-file b/install-info/tests/ii-0036-input-info-file
new file mode 100644
index 0000000..af26df9
--- /dev/null
+++ b/install-info/tests/ii-0036-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Antlered Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0036-test b/install-info/tests/ii-0036-test
new file mode 100755
index 0000000..aeef39a
--- /dev/null
+++ b/install-info/tests/ii-0036-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii36-XXXXXXXX`
+cp ${testdir}/ii-0036-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} --regex='[Aa]nimal[s]' ${testdir}/ii-0036-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0036-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0037-expected-dir-file b/install-info/tests/ii-0037-expected-dir-file
new file mode 100644
index 0000000..bdcca6d
--- /dev/null
+++ b/install-info/tests/ii-0037-expected-dir-file
@@ -0,0 +1,24 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0037-input-dir-file b/install-info/tests/ii-0037-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0037-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0037-input-info-file b/install-info/tests/ii-0037-input-info-file
new file mode 100644
index 0000000..af26df9
--- /dev/null
+++ b/install-info/tests/ii-0037-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Antlered Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0037-test b/install-info/tests/ii-0037-test
new file mode 100755
index 0000000..809fae3
--- /dev/null
+++ b/install-info/tests/ii-0037-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii37-XXXXXXXX`
+cp ${testdir}/ii-0037-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} --section '^Antlered Animals$' Animals ${testdir}/ii-0037-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0037-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0038-expected-dir-file b/install-info/tests/ii-0038-expected-dir-file
new file mode 100644
index 0000000..8903848
--- /dev/null
+++ b/install-info/tests/ii-0038-expected-dir-file
@@ -0,0 +1,29 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). Wildebeest native to Africa.
+* Wildebeest: (gnu). Wildebeest native to the African savannah.
+
+Antlered Animals
+* Gnu: (gnu). Wildebeest native to Africa.
+* Wildebeest: (gnu). Wildebeest native to the African savannah.
diff --git a/install-info/tests/ii-0038-input-dir-file b/install-info/tests/ii-0038-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0038-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0038-input-info-file b/install-info/tests/ii-0038-input-info-file
new file mode 100644
index 0000000..57f05a6
--- /dev/null
+++ b/install-info/tests/ii-0038-input-info-file
@@ -0,0 +1,7 @@
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0038-test b/install-info/tests/ii-0038-test
new file mode 100755
index 0000000..82fb29c
--- /dev/null
+++ b/install-info/tests/ii-0038-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii38-XXXXXXXX`
+cp ${testdir}/ii-0038-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} --section="Animals" --section="Antlered Animals" --entry="* Gnu: (gnu). Wildebeest native to Africa." --entry="* Wildebeest: (gnu). Wildebeest native to the African savannah." ${testdir}/ii-0038-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0038-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0039-expected-dir-file b/install-info/tests/ii-0039-expected-dir-file
new file mode 100644
index 0000000..b4bfcaf
--- /dev/null
+++ b/install-info/tests/ii-0039-expected-dir-file
@@ -0,0 +1,25 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). Wildebeest native to the African continent.
+ (this item contains disputed material).
diff --git a/install-info/tests/ii-0039-input-dir-file b/install-info/tests/ii-0039-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0039-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0039-input-info-file b/install-info/tests/ii-0039-input-info-file
new file mode 100644
index 0000000..993920b
--- /dev/null
+++ b/install-info/tests/ii-0039-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0039-test b/install-info/tests/ii-0039-test
new file mode 100755
index 0000000..4b49bc1
--- /dev/null
+++ b/install-info/tests/ii-0039-test
@@ -0,0 +1,29 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii39-XXXXXXXX`
+cp ${testdir}/ii-0039-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} --entry="* Gnu: (gnu). Wildebeest native to the African continent.
+ (this item contains disputed material)." --no-indent ${testdir}/ii-0039-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0039-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0040-expected-dir-file b/install-info/tests/ii-0040-expected-dir-file
new file mode 100644
index 0000000..5199b51
--- /dev/null
+++ b/install-info/tests/ii-0040-expected-dir-file
@@ -0,0 +1,24 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). A wildebeest native to the African savannah.
diff --git a/install-info/tests/ii-0040-input-dir-file b/install-info/tests/ii-0040-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0040-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0040-input-info-file b/install-info/tests/ii-0040-input-info-file
new file mode 100644
index 0000000..993920b
--- /dev/null
+++ b/install-info/tests/ii-0040-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0040-test b/install-info/tests/ii-0040-test
new file mode 100755
index 0000000..53a94c8
--- /dev/null
+++ b/install-info/tests/ii-0040-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii40-XXXXXXXX`
+cp ${testdir}/ii-0040-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} --name="* Gnu: (gnu)." --description="A wildebeest native to the African savannah." --no-indent ${testdir}/ii-0040-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0040-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0041-expected-dir-file.gz b/install-info/tests/ii-0041-expected-dir-file.gz
new file mode 100644
index 0000000..839b0f6
--- /dev/null
+++ b/install-info/tests/ii-0041-expected-dir-file.gz
Binary files differ
diff --git a/install-info/tests/ii-0041-input-dir-file.gz b/install-info/tests/ii-0041-input-dir-file.gz
new file mode 100644
index 0000000..4292ea1
--- /dev/null
+++ b/install-info/tests/ii-0041-input-dir-file.gz
Binary files differ
diff --git a/install-info/tests/ii-0041-input-info-file b/install-info/tests/ii-0041-input-info-file
new file mode 100644
index 0000000..993920b
--- /dev/null
+++ b/install-info/tests/ii-0041-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0041-test b/install-info/tests/ii-0041-test
new file mode 100755
index 0000000..daacc64
--- /dev/null
+++ b/install-info/tests/ii-0041-test
@@ -0,0 +1,32 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+tempfile=`mktemp ii41-XXXXXXXX`
+outputdirfile=$tempfile.gz
+cp ${testdir}/ii-0041-input-dir-file.gz $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+# when copying in distcheck, source will be readonly.
+chmod u+rw $outputdirfile || exit $?
+
+${install_info} ${testdir}/ii-0041-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+zdiff ${testdir}/ii-0041-expected-dir-file.gz $outputdirfile
+retval=$?
+
+rm -f $tempfile $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0042-expected-dir-file b/install-info/tests/ii-0042-expected-dir-file
new file mode 100644
index 0000000..56da8a6
--- /dev/null
+++ b/install-info/tests/ii-0042-expected-dir-file
@@ -0,0 +1,29 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animal Kingdom
+* Gnu: (gnu). Wildebeest native to Africa.
+
+Animalia
+* Gnu: (gnu). Wildebeest native to Africa.
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0042-input-dir-file b/install-info/tests/ii-0042-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0042-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0042-input-info-file b/install-info/tests/ii-0042-input-info-file
new file mode 100644
index 0000000..fddf82e
--- /dev/null
+++ b/install-info/tests/ii-0042-input-info-file
@@ -0,0 +1,15 @@
+INFO-DIR-SECTION Animalia
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+INFO-DIR-SECTION Animal Kingdom
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0042-test b/install-info/tests/ii-0042-test
new file mode 100755
index 0000000..97b3b1d
--- /dev/null
+++ b/install-info/tests/ii-0042-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii42-XXXXXXXX`
+cp ${testdir}/ii-0042-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} ${testdir}/ii-0042-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0042-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0043-expected-dir-file b/install-info/tests/ii-0043-expected-dir-file
new file mode 100644
index 0000000..9e98e05
--- /dev/null
+++ b/install-info/tests/ii-0043-expected-dir-file
@@ -0,0 +1,46 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Astronomy
+* Mars: (mars). Postcards from the Red Planet.
+
+Biology
+* Alien Autopsy: (mars). A biological account of an alien autopsy.
+
+Chemistry
+* Making Gold: (gold). How to turn lead into gold.
+
+Dentistry
+* On the Cheap: (dentistry). Do it yourself dentistry made easy.
+
+Education
+* Dog Training: (dogs). Teaching old dogs new tricks.
+
+Forestry
+* The Last Tree: (forest). Clear cutting practises in North America.
+
+Geography
+* The Dark Continent (africa). A complete and total history.
+
+History
+* The Fall of Proprietary Software: (gnu).
+ How the world came to reject slavery.
+
+Immunology
+* Beating the flu: (flu). Three simple steps to beating influenza.
+
+Jekyllism
+* Science Gone Mad (hyde). A personal account of self-medication.
diff --git a/install-info/tests/ii-0043-input-dir-file b/install-info/tests/ii-0043-input-dir-file
new file mode 100644
index 0000000..730e5fd
--- /dev/null
+++ b/install-info/tests/ii-0043-input-dir-file
@@ -0,0 +1,43 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Astronomy
+* Mars: (mars). Postcards from the Red Planet.
+
+Biology
+* Alien Autopsy: (mars). A biological account of an alien autopsy.
+
+Chemistry
+* Making Gold: (gold). How to turn lead into gold.
+
+Dentistry
+* On the Cheap: (dentistry). Do it yourself dentistry made easy.
+
+Education
+* Dog Training: (dogs). Teaching old dogs new tricks.
+
+Forestry
+* The Last Tree: (forest). Clear cutting practises in North America.
+
+History
+* The Fall of Proprietary Software: (gnu).
+ How the world came to reject slavery.
+
+Immunology
+* Beating the flu: (flu). Three simple steps to beating influenza.
+
+Jekyllism
+* Science Gone Mad (hyde). A personal account of self-medication.
diff --git a/install-info/tests/ii-0043-input-info-file b/install-info/tests/ii-0043-input-info-file
new file mode 100644
index 0000000..7ca1774
--- /dev/null
+++ b/install-info/tests/ii-0043-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Geography
+START-INFO-DIR-ENTRY
+* The Dark Continent (africa). A complete and total history.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0043-test b/install-info/tests/ii-0043-test
new file mode 100755
index 0000000..0641979
--- /dev/null
+++ b/install-info/tests/ii-0043-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii43-XXXXXXXX`
+cp ${testdir}/ii-0043-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} ${testdir}/ii-0043-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0043-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0044-expected-dir-file b/install-info/tests/ii-0044-expected-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0044-expected-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0044-input-dir-file b/install-info/tests/ii-0044-input-dir-file
new file mode 100644
index 0000000..e059420
--- /dev/null
+++ b/install-info/tests/ii-0044-input-dir-file
@@ -0,0 +1,25 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (ii-0044-input-info-file).
+ Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0044-input-info-file b/install-info/tests/ii-0044-input-info-file
new file mode 100644
index 0000000..993920b
--- /dev/null
+++ b/install-info/tests/ii-0044-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0044-test b/install-info/tests/ii-0044-test
new file mode 100755
index 0000000..900dc33
--- /dev/null
+++ b/install-info/tests/ii-0044-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii44-XXXXXXXX`
+cp ${testdir}/ii-0044-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} --remove ${testdir}/ii-0044-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0044-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0045-expected-dir-file b/install-info/tests/ii-0045-expected-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0045-expected-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0045-input-dir-file b/install-info/tests/ii-0045-input-dir-file
new file mode 100644
index 0000000..9794516
--- /dev/null
+++ b/install-info/tests/ii-0045-input-dir-file
@@ -0,0 +1,27 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (ii-0045-input-info-file).
+ Wildebeest native to Africa.
+* Wildebesst: (ii-0045-input-info-file).
+ Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0045-input-info-file b/install-info/tests/ii-0045-input-info-file
new file mode 100644
index 0000000..a85a30b
--- /dev/null
+++ b/install-info/tests/ii-0045-input-info-file
@@ -0,0 +1,12 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+* Wildebeest: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0045-test b/install-info/tests/ii-0045-test
new file mode 100755
index 0000000..ca468c6
--- /dev/null
+++ b/install-info/tests/ii-0045-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii45-XXXXXXXX`
+cp ${testdir}/ii-0045-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} --remove ${testdir}/ii-0045-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0045-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0046-expected-dir-file b/install-info/tests/ii-0046-expected-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0046-expected-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0046-input-dir-file b/install-info/tests/ii-0046-input-dir-file
new file mode 100644
index 0000000..bdcca6d
--- /dev/null
+++ b/install-info/tests/ii-0046-input-dir-file
@@ -0,0 +1,24 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
+* Gnu: (gnu). Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0046-test b/install-info/tests/ii-0046-test
new file mode 100755
index 0000000..840ef1b
--- /dev/null
+++ b/install-info/tests/ii-0046-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii46-XXXXXXXX`
+cp ${testdir}/ii-0046-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} --remove-exactly gnu $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0046-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0047-expected-dir-file b/install-info/tests/ii-0047-expected-dir-file
new file mode 100644
index 0000000..9615d75
--- /dev/null
+++ b/install-info/tests/ii-0047-expected-dir-file
@@ -0,0 +1,16 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
diff --git a/install-info/tests/ii-0047-input-dir-file b/install-info/tests/ii-0047-input-dir-file
new file mode 100644
index 0000000..d64698c
--- /dev/null
+++ b/install-info/tests/ii-0047-input-dir-file
@@ -0,0 +1,19 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Gnu: (ii-0047-input-info-file).
+ Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0047-input-info-file b/install-info/tests/ii-0047-input-info-file
new file mode 100644
index 0000000..993920b
--- /dev/null
+++ b/install-info/tests/ii-0047-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0047-test b/install-info/tests/ii-0047-test
new file mode 100755
index 0000000..4695ee1
--- /dev/null
+++ b/install-info/tests/ii-0047-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii47-XXXXXXXX`
+cp ${testdir}/ii-0047-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} --remove ${testdir}/ii-0047-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0047-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0048-expected-dir-file b/install-info/tests/ii-0048-expected-dir-file
new file mode 100644
index 0000000..60aed1d
--- /dev/null
+++ b/install-info/tests/ii-0048-expected-dir-file
@@ -0,0 +1,17 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
diff --git a/install-info/tests/ii-0048-input-dir-file b/install-info/tests/ii-0048-input-dir-file
new file mode 100644
index 0000000..0fe0ae6
--- /dev/null
+++ b/install-info/tests/ii-0048-input-dir-file
@@ -0,0 +1,19 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Gnu: (ii-0048-input-info-file).
+ Wildebeest native to Africa.
diff --git a/install-info/tests/ii-0048-input-info-file b/install-info/tests/ii-0048-input-info-file
new file mode 100644
index 0000000..993920b
--- /dev/null
+++ b/install-info/tests/ii-0048-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0048-test b/install-info/tests/ii-0048-test
new file mode 100755
index 0000000..946c648
--- /dev/null
+++ b/install-info/tests/ii-0048-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii48-XXXXXXXX`
+cp ${testdir}/ii-0048-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} --remove --keep-old ${testdir}/ii-0048-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0048-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0049-expected-dir-file b/install-info/tests/ii-0049-expected-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0049-expected-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0049-input-dir-file b/install-info/tests/ii-0049-input-dir-file
new file mode 100644
index 0000000..813b548
--- /dev/null
+++ b/install-info/tests/ii-0049-input-dir-file
@@ -0,0 +1,23 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* Aardvark: (aardvark). Medium-sized African mammal.
+* Baboon: (baboon). A monkey from Africa.
+* Chameleon: (chameleon). A lizard from Africa.
+* Deer: (deer). Ruminent antlered mammal.
+* Emu: (emu). A flightless bird from Australia.
+* Fisher: (fisher). A marten from North America.
diff --git a/install-info/tests/ii-0049-input-info-file b/install-info/tests/ii-0049-input-info-file
new file mode 100644
index 0000000..993920b
--- /dev/null
+++ b/install-info/tests/ii-0049-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0049-test b/install-info/tests/ii-0049-test
new file mode 100755
index 0000000..11c8242
--- /dev/null
+++ b/install-info/tests/ii-0049-test
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii49-XXXXXXXX`
+cp ${testdir}/ii-0049-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+${install_info} --remove ${testdir}/ii-0049-input-info-file $outputdirfile 2>/dev/null
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0049-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0050-expected-dir-file.gz b/install-info/tests/ii-0050-expected-dir-file.gz
new file mode 100644
index 0000000..75e222e
--- /dev/null
+++ b/install-info/tests/ii-0050-expected-dir-file.gz
Binary files differ
diff --git a/install-info/tests/ii-0050-input-dir-file.gz b/install-info/tests/ii-0050-input-dir-file.gz
new file mode 100644
index 0000000..1bbe099
--- /dev/null
+++ b/install-info/tests/ii-0050-input-dir-file.gz
Binary files differ
diff --git a/install-info/tests/ii-0050-input-info-file b/install-info/tests/ii-0050-input-info-file
new file mode 100644
index 0000000..993920b
--- /dev/null
+++ b/install-info/tests/ii-0050-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* Gnu: (gnu). Wildebeest native to Africa.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest (plural, wildebeest or wildebeests), also called the gnu (pronounced /ˈnuË/ or /ˈnjuË/), is an antelope of the genus Connochaetes. It is a hooved (ungulate) mammal. (Taken from wikepedia.)
diff --git a/install-info/tests/ii-0050-test b/install-info/tests/ii-0050-test
new file mode 100755
index 0000000..8a1bbb4
--- /dev/null
+++ b/install-info/tests/ii-0050-test
@@ -0,0 +1,33 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+tempfile=`mktemp ii50-XXXXXXXX`
+outputdirfile=$tempfile.gz
+cp ${testdir}/ii-0050-input-dir-file.gz $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+
+# when copying in distcheck, source will be readonly.
+chmod u+rw $outputdirfile || exit $?
+
+${install_info} --remove ${testdir}/ii-0050-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+zdiff ${testdir}/ii-0050-expected-dir-file.gz $outputdirfile
+retval=$?
+
+rm -f $tempfile $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0051-expected-dir-file b/install-info/tests/ii-0051-expected-dir-file
new file mode 100644
index 0000000..22bd6c1
--- /dev/null
+++ b/install-info/tests/ii-0051-expected-dir-file
@@ -0,0 +1,18 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* config.status: (gnu). Following text.
diff --git a/install-info/tests/ii-0051-input-dir-file b/install-info/tests/ii-0051-input-dir-file
new file mode 100644
index 0000000..d2f31fd
--- /dev/null
+++ b/install-info/tests/ii-0051-input-dir-file
@@ -0,0 +1,15 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
diff --git a/install-info/tests/ii-0051-input-info-file b/install-info/tests/ii-0051-input-info-file
new file mode 100644
index 0000000..6209147
--- /dev/null
+++ b/install-info/tests/ii-0051-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* config.status: (gnu). Following text.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest.
diff --git a/install-info/tests/ii-0051-test b/install-info/tests/ii-0051-test
new file mode 100755
index 0000000..f7bcdd1
--- /dev/null
+++ b/install-info/tests/ii-0051-test
@@ -0,0 +1,30 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii51-XXXXXXXX`
+cp ${testdir}/ii-0051-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+# Allow periods in the menu item name, e.g., config.status.
+# Report from Ulrich Mueller, 7 May 2008 01:56:38.
+${install_info} ${testdir}/ii-0051-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0051-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0052-expected-dir-file b/install-info/tests/ii-0052-expected-dir-file
new file mode 100644
index 0000000..37d396d
--- /dev/null
+++ b/install-info/tests/ii-0052-expected-dir-file
@@ -0,0 +1,19 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* config.status: (gnu)config.status Invocation.
+ Following text.
diff --git a/install-info/tests/ii-0052-input-dir-file b/install-info/tests/ii-0052-input-dir-file
new file mode 100644
index 0000000..d2f31fd
--- /dev/null
+++ b/install-info/tests/ii-0052-input-dir-file
@@ -0,0 +1,15 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
diff --git a/install-info/tests/ii-0052-input-info-file b/install-info/tests/ii-0052-input-info-file
new file mode 100644
index 0000000..95ff4ac
--- /dev/null
+++ b/install-info/tests/ii-0052-input-info-file
@@ -0,0 +1,11 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* config.status: (gnu)config.status Invocation. Following text.
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest.
diff --git a/install-info/tests/ii-0052-test b/install-info/tests/ii-0052-test
new file mode 100755
index 0000000..9cca6c0
--- /dev/null
+++ b/install-info/tests/ii-0052-test
@@ -0,0 +1,30 @@
+#!/bin/sh
+# This file is free software; as a special exception the author 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.
+
+. ./defs || exit 1
+
+outputdirfile=`mktemp ii52-XXXXXXXX`
+cp ${testdir}/ii-0052-input-dir-file $outputdirfile
+if [ "x$?" != "x0" ]; then
+ exit 1
+fi
+
+# Allow periods in the node name too, e.g., "config.status Invocation".
+# Report from Ulrich Mueller, 7 May 2008 01:56:38.
+${install_info} ${testdir}/ii-0052-input-info-file $outputdirfile
+retval=$?
+if [ "x$retval" != "x0" ]; then
+ exit $retval
+fi
+
+diff ${testdir}/ii-0052-expected-dir-file $outputdirfile
+retval=$?
+
+rm -f $outputdirfile
+exit $retval
diff --git a/install-info/tests/ii-0053-expected-dir-file b/install-info/tests/ii-0053-expected-dir-file
new file mode 100644
index 0000000..77983f0
--- /dev/null
+++ b/install-info/tests/ii-0053-expected-dir-file
@@ -0,0 +1,19 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
+
+Animals
+* autoupdate: (autoconf)autoupdate Invocation.
+ Automatic update of `configure.ac'
diff --git a/install-info/tests/ii-0053-input-dir-file b/install-info/tests/ii-0053-input-dir-file
new file mode 100644
index 0000000..d2f31fd
--- /dev/null
+++ b/install-info/tests/ii-0053-input-dir-file
@@ -0,0 +1,15 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+* Menu:
diff --git a/install-info/tests/ii-0053-input-info-file b/install-info/tests/ii-0053-input-info-file
new file mode 100644
index 0000000..ca860e2
--- /dev/null
+++ b/install-info/tests/ii-0053-input-info-file
@@ -0,0 +1,12 @@
+INFO-DIR-SECTION Animals
+START-INFO-DIR-ENTRY
+* autoupdate: (autoconf)autoupdate Invocation.
+ Automatic update of `configure.ac'
+END-INFO-DIR-ENTRY
+
+File: gnu, Node: Top, Next: Top, Up: (dir)
+
+Gnu
+***
+
+The wildebeest.
diff --git a/install-info/tests/ii-0053-test b/install-info/tests/ii-0053-test
new file mode 100755
index 0000000..617f221
--- /dev/null
+++ b/install-info/tests/ii-0053-test
@@ -0,0 +1,20 @@
+#!/bin/sh -e
+# This file is free software; as a special exception the author 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.
+
+. ./defs
+
+outputdirfile=`mktemp ii53-XXXXXXXX`
+cp ${testdir}/ii-0053-input-dir-file $outputdirfile
+
+# Have to handle newlines in input dir entries, too.
+${install_info} ${testdir}/ii-0053-input-info-file $outputdirfile
+diff ${testdir}/ii-0053-expected-dir-file $outputdirfile
+
+rm -f $outputdirfile
+exit 0
diff --git a/lib/Makefile.am b/lib/Makefile.am
new file mode 100644
index 0000000..97110c9
--- /dev/null
+++ b/lib/Makefile.am
@@ -0,0 +1,22 @@
+# $Id: Makefile.am,v 1.11 2007/07/01 18:07:36 karl Exp $
+# Makefile.am for texinfo/lib.
+# Run automake in .. to produce Makefile.in from this.
+#
+# This file is free software; as a special exception the author 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.
+
+noinst_LIBRARIES = libtxi.a
+
+AM_CPPFLAGS = -I$(top_srcdir) \
+ -I$(top_srcdir)/gnulib/lib \
+ -I$(top_builddir)/gnulib/lib \
+ -DLOCALEDIR=\"$(localedir)\"
+
+libtxi_a_SOURCES = substring.c xexit.c
+
+EXTRA_DIST = README
diff --git a/lib/Makefile.in b/lib/Makefile.in
new file mode 100644
index 0000000..a6ab742
--- /dev/null
+++ b/lib/Makefile.in
@@ -0,0 +1,670 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008 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@
+
+# $Id: Makefile.am,v 1.11 2007/07/01 18:07:36 karl Exp $
+# Makefile.am for texinfo/lib.
+# Run automake in .. to produce Makefile.in from this.
+#
+# This file is free software; as a special exception the author 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@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@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 = lib
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/gnulib/m4/alloca.m4 \
+ $(top_srcdir)/gnulib/m4/argz.m4 \
+ $(top_srcdir)/gnulib/m4/codeset.m4 \
+ $(top_srcdir)/gnulib/m4/eealloc.m4 \
+ $(top_srcdir)/gnulib/m4/environ.m4 \
+ $(top_srcdir)/gnulib/m4/error.m4 \
+ $(top_srcdir)/gnulib/m4/exitfail.m4 \
+ $(top_srcdir)/gnulib/m4/extensions.m4 \
+ $(top_srcdir)/gnulib/m4/getopt.m4 \
+ $(top_srcdir)/gnulib/m4/gettext.m4 \
+ $(top_srcdir)/gnulib/m4/gettimeofday.m4 \
+ $(top_srcdir)/gnulib/m4/glibc21.m4 \
+ $(top_srcdir)/gnulib/m4/gnulib-common.m4 \
+ $(top_srcdir)/gnulib/m4/gnulib-comp.m4 \
+ $(top_srcdir)/gnulib/m4/iconv.m4 \
+ $(top_srcdir)/gnulib/m4/include_next.m4 \
+ $(top_srcdir)/gnulib/m4/inline.m4 \
+ $(top_srcdir)/gnulib/m4/intlmacosx.m4 \
+ $(top_srcdir)/gnulib/m4/lib-ld.m4 \
+ $(top_srcdir)/gnulib/m4/lib-link.m4 \
+ $(top_srcdir)/gnulib/m4/lib-prefix.m4 \
+ $(top_srcdir)/gnulib/m4/localcharset.m4 \
+ $(top_srcdir)/gnulib/m4/longlong.m4 \
+ $(top_srcdir)/gnulib/m4/malloc.m4 \
+ $(top_srcdir)/gnulib/m4/malloca.m4 \
+ $(top_srcdir)/gnulib/m4/mbchar.m4 \
+ $(top_srcdir)/gnulib/m4/mbiter.m4 \
+ $(top_srcdir)/gnulib/m4/mbrtowc.m4 \
+ $(top_srcdir)/gnulib/m4/mbscasecmp.m4 \
+ $(top_srcdir)/gnulib/m4/mbschr.m4 \
+ $(top_srcdir)/gnulib/m4/mbslen.m4 \
+ $(top_srcdir)/gnulib/m4/mbsncasecmp.m4 \
+ $(top_srcdir)/gnulib/m4/mbsstr.m4 \
+ $(top_srcdir)/gnulib/m4/mbstate_t.m4 \
+ $(top_srcdir)/gnulib/m4/mbswidth.m4 \
+ $(top_srcdir)/gnulib/m4/memchr.m4 \
+ $(top_srcdir)/gnulib/m4/memcmp.m4 \
+ $(top_srcdir)/gnulib/m4/memcpy.m4 \
+ $(top_srcdir)/gnulib/m4/memmem.m4 \
+ $(top_srcdir)/gnulib/m4/memmove.m4 \
+ $(top_srcdir)/gnulib/m4/mempcpy.m4 \
+ $(top_srcdir)/gnulib/m4/mkstemp.m4 \
+ $(top_srcdir)/gnulib/m4/nls.m4 \
+ $(top_srcdir)/gnulib/m4/onceonly.m4 \
+ $(top_srcdir)/gnulib/m4/po.m4 \
+ $(top_srcdir)/gnulib/m4/progtest.m4 \
+ $(top_srcdir)/gnulib/m4/setenv.m4 \
+ $(top_srcdir)/gnulib/m4/stdbool.m4 \
+ $(top_srcdir)/gnulib/m4/stdint.m4 \
+ $(top_srcdir)/gnulib/m4/stdlib_h.m4 \
+ $(top_srcdir)/gnulib/m4/stpcpy.m4 \
+ $(top_srcdir)/gnulib/m4/strdup.m4 \
+ $(top_srcdir)/gnulib/m4/strerror.m4 \
+ $(top_srcdir)/gnulib/m4/string_h.m4 \
+ $(top_srcdir)/gnulib/m4/strndup.m4 \
+ $(top_srcdir)/gnulib/m4/strnlen.m4 \
+ $(top_srcdir)/gnulib/m4/sys_stat_h.m4 \
+ $(top_srcdir)/gnulib/m4/sys_time_h.m4 \
+ $(top_srcdir)/gnulib/m4/tempname.m4 \
+ $(top_srcdir)/gnulib/m4/unistd_h.m4 \
+ $(top_srcdir)/gnulib/m4/wchar.m4 \
+ $(top_srcdir)/gnulib/m4/wchar_t.m4 \
+ $(top_srcdir)/gnulib/m4/wctype.m4 \
+ $(top_srcdir)/gnulib/m4/wcwidth.m4 \
+ $(top_srcdir)/gnulib/m4/wint_t.m4 \
+ $(top_srcdir)/gnulib/m4/xalloc.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 =
+LIBRARIES = $(noinst_LIBRARIES)
+AR = ar
+ARFLAGS = cru
+libtxi_a_AR = $(AR) $(ARFLAGS)
+libtxi_a_LIBADD =
+am_libtxi_a_OBJECTS = substring.$(OBJEXT) xexit.$(OBJEXT)
+libtxi_a_OBJECTS = $(am_libtxi_a_OBJECTS)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libtxi_a_SOURCES)
+DIST_SOURCES = $(libtxi_a_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+ARGZ_H = @ARGZ_H@
+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@
+GETOPT_H = @GETOPT_H@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_DUP2 = @GNULIB_DUP2@
+GNULIB_ENVIRON = @GNULIB_ENVIRON@
+GNULIB_FCHDIR = @GNULIB_FCHDIR@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+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_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRSEP = @GNULIB_STRSEP@
+GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
+GNULIB_STRSTR = @GNULIB_STRSTR@
+GNULIB_STRTOD = @GNULIB_STRTOD@
+GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
+GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GREP = @GREP@
+HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR = @HAVE_DECL_STRERROR@
+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_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SETENV = @HAVE_SETENV@
+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_SLEEP = @HAVE_SLEEP@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRNDUP = @HAVE_STRNDUP@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNSETENV = @HAVE_UNSETENV@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE__BOOL = @HAVE__BOOL@
+HELP2MAN = @HELP2MAN@
+HEVEA = @HEVEA@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LDFLAGS = @LDFLAGS@
+LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@
+LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_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_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_FCHDIR = @REPLACE_FCHDIR@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+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@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYS_STAT_H = @SYS_STAT_H@
+SYS_TIME_H = @SYS_TIME_H@
+TERMLIBS = @TERMLIBS@
+TEX = @TEX@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+VOID_UNSETENV = @VOID_UNSETENV@
+WCHAR_H = @WCHAR_H@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WCTYPE_H = @WCTYPE_H@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+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@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_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@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+native_tools = @native_tools@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+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@
+noinst_LIBRARIES = libtxi.a
+AM_CPPFLAGS = -I$(top_srcdir) \
+ -I$(top_srcdir)/gnulib/lib \
+ -I$(top_builddir)/gnulib/lib \
+ -DLOCALEDIR=\"$(localedir)\"
+
+libtxi_a_SOURCES = substring.c xexit.c
+EXTRA_DIST = README
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu 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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstLIBRARIES:
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+libtxi.a: $(libtxi_a_OBJECTS) $(libtxi_a_DEPENDENCIES)
+ -rm -f libtxi.a
+ $(libtxi_a_AR) libtxi.a $(libtxi_a_OBJECTS) $(libtxi_a_LIBADD)
+ $(RANLIB) libtxi.a
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/substring.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xexit.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+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 $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$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 $(LIBRARIES)
+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:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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 clean-noinstLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+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
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-noinstLIBRARIES ctags 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-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-compile \
+ mostlyclean-generic pdf pdf-am ps ps-am tags 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/lib/README b/lib/README
new file mode 100644
index 0000000..643f9c1
--- /dev/null
+++ b/lib/README
@@ -0,0 +1,13 @@
+$Id: README,v 1.3 2004/04/11 17:56:46 karl Exp $
+texinfo/lib/README
+
+ Copyright (C) 2002 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.
+
+Common routines for the Texinfo programs.
+
+Many are common to other GNU packages as well.
+See the gnulib project at savannah: http://savannah.gnu.org/projects/gnulib
diff --git a/lib/substring.c b/lib/substring.c
new file mode 100644
index 0000000..fa48323
--- /dev/null
+++ b/lib/substring.c
@@ -0,0 +1,34 @@
+/* substring.c -- extract substring.
+ $Id: substring.c,v 1.5 2007/07/01 21:20:31 karl Exp $
+
+ Copyright (C) 1999, 2004, 2007 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 "system.h"
+
+char *
+substring (const char *start, const char *end)
+{
+ char *result = xmalloc (end - start + 1);
+ char *scan_result = result;
+ const char *scan = start;
+
+ while (scan < end)
+ *scan_result++ = *scan++;
+
+ *scan_result = 0;
+ return result;
+}
+
diff --git a/lib/xexit.c b/lib/xexit.c
new file mode 100644
index 0000000..a3244d4
--- /dev/null
+++ b/lib/xexit.c
@@ -0,0 +1,87 @@
+/* xexit.c -- exit with attention to return values and closing stdout.
+ $Id: xexit.c,v 1.8 2007/07/01 21:20:31 karl Exp $
+
+ Copyright (C) 1999, 2003, 2004, 2007 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 "system.h"
+
+/* SunOS 4.1.1 gets STDC_HEADERS defined, but it doesn't provide
+ EXIT_FAILURE. So far no system has defined one of EXIT_FAILURE and
+ EXIT_SUCCESS without the other. */
+#ifdef EXIT_SUCCESS
+ /* The following test is to work around the gross typo in
+ systems like Sony NEWS-OS Release 4.0C, whereby EXIT_FAILURE
+ is defined to 0, not 1. */
+# if !EXIT_FAILURE
+# undef EXIT_FAILURE
+# define EXIT_FAILURE 1
+# endif
+#else /* not EXIT_SUCCESS */
+# ifdef VMS /* these values suppress some messages; from gnuplot */
+# define EXIT_SUCCESS 1
+# define EXIT_FAILURE 0x10000002
+# else /* not VMS */
+# define EXIT_SUCCESS 0
+# define EXIT_FAILURE 1
+# endif /* not VMS */
+#endif /* not EXIT_SUCCESS */
+
+
+/* Flush stdout first, exit if failure (therefore, xexit should be
+ called to exit every program, not just `return' from main).
+ Otherwise, if EXIT_STATUS is zero, exit successfully, else
+ unsuccessfully. */
+
+void
+xexit (int exit_status)
+{
+ if (ferror (stdout))
+ {
+ fputs (_("ferror on stdout\n"), stderr);
+ exit_status = 1;
+ }
+ else if (fflush (stdout) != 0)
+ {
+ fputs (_("fflush error on stdout\n"), stderr);
+ exit_status = 1;
+ }
+
+ exit_status = exit_status == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
+
+ exit (exit_status);
+}
+
+
+/* Why do we care about stdout you may ask? Here's why, from Jim
+ Meyering in the lib/closeout.c file. */
+
+/* If a program writes *anything* to stdout, that program should close
+ stdout and make sure that the close succeeds. Otherwise, suppose that
+ you go to the extreme of checking the return status of every function
+ that does an explicit write to stdout. The last printf can succeed in
+ writing to the internal stream buffer, and yet the fclose(stdout) could
+ still fail (due e.g., to a disk full error) when it tries to write
+ out that buffered data. Thus, you would be left with an incomplete
+ output file and the offending program would exit successfully.
+
+ Besides, it's wasteful to check the return value from every call
+ that writes to stdout -- just let the internal stream state record
+ the failure. That's what the ferror test is checking below.
+
+ It's important to detect such failures and exit nonzero because many
+ tools (most notably `make' and other build-management systems) depend
+ on being able to detect failure in other tools via their exit status. */
diff --git a/makeinfo/Makefile.am b/makeinfo/Makefile.am
new file mode 100644
index 0000000..694f915
--- /dev/null
+++ b/makeinfo/Makefile.am
@@ -0,0 +1,32 @@
+# $Id: Makefile.am,v 1.9 2006/06/21 08:08:48 akim Exp $
+# Makefile.am for texinfo/makeinfo.
+# Run automake in .. to produce Makefile.in from this.
+#
+# This file is free software; as a special exception the author 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.
+
+bin_PROGRAMS = makeinfo
+
+localedir = $(datadir)/locale
+AM_CPPFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/gnulib/lib \
+ -I$(top_builddir)/gnulib/lib \
+ -DLOCALEDIR=\"$(localedir)\"
+LDADD = ../lib/libtxi.a $(top_builddir)/gnulib/lib/libgnu.a $(LIBINTL)
+
+makeinfo_SOURCES = \
+ cmds.c cmds.h defun.c defun.h \
+ files.c files.h float.c float.h footnote.c footnote.h \
+ html.c html.h index.c index.h insertion.c insertion.h lang.c lang.h \
+ macro.c macro.h makeinfo.c makeinfo.h multi.c multi.h node.c node.h \
+ sectioning.c sectioning.h toc.c toc.h xml.c xml.h xref.c xref.h
+
+EXTRA_DIST = README
+
+SUBDIRS = tests
diff --git a/makeinfo/Makefile.in b/makeinfo/Makefile.in
new file mode 100644
index 0000000..4a19ad6
--- /dev/null
+++ b/makeinfo/Makefile.in
@@ -0,0 +1,837 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008 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@
+
+# $Id: Makefile.am,v 1.9 2006/06/21 08:08:48 akim Exp $
+# Makefile.am for texinfo/makeinfo.
+# Run automake in .. to produce Makefile.in from this.
+#
+# This file is free software; as a special exception the author 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@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@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 = makeinfo$(EXEEXT)
+subdir = makeinfo
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/gnulib/m4/alloca.m4 \
+ $(top_srcdir)/gnulib/m4/argz.m4 \
+ $(top_srcdir)/gnulib/m4/codeset.m4 \
+ $(top_srcdir)/gnulib/m4/eealloc.m4 \
+ $(top_srcdir)/gnulib/m4/environ.m4 \
+ $(top_srcdir)/gnulib/m4/error.m4 \
+ $(top_srcdir)/gnulib/m4/exitfail.m4 \
+ $(top_srcdir)/gnulib/m4/extensions.m4 \
+ $(top_srcdir)/gnulib/m4/getopt.m4 \
+ $(top_srcdir)/gnulib/m4/gettext.m4 \
+ $(top_srcdir)/gnulib/m4/gettimeofday.m4 \
+ $(top_srcdir)/gnulib/m4/glibc21.m4 \
+ $(top_srcdir)/gnulib/m4/gnulib-common.m4 \
+ $(top_srcdir)/gnulib/m4/gnulib-comp.m4 \
+ $(top_srcdir)/gnulib/m4/iconv.m4 \
+ $(top_srcdir)/gnulib/m4/include_next.m4 \
+ $(top_srcdir)/gnulib/m4/inline.m4 \
+ $(top_srcdir)/gnulib/m4/intlmacosx.m4 \
+ $(top_srcdir)/gnulib/m4/lib-ld.m4 \
+ $(top_srcdir)/gnulib/m4/lib-link.m4 \
+ $(top_srcdir)/gnulib/m4/lib-prefix.m4 \
+ $(top_srcdir)/gnulib/m4/localcharset.m4 \
+ $(top_srcdir)/gnulib/m4/longlong.m4 \
+ $(top_srcdir)/gnulib/m4/malloc.m4 \
+ $(top_srcdir)/gnulib/m4/malloca.m4 \
+ $(top_srcdir)/gnulib/m4/mbchar.m4 \
+ $(top_srcdir)/gnulib/m4/mbiter.m4 \
+ $(top_srcdir)/gnulib/m4/mbrtowc.m4 \
+ $(top_srcdir)/gnulib/m4/mbscasecmp.m4 \
+ $(top_srcdir)/gnulib/m4/mbschr.m4 \
+ $(top_srcdir)/gnulib/m4/mbslen.m4 \
+ $(top_srcdir)/gnulib/m4/mbsncasecmp.m4 \
+ $(top_srcdir)/gnulib/m4/mbsstr.m4 \
+ $(top_srcdir)/gnulib/m4/mbstate_t.m4 \
+ $(top_srcdir)/gnulib/m4/mbswidth.m4 \
+ $(top_srcdir)/gnulib/m4/memchr.m4 \
+ $(top_srcdir)/gnulib/m4/memcmp.m4 \
+ $(top_srcdir)/gnulib/m4/memcpy.m4 \
+ $(top_srcdir)/gnulib/m4/memmem.m4 \
+ $(top_srcdir)/gnulib/m4/memmove.m4 \
+ $(top_srcdir)/gnulib/m4/mempcpy.m4 \
+ $(top_srcdir)/gnulib/m4/mkstemp.m4 \
+ $(top_srcdir)/gnulib/m4/nls.m4 \
+ $(top_srcdir)/gnulib/m4/onceonly.m4 \
+ $(top_srcdir)/gnulib/m4/po.m4 \
+ $(top_srcdir)/gnulib/m4/progtest.m4 \
+ $(top_srcdir)/gnulib/m4/setenv.m4 \
+ $(top_srcdir)/gnulib/m4/stdbool.m4 \
+ $(top_srcdir)/gnulib/m4/stdint.m4 \
+ $(top_srcdir)/gnulib/m4/stdlib_h.m4 \
+ $(top_srcdir)/gnulib/m4/stpcpy.m4 \
+ $(top_srcdir)/gnulib/m4/strdup.m4 \
+ $(top_srcdir)/gnulib/m4/strerror.m4 \
+ $(top_srcdir)/gnulib/m4/string_h.m4 \
+ $(top_srcdir)/gnulib/m4/strndup.m4 \
+ $(top_srcdir)/gnulib/m4/strnlen.m4 \
+ $(top_srcdir)/gnulib/m4/sys_stat_h.m4 \
+ $(top_srcdir)/gnulib/m4/sys_time_h.m4 \
+ $(top_srcdir)/gnulib/m4/tempname.m4 \
+ $(top_srcdir)/gnulib/m4/unistd_h.m4 \
+ $(top_srcdir)/gnulib/m4/wchar.m4 \
+ $(top_srcdir)/gnulib/m4/wchar_t.m4 \
+ $(top_srcdir)/gnulib/m4/wctype.m4 \
+ $(top_srcdir)/gnulib/m4/wcwidth.m4 \
+ $(top_srcdir)/gnulib/m4/wint_t.m4 \
+ $(top_srcdir)/gnulib/m4/xalloc.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 =
+am__installdirs = "$(DESTDIR)$(bindir)"
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS)
+am_makeinfo_OBJECTS = cmds.$(OBJEXT) defun.$(OBJEXT) files.$(OBJEXT) \
+ float.$(OBJEXT) footnote.$(OBJEXT) html.$(OBJEXT) \
+ index.$(OBJEXT) insertion.$(OBJEXT) lang.$(OBJEXT) \
+ macro.$(OBJEXT) makeinfo.$(OBJEXT) multi.$(OBJEXT) \
+ node.$(OBJEXT) sectioning.$(OBJEXT) toc.$(OBJEXT) \
+ xml.$(OBJEXT) xref.$(OBJEXT)
+makeinfo_OBJECTS = $(am_makeinfo_OBJECTS)
+makeinfo_LDADD = $(LDADD)
+am__DEPENDENCIES_1 =
+makeinfo_DEPENDENCIES = ../lib/libtxi.a \
+ $(top_builddir)/gnulib/lib/libgnu.a $(am__DEPENDENCIES_1)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(makeinfo_SOURCES)
+DIST_SOURCES = $(makeinfo_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-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 uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+ARGZ_H = @ARGZ_H@
+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@
+GETOPT_H = @GETOPT_H@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_DUP2 = @GNULIB_DUP2@
+GNULIB_ENVIRON = @GNULIB_ENVIRON@
+GNULIB_FCHDIR = @GNULIB_FCHDIR@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+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_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRSEP = @GNULIB_STRSEP@
+GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
+GNULIB_STRSTR = @GNULIB_STRSTR@
+GNULIB_STRTOD = @GNULIB_STRTOD@
+GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
+GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GREP = @GREP@
+HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR = @HAVE_DECL_STRERROR@
+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_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SETENV = @HAVE_SETENV@
+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_SLEEP = @HAVE_SLEEP@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRNDUP = @HAVE_STRNDUP@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNSETENV = @HAVE_UNSETENV@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE__BOOL = @HAVE__BOOL@
+HELP2MAN = @HELP2MAN@
+HEVEA = @HEVEA@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LDFLAGS = @LDFLAGS@
+LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@
+LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_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_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_FCHDIR = @REPLACE_FCHDIR@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+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@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYS_STAT_H = @SYS_STAT_H@
+SYS_TIME_H = @SYS_TIME_H@
+TERMLIBS = @TERMLIBS@
+TEX = @TEX@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+VOID_UNSETENV = @VOID_UNSETENV@
+WCHAR_H = @WCHAR_H@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WCTYPE_H = @WCTYPE_H@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+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@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_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@
+localedir = $(datadir)/locale
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+native_tools = @native_tools@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+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@
+AM_CPPFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/gnulib/lib \
+ -I$(top_builddir)/gnulib/lib \
+ -DLOCALEDIR=\"$(localedir)\"
+
+LDADD = ../lib/libtxi.a $(top_builddir)/gnulib/lib/libgnu.a $(LIBINTL)
+makeinfo_SOURCES = \
+ cmds.c cmds.h defun.c defun.h \
+ files.c files.h float.c float.h footnote.c footnote.h \
+ html.c html.h index.c index.h insertion.c insertion.h lang.c lang.h \
+ macro.c macro.h makeinfo.c makeinfo.h multi.c multi.h node.c node.h \
+ sectioning.c sectioning.h toc.c toc.h xml.c xml.h xref.c xref.h
+
+EXTRA_DIST = README
+SUBDIRS = tests
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu makeinfo/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu makeinfo/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ if test -f $$p \
+ ; then \
+ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+ $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+ else :; fi; \
+ done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+ rm -f "$(DESTDIR)$(bindir)/$$f"; \
+ done
+
+clean-binPROGRAMS:
+ -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+makeinfo$(EXEEXT): $(makeinfo_OBJECTS) $(makeinfo_DEPENDENCIES)
+ @rm -f makeinfo$(EXEEXT)
+ $(LINK) $(makeinfo_OBJECTS) $(makeinfo_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmds.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/defun.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/files.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/float.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/footnote.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/html.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/index.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/insertion.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lang.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/macro.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/makeinfo.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/node.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sectioning.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/toc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xref.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(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.
+$(RECURSIVE_TARGETS):
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; 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; \
+ (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"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ 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 || \
+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+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 $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$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 \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ distdir=`$(am__cd) $(distdir) && pwd`; \
+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+ (cd $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$top_distdir" \
+ distdir="$$distdir/$$subdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(PROGRAMS)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(bindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+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:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+ install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-binPROGRAMS \
+ clean-generic ctags ctags-recursive distclean \
+ distclean-compile distclean-generic distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-binPROGRAMS 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-compile mostlyclean-generic pdf pdf-am \
+ ps ps-am tags tags-recursive uninstall uninstall-am \
+ uninstall-binPROGRAMS
+
+# 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/makeinfo/README b/makeinfo/README
new file mode 100644
index 0000000..17c4371
--- /dev/null
+++ b/makeinfo/README
@@ -0,0 +1,17 @@
+$Id: README,v 1.3 2004/04/11 17:56:46 karl Exp $
+texinfo/makeinfo/README
+
+ Copyright (C) 2002 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.
+
+makeinfo is a standalone program to convert Texinfo source into Info
+files readable with standalone info or M-x info in Emacs.
+
+makeinfo can also output other formats: plain ASCII (with --no-headers)
+or HTML (with --html) or XML (with --xml).
+
+The Emacs function M-x texinfo-format-buffer does more or less the same
+job, but makeinfo is faster and gives better error messages.
diff --git a/makeinfo/cmds.c b/makeinfo/cmds.c
new file mode 100644
index 0000000..be7ce45
--- /dev/null
+++ b/makeinfo/cmds.c
@@ -0,0 +1,2184 @@
+/* cmds.c -- Texinfo commands.
+ $Id: cmds.c,v 1.83 2008/04/09 17:07:31 karl Exp $
+
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+ 2007, 2008 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 "system.h"
+#include "mbswidth.h"
+#include "cmds.h"
+#include "defun.h"
+#include "files.h"
+#include "footnote.h"
+#include "html.h"
+#include "index.h"
+#include "insertion.h"
+#include "lang.h"
+#include "macro.h"
+#include "makeinfo.h"
+#include "node.h"
+#include "sectioning.h"
+#include "toc.h"
+#include "xml.h"
+
+#ifdef TM_IN_SYS_TIME
+#include <sys/time.h>
+#else
+#include <time.h>
+#endif
+
+/* Simple commands defined and only called here. */
+static void cm_exampleindent (void),
+ cm_firstparagraphindent (void),
+ cm_fonttextsize (void),
+ cm_frenchspacing (void),
+ cm_geq (int arg),
+ cm_leq (int arg),
+ cm_minus (int arg),
+ cm_novalidate (void),
+ cm_paragraphindent (void);
+
+/* Internals. */
+static void cm_obsolete (int arg, int start, int end),
+ not_fixed_width (int arg);
+
+/* The dispatch table. */
+COMMAND command_table[] = {
+ { "\t", insert_space, NO_BRACE_ARGS },
+ { "\n", insert_space, NO_BRACE_ARGS },
+ { " ", insert_space, NO_BRACE_ARGS },
+ { "!", cm_punct, NO_BRACE_ARGS },
+ { "\"", cm_accent_umlaut, MAYBE_BRACE_ARGS },
+ { "'", cm_accent_acute, MAYBE_BRACE_ARGS },
+ { "*", cm_asterisk, NO_BRACE_ARGS },
+ { ",", cm_accent_cedilla, MAYBE_BRACE_ARGS },
+ { "-", cm_no_op, NO_BRACE_ARGS },
+ { ".", cm_punct, NO_BRACE_ARGS },
+ { "/", cm_no_op, NO_BRACE_ARGS },
+ { ":", cm_colon, NO_BRACE_ARGS },
+ { "=", cm_accent, MAYBE_BRACE_ARGS },
+ { "?", cm_punct, NO_BRACE_ARGS },
+ { "@", insert_self, NO_BRACE_ARGS },
+ { "\\", insert_self, NO_BRACE_ARGS },
+ { "^", cm_accent_hat, MAYBE_BRACE_ARGS },
+ { "`", cm_accent_grave, MAYBE_BRACE_ARGS },
+ { "{", insert_self, NO_BRACE_ARGS },
+ { "|", cm_no_op, NO_BRACE_ARGS },
+ { "}", insert_self, NO_BRACE_ARGS },
+ { "~", cm_accent_tilde, MAYBE_BRACE_ARGS },
+ { "AA", cm_special_char, BRACE_ARGS },
+ { "AE", cm_special_char, BRACE_ARGS },
+ { "H", cm_accent, MAYBE_BRACE_ARGS },
+ { "L", cm_special_char, BRACE_ARGS },
+ { "LaTeX", cm_LaTeX, BRACE_ARGS },
+ { "O", cm_special_char, BRACE_ARGS },
+ { "OE", cm_special_char, BRACE_ARGS },
+ { "TeX", cm_TeX, BRACE_ARGS },
+ { "aa", cm_special_char, BRACE_ARGS },
+ { "abbr", cm_abbr, BRACE_ARGS },
+ { "acronym", cm_acronym, BRACE_ARGS },
+ { "ae", cm_special_char, BRACE_ARGS },
+ { "afivepaper", cm_ignore_line, NO_BRACE_ARGS },
+ { "afourlatex", cm_ignore_line, NO_BRACE_ARGS },
+ { "afourpaper", cm_ignore_line, NO_BRACE_ARGS },
+ { "afourwide", cm_ignore_line, NO_BRACE_ARGS },
+ { "alias", cm_alias, NO_BRACE_ARGS },
+ { "allowcodebreaks", cm_ignore_line, NO_BRACE_ARGS },
+ { "anchor", cm_anchor, BRACE_ARGS },
+ { "appendix", cm_appendix, NO_BRACE_ARGS },
+ { "appendixsection", cm_appendixsec, NO_BRACE_ARGS },
+ { "appendixsec", cm_appendixsec, NO_BRACE_ARGS },
+ { "appendixsubsec", cm_appendixsubsec, NO_BRACE_ARGS },
+ { "appendixsubsubsec", cm_appendixsubsubsec, NO_BRACE_ARGS },
+ { "arrow", cm_arrow, BRACE_ARGS },
+ { "asis", cm_no_op, BRACE_ARGS },
+ { "author", cm_author, NO_BRACE_ARGS },
+ { "b", cm_b, BRACE_ARGS },
+ { "bullet", cm_bullet, BRACE_ARGS },
+ { "bye", cm_bye, NO_BRACE_ARGS },
+ { "c", cm_comment, NO_BRACE_ARGS },
+ { "caption", cm_caption, BRACE_ARGS },
+ { "cartouche", cm_cartouche, NO_BRACE_ARGS },
+ { "center", cm_center, NO_BRACE_ARGS },
+ { "centerchap", cm_unnumbered, NO_BRACE_ARGS },
+ { "chapheading", cm_chapheading, NO_BRACE_ARGS },
+ { "chapter", cm_chapter, NO_BRACE_ARGS },
+ { "cindex", cm_cindex, NO_BRACE_ARGS },
+ { "cite", cm_cite, BRACE_ARGS },
+ { "clear", cm_clear, NO_BRACE_ARGS },
+ { "click", cm_click, BRACE_ARGS },
+ { "clicksequence", cm_clicksequence, BRACE_ARGS },
+ { "clickstyle", cm_clickstyle, NO_BRACE_ARGS },
+ { "code", cm_code, BRACE_ARGS },
+ { "comma", cm_comma, BRACE_ARGS },
+ { "command", cm_code, BRACE_ARGS },
+ { "comment", cm_comment, NO_BRACE_ARGS },
+ { "contents", cm_contents, NO_BRACE_ARGS },
+ { "copying", cm_copying, NO_BRACE_ARGS },
+ { "copyright", cm_copyright, BRACE_ARGS },
+ { "ctrl", cm_obsolete, BRACE_ARGS },
+ { "defcodeindex", cm_defcodeindex, NO_BRACE_ARGS },
+ { "defcv", cm_defun, NO_BRACE_ARGS },
+ { "defcvx", cm_defun, NO_BRACE_ARGS },
+ { "deffn", cm_defun, NO_BRACE_ARGS },
+ { "deffnx", cm_defun, NO_BRACE_ARGS },
+ { "defindex", cm_defindex, NO_BRACE_ARGS },
+ { "definfoenclose", cm_definfoenclose, NO_BRACE_ARGS },
+ { "defivar", cm_defun, NO_BRACE_ARGS },
+ { "defivarx", cm_defun, NO_BRACE_ARGS },
+ { "defmac", cm_defun, NO_BRACE_ARGS },
+ { "defmacx", cm_defun, NO_BRACE_ARGS },
+ { "defmethod", cm_defun, NO_BRACE_ARGS },
+ { "defmethodx", cm_defun, NO_BRACE_ARGS },
+ { "defop", cm_defun, NO_BRACE_ARGS },
+ { "defopt", cm_defun, NO_BRACE_ARGS },
+ { "defoptx", cm_defun, NO_BRACE_ARGS },
+ { "defopx", cm_defun, NO_BRACE_ARGS },
+ { "defspec", cm_defun, NO_BRACE_ARGS },
+ { "defspecx", cm_defun, NO_BRACE_ARGS },
+ { "deftp", cm_defun, NO_BRACE_ARGS },
+ { "deftpx", cm_defun, NO_BRACE_ARGS },
+ { "deftypecv", cm_defun, NO_BRACE_ARGS },
+ { "deftypecvx", cm_defun, NO_BRACE_ARGS },
+ { "deftypefn", cm_defun, NO_BRACE_ARGS },
+ { "deftypefnx", cm_defun, NO_BRACE_ARGS },
+ { "deftypefun", cm_defun, NO_BRACE_ARGS },
+ { "deftypefunx", cm_defun, NO_BRACE_ARGS },
+ { "deftypeivar", cm_defun, NO_BRACE_ARGS },
+ { "deftypeivarx", cm_defun, NO_BRACE_ARGS },
+ { "deftypemethod", cm_defun, NO_BRACE_ARGS },
+ { "deftypemethodx", cm_defun, NO_BRACE_ARGS },
+ { "deftypeop", cm_defun, NO_BRACE_ARGS },
+ { "deftypeopx", cm_defun, NO_BRACE_ARGS },
+ { "deftypevar", cm_defun, NO_BRACE_ARGS },
+ { "deftypevarx", cm_defun, NO_BRACE_ARGS },
+ { "deftypevr", cm_defun, NO_BRACE_ARGS },
+ { "deftypevrx", cm_defun, NO_BRACE_ARGS },
+ { "defun", cm_defun, NO_BRACE_ARGS },
+ { "defunx", cm_defun, NO_BRACE_ARGS },
+ { "defvar", cm_defun, NO_BRACE_ARGS },
+ { "defvarx", cm_defun, NO_BRACE_ARGS },
+ { "defvr", cm_defun, NO_BRACE_ARGS },
+ { "defvrx", cm_defun, NO_BRACE_ARGS },
+ { "detailmenu", cm_detailmenu, NO_BRACE_ARGS },
+ { "dfn", cm_dfn, BRACE_ARGS },
+ { "dircategory", cm_dircategory, NO_BRACE_ARGS },
+ { "direntry", cm_direntry, NO_BRACE_ARGS },
+ { "display", cm_display, NO_BRACE_ARGS },
+ { "dmn", cm_dmn, BRACE_ARGS },
+ { "docbook", cm_docbook, NO_BRACE_ARGS },
+ { "documentdescription", cm_documentdescription, NO_BRACE_ARGS },
+ { "documentencoding", cm_documentencoding, NO_BRACE_ARGS },
+ { "documentlanguage", cm_documentlanguage, NO_BRACE_ARGS },
+ { "dotaccent", cm_accent, MAYBE_BRACE_ARGS },
+ { "dotless", cm_dotless, BRACE_ARGS },
+ { "dots", cm_dots, BRACE_ARGS },
+ { "email", cm_email, BRACE_ARGS },
+ { "emph", cm_emph, BRACE_ARGS },
+ { "end", cm_end, NO_BRACE_ARGS },
+ { "enddots", cm_enddots, BRACE_ARGS },
+ { "enumerate", cm_enumerate, NO_BRACE_ARGS },
+ { "env", cm_code, BRACE_ARGS },
+ { "equiv", cm_equiv, BRACE_ARGS },
+ { "error", cm_error, BRACE_ARGS },
+ { "euro", cm_special_char, BRACE_ARGS },
+ { "evenfooting", cm_ignore_line, NO_BRACE_ARGS },
+ { "evenfootingmarks", cm_ignore_line, NO_BRACE_ARGS },
+ { "evenheading", cm_ignore_line, NO_BRACE_ARGS },
+ { "evenheadingmarks", cm_ignore_line, NO_BRACE_ARGS },
+ { "everyfooting", cm_ignore_line, NO_BRACE_ARGS },
+ { "everyfootingmarks", cm_ignore_line, NO_BRACE_ARGS },
+ { "everyheading", cm_ignore_line, NO_BRACE_ARGS },
+ { "everyheadingmarks", cm_ignore_line, NO_BRACE_ARGS },
+ { "example", cm_example, NO_BRACE_ARGS },
+ { "exampleindent", cm_exampleindent, NO_BRACE_ARGS },
+ { "exclamdown", cm_special_char, BRACE_ARGS },
+ { "exdent", cm_exdent, NO_BRACE_ARGS },
+ { "expansion", cm_expansion, BRACE_ARGS },
+ { "file", cm_code, BRACE_ARGS },
+ { "finalout", cm_no_op, NO_BRACE_ARGS },
+ { "findex", cm_findex, NO_BRACE_ARGS },
+ { "firstparagraphindent", cm_firstparagraphindent, NO_BRACE_ARGS },
+ { "float", cm_float, NO_BRACE_ARGS },
+ { "flushleft", cm_flushleft, NO_BRACE_ARGS },
+ { "flushright", cm_flushright, NO_BRACE_ARGS },
+ { "fonttextsize", cm_fonttextsize, NO_BRACE_ARGS },
+ { "footnote", cm_footnote, NO_BRACE_ARGS}, /* self-arg eater */
+ { "footnotestyle", cm_footnotestyle, NO_BRACE_ARGS },
+ { "format", cm_format, NO_BRACE_ARGS },
+ { "frenchspacing", cm_frenchspacing, NO_BRACE_ARGS },
+ { "ftable", cm_ftable, NO_BRACE_ARGS },
+ { "geq", cm_geq, BRACE_ARGS },
+ { "group", cm_group, NO_BRACE_ARGS },
+ { "guillemetleft", cm_special_char, BRACE_ARGS },
+ { "guillemetright", cm_special_char, BRACE_ARGS },
+ { "guillemotleft", cm_special_char, BRACE_ARGS },
+ { "guillemotright", cm_special_char, BRACE_ARGS },
+ { "guilsinglleft", cm_guilsinglleft, BRACE_ARGS },
+ { "guilsinglright", cm_guilsinglright, BRACE_ARGS },
+ { "heading", cm_heading, NO_BRACE_ARGS },
+ { "headings", cm_ignore_line, NO_BRACE_ARGS },
+ { "headitem", cm_headitem, NO_BRACE_ARGS },
+ { "html", cm_html, NO_BRACE_ARGS },
+ { "hyphenation", cm_ignore_arg, BRACE_ARGS },
+ { "i", cm_i, BRACE_ARGS },
+ { "ifclear", cm_ifclear, NO_BRACE_ARGS },
+ { "ifeq", cm_ifeq, NO_BRACE_ARGS },
+ { "ifdocbook", cm_ifdocbook, NO_BRACE_ARGS },
+ { "ifhtml", cm_ifhtml, NO_BRACE_ARGS },
+ { "ifinfo", cm_ifinfo, NO_BRACE_ARGS },
+ { "ifnotdocbook", cm_ifnotdocbook, NO_BRACE_ARGS },
+ { "ifnothtml", cm_ifnothtml, NO_BRACE_ARGS },
+ { "ifnotinfo", cm_ifnotinfo, NO_BRACE_ARGS },
+ { "ifnotplaintext", cm_ifnotplaintext, NO_BRACE_ARGS },
+ { "ifnottex", cm_ifnottex, NO_BRACE_ARGS },
+ { "ifnotxml", cm_ifnotxml, NO_BRACE_ARGS },
+ { "ifplaintext", cm_ifplaintext, NO_BRACE_ARGS },
+ { "ifset", cm_ifset, NO_BRACE_ARGS },
+ { "iftex", cm_iftex, NO_BRACE_ARGS },
+ { "ifxml", cm_ifxml, NO_BRACE_ARGS },
+ { "ignore", command_name_condition, NO_BRACE_ARGS },
+ { "image", cm_image, BRACE_ARGS },
+ { "include", cm_include, NO_BRACE_ARGS },
+ { "indent", cm_indent, NO_BRACE_ARGS },
+ { "indicateurl", cm_indicate_url, BRACE_ARGS },
+ { "inforef", cm_inforef, BRACE_ARGS },
+ { "insertcopying", cm_insert_copying, NO_BRACE_ARGS },
+ { "item", cm_item, NO_BRACE_ARGS },
+ { "itemize", cm_itemize, NO_BRACE_ARGS },
+ { "itemx", cm_itemx, NO_BRACE_ARGS },
+ { "kbd", cm_kbd, BRACE_ARGS },
+ { "kbdinputstyle", cm_ignore_line, NO_BRACE_ARGS },
+ { "key", cm_key, BRACE_ARGS },
+ { "kindex", cm_kindex, NO_BRACE_ARGS },
+ { "l", cm_special_char, BRACE_ARGS },
+ { "leq", cm_leq, BRACE_ARGS },
+ { "lisp", cm_lisp, NO_BRACE_ARGS },
+ { "listoffloats", cm_listoffloats, NO_BRACE_ARGS },
+ { "lowersections", cm_lowersections, NO_BRACE_ARGS },
+ { "macro", cm_macro, NO_BRACE_ARGS },
+ { "majorheading", cm_majorheading, NO_BRACE_ARGS },
+ { "math", cm_math, BRACE_ARGS },
+ { "menu", cm_menu, NO_BRACE_ARGS },
+ { "minus", cm_minus, BRACE_ARGS },
+ { "multitable", cm_multitable, NO_BRACE_ARGS },
+ { "need", cm_ignore_line, NO_BRACE_ARGS },
+ { "node", cm_node, NO_BRACE_ARGS },
+ { "noindent", cm_noindent_cmd, NO_BRACE_ARGS },
+ { "novalidate", cm_novalidate, NO_BRACE_ARGS },
+ { "nwnode", cm_node, NO_BRACE_ARGS },
+ { "o", cm_special_char, BRACE_ARGS },
+ { "oddfooting", cm_ignore_line, NO_BRACE_ARGS },
+ { "oddfootingmarks", cm_ignore_line, NO_BRACE_ARGS },
+ { "oddheading", cm_ignore_line, NO_BRACE_ARGS },
+ { "oddheadingmarks", cm_ignore_line, NO_BRACE_ARGS },
+ { "oe", cm_special_char, BRACE_ARGS },
+ { "option", cm_code, BRACE_ARGS },
+ { "ordf", cm_special_char, BRACE_ARGS },
+ { "ordm", cm_special_char, BRACE_ARGS },
+ { "page", cm_no_op, NO_BRACE_ARGS },
+ { "pagesizes", cm_ignore_line, NO_BRACE_ARGS },
+ { "paragraphindent", cm_paragraphindent, NO_BRACE_ARGS },
+ { "pindex", cm_pindex, NO_BRACE_ARGS },
+ { "point", cm_point, BRACE_ARGS },
+ { "pounds", cm_special_char, BRACE_ARGS },
+ { "print", cm_print, BRACE_ARGS },
+ { "printindex", cm_printindex, NO_BRACE_ARGS },
+ { "pxref", cm_pxref, BRACE_ARGS },
+ { "questiondown", cm_special_char, BRACE_ARGS },
+ { "quotation", cm_quotation, NO_BRACE_ARGS },
+ { "quotedblbase", cm_quotedblbase, BRACE_ARGS },
+ { "quotedblleft", cm_quotedblleft, BRACE_ARGS },
+ { "quotedblright", cm_quotedblright, BRACE_ARGS },
+ { "quoteleft", cm_quoteleft, BRACE_ARGS },
+ { "quoteright", cm_quoteright, BRACE_ARGS },
+ { "quotesinglbase", cm_quotesinglbase, BRACE_ARGS },
+ { "r", cm_r, BRACE_ARGS },
+ { "raisesections", cm_raisesections, NO_BRACE_ARGS },
+ { "ref", cm_ref, BRACE_ARGS },
+ { "refill", cm_no_op, NO_BRACE_ARGS },
+ { "registeredsymbol", cm_registeredsymbol, BRACE_ARGS },
+ { "result", cm_result, BRACE_ARGS },
+ { "ringaccent", cm_accent, MAYBE_BRACE_ARGS },
+ { "rmacro", cm_rmacro, NO_BRACE_ARGS },
+ { "samp", cm_code, BRACE_ARGS },
+ { "sansserif", cm_sansserif, BRACE_ARGS },
+ { "sc", cm_sc, BRACE_ARGS },
+ { "section", cm_section, NO_BRACE_ARGS },
+ { "set", cm_set, NO_BRACE_ARGS },
+ { "setchapternewpage", cm_ignore_line, NO_BRACE_ARGS },
+ { "setchapterstyle", cm_obsolete, NO_BRACE_ARGS },
+ { "setcontentsaftertitlepage", cm_no_op, NO_BRACE_ARGS },
+ { "setfilename", cm_setfilename, NO_BRACE_ARGS },
+ { "setshortcontentsaftertitlepage", cm_no_op, NO_BRACE_ARGS },
+ { "settitle", cm_settitle, NO_BRACE_ARGS },
+ { "shortcaption", cm_caption, BRACE_ARGS },
+ { "shortcontents", cm_contents, NO_BRACE_ARGS },
+ { "shorttitlepage", cm_ignore_line, NO_BRACE_ARGS },
+ { "slanted", cm_slanted, BRACE_ARGS },
+ { "smallbook", cm_ignore_line, NO_BRACE_ARGS },
+ { "smalldisplay", cm_smalldisplay, NO_BRACE_ARGS },
+ { "smallexample", cm_smallexample, NO_BRACE_ARGS },
+ { "smallformat", cm_smallformat, NO_BRACE_ARGS },
+ { "smalllisp", cm_smalllisp, NO_BRACE_ARGS },
+ { "sp", cm_sp, NO_BRACE_ARGS },
+ { "ss", cm_special_char, BRACE_ARGS },
+ { "strong", cm_strong, BRACE_ARGS },
+ { "subheading", cm_subheading, NO_BRACE_ARGS },
+ { "subsection", cm_subsection, NO_BRACE_ARGS },
+ { "subsubheading", cm_subsubheading, NO_BRACE_ARGS },
+ { "subsubsection", cm_subsubsection, NO_BRACE_ARGS },
+ { "subtitle", cm_titlepage_cmds, NO_BRACE_ARGS },
+ { "summarycontents", cm_contents, NO_BRACE_ARGS },
+ { "syncodeindex", cm_synindex, NO_BRACE_ARGS },
+ { "synindex", cm_synindex, NO_BRACE_ARGS },
+ { "t", cm_tt, BRACE_ARGS },
+ { "tab", cm_tab, NO_BRACE_ARGS },
+ { "table", cm_table, NO_BRACE_ARGS },
+ { "tex", cm_tex, NO_BRACE_ARGS },
+ { "textdegree", cm_special_char, BRACE_ARGS },
+ { "tie", cm_tie, BRACE_ARGS },
+ { "tieaccent", cm_accent, MAYBE_BRACE_ARGS },
+ { "tindex", cm_tindex, NO_BRACE_ARGS },
+ { "title", cm_titlepage_cmds, NO_BRACE_ARGS },
+ { "titlefont", cm_titlefont, BRACE_ARGS },
+ { "titlepage", cm_titlepage, NO_BRACE_ARGS },
+ { "today", cm_today, BRACE_ARGS },
+ { "top", cm_top, NO_BRACE_ARGS },
+ { "u", cm_accent, MAYBE_BRACE_ARGS },
+ { "ubaraccent", cm_accent, MAYBE_BRACE_ARGS },
+ { "udotaccent", cm_accent, MAYBE_BRACE_ARGS },
+ { "unmacro", cm_unmacro, NO_BRACE_ARGS },
+ { "unnumbered", cm_unnumbered, NO_BRACE_ARGS },
+ { "unnumberedsec", cm_unnumberedsec, NO_BRACE_ARGS },
+ { "unnumberedsubsec", cm_unnumberedsubsec, NO_BRACE_ARGS },
+ { "unnumberedsubsubsec", cm_unnumberedsubsubsec, NO_BRACE_ARGS },
+ { "uref", cm_uref, BRACE_ARGS },
+ { "url", cm_uref, BRACE_ARGS },
+ { "v", cm_accent, MAYBE_BRACE_ARGS },
+ { "value", cm_value, BRACE_ARGS },
+ { "var", cm_var, BRACE_ARGS },
+ { "verb", cm_verb, NO_BRACE_ARGS },
+ { "verbatim", cm_verbatim, NO_BRACE_ARGS },
+ { "verbatiminclude", cm_verbatiminclude, NO_BRACE_ARGS },
+ { "vindex", cm_vindex, NO_BRACE_ARGS },
+ { "vtable", cm_vtable, NO_BRACE_ARGS },
+ { "vskip", cm_ignore_line, NO_BRACE_ARGS },
+ { "w", cm_w, BRACE_ARGS },
+ { "xml", cm_xml, NO_BRACE_ARGS },
+ { "xref", cm_xref, BRACE_ARGS },
+
+ /* Deprecated commands. These used to be for italics. */
+ { "iappendix", cm_ideprecated, NO_BRACE_ARGS },
+ { "iappendixsec", cm_ideprecated, NO_BRACE_ARGS },
+ { "iappendixsection", cm_ideprecated, NO_BRACE_ARGS },
+ { "iappendixsubsec", cm_ideprecated, NO_BRACE_ARGS },
+ { "iappendixsubsubsec", cm_ideprecated, NO_BRACE_ARGS },
+ { "ichapter", cm_ideprecated, NO_BRACE_ARGS },
+ { "isection", cm_ideprecated, NO_BRACE_ARGS },
+ { "isubsection", cm_ideprecated, NO_BRACE_ARGS },
+ { "isubsubsection", cm_ideprecated, NO_BRACE_ARGS },
+ { "iunnumbered", cm_ideprecated, NO_BRACE_ARGS },
+ { "iunnumberedsec", cm_ideprecated, NO_BRACE_ARGS },
+ { "iunnumberedsubsec", cm_ideprecated, NO_BRACE_ARGS },
+ { "iunnumberedsubsubsec", cm_ideprecated, NO_BRACE_ARGS },
+
+ /* Now @include does what this was used to. */
+ { "infoinclude", cm_obsolete, NO_BRACE_ARGS },
+ { "titlespec", cm_obsolete, NO_BRACE_ARGS },
+
+ { NULL, NULL, NO_BRACE_ARGS }
+};
+
+/* The bulk of the Texinfo commands. */
+
+/* Commands which insert their own names. */
+void
+insert_self (int arg)
+{
+ if (arg == START)
+ add_word (command);
+}
+
+void
+insert_space (int arg)
+{
+ if (arg == START)
+ {
+ if (xml && !docbook)
+ xml_insert_entity ("space");
+ else
+ add_char (' ');
+ }
+}
+
+/* Insert a comma. Useful when a literal , would break our parsing of
+ multiple arguments. */
+void
+cm_comma (int arg)
+{
+ if (arg == START)
+ add_char (',');
+}
+
+
+/* Force a line break in the output. */
+void
+cm_asterisk (void)
+{
+ if (html)
+ add_word ("<br>");
+ else if (xml && !docbook)
+ xml_insert_entity ("linebreak");
+ else if (docbook)
+ xml_asterisk ();
+ else
+ {
+ close_single_paragraph ();
+ cm_noindent ();
+ }
+}
+
+/* Insert ellipsis. */
+void
+cm_dots (int arg)
+{
+ if (arg == START)
+ {
+ if (xml && !docbook)
+ xml_insert_entity ("dots");
+ else if (docbook)
+ xml_insert_entity ("hellip");
+ else
+ if (html && !in_fixed_width_font)
+ insert_string ("<small class=\"dots\">...</small>");
+ else
+ add_word ("...");
+ }
+}
+
+/* Insert ellipsis for sentence end. */
+void
+cm_enddots (int arg)
+{
+ if (arg == START)
+ {
+ if (xml && !docbook)
+ xml_insert_entity ("enddots");
+ else if (docbook)
+ {
+ xml_insert_entity ("hellip");
+ add_char ('.');
+ }
+ else
+ if (html && !in_fixed_width_font)
+ insert_string ("<small class=\"enddots\">...</small>");
+ else
+ add_word ("...");
+ }
+}
+
+void
+cm_bullet (int arg)
+{
+ if (arg == START)
+ {
+ if (html)
+ add_word ("&bull;");
+ else if (xml && !docbook)
+ xml_insert_entity ("bullet");
+ else if (docbook)
+ xml_insert_entity ("bull");
+ else
+ add_char ('*');
+ }
+}
+
+static void
+cm_geq (int arg)
+{
+ if (arg == START)
+ {
+ if (xml)
+ xml_insert_entity ("ge");
+ else if (html)
+ add_word ("&ge;");
+ else
+ insert_string (">=");
+ }
+}
+
+static void
+cm_leq (int arg)
+{
+ if (arg == START)
+ {
+ if (xml)
+ xml_insert_entity ("le");
+ else if (html)
+ add_word ("&le;");
+ else
+ insert_string ("<=");
+ }
+}
+
+static void
+cm_minus (int arg)
+{
+ if (arg == START)
+ {
+ if (xml)
+ xml_insert_entity ("minus");
+ else if (html)
+ add_word ("&minus;");
+ else
+ add_char ('-');
+ }
+}
+
+/* Formatting a dimension unit. */
+void
+cm_dmn (int arg)
+{
+ if (html)
+ insert_html_tag_with_attribute (arg, "span", "class=\"dmn\"");
+ else if (docbook)
+ /* No units in docbook yet. */
+ ;
+ else if (xml)
+ xml_insert_element (DIMENSION, arg);
+}
+
+/* Insert "TeX". */
+void
+cm_TeX (int arg)
+{
+ static int last_position;
+
+ if (arg == START)
+ {
+ if (xml)
+ xml_insert_entity ("tex");
+ else
+ add_word ("TeX");
+
+ last_position = output_paragraph_offset;
+ }
+ else if (last_position != output_paragraph_offset)
+ {
+ warning (_("arguments to @%s ignored"), command);
+ output_paragraph_offset = last_position;
+ }
+}
+
+/* Insert "LaTeX". */
+void
+cm_LaTeX (int arg)
+{
+ static int last_position;
+
+ if (arg == START)
+ {
+ if (xml)
+ xml_insert_entity ("latex");
+ else
+ add_word ("LaTeX");
+
+ last_position = output_paragraph_offset;
+ }
+ else if (last_position != output_paragraph_offset)
+ {
+ warning (_("arguments to @%s ignored"), command);
+ output_paragraph_offset = last_position;
+ }
+}
+
+/* Copyright symbol. */
+void
+cm_copyright (int arg)
+{
+ if (arg == START)
+ {
+ if (html)
+ add_word ("&copy;");
+ else if (xml && !docbook)
+ xml_insert_entity ("copyright");
+ else if (docbook)
+ xml_insert_entity ("copy");
+ else
+ add_word ("(C)");
+ }
+}
+
+/* Registered symbol. */
+void
+cm_registeredsymbol (int arg)
+{
+ if (arg == START)
+ {
+ if (html)
+ add_word ("&reg;");
+ else if (docbook)
+ xml_insert_entity ("reg");
+ else if (xml && !docbook)
+ xml_insert_entity ("registered");
+ else
+ add_word ("(R)");
+ }
+}
+
+/* Left single guillemet (single left-pointing angle quotation mark). */
+void
+cm_guilsinglleft (int arg)
+{
+ if (arg == START)
+ {
+ if (html)
+ add_word ("&lsaquo;");
+ else if (xml && !docbook)
+ xml_insert_entity ("lsaquo");
+ else
+ add_word ("<");
+ }
+}
+
+/* Right single guillemet (single right-pointing angle quotation mark). */
+void
+cm_guilsinglright (int arg)
+{
+ if (arg == START)
+ {
+ if (html)
+ add_word ("&rsaquo;");
+ else if (xml && !docbook)
+ xml_insert_entity ("rsaquo");
+ else
+ add_word (">");
+ }
+}
+
+/* Double low-9 quotation mark. */
+void
+cm_quotedblbase (int arg)
+{
+ if (arg == START)
+ {
+ if (html)
+ add_word ("&bdquo;");
+ else if (docbook)
+ xml_insert_entity ("ldquor");
+ else if (xml && !docbook)
+ xml_insert_entity ("bdquo");
+ else
+ add_word ("\"");
+ }
+}
+
+/* Left double quotation mark. */
+void
+cm_quotedblleft (int arg)
+{
+ if (arg == START)
+ {
+ if (html)
+ add_word ("&ldquo;");
+ else if (docbook)
+ xml_insert_entity ("ldquo");
+ else if (xml && !docbook)
+ xml_insert_entity ("ldquo");
+ else
+ add_word ("\"");
+ }
+}
+
+/* Right double quotation mark. */
+void
+cm_quotedblright (int arg)
+{
+ if (arg == START)
+ {
+ if (html)
+ add_word ("&rdquo;");
+ else if (docbook)
+ xml_insert_entity ("rdquo");
+ else if (xml && !docbook)
+ xml_insert_entity ("rdquo");
+ else
+ add_word ("\"");
+ }
+}
+
+/* Left single quotation mark. */
+void
+cm_quoteleft (int arg)
+{
+ if (arg == START)
+ {
+ if (html)
+ add_word ("&lsquo;");
+ else if (docbook)
+ xml_insert_entity ("lsquo");
+ else if (xml && !docbook)
+ xml_insert_entity ("lsquo");
+ else
+ add_word ("`");
+ }
+}
+
+/* Right single quotation mark. */
+void
+cm_quoteright (int arg)
+{
+ if (arg == START)
+ {
+ if (html)
+ add_word ("&rsquo;");
+ else if (docbook)
+ xml_insert_entity ("rsquo");
+ else if (xml && !docbook)
+ xml_insert_entity ("rsquo");
+ else
+ add_word ("'");
+ }
+}
+
+/* Single low-9 quotation mark. */
+void
+cm_quotesinglbase (int arg)
+{
+ if (arg == START)
+ {
+ if (html)
+ add_word ("&sbquo;");
+ else if (docbook)
+ xml_insert_entity ("lsquor");
+ else if (xml && !docbook)
+ xml_insert_entity ("sbquo");
+ else
+ add_word (",");
+ }
+}
+
+void
+cm_today (int arg)
+{
+ static char *months[12] =
+ { N_("January"), N_("February"), N_("March"), N_("April"), N_("May"),
+ N_("June"), N_("July"), N_("August"), N_("September"), N_("October"),
+ N_("November"), N_("December") };
+ if (arg == START)
+ {
+ time_t timer = time (0);
+ struct tm *ts = localtime (&timer);
+ add_word_args ("%d %s %d", ts->tm_mday, _(months[ts->tm_mon]),
+ ts->tm_year + 1900);
+ }
+}
+
+void
+cm_comment (void)
+{
+ /* For HTML, do not output comments before HTML header is written,
+ otherwise comments before @settitle cause an empty <title> in the
+ header. */
+ if ((html && output_head_p) || xml)
+ {
+ char *line;
+ get_rest_of_line (0, &line);
+
+ if (strlen (line) > 0)
+ {
+ int save_inhibit_indentation = inhibit_paragraph_indentation;
+ int save_paragraph_is_open = paragraph_is_open;
+ int save_escape_html = escape_html;
+ int save_xml_no_para = xml_no_para;
+ int i;
+
+ inhibit_paragraph_indentation = 1;
+ escape_html = 0;
+ xml_no_para = 1;
+
+ /* @c and @comment can appear between @item and @itemx,
+ @deffn and @deffnx. */
+ xml_dont_touch_items_defs++;
+
+ /* Use insert for HTML, and XML when indentation is enabled.
+ For Docbook, use add_char. */
+ if (xml && xml_indentation_increment > 0
+ && output_paragraph_offset > 0
+ && output_paragraph[output_paragraph_offset-1] != '\n')
+ insert ('\n');
+
+ /* Crunch double hyphens in comments. */
+ add_html_block_elt ("<!-- ");
+ for (i = 0; i < strlen (line); i++)
+ if (line[i] != '-' || (i && line[i-1] != '-'))
+ add_char (line[i]);
+ add_word (" -->");
+
+ if (html)
+ add_char ('\n');
+
+ inhibit_paragraph_indentation = save_inhibit_indentation;
+ paragraph_is_open = save_paragraph_is_open;
+ escape_html = save_escape_html;
+ xml_no_para = save_xml_no_para;
+ xml_dont_touch_items_defs--;
+ }
+
+ free (line);
+ }
+ else
+ cm_ignore_line ();
+}
+
+
+
+/* We keep acronyms with two arguments around, to be able to refer to them
+ later with only one argument. */
+static ACRONYM_DESC *acronyms_stack = NULL;
+
+static void
+cm_acronym_or_abbr (int arg, int is_abbr)
+{
+ char *aa, *description;
+ unsigned len;
+
+ /* We do everything at START. */
+ if (arg == END)
+ return;
+
+ get_until_in_braces (",", &aa);
+ if (input_text[input_text_offset] == ',')
+ input_text_offset++;
+ get_until_in_braces ("}", &description);
+
+ canon_white (aa);
+ canon_white (description);
+
+ /* If not enclosed in braces, strip after comma to be compatible
+ with texinfo.tex. */
+ if (description[0] != '{' && strchr (description, ',') != NULL)
+ {
+ int i = 0;
+ while (description[i] != ',')
+ i++;
+ /* For now, just terminate the string at comma. */
+ description[i] = 0;
+ }
+
+ /* Get description out of braces. */
+ if (description[0] == '{')
+ description++;
+
+ len = strlen (description);
+ if (len && description[len-1] == '}')
+ description[len-1] = 0;
+
+ /* Save new description. */
+ if (strlen (description) > 0)
+ {
+ ACRONYM_DESC *new = xmalloc (sizeof (ACRONYM_DESC));
+
+ new->acronym = xstrdup (aa);
+ new->description = xstrdup (description);
+ new->next = acronyms_stack;
+ acronyms_stack = new;
+ }
+
+ if (html)
+ {
+ add_word (is_abbr ? "<abbr" : "<acronym");
+
+ if (strlen (description) > 0)
+ add_word_args (" title=\"%s\"", text_expansion (description));
+ else if (acronyms_stack)
+ {
+ /* No second argument, get from previous. Search order is from
+ last to first defined, so we get the most recent version of
+ the description. */
+ ACRONYM_DESC *temp = acronyms_stack;
+
+ while (temp)
+ {
+ if (STREQ (aa, temp->acronym)
+ && strlen (temp->description) > 0)
+ {
+ add_word_args (" title=\"%s\"",
+ text_expansion (temp->description));
+ break;
+ }
+ temp = temp->next;
+ }
+ }
+
+ add_char ('>');
+ execute_string ("%s", aa);
+ add_word (is_abbr ? "</abbr>" : "</acronym>");
+ }
+ else if (docbook)
+ {
+ xml_insert_element (is_abbr ? ABBREV : ACRONYM, START);
+ execute_string ("%s", aa);
+ xml_insert_element (is_abbr ? ABBREV : ACRONYM, END);
+ }
+ else if (xml)
+ {
+ xml_insert_element (is_abbr ? ABBREV : ACRONYM, START);
+
+ xml_insert_element (is_abbr ? ABBREVWORD : ACRONYMWORD, START);
+ execute_string ("%s", aa);
+ xml_insert_element (is_abbr ? ABBREVWORD : ACRONYMWORD, END);
+
+ if (strlen (description) > 0)
+ {
+ xml_insert_element (is_abbr ? ABBREVDESC : ACRONYMDESC, START);
+ execute_string ("%s", description);
+ xml_insert_element (is_abbr ? ABBREVDESC : ACRONYMDESC, END);
+ }
+
+ xml_insert_element (is_abbr ? ABBREV : ACRONYM, END);
+ }
+ else
+ execute_string ("%s", aa);
+
+ /* Put description into parenthesis after the acronym for all outputs
+ except XML. */
+ if (strlen (description) > 0 && (!xml || docbook))
+ add_word_args (" (%s)", description);
+}
+
+void
+cm_acronym (int arg)
+{
+ cm_acronym_or_abbr (arg, 0);
+}
+
+void
+cm_abbr (int arg)
+{
+ cm_acronym_or_abbr (arg, 1);
+}
+
+void
+cm_tt (int arg)
+{
+ /* @t{} is a no-op in Info. */
+ if (html)
+ insert_html_tag (arg, "tt");
+ else if (xml)
+ xml_insert_element (TT, arg);
+}
+
+void
+cm_code (int arg)
+{
+ if (arg == START)
+ in_fixed_width_font++;
+
+ if (xml)
+ {
+ if (STREQ (command, "command"))
+ xml_insert_element (COMMAND_TAG, arg);
+ else if (STREQ (command, "env"))
+ xml_insert_element (ENV, arg);
+ else if (STREQ (command, "file"))
+ xml_insert_element (FILE_TAG, arg);
+ else if (STREQ (command, "option"))
+ xml_insert_element (OPTION, arg);
+ else if (STREQ (command, "samp"))
+ {
+ if (docbook && arg == START)
+ {
+ /* Even though @samp is in_fixed_width_font, it
+ should always start a paragraph. Unfortunately,
+ in_fixed_width_font inhibits that. */
+ xml_start_para ();
+ xml_insert_entity ("lsquo");
+ }
+ xml_insert_element (SAMP, arg);
+ if (docbook && arg == END)
+ xml_insert_entity ("rsquo");
+ }
+ else
+ xml_insert_element (CODE, arg);
+ }
+ else if (html)
+ {
+ if (STREQ (command, "code"))
+ insert_html_tag (arg, "code");
+ else
+ { /* Use <samp> tag in general to get typewriter. */
+ if (arg == START)
+ { /* If @samp specifically, add quotes a la TeX output. */
+ if (STREQ (command, "samp"))
+ add_word ("&lsquo;");
+ insert_html_tag (arg, "samp");
+ }
+ insert_html_tag_with_attribute (arg, "span", "class=\"%s\"",command);
+ if (arg == END)
+ {
+ insert_html_tag (arg, "samp");
+ if (STREQ (command, "samp"))
+ add_word ("&rsquo;");
+ }
+ }
+ }
+ else
+ {
+ if (!printing_index)
+ {
+ if (arg == START)
+ add_char ('`');
+ else
+ add_meta_char ('\'');
+ }
+ }
+}
+
+void
+cm_kbd (int arg)
+{
+ if (xml)
+ xml_insert_element (KBD, arg);
+ else if (html)
+ { /* Seems like we should increment in_fixed_width_font for Info
+ format too, but then the quote-omitting special case gets
+ confused. Punt. */
+ if (arg == START)
+ in_fixed_width_font++;
+ insert_html_tag (arg, "kbd");
+ }
+ else
+ { /* People use @kbd in an example to get the "user input" font.
+ We don't want quotes in that case. */
+ if (!in_fixed_width_font)
+ cm_code (arg);
+ }
+}
+
+/* Just show a url (http://example.org/..., for example), don't link to it. */
+void
+cm_indicate_url (int arg, int start, int end)
+{
+ if (xml)
+ xml_insert_element (URL, arg);
+ else if (html)
+ {
+ if (arg == START)
+ add_word ("&lt;");
+ insert_html_tag (arg, "code");
+ if (arg != START)
+ add_word ("&gt;");
+ }
+ else
+ if (arg == START)
+ add_word ("<");
+ else
+ add_word (">");
+}
+
+void
+cm_key (int arg)
+{
+ if (xml)
+ xml_insert_element (KEY, arg);
+ else if (html)
+ add_word (arg == START ? "&lt;" : "&gt;");
+ else
+ add_char (arg == START ? '<' : '>');
+}
+
+/* Handle a command that switches to a non-fixed-width font. */
+void
+not_fixed_width (int arg)
+{
+ if (arg == START)
+ in_fixed_width_font = 0;
+}
+
+/* @var in makeinfo just uppercases the text. */
+void
+cm_var (int arg, int start_pos, int end_pos)
+{
+ if (xml)
+ xml_insert_element (VAR, arg);
+ else
+ {
+ not_fixed_width (arg);
+
+ if (html)
+ insert_html_tag (arg, "var");
+ else if (arg == END)
+ {
+ while (start_pos < end_pos)
+ {
+ unsigned char c = output_paragraph[start_pos];
+ if (strchr ("[](),", c))
+ warning (_("unlikely character %c in @var"), c);
+ output_paragraph[start_pos] = coerce_to_upper (c);
+ start_pos++;
+ }
+ }
+ }
+}
+
+void
+cm_sc (int arg, int start_pos, int end_pos)
+{
+ if (xml)
+ xml_insert_element (SC, arg);
+ else
+ {
+ not_fixed_width (arg);
+
+ if (arg == START)
+ {
+ if (html)
+ insert_html_tag_with_attribute (arg, "span", "class=\"sc\"");
+ }
+ else
+ {
+ int all_upper;
+
+ if (html)
+ start_pos += sizeof ("<span class=\"sc\">") - 1; /* skip <span> */
+
+ /* Avoid the warning below if there's no text inside @sc{}, or
+ when processing menus under --no-headers. */
+ all_upper = start_pos < end_pos;
+
+ while (start_pos < end_pos)
+ {
+ unsigned char c = output_paragraph[start_pos];
+ if (!isupper (c))
+ all_upper = 0;
+ if (!html)
+ output_paragraph[start_pos] = coerce_to_upper (c);
+ start_pos++;
+ }
+ if (all_upper)
+ warning (_("@sc argument all uppercase, thus no effect"));
+
+ if (html)
+ insert_html_tag (arg, "span");
+ }
+ }
+}
+
+void
+cm_dfn (int arg, int position)
+{
+ if (xml)
+ xml_insert_element (DFN, arg);
+ else
+ {
+ if (html)
+ insert_html_tag (arg, "dfn");
+ else if (arg == START)
+ add_char ('"');
+ else
+ add_meta_char ('"');
+ }
+}
+
+void
+cm_emph (int arg)
+{
+ if (xml)
+ xml_insert_element (EMPH, arg);
+ else if (html)
+ insert_html_tag (arg, "em");
+ else
+ add_char ('_');
+}
+
+void
+cm_verb (int arg)
+{
+ int character;
+ int delimiter = 0; /* avoid warning */
+ int seen_end = 0;
+
+ in_fixed_width_font++;
+ /* are these necessary ? */
+ last_char_was_newline = 0;
+
+ if (html)
+ add_word ("<tt>");
+
+ if (input_text_offset < input_text_length)
+ {
+ character = curchar ();
+ if (character == '{')
+ input_text_offset++;
+ else
+ line_error (_("`{' expected, but saw `%c'"), character);
+ }
+
+ if (input_text_offset < input_text_length)
+ {
+ delimiter = curchar ();
+ input_text_offset++;
+ }
+
+ while (input_text_offset < input_text_length)
+ {
+ character = curchar ();
+
+ if (character == '\n')
+ {
+ line_number++;
+ if (html)
+ add_word ("<br>\n");
+ }
+
+ else if (html && character == '<')
+ add_word ("&lt;");
+
+ else if (html && character == '&')
+ add_word ("&amp;");
+
+ else if (character == delimiter && input_text[input_text_offset+1] == '}')
+ { /* Assume no newlines in END_VERBATIM. */
+ seen_end = 1;
+ input_text_offset++;
+ break;
+ }
+
+ else
+ add_char (character);
+
+ input_text_offset++;
+ }
+
+ if (!seen_end)
+ warning (_("end of file inside verb block"));
+
+ if (input_text_offset < input_text_length)
+ {
+ character = curchar ();
+ if (character == '}')
+ input_text_offset++;
+ else
+ line_error (_("`}' expected, but saw `%c'"), character);
+ }
+
+ if (html)
+ add_word ("</tt>");
+
+ in_fixed_width_font--;
+}
+
+
+void
+cm_strong (int arg, int start_pos, int end_pos)
+{
+ if (docbook && arg == START)
+ xml_insert_element_with_attribute (B, arg, "role=\"bold\"");
+ else if (xml)
+ xml_insert_element (STRONG, arg);
+ else if (html)
+ insert_html_tag (arg, "strong");
+ else
+ add_char ('*');
+
+ if (!xml && !html && !docbook && !no_headers
+ && arg == END
+ && end_pos - start_pos >= 6
+ && (STRNCASEEQ ((char *) output_paragraph + start_pos, "*Note:", 6)
+ || STRNCASEEQ ((char *) output_paragraph + start_pos, "*Note ", 6))
+ )
+ {
+ /* Translators: "Note:" is literal here and should not be
+ translated. A document with @strong{Nota}, say, is fine. */
+ warning (_("@strong{Note...} produces a spurious cross-reference in Info; reword to avoid that"));
+ /* Adjust the output to avoid writing the bad xref. */
+ output_paragraph[start_pos + 5] = '_';
+ }
+}
+
+void
+cm_cite (int arg, int position)
+{
+ if (xml)
+ xml_insert_element (CITE, arg);
+ else if (html)
+ insert_html_tag (arg, "cite");
+ else
+ {
+ if (arg == START)
+ add_char ('`');
+ else if (!looking_at ("}'"))
+ /* In the simple case of, e.g., ... @cite{Foo}'s ...
+ don't output a double ''. */
+ add_char ('\'');
+ }
+}
+
+/* No highlighting, but argument switches fonts. */
+void
+cm_not_fixed_width (int arg, int start, int end)
+{
+ if (xml)
+ xml_insert_element (NOTFIXEDWIDTH, arg);
+ not_fixed_width (arg);
+}
+
+void
+cm_i (int arg)
+{
+ /* Make use of <lineannotation> of Docbook, if we are
+ inside an @example or similar. */
+ if (docbook && !filling_enabled && !printing_index)
+ xml_insert_element (LINEANNOTATION, arg);
+ else if (xml)
+ xml_insert_element (I, arg);
+ else if (html)
+ insert_html_tag (arg, "i");
+ else
+ not_fixed_width (arg);
+}
+
+void
+cm_slanted (int arg)
+{
+ /* Make use of <lineannotation> of Docbook, if we are
+ inside an @example or similar. */
+ if (docbook && !filling_enabled && !printing_index)
+ xml_insert_element (LINEANNOTATION, arg);
+ else if (xml)
+ xml_insert_element (SLANTED, arg);
+ else if (html)
+ insert_html_tag (arg, "i");
+ else
+ not_fixed_width (arg);
+}
+
+void
+cm_b (int arg)
+{
+ /* See cm_i comments. */
+ if (docbook && !filling_enabled && !printing_index)
+ xml_insert_element (LINEANNOTATION, arg);
+ else if (docbook && arg == START)
+ xml_insert_element_with_attribute (B, arg, "role=\"bold\"");
+ else if (xml)
+ xml_insert_element (B, arg);
+ else if (html)
+ insert_html_tag (arg, "b");
+ else
+ not_fixed_width (arg);
+}
+
+void
+cm_r (int arg)
+{
+ /* See cm_i comments. */
+ if (docbook && !filling_enabled && !printing_index)
+ xml_insert_element (LINEANNOTATION, arg);
+ else if (xml)
+ xml_insert_element (R, arg);
+ else if (html)
+ insert_html_tag_with_attribute (arg, "span", "class=\"roman\"");
+ else
+ not_fixed_width (arg);
+}
+
+void
+cm_sansserif (int arg)
+{
+ /* See cm_i comments. */
+ if (docbook && !filling_enabled && !printing_index)
+ xml_insert_element (LINEANNOTATION, arg);
+ else if (xml)
+ xml_insert_element (SANSSERIF, arg);
+ else if (html)
+ insert_html_tag_with_attribute (arg, "span", "class=\"sansserif\"");
+ else
+ not_fixed_width (arg);
+}
+
+void
+cm_titlefont (int arg)
+{
+ if (xml)
+ xml_insert_element (TITLEFONT, arg);
+ else
+ {
+ not_fixed_width (arg);
+ if (html)
+ {
+ html_title_written = 1; /* suppress title from @settitle */
+ if (arg == START)
+ add_word ("<h1 class=\"titlefont\">");
+ else
+ add_word ("</h1>\n");
+ }
+ }
+}
+
+
+/* Unfortunately, we cannot interpret @math{} contents like TeX does. We just
+ pass them through. */
+void
+cm_math (int arg)
+{
+ if (xml && !docbook)
+ xml_insert_element (MATH, arg);
+}
+
+/* Various commands are no-op's. */
+void
+cm_no_op (void)
+{
+}
+
+
+/* For proofing single chapters, etc. */
+void
+cm_novalidate (void)
+{
+ validating = 0;
+}
+
+
+/* Prevent the argument from being split across two lines. */
+void
+cm_w (int arg)
+{
+ if (arg == START)
+ non_splitting_words++;
+ else
+ {
+ if (docbook || html || xml)
+ /* This is so @w{$}Log$ doesn't end up as <dollar>Log<dollar>
+ in the output. */
+ insert_string ("<!-- /@w -->");
+
+ non_splitting_words--;
+ }
+}
+
+
+/* An unbreakable word space. Same as @w{ } for makeinfo, but different
+ for TeX (the space stretches and stretches, and does not inhibit
+ hyphenation). For XML and HTML, insert the non-breaking-space
+ character and entity, respectively */
+void
+cm_tie (int arg)
+{
+ if (arg == START)
+ if (html)
+ insert_string ("&nbsp;");
+ else if (xml)
+ insert_string ("&#xa0;");
+ else
+ {
+ cm_w (START);
+ add_char (' ');
+ }
+ else
+ if (!html && !xml) cm_w (END);
+}
+
+/* Explain that this command is obsolete, thus the user shouldn't
+ do anything with it. */
+static void
+cm_obsolete (int arg, int start, int end)
+{
+ if (arg == START)
+ warning (_("%c%s is obsolete"), COMMAND_PREFIX, command);
+}
+
+
+/* Inhibit the indentation of the next paragraph, but not of following
+ paragraphs. */
+void
+cm_noindent (void)
+{
+ if (!inhibit_paragraph_indentation)
+ inhibit_paragraph_indentation = -1;
+}
+
+void
+cm_noindent_cmd (void)
+{
+ cm_noindent ();
+ xml_no_indent = 1;
+ skip_whitespace_and_newlines();
+
+ if (xml)
+ xml_start_para ();
+ else if (html && !paragraph_is_open)
+ add_html_block_elt ("<p class=\"noindent\">");
+ else
+ {
+ paragraph_is_open = 0;
+ start_paragraph ();
+ }
+}
+
+/* Force indentation of the next paragraph. */
+void
+cm_indent (void)
+{
+ inhibit_paragraph_indentation = 0;
+ xml_no_indent = 0;
+ skip_whitespace_and_newlines();
+
+ if (xml)
+ xml_start_para ();
+ else if (html && !paragraph_is_open)
+ add_html_block_elt ("<p class=\"indent\">");
+ else
+ start_paragraph ();
+}
+
+/* I don't know exactly what to do with this. Should I allow
+ someone to switch filenames in the middle of output? Since the
+ file could be partially written, this doesn't seem to make sense.
+ Another option: ignore it, since they don't really want to
+ switch files. Finally, complain, or at least warn. It doesn't
+ really matter, anyway, since this doesn't get executed. */
+void
+cm_setfilename (void)
+{
+ char *filename;
+ get_rest_of_line (1, &filename);
+ /* warning ("`@%s %s' encountered and ignored", command, filename); */
+ if (xml)
+ add_word_args ("<setfilename>%s</setfilename>", filename);
+ free (filename);
+}
+
+void
+cm_settitle (void)
+{
+ if (xml)
+ {
+ xml_insert_element (SETTITLE, START);
+ xml_in_book_title = 1;
+ get_rest_of_line (0, &title);
+ execute_string ("%s", title);
+ xml_in_book_title = 0;
+ xml_insert_element (SETTITLE, END);
+ }
+ else
+ get_rest_of_line (0, &title);
+}
+
+
+/* Ignore argument in braces. */
+void
+cm_ignore_arg (int arg, int start_pos, int end_pos)
+{
+ if (arg == END)
+ output_paragraph_offset = start_pos;
+}
+
+/* Ignore argument on rest of line. */
+void
+cm_ignore_line (void)
+{
+ discard_until ("\n");
+}
+
+/* Insert the number of blank lines passed as argument. */
+void
+cm_sp (void)
+{
+ int lines;
+ char *line;
+
+ /* Due to tricky stuff in execute_string(), @value{} can't be expanded.
+ So there is really no reason to enable expansion for @sp parameters. */
+ get_rest_of_line (0, &line);
+
+ if (sscanf (line, "%d", &lines) != 1 || lines <= 0)
+ line_error (_("@sp requires a positive numeric argument, not `%s'"), line);
+ else
+ {
+ if (xml)
+ {
+ /* @sp can appear between @item and @itemx, @deffn and @deffnx. */
+ xml_dont_touch_items_defs++;
+ xml_insert_element_with_attribute (SP, START, "lines=\"%s\"", line);
+ /* insert_string (line);*/
+ xml_insert_element (SP, END);
+ xml_dont_touch_items_defs--;
+ }
+ else
+ {
+ /* Must disable filling since otherwise multiple newlines is like
+ multiple spaces. Must close paragraph since that's what the
+ manual says and that's what TeX does. */
+ int save_filling_enabled = filling_enabled;
+ filling_enabled = 0;
+
+ /* close_paragraph generates an extra blank line. */
+ close_single_paragraph ();
+
+ if (html)
+ add_html_block_elt ("<pre class=\"sp\">\n");
+
+ while (lines--)
+ add_char ('\n');
+
+ if (html)
+ add_html_block_elt ("</pre>\n");
+
+ filling_enabled = save_filling_enabled;
+ }
+ }
+ free (line);
+}
+
+/* @dircategory LINE outputs INFO-DIR-SECTION LINE, unless --no-headers. */
+void
+cm_dircategory (void)
+{
+ char *line;
+
+ if (html || docbook)
+ cm_ignore_line ();
+ else if (xml)
+ {
+ xml_insert_element (DIRCATEGORY, START);
+ get_rest_of_line (1, &line);
+ insert_string (line);
+ free (line);
+ xml_insert_element (DIRCATEGORY, END);
+ }
+ else
+ {
+ get_rest_of_line (1, &line);
+
+ if (!no_headers && !html)
+ {
+ /* use add_* instead of insert_* because otherwise the
+ file header ("This is ...") will end up inside the
+ dir section markers. */
+ kill_self_indent (-1); /* make sure there's no indentation */
+ cm_noindent (); /* make sure again */
+ add_word ("INFO-DIR-SECTION ");
+ add_word (line);
+ close_single_paragraph (); /* newline */
+ }
+
+ free (line);
+ }
+}
+
+/* Start a new line with just this text on it.
+ Then center the line of text.
+ */
+void
+cm_center (void)
+{
+ if (xml)
+ {
+ char *line;
+ xml_insert_element (CENTER, START);
+ get_rest_of_line (0, &line);
+ execute_string ("%s", line);
+ free (line);
+ xml_insert_element (CENTER, END);
+ }
+ else
+ {
+ int i, start, length, width;
+ char *line;
+ int save_indented_fill = indented_fill;
+ int save_filling_enabled = filling_enabled;
+ int fudge_factor = 1;
+
+ filling_enabled = indented_fill = 0;
+ cm_noindent ();
+ start = output_paragraph_offset;
+
+ if (html)
+ add_html_block_elt ("<div align=\"center\">");
+
+ inhibit_output_flushing ();
+ get_rest_of_line (0, &line);
+ execute_string ("%s", line);
+ free (line);
+ uninhibit_output_flushing ();
+ if (html)
+ add_html_block_elt ("</div>");
+
+ else
+ {
+ i = output_paragraph_offset - 1;
+ while (i > (start - 1) && output_paragraph[i] == '\n')
+ i--;
+
+ output_paragraph_offset = ++i;
+ length = output_paragraph_offset - start;
+ width = mbsnwidth ((char *)(output_paragraph + start), length, 0);
+
+ if (width < (fill_column - fudge_factor))
+ {
+ line = xmalloc (1 + length);
+ memcpy (line, (char *)(output_paragraph + start), length);
+
+ i = (fill_column - fudge_factor - width) / 2;
+ output_paragraph_offset = start;
+
+ while (i--)
+ insert (' ');
+
+ for (i = 0; i < length; i++)
+ insert (line[i]);
+
+ free (line);
+ }
+ }
+
+ insert ('\n');
+ filling_enabled = save_filling_enabled;
+ indented_fill = save_indented_fill;
+ close_single_paragraph ();
+ if (looking_at ("\n"))
+ insert ('\n');
+ }
+}
+
+
+/* Define what @click{} does. */
+static char *click_command = "@arrow";
+
+void
+cm_clickstyle (void)
+{
+ click_command = get_item_function ();
+
+ if (looking_at ("\n"))
+ {
+ input_text_offset++;
+ line_number++;
+ }
+}
+
+/* @clicksequence{File @click{} Open} */
+void
+cm_clicksequence (int arg)
+{
+ if (xml)
+ xml_insert_element (CLICKSEQUENCE, arg);
+}
+
+void
+cm_click (int arg)
+{
+ if (xml)
+ xml_insert_element (CLICK, arg);
+ else if (arg == END)
+ execute_string ("%s{}", click_command);
+}
+
+
+/* Generic right arrow, default clickstyle. */
+void
+cm_arrow (int arg)
+{
+ if (arg == END)
+ if (html || xml)
+ xml_insert_entity ("rarr");
+ else
+ add_word ("->");
+}
+
+/* Show what an expression returns. */
+void
+cm_result (int arg)
+{
+ if (arg == END)
+ if (html || xml)
+ xml_insert_entity ("rArr");
+ else
+ add_word ("=>");
+}
+
+/* What an expression expands to. */
+void
+cm_expansion (int arg)
+{
+ if (arg == END)
+ add_word (html ? "==&gt;" : "==>");
+}
+
+/* Indicates two expressions are equivalent. */
+void
+cm_equiv (int arg)
+{
+ if (arg == END)
+ add_word ("==");
+}
+
+/* What an expression may print. */
+void
+cm_print (int arg)
+{
+ if (arg == END)
+ add_word ("-|");
+}
+
+/* An error signaled. */
+void
+cm_error (int arg)
+{
+ if (arg == END)
+ add_word (html ? "error--&gt;" : "error-->");
+}
+
+/* The location of point in an example of a buffer. */
+void
+cm_point (int arg)
+{
+ if (arg == END)
+ add_word ("-!-");
+}
+
+/* @exdent: Start a new line with just this text on it.
+ The text is outdented one level if possible. */
+void
+cm_exdent (void)
+{
+ char *line;
+ int save_indent = current_indent;
+ int save_in_fixed_width_font = in_fixed_width_font;
+
+ /* Read argument. */
+ get_rest_of_line (0, &line);
+
+ /* Exdent the output. Actually this may be a no-op. */
+ if (current_indent)
+ current_indent -= default_indentation_increment;
+
+ /* @exdent arg is supposed to be in roman. */
+ in_fixed_width_font = 0;
+
+ /* The preceding newline already inserted the `current_indent'.
+ Remove one level's worth. */
+ kill_self_indent (default_indentation_increment);
+
+ if (html)
+ add_word ("<br>");
+ else if (docbook)
+ xml_insert_element (LINEANNOTATION, START);
+ else if (xml)
+ xml_insert_element (EXDENT, START);
+
+ /* Can't close_single_paragraph, then we lose preceding blank lines. */
+ flush_output ();
+ execute_string ("%s", line);
+ free (line);
+
+ if (html)
+ add_word ("<br>");
+ else if (xml)
+ {
+ xml_insert_element (docbook ? LINEANNOTATION : EXDENT, END);
+ insert ('\n');
+ }
+
+ close_single_paragraph ();
+
+ current_indent = save_indent;
+ in_fixed_width_font = save_in_fixed_width_font;
+ if (!xml)
+ start_paragraph ();
+}
+
+/*
+ Read include-filename, process the include-file:
+ verbatim_include == 0: process through reader_loop
+ verbatim_include != 0: process through handle_verbatim_environment
+ */
+static void
+handle_include (int verbatim_include)
+{
+ char *arg, *filename;
+
+ if (macro_expansion_output_stream && !executing_string)
+ me_append_before_this_command ();
+
+ if (!insertion_stack)
+ close_paragraph (); /* No blank lines etc. if not at outer level. */
+
+ if (macro_expansion_output_stream && verbatim_include)
+ {
+ me_append_before_this_command ();
+ return;
+ }
+
+ get_rest_of_line (0, &arg);
+ /* We really only want to expand @value, but it's easier to just do
+ everything. TeX will only work with @value. */
+ {
+ int save_in_fixed_width_font = in_fixed_width_font;
+ in_fixed_width_font = 1; /* do not change -- to -, etc. */
+ filename = text_expansion (arg);
+ in_fixed_width_font = save_in_fixed_width_font;
+ }
+
+ free (arg);
+
+ if (macro_expansion_output_stream && !executing_string)
+ remember_itext (input_text, input_text_offset);
+
+ pushfile ();
+
+ /* In verbose mode we print info about including another file. */
+ if (verbose_mode)
+ {
+ int i = 0;
+ FSTACK *stack = filestack;
+
+ for (i = 0, stack = filestack; stack; stack = stack->next, i++);
+
+ i *= 2;
+
+ printf ("%*s", i, "");
+ printf ("%c%s `%s'\n", COMMAND_PREFIX, command, filename);
+ fflush (stdout);
+ }
+
+ if (!find_and_load (filename, 1))
+ {
+ popfile ();
+ line_number--;
+
+ /* /wh/bar:5: @include/@verbatiminclude `foo': No such file or dir */
+ line_error ("%c%s `%s': %s", COMMAND_PREFIX, command, filename,
+ strerror (errno));
+
+ free (filename);
+ return;
+ }
+ else
+ {
+ if (macro_expansion_output_stream && !executing_string)
+ remember_itext (input_text, input_text_offset);
+
+ if (!verbatim_include)
+ reader_loop ();
+ else
+ handle_verbatim_environment (0);
+ }
+ free (filename);
+ popfile ();
+}
+
+
+/* Include file as if put in @verbatim environment */
+void
+cm_verbatiminclude (void)
+{
+ handle_include (1);
+}
+
+
+/* Remember this file, and move onto the next. */
+void
+cm_include (void)
+{
+ handle_include (0);
+}
+
+
+/* @bye: Signals end of processing. Easy to make this happen. */
+
+void
+cm_bye (void)
+{
+ discard_braces (); /* should not have any unclosed braces left */
+ input_text_offset = input_text_length;
+}
+
+/* @paragraphindent */
+
+static void
+cm_paragraphindent (void)
+{
+ char *arg;
+
+ get_rest_of_line (1, &arg);
+ if (set_paragraph_indent (arg) != 0)
+ line_error (_("Bad argument to %c%s"), COMMAND_PREFIX, command);
+
+ free (arg);
+}
+
+
+/* @exampleindent: change indentation of example-like environments. */
+static int
+set_example_indentation_increment (char *string)
+{
+ if (strcmp (string, "asis") == 0 || strcmp (string, _("asis")) == 0)
+ ;
+ else if (strcmp (string, "none") == 0 || strcmp (string, _("none")) == 0)
+ example_indentation_increment = 0;
+ else if (sscanf (string, "%d", &example_indentation_increment) != 1)
+ return -1;
+ return 0;
+}
+
+static void
+cm_exampleindent (void)
+{
+ char *arg;
+
+ get_rest_of_line (1, &arg);
+ if (set_example_indentation_increment (arg) != 0)
+ line_error (_("Bad argument to @%s"), command);
+
+ if (input_text[input_text_offset] == '\n')
+ close_single_paragraph ();
+
+ free (arg);
+}
+
+
+/* @firstparagraphindent: suppress indentation in first paragraphs after
+ headings. */
+static int
+set_firstparagraphindent (char *string)
+{
+ if (STREQ (string, "insert") || STREQ (string, _("insert")))
+ do_first_par_indent = 1;
+ else if (STREQ (string, "none") || STREQ (string, _("none")))
+ do_first_par_indent = 0;
+ else
+ return -1;
+ return 0;
+}
+
+static void
+cm_firstparagraphindent (void)
+{
+ char *arg;
+
+ get_rest_of_line (1, &arg);
+ if (set_firstparagraphindent (arg) != 0)
+ line_error (_("Bad argument to @%s: %s"), command, arg);
+
+ free (arg);
+}
+
+/* For DocBook and XML, produce &period; for `.@:'. This gives the processing
+ software a fighting chance to treat it specially by not adding extra space.
+
+ Do this also for ?, !, and :. */
+void
+cm_colon (void)
+{
+ if (xml)
+ {
+ if (strchr (".?!:", input_text[input_text_offset-3]) != NULL)
+ {
+ /* Erase literal character that's there, except `>', which is
+ part of the XML tag. */
+ if (output_paragraph_offset > 0
+ && output_paragraph[output_paragraph_offset-1] != '>')
+ output_paragraph_offset--;
+
+ switch (input_text[input_text_offset-3])
+ {
+ case '.':
+ xml_insert_entity ("period");
+ break;
+ case '?':
+ xml_insert_entity ("quest");
+ break;
+ case '!':
+ xml_insert_entity ("excl");
+ break;
+ case ':':
+ xml_insert_entity ("colon");
+ break;
+ }
+ }
+ }
+}
+
+/* Ending sentences explicitly. Currently, only outputs entities for XML
+ output, for other formats it calls insert_self. */
+void
+cm_punct (int arg)
+{
+ if (xml && !docbook && input_text_offset > 0)
+ {
+ switch (input_text[input_text_offset-1])
+ {
+ case '.':
+ xml_insert_entity ("eosperiod");
+ break;
+ case '?':
+ xml_insert_entity ("eosquest");
+ break;
+ case '!':
+ xml_insert_entity ("eosexcl");
+ break;
+ }
+ }
+ else
+ {
+ insert_self (arg);
+ }
+}
+
+
+/* If @frenchspacing is in effect, avoid outputting extra spaces after
+ sentence-ending periods. Actually, we explicitly do this only in one
+ tiny case (see add_char in makeinfo.c). Usually we just output
+ whatever the user gives us. */
+void
+cm_frenchspacing (void)
+{
+ char *val;
+ get_rest_of_line (1, &val);
+
+ if (STREQ (val, "on")) {
+ french_spacing = 1;
+ } else if (STREQ (val, "off")) {
+ french_spacing = 0;
+ } else {
+ line_error (_("Expected @%s on or off, not `%s'"), command, val);
+ }
+
+ if (xml && !docbook) {
+ xml_insert_element_with_attribute (FRENCHSPACING, START,
+ "val=\"%s\"", val);
+ xml_insert_element (FRENCHSPACING, END);
+ }
+}
+
+
+/* Body font size. This is only for TeX, so we're just checking
+ validity here. Don't think we should even pass it on to XML. */
+void
+cm_fonttextsize (void)
+{
+ char *val;
+ get_rest_of_line (1, &val);
+
+ if (! (STREQ (val, "10") || STREQ (val, "off"))) {
+ line_error (_("Only @%s 10 or 11 is supported, not `%s'"), command, val);
+ }
+}
diff --git a/makeinfo/cmds.h b/makeinfo/cmds.h
new file mode 100644
index 0000000..50097a7
--- /dev/null
+++ b/makeinfo/cmds.h
@@ -0,0 +1,223 @@
+/* cmds.h -- declarations for cmds.c.
+ $Id: cmds.h,v 1.15 2008/04/09 17:07:31 karl Exp $
+
+ Copyright (C) 1998, 1999, 2002, 2003, 2004, 2007, 2008
+ 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/>. */
+
+#ifndef CMDS_H
+#define CMDS_H
+
+/* The three arguments a command can get are a flag saying whether it is
+ before argument parsing (START) or after (END), the starting position
+ of the arguments, and the ending position. */
+typedef void COMMAND_FUNCTION (); /* So we can say COMMAND_FUNCTION *foo; */
+
+/* Each command has an associated function. When the command is
+ encountered in the text, the associated function is called with START
+ as the argument. If the function expects arguments in braces, it
+ remembers itself on the stack. When the corresponding close brace is
+ encountered, the function is called with END as the argument. */
+#define START 0
+#define END 1
+
+/* Does the command expect braces? */
+#define NO_BRACE_ARGS 0
+#define BRACE_ARGS 1
+#define MAYBE_BRACE_ARGS 2
+
+typedef struct
+{
+ char *name;
+ COMMAND_FUNCTION *proc;
+ int argument_in_braces;
+} COMMAND;
+
+extern COMMAND command_table[];
+
+typedef struct acronym_desc
+{
+ struct acronym_desc *next;
+ char *acronym;
+ char *description;
+} ACRONYM_DESC;
+
+/* Texinfo commands. */
+extern void insert_self (int arg),
+ insert_space (int arg),
+ cm_ignore_line (void),
+ cm_ignore_arg (int arg, int start_pos, int end_pos),
+ cm_comment (void),
+ cm_no_op (void);
+
+/* Document structure and meta information. */
+extern void cm_setfilename (void),
+ cm_settitle (void),
+ cm_documentdescription (void),
+ cm_node (void),
+ cm_menu (void),
+ cm_detailmenu (void),
+ cm_dircategory (void),
+ cm_direntry (void),
+ cm_bye (void);
+
+/* File inclusion. */
+extern void cm_include (void),
+ cm_verbatiminclude (void);
+
+/* Cross referencing commands. */
+extern void cm_anchor (int arg),
+ cm_xref (int arg),
+ cm_pxref (int arg),
+ cm_ref (int arg),
+ cm_inforef (int arg),
+ cm_uref (int arg);
+
+/* Special insertions. */
+extern void cm_LaTeX (int arg),
+ cm_TeX (int arg),
+ cm_arrow (int arg),
+ cm_bullet (int arg),
+ cm_click (int arg),
+ cm_clicksequence (int arg),
+ cm_clickstyle (void),
+ cm_colon (void),
+ cm_comma (int arg),
+ cm_copyright (int arg),
+ cm_dots (int arg),
+ cm_enddots (int arg),
+ cm_equiv (int arg),
+ cm_error (int arg),
+ cm_expansion (int arg),
+ cm_image (int arg),
+ cm_insert_copying (void),
+ cm_guilsinglleft (int arg),
+ cm_guilsinglright (int arg),
+ cm_point (int arg),
+ cm_print (int arg),
+ cm_punct (int arg),
+ cm_quotedblbase (int arg),
+ cm_quotedblleft (int arg),
+ cm_quotedblright (int arg),
+ cm_quoteleft (int arg),
+ cm_quoteright (int arg),
+ cm_quotesinglbase (int arg),
+ cm_registeredsymbol (int arg),
+ cm_result (int arg);
+
+/* Emphasis and markup. */
+extern void cm_acronym (int arg),
+ cm_abbr (int arg),
+ cm_b (int arg),
+ cm_cite (int arg, int position),
+ cm_code (int arg),
+ cm_dfn (int arg, int position),
+ cm_dmn (int arg),
+ cm_email (int arg),
+ cm_emph (int arg),
+ cm_i (int arg),
+ cm_kbd (int arg),
+ cm_key (int arg),
+ cm_math (int arg),
+ cm_not_fixed_width (int arg, int start, int end),
+ cm_r (int arg),
+ cm_sansserif (int arg),
+ cm_sc (int arg, int start_pos, int end_pos),
+ cm_slanted (int arg),
+ cm_strong (int arg, int start_pos, int end_pos),
+ cm_tt (int arg),
+ cm_indicate_url (int arg, int start, int end),
+ cm_var (int arg, int start_pos, int end_pos),
+ cm_verb (int arg);
+
+/* Block environments. */
+extern void cm_cartouche (void),
+ cm_group (void),
+ cm_display (void),
+ cm_smalldisplay (void),
+ cm_example (void),
+ cm_smallexample (void),
+ cm_smalllisp (void),
+ cm_lisp (void),
+ cm_format (void),
+ cm_smallformat (void),
+ cm_quotation (void),
+ cm_copying (void),
+ cm_flushleft (void),
+ cm_flushright (void),
+ cm_verbatim (void),
+ cm_end (void);
+
+/* Tables, lists, enumerations. */
+extern void cm_table (void),
+ cm_ftable (void),
+ cm_vtable (void),
+ cm_itemize (void),
+ cm_enumerate (void),
+ cm_multitable (void),
+ cm_headitem (void),
+ cm_item (void),
+ cm_itemx (void),
+ cm_tab (void);
+
+extern void cm_center (void),
+ cm_exdent (void),
+ cm_indent (void),
+ cm_noindent (void),
+ cm_noindent_cmd (void);
+
+/* Line and page breaks. */
+extern void cm_asterisk (void),
+ cm_sp (void),
+ cm_page (void);
+
+/* Non breaking words. */
+extern void cm_tie (int arg),
+ cm_w (int arg);
+
+/* Title page creation. */
+extern void cm_titlepage (void),
+ cm_author (void),
+ cm_titlepage_cmds (void),
+ cm_titlefont (int arg),
+ cm_today (int arg);
+
+/* Floats. */
+extern void cm_float (void),
+ cm_caption (int arg),
+ cm_shortcaption (void),
+ cm_listoffloats (void);
+
+/* Indices. */
+extern void cm_kindex (void),
+ cm_cindex (void),
+ cm_findex (void),
+ cm_pindex (void),
+ cm_vindex (void),
+ cm_tindex (void),
+ cm_defindex (void),
+ cm_defcodeindex (void),
+ cm_synindex (void),
+ cm_printindex (void);
+
+/* Conditionals. */
+extern void cm_set (void),
+ cm_clear (void),
+ cm_ifset (void),
+ cm_ifclear (void),
+ cm_ifeq (void),
+ cm_value (int arg, int start_pos, int end_pos);
+
+#endif /* !CMDS_H */
diff --git a/makeinfo/defun.c b/makeinfo/defun.c
new file mode 100644
index 0000000..d1218a0
--- /dev/null
+++ b/makeinfo/defun.c
@@ -0,0 +1,720 @@
+/* defun.c -- @defun and friends.
+ $Id: defun.c,v 1.18 2007/09/15 23:48:45 karl Exp $
+
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007
+ 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 "system.h"
+#include "defun.h"
+#include "xml.h"
+#include "insertion.h"
+#include "makeinfo.h"
+#include "cmds.h"
+#include "html.h"
+
+
+#define DEFUN_SELF_DELIMITING(c) \
+ ((c) == '(' || (c) == ')' || (c) == '[' || (c) == ']')
+
+struct token_accumulator
+{
+ unsigned int length;
+ unsigned int index;
+ char **tokens;
+};
+
+static void
+initialize_token_accumulator (struct token_accumulator *accumulator)
+{
+ accumulator->length = 0;
+ accumulator->index = 0;
+ accumulator->tokens = NULL;
+}
+
+static void
+accumulate_token (struct token_accumulator *accumulator, char *token)
+{
+ if (accumulator->index >= accumulator->length)
+ {
+ accumulator->length += 10;
+ accumulator->tokens = xrealloc (accumulator->tokens,
+ (accumulator->length * sizeof (char *)));
+ }
+ accumulator->tokens[accumulator->index] = token;
+ accumulator->index += 1;
+}
+
+/* Given STRING_POINTER pointing at an open brace, skip forward and return a
+ pointer to just past the matching close brace. */
+static int
+scan_group_in_string (char **string_pointer)
+{
+ char *scan_string = (*string_pointer) + 1;
+ unsigned int level = 1;
+ int started_command = 0;
+
+ for (;;)
+ {
+ int c;
+ if (level == 0)
+ {
+ *string_pointer = scan_string;
+ return 1;
+ }
+ c = *scan_string++;
+ if (c == 0)
+ {
+ /* Tweak line_number to compensate for fact that
+ we gobbled the whole line before coming here. */
+ line_number--;
+ line_error (_("Missing `}' in @def arg"));
+ line_number++;
+ *string_pointer = scan_string - 1;
+ return 0;
+ }
+
+ if (c == '{' && !started_command)
+ level++;
+ if (c == '}' && !started_command)
+ level--;
+
+ /* remember if at @. */
+ started_command = (c == '@' && !started_command);
+ }
+}
+
+/* Return a list of tokens from the contents of STRING.
+ Commands and brace-delimited groups count as single tokens.
+ Contiguous whitespace characters are converted to a token
+ consisting of a single space. */
+static char **
+args_from_string (char *string)
+{
+ struct token_accumulator accumulator;
+ char *token_start, *token_end;
+ char *scan_string = string;
+
+ initialize_token_accumulator (&accumulator);
+
+ while (*scan_string)
+ { /* Replace arbitrary whitespace by a single space. */
+ if (whitespace (*scan_string))
+ {
+ scan_string += 1;
+ while (whitespace (*scan_string))
+ scan_string += 1;
+ accumulate_token ((&accumulator), (xstrdup (" ")));
+ continue;
+ }
+
+ /* Commands count as single tokens. */
+ if (*scan_string == COMMAND_PREFIX)
+ {
+ token_start = scan_string;
+ scan_string += 1;
+ if (self_delimiting (*scan_string))
+ scan_string += 1;
+ else
+ {
+ int c;
+ while (1)
+ {
+ c = *scan_string++;
+
+ if ((c == 0) || (c == '{') || (whitespace (c)))
+ {
+ scan_string -= 1;
+ break;
+ }
+ }
+
+ if (*scan_string == '{')
+ {
+ char *s = scan_string;
+ (void) scan_group_in_string (&s);
+ scan_string = s;
+ }
+ }
+ token_end = scan_string;
+ }
+
+ /* Parentheses and brackets are self-delimiting. */
+ else if (DEFUN_SELF_DELIMITING (*scan_string))
+ {
+ token_start = scan_string;
+ scan_string += 1;
+ token_end = scan_string;
+ }
+
+ /* Open brace introduces a group that is a single token. */
+ else if (*scan_string == '{')
+ {
+ char *s = scan_string;
+ int balanced = scan_group_in_string (&s);
+
+ token_start = scan_string + 1;
+ scan_string = s;
+ token_end = balanced ? (scan_string - 1) : scan_string;
+ }
+
+ /* Make commas separate tokens so to differentiate them from
+ parameter types in XML output. */
+ else if (*scan_string == ',')
+ {
+ token_start = scan_string;
+ scan_string += 1;
+ token_end = scan_string;
+ }
+
+ /* Otherwise a token is delimited by whitespace, parentheses,
+ brackets, or braces. A token is also ended by a command. */
+ else
+ {
+ token_start = scan_string;
+
+ for (;;)
+ {
+ int c;
+
+ c = *scan_string++;
+
+ /* Do not back up if we're looking at a }; since the only
+ valid }'s are those matched with {'s, we want to give
+ an error. If we back up, we go into an infinite loop. */
+ if (!c || whitespace (c) || DEFUN_SELF_DELIMITING (c)
+ || c == '{')
+ {
+ scan_string--;
+ break;
+ }
+
+ /* End token if we are looking at a comma, as commas are
+ delimiters too. */
+ if (c == ',')
+ {
+ scan_string--;
+ break;
+ }
+
+ /* If we encounter a command embedded within a token,
+ then end the token. */
+ if (c == COMMAND_PREFIX)
+ {
+ scan_string--;
+ break;
+ }
+ }
+ token_end = scan_string;
+ }
+
+ accumulate_token (&accumulator, substring (token_start, token_end));
+ }
+ accumulate_token (&accumulator, NULL);
+ return accumulator.tokens;
+}
+
+static void
+process_defun_args (char **defun_args, int auto_var_p)
+{
+ int pending_space = 0;
+
+ if (xml)
+ {
+ xml_process_defun_args (defun_args, auto_var_p);
+ return;
+ }
+
+ for (;;)
+ {
+ char *defun_arg = *defun_args++;
+
+ if (defun_arg == NULL)
+ break;
+
+ if (defun_arg[0] == ' ')
+ {
+ pending_space = 1;
+ continue;
+ }
+
+ if (pending_space)
+ {
+ add_char (' ');
+ pending_space = 0;
+ }
+
+ if (DEFUN_SELF_DELIMITING (defun_arg[0]))
+ {
+ /* Within @deffn and friends, texinfo.tex makes parentheses
+ sans serif and brackets bold. We use roman instead. */
+ if (html)
+ insert_html_tag (START, "");
+
+ add_char (defun_arg[0]);
+
+ if (html)
+ insert_html_tag (END, "");
+ }
+ /* else if (defun_arg[0] == '&' || defun_arg[0] == COMMAND_PREFIX) */
+ /* execute_string ("%s", defun_arg); */
+ /* else if (auto_var_p) */
+ /* execute_string ("%s", defun_arg); */
+ else
+ execute_string ("%s", defun_arg);
+ }
+}
+
+static char *
+next_nonwhite_defun_arg (char ***arg_pointer)
+{
+ char **scan = (*arg_pointer);
+ char *arg = (*scan++);
+
+ if ((arg != 0) && (*arg == ' '))
+ arg = *scan++;
+
+ if (arg == 0)
+ scan -= 1;
+
+ *arg_pointer = scan;
+
+ return (arg == 0) ? "" : arg;
+}
+
+
+/* This is needed also in insertion.c. */
+
+enum insertion_type
+get_base_type (enum insertion_type type)
+{
+ enum insertion_type base_type;
+ switch (type)
+ {
+ case defivar: base_type = defcv; break;
+ case defmac: base_type = deffn; break;
+ case defmethod: base_type = defop; break;
+ case defopt: base_type = defvr; break;
+ case defspec: base_type = deffn; break;
+ case deftypecv: base_type = deftypecv; break;
+ case deftypefun: base_type = deftypefn; break;
+ case deftypeivar: base_type = deftypeivar; break;
+ case deftypemethod: base_type = deftypemethod; break;
+ case deftypeop: base_type = deftypeop; break;
+ case deftypevar: base_type = deftypevr; break;
+ case defun: base_type = deffn; break;
+ case defvar: base_type = defvr; break;
+ default:
+ base_type = type;
+ break;
+ }
+
+ return base_type;
+}
+
+/* Make the defun type insertion.
+ TYPE says which insertion this is.
+ X_P, if nonzero, says not to start a new insertion. */
+static void
+defun_internal (enum insertion_type type, int x_p)
+{
+ enum insertion_type base_type;
+ char **defun_args, **scan_args;
+ const char *category;
+ char *defined_name;
+ char *type_name = NULL;
+ char *type_name2 = NULL;
+
+ {
+ char *line;
+
+ /* The @def.. line is the only place in Texinfo where you are
+ allowed to use unquoted braces that don't delimit arguments of
+ a command or a macro; in any other place it will trigger an
+ error message from the reader loop. The special handling of
+ this case inside `args_from_string' is an extra special hack
+ which allows this. The side effect is that if we try to expand
+ the rest of the line below, the recursive reader loop will
+ signal an error if there are brace-delimited arguments on that line.
+
+ The best solution to this would be to change the syntax of
+ @def.. commands so that it doesn't violate Texinfo's own rules.
+ But it's probably too late for this now, as it will break a lot
+ of existing manuals.
+
+ Unfortunately, this means that you can't call macros, use @value, etc.
+ inside @def.. commands, sigh. */
+ get_rest_of_line (0, &line);
+
+ /* Basic line continuation. If a line ends with \s*@\s* concatanate
+ the next line. */
+ {
+ char *next_line, *new_line;
+ int i;
+
+ line_continuation:
+ i = strlen (line) - 1;
+
+ if (i > 0 && line[i] == '@' && line[i-1] != '@')
+ {
+ get_rest_of_line (0, &next_line);
+ new_line = (char *) xmalloc (i + strlen (next_line) + 2);
+ strncpy (new_line, line, i);
+ new_line[i] = '\0';
+ free (line);
+ strcat (new_line, " ");
+ strcat (new_line, next_line);
+ line = xstrdup (new_line);
+ free (next_line);
+ free (new_line);
+
+ goto line_continuation;
+ }
+ }
+
+ defun_args = (args_from_string (line));
+ free (line);
+ }
+
+ scan_args = defun_args;
+
+ /* Get base type and category string. */
+ base_type = get_base_type (type);
+
+ /* xx all these const strings should be determined upon
+ documentlanguage argument and NOT via gettext (kama). */
+ switch (type)
+ {
+ case defun:
+ case deftypefun:
+ category = gdt("Function");
+ break;
+ case defmac:
+ category = gdt("Macro");
+ break;
+ case defspec:
+ category = gdt("Special Form");
+ break;
+ case defvar:
+ case deftypevar:
+ category = gdt("Variable");
+ break;
+ case defopt:
+ category = gdt("User Option");
+ break;
+ case defivar:
+ case deftypeivar:
+ category = gdt("Instance Variable");
+ break;
+ case defmethod:
+ case deftypemethod:
+ category = gdt("Method");
+ break;
+ default:
+ category = next_nonwhite_defun_arg (&scan_args);
+ break;
+ }
+
+ /* The class name. */
+ if ((base_type == deftypecv)
+ || (base_type == deftypefn)
+ || (base_type == deftypevr)
+ || (base_type == defcv)
+ || (base_type == defop)
+ || (base_type == deftypeivar)
+ || (base_type == deftypemethod)
+ || (base_type == deftypeop)
+ )
+ type_name = next_nonwhite_defun_arg (&scan_args);
+
+ /* The type name for typed languages. */
+ if ((base_type == deftypecv)
+ || (base_type == deftypeivar)
+ || (base_type == deftypemethod)
+ || (base_type == deftypeop)
+ )
+ type_name2 = next_nonwhite_defun_arg (&scan_args);
+
+ /* The function or whatever that's actually being defined. */
+ defined_name = next_nonwhite_defun_arg (&scan_args);
+
+ /* This hack exists solely for the purposes of formatting the Texinfo
+ manual. I couldn't think of a better way. The token might be a
+ simple @@ followed immediately by more text. If this is the case,
+ then the next defun arg is part of this one, and we should
+ concatenate them. */
+ if (*scan_args && **scan_args && !whitespace (**scan_args)
+ && STREQ (defined_name, "@@"))
+ {
+ char *tem = xmalloc (3 + strlen (scan_args[0]));
+
+ sprintf (tem, "@@%s", scan_args[0]);
+
+ free (scan_args[0]);
+ scan_args[0] = tem;
+ scan_args++;
+ defined_name = tem;
+ }
+
+ /* It's easy to write @defun foo(arg1 arg2), but a following ( is
+ misparsed by texinfo.tex and this is next to impossible to fix.
+ Warn about it. */
+ if (*scan_args && **scan_args && **scan_args == '(')
+ warning ("`%c' follows defined name `%s' instead of whitespace",
+ **scan_args, defined_name);
+
+ if (!x_p)
+ begin_insertion (type);
+
+ /* Write the definition header line.
+ This should start at the normal indentation. */
+ current_indent -= default_indentation_increment;
+ start_paragraph ();
+
+ if (!html && !xml)
+ switch (base_type)
+ {
+ case deffn:
+ case defvr:
+ case deftp:
+ execute_string (" --- %s: %s", category, defined_name);
+ break;
+ case deftypefn:
+ case deftypevr:
+ execute_string (" --- %s: %s %s", category, type_name, defined_name);
+ break;
+ case defcv:
+ execute_string (" --- %s %s %s: %s", category, gdt("of"), type_name,
+ defined_name);
+ break;
+ case deftypecv:
+ case deftypeivar:
+ execute_string (" --- %s %s %s: %s %s", category, gdt("of"), type_name,
+ type_name2, defined_name);
+ break;
+ case defop:
+ execute_string (" --- %s %s %s: %s", category, gdt("on"), type_name,
+ defined_name);
+ break;
+ case deftypeop:
+ execute_string (" --- %s %s %s: %s %s", category, gdt("on"), type_name,
+ type_name2, defined_name);
+ break;
+ case deftypemethod:
+ execute_string (" --- %s %s %s: %s %s", category, gdt("on"), type_name,
+ type_name2, defined_name);
+ break;
+ }
+ else if (html)
+ {
+ /* If this is not a @def...x version, it could only
+ be a normal version @def.... So start the table here. */
+ if (!x_p)
+ insert_string ("<div class=\"defun\">\n");
+ else
+ rollback_empty_tag ("blockquote");
+
+ /* xx The single words (on, off) used here, should depend on
+ documentlanguage and NOT on gettext --kama. */
+ switch (base_type)
+ {
+ case deffn:
+ case defvr:
+ case deftp:
+ case deftypefn:
+ case deftypevr:
+ execute_string ("--- %s: ", category);
+ break;
+
+ case defcv:
+ case deftypecv:
+ case deftypeivar:
+ execute_string ("--- %s %s %s: ", category, gdt("of"), type_name);
+ break;
+
+ case defop:
+ case deftypemethod:
+ case deftypeop:
+ execute_string ("--- %s %s %s: ", category, gdt("on"), type_name);
+ break;
+ } /* switch (base_type)... */
+
+ switch (base_type)
+ {
+ case deffn:
+ case defvr:
+ case deftp:
+ /* <var> is for the following function arguments. */
+ insert_html_tag (START, "b");
+ execute_string ("%s", defined_name);
+ insert_html_tag (END, "b");
+ insert_html_tag (START, "var");
+ break;
+ case deftypefn:
+ case deftypevr:
+ execute_string ("%s ", type_name);
+ insert_html_tag (START, "b");
+ execute_string ("%s", defined_name);
+ insert_html_tag (END, "b");
+ insert_html_tag (START, "var");
+ break;
+ case defcv:
+ case defop:
+ insert_html_tag (START, "b");
+ execute_string ("%s", defined_name);
+ insert_html_tag (END, "b");
+ insert_html_tag (START, "var");
+ break;
+ case deftypecv:
+ case deftypeivar:
+ case deftypemethod:
+ case deftypeop:
+ execute_string ("%s ", type_name2);
+ insert_html_tag (START, "b");
+ execute_string ("%s", defined_name);
+ insert_html_tag (END, "b");
+ insert_html_tag (START, "var");
+ break;
+ }
+ }
+ else if (xml)
+ xml_begin_def_term (base_type, category, defined_name, type_name,
+ type_name2);
+
+ current_indent += default_indentation_increment;
+
+ /* Now process the function arguments, if any. If these carry onto
+ the next line, they should be indented by two increments to
+ distinguish them from the body of the definition, which is indented
+ by one increment. */
+ current_indent += default_indentation_increment;
+
+ switch (base_type)
+ {
+ case deffn:
+ case defop:
+ process_defun_args (scan_args, 1);
+ break;
+
+ /* Through Makeinfo 1.67 we processed remaining args only for deftp,
+ deftypefn, and deftypemethod. But the libc manual, for example,
+ needs to say:
+ @deftypevar {char *} tzname[2]
+ And simply allowing the extra text seems far simpler than trying
+ to invent yet more defn commands. In any case, we should either
+ output it or give an error, not silently ignore it. */
+ default:
+ process_defun_args (scan_args, 0);
+ break;
+ }
+
+ current_indent -= default_indentation_increment;
+ if (!html)
+ close_single_paragraph ();
+
+ /* Make an entry in the appropriate index. (XML and
+ Docbook already got their entries, so skip them.) */
+ if (!xml)
+ switch (base_type)
+ {
+ case deffn:
+ case deftypefn:
+ execute_string ("@findex %s\n", defined_name);
+ break;
+ case defcv:
+ case deftypecv:
+ case deftypevr:
+ case defvr:
+ execute_string ("@vindex %s\n", defined_name);
+ break;
+ case deftypeivar:
+ execute_string ("@vindex %s %s %s\n", defined_name, gdt("of"),
+ type_name);
+ break;
+ case defop:
+ case deftypeop:
+ case deftypemethod:
+ execute_string ("@findex %s %s %s\n", defined_name, gdt("on"),
+ type_name);
+ break;
+ case deftp:
+ execute_string ("@tindex %s\n", defined_name);
+ break;
+ }
+
+ if (xml)
+ xml_end_def_term ();
+ else if (html)
+ {
+ inhibit_paragraph_indentation = 1;
+ no_indent = 1;
+ insert_html_tag (END, "var");
+ insert_string ("<br>\n");
+ /* Indent the definition a bit. */
+ add_html_block_elt ("<blockquote>");
+ no_indent = 0;
+ inhibit_paragraph_indentation = 0;
+ paragraph_is_open = 0;
+ }
+
+ /* Deallocate the token list. */
+ scan_args = defun_args;
+ while (1)
+ {
+ char * arg = (*scan_args++);
+ if (arg == NULL)
+ break;
+ free (arg);
+ }
+ free (defun_args);
+}
+
+/* Add an entry for a function, macro, special form, variable, or option.
+ If the name of the calling command ends in `x', then this is an extra
+ entry included in the body of an insertion of the same type. */
+void
+cm_defun (void)
+{
+ enum insertion_type type;
+ char *base_command = xstrdup (command); /* command with any `x' removed */
+ /* FIXME: is strlen(command) allways > 0? */
+ int x_p = (command[strlen (command) - 1] == 'x');
+
+ if (x_p)
+ base_command[strlen (base_command) - 1] = 0;
+
+ type = find_type_from_name (base_command);
+
+ /* If we are adding to an already existing insertion, then make sure
+ that we are already in an insertion of type TYPE. */
+ if (x_p)
+ {
+ INSERTION_ELT *i = insertion_stack;
+ /* Skip over ifclear and ifset conditionals. */
+ while (i && (i->insertion == ifset || i->insertion == ifclear))
+ i = i->next;
+
+ if (!i || i->insertion != type)
+ {
+ line_error (_("Must be in `@%s' environment to use `@%s'"),
+ base_command, command);
+ discard_until ("\n");
+ return;
+ }
+ }
+
+ defun_internal (type, x_p);
+ free (base_command);
+}
diff --git a/makeinfo/defun.h b/makeinfo/defun.h
new file mode 100644
index 0000000..fcd4ff9
--- /dev/null
+++ b/makeinfo/defun.h
@@ -0,0 +1,30 @@
+/* defun.h -- declaration for defuns.
+ $Id: defun.h,v 1.6 2007/07/01 21:20:32 karl Exp $
+
+ Copyright (C) 1999, 2005, 2007 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 Karl Heinz Marbaise <kama@hippo.fido.de>. */
+
+#ifndef DEFUN_H
+#define DEFUN_H
+
+#include "insertion.h"
+
+extern enum insertion_type get_base_type (enum insertion_type);
+extern void cm_defun (void);
+
+#endif /* !DEFUN_H */
+
diff --git a/makeinfo/files.c b/makeinfo/files.c
new file mode 100644
index 0000000..49e3658
--- /dev/null
+++ b/makeinfo/files.c
@@ -0,0 +1,783 @@
+/* files.c -- file-related functions for makeinfo.
+ $Id: files.c,v 1.8 2007/07/01 21:20:32 karl Exp $
+
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2007
+ 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 "system.h"
+#include "files.h"
+#include "html.h"
+#include "index.h"
+#include "macro.h"
+#include "makeinfo.h"
+#include "node.h"
+
+FSTACK *filestack = NULL;
+
+static int node_filename_stack_index = 0;
+static int node_filename_stack_size = 0;
+static char **node_filename_stack = NULL;
+
+/* Looking for include files. */
+
+/* Given a string containing units of information separated by colons,
+ return the next one pointed to by INDEX, or NULL if there are no more.
+ Advance INDEX to the character after the colon. */
+static char *
+extract_colon_unit (char *string, int *index)
+{
+ int start;
+ int path_sep_char = PATH_SEP[0];
+ int i = *index;
+
+ if (!string || (i >= strlen (string)))
+ return NULL;
+
+ /* Each call to this routine leaves the index pointing at a colon if
+ there is more to the path. If i > 0, then increment past the
+ `:'. If i == 0, then the path has a leading colon. Trailing colons
+ are handled OK by the `else' part of the if statement; an empty
+ string is returned in that case. */
+ if (i && string[i] == path_sep_char)
+ i++;
+
+ start = i;
+ while (string[i] && string[i] != path_sep_char) i++;
+ *index = i;
+
+ if (i == start)
+ {
+ if (string[i])
+ (*index)++;
+
+ /* Return "" in the case of a trailing `:'. */
+ return xstrdup ("");
+ }
+ else
+ {
+ char *value;
+
+ value = xmalloc (1 + (i - start));
+ memcpy (value, &string[start], (i - start));
+ value [i - start] = 0;
+
+ return value;
+ }
+}
+
+/* Return the full pathname for FILENAME by searching along PATH.
+ When found, return the stat () info for FILENAME in FINFO.
+ If PATH is NULL, only the current directory is searched.
+ If the file could not be found, return a NULL pointer. */
+char *
+get_file_info_in_path (char *filename, char *path, struct stat *finfo)
+{
+ char *dir;
+ int result, index = 0;
+
+ if (path == NULL)
+ path = ".";
+
+ /* Handle absolute pathnames. */
+ if (IS_ABSOLUTE (filename)
+ || (*filename == '.'
+ && (IS_SLASH (filename[1])
+ || (filename[1] == '.' && IS_SLASH (filename[2])))))
+ {
+ if (stat (filename, finfo) == 0)
+ return xstrdup (filename);
+ else
+ return NULL;
+ }
+
+ while ((dir = extract_colon_unit (path, &index)))
+ {
+ char *fullpath;
+
+ if (!*dir)
+ {
+ free (dir);
+ dir = xstrdup (".");
+ }
+
+ fullpath = xmalloc (2 + strlen (dir) + strlen (filename));
+ sprintf (fullpath, "%s/%s", dir, filename);
+ free (dir);
+
+ result = stat (fullpath, finfo);
+
+ if (result == 0)
+ return fullpath;
+ else
+ free (fullpath);
+ }
+ return NULL;
+}
+
+/* Prepend and append new paths to include_files_path. */
+void
+prepend_to_include_path (char *path)
+{
+ if (!include_files_path)
+ {
+ include_files_path = xstrdup (path);
+ include_files_path = xrealloc (include_files_path,
+ strlen (include_files_path) + 3); /* 3 for ":.\0" */
+ strcat (strcat (include_files_path, PATH_SEP), ".");
+ }
+ else
+ {
+ char *tmp = xstrdup (include_files_path);
+ include_files_path = xrealloc (include_files_path,
+ strlen (include_files_path) + strlen (path) + 2); /* 2 for ":\0" */
+ strcpy (include_files_path, path);
+ strcat (include_files_path, PATH_SEP);
+ strcat (include_files_path, tmp);
+ free (tmp);
+ }
+}
+
+void
+append_to_include_path (char *path)
+{
+ if (!include_files_path)
+ include_files_path = xstrdup (".");
+
+ include_files_path = (char *) xrealloc (include_files_path,
+ 2 + strlen (include_files_path) + strlen (path));
+ strcat (include_files_path, PATH_SEP);
+ strcat (include_files_path, path);
+}
+
+/* Remove the first path from the include_files_path. */
+void
+pop_path_from_include_path (void)
+{
+ int i = 0;
+ char *tmp;
+
+ if (include_files_path)
+ for (i = 0; i < strlen (include_files_path)
+ && include_files_path[i] != ':'; i++);
+
+ /* Advance include_files_path to the next char from ':' */
+ tmp = (char *) xmalloc (strlen (include_files_path) - i);
+ strcpy (tmp, (char *) include_files_path + i + 1);
+
+ free (include_files_path);
+ include_files_path = tmp;
+}
+
+/* Find and load the file named FILENAME. Return a pointer to
+ the loaded file, or NULL if it can't be loaded. If USE_PATH is zero,
+ just look for the given file (this is used in handle_delayed_writes),
+ else search along include_files_path. */
+
+char *
+find_and_load (char *filename, int use_path)
+{
+ struct stat fileinfo;
+ long file_size;
+ int file = -1, count = 0;
+ char *fullpath, *result;
+ int n, bytes_to_read;
+
+ result = fullpath = NULL;
+
+ fullpath
+ = get_file_info_in_path (filename, use_path ? include_files_path : NULL,
+ &fileinfo);
+
+ if (!fullpath)
+ goto error_exit;
+
+ filename = fullpath;
+ file_size = (long) fileinfo.st_size;
+
+ file = open (filename, O_RDONLY);
+ if (file < 0)
+ goto error_exit;
+
+ /* Load the file, with enough room for a newline and a null. */
+ result = xmalloc (file_size + 2);
+
+ /* VMS stat lies about the st_size value. The actual number of
+ readable bytes is always less than this value. The arcane
+ mysteries of VMS/RMS are too much to probe, so this hack
+ suffices to make things work. It's also needed on Cygwin. And so
+ we might as well use it everywhere. */
+ bytes_to_read = file_size;
+ while ((n = read (file, result + count, bytes_to_read)) > 0)
+ {
+ count += n;
+ bytes_to_read -= n;
+ }
+ if (0 < count && count < file_size)
+ result = xrealloc (result, count + 2); /* why waste the slack? */
+ else if (n == -1)
+error_exit:
+ {
+ if (result)
+ free (result);
+
+ if (fullpath)
+ free (fullpath);
+
+ if (file != -1)
+ close (file);
+
+ return NULL;
+ }
+ close (file);
+
+ /* Set the globals to the new file. */
+ input_text = result;
+ input_text_length = count;
+ input_filename = fullpath;
+ node_filename = xstrdup (fullpath);
+ input_text_offset = 0;
+ line_number = 1;
+ /* Not strictly necessary. This magic prevents read_token () from doing
+ extra unnecessary work each time it is called (that is a lot of times).
+ INPUT_TEXT_LENGTH is one past the actual end of the text. */
+ input_text[input_text_length] = '\n';
+ /* This, on the other hand, is always necessary. */
+ input_text[input_text_length+1] = 0;
+ return result;
+}
+
+/* Pushing and popping files. */
+static void
+push_node_filename (void)
+{
+ if (node_filename_stack_index + 1 > node_filename_stack_size)
+ node_filename_stack = xrealloc
+ (node_filename_stack, (node_filename_stack_size += 10) * sizeof (char *));
+
+ node_filename_stack[node_filename_stack_index] = node_filename;
+ node_filename_stack_index++;
+}
+
+static void
+pop_node_filename (void)
+{
+ node_filename = node_filename_stack[--node_filename_stack_index];
+}
+
+/* Save the state of the current input file. */
+void
+pushfile (void)
+{
+ FSTACK *newstack = xmalloc (sizeof (FSTACK));
+ newstack->filename = input_filename;
+ newstack->text = input_text;
+ newstack->size = input_text_length;
+ newstack->offset = input_text_offset;
+ newstack->line_number = line_number;
+ newstack->next = filestack;
+
+ filestack = newstack;
+ push_node_filename ();
+}
+
+/* Make the current file globals be what is on top of the file stack. */
+void
+popfile (void)
+{
+ FSTACK *tos = filestack;
+
+ if (!tos)
+ abort (); /* My fault. I wonder what I did? */
+
+ if (macro_expansion_output_stream)
+ {
+ maybe_write_itext (input_text, input_text_offset);
+ forget_itext (input_text);
+ }
+
+ /* Pop the stack. */
+ filestack = filestack->next;
+
+ /* Make sure that commands with braces have been satisfied. */
+ if (!executing_string && !me_executing_string)
+ discard_braces ();
+
+ /* Get the top of the stack into the globals. */
+ input_filename = tos->filename;
+ input_text = tos->text;
+ input_text_length = tos->size;
+ input_text_offset = tos->offset;
+ line_number = tos->line_number;
+ free (tos);
+
+ /* Go back to the (now) current node. */
+ pop_node_filename ();
+}
+
+/* Flush all open files on the file stack. */
+void
+flush_file_stack (void)
+{
+ while (filestack)
+ {
+ char *fname = input_filename;
+ char *text = input_text;
+ popfile ();
+ free (fname);
+ free (text);
+ }
+}
+
+/* Return the index of the first character in the filename
+ which is past all the leading directory characters. */
+static int
+skip_directory_part (char *filename)
+{
+ int i = strlen (filename) - 1;
+
+ while (i && !IS_SLASH (filename[i]))
+ i--;
+ if (IS_SLASH (filename[i]))
+ i++;
+ else if (filename[i] && HAVE_DRIVE (filename))
+ i = 2;
+
+ return i;
+}
+
+static char *
+filename_non_directory (char *name)
+{
+ return xstrdup (name + skip_directory_part (name));
+}
+
+/* Return just the simple part of the filename; i.e. the
+ filename without the path information, or extensions.
+ This conses up a new string. */
+char *
+filename_part (char *filename)
+{
+ char *basename = filename_non_directory (filename);
+
+#ifdef REMOVE_OUTPUT_EXTENSIONS
+ /* See if there is an extension to remove. If so, remove it. */
+ {
+ char *temp = strrchr (basename, '.');
+ if (temp)
+ *temp = 0;
+ }
+#endif /* REMOVE_OUTPUT_EXTENSIONS */
+ return basename;
+}
+
+/* Return the pathname part of filename. This can be NULL. */
+char *
+pathname_part (char *filename)
+{
+ char *result = NULL;
+ int i;
+
+ filename = expand_filename (filename, "");
+
+ i = skip_directory_part (filename);
+ if (i)
+ {
+ result = xmalloc (1 + i);
+ strncpy (result, filename, i);
+ result[i] = 0;
+ }
+ free (filename);
+ return result;
+}
+
+/* Return the full path to FILENAME. */
+static char *
+full_pathname (char *filename)
+{
+ int initial_character;
+ char *result;
+
+ /* No filename given? */
+ if (!filename || !*filename)
+ return xstrdup ("");
+
+ /* Already absolute? */
+ if (IS_ABSOLUTE (filename) ||
+ (*filename == '.' &&
+ (IS_SLASH (filename[1]) ||
+ (filename[1] == '.' && IS_SLASH (filename[2])))))
+ return xstrdup (filename);
+
+ initial_character = *filename;
+ if (initial_character != '~')
+ {
+ char *localdir = xmalloc (1025);
+#ifdef HAVE_GETCWD
+ if (!getcwd (localdir, 1024))
+#else
+ if (!getwd (localdir))
+#endif
+ {
+ fprintf (stderr, _("%s: getwd: %s, %s\n"),
+ progname, filename, localdir);
+ xexit (1);
+ }
+
+ strcat (localdir, "/");
+ strcat (localdir, filename);
+ result = xstrdup (localdir);
+ free (localdir);
+ }
+ else
+ { /* Does anybody know why WIN32 doesn't want to support $HOME?
+ If the reason is they don't have getpwnam, they should
+ only disable the else clause below. */
+#ifndef WIN32
+ if (IS_SLASH (filename[1]))
+ {
+ /* Return the concatenation of the environment variable HOME
+ and the rest of the string. */
+ char *temp_home;
+
+ temp_home = (char *) getenv ("HOME");
+ result = xmalloc (strlen (&filename[1])
+ + 1
+ + temp_home ? strlen (temp_home)
+ : 0);
+ *result = 0;
+
+ if (temp_home)
+ strcpy (result, temp_home);
+
+ strcat (result, &filename[1]);
+ }
+ else
+ {
+ struct passwd *user_entry;
+ int i, c;
+ char *username = xmalloc (257);
+
+ for (i = 1; (c = filename[i]); i++)
+ {
+ if (IS_SLASH (c))
+ break;
+ else
+ username[i - 1] = c;
+ }
+ if (c)
+ username[i - 1] = 0;
+
+ user_entry = getpwnam (username);
+
+ if (!user_entry)
+ return xstrdup (filename);
+
+ result = xmalloc (1 + strlen (user_entry->pw_dir)
+ + strlen (&filename[i]));
+ strcpy (result, user_entry->pw_dir);
+ strcat (result, &filename[i]);
+ }
+#endif /* not WIN32 */
+ }
+ return result;
+}
+
+/* Return the expansion of FILENAME. */
+char *
+expand_filename (char *filename, char *input_name)
+{
+ int i;
+
+ if (filename)
+ {
+ filename = full_pathname (filename);
+ if (IS_ABSOLUTE (filename)
+ || (*filename == '.' &&
+ (IS_SLASH (filename[1]) ||
+ (filename[1] == '.' && IS_SLASH (filename[2])))))
+ return filename;
+ }
+ else
+ {
+ filename = filename_non_directory (input_name);
+
+ if (!*filename)
+ {
+ free (filename);
+ filename = xstrdup ("noname.texi");
+ }
+
+ for (i = strlen (filename) - 1; i; i--)
+ if (filename[i] == '.')
+ break;
+
+ if (!i)
+ i = strlen (filename);
+
+ if (i + 6 > (strlen (filename)))
+ filename = xrealloc (filename, i + 6);
+ strcpy (filename + i, html ? ".html" : ".info");
+ return filename;
+ }
+
+ if (IS_ABSOLUTE (input_name))
+ {
+ /* Make it so that relative names work. */
+ char *result;
+
+ i = strlen (input_name) - 1;
+
+ result = xmalloc (1 + strlen (input_name) + strlen (filename));
+ strcpy (result, input_name);
+
+ while (!IS_SLASH (result[i]) && i)
+ i--;
+ if (IS_SLASH (result[i]))
+ i++;
+
+ strcpy (&result[i], filename);
+ free (filename);
+ return result;
+ }
+ return filename;
+}
+
+char *
+output_name_from_input_name (char *name)
+{
+ return expand_filename (NULL, name);
+}
+
+
+/* Modify the file name FNAME so that it fits the limitations of the
+ underlying filesystem. In particular, truncate the file name as it
+ would be truncated by the filesystem. We assume the result can
+ never be longer than the original, otherwise we couldn't be sure we
+ have enough space in the original string to modify it in place. */
+char *
+normalize_filename (char *fname)
+{
+ int maxlen;
+ char orig[PATH_MAX + 1];
+ int i;
+ char *lastdot, *p;
+
+#ifdef _PC_NAME_MAX
+ maxlen = pathconf (fname, _PC_NAME_MAX);
+ if (maxlen < 1)
+#endif
+ maxlen = PATH_MAX;
+
+ i = skip_directory_part (fname);
+ if (fname[i] == '\0')
+ return fname; /* only a directory name -- don't modify */
+ strcpy (orig, fname + i);
+
+ switch (maxlen)
+ {
+ case 12: /* MS-DOS 8+3 filesystem */
+ if (orig[0] == '.') /* leading dots are not allowed */
+ orig[0] = '_';
+ lastdot = strrchr (orig, '.');
+ if (!lastdot)
+ lastdot = orig + strlen (orig);
+ strncpy (fname + i, orig, lastdot - orig);
+ for (p = fname + i;
+ p < fname + i + (lastdot - orig) && p < fname + i + 8;
+ p++)
+ if (*p == '.')
+ *p = '_';
+ *p = '\0';
+ if (*lastdot == '.')
+ strncat (fname + i, lastdot, 4);
+ break;
+ case 14: /* old Unix systems with 14-char limitation */
+ strcpy (fname + i, orig);
+ if (strlen (fname + i) > 14)
+ fname[i + 14] = '\0';
+ break;
+ default:
+ strcpy (fname + i, orig);
+ if (strlen (fname) > maxlen - 1)
+ fname[maxlen - 1] = '\0';
+ break;
+ }
+
+ return fname;
+}
+
+/* Delayed writing functions. A few of the commands
+ needs to be handled at the end, namely @contents,
+ @shortcontents, @printindex and @listoffloats.
+ These functions take care of that. */
+static DELAYED_WRITE *delayed_writes = NULL;
+int handling_delayed_writes = 0;
+
+void
+register_delayed_write (char *delayed_command)
+{
+ DELAYED_WRITE *new;
+
+ if (!current_output_filename || !*current_output_filename)
+ {
+ /* Cannot register if we don't know what the output file is. */
+ warning (_("`%s' omitted before output filename"), delayed_command);
+ return;
+ }
+
+ if (STREQ (current_output_filename, "-"))
+ {
+ /* Do not register a new write if the output file is not seekable.
+ Let the user know about it first, though. */
+ warning (_("`%s' omitted since writing to stdout"), delayed_command);
+ return;
+ }
+
+ /* Don't complain if the user is writing /dev/null, since surely they
+ don't care, but don't register the delayed write, either. */
+ if (FILENAME_CMP (current_output_filename, NULL_DEVICE) == 0
+ || FILENAME_CMP (current_output_filename, ALSO_NULL_DEVICE) == 0)
+ return;
+
+ /* We need the HTML header in the output,
+ to get a proper output_position. */
+ if (!executing_string && html)
+ output_head ();
+ /* Get output_position updated. */
+ flush_output ();
+
+ new = xmalloc (sizeof (DELAYED_WRITE));
+ new->command = xstrdup (delayed_command);
+ new->filename = xstrdup (current_output_filename);
+ new->input_filename = xstrdup (input_filename);
+ new->position = output_position;
+ new->calling_line = line_number;
+ new->node = current_node ? xstrdup (current_node): "";
+
+ new->node_order = node_order;
+ new->index_order = index_counter;
+
+ new->next = delayed_writes;
+ delayed_writes = new;
+}
+
+void
+handle_delayed_writes (void)
+{
+ DELAYED_WRITE *temp = (DELAYED_WRITE *) reverse_list
+ ((GENERIC_LIST *) delayed_writes);
+ int position_shift_amount, line_number_shift_amount;
+ char *delayed_buf;
+
+ handling_delayed_writes = 1;
+
+ while (temp)
+ {
+ delayed_buf = find_and_load (temp->filename, 0);
+
+ if (output_paragraph_offset > 0)
+ {
+ error (_("Output buffer not empty."));
+ return;
+ }
+
+ if (!delayed_buf)
+ {
+ fs_error (temp->filename);
+ return;
+ }
+
+ output_stream = fopen (temp->filename, "w");
+ if (!output_stream)
+ {
+ fs_error (temp->filename);
+ return;
+ }
+
+ if (fwrite (delayed_buf, 1, temp->position, output_stream) != temp->position)
+ {
+ fs_error (temp->filename);
+ return;
+ }
+
+ {
+ int output_position_at_start = output_position;
+ int line_number_at_start = output_line_number;
+
+ /* In order to make warnings and errors
+ refer to the correct line number. */
+ input_filename = temp->input_filename;
+ line_number = temp->calling_line;
+
+ execute_string ("%s", temp->command);
+ flush_output ();
+
+ /* Since the output file is modified, following delayed writes
+ need to be updated by this amount. */
+ position_shift_amount = output_position - output_position_at_start;
+ line_number_shift_amount = output_line_number - line_number_at_start;
+ }
+
+ if (fwrite (delayed_buf + temp->position, 1,
+ input_text_length - temp->position, output_stream)
+ != input_text_length - temp->position
+ || fclose (output_stream) != 0)
+ fs_error (temp->filename);
+
+ /* Done with the buffer. */
+ free (delayed_buf);
+
+ /* Update positions in tag table for nodes that are defined after
+ the line this delayed write is registered. */
+ if (!html && !xml)
+ {
+ TAG_ENTRY *node;
+ for (node = tag_table; node; node = node->next_ent)
+ if (node->order > temp->node_order)
+ node->position += position_shift_amount;
+ }
+
+ /* Something similar for the line numbers in all of the defined
+ indices. */
+ {
+ int i;
+ for (i = 0; i < defined_indices; i++)
+ if (name_index_alist[i])
+ {
+ char *name = ((INDEX_ALIST *) name_index_alist[i])->name;
+ INDEX_ELT *index;
+ for (index = index_list (name); index; index = index->next)
+ if ((no_headers || STREQ (index->node, temp->node))
+ && index->entry_number > temp->index_order)
+ index->output_line += line_number_shift_amount;
+ }
+ }
+
+ /* Shift remaining delayed positions
+ by the length of this write. */
+ {
+ DELAYED_WRITE *future_write = temp->next;
+ while (future_write)
+ {
+ if (STREQ (temp->filename, future_write->filename))
+ future_write->position += position_shift_amount;
+ future_write = future_write->next;
+ }
+ }
+
+ temp = temp->next;
+ }
+}
diff --git a/makeinfo/files.h b/makeinfo/files.h
new file mode 100644
index 0000000..856c108
--- /dev/null
+++ b/makeinfo/files.h
@@ -0,0 +1,68 @@
+/* files.h -- declarations for files.c.
+ $Id: files.h,v 1.7 2007/07/01 21:20:32 karl Exp $
+
+ Copyright (C) 1998, 2002, 2004, 2007 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/>. */
+
+#ifndef FILES_H
+#define FILES_H
+
+/* A stack of file information records. If a new file is read in with
+ "@input", we remember the old input file state on this stack. */
+typedef struct fstack
+{
+ struct fstack *next;
+ char *filename;
+ char *text;
+ int size;
+ int offset;
+ int line_number;
+} FSTACK;
+extern FSTACK *filestack;
+
+extern void pushfile (void);
+extern void popfile (void);
+extern void flush_file_stack (void);
+extern char *get_file_info_in_path (char *filename, char *path,
+ struct stat *finfo);
+extern char *find_and_load (char *filename, int use_path);
+extern char *output_name_from_input_name (char *name);
+extern char *expand_filename (char *filename, char *input_name);
+extern char *filename_part (char *filename);
+extern char *pathname_part (char *filename);
+extern char *normalize_filename (char *fname);
+extern void append_to_include_path (char *path);
+extern void prepend_to_include_path (char *path);
+extern void pop_path_from_include_path (void);
+extern void register_delayed_write (char *delayed_command);
+extern void handle_delayed_writes (void);
+
+typedef struct delayed_write
+{
+ struct delayed_write *next;
+ char *command;
+ char *filename;
+ char *input_filename;
+ char *node;
+ int position;
+ int calling_line;
+
+ int node_order;
+ int index_order;
+} DELAYED_WRITE;
+
+extern int handling_delayed_writes;
+
+#endif /* !FILES_H */
diff --git a/makeinfo/float.c b/makeinfo/float.c
new file mode 100644
index 0000000..8866ffb
--- /dev/null
+++ b/makeinfo/float.c
@@ -0,0 +1,430 @@
+/* float.c -- float environment functions.
+ $Id: float.c,v 1.12 2007/07/01 21:20:32 karl Exp $
+
+ Copyright (C) 2003, 2004, 2007 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/>.
+
+ Originally written by Alper Ersoy <dirt@gtk.org>. */
+
+#include "system.h"
+#include "makeinfo.h"
+#include "cmds.h"
+#include "files.h"
+#include "float.h"
+#include "html.h"
+#include "sectioning.h"
+#include "xml.h"
+
+static FLOAT_ELT *float_stack = NULL;
+
+void
+add_new_float (char *id, char *title, char *shorttitle,
+ char *type, char *position)
+{
+ FLOAT_ELT *new = xmalloc (sizeof (FLOAT_ELT));
+ unsigned long num_len;
+
+ new->id = id;
+ new->type = type;
+ new->title = title;
+ new->shorttitle = shorttitle;
+ new->position = position;
+ new->title_used = 0;
+ new->defining_line = line_number - 1;
+
+ new->number = current_chapter_number ();
+ /* Append dot if not @unnumbered. */
+ num_len = strlen (new->number);
+ if (num_len > 0)
+ {
+ new->number = xrealloc (new->number, num_len + 1 + 1);
+ new->number[num_len] = '.';
+ new->number[num_len+1] = '\0';
+ }
+
+ { /* Append the current float number. */
+ unsigned len = strlen (new->number) + 21; /* that's 64 bits */
+ char *s = xmalloc (len + 1);
+
+ sprintf (s, "%s%d", new->number,
+ count_floats_of_type_in_chapter (text_expansion (type),
+ new->number) + 1);
+ free (new->number);
+ new->number = xstrdup (s);
+ }
+
+ /* Plain text output needs sectioning number and its title,
+ when listing floats. */
+ if (!html && !xml && no_headers)
+ {
+ new->section = current_sectioning_number ();
+ if (strlen (new->section) == 0)
+ new->section_name = current_sectioning_name ();
+ else
+ new->section_name = "";
+ }
+
+ new->next = float_stack;
+ float_stack = new;
+}
+
+int
+count_floats_of_type_in_chapter (char *type, char *chapter)
+{
+ int i = 0;
+ int l = strlen (chapter);
+ FLOAT_ELT *temp = float_stack;
+
+ while (temp && strncmp (temp->number, chapter, l) == 0)
+ {
+ if (strlen (temp->id) > 0 && STREQ (text_expansion (temp->type), type))
+ i++;
+ temp = temp->next;
+ }
+
+ return i;
+}
+
+char *
+current_float_title (void)
+{
+ return float_stack->title;
+}
+
+char *
+current_float_shorttitle (void)
+{
+ return float_stack->shorttitle;
+}
+
+char *
+current_float_type (void)
+{
+ return float_stack->type;
+}
+
+char *
+current_float_position (void)
+{
+ return float_stack->position;
+}
+
+char *
+current_float_number (void)
+{
+ return float_stack->number;
+}
+
+char *
+current_float_id (void)
+{
+ return float_stack->id;
+}
+
+char *
+get_float_ref (char *id)
+{
+ FLOAT_ELT *temp = float_stack;
+
+ while (temp)
+ {
+ if (STREQ (id, temp->id))
+ {
+ char *s = xmalloc (strlen (temp->type) + strlen (temp->number) + 2);
+ sprintf (s, "%s %s", temp->type, temp->number);
+ return s;
+ }
+ temp = temp->next;
+ }
+
+ return NULL;
+}
+
+static int
+float_type_exists (char *check_type)
+{
+ /* Check if the requested float_type exists in the floats stack. */
+ FLOAT_ELT *temp;
+
+ for (temp = float_stack; temp; temp = temp->next)
+ if (STREQ (temp->type, check_type) && temp->id && *temp->id)
+ return 1;
+
+ return 0;
+}
+
+void
+cm_listoffloats (void)
+{
+ char *float_type;
+ get_rest_of_line (1, &float_type);
+
+ /* get_rest_of_line increments the line number by one,
+ so to make warnings/errors point to the correct line,
+ we decrement the line_number again. */
+ if (!handling_delayed_writes)
+ line_number--;
+
+ if (handling_delayed_writes && !float_type_exists (float_type))
+ warning (_("Requested float type `%s' not previously used"), float_type);
+
+ if (xml)
+ {
+ xml_insert_element_with_attribute (LISTOFFLOATS, START,
+ "type=\"%s\"", text_expansion (float_type));
+ xml_insert_element (LISTOFFLOATS, END);
+ }
+ else if (!handling_delayed_writes)
+ {
+ int command_len = sizeof ("@ ") + strlen (command) + strlen (float_type);
+ char *list_command = xmalloc (command_len + 1);
+
+ /* These are for the text following @listoffloats command.
+ Handling them with delayed writes is too late. */
+ close_paragraph ();
+ cm_noindent ();
+
+ sprintf (list_command, "@%s %s", command, float_type);
+ register_delayed_write (list_command);
+ free (list_command);
+ }
+ else if (float_type_exists (float_type))
+ {
+ FLOAT_ELT *temp = (FLOAT_ELT *) reverse_list
+ ((GENERIC_LIST *) float_stack);
+ FLOAT_ELT *new_start = temp;
+
+ if (html)
+ insert_string ("<ul class=\"listoffloats\">\n");
+ else
+ {
+ if (!no_headers)
+ insert_string ("* Menu:\n\n");
+ }
+
+ while (temp)
+ {
+ if (strlen (temp->id) > 0 && STREQ (float_type, temp->type))
+ {
+ char *caption;
+ if (strlen (temp->shorttitle) > 0)
+ caption = expansion (temp->shorttitle, 0);
+ else if (strlen (temp->title) > 0)
+ caption = expansion (temp->title, 0);
+ else
+ caption = "";
+
+ if (html)
+ {
+ /* A bit of space for HTML reabality. */
+ insert_string (" ");
+ add_html_block_elt ("<li>");
+
+ /* Simply relying on @ref command doesn't work here, because
+ commas in the caption may confuse the argument parsing. */
+ add_word ("<a href=\"");
+ add_anchor_name (temp->id, 1);
+ add_word ("\">");
+
+ if (strlen (float_type) > 0)
+ execute_string ("%s", float_type);
+
+ if (strlen (temp->id) > 0)
+ {
+ if (strlen (float_type) > 0)
+ add_char (' ');
+
+ add_word (temp->number);
+ }
+
+ if (caption)
+ {
+ if (strlen (float_type) > 0 || strlen (temp->id) > 0)
+ insert_string (": ");
+ execute_string ("%s", caption);
+ }
+
+ add_word ("</a>");
+
+ add_html_block_elt ("</li>\n");
+ }
+ else
+ {
+ char *entry;
+ char *raw_entry;
+
+ int len;
+ int aux_chars_len; /* these are asterisk, colon, etc. */
+ int column_width; /* width of the first column in menus. */
+ int number_len; /* length of Figure X.Y: etc. */
+ int i = 0;
+
+ /* Chosen widths are to match what @printindex produces. */
+ if (no_headers)
+ {
+ column_width = 43;
+ /* We have only one auxiliary character, NULL. */
+ aux_chars_len = sizeof ("");
+ }
+ else
+ {
+ column_width = 37;
+ /* We'll be adding an asterisk, followed by a space
+ and then a colon after the title, to construct a
+ proper menu item. */
+ aux_chars_len = sizeof ("* :");
+ }
+
+ /* Allocate enough space for possible expansion later. */
+ raw_entry = (char *) xmalloc (strlen (float_type)
+ + strlen (temp->number) + strlen (caption)
+ + sizeof (": "));
+
+ sprintf (raw_entry, "%s %s", float_type, temp->number);
+
+ if (strlen (caption) > 0)
+ strcat (raw_entry, ": ");
+
+ number_len = strlen (raw_entry);
+
+ len = strlen (caption) + strlen (raw_entry);
+
+ strcat (raw_entry, caption);
+ len = strlen (raw_entry);
+
+ if (len + aux_chars_len > column_width)
+ { /* Shorten long titles by looking for a space before
+ column_width - strlen (" ..."). */
+ /* -1 is for NULL, which is already in aux_chars_len. */
+ aux_chars_len += sizeof ("...") - 1;
+ len = column_width - aux_chars_len;
+ while (raw_entry[len] != ' ' && len >= 0)
+ len--;
+
+ /* Advance to the whitespace. */
+ len++;
+
+ /* If we are at the end of, say, Figure X.Y:, but
+ we have a title, then this means title does not
+ contain any whitespaces. Or it may be that we
+ went as far as the beginning. Just print as much
+ as possible of the title. */
+ if (len == 0
+ || (len == number_len && strlen (caption) > 0))
+ len = column_width - sizeof ("...");
+
+ /* Break here. */
+ raw_entry[len] = 0;
+
+ entry = xmalloc (len + aux_chars_len);
+
+ if (!no_headers)
+ strcpy (entry, "* ");
+ else
+ entry[0] = 0;
+
+ strcat (entry, raw_entry);
+ strcat (entry, "...");
+
+ if (!no_headers)
+ strcat (entry, ":");
+ }
+ else
+ {
+ entry = xmalloc (len + aux_chars_len);
+
+ if (!no_headers)
+ strcpy (entry, "* ");
+ else
+ entry[0] = 0;
+
+ strcat (entry, raw_entry);
+
+ if (!no_headers)
+ strcat (entry, ":");
+ }
+
+ insert_string (entry);
+
+ i = strlen (entry);
+ /* We insert space chars until ``column_width + four spaces''
+ is reached, to make the layout the same with what we produce
+ for @printindex. This is of course not obligatory, though
+ easier on the eye. -1 is for NULL. */
+ while (i < column_width + sizeof (" ") - 1)
+ {
+ insert (' ');
+ i++;
+ }
+
+ if (no_headers)
+ {
+ if (strlen (temp->section) > 0)
+ { /* We got your number. */
+ insert_string ((char *) _("See "));
+ insert_string (temp->section);
+ }
+ else
+ { /* Sigh, @float in an @unnumbered. :-\ */
+ insert_string ("\n ");
+ insert_string ((char *) _("See "));
+ insert_string ("``");
+ insert_string (expansion (temp->section_name, 0));
+ insert_string ("''");
+ }
+ }
+ else
+ insert_string (temp->id);
+
+ insert_string (".\n");
+
+ free (entry);
+ }
+
+ if (strlen (caption) > 0)
+ free (caption);
+ }
+ temp = temp->next;
+ }
+
+ if (html)
+ {
+ inhibit_paragraph_indentation = 1;
+ insert_string ("</ul>\n\n");
+ }
+ else
+ insert ('\n');
+
+ /* Retain the original order of float stack. */
+ temp = new_start;
+ float_stack = (FLOAT_ELT *) reverse_list ((GENERIC_LIST *) temp);
+ }
+
+ free (float_type);
+ /* Re-increment the line number, because get_rest_of_line
+ left us looking at the next line after the command. */
+ line_number++;
+}
+
+int
+current_float_used_title (void)
+{
+ return float_stack->title_used;
+}
+
+void current_float_set_title_used (void)
+{
+ float_stack->title_used = 1;
+}
diff --git a/makeinfo/float.h b/makeinfo/float.h
new file mode 100644
index 0000000..d8a0753
--- /dev/null
+++ b/makeinfo/float.h
@@ -0,0 +1,55 @@
+/* float.h -- declarations for the float environment.
+ $Id: float.h,v 1.8 2007/07/01 21:20:32 karl Exp $
+
+ Copyright (C) 2003, 2004, 2007 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 Alper Ersoy <dirt@gtk.org>. */
+
+#ifndef FLOAT_H
+#define FLOAT_H
+
+typedef struct float_elt
+{
+ struct float_elt *next;
+ char *id;
+ char *type;
+ char *title;
+ char *shorttitle;
+ char *position;
+ char *number;
+ char *section;
+ char *section_name;
+ short title_used;
+ int defining_line;
+} FLOAT_ELT;
+
+extern void add_new_float (char *id, char *title, char *shorttitle,
+ char *type, char *position);
+extern void current_float_set_title_used (void);
+
+/* Information retrieval about the current float env. */
+extern char *current_float_id (void);
+extern char *current_float_title (void);
+extern char *current_float_shorttitle (void);
+extern char *current_float_type (void);
+extern char *current_float_position (void);
+extern char *current_float_number (void);
+extern char *get_float_ref (char *id);
+
+extern int count_floats_of_type_in_chapter (char *type, char *chapter);
+extern int current_float_used_title (void);
+
+#endif /* not FLOAT_H */
diff --git a/makeinfo/footnote.c b/makeinfo/footnote.c
new file mode 100644
index 0000000..381ce58
--- /dev/null
+++ b/makeinfo/footnote.c
@@ -0,0 +1,390 @@
+/* footnote.c -- footnotes for Texinfo.
+ $Id: footnote.c,v 1.12 2007/12/03 01:38:43 karl Exp $
+
+ Copyright (C) 1998, 1999, 2002, 2007 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 "system.h"
+#include "footnote.h"
+#include "macro.h"
+#include "makeinfo.h"
+#include "node.h"
+#include "xml.h"
+#include "xref.h"
+
+/* Nonzero means that the footnote style for this document was set on
+ the command line, which overrides any other settings. */
+int footnote_style_preset = 0;
+
+/* The current footnote number in this node. Each time a new node is
+ started this is reset to 1. */
+int current_footnote_number = 1;
+
+/* Nonzero means we automatically number footnotes with no specified marker. */
+int number_footnotes = 1;
+
+/* Nonzero means we are currently outputting footnotes. */
+int already_outputting_pending_notes = 0;
+
+
+/* Footnotes can be handled in one of two ways:
+
+ separate_node:
+ Make them look like followed references, with the reference
+ destinations in a makeinfo manufactured node or,
+ end_node:
+ Make them appear at the bottom of the node that they originally
+ appeared in. */
+
+#define separate_node 0
+#define end_node 1
+
+int footnote_style = end_node;
+int first_footnote_this_node = 1;
+int footnote_count = 0;
+
+/* Set the footnote style based on the style identifier in STRING. */
+int
+set_footnote_style (char *string)
+{
+ if (mbscasecmp (string, "separate") == 0)
+ footnote_style = separate_node;
+ else if (mbscasecmp (string, "end") == 0)
+ footnote_style = end_node;
+ else
+ return -1;
+
+ return 0;
+}
+
+void
+cm_footnotestyle (void)
+{
+ char *arg;
+
+ get_rest_of_line (1, &arg);
+
+ /* If set on command line, do not change the footnote style. */
+ if (!footnote_style_preset && set_footnote_style (arg) != 0)
+ line_error (_("Bad argument to %c%s"), COMMAND_PREFIX, command);
+
+ free (arg);
+}
+
+typedef struct fn
+{
+ struct fn *next;
+ char *marker;
+ char *note;
+ int number;
+} FN;
+
+FN *pending_notes = NULL;
+
+/* A method for remembering footnotes. Note that this list gets output
+ at the end of the current node. */
+static void
+remember_note (char *marker, char *note)
+{
+ FN *temp = xmalloc (sizeof (FN));
+
+ temp->marker = xstrdup (marker);
+ temp->note = xstrdup (note);
+ temp->next = pending_notes;
+ temp->number = current_footnote_number;
+ pending_notes = temp;
+ footnote_count++;
+}
+
+/* How to get rid of existing footnotes. */
+static void
+free_pending_notes (void)
+{
+ FN *temp;
+
+ while ((temp = pending_notes))
+ {
+ free (temp->marker);
+ free (temp->note);
+ pending_notes = pending_notes->next;
+ free (temp);
+ }
+ first_footnote_this_node = 1;
+ footnote_count = 0;
+ current_footnote_number = 1; /* for html */
+}
+
+/* What to do when you see a @footnote construct. */
+
+ /* Handle a "footnote".
+ footnote *{this is a footnote}
+ where "*" is the (optional) marker character for this note. */
+void
+cm_footnote (void)
+{
+ char *marker;
+ char *note;
+
+ get_until ("{", &marker);
+ canon_white (marker);
+
+ if (macro_expansion_output_stream && !executing_string)
+ append_to_expansion_output (input_text_offset + 1); /* include the { */
+
+ /* Read the argument in braces. */
+ if (curchar () != '{')
+ {
+ line_error (_("`%c%s' needs an argument `{...}', not just `%s'"),
+ COMMAND_PREFIX, command, marker);
+ free (marker);
+ return;
+ }
+ else
+ {
+ int len;
+ int braces = 1;
+ int loc = ++input_text_offset;
+
+ while (braces)
+ {
+ if (loc == input_text_length)
+ {
+ line_error (_("No closing brace for footnote `%s'"), marker);
+ return;
+ }
+
+ if (input_text[loc] == '{')
+ braces++;
+ else if (input_text[loc] == '}')
+ braces--;
+ else if (input_text[loc] == '\n')
+ line_number++;
+
+ loc++;
+ }
+
+ len = (loc - input_text_offset) - 1;
+ note = xmalloc (len + 1);
+ memcpy (note, &input_text[input_text_offset], len);
+ note[len] = 0;
+ input_text_offset = loc;
+ }
+
+ /* Must write the macro-expanded argument to the macro expansion
+ output stream. This is like the case in index_add_arg. */
+ if (macro_expansion_output_stream && !executing_string)
+ {
+ /* Calling me_execute_string on a lone } provokes an error, since
+ as far as the reader knows there is no matching {. We wrote
+ the { above in the call to append_to_expansion_output. */
+ me_execute_string_keep_state (note, "}");
+ }
+
+ if (!current_node || !*current_node)
+ {
+ line_error (_("Footnote defined without parent node"));
+ free (marker);
+ free (note);
+ return;
+ }
+
+ /* output_pending_notes is non-reentrant (it uses a global data
+ structure pending_notes, which it frees before it returns), and
+ TeX doesn't grok footnotes inside footnotes anyway. Disallow
+ that. */
+ if (already_outputting_pending_notes)
+ {
+ line_error (_("Footnotes inside footnotes are not allowed"));
+ free (marker);
+ free (note);
+ return;
+ }
+
+ if (!*marker)
+ {
+ free (marker);
+
+ if (number_footnotes)
+ {
+ marker = xmalloc (10);
+ sprintf (marker, "%d", current_footnote_number);
+ }
+ else
+ marker = xstrdup ("*");
+ }
+
+ if (xml)
+ xml_insert_footnote (note);
+ else
+ {
+ remember_note (marker, note);
+
+ /* fixme: html: footnote processing needs work; we currently ignore
+ the style requested; we could clash with a node name of the form
+ `fn-<n>', though that's unlikely. */
+ if (html)
+ {
+ /* Hyperlink also serves as an anchor (mnemonic: fnd is footnote
+ definition.) */
+ add_html_elt ("<a rel=\"footnote\" href=");
+ add_word_args ("\"#fn-%d\" name=\"fnd-%d\"><sup>%s</sup></a>",
+ current_footnote_number, current_footnote_number,
+ marker);
+ }
+ else
+ /* Your method should at least insert MARKER. */
+ switch (footnote_style)
+ {
+ case separate_node:
+ add_word_args ("(%s)", marker);
+ execute_string (" (*note %s-Footnote-%d::)",
+ current_node, current_footnote_number);
+ if (first_footnote_this_node)
+ {
+ char *temp_string, *expanded_ref;
+
+ temp_string = xmalloc (strlen (current_node)
+ + strlen ("-Footnotes") + 1);
+
+ strcpy (temp_string, current_node);
+ strcat (temp_string, "-Footnotes");
+ expanded_ref = expansion (temp_string, 0);
+ remember_node_reference (expanded_ref, line_number,
+ followed_reference);
+ free (temp_string);
+ free (expanded_ref);
+ first_footnote_this_node = 0;
+ }
+ break;
+
+ case end_node:
+ add_word_args ("(%s)", marker);
+ break;
+
+ default:
+ break;
+ }
+ current_footnote_number++;
+ }
+ free (marker);
+ free (note);
+}
+
+/* Output the footnotes. We are at the end of the current node. */
+void
+output_pending_notes (void)
+{
+ FN *footnote = pending_notes;
+
+ if (!pending_notes)
+ return;
+
+ if (html)
+ {
+ add_html_block_elt ("<div class=\"footnote\">\n<hr>\n");
+ /* We add an anchor here so @printindex can refer to this point
+ (as the node name) for entries defined in footnotes. */
+ if (!splitting)
+ add_word ("<a name=\"texinfo-footnotes-in-document\"></a>");
+ add_word_args ("<h4>%s</h4>", (char *) _("Footnotes"));
+ }
+ else
+ switch (footnote_style)
+ {
+ case separate_node:
+ {
+ char *old_current_node = current_node;
+ char *old_command = xstrdup (command);
+
+ already_outputting_pending_notes++;
+ execute_string ("%cnode %s-Footnotes,,,%s\n",
+ COMMAND_PREFIX, current_node, current_node);
+ already_outputting_pending_notes--;
+ current_node = old_current_node;
+ free (command);
+ command = old_command;
+ }
+ break;
+
+ case end_node:
+ close_paragraph ();
+ in_fixed_width_font++;
+ /* This string should be translated according to the
+ @documentlanguage, not the current LANG. We can't do that
+ yet, so leave it in English. */
+ execute_string ("---------- Footnotes ----------\n\n");
+ in_fixed_width_font--;
+ break;
+ }
+
+ /* Handle the footnotes in reverse order. */
+ {
+ int save_in_fixed_width_font = in_fixed_width_font;
+ FN **array = xmalloc ((footnote_count + 1) * sizeof (FN *));
+ array[footnote_count] = NULL;
+
+ while (--footnote_count > -1)
+ {
+ array[footnote_count] = footnote;
+ footnote = footnote->next;
+ }
+
+ filling_enabled = 1;
+ indented_fill = 1;
+ in_fixed_width_font = 0;
+
+ while ((footnote = array[++footnote_count]))
+ {
+ if (html)
+ {
+ /* Make the text of every footnote begin a separate paragraph. */
+ add_html_block_elt ("<p class=\"footnote\"><small>");
+ /* Make footnote number a link to its definition. */
+ add_word_args ("[<a name=\"fn-%d\" href=\"#fnd-%d\">%d</a>]",
+ footnote->number, footnote->number, footnote->number);
+ add_word ("</small> ");
+ already_outputting_pending_notes++;
+ execute_string ("%s", footnote->note);
+ already_outputting_pending_notes--;
+ add_word ("</p>\n");
+ }
+ else
+ {
+ char *old_current_node = current_node;
+ char *old_command = xstrdup (command);
+
+ already_outputting_pending_notes++;
+ execute_string ("%canchor{%s-Footnote-%d}(%s) %s",
+ COMMAND_PREFIX, current_node, footnote->number,
+ footnote->marker, footnote->note);
+ already_outputting_pending_notes--;
+ current_node = old_current_node;
+ free (command);
+ command = old_command;
+ }
+
+ close_paragraph ();
+ }
+
+ if (html)
+ add_html_block_elt ("<hr></div>");
+ close_paragraph ();
+ free (array);
+
+ in_fixed_width_font = save_in_fixed_width_font;
+ }
+
+ free_pending_notes ();
+}
diff --git a/makeinfo/footnote.h b/makeinfo/footnote.h
new file mode 100644
index 0000000..8a812a6
--- /dev/null
+++ b/makeinfo/footnote.h
@@ -0,0 +1,36 @@
+/* footnote.h -- declarations for footnote.c.
+ $Id: footnote.h,v 1.5 2007/07/01 21:20:32 karl Exp $
+
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2007 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/>. */
+
+#ifndef FOOTNOTE_H
+#define FOOTNOTE_H
+
+extern int footnote_style_preset;
+extern int current_footnote_number;
+extern int number_footnotes;
+extern int already_outputting_pending_notes;
+
+/* The Texinfo @commands. */
+extern void cm_footnote (void);
+extern void cm_footnotestyle (void);
+
+extern int set_footnote_style (char *string); /* called for -s option */
+
+extern void output_pending_notes (void); /* called for output */
+
+#endif /* !FOOTNOTE_H */
diff --git a/makeinfo/html.c b/makeinfo/html.c
new file mode 100644
index 0000000..2d25d3d
--- /dev/null
+++ b/makeinfo/html.c
@@ -0,0 +1,870 @@
+/* html.c -- html-related utilities.
+ $Id: html.c,v 1.42 2008/05/19 18:26:47 karl Exp $
+
+ Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+ 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 "system.h"
+#include "cmds.h"
+#include "files.h"
+#include "html.h"
+#include "lang.h"
+#include "makeinfo.h"
+#include "node.h"
+#include "sectioning.h"
+
+
+
+/* Filename to which to write list of index entries */
+char *internal_links_filename = NULL;
+FILE *internal_links_stream = NULL;
+
+/* Append CHAR to BUFFER, (re)allocating as necessary. We don't handle
+ null characters. */
+
+typedef struct
+{
+ unsigned size; /* allocated */
+ unsigned length; /* used */
+ char *buffer;
+} buffer_type;
+
+static buffer_type *
+init_buffer (void)
+{
+ buffer_type *buf = xmalloc (sizeof (buffer_type));
+ buf->length = 0;
+ buf->size = 0;
+ buf->buffer = NULL;
+
+ return buf;
+}
+
+static void
+append_char (buffer_type *buf, int c)
+{
+ buf->length++;
+ if (buf->length >= buf->size)
+ {
+ buf->size += 100;
+ buf->buffer = xrealloc (buf->buffer, buf->size);
+ }
+ buf->buffer[buf->length - 1] = c;
+ buf->buffer[buf->length] = 0;
+}
+
+/* Read the cascading style-sheet file FILENAME. Write out any @import
+ commands, which must come first, by the definition of css. If the
+ file contains any actual css code following the @imports, return it;
+ else return NULL. */
+static char *
+process_css_file (char *filename)
+{
+ int c;
+ int lastchar = 0;
+ FILE *f;
+ buffer_type *import_text = init_buffer ();
+ buffer_type *inline_text = init_buffer ();
+ unsigned lineno = 1;
+ enum { null_state, comment_state, import_state, inline_state } state
+ = null_state, prev_state;
+
+ prev_state = null_state;
+
+ /* read from stdin if `-' is the filename. */
+ f = STREQ (filename, "-") ? stdin : fopen (filename, "r");
+ if (!f)
+ {
+ error (_("%s: could not open --css-file: %s"), progname, filename);
+ return NULL;
+ }
+
+ /* Read the file. The @import statements must come at the beginning,
+ with only whitespace and comments allowed before any inline css code. */
+ while ((c = getc (f)) >= 0)
+ {
+ if (c == '\n')
+ lineno++;
+
+ switch (state)
+ {
+ case null_state: /* between things */
+ if (c == '@')
+ { /* Only @import and @charset should switch into
+ import_state, other @-commands, such as @media, should
+ put us into inline_state. I don't think any other css
+ @-commands start with `i' or `c', although of course
+ this will break when such a command is defined. */
+ int nextchar = getc (f);
+ if (nextchar == 'i' || nextchar == 'c')
+ {
+ append_char (import_text, c);
+ append_char (import_text, nextchar);
+ state = import_state;
+ }
+ else
+ {
+ ungetc (nextchar, f); /* wasn't an @import */
+ state = inline_state;
+ }
+ }
+ else if (c == '/')
+ { /* possible start of a comment */
+ int nextchar = getc (f);
+ if (nextchar == '*')
+ state = comment_state;
+ else
+ {
+ ungetc (nextchar, f); /* wasn't a comment */
+ state = inline_state;
+ }
+ }
+ else if (isspace (c))
+ ; /* skip whitespace; maybe should use c_isspace? */
+
+ else
+ /* not an @import, not a comment, not whitespace: we must
+ have started the inline text. */
+ state = inline_state;
+
+ if (state == inline_state)
+ append_char (inline_text, c);
+
+ if (state != null_state)
+ prev_state = null_state;
+ break;
+
+ case comment_state:
+ if (c == '/' && lastchar == '*')
+ state = prev_state; /* end of comment */
+ break; /* else ignore this comment char */
+
+ case import_state:
+ append_char (import_text, c); /* include this import char */
+ if (c == ';')
+ { /* done with @import */
+ append_char (import_text, '\n'); /* make the output nice */
+ state = null_state;
+ prev_state = import_state;
+ }
+ break;
+
+ case inline_state:
+ /* No harm in writing out comments, so don't bother parsing
+ them out, just append everything. */
+ append_char (inline_text, c);
+ break;
+ }
+
+ lastchar = c;
+ }
+
+ fclose (f); /* Even closing stdin should be ok, can't read it more
+ than once? */
+
+ /* Reached the end of the file. We should not be still in a comment. */
+ if (state == comment_state)
+ warning (_("%s:%d: --css-file ended in comment"), filename, lineno);
+
+ /* Write the @import text, if any. */
+ if (import_text->buffer)
+ {
+ add_word (import_text->buffer);
+ free (import_text->buffer);
+ free (import_text);
+ }
+
+ /* We're wasting the buffer struct memory, but so what. */
+ return inline_text->buffer;
+}
+
+HSTACK *htmlstack = NULL;
+
+/* See html.h. */
+int html_title_written = 0;
+
+void
+html_output_head (void)
+{
+ static const char *html_title = NULL;
+ char *encoding = current_document_encoding ();
+
+ /* The <title> should not have markup, so use text_expansion. */
+ if (!html_title)
+ html_title = escape_string (title ?
+ text_expansion (title) : (char *) gdt("Untitled"));
+
+ /* Make sure this is the very first string of the output document. */
+ output_paragraph_offset = 0;
+
+ add_html_block_elt_args ("<html lang=\"%s\">\n<head>\n",
+ language_table[language_code].abbrev);
+
+ /* When splitting, add current node's name to title if it's available
+ and not Top. */
+ if (splitting && current_node && !STREQ (current_node, "Top"))
+ add_word_args ("<title>%s - %s</title>\n",
+ escape_string (xstrdup (current_node)), html_title);
+ else
+ add_word_args ("<title>%s</title>\n", html_title);
+
+ add_word ("<meta http-equiv=\"Content-Type\" content=\"text/html");
+ if (encoding && *encoding)
+ add_word_args ("; charset=%s", encoding);
+
+ add_word ("\">\n");
+
+ if (!document_description)
+ document_description = html_title;
+
+ add_word_args ("<meta name=\"description\" content=\"%s\">\n",
+ document_description);
+ add_word_args ("<meta name=\"generator\" content=\"makeinfo %s\">\n",
+ VERSION);
+
+ /* Navigation bar links. */
+ if (!splitting)
+ add_word ("<link title=\"Top\" rel=\"top\" href=\"#Top\">\n");
+ else if (tag_table)
+ {
+ /* Always put a top link. */
+ add_word ("<link title=\"Top\" rel=\"start\" href=\"index.html#Top\">\n");
+
+ /* We already have a top link, avoid duplication. */
+ if (tag_table->up && !STREQ (tag_table->up, "Top"))
+ add_link (tag_table->up, "rel=\"up\"");
+
+ if (tag_table->prev)
+ add_link (tag_table->prev, "rel=\"prev\"");
+
+ if (tag_table->next)
+ add_link (tag_table->next, "rel=\"next\"");
+
+ /* fixxme: Look for a way to put links to various indices in the
+ document. Also possible candidates to be added here are First and
+ Last links. */
+ }
+ else
+ {
+ /* We are splitting, but we neither have a tag_table. So this must be
+ index.html. So put a link to Top. */
+ add_word ("<link title=\"Top\" rel=\"start\" href=\"#Top\">\n");
+ }
+
+ add_word ("<link href=\"http://www.gnu.org/software/texinfo/\" \
+rel=\"generator-home\" title=\"Texinfo Homepage\">\n");
+
+ if (copying_text)
+ { /* It is not ideal that we include the html markup here within
+ <head>, so we use text_expansion. */
+ insert_string ("<!--\n");
+ insert_string (text_expansion (copying_text));
+ insert_string ("-->\n");
+ }
+
+ /* Put the style definitions in a comment for the sake of browsers
+ that don't support <style>. */
+ add_word ("<meta http-equiv=\"Content-Style-Type\" content=\"text/css\">\n");
+ add_word ("<style type=\"text/css\"><!--\n");
+
+ {
+ char *css_inline = NULL;
+
+ if (css_include)
+ /* This writes out any @import commands from the --css-file,
+ and returns any actual css code following the imports. */
+ css_inline = process_css_file (css_include);
+
+ /* This seems cleaner than adding <br>'s at the end of each line for
+ these "roman" displays. It's hardly the end of the world if the
+ browser doesn't do <style>s, in any case; they'll just come out in
+ typewriter. */
+#define CSS_FONT_INHERIT "font-family:inherit"
+ add_word_args (" pre.display { %s }\n", CSS_FONT_INHERIT);
+ add_word_args (" pre.format { %s }\n", CSS_FONT_INHERIT);
+
+ /* Alternatively, we could do <font size=-1> in insertion.c, but this
+ way makes it easier to override. */
+#define CSS_FONT_SMALLER "font-size:smaller"
+ add_word_args (" pre.smalldisplay { %s; %s }\n", CSS_FONT_INHERIT,
+ CSS_FONT_SMALLER);
+ add_word_args (" pre.smallformat { %s; %s }\n", CSS_FONT_INHERIT,
+ CSS_FONT_SMALLER);
+ add_word_args (" pre.smallexample { %s }\n", CSS_FONT_SMALLER);
+ add_word_args (" pre.smalllisp { %s }\n", CSS_FONT_SMALLER);
+
+ /* Since HTML doesn't have a sc element, we use span with a bit of
+ CSS spice instead. */
+#define CSS_FONT_SMALL_CAPS "font-variant:small-caps"
+ add_word_args (" span.sc { %s }\n", CSS_FONT_SMALL_CAPS);
+
+ /* Roman (default) font class, closest we can come. */
+#define CSS_FONT_ROMAN "font-family:serif; font-weight:normal;"
+ add_word_args (" span.roman { %s } \n", CSS_FONT_ROMAN);
+
+ /* Sans serif font class. */
+#define CSS_FONT_SANSSERIF "font-family:sans-serif; font-weight:normal;"
+ add_word_args (" span.sansserif { %s } \n", CSS_FONT_SANSSERIF);
+
+ /* Write out any css code from the user's --css-file. */
+ if (css_inline)
+ insert_string (css_inline);
+
+ add_word ("--></style>\n");
+ }
+ if (css_ref)
+ add_word_args ("<link rel=\"stylesheet\" type=\"text/css\" href=\"%s\">\n",
+ css_ref);
+
+ add_word ("</head>\n<body>\n");
+
+ if (title && !html_title_written && titlepage_cmd_present)
+ {
+ add_word_args ("<h1 class=\"settitle\">%s</h1>\n", html_title);
+ html_title_written = 1;
+ }
+
+ free (encoding);
+}
+
+/* Escape HTML special characters in the string if necessary,
+ returning a pointer to a possibly newly-allocated one. */
+char *
+escape_string (char *string)
+{
+ char *newstring;
+ int i = 0, newlen = 0;
+
+ do
+ {
+ /* Find how much to allocate. */
+ switch (string[i])
+ {
+ case '"':
+ newlen += 6; /* `&quot;' */
+ break;
+ case '&':
+ newlen += 5; /* `&amp;' */
+ break;
+ case '<':
+ case '>':
+ newlen += 4; /* `&lt;', `&gt;' */
+ break;
+ default:
+ newlen++;
+ }
+ }
+ while (string[i++]);
+
+ if (newlen == i) return string; /* Already OK. */
+
+ newstring = xmalloc (newlen);
+ i = 0;
+ do
+ {
+ switch (string[i])
+ {
+ case '"':
+ strcpy (newstring, "&quot;");
+ newstring += 6;
+ break;
+ case '&':
+ strcpy (newstring, "&amp;");
+ newstring += 5;
+ break;
+ case '<':
+ strcpy (newstring, "&lt;");
+ newstring += 4;
+ break;
+ case '>':
+ strcpy (newstring, "&gt;");
+ newstring += 4;
+ break;
+ default:
+ newstring[0] = string[i];
+ newstring++;
+ }
+ }
+ while (string[i++]);
+
+ return newstring - newlen;
+}
+
+/* Save current tag. */
+static void
+push_tag (char *tag, char *attribs)
+{
+ HSTACK *newstack = xmalloc (sizeof (HSTACK));
+
+ newstack->tag = tag;
+ newstack->attribs = xstrdup (attribs);
+ newstack->next = htmlstack;
+ htmlstack = newstack;
+}
+
+/* Get last tag. */
+static void
+pop_tag (void)
+{
+ HSTACK *tos = htmlstack;
+
+ if (!tos)
+ {
+ line_error (_("[unexpected] no html tag to pop"));
+ return;
+ }
+
+ free (htmlstack->attribs);
+
+ htmlstack = htmlstack->next;
+ free (tos);
+}
+
+/* Check if tag is an empty or a whitespace only element.
+ If so, remove it, keeping whitespace intact. */
+int
+rollback_empty_tag (char *tag)
+{
+ int check_position = output_paragraph_offset;
+ int taglen = strlen (tag);
+ int rollback_happened = 0;
+ char *contents = ""; /* FIXME (ptr to constant, later
+ assigned to malloc'd address).
+ */
+ char *contents_canon_white = "";
+
+ /* If output_paragraph is empty, we cannot rollback :-\ */
+ if (output_paragraph_offset <= 0)
+ return 0;
+
+ /* Find the end of the previous tag. */
+ while (check_position > 0 && output_paragraph[check_position-1] != '>')
+ check_position--;
+
+ /* Save stuff between tag's end to output_paragraph's end. */
+ if (check_position != output_paragraph_offset)
+ {
+ contents = xmalloc (output_paragraph_offset - check_position + 1);
+ memcpy (contents, output_paragraph + check_position,
+ output_paragraph_offset - check_position);
+
+ contents[output_paragraph_offset - check_position] = '\0';
+
+ contents_canon_white = xstrdup (contents);
+ canon_white (contents_canon_white);
+ }
+
+ /* Find the start of the previous tag. */
+ while (check_position > 0 && output_paragraph[check_position-1] != '<')
+ check_position--;
+
+ /* Check to see if this is the tag. */
+ if (strncmp ((char *) output_paragraph + check_position, tag, taglen) == 0
+ && (whitespace (output_paragraph[check_position + taglen])
+ || output_paragraph[check_position + taglen] == '>'))
+ {
+ if (!contents_canon_white || !*contents_canon_white)
+ {
+ /* Empty content after whitespace removal, so roll it back. */
+ output_paragraph_offset = check_position - 1;
+ rollback_happened = 1;
+
+ /* Original contents may not be empty (whitespace.) */
+ if (contents && *contents)
+ {
+ insert_string (contents);
+ free (contents);
+ }
+ }
+ }
+
+ return rollback_happened;
+}
+
+/* Open or close TAG according to START_OR_END. */
+void
+#if defined (VA_FPRINTF) && __STDC__
+insert_html_tag_with_attribute (int start_or_end, char *tag, char *format, ...)
+#else
+insert_html_tag_with_attribute (start_or_end, tag, format, va_alist)
+ int start_or_end;
+ char *tag;
+ char *format;
+ va_dcl
+#endif
+{
+ char *old_tag = NULL;
+ char *old_attribs = NULL;
+ char formatted_attribs[2000]; /* xx no fixed limits */
+ int do_return = 0;
+ extern int in_html_elt;
+
+ if (start_or_end != START)
+ pop_tag ();
+
+ if (htmlstack)
+ {
+ old_tag = htmlstack->tag;
+ old_attribs = htmlstack->attribs;
+ }
+
+ if (format)
+ {
+#ifdef VA_SPRINTF
+ va_list ap;
+#endif
+
+ VA_START (ap, format);
+#ifdef VA_SPRINTF
+ VA_SPRINTF (formatted_attribs, format, ap);
+#else
+ sprintf (formatted_attribs, format, a1, a2, a3, a4, a5, a6, a7, a8);
+#endif
+ va_end (ap);
+ }
+ else
+ formatted_attribs[0] = '\0';
+
+ /* Exception: can nest multiple spans. */
+ if (htmlstack
+ && STREQ (htmlstack->tag, tag)
+ && !(STREQ (tag, "span") && STREQ (old_attribs, formatted_attribs)))
+ do_return = 1;
+
+ if (start_or_end == START)
+ push_tag (tag, formatted_attribs);
+
+ if (do_return)
+ return;
+
+ in_html_elt++;
+
+ /* texinfo.tex doesn't support more than one font attribute
+ at the same time. */
+ if ((start_or_end == START) && old_tag && *old_tag
+ && !STREQ (old_tag, "samp")
+ && !rollback_empty_tag (old_tag))
+ add_word_args ("</%s>", old_tag);
+
+ if (*tag)
+ {
+ if (start_or_end == START)
+ add_word_args (format ? "<%s %s>" : "<%s>", tag, formatted_attribs);
+ else if (STREQ (tag, "samp") || !rollback_empty_tag (tag))
+ /* Insert close tag only if we didn't rollback,
+ in which case the opening tag is removed. */
+ add_word_args ("</%s>", tag);
+ }
+
+ if ((start_or_end != START) && old_tag && *old_tag && !STREQ (old_tag, "samp"))
+ add_word_args (strlen (old_attribs) > 0 ? "<%s %s>" : "<%s>",
+ old_tag, old_attribs);
+
+ in_html_elt--;
+}
+
+void
+insert_html_tag (int start_or_end, char *tag)
+{
+ insert_html_tag_with_attribute (start_or_end, tag, NULL);
+}
+
+/* Output an HTML <link> to the filename for NODE, including the
+ other string as extra attributes. */
+
+void
+add_link (char *nodename, char *attributes)
+{
+ if (nodename)
+ {
+ char *escaped_nodename;
+ add_html_elt ("<link ");
+ add_word_args ("%s", attributes);
+ add_word_args (" href=\"");
+ add_anchor_name (nodename, 1);
+ escaped_nodename = escape_string (nodename);
+ add_word_args ("\" title=\"%s\">\n", escaped_nodename);
+ if (escaped_nodename != nodename)
+ free (escaped_nodename);
+ }
+}
+
+/* Copy a name with characters escaped as appropriate for an anchor
+ name, i.e., escape URL special characters with our _00hh convention.
+ (See the manual for details on the new scheme.) */
+
+char *
+escaped_anchor_name (const char *name)
+{
+ /* The factor 5 in the next allocation allows all chars to be expanded. */
+ char *res = xmalloc (5 * strlen (name) + 1);
+ char *d = res;
+
+ for (; *name; name++)
+ {
+ if (cr_or_whitespace (*name))
+ *d++ = '-';
+ else if (! URL_SAFE_CHAR (*name))
+ {
+ sprintf (d, "_00%x", (unsigned char) *name);
+ /* do this manually since sprintf returns char * on
+ SunOS 4 and other old systems. */
+ while (*d)
+ d++;
+ }
+ else
+ *d++ = *name;
+ }
+ *d = 0;
+ return res;
+}
+
+/* Output NAME with characters escaped as appropriate for an anchor
+ name, i.e., escape URL special characters with our _00hh convention
+ if OLD is zero. (See the manual for details on the new scheme.)
+
+ If OLD is nonzero, generate the node name with the 4.6-and-earlier
+ convention of %hh (and more special characters output as-is, notably
+ - and *). This is only so that external references to old names can
+ still work with HTML generated by the new makeinfo; the gcc folks
+ needed this. Our own HTML does not refer to these names. */
+
+void
+add_escaped_anchor_name (char *name, int old)
+{
+ canon_white (name);
+
+ if (!old && !strchr ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",
+ *name))
+ { /* XHTML does not allow anything but an ASCII letter to start an
+ identifier. Therefore kludge in this constant string if we
+ have a nonletter. */
+ add_word ("g_t");
+ }
+ if (!old)
+ {
+ char *expanded = escaped_anchor_name (name);
+ add_word (expanded);
+ free (expanded);
+ }
+ else for (; *name; name++)
+ {
+ if (cr_or_whitespace (*name))
+ add_char ('-');
+
+ else if (!URL_SAFE_CHAR (*name) && !OLD_URL_SAFE_CHAR (*name))
+ /* Cast so characters with the high bit set are treated as >128,
+ for example o-umlaut should be 246, not -10. */
+ add_word_args ("%%%x", (unsigned char) *name);
+ else
+ add_char (*name);
+ }
+}
+
+/* Insert the text for the name of a reference in an HTML anchor
+ appropriate for NODENAME.
+
+ If HREF is zero, generate text for name= in the new node name
+ conversion convention.
+ If HREF is negative, generate text for name= in the old convention.
+ If HREF is positive, generate the name for an href= attribute, i.e.,
+ including the `#' if it's an internal reference. */
+void
+add_anchor_name (char *nodename, int href)
+{
+ if (href > 0)
+ {
+ if (splitting)
+ add_url_name (nodename, href);
+ add_char ('#');
+ }
+ /* Always add NODENAME, so that the reference would pinpoint the
+ exact node on its file. This is so several nodes could share the
+ same file, in case of file-name clashes, but also for more
+ accurate browser positioning. */
+ if (mbscasecmp (nodename, "(dir)") == 0)
+ /* Strip the parens, but keep the original letter-case. */
+ add_word_args ("%.3s", nodename + 1);
+ else if (mbscasecmp (nodename, "top") == 0)
+ add_word ("Top");
+ else
+ add_escaped_anchor_name (nodename, href < 0);
+}
+
+/* Insert the text for the name of a reference in an HTML url, aprropriate
+ for NODENAME */
+void
+add_url_name (char *nodename, int href)
+{
+ add_nodename_to_filename (nodename, href);
+}
+
+/* Convert non [A-Za-z0-9] characters depending on the command line options given.
+ If --transliterate-file-names is specified, these are replaced with their ASCII
+ phonetic transliteration. Otherwise, _00xx notation is used, where xx means the
+ hexadecimal representation of the ASCII character. Also convert spaces and
+ newlines to dashes. */
+static void
+fix_filename (char *filename)
+{
+ int i;
+ int len = strlen (filename);
+ char *oldname = xstrdup (filename);
+
+ *filename = '\0';
+
+ for (i = 0; i < len; i++)
+ {
+ const char *p = lang_transliterate_char (oldname[i]);
+
+ if (p)
+ strcat (filename, p);
+ else if (cr_or_whitespace (oldname[i]))
+ strcat (filename, "-");
+ else if (URL_SAFE_CHAR (oldname[i]))
+ strncat (filename, (char *) oldname + i, 1);
+ else
+ {
+ char *hexchar = xmalloc (6 * sizeof (char));
+ sprintf (hexchar, "_00%x", (unsigned char) oldname[i]);
+ strcat (filename, hexchar);
+ free (hexchar);
+ }
+
+ /* Check if we are nearing boundaries. */
+ if (strlen (filename) >= PATH_MAX - 20)
+ break;
+ }
+
+ free (oldname);
+}
+
+/* As we can't look-up a (forward-referenced) nodes' html filename
+ from the tentry, we take the easy way out. We assume that
+ nodenames are unique, and generate the html filename from the
+ nodename, that's always known. */
+static char *
+nodename_to_filename_1 (char *nodename, int href)
+{
+ char *p;
+ char *filename;
+ char dirname[PATH_MAX];
+
+ if (mbscasecmp (nodename, "Top") == 0)
+ {
+ /* We want to convert references to the Top node into
+ "index.html#Top". */
+ if (href)
+ filename = xstrdup ("index.html"); /* "#Top" is added by our callers */
+ else
+ filename = xstrdup ("Top");
+ }
+ else if (mbscasecmp (nodename, "(dir)") == 0)
+ /* We want to convert references to the (dir) node into
+ "../index.html". */
+ filename = xstrdup ("../index.html");
+ else
+ {
+ filename = xmalloc (PATH_MAX);
+ dirname[0] = '\0';
+ *filename = '\0';
+
+ /* Check for external reference: ``(info-document)node-name''
+ Assume this node lives at: ``../info-document/node-name.html''
+
+ We need to handle the special case (sigh): ``(info-document)'',
+ ie, an external top-node, which should translate to:
+ ``../info-document/info-document.html'' */
+
+ p = nodename;
+ if (*nodename == '(')
+ {
+ int length;
+
+ p = strchr (nodename, ')');
+ if (p == NULL)
+ {
+ line_error (_("[unexpected] invalid node name: `%s'"), nodename);
+ xexit (1);
+ }
+
+ length = p - nodename - 1;
+ if (length > 5 &&
+ FILENAME_CMPN (p - 5, ".info", 5) == 0)
+ length -= 5;
+ /* This is for DOS, and also for Windows and GNU/Linux
+ systems that might have Info files copied from a DOS 8+3
+ filesystem. */
+ if (length > 4 &&
+ FILENAME_CMPN (p - 4, ".inf", 4) == 0)
+ length -= 4;
+ strcpy (filename, "../");
+ strncpy (dirname, nodename + 1, length);
+ *(dirname + length) = '\0';
+ fix_filename (dirname);
+ strcat (filename, dirname);
+ strcat (filename, "/");
+ p++;
+ }
+
+ /* In the case of just (info-document), there will be nothing
+ remaining, and we will refer to ../info-document/, which will
+ work fine. */
+ strcat (filename, p);
+ if (*p)
+ {
+ /* Hmm */
+ fix_filename (filename + strlen (filename) - strlen (p));
+ strcat (filename, ".html");
+ }
+ }
+
+ /* Produce a file name suitable for the underlying filesystem. */
+ normalize_filename (filename);
+
+#if 0
+ /* We add ``#Nodified-filename'' anchor to external references to be
+ prepared for non-split HTML support. Maybe drop this. */
+ if (href && *dirname)
+ {
+ strcat (filename, "#");
+ strcat (filename, p);
+ /* Hmm, again */
+ fix_filename (filename + strlen (filename) - strlen (p));
+ }
+#endif
+
+ return filename;
+}
+
+/* If necessary, ie, if current filename != filename of node, output
+ the node name. */
+void
+add_nodename_to_filename (char *nodename, int href)
+{
+ /* for now, don't check: always output filename */
+ char *filename = nodename_to_filename_1 (nodename, href);
+ add_word (filename);
+ free (filename);
+}
+
+char *
+nodename_to_filename (char *nodename)
+{
+ /* The callers of nodename_to_filename use the result to produce
+ <a href=, so call nodename_to_filename_1 with last arg non-zero. */
+ return nodename_to_filename_1 (nodename, 1);
+}
diff --git a/makeinfo/html.h b/makeinfo/html.h
new file mode 100644
index 0000000..814be9e
--- /dev/null
+++ b/makeinfo/html.h
@@ -0,0 +1,67 @@
+/* html.h -- declarations for html-related utilities.
+ $Id: html.h,v 1.11 2008/05/19 18:26:48 karl Exp $
+
+ Copyright (C) 1999, 2000, 2002, 2004, 2007, 2008
+ 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/>. */
+
+#ifndef HTML_H
+#define HTML_H
+
+/* A stack of font tags. */
+typedef struct hstack
+{
+ struct hstack *next;
+ char *tag;
+ char *attribs;
+} HSTACK;
+
+/* Nonzero if we have output a title, from @titlefont or @settitle. */
+extern int html_title_written;
+
+/* Filename to which to write list of index entries, and stream for them */
+extern char *internal_links_filename;
+extern FILE *internal_links_stream;
+
+/* Perform the <head> output. */
+extern void html_output_head (void);
+
+/* Escape &<>. */
+extern char *escape_string (char *);
+
+/* Open or close TAG according to START_OR_END. */
+extern void insert_html_tag (int start_or_end, char *tag);
+
+/* Output HTML <link> to NODE, plus extra ATTRIBUTES. */
+extern void add_link (char *nodename, char *attributes);
+
+/* Escape URL-special characters. */
+extern char *escaped_anchor_name (const char *name);
+extern void add_escaped_anchor_name (char *name, int old);
+
+/* See html.c. */
+extern void add_anchor_name (char *nodename, int href);
+extern void add_url_name (char *nodename, int href);
+extern void add_nodename_to_filename (char *nodename, int href);
+extern char *nodename_to_filename (char *nodename);
+extern int rollback_empty_tag (char *tag);
+
+#if defined (VA_FPRINTF) && __STDC__
+extern void insert_html_tag_with_attribute (int start_or_end, char *tag, char *format, ...);
+#else
+extern void insert_html_tag_with_attribute ();
+#endif
+
+#endif /* !HTML_H */
diff --git a/makeinfo/index.c b/makeinfo/index.c
new file mode 100644
index 0000000..65d7484
--- /dev/null
+++ b/makeinfo/index.c
@@ -0,0 +1,1004 @@
+/* index.c -- indexing for Texinfo.
+ $Id: index.c,v 1.27 2008/05/19 18:26:48 karl Exp $
+
+ Copyright (C) 1998, 1999, 2002, 2003, 2004, 2007, 2008
+ 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 "system.h"
+#include "mbswidth.h"
+#include "files.h"
+#include "footnote.h"
+#include "html.h"
+#include "index.h"
+#include "lang.h"
+#include "macro.h"
+#include "sectioning.h"
+#include "toc.h"
+#include "xml.h"
+
+/* Nonzero means that we are in the middle of printing an index. */
+int printing_index = 0;
+
+/* The number of defined indices. */
+int defined_indices = 0;
+
+/* This is the order of the index. */
+int index_counter = 0;
+
+/* Stuff for defining commands on the fly. */
+COMMAND **user_command_array = NULL;
+int user_command_array_len = 0;
+
+INDEX_ALIST **name_index_alist = NULL;
+
+/* An array of pointers. Each one is for a different index. The @synindex
+ command changes which array slot is pointed to by a given index. */
+static INDEX_ELT **the_indices = NULL;
+
+/* How to compare index entries for sorting. May be set to strcoll. */
+static int (*index_compare_fn) (const char *a, const char *b) = mbscasecmp;
+
+/* Find which element in the known list of indices has this name.
+ Returns -1 if NAME isn't found. */
+static int
+find_index_offset (char *name)
+{
+ int i;
+ for (i = 0; i < defined_indices; i++)
+ if (name_index_alist[i] && STREQ (name, name_index_alist[i]->name))
+ return i;
+ return -1;
+}
+
+/* Return a pointer to the entry of (name . index) for this name.
+ Return NULL if the index doesn't exist. */
+static INDEX_ALIST *
+find_index (char *name)
+{
+ int offset = find_index_offset (name);
+ if (offset > -1)
+ return name_index_alist[offset];
+ else
+ return NULL;
+}
+
+/* User-defined commands, which happens only from user-defined indexes.
+ Used to initialize the builtin indices, too. */
+static void
+define_user_command (char *name, COMMAND_FUNCTION (*proc), int needs_braces_p)
+{
+ int slot = user_command_array_len;
+ user_command_array_len++;
+
+ if (!user_command_array)
+ user_command_array = xmalloc (1 * sizeof (COMMAND *));
+
+ user_command_array = xrealloc (user_command_array,
+ (1 + user_command_array_len) * sizeof (COMMAND *));
+
+ user_command_array[slot] = xmalloc (sizeof (COMMAND));
+ user_command_array[slot]->name = xstrdup (name);
+ user_command_array[slot]->proc = proc;
+ user_command_array[slot]->argument_in_braces = needs_braces_p;
+}
+
+/* Please release me, let me go... */
+static void
+free_index (INDEX_ELT *index)
+{
+ INDEX_ELT *temp;
+
+ while ((temp = index))
+ {
+ free (temp->entry);
+ free (temp->entry_text);
+ /* Do not free the node, because we already freed the tag table,
+ which freed all the node names. */
+ /* free (temp->node); */
+ index = index->next;
+ free (temp);
+ }
+}
+
+/* Flush an index by name. This will delete the list of entries that
+ would be written by a @printindex command for this index. */
+static void
+undefindex (char *name)
+{
+ int i;
+ int which = find_index_offset (name);
+
+ /* The index might have already been freed if this was the target of
+ an @synindex. */
+ if (which < 0 || !name_index_alist[which])
+ return;
+
+ i = name_index_alist[which]->read_index;
+
+ free_index (the_indices[i]);
+ the_indices[i] = NULL;
+
+ free (name_index_alist[which]->name);
+ free (name_index_alist[which]);
+ name_index_alist[which] = NULL;
+}
+
+/* Add the arguments to the current index command to the index NAME. */
+static void
+index_add_arg (char *name)
+{
+ int which;
+ char *index_entry;
+ INDEX_ALIST *tem;
+
+ tem = find_index (name);
+
+ which = tem ? tem->write_index : -1;
+
+ if (macro_expansion_output_stream && !executing_string)
+ append_to_expansion_output (input_text_offset + 1);
+
+ get_rest_of_line (0, &index_entry);
+ ignore_blank_line ();
+
+ if (macro_expansion_output_stream && !executing_string)
+ {
+ char *index_line = xmalloc (strlen (index_entry) + 2);
+ sprintf (index_line, "%s\n", index_entry);
+ me_execute_string_keep_state (index_line, NULL);
+ free (index_line);
+ }
+
+ if (which < 0)
+ {
+ line_error (_("Unknown index `%s'"), name);
+ free (index_entry);
+ }
+ else
+ {
+ INDEX_ELT *new = xmalloc (sizeof (INDEX_ELT));
+
+ index_counter++;
+
+ /* Get output line number updated before doing anything. */
+ if (!html && !xml)
+ flush_output ();
+
+ new->next = the_indices[which];
+ new->entry = NULL;
+ new->entry_text = index_entry;
+ /* Since footnotes are handled at the very end of the document,
+ node name in the non-split HTML outputs always show the last
+ node. We artificially make it ``Footnotes''. */
+ if (html && !splitting && already_outputting_pending_notes)
+ new->node = xstrdup (_("Footnotes"));
+ else
+ new->node = current_node ? current_node : xstrdup ("");
+ if (!html && !xml && no_headers)
+ {
+ new->section = current_sectioning_number ();
+ if (strlen (new->section) == 0)
+ new->section_name = current_sectioning_name ();
+ else
+ new->section_name = "";
+ }
+ else
+ {
+ new->section = NULL;
+ new->section_name = NULL;
+ }
+ new->code = tem->code;
+ new->defining_line = line_number - 1;
+ new->output_line = no_headers ? output_line_number : node_line_number;
+ /* We need to make a copy since input_filename may point to
+ something that goes away, for example, inside a macro.
+ (see the findexerr test). */
+ new->defining_file = xstrdup (input_filename);
+
+ if (html && splitting)
+ {
+ if (current_output_filename && *current_output_filename)
+ new->output_file = filename_part (current_output_filename);
+ else
+ new->output_file = xstrdup ("");
+ }
+ else
+ new->output_file = NULL;
+
+ new->entry_number = index_counter;
+ the_indices[which] = new;
+
+#if 0
+ /* The index breaks if there are colons in the entry.
+ -- This is true, but it's too painful to force changing index
+ entries to use `colon', and too confusing for users. The real
+ fix is to change Info support to support arbitrary characters
+ in node names, and we're not ready to do that. --karl,
+ 19mar02. */
+ if (strchr (new->entry_text, ':'))
+ warning (_("Info cannot handle `:' in index entry `%s'"),
+ new->entry_text);
+#endif
+
+ if (html)
+ {
+ /* Anchor. */
+ int removed_empty_elt = 0;
+
+ /* We must put the anchor outside the <dl> and <ul> blocks. */
+ if (rollback_empty_tag ("dl"))
+ removed_empty_elt = 1;
+ else if (rollback_empty_tag ("ul"))
+ removed_empty_elt = 2;
+
+ add_word ("<a name=\"index-");
+ add_escaped_anchor_name (index_entry, 0);
+ add_word_args ("-%d\"></a>", index_counter);
+
+ if (removed_empty_elt == 1)
+ add_html_block_elt_args ("\n<dl>");
+ else if (removed_empty_elt == 2)
+ add_html_block_elt_args ("\n<ul>");
+ }
+ }
+
+ if (xml)
+ xml_insert_indexterm (index_entry, name);
+}
+
+/* The function which user defined index commands call. */
+static void
+gen_index (void)
+{
+ char *name = xstrdup (command);
+ if (strlen (name) >= strlen ("index"))
+ name[strlen (name) - strlen ("index")] = 0;
+ index_add_arg (name);
+ free (name);
+}
+
+/* Define an index known as NAME. We assign the slot number.
+ If CODE is nonzero, make this a code index. */
+static void
+defindex (char *name, int code)
+{
+ int i, slot;
+
+ /* If it already exists, flush it. */
+ undefindex (name);
+
+ /* Try to find an empty slot. */
+ slot = -1;
+ for (i = 0; i < defined_indices; i++)
+ if (!name_index_alist[i])
+ {
+ slot = i;
+ break;
+ }
+
+ if (slot < 0)
+ { /* No such luck. Make space for another index. */
+ slot = defined_indices;
+ defined_indices++;
+
+ name_index_alist = (INDEX_ALIST **)
+ xrealloc (name_index_alist, (1 + defined_indices)
+ * sizeof (INDEX_ALIST *));
+ the_indices = (INDEX_ELT **)
+ xrealloc (the_indices, (1 + defined_indices) * sizeof (INDEX_ELT *));
+ }
+
+ /* We have a slot. Start assigning. */
+ name_index_alist[slot] = xmalloc (sizeof (INDEX_ALIST));
+ name_index_alist[slot]->name = xstrdup (name);
+ name_index_alist[slot]->read_index = slot;
+ name_index_alist[slot]->write_index = slot;
+ name_index_alist[slot]->code = code;
+
+ the_indices[slot] = NULL;
+}
+
+/* Define an index NAME, implicitly @code if CODE is nonzero. */
+static void
+top_defindex (char *name, int code)
+{
+ char *temp;
+
+ temp = xmalloc (1 + strlen (name) + strlen ("index"));
+ sprintf (temp, "%sindex", name);
+ define_user_command (temp, gen_index, 0);
+ defindex (name, code);
+ free (temp);
+}
+
+/* Set up predefined indices. */
+void
+init_indices (void)
+{
+ int i;
+
+ /* Create the default data structures. */
+
+ /* Initialize data space. */
+ if (!the_indices)
+ {
+ the_indices = xmalloc ((1 + defined_indices) * sizeof (INDEX_ELT *));
+ the_indices[defined_indices] = NULL;
+
+ name_index_alist = xmalloc ((1 + defined_indices)
+ * sizeof (INDEX_ALIST *));
+ name_index_alist[defined_indices] = NULL;
+ }
+
+ /* If there were existing indices, get rid of them now. */
+ for (i = 0; i < defined_indices; i++)
+ {
+ if (name_index_alist[i])
+ { /* Suppose we're called with two input files, and the first
+ does a @synindex pg cp. Then, when we get here to start
+ the second file, the "pg" element won't get freed by
+ undefindex (because it's pointing to "cp"). So free it
+ here; otherwise, when we try to define the pg index again
+ just below, it will still point to cp. */
+ undefindex (name_index_alist[i]->name);
+
+ /* undefindex sets all this to null in some cases. */
+ if (name_index_alist[i])
+ {
+ free (name_index_alist[i]->name);
+ free (name_index_alist[i]);
+ name_index_alist[i] = NULL;
+ }
+ }
+ }
+
+ /* Add the default indices. */
+ top_defindex ("cp", 0); /* cp is the only non-code index. */
+ top_defindex ("fn", 1);
+ top_defindex ("ky", 1);
+ top_defindex ("pg", 1);
+ top_defindex ("tp", 1);
+ top_defindex ("vr", 1);
+}
+
+/* Given an index name, return the offset in the_indices of this index,
+ or -1 if there is no such index. */
+static int
+translate_index (char *name)
+{
+ INDEX_ALIST *which = find_index (name);
+
+ if (which)
+ return which->read_index;
+ else
+ return -1;
+}
+
+/* Return the index list which belongs to NAME. */
+INDEX_ELT *
+index_list (char *name)
+{
+ int which = translate_index (name);
+ if (which < 0)
+ return (INDEX_ELT *) -1;
+ else
+ return the_indices[which];
+}
+
+/* Define a new index command. Arg is name of index. */
+static void
+gen_defindex (int code)
+{
+ char *name;
+ get_rest_of_line (0, &name);
+
+ if (find_index (name))
+ {
+ line_error (_("Index `%s' already exists"), name);
+ }
+ else
+ {
+ char *temp = xmalloc (strlen (name) + sizeof ("index"));
+ sprintf (temp, "%sindex", name);
+ define_user_command (temp, gen_index, 0);
+ defindex (name, code);
+ free (temp);
+ }
+
+ free (name);
+}
+
+void
+cm_defindex (void)
+{
+ gen_defindex (0);
+}
+
+void
+cm_defcodeindex (void)
+{
+ gen_defindex (1);
+}
+
+/* Expects 2 args, on the same line. Both are index abbreviations.
+ Make the first one be a synonym for the second one, i.e. make the
+ first one have the same index as the second one. */
+void
+cm_synindex (void)
+{
+ int source, target;
+ char *abbrev1, *abbrev2;
+
+ skip_whitespace ();
+ get_until_in_line (0, " ", &abbrev1);
+ target = find_index_offset (abbrev1);
+ skip_whitespace ();
+ get_until_in_line (0, " ", &abbrev2);
+ source = find_index_offset (abbrev2);
+ if (source < 0 || target < 0)
+ {
+ line_error (_("Unknown index `%s' and/or `%s' in @synindex"),
+ abbrev1, abbrev2);
+ }
+ else
+ {
+ if (xml && !docbook)
+ xml_synindex (abbrev1, abbrev2);
+ else
+ name_index_alist[target]->write_index
+ = name_index_alist[source]->write_index;
+ }
+
+ free (abbrev1);
+ free (abbrev2);
+}
+
+void
+cm_pindex (void) /* Pinhead index. */
+{
+ index_add_arg ("pg");
+}
+
+void
+cm_vindex (void) /* Variable index. */
+{
+ index_add_arg ("vr");
+}
+
+void
+cm_kindex (void) /* Key index. */
+{
+ index_add_arg ("ky");
+}
+
+void
+cm_cindex (void) /* Concept index. */
+{
+ index_add_arg ("cp");
+}
+
+void
+cm_findex (void) /* Function index. */
+{
+ index_add_arg ("fn");
+}
+
+void
+cm_tindex (void) /* Data Type index. */
+{
+ index_add_arg ("tp");
+}
+
+static int
+index_element_compare (const void *element1, const void *element2)
+{
+ INDEX_ELT **elt1 = (INDEX_ELT **) element1;
+ INDEX_ELT **elt2 = (INDEX_ELT **) element2;
+
+ return index_compare_fn ((*elt1)->entry, (*elt2)->entry);
+}
+
+/* Force all index entries to be unique. */
+static void
+make_index_entries_unique (INDEX_ELT **array, int count)
+{
+ int i, j;
+ INDEX_ELT **copy;
+ int counter = 1;
+
+ copy = xmalloc ((1 + count) * sizeof (INDEX_ELT *));
+
+ for (i = 0, j = 0; i < count; i++)
+ {
+ if (i == (count - 1)
+ || array[i]->node != array[i + 1]->node
+ || !STREQ (array[i]->entry, array[i + 1]->entry))
+ copy[j++] = array[i];
+ else
+ {
+ free (array[i]->entry);
+ free (array[i]->entry_text);
+ free (array[i]);
+ }
+ }
+ copy[j] = NULL;
+
+ /* Now COPY contains only unique entries. Duplicated entries in the
+ original array have been freed. Replace the current array with
+ the copy, fixing the NEXT pointers. */
+ for (i = 0; copy[i]; i++)
+ {
+ copy[i]->next = copy[i + 1];
+
+ /* Fix entry names which are the same. They point to different nodes,
+ so we make the entry name unique. */
+ if (copy[i+1]
+ && STREQ (copy[i]->entry, copy[i + 1]->entry)
+ && !html)
+ {
+ char *new_entry_name;
+
+ new_entry_name = xmalloc (10 + strlen (copy[i]->entry));
+ sprintf (new_entry_name, "%s <%d>", copy[i]->entry, counter);
+ free (copy[i]->entry);
+ copy[i]->entry = new_entry_name;
+ counter++;
+ }
+ else
+ counter = 1;
+
+ array[i] = copy[i];
+ }
+ array[i] = NULL;
+
+ /* Free the storage used only by COPY. */
+ free (copy);
+}
+
+
+/* Sort the index passed in INDEX, returning an array of pointers to
+ elements. The array is terminated with a NULL pointer. */
+
+static INDEX_ELT **
+sort_index (INDEX_ELT *index)
+{
+ INDEX_ELT **array;
+ INDEX_ELT *temp;
+ int count = 0;
+ int save_line_number = line_number;
+ char *save_input_filename = input_filename;
+ int save_html = html;
+
+ /* Pretend we are in non-HTML mode, for the purpose of getting the
+ expanded index entry that lacks any markup and other HTML escape
+ characters which could produce a wrong sort order. */
+ /* fixme: html: this still causes some markup, such as non-ASCII
+ characters @AE{} etc., to sort incorrectly. */
+ html = 0;
+
+ for (temp = index, count = 0; temp; temp = temp->next, count++)
+ ;
+ /* We have the length, now we can allocate an array. */
+ array = xmalloc ((count + 1) * sizeof (INDEX_ELT *));
+
+ for (temp = index, count = 0; temp; temp = temp->next, count++)
+ {
+ /* Allocate new memory for the return array, since parts of the
+ original INDEX get freed. Otherwise, if the document calls
+ @printindex twice on the same index, with duplicate entries,
+ we'll have garbage the second time. There are cleaner ways to
+ deal, but this will suffice for now. */
+ array[count] = xmalloc (sizeof (INDEX_ELT));
+ *(array[count]) = *(temp); /* struct assignment, hope it's ok */
+
+ /* Adjust next pointers to use the new memory. */
+ if (count > 0)
+ array[count-1]->next = array[count];
+
+ /* Set line number and input filename to the source line for this
+ index entry, as this expansion finds any errors. */
+ line_number = array[count]->defining_line;
+ input_filename = array[count]->defining_file;
+
+ /* If this particular entry should be printed as a "code" index,
+ then expand it as @code{entry}, i.e., as in fixed-width font. */
+ array[count]->entry = expansion (temp->entry_text, array[count]->code);
+ }
+ array[count] = NULL; /* terminate the array. */
+
+ line_number = save_line_number;
+ input_filename = save_input_filename;
+ html = save_html;
+
+#ifdef HAVE_STRCOLL
+ /* This is not perfect. We should set (then restore) the locale to the
+ documentlanguage, so strcoll operates according to the document's
+ locale, not the user's. For now, I'm just going to assume that
+ those few new documents which use @documentlanguage will be
+ processed in the appropriate locale. In any case, don't use
+ strcoll in the C (aka POSIX) locale, that is the ASCII ordering. */
+ if (language_code != en)
+ {
+ char *lang_env = getenv ("LANG");
+ if (lang_env && !STREQ (lang_env, "C") && !STREQ (lang_env, "POSIX"))
+ index_compare_fn = strcoll;
+ }
+#endif /* HAVE_STRCOLL */
+
+ /* Sort the array. */
+ qsort (array, count, sizeof (INDEX_ELT *), index_element_compare);
+
+ /* Remove duplicate entries. */
+ make_index_entries_unique (array, count);
+
+ /* Replace the original index with the sorted one, in case the
+ document wants to print it again. If the index wasn't empty. */
+ if (index)
+ *index = **array;
+
+ return array;
+}
+
+/* Return the number of times that the byte CH occurs in the LEN bytes
+ starting at STR. Multibyte strings are not taken into account, which
+ is incorrect, but we need this for @tie; see more comments below. */
+
+static int
+count_strn_chars (const char *str, int len, int ch)
+{
+ int count = 0;
+ int i;
+
+ for (i = 0; i < len; i++)
+ if (str[i] == ch)
+ count++;
+
+ return count;
+}
+
+static void
+insert_index_output_line_no (int line_number, int output_line_number_len)
+{
+ int last_column, out_line_no_width;
+ int str_size = output_line_number_len + strlen (_("(line )"))
+ + sizeof (NULL);
+ char *out_line_no_str = (char *) xmalloc (str_size + 1);
+
+ /* Do not translate ``(line NNN)'' below for !no_headers case (Info output),
+ because it's something like the ``* Menu'' strings. For plaintext output
+ it should be translated though. */
+ sprintf (out_line_no_str,
+ no_headers ? _("(line %*d)") : "(line %*d)",
+ output_line_number_len, line_number);
+
+ {
+ int i = output_paragraph_offset;
+ while (0 < i && output_paragraph[i-1] != '\n')
+ i--;
+ last_column = mbsnwidth ((char *)(output_paragraph + i),
+ output_paragraph_offset - i, 0);
+ last_column += count_strn_chars (output_paragraph + i,
+ output_paragraph_offset - i, NON_BREAKING_SPACE);
+ }
+
+ out_line_no_width = mbswidth (out_line_no_str, 0);
+ if (last_column + out_line_no_width > fill_column)
+ {
+ insert ('\n');
+ last_column = 0;
+ }
+
+ while (last_column + out_line_no_width < fill_column)
+ {
+ insert (' ');
+ last_column++;
+ }
+
+ insert_string (out_line_no_str);
+ insert ('\n');
+
+ free (out_line_no_str);
+}
+
+/* Takes one arg, a short name of an index to print.
+ Outputs a menu of the sorted elements of the index. */
+void
+cm_printindex (void)
+{
+ char *index_name;
+ get_rest_of_line (0, &index_name);
+
+ /* get_rest_of_line increments the line number by one,
+ so to make warnings/errors point to the correct line,
+ we decrement the line_number again. */
+ if (!handling_delayed_writes)
+ line_number--;
+
+ if (xml)
+ {
+ xml_insert_element (PRINTINDEX, START);
+ if (! docbook)
+ insert_string (index_name);
+ xml_insert_element (PRINTINDEX, END);
+ }
+ else if (!handling_delayed_writes)
+ {
+ int command_len = sizeof ("@ ") + strlen (command) + strlen (index_name);
+ char *index_command = xmalloc (command_len + 1);
+
+ close_paragraph ();
+ sprintf (index_command, "@%s %s", command, index_name);
+ register_delayed_write (index_command);
+ free (index_command);
+ }
+ else
+ {
+ int item;
+ INDEX_ELT *index;
+ INDEX_ELT *last_index = 0;
+ INDEX_ELT **array;
+ unsigned line_length;
+ char *line;
+ int saved_inhibit_paragraph_indentation = inhibit_paragraph_indentation;
+ int saved_filling_enabled = filling_enabled;
+ int saved_line_number = line_number;
+ char *saved_input_filename = input_filename;
+ unsigned output_line_number_len;
+ FILE *saved_output_stream = output_stream;
+
+ index = index_list (index_name);
+ if (index == (INDEX_ELT *)-1)
+ {
+ line_error (_("Unknown index `%s' in @printindex"), index_name);
+ free (index_name);
+ return;
+ }
+
+ /* Do this before sorting, so execute_string is in the good environment */
+ if (xml && docbook)
+ xml_begin_index ();
+
+ /* Do this before sorting, so execute_string in index_element_compare
+ will give the same results as when we actually print. */
+ printing_index = 1;
+ filling_enabled = 0;
+ inhibit_paragraph_indentation = 1;
+ xml_sort_index = 1;
+ array = sort_index (index);
+ xml_sort_index = 0;
+ close_paragraph ();
+ if (html)
+ add_html_block_elt_args ("<ul class=\"index-%s\" compact>",
+ index_name);
+ else if (!no_headers && !docbook)
+ { /* Info. Add magic cookie for info readers (to treat this
+ menu differently), and the usual start-of-menu. */
+ add_char ('\0');
+ add_word ("\010[index");
+ add_char ('\0');
+ add_word ("\010]\n");
+ add_word ("* Menu:\n\n");
+ }
+
+ me_inhibit_expansion++;
+
+ /* This will probably be enough. */
+ line_length = 100;
+ line = xmalloc (line_length);
+
+ {
+ char *max_output_line_number = (char *) xmalloc (25 * sizeof (char));
+
+ if (no_headers)
+ sprintf (max_output_line_number, "%d", output_line_number);
+ else
+ {
+ INDEX_ELT *tmp_entry = index;
+ unsigned tmp = 0;
+ for (tmp_entry = index; tmp_entry; tmp_entry = tmp_entry->next)
+ tmp = tmp_entry->output_line > tmp ? tmp_entry->output_line : tmp;
+ sprintf (max_output_line_number, "%d", tmp);
+ }
+
+ output_line_number_len = strlen (max_output_line_number);
+ free (max_output_line_number);
+ }
+
+ for (item = 0; (index = array[item]); item++)
+ {
+ /* A pathological document might have an index entry outside of any
+ node. Don't crash; try using the section name instead. */
+ char *index_node = index->node;
+
+ line_number = index->defining_line;
+ input_filename = index->defining_file;
+
+ if ((!index_node || !*index_node) && html)
+ index_node = toc_find_section_of_node (index_node);
+
+ if (!index_node || !*index_node)
+ {
+ line_error (_("Entry for index `%s' outside of any node"),
+ index_name);
+ if (html || !no_headers)
+ index_node = (char *) _("(outside of any node)");
+ }
+
+ if (html)
+ {
+ /* For HTML, we need to expand and HTML-escape the
+ original entry text, at the same time. Consider
+ @cindex J@"urgen. We want J&uuml;urgen. We can't
+ expand and then escape since we'll end up with
+ J&amp;uuml;rgen. We can't escape and then expand
+ because then `expansion' will see J@&quot;urgen, and
+ @&quot;urgen is not a command. */
+ char *html_entry =
+ maybe_escaped_expansion (index->entry_text, index->code, 1);
+
+ add_html_block_elt_args ("\n<li><a href=\"%s#index-",
+ (splitting && index->output_file) ? index->output_file : "");
+ add_escaped_anchor_name (index->entry_text, 0);
+ add_word_args ("-%d\">%s</a>: ", index->entry_number,
+ html_entry);
+ free (html_entry);
+
+ add_word ("<a href=\"");
+ if (index->node && *index->node)
+ {
+ /* Ensure any non-macros in the node name are expanded. */
+ char *expanded_index;
+
+ in_fixed_width_font++;
+ expanded_index = expansion (index_node, 0);
+ in_fixed_width_font--;
+ add_anchor_name (expanded_index, 1);
+ expanded_index = escape_string (expanded_index);
+ add_word_args ("\">%s</a>", expanded_index);
+ free (expanded_index);
+ }
+ else if (STREQ (index_node, _("(outside of any node)")))
+ {
+ add_anchor_name (index_node, 1);
+ add_word_args ("\">%s</a>", index_node);
+ }
+ else
+ /* If we use the section instead of the (missing) node, then
+ index_node already includes all we need except the #. */
+ add_word_args ("#%s</a>", index_node);
+
+ add_html_block_elt ("</li>");
+
+ if (internal_links_stream)
+ {
+ char *escaped = escaped_anchor_name (index->entry_text);
+ fprintf (internal_links_stream, "%s#index-%s-%d\t%s\t%s\n",
+ (splitting && index->output_file) ? index->output_file : "",
+ escaped, index->entry_number, index_name,
+ index->entry_text);
+ free (escaped);
+ }
+ }
+ else if (xml && docbook)
+ {
+ /* Let DocBook processor generate the index. */
+ }
+ else
+ {
+#define MIN_ENTRY_COLUMNS 37
+ /* Make sure there is enough space even if index->entry has zero
+ width. */
+ unsigned new_length = strlen (index->entry) + MIN_ENTRY_COLUMNS;
+
+ if (new_length < 50) /* minimum length used below */
+ new_length = 50;
+ new_length += strlen (index_node) + 7; /* * : .\n\0 */
+
+ if (new_length > line_length)
+ {
+ line_length = new_length;
+ line = xrealloc (line, line_length);
+ }
+ /* Print the entry, nicely formatted. We've already
+ expanded any commands in index->entry, including any
+ implicit @code. Thus, can't call execute_string, since
+ @@ has turned into @. */
+ if (!no_headers)
+ {
+ int nspaces;
+ int width = mbswidth (index->entry, 0);
+
+ /* Unfortunately, our @tie{} / @w{ } magic is an
+ unprintable character, and so mbswidth doesn't
+ count it. If that byte value occurs in a multibyte
+ string, we'd lose, but at least it's only a
+ question of minor formatting, not functionality. */
+ width += count_strn_chars (index->entry,
+ strlen (index->entry), NON_BREAKING_SPACE);
+
+ nspaces = -(strlen (index->entry)
+ + (MIN_ENTRY_COLUMNS - width));
+ sprintf (line, "* %*s ",
+ width < MIN_ENTRY_COLUMNS ? nspaces : 0,
+ index->entry);
+ line[2 + strlen (index->entry)] = ':';
+ insert_string (line);
+ /* Expand any non-macros in the node name. */
+ in_fixed_width_font++;
+ execute_string ("%s. ", index_node);
+ insert_index_output_line_no (index->output_line,
+ output_line_number_len);
+ in_fixed_width_font--;
+ }
+ else
+ {
+ /* With --no-headers, the @node lines are gone, so
+ there's little sense in referring to them in the
+ index. Instead, output the number or name of the
+ section that corresponds to that node. */
+ sprintf (line, "%-*s ", number_sections ? 46 : 1,
+ index->entry);
+ line[strlen (index->entry)] = ':';
+ insert_string (line);
+
+ if (strlen (index->section) > 0)
+ { /* We got your number. */
+ insert_string ((char *) _("See "));
+ insert_string (index->section);
+ }
+ else
+ { /* Sigh, index in an @unnumbered. :-\ */
+ insert_string ("\n ");
+ insert_string ((char *) _("See "));
+ insert_string ("``");
+ insert_string (expansion (index->section_name, 0));
+ insert_string ("''");
+ }
+
+ insert_string (". ");
+ insert_index_output_line_no (index->output_line,
+ output_line_number_len);
+ }
+ }
+
+ /* Prevent `output_paragraph' from growing to the size of the
+ whole index. */
+ flush_output ();
+ last_index = index;
+ }
+
+ free (line);
+
+ me_inhibit_expansion--;
+ printing_index = 0;
+
+ close_single_paragraph ();
+ filling_enabled = saved_filling_enabled;
+ inhibit_paragraph_indentation = saved_inhibit_paragraph_indentation;
+ input_filename = saved_input_filename;
+ line_number = saved_line_number;
+
+ if (html)
+ add_html_block_elt ("</ul>");
+ else if (xml && docbook)
+ xml_end_index ();
+ }
+
+ free (index_name);
+ /* Re-increment the line number, because get_rest_of_line
+ left us looking at the next line after the command. */
+ line_number++;
+}
diff --git a/makeinfo/index.h b/makeinfo/index.h
new file mode 100644
index 0000000..1e78107
--- /dev/null
+++ b/makeinfo/index.h
@@ -0,0 +1,92 @@
+/* index.h -- declarations for index.c.
+ $Id: index.h,v 1.6 2007/09/26 20:53:40 karl Exp $
+
+ Copyright (C) 1998, 1999, 2007 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/>. */
+
+#ifndef INDEX_H
+#define INDEX_H
+
+#include "makeinfo.h"
+#include "cmds.h"
+
+extern int printing_index;
+extern int defined_indices;
+extern int index_counter;
+
+/* User commands are only new indices. (Macros are handled separately.) */
+extern COMMAND **user_command_array;
+extern int user_command_array_len;
+
+/* An index element... */
+typedef struct index_elt
+{
+ struct index_elt *next;
+ char *entry; /* The index entry itself, after expansion. */
+ char *entry_text; /* The original, non-expanded entry text. */
+ char *node; /* The node from whence it came. */
+ char *section; /* Current section number we are in, */
+ char *section_name; /* ... and its title. */
+ int code; /* Nonzero means add `@code{...}' when
+ printing this element. */
+ int defining_line; /* Line number where this entry was written. */
+ int output_line; /* And line number where it is in the output. */
+ char *defining_file; /* Source file for defining_line. */
+ char *output_file; /* Output file for output_line. */
+ int entry_number; /* Entry number. */
+} INDEX_ELT;
+
+
+/* A list of short-names for each index.
+ There are two indices into the the_indices array.
+ * read_index is the index that points to the list of index
+ entries that we will find if we ask for the list of entries for
+ this name.
+ * write_index is the index that points to the list of index entries
+ that we will add new entries to.
+
+ Initially, read_index and write_index are the same, but the
+ @syncodeindex and @synindex commands can change the list we add
+ entries to.
+
+ For example, after the commands
+ @cindex foo
+ @defindex ii
+ @synindex cp ii
+ @cindex bar
+
+ the cp index will contain the entry `foo', and the new ii
+ index will contain the entry `bar'. This is consistent with the
+ way texinfo.tex handles the same situation.
+
+ In addition, for each index, it is remembered whether that index is
+ a code index or not. Code indices have @code{} inserted around the
+ first word when they are printed with printindex. */
+typedef struct
+{
+ char *name;
+ int read_index; /* index entries for `name' */
+ int write_index; /* store index entries here, @synindex can change it */
+ int code;
+} INDEX_ALIST;
+
+extern INDEX_ALIST **name_index_alist;
+
+/* Initialize all indices. */
+extern void init_indices (void);
+
+INDEX_ELT *index_list (char *name);
+
+#endif /* !INDEX_H */
diff --git a/makeinfo/insertion.c b/makeinfo/insertion.c
new file mode 100644
index 0000000..9928115
--- /dev/null
+++ b/makeinfo/insertion.c
@@ -0,0 +1,2403 @@
+/* insertion.c -- insertions for Texinfo.
+ $Id: insertion.c,v 1.71 2008/04/09 17:31:10 karl Exp $
+
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+ 2007, 2008 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 "system.h"
+#include "cmds.h"
+#include "defun.h"
+#include "float.h"
+#include "html.h"
+#include "insertion.h"
+#include "macro.h"
+#include "makeinfo.h"
+#include "multi.h"
+#include "xml.h"
+
+/* Must match list in insertion.h. */
+static char *insertion_type_names[] =
+{
+ "cartouche", "copying", "defcv", "deffn", "defivar", "defmac",
+ "defmethod", "defop", "defopt", "defspec", "deftp", "deftypecv",
+ "deftypefn", "deftypefun", "deftypeivar", "deftypemethod",
+ "deftypeop", "deftypevar", "deftypevr", "defun", "defvar", "defvr",
+ "detailmenu", "direntry", "display", "documentdescription",
+ "enumerate", "example", "float", "flushleft", "flushright", "format",
+ "ftable", "group", "ifclear", "ifdocbook", "ifhtml", "ifinfo",
+ "ifnotdocbook", "ifnothtml", "ifnotinfo", "ifnotplaintext", "ifnottex",
+ "ifnotxml", "ifplaintext", "ifset", "iftex", "ifxml", "itemize", "lisp",
+ "menu", "multitable", "quotation", "rawdocbook", "rawhtml", "rawtex",
+ "rawxml", "smalldisplay", "smallexample", "smallformat", "smalllisp",
+ "verbatim", "table", "tex", "vtable", "titlepage", "bad_type"
+};
+
+/* All nested environments. */
+INSERTION_ELT *insertion_stack = NULL;
+
+/* How deeply we're nested. */
+int insertion_level = 0;
+
+/* Set to 1 if we've processed (commentary) text in a @menu that
+ wasn't part of a menu item. */
+int had_menu_commentary;
+
+/* How to examine menu lines. */
+int in_detailmenu = 0;
+
+/* Whether to examine menu lines. */
+int in_menu = 0;
+
+/* Set to 1 if <p> is written in normal context.
+ Used for menu and itemize. */
+int in_paragraph = 0;
+
+/* Since an insertion is already in the stack before we reach the switch
+ statement, we cannot use is_in_insertion_of_type (always returns true.) Also
+ making it return the level found, and comparing it with the current level is
+ no use, due to the order of stack. */
+static int float_active = 0;
+
+/* Unsetting escape_html blindly causes text inside @html/etc. to be escaped if
+ used within a rmacro. */
+static int raw_output_block = 0;
+
+/* Non-zero if a <dl> element has a <dt> element in it. We use this when
+ deciding whether to insert a <br> or not. */
+static int html_deflist_has_term = 0;
+
+const char default_item_function[] = { "@bullet" };
+
+void
+init_insertion_stack (void)
+{
+ insertion_stack = NULL;
+}
+
+/* Return the type of the current insertion. */
+static enum insertion_type
+current_insertion_type (void)
+{
+ return insertion_level ? insertion_stack->insertion : bad_type;
+}
+
+/* Return the string which is the function to wrap around items, or NULL
+ if we're not in an environment where @item is ok. */
+static char *
+current_item_function (void)
+{
+ int done = 0;
+ INSERTION_ELT *elt = insertion_stack;
+
+ /* Skip down through the stack until we find an insertion with an
+ itemize function defined, i.e., skip conditionals, @cartouche, etc. */
+ while (!done && elt)
+ {
+ switch (elt->insertion)
+ {
+ /* This list should match the one in cm_item. */
+ case ifclear:
+ case ifhtml:
+ case ifinfo:
+ case ifnothtml:
+ case ifnotinfo:
+ case ifnotplaintext:
+ case ifnottex:
+ case ifnotxml:
+ case ifplaintext:
+ case ifset:
+ case iftex:
+ case ifxml:
+ case rawdocbook:
+ case rawhtml:
+ case rawxml:
+ case rawtex:
+ case tex:
+ case cartouche:
+ elt = elt->next;
+ break;
+
+ default:
+ done = 1;
+ }
+ }
+
+ /* item_function usually gets assigned the empty string. */
+ return done && (*elt->item_function) ? elt->item_function : NULL;
+}
+
+/* Parse the item marker function off the input. If result is just "@",
+ change it to "@ ", since "@" by itself is not a command. This makes
+ "@ ", "@\t", and "@\n" all the same, but their default meanings are
+ the same anyway, and let's not worry about supporting redefining them. */
+char *
+get_item_function (void)
+{
+ char *item_function;
+ char *item_loc;
+
+ get_rest_of_line (0, &item_function);
+
+ /* If the document erroneously says
+ @itemize @bullet @item foobar
+ it's nicer to give an error up front than repeat `@bullet expected
+ braces' until we get a segmentation fault. */
+ item_loc = strstr (item_function, "@item");
+ if (item_loc)
+ {
+ line_error (_("@item not allowed in argument to @itemize"));
+ *item_loc = 0;
+ }
+
+ /* If we hit the end of text in get_rest_of_line, backing up
+ input pointer will cause the last character of the last line
+ be pushed back onto the input, which is wrong. */
+ if (input_text_offset < input_text_length)
+ backup_input_pointer ();
+
+ if (STREQ (item_function, "@"))
+ {
+ free (item_function);
+ item_function = xstrdup ("@ ");
+ }
+
+ return item_function;
+}
+
+ /* Push the state of the current insertion on the stack. */
+static void
+push_insertion (enum insertion_type type, char *item_function)
+{
+ INSERTION_ELT *new = xmalloc (sizeof (INSERTION_ELT));
+
+ new->item_function = item_function;
+ new->filling_enabled = filling_enabled;
+ new->indented_fill = indented_fill;
+ new->insertion = type;
+ new->line_number = line_number;
+ new->filename = xstrdup (input_filename);
+ new->inhibited = inhibit_paragraph_indentation;
+ new->in_fixed_width_font = in_fixed_width_font;
+ new->next = insertion_stack;
+ insertion_stack = new;
+ insertion_level++;
+}
+
+ /* Pop the value on top of the insertion stack into the
+ global variables. */
+void
+pop_insertion (void)
+{
+ INSERTION_ELT *temp = insertion_stack;
+
+ if (temp == NULL)
+ return;
+
+ in_fixed_width_font = temp->in_fixed_width_font;
+ inhibit_paragraph_indentation = temp->inhibited;
+ filling_enabled = temp->filling_enabled;
+ indented_fill = temp->indented_fill;
+ if (temp->item_function == default_item_function)
+ temp->item_function = NULL;
+ else
+ free_and_clear (&(temp->item_function));
+ free_and_clear (&(temp->filename));
+ insertion_stack = insertion_stack->next;
+ free (temp);
+ insertion_level--;
+}
+
+ /* Return a pointer to the print name of this
+ enumerated type. */
+static const char *
+insertion_type_pname (enum insertion_type type)
+{
+ if ((int) type < (int) bad_type)
+ {
+ if (type == rawdocbook)
+ return "docbook";
+ else if (type == rawhtml)
+ return "html";
+ else if (type == rawxml)
+ return "xml";
+ else if (type == rawtex)
+ return "tex";
+ else
+ return insertion_type_names[(int) type];
+ }
+ else
+ return _("Broken-Type in insertion_type_pname");
+}
+
+/* Return the insertion_type associated with NAME.
+ If the type is not one of the known ones, return BAD_TYPE. */
+enum insertion_type
+find_type_from_name (char *name)
+{
+ int index = 0;
+ while (index < (int) bad_type)
+ {
+ if (STREQ (name, insertion_type_names[index]))
+ return (enum insertion_type) index;
+ if (index == rawdocbook && STREQ (name, "docbook"))
+ return rawdocbook;
+ if (index == rawhtml && STREQ (name, "html"))
+ return rawhtml;
+ if (index == rawxml && STREQ (name, "xml"))
+ return rawxml;
+ if (index == rawtex && STREQ (name, "tex"))
+ return rawtex;
+ index++;
+ }
+ return bad_type;
+}
+
+/* Simple function to query insertion_stack to see if we are inside a given
+ insertion type. */
+int
+is_in_insertion_of_type (int type)
+{
+ INSERTION_ELT *temp = insertion_stack;
+
+ if (!insertion_level)
+ return 0;
+
+ while (temp)
+ {
+ if (temp->insertion == type)
+ return 1;
+ temp = temp->next;
+ }
+
+ return 0;
+}
+
+
+static int
+defun_insertion (enum insertion_type type)
+{
+ return 0
+ || (type == defcv)
+ || (type == deffn)
+ || (type == defivar)
+ || (type == defmac)
+ || (type == defmethod)
+ || (type == defop)
+ || (type == defopt)
+ || (type == defspec)
+ || (type == deftp)
+ || (type == deftypecv)
+ || (type == deftypefn)
+ || (type == deftypefun)
+ || (type == deftypeivar)
+ || (type == deftypemethod)
+ || (type == deftypeop)
+ || (type == deftypevar)
+ || (type == deftypevr)
+ || (type == defun)
+ || (type == defvar)
+ || (type == defvr)
+ ;
+}
+
+/* MAX_NS is the maximum nesting level for enumerations. I picked 100
+ which seemed reasonable. This doesn't control the number of items,
+ just the number of nested lists. */
+#define max_stack_depth 100
+#define ENUM_DIGITS 1
+#define ENUM_ALPHA 2
+typedef struct {
+ int enumtype;
+ int enumval;
+} DIGIT_ALPHA;
+
+DIGIT_ALPHA enumstack[max_stack_depth];
+int enumstack_offset = 0;
+int current_enumval = 1;
+int current_enumtype = ENUM_DIGITS;
+char *enumeration_arg = NULL;
+
+static void
+start_enumerating (int at, int type)
+{
+ if ((enumstack_offset + 1) == max_stack_depth)
+ {
+ line_error (_("Enumeration stack overflow"));
+ return;
+ }
+ enumstack[enumstack_offset].enumtype = current_enumtype;
+ enumstack[enumstack_offset].enumval = current_enumval;
+ enumstack_offset++;
+ current_enumval = at;
+ current_enumtype = type;
+}
+
+static void
+stop_enumerating (void)
+{
+ --enumstack_offset;
+ if (enumstack_offset < 0)
+ enumstack_offset = 0;
+
+ current_enumval = enumstack[enumstack_offset].enumval;
+ current_enumtype = enumstack[enumstack_offset].enumtype;
+}
+
+/* Place a letter or digits into the output stream. */
+static void
+enumerate_item (void)
+{
+ char temp[10];
+
+ if (current_enumtype == ENUM_ALPHA)
+ {
+ if (current_enumval == ('z' + 1) || current_enumval == ('Z' + 1))
+ {
+ current_enumval = ((current_enumval - 1) == 'z' ? 'a' : 'A');
+ warning (_("lettering overflow, restarting at %c"), current_enumval);
+ }
+ sprintf (temp, "%c. ", current_enumval);
+ }
+ else
+ sprintf (temp, "%d. ", current_enumval);
+
+ indent (current_output_column () + (current_indent - strlen (temp)));
+ add_word (temp);
+ current_enumval++;
+}
+
+static void
+enum_html (void)
+{
+ char type;
+ int start;
+
+ if (isdigit (*enumeration_arg))
+ {
+ type = '1';
+ start = atoi (enumeration_arg);
+ }
+ else if (isupper (*enumeration_arg))
+ {
+ type = 'A';
+ start = *enumeration_arg - 'A' + 1;
+ }
+ else
+ {
+ type = 'a';
+ start = *enumeration_arg - 'a' + 1;
+ }
+
+ add_html_block_elt_args ("<ol type=%c start=%d>\n", type, start);
+}
+
+/* Conditionally parse based on the current command name. */
+void
+command_name_condition (void)
+{
+ char *discarder = xmalloc (8 + strlen (command));
+
+ sprintf (discarder, "\n%cend %s", COMMAND_PREFIX, command);
+ discard_until (discarder);
+ discard_until ("\n");
+
+ free (discarder);
+}
+
+/* This is where the work for all the "insertion" style
+ commands is done. A huge switch statement handles the
+ various setups, and generic code is on both sides. */
+void
+begin_insertion (enum insertion_type type)
+{
+ int no_discard = 0;
+
+ if (defun_insertion (type))
+ {
+ push_insertion (type, xstrdup (""));
+ no_discard++;
+ }
+ else
+ {
+ push_insertion (type, get_item_function ());
+ }
+
+ switch (type)
+ {
+ case menu:
+ if (!no_headers)
+ close_paragraph ();
+
+ filling_enabled = no_indent = 0;
+ inhibit_paragraph_indentation = 1;
+
+ if (html)
+ {
+ had_menu_commentary = 1;
+ }
+ else if (!no_headers && !xml)
+ add_word ("* Menu:\n");
+
+ if (xml)
+ xml_insert_element (MENU, START);
+ else
+ in_fixed_width_font++;
+
+ next_menu_item_number = 1;
+ in_menu++;
+ no_discard++;
+ break;
+
+ case detailmenu:
+ if (!in_menu)
+ {
+ if (!no_headers)
+ close_paragraph ();
+
+ filling_enabled = no_indent = 0;
+ inhibit_paragraph_indentation = 1;
+
+ no_discard++;
+ }
+
+ if (xml)
+ {
+ xml_insert_element (DETAILMENU, START);
+ skip_whitespace_and_newlines ();
+ }
+ else
+ in_fixed_width_font++;
+
+ in_detailmenu++;
+ break;
+
+ case direntry:
+ close_single_paragraph ();
+ filling_enabled = no_indent = 0;
+ inhibit_paragraph_indentation = 1;
+ add_word ("START-INFO-DIR-ENTRY\n");
+
+ /* The zsh manual, maybe others, wrongly indents the * line of the
+ direntry in the source. Ignore that whitespace. */
+ skip_whitespace_and_newlines ();
+ no_discard++;
+ break;
+
+ case documentdescription:
+ {
+ char *desc;
+ int start_of_end;
+ int save_fixed_width;
+
+ discard_until ("\n"); /* ignore the @documentdescription line */
+ start_of_end = get_until ("\n@end documentdescription", &desc);
+ save_fixed_width = in_fixed_width_font;
+
+ in_fixed_width_font = 0;
+ document_description = expansion (desc, 0);
+ free (desc);
+
+ in_fixed_width_font = save_fixed_width;
+ input_text_offset = start_of_end; /* go back to the @end to match */
+ }
+ break;
+
+ case copying:
+ /* Save the copying text away for @insertcopying,
+ typically used on the back of the @titlepage (for TeX) and
+ the Top node (for info/html). */
+ if (input_text[input_text_offset] != '\n')
+ discard_until ("\n"); /* ignore remainder of @copying line */
+
+ input_text_offset = get_until ("\n@end copying", &copying_text);
+ canon_white (copying_text);
+
+ /* For info, output the copying text right away, so it will end up
+ in the header of the Info file, before the first node, and thus
+ get copied automatically to all the split files. For xml, also
+ output it right away since xml output is never split.
+ For html, we output it specifically in html_output_head.
+ For plain text, there's no way to hide it, so the author must
+ use @insertcopying in the desired location. */
+ if (docbook)
+ {
+ if (!xml_in_bookinfo)
+ {
+ xml_insert_element (BOOKINFO, START);
+ xml_in_bookinfo = 1;
+ }
+ xml_insert_element (LEGALNOTICE, START);
+ }
+
+ if (!html && !no_headers)
+ cm_insert_copying ();
+
+ if (docbook)
+ xml_insert_element (LEGALNOTICE, END);
+ break;
+
+ case quotation:
+ /* @quotation does filling (@display doesn't). */
+ if (html)
+ add_html_block_elt ("<blockquote>\n");
+ else
+ {
+ /* with close_single_paragraph, we get no blank line above
+ within @copying. */
+ close_paragraph ();
+ last_char_was_newline = no_indent = 0;
+ indented_fill = filling_enabled = 1;
+ inhibit_paragraph_indentation = 1;
+ current_indent += default_indentation_increment;
+ }
+ if (xml)
+ xml_insert_quotation (insertion_stack->item_function, START);
+ else if (strlen(insertion_stack->item_function))
+ execute_string ("@b{%s:} ", insertion_stack->item_function);
+ break;
+
+ case example:
+ case smallexample:
+ case lisp:
+ case smalllisp:
+ in_fixed_width_font++;
+ /* fall through */
+
+ /* Like @example but no fixed width font. */
+ case display:
+ case smalldisplay:
+ /* Like @display but without indentation. */
+ case smallformat:
+ case format:
+ close_single_paragraph ();
+ inhibit_paragraph_indentation = 1;
+ filling_enabled = 0;
+ last_char_was_newline = 0;
+
+ if (html)
+ /* Kludge alert: if <pre> is followed by a newline, IE3,
+ mozilla, maybe others render an extra blank line before the
+ pre-formatted block. So don't output a newline. */
+ add_html_block_elt_args ("<pre class=\"%s\">", command);
+
+ if (type != format && type != smallformat)
+ {
+ current_indent += example_indentation_increment;
+ if (html)
+ {
+ /* Since we didn't put \n after <pre>, we need to insert
+ the indentation by hand. */
+ int i;
+ for (i = current_indent; i > 0; i--)
+ add_char (' ');
+ }
+ }
+ break;
+
+ case multitable:
+ do_multitable ();
+ break;
+
+ case table:
+ case ftable:
+ case vtable:
+ case itemize:
+ close_single_paragraph ();
+ current_indent += default_indentation_increment;
+ filling_enabled = indented_fill = 1;
+#if defined (INDENT_PARAGRAPHS_IN_TABLE)
+ inhibit_paragraph_indentation = 0;
+#else
+ inhibit_paragraph_indentation = 1;
+#endif /* !INDENT_PARAGRAPHS_IN_TABLE */
+
+ /* Make things work for losers who forget the itemize syntax. */
+ if (type == itemize)
+ {
+ if (!(*insertion_stack->item_function))
+ {
+ free (insertion_stack->item_function);
+ insertion_stack->item_function = (char *) default_item_function;
+ }
+ }
+
+ if (!*insertion_stack->item_function)
+ {
+ line_error (_("%s requires an argument: the formatter for %citem"),
+ insertion_type_pname (type), COMMAND_PREFIX);
+ }
+
+ if (html)
+ {
+ if (type == itemize)
+ {
+ add_html_block_elt ("<ul>\n");
+ in_paragraph = 0;
+ }
+ else
+ { /* We are just starting, so this <dl>
+ has no <dt> children yet. */
+ html_deflist_has_term = 0;
+ add_html_block_elt ("<dl>\n");
+ }
+ }
+ if (xml)
+ xml_begin_table (type, insertion_stack->item_function);
+
+ while (input_text[input_text_offset] == '\n'
+ && input_text[input_text_offset+1] == '\n')
+ {
+ line_number++;
+ input_text_offset++;
+ }
+
+ break;
+
+ case enumerate:
+ close_single_paragraph ();
+ no_indent = 0;
+#if defined (INDENT_PARAGRAPHS_IN_TABLE)
+ inhibit_paragraph_indentation = 0;
+#else
+ inhibit_paragraph_indentation = 1;
+#endif /* !INDENT_PARAGRAPHS_IN_TABLE */
+
+ current_indent += default_indentation_increment;
+ filling_enabled = indented_fill = 1;
+
+ if (html)
+ {
+ enum_html ();
+ in_paragraph = 0;
+ }
+
+ if (xml)
+ xml_begin_enumerate (enumeration_arg);
+
+ if (isdigit (*enumeration_arg))
+ start_enumerating (atoi (enumeration_arg), ENUM_DIGITS);
+ else
+ start_enumerating (*enumeration_arg, ENUM_ALPHA);
+ break;
+
+ /* @group produces no output in info. */
+ case group:
+ /* Only close the paragraph if we are not inside of an
+ @example-like environment. */
+ if (xml)
+ xml_insert_element (GROUP, START);
+ else if (!insertion_stack->next
+ || (insertion_stack->next->insertion != display
+ && insertion_stack->next->insertion != smalldisplay
+ && insertion_stack->next->insertion != example
+ && insertion_stack->next->insertion != smallexample
+ && insertion_stack->next->insertion != lisp
+ && insertion_stack->next->insertion != smalllisp
+ && insertion_stack->next->insertion != format
+ && insertion_stack->next->insertion != smallformat
+ && insertion_stack->next->insertion != flushleft
+ && insertion_stack->next->insertion != flushright))
+ close_single_paragraph ();
+ break;
+
+ case cartouche:
+ if (html)
+ add_html_block_elt ("<p><table class=\"cartouche\" summary=\"cartouche\" border=\"1\"><tr><td>\n");
+ if (in_menu)
+ no_discard++;
+ break;
+
+ case floatenv:
+ /* Cannot nest floats, so complain. */
+ if (float_active)
+ {
+ line_error (_("%cfloat environments cannot be nested"), COMMAND_PREFIX);
+ pop_insertion ();
+ break;
+ }
+
+ float_active++;
+
+ { /* Collect data about this float. */
+ /* Example: @float [FLOATTYPE][,XREFLABEL][,POSITION] */
+ char floattype[200] = "";
+ char xreflabel[200] = "";
+ char position[200] = "";
+ char *text;
+ char *caption;
+ char *shortcaption;
+ int start_of_end;
+ int save_line_number = line_number;
+ int save_input_text_offset = input_text_offset;
+ int i;
+
+ if (strlen (insertion_stack->item_function) > 0)
+ {
+ int i = 0, t = 0, c = 0;
+ while (insertion_stack->item_function[i])
+ {
+ if (insertion_stack->item_function[i] == ',')
+ {
+ switch (t)
+ {
+ case 0:
+ floattype[c] = '\0';
+ break;
+ case 1:
+ xreflabel[c] = '\0';
+ break;
+ case 2:
+ position[c] = '\0';
+ break;
+ }
+ c = 0;
+ t++;
+ i++;
+ continue;
+ }
+
+ switch (t)
+ {
+ case 0:
+ floattype[c] = insertion_stack->item_function[i];
+ break;
+ case 1:
+ xreflabel[c] = insertion_stack->item_function[i];
+ break;
+ case 2:
+ position[c] = insertion_stack->item_function[i];
+ break;
+ }
+ c++;
+ i++;
+ }
+ }
+
+ skip_whitespace_and_newlines ();
+
+ start_of_end = get_until ("\n@end float", &text);
+
+ /* Get also the @caption. */
+ i = search_forward_until_pos ("\n@caption{",
+ save_input_text_offset, start_of_end);
+ if (i > -1)
+ {
+ input_text_offset = i + sizeof ("\n@caption{") - 1;
+ get_until_in_braces ("\n@end float", &caption);
+ input_text_offset = save_input_text_offset;
+ }
+ else
+ caption = "";
+
+ /* ... and the @shortcaption. */
+ i = search_forward_until_pos ("\n@shortcaption{",
+ save_input_text_offset, start_of_end);
+ if (i > -1)
+ {
+ input_text_offset = i + sizeof ("\n@shortcaption{") - 1;
+ get_until_in_braces ("\n@end float", &shortcaption);
+ input_text_offset = save_input_text_offset;
+ }
+ else
+ shortcaption = "";
+
+ canon_white (xreflabel);
+ canon_white (floattype);
+ canon_white (position);
+ canon_white (caption);
+ canon_white (shortcaption);
+
+ add_new_float (xstrdup (xreflabel),
+ xstrdup (caption), xstrdup (shortcaption),
+ xstrdup (floattype), xstrdup (position));
+
+ /* Move to the start of the @float so the contents get processed as
+ usual. */
+ input_text_offset = save_input_text_offset;
+ line_number = save_line_number;
+ }
+
+ if (html)
+ add_html_block_elt ("<div class=\"float\">\n");
+ else if (docbook)
+ xml_insert_element (FLOAT, START);
+ else if (xml)
+ {
+ xml_insert_element_with_attribute (FLOAT, START,
+ "name=\"%s\"", current_float_id ());
+
+ xml_insert_element (FLOATTYPE, START);
+ execute_string ("%s", current_float_type ());
+ xml_insert_element (FLOATTYPE, END);
+
+ xml_insert_element (FLOATPOS, START);
+ execute_string ("%s", current_float_position ());
+ xml_insert_element (FLOATPOS, END);
+ }
+ else
+ { /* Info */
+ close_single_paragraph ();
+ inhibit_paragraph_indentation = 1;
+ }
+
+ /* Anchor now. Note that XML documents get their
+ anchors with <float name="anchor"> tag. */
+ if ((!xml || docbook) && strlen (current_float_id ()) > 0)
+ execute_string ("@anchor{%s}", current_float_id ());
+
+ break;
+
+ /* Insertions that are no-ops in info, but do something in TeX. */
+ case ifclear:
+ case ifdocbook:
+ case ifhtml:
+ case ifinfo:
+ case ifnotdocbook:
+ case ifnothtml:
+ case ifnotinfo:
+ case ifnotplaintext:
+ case ifnottex:
+ case ifnotxml:
+ case ifplaintext:
+ case ifset:
+ case iftex:
+ case ifxml:
+ case rawtex:
+ if (in_menu)
+ no_discard++;
+ break;
+
+ case rawdocbook:
+ case rawhtml:
+ case rawxml:
+ raw_output_block++;
+
+ if (raw_output_block > 0)
+ {
+ xml_no_para = 1;
+ escape_html = 0;
+ xml_keep_space++;
+ }
+
+ {
+ /* Some deuglification for improved readability. */
+ extern int xml_in_para;
+ if (xml && !xml_in_para && xml_indentation_increment > 0)
+ add_char ('\n');
+ }
+
+ break;
+
+ case defcv:
+ case deffn:
+ case defivar:
+ case defmac:
+ case defmethod:
+ case defop:
+ case defopt:
+ case defspec:
+ case deftp:
+ case deftypecv:
+ case deftypefn:
+ case deftypefun:
+ case deftypeivar:
+ case deftypemethod:
+ case deftypeop:
+ case deftypevar:
+ case deftypevr:
+ case defun:
+ case defvar:
+ case defvr:
+ inhibit_paragraph_indentation = 1;
+ filling_enabled = indented_fill = 1;
+ current_indent += default_indentation_increment;
+ no_indent = 0;
+ if (xml)
+ xml_begin_definition ();
+ break;
+
+ case flushleft:
+ close_single_paragraph ();
+ inhibit_paragraph_indentation = 1;
+ filling_enabled = indented_fill = no_indent = 0;
+ if (html)
+ add_html_block_elt ("<div align=\"left\">");
+ break;
+
+ case flushright:
+ close_single_paragraph ();
+ filling_enabled = indented_fill = no_indent = 0;
+ inhibit_paragraph_indentation = 1;
+ force_flush_right++;
+ if (html)
+ add_html_block_elt ("<div align=\"right\">");
+ break;
+
+ case titlepage:
+ xml_insert_element (TITLEPAGE, START);
+ break;
+
+ default:
+ line_error ("begin_insertion internal error: type=%d", type);
+ }
+
+ if (!no_discard)
+ discard_until ("\n");
+}
+
+/* Try to end the insertion with the specified TYPE. With a value of
+ `bad_type', TYPE gets translated to match the value currently on top
+ of the stack. Otherwise, if TYPE doesn't match the top of the
+ insertion stack, give error. */
+static void
+end_insertion (enum insertion_type type)
+{
+ enum insertion_type temp_type;
+
+ if (!insertion_level)
+ return;
+
+ temp_type = current_insertion_type ();
+
+ if (type == bad_type)
+ type = temp_type;
+
+ if (type != temp_type)
+ {
+ line_error
+ (_("`@end' expected `%s', but saw `%s'"),
+ insertion_type_pname (temp_type), insertion_type_pname (type));
+ return;
+ }
+
+ pop_insertion ();
+
+ if (xml)
+ {
+ switch (type)
+ {
+ case ifinfo:
+ case documentdescription:
+ break;
+ case quotation:
+ xml_insert_quotation ("", END);
+ break;
+ case example:
+ xml_insert_element (EXAMPLE, END);
+ if (docbook && current_insertion_type () == floatenv)
+ xml_insert_element (FLOATEXAMPLE, END);
+ break;
+ case smallexample:
+ xml_insert_element (SMALLEXAMPLE, END);
+ if (docbook && current_insertion_type () == floatenv)
+ xml_insert_element (FLOATEXAMPLE, END);
+ break;
+ case lisp:
+ xml_insert_element (LISP, END);
+ if (docbook && current_insertion_type () == floatenv)
+ xml_insert_element (FLOATEXAMPLE, END);
+ break;
+ case smalllisp:
+ xml_insert_element (SMALLLISP, END);
+ if (docbook && current_insertion_type () == floatenv)
+ xml_insert_element (FLOATEXAMPLE, END);
+ break;
+ case cartouche:
+ xml_insert_element (CARTOUCHE, END);
+ break;
+ case format:
+ if (docbook && xml_in_bookinfo && xml_in_abstract)
+ {
+ xml_insert_element (ABSTRACT, END);
+ xml_in_abstract = 0;
+ }
+ else
+ xml_insert_element (FORMAT, END);
+ break;
+ case smallformat:
+ xml_insert_element (SMALLFORMAT, END);
+ break;
+ case display:
+ xml_insert_element (DISPLAY, END);
+ break;
+ case smalldisplay:
+ xml_insert_element (SMALLDISPLAY, END);
+ break;
+ case table:
+ case ftable:
+ case vtable:
+ case itemize:
+ xml_end_table (type);
+ break;
+ case enumerate:
+ xml_end_enumerate ();
+ break;
+ case group:
+ xml_insert_element (GROUP, END);
+ break;
+ case titlepage:
+ xml_insert_element (TITLEPAGE, END);
+ break;
+ }
+ }
+ switch (type)
+ {
+ /* Insertions which have no effect on paragraph formatting. */
+ case copying:
+ line_number--;
+ break;
+
+ case ifclear:
+ case ifdocbook:
+ case ifinfo:
+ case ifhtml:
+ case ifnotdocbook:
+ case ifnothtml:
+ case ifnotinfo:
+ case ifnotplaintext:
+ case ifnottex:
+ case ifnotxml:
+ case ifplaintext:
+ case ifset:
+ case iftex:
+ case ifxml:
+ case rawtex:
+ case titlepage:
+ break;
+
+ case rawdocbook:
+ case rawhtml:
+ case rawxml:
+ raw_output_block--;
+
+ if (raw_output_block <= 0)
+ {
+ xml_no_para = 0;
+ escape_html = 1;
+ xml_keep_space--;
+ }
+
+ if ((xml || html)
+ && output_paragraph_offset > 0
+ && output_paragraph[output_paragraph_offset-1] == '\n')
+ output_paragraph_offset--;
+ break;
+
+ case detailmenu:
+ if (xml)
+ xml_insert_element (DETAILMENU, END);
+
+ in_detailmenu--; /* No longer hacking menus. */
+ if (!in_menu)
+ {
+ if (!no_headers)
+ close_insertion_paragraph ();
+ }
+ break;
+
+ case direntry: /* Eaten if html. */
+ insert_string ("END-INFO-DIR-ENTRY\n\n");
+ close_insertion_paragraph ();
+ break;
+
+ case documentdescription:
+ if (xml)
+ insert_string (document_description);
+ xml_insert_element (DOCUMENTDESCRIPTION, END);
+ break;
+
+ case menu:
+ in_menu--; /* No longer hacking menus. */
+ if (html && !no_headers)
+ add_html_block_elt ("</ul>\n");
+ else if (!no_headers && !xml)
+ close_insertion_paragraph ();
+ break;
+
+ case multitable:
+ end_multitable ();
+ break;
+
+ case enumerate:
+ stop_enumerating ();
+ close_insertion_paragraph ();
+ current_indent -= default_indentation_increment;
+ if (html)
+ add_html_block_elt ("</ol>\n");
+ break;
+
+ case flushleft:
+ if (html)
+ add_html_block_elt ("</div>\n");
+ close_insertion_paragraph ();
+ break;
+
+ case cartouche:
+ if (html)
+ add_html_block_elt ("</td></tr></table>\n");
+ close_insertion_paragraph ();
+ break;
+
+ case group:
+ if (!xml || docbook)
+ close_insertion_paragraph ();
+ break;
+
+ case floatenv:
+ if (xml)
+ xml_insert_element (FLOAT, END);
+ else
+ {
+ if (html)
+ add_html_block_elt ("<p><strong class=\"float-caption\">");
+ else
+ close_paragraph ();
+
+ no_indent = 1;
+
+ /* Legend:
+ 1) @float Foo,lbl & no caption: Foo 1.1
+ 2) @float Foo & no caption: Foo
+ 3) @float ,lbl & no caption: 1.1
+ 4) @float & no caption: */
+
+ if (!xml && !html)
+ indent (current_indent);
+
+ if (strlen (current_float_type ()))
+ execute_string ("%s", current_float_type ());
+
+ if (strlen (current_float_id ()) > 0)
+ {
+ if (strlen (current_float_type ()) > 0)
+ add_char (' ');
+
+ add_word (current_float_number ());
+ }
+
+ if (strlen (current_float_title ()) > 0)
+ {
+ if (strlen (current_float_type ()) > 0
+ || strlen (current_float_id ()) > 0)
+ insert_string (": ");
+
+ execute_string ("%s", current_float_title ());
+ }
+
+ /* Indent the following paragraph. */
+ inhibit_paragraph_indentation = 0;
+
+ if (html)
+ add_word ("</strong></p></div>\n");
+ else
+ close_paragraph ();
+ }
+ float_active--;
+ break;
+
+ case format:
+ case smallformat:
+ case display:
+ case smalldisplay:
+ case example:
+ case smallexample:
+ case lisp:
+ case smalllisp:
+ case quotation:
+ /* @format and @smallformat are the only fixed_width insertion
+ without a change in indentation. */
+ if (type != format && type != smallformat && type != quotation)
+ current_indent -= example_indentation_increment;
+ else if (type == quotation && !html)
+ current_indent -= default_indentation_increment;
+
+ if (html)
+ { /* The complex code in close_paragraph that kills whitespace
+ does not function here, since we've inserted non-whitespace
+ (the </whatever>) before it. The indentation already got
+ inserted at the end of the last example line, so we have to
+ delete it, or browsers wind up showing an extra blank line.
+ Furthermore, if we're inside indented environments, we
+ might have arbitrarily much indentation, so remove it all. */
+ kill_self_indent (-1);
+ add_html_block_elt (type == quotation
+ ? "</blockquote>\n" : "</pre>\n");
+ }
+
+ /* The ending of one of these insertions always marks the
+ start of a new paragraph, except for the XML output. */
+ if (!xml || docbook)
+ close_insertion_paragraph ();
+
+ /* </pre> closes paragraph without messing with </p>. */
+ if (html && type != quotation)
+ paragraph_is_open = 0;
+ break;
+
+ case table:
+ case ftable:
+ case vtable:
+ current_indent -= default_indentation_increment;
+ if (html)
+ add_html_block_elt ("</dl>\n");
+ close_insertion_paragraph ();
+ break;
+
+ case itemize:
+ current_indent -= default_indentation_increment;
+ if (html)
+ add_html_block_elt ("</ul>\n");
+ close_insertion_paragraph ();
+ break;
+
+ case flushright:
+ force_flush_right--;
+ if (html)
+ add_html_block_elt ("</div>\n");
+ close_insertion_paragraph ();
+ break;
+
+ /* Handle the @defun insertions with this default clause. */
+ default:
+ {
+ int base_type;
+
+ if (type < defcv || type > defvr)
+ line_error ("end_insertion internal error: type=%d", type);
+
+ base_type = get_base_type (type);
+ switch (base_type)
+ {
+ case deffn:
+ case defvr:
+ case deftp:
+ case deftypecv:
+ case deftypefn:
+ case deftypevr:
+ case defcv:
+ case defop:
+ case deftypemethod:
+ case deftypeop:
+ case deftypeivar:
+ if (html)
+ {
+ if (paragraph_is_open)
+ add_html_block_elt ("</p>");
+ /* close the div and blockquote which has been opened in defun.c */
+ if (!rollback_empty_tag ("blockquote"))
+ add_html_block_elt ("</blockquote>");
+ add_html_block_elt ("</div>\n");
+ }
+ if (xml)
+ xml_end_definition ();
+ break;
+ } /* switch (base_type)... */
+
+ current_indent -= default_indentation_increment;
+ close_insertion_paragraph ();
+ }
+ break;
+
+ }
+
+ if (current_indent < 0)
+ line_error ("end_insertion internal error: current indent=%d",
+ current_indent);
+}
+
+/* Insertions cannot cross certain boundaries, such as node beginnings. In
+ code that creates such boundaries, you should call `discard_insertions'
+ before doing anything else. It prints the errors for you, and cleans up
+ the insertion stack.
+
+ With nonzero SPECIALS_OK argument, allows unmatched
+ @if... conditionals, otherwise not. This is because conditionals can
+ cross node boundaries. Always happens with the @top node, for example. */
+void
+discard_insertions (int specials_ok)
+{
+ int real_line_number = line_number;
+ while (insertion_stack)
+ {
+ if (specials_ok
+ && ((ifclear <= insertion_stack->insertion
+ && insertion_stack->insertion <= iftex)
+ || insertion_stack->insertion == rawdocbook
+ || insertion_stack->insertion == rawhtml
+ || insertion_stack->insertion == rawxml
+ || insertion_stack->insertion == rawtex))
+ break;
+ else
+ {
+ const char *offender = insertion_type_pname (insertion_stack->insertion);
+
+ file_line_error (insertion_stack->filename,
+ insertion_stack->line_number,
+ _("No matching `%cend %s'"), COMMAND_PREFIX,
+ offender);
+ pop_insertion ();
+ }
+ }
+ line_number = real_line_number;
+}
+
+/* Insertion (environment) commands. */
+
+void
+cm_quotation (void)
+{
+ /* We start the blockquote element in the insertion. */
+ begin_insertion (quotation);
+}
+
+void
+cm_example (void)
+{
+ if (docbook && current_insertion_type () == floatenv)
+ xml_begin_docbook_float (FLOATEXAMPLE);
+
+ if (xml)
+ {
+ /* Rollback previous newlines. These occur between
+ </para> and <example>. */
+ if (output_paragraph_offset > 0
+ && output_paragraph[output_paragraph_offset-1] == '\n')
+ output_paragraph_offset--;
+
+ xml_insert_element (EXAMPLE, START);
+
+ /* Make sure example text is starting on a new line
+ for improved readability. */
+ if (docbook)
+ add_char ('\n');
+ }
+
+ begin_insertion (example);
+}
+
+void
+cm_smallexample (void)
+{
+ if (docbook && current_insertion_type () == floatenv)
+ xml_begin_docbook_float (FLOATEXAMPLE);
+
+ if (xml)
+ {
+ /* See cm_example comments about newlines. */
+ if (output_paragraph_offset > 0
+ && output_paragraph[output_paragraph_offset-1] == '\n')
+ output_paragraph_offset--;
+ xml_insert_element (SMALLEXAMPLE, START);
+ if (docbook)
+ add_char ('\n');
+ }
+
+ begin_insertion (smallexample);
+}
+
+void
+cm_lisp (void)
+{
+ if (docbook && current_insertion_type () == floatenv)
+ xml_begin_docbook_float (FLOATEXAMPLE);
+
+ if (xml)
+ {
+ /* See cm_example comments about newlines. */
+ if (output_paragraph_offset > 0
+ && output_paragraph[output_paragraph_offset-1] == '\n')
+ output_paragraph_offset--;
+ xml_insert_element (LISP, START);
+ if (docbook)
+ add_char ('\n');
+ }
+
+ begin_insertion (lisp);
+}
+
+void
+cm_smalllisp (void)
+{
+ if (docbook && current_insertion_type () == floatenv)
+ xml_begin_docbook_float (FLOATEXAMPLE);
+
+ if (xml)
+ {
+ /* See cm_example comments about newlines. */
+ if (output_paragraph_offset > 0
+ && output_paragraph[output_paragraph_offset-1] == '\n')
+ output_paragraph_offset--;
+ xml_insert_element (SMALLLISP, START);
+ if (docbook)
+ add_char ('\n');
+ }
+
+ begin_insertion (smalllisp);
+}
+
+void
+cm_cartouche (void)
+{
+ if (docbook && current_insertion_type () == floatenv)
+ xml_begin_docbook_float (CARTOUCHE);
+
+ if (xml)
+ xml_insert_element (CARTOUCHE, START);
+ begin_insertion (cartouche);
+}
+
+void
+cm_copying (void)
+{
+ begin_insertion (copying);
+}
+
+/* Not an insertion, despite the name, but it goes with cm_copying. */
+void
+cm_insert_copying (void)
+{
+ if (!copying_text)
+ {
+ warning ("@copying not used before %s", command);
+ return;
+ }
+
+ /* It is desirable that @copying is set early in the input file. For
+ Info output, we write the copying text out right away, and thus it
+ may well be the first thing in the output, and we want the file
+ header first. The special case in add_char has to check for
+ executing_string, so it won't be effective. Thus, do it explicitly. */
+ output_head ();
+ execute_string ("%s", copying_text);
+
+ if (!xml && !html)
+ {
+ add_word ("\n\n");
+ /* Update output_position so that the node positions in the tag
+ tables will take account of the copying text. */
+ flush_output ();
+ }
+}
+
+void
+cm_format (void)
+{
+ if (xml)
+ {
+ if (docbook && xml_in_bookinfo)
+ {
+ xml_insert_element (ABSTRACT, START);
+ xml_in_abstract = 1;
+ }
+ else
+ {
+ /* See cm_example comments about newlines. */
+ if (output_paragraph_offset > 0
+ && output_paragraph[output_paragraph_offset-1] == '\n')
+ output_paragraph_offset--;
+ xml_insert_element (FORMAT, START);
+ if (docbook)
+ add_char ('\n');
+ }
+ }
+ begin_insertion (format);
+}
+
+void
+cm_smallformat (void)
+{
+ if (xml)
+ {
+ /* See cm_example comments about newlines. */
+ if (output_paragraph_offset > 0
+ && output_paragraph[output_paragraph_offset-1] == '\n')
+ output_paragraph_offset--;
+ xml_insert_element (SMALLFORMAT, START);
+ if (docbook)
+ add_char ('\n');
+ }
+
+ begin_insertion (smallformat);
+}
+
+void
+cm_display (void)
+{
+ if (xml)
+ {
+ /* See cm_example comments about newlines. */
+ if (output_paragraph_offset > 0
+ && output_paragraph[output_paragraph_offset-1] == '\n')
+ output_paragraph_offset--;
+ xml_insert_element (DISPLAY, START);
+ if (docbook)
+ add_char ('\n');
+ }
+
+ begin_insertion (display);
+}
+
+void
+cm_smalldisplay (void)
+{
+ if (xml)
+ {
+ /* See cm_example comments about newlines. */
+ if (output_paragraph_offset > 0
+ && output_paragraph[output_paragraph_offset-1] == '\n')
+ output_paragraph_offset--;
+ xml_insert_element (SMALLDISPLAY, START);
+ if (docbook)
+ add_char ('\n');
+ }
+
+ begin_insertion (smalldisplay);
+}
+
+void
+cm_direntry (void)
+{
+ if (html || xml || no_headers)
+ command_name_condition ();
+ else
+ begin_insertion (direntry);
+}
+
+void
+cm_documentdescription (void)
+{
+ if (html)
+ begin_insertion (documentdescription);
+
+ else if (xml)
+ {
+ xml_insert_element (DOCUMENTDESCRIPTION, START);
+ begin_insertion (documentdescription);
+ }
+
+ else
+ command_name_condition ();
+}
+
+
+void
+cm_itemize (void)
+{
+ begin_insertion (itemize);
+}
+
+/* Start an enumeration insertion of type TYPE. If the user supplied
+ no argument on the line, then use DEFAULT_STRING as the initial string. */
+static void
+do_enumeration (enum insertion_type type, char *default_string)
+{
+ get_until_in_line (0, ".", &enumeration_arg);
+ canon_white (enumeration_arg);
+
+ if (!*enumeration_arg)
+ {
+ free (enumeration_arg);
+ enumeration_arg = xstrdup (default_string);
+ }
+
+ if (!isdigit (*enumeration_arg) && !isletter (*enumeration_arg))
+ {
+ warning (_("%s requires letter or digit"), insertion_type_pname (type));
+
+ switch (type)
+ {
+ case enumerate:
+ default_string = "1";
+ break;
+ }
+ enumeration_arg = xstrdup (default_string);
+ }
+ begin_insertion (type);
+}
+
+void
+cm_enumerate (void)
+{
+ do_enumeration (enumerate, "1");
+}
+
+
+
+/* Handle verbatim environment:
+ find_end_verbatim == 0: process until end of file
+ find_end_verbatim != 0: process until 'COMMAND_PREFIXend verbatim'
+ or end of file
+
+ No indentation is inserted: this is verbatim after all.
+ If you want indentation, enclose @verbatim in @example.
+
+ Thus, we cannot simply copy the input to the output, since the
+ verbatim environment may be encapsulated in an @example environment,
+ for example. */
+
+void
+handle_verbatim_environment (int find_end_verbatim)
+{
+ int character;
+ int seen_end = 0;
+ int save_filling_enabled = filling_enabled;
+ int save_inhibit_paragraph_indentation = inhibit_paragraph_indentation;
+
+ if (!insertion_stack)
+ close_single_paragraph (); /* no blank lines if not at outer level */
+ inhibit_paragraph_indentation = 1;
+ filling_enabled = 0;
+ in_fixed_width_font++;
+ last_char_was_newline = 0;
+
+ if (html)
+ { /* If inside @example, we'll be preceded by the indentation
+ already. Browsers will ignore those spaces because we're about
+ to start another <pre> (don't ask me). So, wipe them out for
+ cleanliness, and re-insert. */
+ int i;
+ kill_self_indent (default_indentation_increment);
+ add_html_block_elt ("<pre class=\"verbatim\">");
+ for (i = current_indent; i > 0; i--)
+ add_char (' ');
+ }
+ else if (xml)
+ {
+ xml_insert_element (VERBATIM, START);
+ }
+
+ if (find_end_verbatim)
+ { /* Ignore the remainder of the @verbatim line. */
+ char *junk;
+ get_rest_of_line (0, &junk);
+ free (junk);
+ }
+
+ while (input_text_offset < input_text_length)
+ {
+ character = curchar ();
+
+ if (character == '\n')
+ line_number++;
+
+ /* Assume no newlines in END_VERBATIM. */
+ else if (find_end_verbatim && (character == COMMAND_PREFIX) /* @ */
+ && (input_text_length - input_text_offset > sizeof (END_VERBATIM))
+ && !strncmp (&input_text[input_text_offset+1], END_VERBATIM,
+ sizeof (END_VERBATIM)-1))
+ {
+ input_text_offset += sizeof (END_VERBATIM);
+ seen_end = 1;
+ break;
+ }
+
+ if (html && character == '&' && escape_html)
+ add_word ("&amp;");
+ else if (html && character == '<' && escape_html)
+ add_word ("&lt;");
+ else
+ add_char (character);
+
+ input_text_offset++;
+ }
+
+ if (find_end_verbatim && !seen_end)
+ warning (_("end of file inside verbatim block"));
+
+ if (html)
+ { /* See comments in example case above. */
+ kill_self_indent (default_indentation_increment);
+ add_word ("</pre>");
+ }
+ else if (xml)
+ {
+ xml_insert_element (VERBATIM, END);
+ }
+
+ in_fixed_width_font--;
+ filling_enabled = save_filling_enabled;
+ inhibit_paragraph_indentation = save_inhibit_paragraph_indentation;
+}
+
+void
+cm_verbatim (void)
+{
+ handle_verbatim_environment (1);
+}
+
+void
+cm_table (void)
+{
+ begin_insertion (table);
+}
+
+void
+cm_multitable (void)
+{
+ begin_insertion (multitable); /* @@ */
+}
+
+void
+cm_ftable (void)
+{
+ begin_insertion (ftable);
+}
+
+void
+cm_vtable (void)
+{
+ begin_insertion (vtable);
+}
+
+void
+cm_group (void)
+{
+ begin_insertion (group);
+}
+
+/* Insert raw HTML (no escaping of `<' etc.). */
+void
+cm_html (int arg)
+{
+ if (process_html)
+ begin_insertion (rawhtml);
+ else
+ command_name_condition ();
+}
+
+void
+cm_xml (int arg)
+{
+ if (process_xml)
+ begin_insertion (rawxml);
+ else
+ command_name_condition ();
+}
+
+void
+cm_docbook (int arg)
+{
+ if (process_docbook)
+ begin_insertion (rawdocbook);
+ else
+ command_name_condition ();
+}
+
+void
+cm_ifdocbook (void)
+{
+ if (process_docbook)
+ begin_insertion (ifdocbook);
+ else
+ command_name_condition ();
+}
+
+void
+cm_ifnotdocbook (void)
+{
+ if (!process_docbook)
+ begin_insertion (ifnotdocbook);
+ else
+ command_name_condition ();
+}
+
+void
+cm_ifhtml (void)
+{
+ if (process_html)
+ begin_insertion (ifhtml);
+ else
+ command_name_condition ();
+}
+
+void
+cm_ifnothtml (void)
+{
+ if (!process_html)
+ begin_insertion (ifnothtml);
+ else
+ command_name_condition ();
+}
+
+
+void
+cm_ifinfo (void)
+{
+ if (process_info)
+ begin_insertion (ifinfo);
+ else
+ command_name_condition ();
+}
+
+void
+cm_ifnotinfo (void)
+{
+ if (!process_info)
+ begin_insertion (ifnotinfo);
+ else
+ command_name_condition ();
+}
+
+
+void
+cm_ifplaintext (void)
+{
+ if (process_plaintext)
+ begin_insertion (ifplaintext);
+ else
+ command_name_condition ();
+}
+
+void
+cm_ifnotplaintext (void)
+{
+ if (!process_plaintext)
+ begin_insertion (ifnotplaintext);
+ else
+ command_name_condition ();
+}
+
+
+void
+cm_tex (void)
+{
+ if (process_tex)
+ begin_insertion (rawtex);
+ else
+ command_name_condition ();
+}
+
+void
+cm_iftex (void)
+{
+ if (process_tex)
+ begin_insertion (iftex);
+ else
+ command_name_condition ();
+}
+
+void
+cm_ifnottex (void)
+{
+ if (!process_tex)
+ begin_insertion (ifnottex);
+ else
+ command_name_condition ();
+}
+
+void
+cm_ifxml (void)
+{
+ if (process_xml)
+ begin_insertion (ifxml);
+ else
+ command_name_condition ();
+}
+
+void
+cm_ifnotxml (void)
+{
+ if (!process_xml)
+ begin_insertion (ifnotxml);
+ else
+ command_name_condition ();
+}
+
+
+/* Generic xrefable block with a caption. */
+void
+cm_float (void)
+{
+ begin_insertion (floatenv);
+}
+
+void
+cm_caption (int arg)
+{
+ char *temp;
+
+ /* This is a no_op command for most formats, as we handle it during @float
+ insertion. For XML though, we handle it here to keep document structure
+ as close as possible, to the Texinfo source. */
+
+ /* Everything is already handled at START. */
+ if (arg == END)
+ return;
+
+ /* Check if it's mislocated. */
+ if (current_insertion_type () != floatenv)
+ line_error (_("@%s not meaningful outside `@float' environment"), command);
+
+ get_until_in_braces ("\n@end float", &temp);
+
+ if (xml)
+ {
+ int elt = STREQ (command, "shortcaption") ? SHORTCAPTION : CAPTION;
+ xml_insert_element (elt, START);
+ if (!docbook)
+ execute_string ("%s", temp);
+ xml_insert_element (elt, END);
+ }
+
+ free (temp);
+}
+
+/* Begin an insertion where the lines are not filled or indented. */
+void
+cm_flushleft (void)
+{
+ begin_insertion (flushleft);
+}
+
+/* Begin an insertion where the lines are not filled, and each line is
+ forced to the right-hand side of the page. */
+void
+cm_flushright (void)
+{
+ begin_insertion (flushright);
+}
+
+void
+cm_menu (void)
+{
+ if (current_node == NULL && !macro_expansion_output_stream)
+ {
+ warning (_("@menu seen before first @node, creating `Top' node"));
+ warning (_("perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"));
+ /* Include @top command so we can construct the implicit node tree. */
+ execute_string ("@node top\n@top Top\n");
+ }
+ begin_insertion (menu);
+}
+
+void
+cm_detailmenu (void)
+{
+ if (current_node == NULL && !macro_expansion_output_stream)
+ { /* Problems anyway, @detailmenu should always be inside @menu. */
+ warning (_("@detailmenu seen before first node, creating `Top' node"));
+ execute_string ("@node top\n@top Top\n");
+ }
+ begin_insertion (detailmenu);
+}
+
+/* Title page commands. */
+
+void
+cm_titlepage (void)
+{
+ titlepage_cmd_present = 1;
+ if (xml && !docbook)
+ begin_insertion (titlepage);
+ else
+ command_name_condition ();
+}
+
+void
+cm_author (void)
+{
+ char *rest;
+ get_rest_of_line (1, &rest);
+
+ if (is_in_insertion_of_type (quotation))
+ {
+ if (html)
+ add_word_args ("&mdash; %s", rest);
+ else if (docbook)
+ {
+ /* FIXME Ideally, we should use an attribution element,
+ but they are supposed to be at the start of quotation
+ blocks. So to avoid looking ahead mess, let's just
+ use mdash like HTML for now. */
+ xml_insert_entity ("mdash");
+ add_word (rest);
+ }
+ else if (xml)
+ {
+ xml_insert_element (AUTHOR, START);
+ add_word (rest);
+ xml_insert_element (AUTHOR, END);
+ }
+ else
+ add_word_args ("-- %s", rest);
+ }
+ else if (is_in_insertion_of_type (titlepage))
+ {
+ if (xml && !docbook)
+ {
+ xml_insert_element (AUTHOR, START);
+ add_word (rest);
+ xml_insert_element (AUTHOR, END);
+ }
+ }
+ else
+ line_error (_("@%s not meaningful outside `@titlepage' and `@quotation' environments"),
+ command);
+
+ free (rest);
+}
+
+void
+cm_titlepage_cmds (void)
+{
+ char *rest;
+
+ get_rest_of_line (1, &rest);
+
+ if (!is_in_insertion_of_type (titlepage))
+ line_error (_("@%s not meaningful outside `@titlepage' environment"),
+ command);
+
+ if (xml && !docbook)
+ {
+ int elt = 0;
+
+ if (STREQ (command, "title"))
+ elt = BOOKTITLE;
+ else if (STREQ (command, "subtitle"))
+ elt = BOOKSUBTITLE;
+
+ xml_insert_element (elt, START);
+ add_word (rest);
+ xml_insert_element (elt, END);
+ }
+
+ free (rest);
+}
+
+/* End existing insertion block. */
+void
+cm_end (void)
+{
+ char *temp;
+ enum insertion_type type;
+
+ get_rest_of_line (0, &temp);
+
+ if (!insertion_level)
+ {
+ line_error (_("Unmatched `%c%s'"), COMMAND_PREFIX, command);
+ return;
+ }
+
+ if (temp[0] == 0)
+ line_error (_("`%c%s' needs something after it"), COMMAND_PREFIX, command);
+
+ type = find_type_from_name (temp);
+
+ if (type == bad_type)
+ {
+ line_error (_("Bad argument `%s' to `@%s', using `%s'"),
+ temp, command, insertion_type_pname (current_insertion_type ()));
+ }
+ if (xml && type == menu) /* fixme */
+ {
+ xml_end_menu ();
+ }
+ end_insertion (type);
+ free (temp);
+}
+
+/* @itemx, @item. */
+
+static int itemx_flag = 0;
+
+/* Return whether CMD takes a brace-delimited {arg}. */
+int
+command_needs_braces (char *cmd)
+{
+ int i;
+ for (i = 0; command_table[i].name; i++)
+ {
+ if (STREQ (command_table[i].name, cmd))
+ return command_table[i].argument_in_braces == BRACE_ARGS;
+ }
+
+ return 0; /* macro or alias */
+}
+
+
+void
+cm_item (void)
+{
+ char *rest_of_line, *item_func;
+
+ /* Can only hack "@item" while inside of an insertion. */
+ if (insertion_level)
+ {
+ INSERTION_ELT *stack = insertion_stack;
+ int original_input_text_offset;
+
+ skip_whitespace ();
+ original_input_text_offset = input_text_offset;
+
+ get_rest_of_line (0, &rest_of_line);
+ item_func = current_item_function ();
+
+ /* Do the right thing depending on which insertion function is active. */
+ switch_top:
+ switch (stack->insertion)
+ {
+ case multitable:
+ multitable_item ();
+ /* Support text directly after the @item. */
+ if (*rest_of_line)
+ {
+ line_number--;
+ input_text_offset = original_input_text_offset;
+ }
+ break;
+
+ case ifclear:
+ case ifhtml:
+ case ifinfo:
+ case ifnothtml:
+ case ifnotinfo:
+ case ifnotplaintext:
+ case ifnottex:
+ case ifnotxml:
+ case ifplaintext:
+ case ifset:
+ case iftex:
+ case ifxml:
+ case rawdocbook:
+ case rawhtml:
+ case rawxml:
+ case rawtex:
+ case tex:
+ case cartouche:
+ stack = stack->next;
+ if (!stack)
+ goto no_insertion;
+ else
+ goto switch_top;
+ break;
+
+ case menu:
+ case quotation:
+ case example:
+ case smallexample:
+ case lisp:
+ case smalllisp:
+ case format:
+ case smallformat:
+ case display:
+ case smalldisplay:
+ case group:
+ line_error (_("@%s not meaningful inside `@%s' block"),
+ command,
+ insertion_type_pname (current_insertion_type ()));
+ break;
+
+ case itemize:
+ case enumerate:
+ if (itemx_flag)
+ {
+ line_error (_("@itemx not meaningful inside `%s' block"),
+ insertion_type_pname (current_insertion_type ()));
+ }
+ else
+ {
+ if (html)
+ add_html_block_elt ("<li>");
+ else if (xml)
+ xml_begin_item ();
+ else
+ {
+ start_paragraph ();
+ kill_self_indent (-1);
+ filling_enabled = indented_fill = 1;
+
+ if (current_item_function ())
+ {
+ indent (current_indent - 2);
+
+ /* The item marker can be given with or without
+ braces -- @bullet and @bullet{} are both ok.
+ Or it might be something that doesn't take
+ braces at all, such as "o" or "#" or "@ ".
+ Thus, only supply braces if the item marker is
+ a command, they haven't supplied braces
+ themselves, and we know it needs them. */
+ if (item_func && *item_func)
+ {
+ if (*item_func == COMMAND_PREFIX
+ && item_func[strlen (item_func) - 1] != '}'
+ && command_needs_braces (item_func + 1))
+ execute_string ("%s{}", item_func);
+ else
+ execute_string ("%s", item_func);
+ }
+ insert (' ');
+ }
+ else
+ enumerate_item ();
+
+ /* Special hack. This makes `close_paragraph' a no-op until
+ `start_paragraph' has been called. */
+ must_start_paragraph = 1;
+ }
+
+ /* Handle text directly after the @item. */
+ if (*rest_of_line)
+ {
+ line_number--;
+ input_text_offset = original_input_text_offset;
+ }
+ }
+ break;
+
+ case table:
+ case ftable:
+ case vtable:
+ if (html)
+ { /* If nothing has been output since the last <dd>,
+ remove the empty <dd> element. Some browsers render
+ an extra empty line for <dd><dt>, which makes @itemx
+ conversion look ugly. */
+ rollback_empty_tag ("dd");
+
+ /* Force the browser to render one blank line before
+ each new @item in a table. But don't do that if
+ this is the first <dt> after the <dl>, or if we are
+ converting @itemx.
+
+ Note that there are some browsers which ignore <br>
+ in this context, but I cannot find any way to force
+ them all render exactly one blank line. */
+ if (!itemx_flag && html_deflist_has_term)
+ add_html_block_elt ("<br>");
+
+ /* We are about to insert a <dt>, so this <dl> has a term.
+ Feel free to insert a <br> next time. :) */
+ html_deflist_has_term = 1;
+
+ add_html_block_elt ("<dt>");
+ if (item_func && *item_func)
+ execute_string ("%s{%s}", item_func, rest_of_line);
+ else
+ execute_string ("%s", rest_of_line);
+
+ if (current_insertion_type () == ftable)
+ execute_string ("%cfindex %s\n", COMMAND_PREFIX, rest_of_line);
+
+ if (current_insertion_type () == vtable)
+ execute_string ("%cvindex %s\n", COMMAND_PREFIX, rest_of_line);
+
+ add_html_block_elt ("<dd>");
+ }
+ else if (xml) /* && docbook)*/ /* 05-08 */
+ {
+ xml_begin_table_item ();
+
+ if (!docbook && current_insertion_type () == ftable)
+ execute_string ("%cfindex %s\n", COMMAND_PREFIX, rest_of_line);
+
+ if (!docbook && current_insertion_type () == vtable)
+ execute_string ("%cvindex %s\n", COMMAND_PREFIX, rest_of_line);
+
+ if (item_func && *item_func)
+ execute_string ("%s{%s}", item_func, rest_of_line);
+ else
+ execute_string ("%s", rest_of_line);
+ xml_continue_table_item ();
+ }
+ else
+ {
+ /* We need this to determine if we have two @item's in a row
+ (see test just below). */
+ static int last_item_output_position = 0;
+
+ /* Get rid of extra characters. */
+ kill_self_indent (-1);
+
+ /* If we have one @item followed directly by another @item,
+ we need to insert a blank line. This is not true for
+ @itemx, though. */
+ if (!itemx_flag && last_item_output_position == output_position)
+ insert ('\n');
+
+ /* `close_paragraph' almost does what we want. The problem
+ is when paragraph_is_open, and last_char_was_newline, and
+ the last newline has been turned into a space, because
+ filling_enabled. I handle it here. */
+ if (last_char_was_newline && filling_enabled &&
+ paragraph_is_open)
+ insert ('\n');
+ close_paragraph ();
+
+#if defined (INDENT_PARAGRAPHS_IN_TABLE)
+ /* Indent on a new line, but back up one indentation level. */
+ {
+ int save = inhibit_paragraph_indentation;
+ inhibit_paragraph_indentation = 1;
+ /* At this point, inserting any non-whitespace character will
+ force the existing indentation to be output. */
+ add_char ('i');
+ inhibit_paragraph_indentation = save;
+ }
+#else /* !INDENT_PARAGRAPHS_IN_TABLE */
+ add_char ('i');
+#endif /* !INDENT_PARAGRAPHS_IN_TABLE */
+
+ output_paragraph_offset--;
+ kill_self_indent (default_indentation_increment + 1);
+
+ /* Add item's argument to the line. */
+ filling_enabled = 0;
+ if (item_func && *item_func)
+ execute_string ("%s{%s}", item_func, rest_of_line);
+ else
+ execute_string ("%s", rest_of_line);
+
+ if (current_insertion_type () == ftable)
+ execute_string ("%cfindex %s\n", COMMAND_PREFIX, rest_of_line);
+ else if (current_insertion_type () == vtable)
+ execute_string ("%cvindex %s\n", COMMAND_PREFIX, rest_of_line);
+
+ /* Start a new line, and let start_paragraph ()
+ do the indenting of it for you. */
+ close_single_paragraph ();
+ indented_fill = filling_enabled = 1;
+ last_item_output_position = output_position;
+ }
+ }
+ free (rest_of_line);
+ }
+ else
+ {
+ no_insertion:
+ line_error (_("%c%s found outside of an insertion block"),
+ COMMAND_PREFIX, command);
+ }
+}
+
+void
+cm_itemx (void)
+{
+ itemx_flag++;
+ cm_item ();
+ itemx_flag--;
+}
+
+int headitem_flag = 0;
+
+void
+cm_headitem (void)
+{
+ headitem_flag = 1;
+ cm_item ();
+}
diff --git a/makeinfo/insertion.h b/makeinfo/insertion.h
new file mode 100644
index 0000000..75e5468
--- /dev/null
+++ b/makeinfo/insertion.h
@@ -0,0 +1,82 @@
+/* insertion.h -- declarations for insertion.c.
+ $Id: insertion.h,v 1.15 2008/01/31 18:33:27 karl Exp $
+
+ Copyright (C) 1998, 1999, 2001, 2002, 2003, 2007, 2008
+ 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/>. */
+
+#ifndef INSERTION_H
+#define INSERTION_H
+
+/* Must match list in insertion.c. */
+enum insertion_type
+{
+ cartouche, copying, defcv, deffn, defivar, defmac, defmethod, defop,
+ defopt, defspec, deftp, deftypecv, deftypefn, deftypefun, deftypeivar,
+ deftypemethod, deftypeop, deftypevar, deftypevr, defun, defvar, defvr,
+ detailmenu, direntry, display, documentdescription, enumerate,
+ example, floatenv, flushleft, flushright, format, ftable, group,
+ ifclear, ifdocbook, ifhtml, ifinfo, ifnotdocbook, ifnothtml, ifnotinfo,
+ ifnotplaintext, ifnottex, ifnotxml, ifplaintext, ifset, iftex, ifxml,
+ itemize, lisp, menu, multitable, quotation, rawdocbook, rawhtml, rawtex,
+ rawxml, smalldisplay, smallexample, smallformat, smalllisp, verbatim,
+ table, tex, vtable, titlepage, bad_type
+};
+
+extern const char default_item_function[];
+
+typedef struct istack_elt
+{
+ struct istack_elt *next;
+ char *item_function;
+ char *filename;
+ int line_number;
+ int filling_enabled;
+ int indented_fill;
+ int insertion;
+ int inhibited;
+ int in_fixed_width_font;
+} INSERTION_ELT;
+
+extern int insertion_level;
+extern INSERTION_ELT *insertion_stack;
+extern int in_menu;
+extern int in_detailmenu;
+extern int had_menu_commentary;
+extern int in_paragraph;
+
+extern int headitem_flag;
+extern int after_headitem;
+
+extern void init_insertion_stack (void);
+extern void command_name_condition (void);
+extern void cm_ifdocbook (void), cm_ifnotdocbook(void), cm_docbook (int arg);
+extern void cm_ifhtml (void), cm_ifnothtml(void), cm_html (int arg);
+extern void cm_ifinfo (void), cm_ifnotinfo (void);
+extern void cm_ifplaintext (void), cm_ifnotplaintext(void);
+extern void cm_iftex (void), cm_ifnottex (void), cm_tex (void);
+extern void cm_ifxml (void), cm_ifnotxml (void), cm_xml (int arg);
+extern void handle_verbatim_environment (int find_end_verbatim);
+extern void begin_insertion (enum insertion_type type);
+extern void pop_insertion (void);
+extern void discard_insertions (int specials_ok);
+
+extern int is_in_insertion_of_type (int type);
+extern int command_needs_braces (char *cmd);
+
+extern enum insertion_type find_type_from_name (char *name);
+
+extern char *get_item_function (void);
+#endif /* !INSERTION_H */
diff --git a/makeinfo/lang.c b/makeinfo/lang.c
new file mode 100644
index 0000000..a56cb61
--- /dev/null
+++ b/makeinfo/lang.c
@@ -0,0 +1,1811 @@
+/* lang.c -- language-dependent support.
+ $Id: lang.c,v 1.34 2007/12/03 01:38:43 karl Exp $
+
+ Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ 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/>.
+
+ Originally written by Karl Heinz Marbaise <kama@hippo.fido.de>. */
+
+#include "system.h"
+#include "cmds.h"
+#include "files.h"
+#include "lang.h"
+#include "makeinfo.h"
+#include "xml.h"
+
+#include <assert.h>
+
+/* Current document encoding. */
+encoding_code_type document_encoding_code = no_encoding;
+
+/* Current language code; default is English. */
+language_code_type language_code = en;
+
+/* Language to use for translations that end up in the output. */
+char *document_language = "C";
+
+/* By default, unsupported encoding is an empty string. */
+char *unknown_encoding = NULL;
+
+static iso_map_type asis_map [] = {{NULL, 0, 0}}; /* ASCII, etc. */
+
+/* Translation table between HTML and ISO Codes. The last item is
+ hopefully the Unicode. It might be possible that those Unicodes are
+ not correct, cause I didn't check them. kama */
+static iso_map_type iso8859_1_map [] = {
+ { "nbsp", 0xA0, 0x00A0 },
+ { "iexcl", 0xA1, 0x00A1 },
+ { "cent", 0xA2, 0x00A2 },
+ { "pound", 0xA3, 0x00A3 },
+ { "curren", 0xA4, 0x00A4 },
+ { "yen", 0xA5, 0x00A5 },
+ { "brkbar", 0xA6, 0x00A6 },
+ { "sect", 0xA7, 0x00A7 },
+ { "uml", 0xA8, 0x00A8 },
+ { "copy", 0xA9, 0x00A9 },
+ { "ordf", 0xAA, 0x00AA },
+ { "laquo", 0xAB, 0x00AB },
+ { "not", 0xAC, 0x00AC },
+ { "shy", 0xAD, 0x00AD },
+ { "reg", 0xAE, 0x00AE },
+ { "hibar", 0xAF, 0x00AF },
+ { "deg", 0xB0, 0x00B0 },
+ { "plusmn", 0xB1, 0x00B1 },
+ { "sup2", 0xB2, 0x00B2 },
+ { "sup3", 0xB3, 0x00B3 },
+ { "acute", 0xB4, 0x00B4 },
+ { "micro", 0xB5, 0x00B5 },
+ { "para", 0xB6, 0x00B6 },
+ { "middot", 0xB7, 0x00B7 },
+ { "cedil", 0xB8, 0x00B8 },
+ { "sup1", 0xB9, 0x00B9 },
+ { "ordm", 0xBA, 0x00BA },
+ { "raquo", 0xBB, 0x00BB },
+ { "frac14", 0xBC, 0x00BC },
+ { "frac12", 0xBD, 0x00BD },
+ { "frac34", 0xBE, 0x00BE },
+ { "iquest", 0xBF, 0x00BF },
+ { "Agrave", 0xC0, 0x00C0, "A" },
+ { "Aacute", 0xC1, 0x00C1, "A" },
+ { "Acirc", 0xC2, 0x00C2, "A" },
+ { "Atilde", 0xC3, 0x00C3, "A" },
+ { "Auml", 0xC4, 0x00C4, "A" },
+ { "Aring", 0xC5, 0x00C5, "AA" },
+ { "AElig", 0xC6, 0x00C6, "AE" },
+ { "Ccedil", 0xC7, 0x00C7, "C" },
+ { "Ccedil", 0xC7, 0x00C7, "C" },
+ { "Egrave", 0xC8, 0x00C8, "E" },
+ { "Eacute", 0xC9, 0x00C9, "E" },
+ { "Ecirc", 0xCA, 0x00CA, "E" },
+ { "Euml", 0xCB, 0x00CB, "E" },
+ { "Igrave", 0xCC, 0x00CC, "I" },
+ { "Iacute", 0xCD, 0x00CD, "I" },
+ { "Icirc", 0xCE, 0x00CE, "I" },
+ { "Iuml", 0xCF, 0x00CF, "I" },
+ { "ETH", 0xD0, 0x00D0, "DH" },
+ { "Ntilde", 0xD1, 0x00D1, "N" },
+ { "Ograve", 0xD2, 0x00D2, "O" },
+ { "Oacute", 0xD3, 0x00D3, "O" },
+ { "Ocirc", 0xD4, 0x00D4, "O" },
+ { "Otilde", 0xD5, 0x00D5, "O" },
+ { "Ouml", 0xD6, 0x00D6, "O" },
+ { "times", 0xD7, 0x00D7 },
+ { "Oslash", 0xD8, 0x00D8, "OE" },
+ { "Ugrave", 0xD9, 0x00D9, "U" },
+ { "Uacute", 0xDA, 0x00DA, "U" },
+ { "Ucirc", 0xDB, 0x00DB, "U" },
+ { "Uuml", 0xDC, 0x00DC, "U" },
+ { "Yacute", 0xDD, 0x00DD, "Y" },
+ { "THORN", 0xDE, 0x00DE, "TH" },
+ { "szlig", 0xDF, 0x00DF, "s" },
+ { "agrave", 0xE0, 0x00E0, "a" },
+ { "aacute", 0xE1, 0x00E1, "a" },
+ { "acirc", 0xE2, 0x00E2, "a" },
+ { "atilde", 0xE3, 0x00E3, "a" },
+ { "auml", 0xE4, 0x00E4, "a" },
+ { "aring", 0xE5, 0x00E5, "aa" },
+ { "aelig", 0xE6, 0x00E6, "ae" },
+ { "ccedil", 0xE7, 0x00E7, "c" },
+ { "egrave", 0xE8, 0x00E8, "e" },
+ { "eacute", 0xE9, 0x00E9, "e" },
+ { "ecirc", 0xEA, 0x00EA, "e" },
+ { "euml", 0xEB, 0x00EB, "e" },
+ { "igrave", 0xEC, 0x00EC, "i" },
+ { "iacute", 0xED, 0x00ED, "i" },
+ { "icirc", 0xEE, 0x00EE, "i" },
+ { "iuml", 0xEF, 0x00EF, "i" },
+ { "eth", 0xF0, 0x00F0, "dh" },
+ { "ntilde", 0xF1, 0x00F1, "n" },
+ { "ograve", 0xF2, 0x00F2, "o"},
+ { "oacute", 0xF3, 0x00F3, "o" },
+ { "ocirc", 0xF4, 0x00F4, "o" },
+ { "otilde", 0xF5, 0x00F5, "o" },
+ { "ouml", 0xF6, 0x00F6, "o" },
+ { "divide", 0xF7, 0x00F7 },
+ { "oslash", 0xF8, 0x00F8, "oe" },
+ { "ugrave", 0xF9, 0x00F9, "u" },
+ { "uacute", 0xFA, 0x00FA, "u" },
+ { "ucirc", 0xFB, 0x00FB, "u" },
+ { "uuml", 0xFC, 0x00FC, "u" },
+ { "yacute", 0xFD, 0x00FD, "y" },
+ { "thorn", 0xFE, 0x00FE, "th" },
+ { "yuml", 0xFF, 0x00FF, "y" },
+ { NULL, 0, 0 }
+};
+
+
+/* ISO 8859-15, also known as Latin 9, differs from Latin 1 in only a
+ few positions. http://www.cs.tut.fi/~jkorpela/latin9.html has a good
+ explanation and listing, summarized here. The names here are
+ abbreviated to fit in a decent line length.
+
+ code position
+ dec oct hex latin1 latin1 name latin9 latin9 name
+
+ 164 0244 0xA4 U+00A4 currency symbol U+20AC euro sign
+ 166 0246 0xA6 U+00A6 broken bar U+0160 S with caron
+ 168 0250 0xA8 U+00A8 diaeresis U+0161 s with caron
+ 180 0264 0xB4 U+00B4 acute accent U+017D Z with caron
+ 184 0270 0xB8 U+00B8 cedilla U+017E z with caron
+ 188 0274 0xBC U+00BC fraction 1/4 U+0152 ligature OE
+ 189 0275 0xBD U+00BD fraction 1/2 U+0153 ligature oe
+ 190 0276 0xBE U+00BE fraction 3/4 U+0178 Y with diaeresis
+*/
+
+static iso_map_type iso8859_15_map [] = {
+ { "nbsp", 0xA0, 0x00A0 },
+ { "iexcl", 0xA1, 0x00A1 },
+ { "cent", 0xA2, 0x00A2 },
+ { "pound", 0xA3, 0x00A3 },
+ { "euro", 0xA4, 0x20AC },
+ { "yen", 0xA5, 0x00A5 },
+ { "Scaron", 0xA6, 0x0160, "S" },
+ { "sect", 0xA7, 0x00A7 },
+ { "scaron", 0xA8, 0x0161, "s" },
+ { "copy", 0xA9, 0x00A9 },
+ { "ordf", 0xAA, 0x00AA },
+ { "laquo", 0xAB, 0x00AB },
+ { "not", 0xAC, 0x00AC },
+ { "shy", 0xAD, 0x00AD },
+ { "reg", 0xAE, 0x00AE },
+ { "hibar", 0xAF, 0x00AF },
+ { "deg", 0xB0, 0x00B0 },
+ { "plusmn", 0xB1, 0x00B1 },
+ { "sup2", 0xB2, 0x00B2 },
+ { "sup3", 0xB3, 0x00B3 },
+ { "Zcaron", 0xB4, 0x017D, "Z" },
+ { "micro", 0xB5, 0x00B5 },
+ { "para", 0xB6, 0x00B6 },
+ { "middot", 0xB7, 0x00B7 },
+ { "zcaron", 0xB8, 0x017E, "z" },
+ { "sup1", 0xB9, 0x00B9 },
+ { "ordm", 0xBA, 0x00BA },
+ { "raquo", 0xBB, 0x00BB },
+ { "OElig", 0xBC, 0x0152, "OE" },
+ { "oelig", 0xBD, 0x0153, "oe" },
+ { "Yuml", 0xBE, 0x0178, "y" },
+ { "iquest", 0xBF, 0x00BF },
+ { "Agrave", 0xC0, 0x00C0, "A" },
+ { "Aacute", 0xC1, 0x00C1, "A" },
+ { "Acirc", 0xC2, 0x00C2, "A" },
+ { "Atilde", 0xC3, 0x00C3, "A" },
+ { "Auml", 0xC4, 0x00C4, "A" },
+ { "Aring", 0xC5, 0x00C5, "AA" },
+ { "AElig", 0xC6, 0x00C6, "AE" },
+ { "Ccedil", 0xC7, 0x00C7, "C" },
+ { "Egrave", 0xC8, 0x00C8, "E" },
+ { "Eacute", 0xC9, 0x00C9, "E" },
+ { "Ecirc", 0xCA, 0x00CA, "E" },
+ { "Euml", 0xCB, 0x00CB, "E" },
+ { "Igrave", 0xCC, 0x00CC, "I" },
+ { "Iacute", 0xCD, 0x00CD, "I" },
+ { "Icirc", 0xCE, 0x00CE, "I" },
+ { "Iuml", 0xCF, 0x00CF, "I" },
+ { "ETH", 0xD0, 0x00D0, "DH" },
+ { "Ntilde", 0xD1, 0x00D1, "N" },
+ { "Ograve", 0xD2, 0x00D2, "O" },
+ { "Oacute", 0xD3, 0x00D3, "O" },
+ { "Ocirc", 0xD4, 0x00D4, "O" },
+ { "Otilde", 0xD5, 0x00D5, "O" },
+ { "Ouml", 0xD6, 0x00D6, "O" },
+ { "times", 0xD7, 0x00D7 },
+ { "Oslash", 0xD8, 0x00D8, "OE" },
+ { "Ugrave", 0xD9, 0x00D9, "U" },
+ { "Uacute", 0xDA, 0x00DA, "U" },
+ { "Ucirc", 0xDB, 0x00DB, "U" },
+ { "Uuml", 0xDC, 0x00DC, "U" },
+ { "Yacute", 0xDD, 0x00DD, "Y" },
+ { "THORN", 0xDE, 0x00DE, "TH" },
+ { "szlig", 0xDF, 0x00DF, "s" },
+ { "agrave", 0xE0, 0x00E0, "a" },
+ { "aacute", 0xE1, 0x00E1, "a" },
+ { "acirc", 0xE2, 0x00E2, "a" },
+ { "atilde", 0xE3, 0x00E3, "a" },
+ { "auml", 0xE4, 0x00E4, "a" },
+ { "aring", 0xE5, 0x00E5, "aa" },
+ { "aelig", 0xE6, 0x00E6, "ae" },
+ { "ccedil", 0xE7, 0x00E7, "c" },
+ { "egrave", 0xE8, 0x00E8, "e" },
+ { "eacute", 0xE9, 0x00E9, "e" },
+ { "ecirc", 0xEA, 0x00EA, "e" },
+ { "euml", 0xEB, 0x00EB, "e" },
+ { "igrave", 0xEC, 0x00EC, "i" },
+ { "iacute", 0xED, 0x00ED, "i" },
+ { "icirc", 0xEE, 0x00EE, "i" },
+ { "iuml", 0xEF, 0x00EF, "i" },
+ { "eth", 0xF0, 0x00F0, "d" },
+ { "ntilde", 0xF1, 0x00F1, "n" },
+ { "ograve", 0xF2, 0x00F2, "o" },
+ { "oacute", 0xF3, 0x00F3, "o" },
+ { "ocirc", 0xF4, 0x00F4, "o" },
+ { "otilde", 0xF5, 0x00F5, "o" },
+ { "ouml", 0xF6, 0x00F6, "o" },
+ { "divide", 0xF7, 0x00F7 },
+ { "oslash", 0xF8, 0x00F8, "oe" },
+ { "ugrave", 0xF9, 0x00F9, "u" },
+ { "uacute", 0xFA, 0x00FA, "u" },
+ { "ucirc", 0xFB, 0x00FB, "u" },
+ { "uuml", 0xFC, 0x00FC, "u" },
+ { "yacute", 0xFD, 0x00FD, "y" },
+ { "thorn", 0xFE, 0x00FE, "th" },
+ { "yuml", 0xFF, 0x00FF, "y" },
+ { NULL, 0, 0 }
+};
+
+
+
+/* Date: Mon, 31 Mar 2003 00:19:28 +0200
+ From: Wojciech Polak <polak@gnu.org>
+...
+ * Primary Polish site for ogonki is http://www.agh.edu.pl/ogonki/,
+ but it's only in Polish language (it has some interesting links).
+
+ * A general site about ISO 8859-2 at http://nl.ijs.si/gnusl/cee/iso8859-2.html
+
+ * ISO 8859-2 Character Set at http://nl.ijs.si/gnusl/cee/charset.html
+ This site provides almost all information about iso-8859-2,
+ including the character table!!! (must see!)
+
+ * ISO 8859-2 and even HTML entities !!! (must see!)
+ 88592.txt in the GNU enscript distribution
+
+ * (minor) http://www.agh.edu.pl/ogonki/plchars.html
+ One more table, this time it includes even information about Polish
+ characters in Unicode.
+*/
+
+static iso_map_type iso8859_2_map [] = {
+ { "nbsp", 0xA0, 0x00A0 }, /* NO-BREAK SPACE */
+ { "", 0xA1, 0x0104, "A" }, /* LATIN CAPITAL LETTER A WITH OGONEK */
+ { "", 0xA2, 0x02D8 }, /* BREVE */
+ { "", 0xA3, 0x0141, "L" }, /* LATIN CAPITAL LETTER L WITH STROKE */
+ { "curren", 0xA4, 0x00A4 }, /* CURRENCY SIGN */
+ { "", 0xA5, 0x013D, "L" }, /* LATIN CAPITAL LETTER L WITH CARON */
+ { "", 0xA6, 0x015A, "S" }, /* LATIN CAPITAL LETTER S WITH ACUTE */
+ { "sect", 0xA7, 0x00A7 }, /* SECTION SIGN */
+ { "uml", 0xA8, 0x00A8 }, /* DIAERESIS */
+ { "#xa9", 0xA9, 0x0160, "S" }, /* LATIN CAPITAL LETTER S WITH CARON */
+ { "", 0xAA, 0x015E, "S" }, /* LATIN CAPITAL LETTER S WITH CEDILLA */
+ { "", 0xAB, 0x0164, "T" }, /* LATIN CAPITAL LETTER T WITH CARON */
+ { "", 0xAC, 0x0179, "Z" }, /* LATIN CAPITAL LETTER Z WITH ACUTE */
+ { "shy", 0xAD, 0x00AD }, /* SOFT HYPHEN */
+ { "", 0xAE, 0x017D, "Z" }, /* LATIN CAPITAL LETTER Z WITH CARON */
+ { "", 0xAF, 0x017B, "Z" }, /* LATIN CAPITAL LETTER Z WITH DOT ABOVE */
+ { "deg", 0xB0, 0x00B0 }, /* DEGREE SIGN */
+ { "", 0xB1, 0x0105, "a" }, /* LATIN SMALL LETTER A WITH OGONEK */
+ { "", 0xB2, 0x02DB }, /* OGONEK */
+ { "", 0xB3, 0x0142, "l" }, /* LATIN SMALL LETTER L WITH STROKE */
+ { "acute", 0xB4, 0x00B4 }, /* ACUTE ACCENT */
+ { "", 0xB5, 0x013E, "l" }, /* LATIN SMALL LETTER L WITH CARON */
+ { "", 0xB6, 0x015B, "s" }, /* LATIN SMALL LETTER S WITH ACUTE */
+ { "", 0xB7, 0x02C7 }, /* CARON (Mandarin Chinese third tone) */
+ { "cedil", 0xB8, 0x00B8 }, /* CEDILLA */
+ { "", 0xB9, 0x0161, "s" }, /* LATIN SMALL LETTER S WITH CARON */
+ { "", 0xBA, 0x015F, "s" }, /* LATIN SMALL LETTER S WITH CEDILLA */
+ { "", 0xBB, 0x0165, "t" }, /* LATIN SMALL LETTER T WITH CARON */
+ { "", 0xBC, 0x017A, "z" }, /* LATIN SMALL LETTER Z WITH ACUTE */
+ { "", 0xBD, 0x02DD }, /* DOUBLE ACUTE ACCENT */
+ { "", 0xBE, 0x017E, "z" }, /* LATIN SMALL LETTER Z WITH CARON */
+ { "", 0xBF, 0x017C, "z" }, /* LATIN SMALL LETTER Z WITH DOT ABOVE */
+ { "", 0xC0, 0x0154, "R" }, /* LATIN CAPITAL LETTER R WITH ACUTE */
+ { "Aacute", 0xC1, 0x00C1, "A" }, /* LATIN CAPITAL LETTER A WITH ACUTE */
+ { "Acirc", 0xC2, 0x00C2, "A" }, /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX */
+ { "", 0xC3, 0x0102, "A" }, /* LATIN CAPITAL LETTER A WITH BREVE */
+ { "Auml", 0xC4, 0x00C4, "A" }, /* LATIN CAPITAL LETTER A WITH DIAERESIS */
+ { "", 0xC5, 0x0139, "L" }, /* LATIN CAPITAL LETTER L WITH ACUTE */
+ { "", 0xC6, 0x0106, "C" }, /* LATIN CAPITAL LETTER C WITH ACUTE */
+ { "Ccedil", 0xC7, 0x00C7, "C" }, /* LATIN CAPITAL LETTER C WITH CEDILLA */
+ { "", 0xC8, 0x010C, "C" }, /* LATIN CAPITAL LETTER C WITH CARON */
+ { "Eacute", 0xC9, 0x00C9, "E" }, /* LATIN CAPITAL LETTER E WITH ACUTE */
+ { "", 0xCA, 0x0118, "E" }, /* LATIN CAPITAL LETTER E WITH OGONEK */
+ { "Euml", 0xCB, 0x00CB, "E" }, /* LATIN CAPITAL LETTER E WITH DIAERESIS */
+ { "", 0xCC, 0x011A, "E" }, /* LATIN CAPITAL LETTER E WITH CARON */
+ { "Iacute", 0xCD, 0x00CD, "I" }, /* LATIN CAPITAL LETTER I WITH ACUTE */
+ { "Icirc", 0xCE, 0x00CE, "I" }, /* LATIN CAPITAL LETTER I WITH CIRCUMFLEX */
+ { "", 0xCF, 0x010E, "D" }, /* LATIN CAPITAL LETTER D WITH CARON */
+ { "ETH", 0xD0, 0x0110, "D" }, /* LATIN CAPITAL LETTER D WITH STROKE */
+ { "", 0xD1, 0x0143, "N" }, /* LATIN CAPITAL LETTER N WITH ACUTE */
+ { "", 0xD2, 0x0147, "N" }, /* LATIN CAPITAL LETTER N WITH CARON */
+ { "Oacute", 0xD3, 0x00D3, "O" }, /* LATIN CAPITAL LETTER O WITH ACUTE */
+ { "Ocirc", 0xD4, 0x00D4, "O" }, /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX */
+ { "", 0xD5, 0x0150, "O" }, /* LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */
+ { "Ouml", 0xD6, 0x00D6, "O" }, /* LATIN CAPITAL LETTER O WITH DIAERESIS */
+ { "times", 0xD7, 0x00D7 }, /* MULTIPLICATION SIGN */
+ { "", 0xD8, 0x0158, "R" }, /* LATIN CAPITAL LETTER R WITH CARON */
+ { "", 0xD9, 0x016E, "U" }, /* LATIN CAPITAL LETTER U WITH RING ABOVE */
+ { "Uacute", 0xDA, 0x00DA, "U" }, /* LATIN CAPITAL LETTER U WITH ACUTE */
+ { "", 0xDB, 0x0170, "U" }, /* LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */
+ { "Uuml", 0xDC, 0x00DC, "U" }, /* LATIN CAPITAL LETTER U WITH DIAERESIS */
+ { "Yacute", 0xDD, 0x00DD, "Y" }, /* LATIN CAPITAL LETTER Y WITH ACUTE */
+ { "", 0xDE, 0x0162, "T" }, /* LATIN CAPITAL LETTER T WITH CEDILLA */
+ { "szlig", 0xDF, 0x00DF, "ss" }, /* LATIN SMALL LETTER SHARP S (German) */
+ { "", 0xE0, 0x0155, "s" }, /* LATIN SMALL LETTER R WITH ACUTE */
+ { "aacute", 0xE1, 0x00E1, "a" }, /* LATIN SMALL LETTER A WITH ACUTE */
+ { "acirc", 0xE2, 0x00E2, "a" }, /* LATIN SMALL LETTER A WITH CIRCUMFLEX */
+ { "", 0xE3, 0x0103, "a" }, /* LATIN SMALL LETTER A WITH BREVE */
+ { "auml", 0xE4, 0x00E4, "a" }, /* LATIN SMALL LETTER A WITH DIAERESIS */
+ { "", 0xE5, 0x013A, "l" }, /* LATIN SMALL LETTER L WITH ACUTE */
+ { "", 0xE6, 0x0107, "c" }, /* LATIN SMALL LETTER C WITH ACUTE */
+ { "ccedil", 0xE7, 0x00E7, "c" }, /* LATIN SMALL LETTER C WITH CEDILLA */
+ { "", 0xE8, 0x010D, "c" }, /* LATIN SMALL LETTER C WITH CARON */
+ { "eacute", 0xE9, 0x00E9, "e" }, /* LATIN SMALL LETTER E WITH ACUTE */
+ { "", 0xEA, 0x0119, "e" }, /* LATIN SMALL LETTER E WITH OGONEK */
+ { "euml", 0xEB, 0x00EB, "e" }, /* LATIN SMALL LETTER E WITH DIAERESIS */
+ { "", 0xEC, 0x011B, "e" }, /* LATIN SMALL LETTER E WITH CARON */
+ { "iacute", 0xED, 0x00ED, "i" }, /* LATIN SMALL LETTER I WITH ACUTE */
+ { "icirc", 0xEE, 0x00EE, "i" }, /* LATIN SMALL LETTER I WITH CIRCUMFLEX */
+ { "", 0xEF, 0x010F, "d" }, /* LATIN SMALL LETTER D WITH CARON */
+ { "", 0xF0, 0x0111, "d" }, /* LATIN SMALL LETTER D WITH STROKE */
+ { "", 0xF1, 0x0144, "n" }, /* LATIN SMALL LETTER N WITH ACUTE */
+ { "", 0xF2, 0x0148, "n" }, /* LATIN SMALL LETTER N WITH CARON */
+ { "oacute", 0xF3, 0x00F3, "o" }, /* LATIN SMALL LETTER O WITH ACUTE */
+ { "ocirc", 0xF4, 0x00F4, "o" }, /* LATIN SMALL LETTER O WITH CIRCUMFLEX */
+ { "", 0xF5, 0x0151, "o" }, /* LATIN SMALL LETTER O WITH DOUBLE ACUTE */
+ { "ouml", 0xF6, 0x00F6, "o" }, /* LATIN SMALL LETTER O WITH DIAERESIS */
+ { "divide", 0xF7, 0x00F7 }, /* DIVISION SIGN */
+ { "", 0xF8, 0x0159, "r" }, /* LATIN SMALL LETTER R WITH CARON */
+ { "", 0xF9, 0x016F, "u" }, /* LATIN SMALL LETTER U WITH RING ABOVE */
+ { "uacute", 0xFA, 0x00FA, "u" }, /* LATIN SMALL LETTER U WITH ACUTE */
+ { "", 0xFB, 0x0171, "u" }, /* LATIN SMALL LETTER U WITH DOUBLE ACUTE */
+ { "uuml", 0xFC, 0x00FC, "u" }, /* LATIN SMALL LETTER U WITH DIAERESIS */
+ { "yacute", 0xFD, 0x00FD, "y" }, /* LATIN SMALL LETTER Y WITH ACUTE */
+ { "", 0xFE, 0x0163, "t" }, /* LATIN SMALL LETTER T WITH CEDILLA */
+ { "", 0xFF, 0x02D9 }, /* DOT ABOVE (Mandarin Chinese light tone) */
+ { NULL, 0, 0 }
+};
+
+/* Common map for koi8-u, koi8-r */
+static iso_map_type koi8_map [] = {
+ { "", 0xa3, 0x0415, "io"}, /* CYRILLIC SMALL LETTER IO */
+ { "", 0xa4, 0x0454, "ie"}, /* CYRILLIC SMALL LETTER UKRAINIAN IE */
+ { "", 0xa6, 0x0456, "i"}, /* CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */
+ { "", 0xa7, 0x0457, "yi"}, /* CYRILLIC SMALL LETTER YI */
+
+ { "", 0xb3, 0x04d7, "IO"}, /* CYRILLIC CAPITAL LETTER IO */
+ { "", 0xb4, 0x0404, "IE"}, /* CYRILLIC CAPITAL LETTER UKRAINIAN IE */
+ { "", 0xb6, 0x0406, "I"}, /* CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */
+ { "", 0xb7, 0x0407, "YI"}, /* CYRILLIC CAPITAL LETTER YI */
+/* { "", 0xbf, 0x}, / * CYRILLIC COPYRIGHT SIGN */
+ { "", 0xc0, 0x042e, "yu"}, /* CYRILLIC SMALL LETTER YU */
+ { "", 0xc1, 0x0430, "a"}, /* CYRILLIC SMALL LETTER A */
+ { "", 0xc2, 0x0431, "b"}, /* CYRILLIC SMALL LETTER BE */
+ { "", 0xc3, 0x0446, "c"}, /* CYRILLIC SMALL LETTER TSE */
+ { "", 0xc4, 0x0434, "d"}, /* CYRILLIC SMALL LETTER DE */
+ { "", 0xc5, 0x0435, "e"}, /* CYRILLIC SMALL LETTER IE */
+ { "", 0xc6, 0x0444, "f"}, /* CYRILLIC SMALL LETTER EF */
+ { "", 0xc7, 0x0433, "g"}, /* CYRILLIC SMALL LETTER GHE */
+ { "", 0xc8, 0x0445, "h"}, /* CYRILLIC SMALL LETTER HA */
+ { "", 0xc9, 0x0438, "i"}, /* CYRILLIC SMALL LETTER I */
+ { "", 0xca, 0x0439, "i"}, /* CYRILLIC SMALL LETTER SHORT I */
+ { "", 0xcb, 0x043a, "k"}, /* CYRILLIC SMALL LETTER KA */
+ { "", 0xcc, 0x043b, "l"}, /* CYRILLIC SMALL LETTER EL */
+ { "", 0xcd, 0x043c, "m"}, /* CYRILLIC SMALL LETTER EM */
+ { "", 0xce, 0x043d, "n"}, /* CYRILLIC SMALL LETTER EN */
+ { "", 0xcf, 0x043e, "o"}, /* CYRILLIC SMALL LETTER O */
+ { "", 0xd0, 0x043f, "p"}, /* CYRILLIC SMALL LETTER PE */
+ { "", 0xd1, 0x044f, "ya"}, /* CYRILLIC SMALL LETTER YA */
+ { "", 0xd2, 0x0440, "r"}, /* CYRILLIC SMALL LETTER ER */
+ { "", 0xd3, 0x0441, "s"}, /* CYRILLIC SMALL LETTER ES */
+ { "", 0xd4, 0x0442, "t"}, /* CYRILLIC SMALL LETTER TE */
+ { "", 0xd5, 0x0443, "u"}, /* CYRILLIC SMALL LETTER U */
+ { "", 0xd6, 0x0436, "zh"}, /* CYRILLIC SMALL LETTER ZHE */
+ { "", 0xd7, 0x0432, "v"}, /* CYRILLIC SMALL LETTER VE */
+ { "", 0xd8, 0x044c, "x"}, /* CYRILLIC SMALL LETTER SOFT SIGN */
+ { "", 0xd9, 0x044b, "y"}, /* CYRILLIC SMALL LETTER YERU */
+ { "", 0xda, 0x0437, "z"}, /* CYRILLIC SMALL LETTER ZE */
+ { "", 0xdb, 0x0448, "sh"}, /* CYRILLIC SMALL LETTER SHA */
+ { "", 0xdc, 0x044d, "e"}, /* CYRILLIC SMALL LETTER E */
+ { "", 0xdd, 0x0449, "shch"}, /* CYRILLIC SMALL LETTER SHCHA */
+ { "", 0xde, 0x0447, "ch"}, /* CYRILLIC SMALL LETTER CHA */
+ { "", 0xdf, 0x044a, "w"}, /* CYRILLIC SMALL LETTER HARD SIGN */
+ { "", 0xe0, 0x042d, "YU"}, /* CYRILLIC CAPITAL LETTER YU */
+ { "", 0xe1, 0x0410, "A"}, /* CYRILLIC CAPITAL LETTER A */
+ { "", 0xe2, 0x0411, "B"}, /* CYRILLIC CAPITAL LETTER BE */
+ { "", 0xe3, 0x0426, "C"}, /* CYRILLIC CAPITAL LETTER TSE */
+ { "", 0xe4, 0x0414, "D"}, /* CYRILLIC CAPITAL LETTER DE */
+ { "", 0xe5, 0x0415, "E"}, /* CYRILLIC CAPITAL LETTER IE */
+ { "", 0xe6, 0x0424, "F"}, /* CYRILLIC CAPITAL LETTER EF */
+ { "", 0xe7, 0x0413, "G"}, /* CYRILLIC CAPITAL LETTER GHE */
+ { "", 0xe8, 0x0425, "H"}, /* CYRILLIC CAPITAL LETTER HA */
+ { "", 0xe9, 0x0418, "I"}, /* CYRILLIC CAPITAL LETTER I */
+ { "", 0xea, 0x0419, "I"}, /* CYRILLIC CAPITAL LETTER SHORT I */
+ { "", 0xeb, 0x041a, "K"}, /* CYRILLIC CAPITAL LETTER KA */
+ { "", 0xec, 0x041b, "L"}, /* CYRILLIC CAPITAL LETTER EL */
+ { "", 0xed, 0x041c, "M"}, /* CYRILLIC CAPITAL LETTER EM */
+ { "", 0xee, 0x041d, "N"}, /* CYRILLIC CAPITAL LETTER EN */
+ { "", 0xef, 0x041e, "O"}, /* CYRILLIC CAPITAL LETTER O */
+ { "", 0xf0, 0x041f, "P"}, /* CYRILLIC CAPITAL LETTER PE */
+ { "", 0xf1, 0x042f, "YA"}, /* CYRILLIC CAPITAL LETTER YA */
+ { "", 0xf2, 0x0420, "R"}, /* CYRILLIC CAPITAL LETTER ER */
+ { "", 0xf3, 0x0421, "S"}, /* CYRILLIC CAPITAL LETTER ES */
+ { "", 0xf4, 0x0422, "T"}, /* CYRILLIC CAPITAL LETTER TE */
+ { "", 0xf5, 0x0423, "U"}, /* CYRILLIC CAPITAL LETTER U */
+ { "", 0xf6, 0x0416, "ZH"}, /* CYRILLIC CAPITAL LETTER ZHE */
+ { "", 0xf7, 0x0412, "V"}, /* CYRILLIC CAPITAL LETTER VE */
+ { "", 0xf8, 0x042c, "X"}, /* CYRILLIC CAPITAL LETTER SOFT SIGN */
+ { "", 0xf9, 0x042b, "Y"}, /* CYRILLIC CAPITAL LETTER YERU */
+ { "", 0xfa, 0x0417, "Z"}, /* CYRILLIC CAPITAL LETTER ZE */
+ { "", 0xfb, 0x0428, "SH"}, /* CYRILLIC CAPITAL LETTER SHA */
+ { "", 0xfc, 0x042d, "E"}, /* CYRILLIC CAPITAL LETTER E */
+ { "", 0xfd, 0x0429, "SHCH"}, /* CYRILLIC CAPITAL LETTER SHCHA */
+ { "", 0xfe, 0x0427, "CH"}, /* CYRILLIC CAPITAL LETTER CHE */
+ { "", 0xff, 0x042a, "W"}, /* CYRILLIC CAPITAL LETTER HARD SIGN */
+ { NULL, 0, 0 }
+};
+
+encoding_type encoding_table[] = {
+ { no_encoding, "(no encoding)", NULL },
+ { US_ASCII, "US-ASCII", asis_map },
+ { ISO_8859_1, "iso-8859-1", (iso_map_type *) iso8859_1_map },
+ { ISO_8859_2, "iso-8859-2", (iso_map_type *) iso8859_2_map },
+ { ISO_8859_3, "iso-8859-3", NULL },
+ { ISO_8859_4, "iso-8859-4", NULL },
+ { ISO_8859_5, "iso-8859-5", NULL },
+ { ISO_8859_6, "iso-8859-6", NULL },
+ { ISO_8859_7, "iso-8859-7", NULL },
+ { ISO_8859_8, "iso-8859-8", NULL },
+ { ISO_8859_9, "iso-8859-9", NULL },
+ { ISO_8859_10, "iso-8859-10", NULL },
+ { ISO_8859_11, "iso-8859-11", NULL },
+ { ISO_8859_12, "iso-8859-12", NULL },
+ { ISO_8859_13, "iso-8859-13", NULL },
+ { ISO_8859_14, "iso-8859-14", NULL },
+ { ISO_8859_15, "iso-8859-15", (iso_map_type *) iso8859_15_map },
+ { KOI8_R, "koi8-r", (iso_map_type *) koi8_map },
+ { KOI8_U, "koi8-u", (iso_map_type *) koi8_map },
+ { UTF_8, "utf-8", asis_map }, /* specific code for this below */
+ { last_encoding_code, NULL, NULL }
+};
+
+
+/* List of HTML entities. */
+static struct { const char *html; unsigned int unicode; } unicode_map[] = {
+/* Extracted from http://www.w3.org/TR/html401/sgml/entities.html through
+ sed -n -e 's|<!ENTITY \([^ ][^ ]*\) *CDATA "[&]#\([0-9][0-9]*\);".*| { "\1", \2 },|p'
+ | LC_ALL=C sort -k2 */
+ { "AElig", 198 },
+ { "Aacute", 193 },
+ { "Acirc", 194 },
+ { "Agrave", 192 },
+ { "Alpha", 913 },
+ { "Aring", 197 },
+ { "Atilde", 195 },
+ { "Auml", 196 },
+ { "Beta", 914 },
+ { "Ccedil", 199 },
+ { "Chi", 935 },
+ { "Dagger", 8225 },
+ { "Delta", 916 },
+ { "ETH", 208 },
+ { "Eacute", 201 },
+ { "Ecirc", 202 },
+ { "Egrave", 200 },
+ { "Epsilon", 917 },
+ { "Eta", 919 },
+ { "Euml", 203 },
+ { "Gamma", 915 },
+ { "Iacute", 205 },
+ { "Icirc", 206 },
+ { "Igrave", 204 },
+ { "Iota", 921 },
+ { "Iuml", 207 },
+ { "Kappa", 922 },
+ { "Lambda", 923 },
+ { "Mu", 924 },
+ { "Ntilde", 209 },
+ { "Nu", 925 },
+ { "OElig", 338 },
+ { "Oacute", 211 },
+ { "Ocirc", 212 },
+ { "Ograve", 210 },
+ { "Omega", 937 },
+ { "Omicron", 927 },
+ { "Oslash", 216 },
+ { "Otilde", 213 },
+ { "Ouml", 214 },
+ { "Phi", 934 },
+ { "Pi", 928 },
+ { "Prime", 8243 },
+ { "Psi", 936 },
+ { "Rho", 929 },
+ { "Scaron", 352 },
+ { "Sigma", 931 },
+ { "THORN", 222 },
+ { "Tau", 932 },
+ { "Theta", 920 },
+ { "Uacute", 218 },
+ { "Ucirc", 219 },
+ { "Ugrave", 217 },
+ { "Upsilon", 933 },
+ { "Uuml", 220 },
+ { "Xi", 926 },
+ { "Yacute", 221 },
+ { "Yuml", 376 },
+ { "Zeta", 918 },
+ { "aacute", 225 },
+ { "acirc", 226 },
+ { "acute", 180 },
+ { "aelig", 230 },
+ { "agrave", 224 },
+ { "alefsym", 8501 },
+ { "alpha", 945 },
+ { "amp", 38 },
+ { "and", 8743 },
+ { "ang", 8736 },
+ { "aring", 229 },
+ { "asymp", 8776 },
+ { "atilde", 227 },
+ { "auml", 228 },
+ { "bdquo", 8222 },
+ { "beta", 946 },
+ { "brvbar", 166 },
+ { "bull", 8226 },
+ { "cap", 8745 },
+ { "ccedil", 231 },
+ { "cedil", 184 },
+ { "cent", 162 },
+ { "chi", 967 },
+ { "circ", 710 },
+ { "clubs", 9827 },
+ { "cong", 8773 },
+ { "copy", 169 },
+ { "crarr", 8629 },
+ { "cup", 8746 },
+ { "curren", 164 },
+ { "dArr", 8659 },
+ { "dagger", 8224 },
+ { "darr", 8595 },
+ { "deg", 176 },
+ { "delta", 948 },
+ { "diams", 9830 },
+ { "divide", 247 },
+ { "eacute", 233 },
+ { "ecirc", 234 },
+ { "egrave", 232 },
+ { "empty", 8709 },
+ { "emsp", 8195 },
+ { "ensp", 8194 },
+ { "epsilon", 949 },
+ { "equiv", 8801 },
+ { "eta", 951 },
+ { "eth", 240 },
+ { "euml", 235 },
+ { "euro", 8364 },
+ { "exist", 8707 },
+ { "fnof", 402 },
+ { "forall", 8704 },
+ { "frac12", 189 },
+ { "frac14", 188 },
+ { "frac34", 190 },
+ { "frasl", 8260 },
+ { "gamma", 947 },
+ { "ge", 8805 },
+ { "gt", 62 },
+ { "hArr", 8660 },
+ { "harr", 8596 },
+ { "hearts", 9829 },
+ { "hellip", 8230 },
+ { "iacute", 237 },
+ { "icirc", 238 },
+ { "iexcl", 161 },
+ { "igrave", 236 },
+ { "image", 8465 },
+ { "infin", 8734 },
+ { "int", 8747 },
+ { "iota", 953 },
+ { "iquest", 191 },
+ { "isin", 8712 },
+ { "iuml", 239 },
+ { "kappa", 954 },
+ { "lArr", 8656 },
+ { "lambda", 955 },
+ { "lang", 9001 },
+ { "laquo", 171 },
+ { "larr", 8592 },
+ { "lceil", 8968 },
+ { "ldquo", 8220 },
+ { "le", 8804 },
+ { "lfloor", 8970 },
+ { "lowast", 8727 },
+ { "loz", 9674 },
+ { "lrm", 8206 },
+ { "lsaquo", 8249 },
+ { "lsquo", 8216 },
+ { "lt", 60 },
+ { "macr", 175 },
+ { "mdash", 8212 },
+ { "micro", 181 },
+ { "middot", 183 },
+ { "minus", 8722 },
+ { "mu", 956 },
+ { "nabla", 8711 },
+ { "nbsp", 160 },
+ { "ndash", 8211 },
+ { "ne", 8800 },
+ { "ni", 8715 },
+ { "not", 172 },
+ { "notin", 8713 },
+ { "nsub", 8836 },
+ { "ntilde", 241 },
+ { "nu", 957 },
+ { "oacute", 243 },
+ { "ocirc", 244 },
+ { "oelig", 339 },
+ { "ograve", 242 },
+ { "oline", 8254 },
+ { "omega", 969 },
+ { "omicron", 959 },
+ { "oplus", 8853 },
+ { "or", 8744 },
+ { "ordf", 170 },
+ { "ordm", 186 },
+ { "oslash", 248 },
+ { "otilde", 245 },
+ { "otimes", 8855 },
+ { "ouml", 246 },
+ { "para", 182 },
+ { "part", 8706 },
+ { "permil", 8240 },
+ { "perp", 8869 },
+ { "phi", 966 },
+ { "pi", 960 },
+ { "piv", 982 },
+ { "plusmn", 177 },
+ { "pound", 163 },
+ { "prime", 8242 },
+ { "prod", 8719 },
+ { "prop", 8733 },
+ { "psi", 968 },
+ { "quot", 34 },
+ { "rArr", 8658 },
+ { "radic", 8730 },
+ { "rang", 9002 },
+ { "raquo", 187 },
+ { "rarr", 8594 },
+ { "rceil", 8969 },
+ { "rdquo", 8221 },
+ { "real", 8476 },
+ { "reg", 174 },
+ { "rfloor", 8971 },
+ { "rho", 961 },
+ { "rlm", 8207 },
+ { "rsaquo", 8250 },
+ { "rsquo", 8217 },
+ { "sbquo", 8218 },
+ { "scaron", 353 },
+ { "sdot", 8901 },
+ { "sect", 167 },
+ { "shy", 173 },
+ { "sigma", 963 },
+ { "sigmaf", 962 },
+ { "sim", 8764 },
+ { "spades", 9824 },
+ { "sub", 8834 },
+ { "sube", 8838 },
+ { "sum", 8721 },
+ { "sup", 8835 },
+ { "sup1", 185 },
+ { "sup2", 178 },
+ { "sup3", 179 },
+ { "supe", 8839 },
+ { "szlig", 223 },
+ { "tau", 964 },
+ { "there4", 8756 },
+ { "theta", 952 },
+ { "thetasym", 977 },
+ { "thinsp", 8201 },
+ { "thorn", 254 },
+ { "tilde", 732 },
+ { "times", 215 },
+ { "trade", 8482 },
+ { "uArr", 8657 },
+ { "uacute", 250 },
+ { "uarr", 8593 },
+ { "ucirc", 251 },
+ { "ugrave", 249 },
+ { "uml", 168 },
+ { "upsih", 978 },
+ { "upsilon", 965 },
+ { "uuml", 252 },
+ { "weierp", 8472 },
+ { "xi", 958 },
+ { "yacute", 253 },
+ { "yen", 165 },
+ { "yuml", 255 },
+ { "zeta", 950 },
+ { "zwj", 8205 },
+ { "zwnj", 8204 }
+};
+
+
+
+/* To update this list of language codes, download the current data from
+ http://www.loc.gov/standards/iso639-2; specifically,
+ http://www.loc.gov/standards/iso639-2/ISO-639-2_values_8bits-8559-1.txt.
+ Run cut -d\| -f 3,4 <ISO-639-2_values_8bits-8559-1.txt | sort -u >/tmp/639.2
+
+ Extract the C table below to a file, say /tmp/lc, and run:
+ cut -c 10- /tmp/lc| sed -e 's/", "/|/' -e 's,".*,,'>/tmp/lang.2
+
+ Then: comm -3 /tmp/639.2 /tmp/lang.c.
+
+ Also update the enum in lang.h. */
+
+language_type language_table[] = {
+ { aa, "aa", "Afar" },
+ { ab, "ab", "Abkhazian" },
+ { ae, "ae", "Avestan" },
+ { af, "af", "Afrikaans" },
+ { ak, "ak", "Akan" },
+ { am, "am", "Amharic" },
+ { an, "an", "Aragonese" },
+ { ar, "ar", "Arabic" },
+ { as, "as", "Assamese" },
+ { av, "av", "Avaric" },
+ { ay, "ay", "Aymara" },
+ { az, "az", "Azerbaijani" },
+ { ba, "ba", "Bashkir" },
+ { be, "be", "Belarusian" },
+ { bg, "bg", "Bulgarian" },
+ { bh, "bh", "Bihari" },
+ { bi, "bi", "Bislama" },
+ { bm, "bm", "Bambara" },
+ { bn, "bn", "Bengali" },
+ { bo, "bo", "Tibetan" },
+ { br, "br", "Breton" },
+ { bs, "bs", "Bosnian" },
+ { ca, "ca", "Catalan; Valencian" },
+ { ce, "ce", "Chechen" },
+ { ch, "ch", "Chamorro" },
+ { co, "co", "Corsican" },
+ { cr, "cr", "Cree" },
+ { cs, "cs", "Czech" },
+ { cu, "cu", "Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic" },
+ { cv, "cv", "Chuvash" },
+ { cy, "cy", "Welsh" },
+ { da, "da", "Danish" },
+ { de, "de", "German" },
+ { dv, "dv", "Divehi; Dhivehi; Maldivian" },
+ { dz, "dz", "Dzongkha" },
+ { ee, "ee", "Ewe" },
+ { el, "el", "Greek, Modern (1453-)" },
+ { en, "en", "English" },
+ { eo, "eo", "Esperanto" },
+ { es, "es", "Spanish; Castilian" },
+ { et, "et", "Estonian" },
+ { eu, "eu", "Basque" },
+ { fa, "fa", "Persian" },
+ { ff, "ff", "Fulah" },
+ { fi, "fi", "Finnish" },
+ { fj, "fj", "Fijian" },
+ { fo, "fo", "Faroese" },
+ { fr, "fr", "French" },
+ { fy, "fy", "Western Frisian" },
+ { ga, "ga", "Irish" },
+ { gd, "gd", "Gaelic; Scottish Gaelic" },
+ { gl, "gl", "Galician" },
+ { gn, "gn", "Guarani" },
+ { gu, "gu", "Gujarati" },
+ { gv, "gv", "Manx" },
+ { ha, "ha", "Hausa" },
+ { he, "he", "Hebrew" } /* (formerly iw) */,
+ { hi, "hi", "Hindi" },
+ { ho, "ho", "Hiri Motu" },
+ { hr, "hr", "Croatian" },
+ { ht, "ht", "Haitian; Haitian Creole" },
+ { hu, "hu", "Hungarian" },
+ { hy, "hy", "Armenian" },
+ { hz, "hz", "Herero" },
+ { ia, "ia", "Interlingua (International Auxiliary Language Association)" },
+ { id, "id", "Indonesian" } /* (formerly in) */,
+ { ie, "ie", "Interlingue" },
+ { ig, "ig", "Igbo" },
+ { ii, "ii", "Sichuan Yi" },
+ { ik, "ik", "Inupiaq" },
+ { io, "io", "Ido" },
+ { is, "is", "Icelandic" },
+ { it, "it", "Italian" },
+ { iu, "iu", "Inuktitut" },
+ { ja, "ja", "Japanese" },
+ { jv, "jv", "Javanese" },
+ { ka, "ka", "Georgian" },
+ { kg, "kg", "Kongo" },
+ { ki, "ki", "Kikuyu; Gikuyu" },
+ { kj, "kj", "Kuanyama; Kwanyama" },
+ { kk, "kk", "Kazakh" },
+ { kl, "kl", "Kalaallisut; Greenlandic" },
+ { km, "km", "Central Khmer" },
+ { kn, "kn", "Kannada" },
+ { ko, "ko", "Korean" },
+ { kr, "kr", "Kanuri" },
+ { ks, "ks", "Kashmiri" },
+ { ku, "ku", "Kurdish" },
+ { kv, "kv", "Komi" },
+ { kw, "kw", "Cornish" },
+ { ky, "ky", "Kirghiz; Kyrgyz" },
+ { la, "la", "Latin" },
+ { lb, "lb", "Luxembourgish; Letzeburgesch" },
+ { lg, "lg", "Ganda" },
+ { li, "li", "Limburgan; Limburger; Limburgish" },
+ { ln, "ln", "Lingala" },
+ { lo, "lo", "Lao" },
+ { lt, "lt", "Lithuanian" },
+ { lu, "lu", "Luba-Katanga" },
+ { lv, "lv", "Latvian" },
+ { mg, "mg", "Malagasy" },
+ { mh, "mh", "Marshallese" },
+ { mi, "mi", "Maori" },
+ { mk, "mk", "Macedonian" },
+ { ml, "ml", "Malayalam" },
+ { mn, "mn", "Mongolian" },
+ { mo, "mo", "Moldavian" },
+ { mr, "mr", "Marathi" },
+ { ms, "ms", "Malay" },
+ { mt, "mt", "Maltese" },
+ { my, "my", "Burmese" },
+ { na, "na", "Nauru" },
+ { nb, "nb", "Bokmål, Norwegian; Norwegian Bokmål" },
+ { nd, "nd", "Ndebele, North; North Ndebele" },
+ { ne, "ne", "Nepali" },
+ { ng, "ng", "Ndonga" },
+ { nl, "nl", "Dutch; Flemish" },
+ { nn, "nn", "Norwegian Nynorsk; Nynorsk, Norwegian" },
+ { no, "no", "Norwegian" },
+ { nr, "nr", "Ndebele, South; South Ndebele" },
+ { nv, "nv", "Navajo; Navaho" },
+ { ny, "ny", "Chichewa; Chewa; Nyanja" },
+ { oc, "oc", "Occitan (post 1500); Provençal" },
+ { oj, "oj", "Ojibwa" },
+ { om, "om", "Oromo" },
+ { or, "or", "Oriya" },
+ { os, "os", "Ossetian; Ossetic" },
+ { pa, "pa", "Panjabi; Punjabi" },
+ { pi, "pi", "Pali" },
+ { pl, "pl", "Polish" },
+ { ps, "ps", "Pushto" },
+ { pt, "pt", "Portuguese" },
+ { qu, "qu", "Quechua" },
+ { rm, "rm", "Romansh" },
+ { rn, "rn", "Rundi" },
+ { ro, "ro", "Romanian" },
+ { ru, "ru", "Russian" },
+ { rw, "rw", "Kinyarwanda" },
+ { sa, "sa", "Sanskrit" },
+ { sc, "sc", "Sardinian" },
+ { sd, "sd", "Sindhi" },
+ { se, "se", "Northern Sami" },
+ { sg, "sg", "Sango" },
+ { si, "si", "Sinhala; Sinhalese" },
+ { sk, "sk", "Slovak" },
+ { sl, "sl", "Slovenian" },
+ { sm, "sm", "Samoan" },
+ { sn, "sn", "Shona" },
+ { so, "so", "Somali" },
+ { sq, "sq", "Albanian" },
+ { sr, "sr", "Serbian" },
+ { ss, "ss", "Swati" },
+ { st, "st", "Sotho, Souther" },
+ { su, "su", "Sundanese" },
+ { sv, "sv", "Swedish" },
+ { sw, "sw", "Swahili" },
+ { ta, "ta", "Tamil" },
+ { te, "te", "Telugu" },
+ { tg, "tg", "Tajik" },
+ { th, "th", "Thai" },
+ { ti, "ti", "Tigrinya" },
+ { tk, "tk", "Turkmen" },
+ { tl, "tl", "Tagalog" },
+ { tn, "tn", "Tswana" },
+ { to, "to", "Tonga (Tonga Islands)" },
+ { tr, "tr", "Turkish" },
+ { ts, "ts", "Tsonga" },
+ { tt, "tt", "Tatar" },
+ { tw, "tw", "Twi" },
+ { ty, "ty", "Tahitian" },
+ { ug, "ug", "Uighur; Uyghur" },
+ { uk, "uk", "Ukrainian" },
+ { ur, "ur", "Urdu" },
+ { uz, "uz", "Uzbek" },
+ { ve, "ve", "Venda" },
+ { vi, "vi", "Vietnamese" },
+ { vo, "vo", "Volapük" },
+ { wa, "wa", "Walloon" },
+ { wo, "wo", "Wolof" },
+ { xh, "xh", "Xhosa" },
+ { yi, "yi", "Yiddish" } /* (formerly ji) */,
+ { yo, "yo", "Yoruba" },
+ { za, "za", "Zhuang; Chuang" },
+ { zh, "zh", "Chinese" },
+ { zu, "zu", "Zulu" },
+ { last_language_code, NULL, NULL }
+};
+
+static const char *
+cm_search_iso_map_char (byte_t ch)
+{
+ int i;
+ iso_map_type *iso = encoding_table[document_encoding_code].isotab;
+
+ /* If no conversion table for this encoding, quit. */
+ if (!iso)
+ return NULL;
+
+ for (i = 0; iso[i].html; i++)
+ if (iso[i].bytecode == ch)
+ return iso[i].translit;
+
+ return NULL;
+}
+
+const char *
+lang_transliterate_char (byte_t ch)
+{
+ if (transliterate_file_names
+ && document_encoding_code != no_encoding)
+ return cm_search_iso_map_char (ch);
+ return NULL;
+}
+
+
+
+/* Given a language code LL_CODE, return a "default" country code (in
+ new memory). We use the same table as gettext, and return LL_CODE
+ uppercased in the absence of any better possibility, with a warning.
+ (gettext silently defaults to the C locale, but we want to give users
+ a shot at fixing ambiguities.) We also return en_US for en, while
+ gettext does not. */
+
+#define SIZEOF(a) (sizeof(a) / sizeof(a[0]))
+
+static char *
+default_country_for_lang (const char *ll_code)
+{
+ /* This table comes from msginit.c in gettext (0.16.1). It is
+ intentionally copied verbatim even though the format is not the
+ most convenient for our purposes, to make updates simple. */
+ static const char *locales_with_principal_territory[] = {
+ /* Language Main territory */
+ "ace_ID", /* Achinese Indonesia */
+ "af_ZA", /* Afrikaans South Africa */
+ "ak_GH", /* Akan Ghana */
+ "am_ET", /* Amharic Ethiopia */
+ "an_ES", /* Aragonese Spain */
+ "ang_GB", /* Old English Britain */
+ "as_IN", /* Assamese India */
+ "av_RU", /* Avaric Russia */
+ "awa_IN", /* Awadhi India */
+ "az_AZ", /* Azerbaijani Azerbaijan */
+ "bad_CF", /* Banda Central African Republic */
+ "ban_ID", /* Balinese Indonesia */
+ "be_BY", /* Belarusian Belarus */
+ "bem_ZM", /* Bemba Zambia */
+ "bg_BG", /* Bulgarian Bulgaria */
+ "bho_IN", /* Bhojpuri India */
+ "bik_PH", /* Bikol Philippines */
+ "bin_NG", /* Bini Nigeria */
+ "bm_ML", /* Bambara Mali */
+ "bn_IN", /* Bengali India */
+ "bo_CN", /* Tibetan China */
+ "br_FR", /* Breton France */
+ "bs_BA", /* Bosnian Bosnia */
+ "btk_ID", /* Batak Indonesia */
+ "bug_ID", /* Buginese Indonesia */
+ "ca_ES", /* Catalan Spain */
+ "ce_RU", /* Chechen Russia */
+ "ceb_PH", /* Cebuano Philippines */
+ "co_FR", /* Corsican France */
+ "cr_CA", /* Cree Canada */
+ "cs_CZ", /* Czech Czech Republic */
+ "csb_PL", /* Kashubian Poland */
+ "cy_GB", /* Welsh Britain */
+ "da_DK", /* Danish Denmark */
+ "de_DE", /* German Germany */
+ "din_SD", /* Dinka Sudan */
+ "doi_IN", /* Dogri India */
+ "dv_MV", /* Divehi Maldives */
+ "dz_BT", /* Dzongkha Bhutan */
+ "ee_GH", /* Éwé Ghana */
+ "el_GR", /* Greek Greece */
+ /* Don't put "en_GB" or "en_US" here. That would be asking for fruitless
+ political discussion. */
+ "es_ES", /* Spanish Spain */
+ "et_EE", /* Estonian Estonia */
+ "fa_IR", /* Persian Iran */
+ "fi_FI", /* Finnish Finland */
+ "fil_PH", /* Filipino Philippines */
+ "fj_FJ", /* Fijian Fiji */
+ "fo_FO", /* Faroese Faeroe Islands */
+ "fon_BJ", /* Fon Benin */
+ "fr_FR", /* French France */
+ "fy_NL", /* Western Frisian Netherlands */
+ "ga_IE", /* Irish Ireland */
+ "gd_GB", /* Scots Britain */
+ "gon_IN", /* Gondi India */
+ "gsw_CH", /* Swiss German Switzerland */
+ "gu_IN", /* Gujarati India */
+ "he_IL", /* Hebrew Israel */
+ "hi_IN", /* Hindi India */
+ "hil_PH", /* Hiligaynon Philippines */
+ "hr_HR", /* Croatian Croatia */
+ "ht_HT", /* Haitian Haiti */
+ "hu_HU", /* Hungarian Hungary */
+ "hy_AM", /* Armenian Armenia */
+ "id_ID", /* Indonesian Indonesia */
+ "ig_NG", /* Igbo Nigeria */
+ "ii_CN", /* Sichuan Yi China */
+ "ilo_PH", /* Iloko Philippines */
+ "is_IS", /* Icelandic Iceland */
+ "it_IT", /* Italian Italy */
+ "ja_JP", /* Japanese Japan */
+ "jab_NG", /* Hyam Nigeria */
+ "jv_ID", /* Javanese Indonesia */
+ "ka_GE", /* Georgian Georgia */
+ "kab_DZ", /* Kabyle Algeria */
+ "kaj_NG", /* Jju Nigeria */
+ "kam_KE", /* Kamba Kenya */
+ "kmb_AO", /* Kimbundu Angola */
+ "kcg_NG", /* Tyap Nigeria */
+ "kdm_NG", /* Kagoma Nigeria */
+ "kg_CD", /* Kongo Democratic Republic of Congo */
+ "kk_KZ", /* Kazakh Kazakhstan */
+ "kl_GL", /* Kalaallisut Greenland */
+ "km_KH", /* Khmer Cambodia */
+ "kn_IN", /* Kannada India */
+ "ko_KR", /* Korean Korea (South) */
+ "kok_IN", /* Konkani India */
+ "kr_NG", /* Kanuri Nigeria */
+ "kru_IN", /* Kurukh India */
+ "lg_UG", /* Ganda Uganda */
+ "li_BE", /* Limburgish Belgium */
+ "lo_LA", /* Laotian Laos */
+ "lt_LT", /* Lithuanian Lithuania */
+ "lu_CD", /* Luba-Katanga Democratic Republic of Congo */
+ "lua_CD", /* Luba-Lulua Democratic Republic of Congo */
+ "luo_KE", /* Luo Kenya */
+ "lv_LV", /* Latvian Latvia */
+ "mad_ID", /* Madurese Indonesia */
+ "mag_IN", /* Magahi India */
+ "mai_IN", /* Maithili India */
+ "mak_ID", /* Makasar Indonesia */
+ "man_ML", /* Mandingo Mali */
+ "men_SL", /* Mende Sierra Leone */
+ "mg_MG", /* Malagasy Madagascar */
+ "min_ID", /* Minangkabau Indonesia */
+ "mk_MK", /* Macedonian Macedonia */
+ "ml_IN", /* Malayalam India */
+ "mn_MN", /* Mongolian Mongolia */
+ "mni_IN", /* Manipuri India */
+ "mos_BF", /* Mossi Burkina Faso */
+ "mr_IN", /* Marathi India */
+ "ms_MY", /* Malay Malaysia */
+ "mt_MT", /* Maltese Malta */
+ "mwr_IN", /* Marwari India */
+ "my_MM", /* Burmese Myanmar */
+ "na_NR", /* Nauru Nauru */
+ "nah_MX", /* Nahuatl Mexico */
+ "nap_IT", /* Neapolitan Italy */
+ "nb_NO", /* Norwegian Bokmål Norway */
+ "nds_DE", /* Low Saxon Germany */
+ "ne_NP", /* Nepali Nepal */
+ "nl_NL", /* Dutch Netherlands */
+ "nn_NO", /* Norwegian Nynorsk Norway */
+ "no_NO", /* Norwegian Norway */
+ "nr_ZA", /* South Ndebele South Africa */
+ "nso_ZA", /* Northern Sotho South Africa */
+ "nym_TZ", /* Nyamwezi Tanzania */
+ "nyn_UG", /* Nyankole Uganda */
+ "oc_FR", /* Occitan France */
+ "oj_CA", /* Ojibwa Canada */
+ "or_IN", /* Oriya India */
+ "pa_IN", /* Punjabi India */
+ "pag_PH", /* Pangasinan Philippines */
+ "pam_PH", /* Pampanga Philippines */
+ "pbb_CO", /* Páez Colombia */
+ "pl_PL", /* Polish Poland */
+ "ps_AF", /* Pashto Afghanistan */
+ "pt_PT", /* Portuguese Portugal */
+ "raj_IN", /* Rajasthani India */
+ "rm_CH", /* Rhaeto-Roman Switzerland */
+ "rn_BI", /* Kirundi Burundi */
+ "ro_RO", /* Romanian Romania */
+ "ru_RU", /* Russian Russia */
+ "sa_IN", /* Sanskrit India */
+ "sas_ID", /* Sasak Indonesia */
+ "sat_IN", /* Santali India */
+ "sc_IT", /* Sardinian Italy */
+ "scn_IT", /* Sicilian Italy */
+ "sg_CF", /* Sango Central African Republic */
+ "shn_MM", /* Shan Myanmar */
+ "si_LK", /* Sinhala Sri Lanka */
+ "sid_ET", /* Sidamo Ethiopia */
+ "sk_SK", /* Slovak Slovakia */
+ "sl_SI", /* Slovenian Slovenia */
+ "so_SO", /* Somali Somalia */
+ "sq_AL", /* Albanian Albania */
+ "sr_RS", /* Serbian Serbia */
+ "sr_YU", /* Serbian Yugoslavia */
+ "srr_SN", /* Serer Senegal */
+ "suk_TZ", /* Sukuma Tanzania */
+ "sus_GN", /* Susu Guinea */
+ "sv_SE", /* Swedish Sweden */
+ "te_IN", /* Telugu India */
+ "tem_SL", /* Timne Sierra Leone */
+ "tet_ID", /* Tetum Indonesia */
+ "tg_TJ", /* Tajik Tajikistan */
+ "th_TH", /* Thai Thailand */
+ "tiv_NG", /* Tiv Nigeria */
+ "tk_TM", /* Turkmen Turkmenistan */
+ "tl_PH", /* Tagalog Philippines */
+ "to_TO", /* Tonga Tonga */
+ "tr_TR", /* Turkish Turkey */
+ "tum_MW", /* Tumbuka Malawi */
+ "uk_UA", /* Ukrainian Ukraine */
+ "umb_AO", /* Umbundu Angola */
+ "ur_PK", /* Urdu Pakistan */
+ "uz_UZ", /* Uzbek Uzbekistan */
+ "ve_ZA", /* Venda South Africa */
+ "vi_VN", /* Vietnamese Vietnam */
+ "wa_BE", /* Walloon Belgium */
+ "wal_ET", /* Walamo Ethiopia */
+ "war_PH", /* Waray Philippines */
+ "wen_DE", /* Sorbian Germany */
+ "yao_MW", /* Yao Malawi */
+ "zap_MX" /* Zapotec Mexico */
+ };
+ int c;
+ int cc_len;
+ int ll_len = strlen (ll_code);
+ char *cc_code = xmalloc (ll_len + 1 + 1);
+ int principal_len = SIZEOF (locales_with_principal_territory);
+
+ strcpy (cc_code, ll_code);
+ strcat (cc_code, "_");
+ cc_len = ll_len + 1;
+
+ for (c = 0; c < principal_len; c++)
+ {
+ const char *principal_locale = locales_with_principal_territory[c];
+ if (strncmp (principal_locale, cc_code, cc_len) == 0)
+ {
+ const char *underscore = strchr (principal_locale, '_');
+ /* should always be there, but in case ... */
+ free (cc_code);
+ cc_code = xstrdup (underscore ? underscore + 1 : principal_locale);
+ break;
+ }
+ }
+
+ /* If we didn't find one to copy, warn and duplicate. */
+ if (c == principal_len)
+ {
+ if (mbscasecmp (ll_code, "en") == 0)
+ cc_code = xstrdup ("en_US");
+ else
+ {
+ warning (_("no default territory known for language `%s'"), ll_code);
+ for (c = 0; c < strlen (ll_code); c++)
+ cc_code[c] = toupper (ll_code[c]);
+ cc_code[c] = 0;
+ /* We're probably wasting a byte, oops. */
+ }
+ }
+
+ return cc_code;
+}
+
+
+
+/* @documentlanguage ARG. We set the global `document_language' (which
+ `getdocumenttext' uses) to the gettextish string, and
+ `language_code' to the corresponding enum value. */
+
+void
+cm_documentlanguage (void)
+{
+ language_code_type c;
+ char *lang_arg, *ll_part, *cc_part, *locale_string;
+ char *underscore;
+
+ /* Read the line with the language code on it. */
+ get_rest_of_line (0, &lang_arg);
+
+ /* What we're passed might be either just a language code LL (we'll
+ also need it with the usual _CC appended, if there is one), or a
+ locale name as used by gettext, LL_CC (we'll also need its
+ constituents separately). */
+ underscore = strchr (lang_arg, '_');
+ if (underscore)
+ {
+ ll_part = substring (lang_arg, underscore);
+ cc_part = xstrdup (underscore + 1);
+ locale_string = xstrdup (lang_arg);
+ }
+ else
+ {
+ ll_part = xstrdup (lang_arg);
+ cc_part = default_country_for_lang (ll_part);
+ locale_string = xmalloc (strlen (ll_part) + 1 + strlen (cc_part) + 1);
+ strcpy (locale_string, ll_part);
+ strcat (locale_string, "_");
+ strcat (locale_string, cc_part);
+ }
+
+ /* Done with analysis of user-supplied string. */
+ free (lang_arg);
+
+ /* Linear search is fine these days. */
+ for (c = aa; c != last_language_code; c++)
+ {
+ if (strcmp (ll_part, language_table[c].abbrev) == 0)
+ { /* Set current language code. */
+ language_code = c;
+ break;
+ }
+ }
+
+ /* If we didn't find this code, complain. */
+ if (c == last_language_code)
+ warning (_("%s is not a valid ISO 639 language code"), ll_part);
+
+ /* Set the language our `getdocumenttext' function uses for
+ translating document strings. */
+ document_language = xstrdup (locale_string);
+ free (locale_string);
+
+ if (xml && !docbook)
+ { /* According to http://www.opentag.com/xfaq_lang.htm, xml:lang
+ takes an ISO 639 language code, optionally followed by a dash
+ (not underscore) and an ISO 3166 country code. So we have
+ to make another version with - instead of _. */
+ char *xml_locale = xmalloc (strlen (ll_part) + 1 + strlen (cc_part) + 1);
+ strcpy (xml_locale, ll_part);
+ strcat (xml_locale, "-");
+ strcat (xml_locale, cc_part);
+ xml_insert_element_with_attribute (DOCUMENTLANGUAGE, START,
+ "xml:lang=\"%s\"", xml_locale);
+ xml_insert_element (DOCUMENTLANGUAGE, END);
+ free (xml_locale);
+ }
+
+ free (ll_part);
+ free (cc_part);
+}
+
+
+
+/* Search through the encoding table for the given character, returning
+ its equivalent. */
+
+static int
+cm_search_iso_map (char *html)
+{
+ if (document_encoding_code == UTF_8)
+ {
+ /* Binary search in unicode_map. */
+ size_t low = 0;
+ size_t high = sizeof (unicode_map) / sizeof (unicode_map[0]);
+
+ /* At each loop iteration, low < high; for indices < low the values are
+ smaller than HTML; for indices >= high the values are greater than HTML.
+ So, if HTML occurs in the list, it is at low <= position < high. */
+ do
+ {
+ size_t mid = low + (high - low) / 2; /* low <= mid < high */
+ int cmp = strcmp (unicode_map[mid].html, html);
+
+ if (cmp < 0)
+ low = mid + 1;
+ else if (cmp > 0)
+ high = mid;
+ else /* cmp == 0 */
+ return unicode_map[mid].unicode;
+ }
+ while (low < high);
+
+ return -1;
+ }
+ else
+ {
+ int i;
+ iso_map_type *iso = encoding_table[document_encoding_code].isotab;
+
+ /* If no conversion table for this encoding, quit. */
+ if (!iso)
+ return -1;
+
+ for (i = 0; iso[i].html; i++)
+ {
+ if (strcmp (html, iso[i].html) == 0)
+ return i;
+ }
+
+ return -1;
+ }
+}
+
+
+/* @documentencoding. Set the translation table. */
+
+void
+cm_documentencoding (void)
+{
+ if (!handling_delayed_writes)
+ {
+ encoding_code_type enc;
+ char *enc_arg;
+
+ /* This is ugly and probably needs to apply to other commands'
+ argument parsing as well. When we're doing @documentencoding,
+ we're generally in the frontmatter of the document, and so the.
+ expansion in html/xml/docbook would generally be the empty string.
+ (Because those modes wait until the first normal text of the
+ document to start outputting.) The result would thus be a warning
+ "unrecognized encoding name `'". Sigh. */
+ int save_html = html;
+ int save_xml = xml;
+
+ html = 0;
+ xml = 0;
+ get_rest_of_line (1, &enc_arg);
+ html = save_html;
+ xml = save_xml;
+
+ /* See if we have this encoding. */
+ for (enc = no_encoding+1; enc != last_encoding_code; enc++)
+ {
+ if (mbscasecmp (enc_arg, encoding_table[enc].encname) == 0)
+ {
+ document_encoding_code = enc;
+ break;
+ }
+ }
+
+ /* If we didn't find this code, complain. */
+ if (enc == last_encoding_code)
+ {
+ warning (_("unrecognized encoding name `%s'"), enc_arg);
+ /* Let the previous one go. */
+ if (unknown_encoding && *unknown_encoding)
+ free (unknown_encoding);
+ unknown_encoding = xstrdup (enc_arg);
+ }
+
+ else if (encoding_table[document_encoding_code].isotab == NULL)
+ warning (_("sorry, encoding `%s' not supported"), enc_arg);
+
+ free (enc_arg);
+ }
+ else if (xml)
+ {
+ char *encoding = current_document_encoding ();
+
+ if (encoding && *encoding)
+ {
+ insert_string (" encoding=\"");
+ insert_string (encoding);
+ insert_string ("\"");
+ }
+
+ free (encoding);
+ }
+}
+
+char *
+current_document_encoding (void)
+{
+ if (document_encoding_code != no_encoding)
+ return xstrdup (encoding_table[document_encoding_code].encname);
+ else if (unknown_encoding && *unknown_encoding)
+ return xstrdup (unknown_encoding);
+ else
+ return xstrdup ("");
+}
+
+
+/* Add RC per the current encoding. */
+
+static void
+add_encoded_char_from_code (int rc)
+{
+ if (document_encoding_code == UTF_8)
+ {
+ if (rc < 0x80)
+ add_char (rc);
+ else if (rc < 0x800)
+ {
+ add_char (0xc0 | (rc >> 6));
+ add_char (0x80 | (rc & 0x3f));
+ }
+ else if (rc < 0x10000)
+ {
+ add_char (0xe0 | (rc >> 12));
+ add_char (0x80 | ((rc >> 6) & 0x3f));
+ add_char (0x80 | (rc & 0x3f));
+ }
+ else
+ {
+ add_char (0xf0 | (rc >> 18));
+ add_char (0x80 | ((rc >> 12) & 0x3f));
+ add_char (0x80 | ((rc >> 6) & 0x3f));
+ add_char (0x80 | (rc & 0x3f));
+ }
+ }
+ else
+ add_char (encoding_table[document_encoding_code].isotab[rc].bytecode);
+}
+
+
+/* If html or xml output, add &HTML_STR; to the output. If not html and
+ the user requested encoded output, add the real 8-bit character
+ corresponding to HTML_STR from the translation tables. Otherwise,
+ add INFO_STR. */
+
+static void
+add_encoded_char (char *html_str, char *info_str)
+{
+ if (html)
+ add_word_args ("&%s;", html_str);
+ else if (xml)
+ xml_insert_entity (html_str);
+ else if (enable_encoding && document_encoding_code != no_encoding)
+ {
+ /* Look for HTML_STR in the current translation table. */
+ int rc = cm_search_iso_map (html_str);
+ if (rc >= 0)
+ /* We found it, add the real character. */
+ add_encoded_char_from_code (rc);
+ else
+ { /* We didn't find it, that seems bad. */
+ warning (_("invalid encoded character `%s'"), html_str);
+ add_word (info_str);
+ }
+ }
+ else
+ add_word (info_str);
+}
+
+
+
+/* Output an accent for HTML or XML. */
+
+static void
+cm_accent_generic_html (int arg, int start, int end, char *html_supported,
+ int single, int html_solo_standalone, char *html_solo)
+{
+ static int valid_html_accent; /* yikes */
+
+ if (arg == START)
+ { /* If HTML has good support for this character, use it. */
+ if (strchr (html_supported, curchar ()))
+ { /* Yes; start with an ampersand. The character itself
+ will be added later in read_command (makeinfo.c). */
+ int saved_escape_html = escape_html;
+ escape_html = 0;
+ valid_html_accent = 1;
+ add_char ('&');
+ escape_html = saved_escape_html;
+ }
+ else
+ { /* @dotless{i} is not listed in html_supported but HTML entities
+ starting with `i' can be used, such as &icirc;. */
+ int save_input_text_offset = input_text_offset;
+ char *accent_contents;
+
+ get_until_in_braces ("\n", &accent_contents);
+ canon_white (accent_contents);
+
+ if (strstr (accent_contents, "@dotless{i"))
+ {
+ add_word_args ("&%c", accent_contents[9]);
+ valid_html_accent = 1;
+ }
+ else
+ {
+ /* Search for @dotless{} wasn't successful, so rewind. */
+ input_text_offset = save_input_text_offset;
+ valid_html_accent = 0;
+ if (html_solo_standalone)
+ { /* No special HTML support, so produce standalone char. */
+ if (xml)
+ xml_insert_entity (html_solo);
+ else
+ add_word_args ("&%s;", html_solo);
+ }
+ else
+ /* If the html_solo does not exist as standalone character
+ (namely &circ; &grave; &tilde;), then we use
+ the single character version instead. */
+ add_char (single);
+ }
+
+ free (accent_contents);
+ }
+ }
+ else if (arg == END)
+ { /* Only if we saw a valid_html_accent can we use the full
+ HTML accent (umlaut, grave ...). */
+ if (valid_html_accent)
+ {
+ add_word (html_solo);
+ add_char (';');
+ }
+ }
+}
+
+
+/* If END is zero, there is nothing in the paragraph to accent. This
+ can happen when we're in a menu with an accent command and
+ --no-headers is given, so the base character is not added. In this
+ case we're not producing any output anyway, so just forget it.
+ Otherwise, produce the ASCII version of the accented char. */
+static void
+cm_accent_generic_no_headers (int arg, int start, int end, int single,
+ char *html_solo)
+{
+ if (arg == END && end > 0)
+ {
+ if (no_encoding)
+ add_char (single);
+ else
+ {
+ int rc;
+ char *buffer = xmalloc (1 + strlen (html_solo) + 1);
+ assert (end > 0);
+ buffer[0] = output_paragraph[end - 1];
+ buffer[1] = 0;
+ strcat (buffer, html_solo);
+
+ rc = cm_search_iso_map (buffer);
+ if (rc >= 0)
+ {
+ /* Here we replace the character which has
+ been inserted in read_command with
+ the value we have found in the conversion table. */
+ output_paragraph_offset--;
+ add_encoded_char_from_code (rc);
+ }
+ else
+ { /* If we didn't find a translation for this character,
+ put the single instead. E.g., &Xuml; does not exist so X&uml;
+ should be produced. */
+ /* When the below warning is issued, an author has nothing
+ wrong in their document, let alone anything ``fixable''
+ on their side. So it is commented out for now. */
+ /* warning (_("%s is an invalid ISO code, using %c"),
+ buffer, single); */
+ add_char (single);
+ }
+
+ free (buffer);
+ }
+ }
+}
+
+
+
+/* Accent commands that take explicit arguments and don't have any
+ special HTML support. */
+
+void
+cm_accent (int arg)
+{
+ int old_escape_html = escape_html;
+ escape_html = 0;
+ if (arg == START)
+ {
+ /* Must come first to avoid ambiguity with overdot. */
+ if (strcmp (command, "udotaccent") == 0) /* underdot */
+ add_char ('.');
+ }
+ else if (arg == END)
+ {
+ if (strcmp (command, "=") == 0) /* macron */
+ add_word ((html || xml) ? "&macr;" : "=");
+ else if (strcmp (command, "H") == 0) /* Hungarian umlaut */
+ add_word ("''");
+ else if (strcmp (command, "dotaccent") == 0) /* overdot */
+ add_meta_char ('.');
+ else if (strcmp (command, "ringaccent") == 0) /* ring */
+ add_char ('*');
+ else if (strcmp (command, "tieaccent") == 0) /* long tie */
+ add_char ('[');
+ else if (strcmp (command, "u") == 0) /* breve */
+ add_char ('(');
+ else if (strcmp (command, "ubaraccent") == 0) /* underbar */
+ add_char ('_');
+ else if (strcmp (command, "v") == 0) /* hacek/check */
+ add_word ((html || xml) ? "&lt;" : "<");
+ }
+ escape_html = old_escape_html;
+}
+
+/* Common routine for the accent characters that have support in HTML.
+ If the character being accented is in the HTML_SUPPORTED set, then
+ produce &CHTML_SOLO;, for example, &Auml; for an A-umlaut. If not in
+ HTML_SUPPORTED, just produce &HTML_SOLO;X for the best we can do with
+ at an X-umlaut. If not producing HTML, just use SINGLE, a
+ character such as " which is the best plain text representation we
+ can manage. If HTML_SOLO_STANDALONE is nonzero the given HTML_SOLO
+ exists as valid standalone character in HTML, e.g., &uml;. */
+
+static void
+cm_accent_generic (int arg, int start, int end, char *html_supported,
+ int single, int html_solo_standalone, char *html_solo)
+{
+ /* Accentuating space characters makes no sense, so issue a warning. */
+ if (arg == START && isspace (input_text[input_text_offset]))
+ warning ("Accent command `@%s' must not be followed by whitespace",
+ command);
+
+ if (html || xml)
+ cm_accent_generic_html (arg, start, end, html_supported,
+ single, html_solo_standalone, html_solo);
+ else if (no_headers)
+ cm_accent_generic_no_headers (arg, start, end, single, html_solo);
+ else if (arg == END)
+ {
+ if (enable_encoding)
+ /* use 8-bit if available */
+ cm_accent_generic_no_headers (arg, start, end, single, html_solo);
+ else
+ /* use regular character */
+ add_char (single);
+ }
+}
+
+void
+cm_accent_umlaut (int arg, int start, int end)
+{
+ cm_accent_generic (arg, start, end, "aouAOUEeIiy", '"', 1, "uml");
+}
+
+void
+cm_accent_acute (int arg, int start, int end)
+{
+ cm_accent_generic (arg, start, end, "AEIOUYaeiouy", '\'', 1, "acute");
+}
+
+void
+cm_accent_cedilla (int arg, int start, int end)
+{
+ cm_accent_generic (arg, start, end, "Cc", ',', 1, "cedil");
+}
+
+void
+cm_accent_hat (int arg, int start, int end)
+{
+ cm_accent_generic (arg, start, end, "AEIOUaeiou", '^', 0, "circ");
+}
+
+void
+cm_accent_grave (int arg, int start, int end)
+{
+ cm_accent_generic (arg, start, end, "AEIOUaeiou", '`', 0, "grave");
+}
+
+void
+cm_accent_tilde (int arg, int start, int end)
+{
+ cm_accent_generic (arg, start, end, "ANOano", '~', 0, "tilde");
+}
+
+
+
+/* Non-English letters/characters that don't insert themselves. */
+void
+cm_special_char (int arg)
+{
+ int old_escape_html = escape_html;
+ escape_html = 0;
+
+ if (arg == START)
+ {
+ if ((*command == 'L' || *command == 'l'
+ || *command == 'O' || *command == 'o')
+ && command[1] == 0)
+ { /* Lslash lslash Oslash oslash.
+ Lslash and lslash aren't supported in HTML. */
+ if (command[0] == 'O')
+ add_encoded_char ("Oslash", "/O");
+ else if (command[0] == 'o')
+ add_encoded_char ("oslash", "/o");
+ else
+ add_word_args ("/%c", command[0]);
+ }
+ else if (strcmp (command, "exclamdown") == 0)
+ add_encoded_char ("iexcl", "!");
+ else if (strcmp (command, "questiondown") == 0)
+ add_encoded_char ("iquest", "?");
+ else if (strcmp (command, "euro") == 0)
+ /* http://www.cs.tut.fi/~jkorpela/html/euro.html suggests that
+ &euro; degrades best in old browsers. */
+ add_encoded_char ("euro", "Euro ");
+ else if (strcmp (command, "pounds") == 0)
+ add_encoded_char ("pound" , "#");
+ else if (strcmp (command, "ordf") == 0)
+ add_encoded_char ("ordf" , "a");
+ else if (strcmp (command, "ordm") == 0)
+ add_encoded_char ("ordm" , "o");
+ else if (strcmp (command, "textdegree") == 0)
+ add_encoded_char ("deg" , "o");
+ else if (strcmp (command, "AE") == 0)
+ add_encoded_char ("AElig", command);
+ else if (strcmp (command, "ae") == 0)
+ add_encoded_char ("aelig", command);
+ else if (strcmp (command, "OE") == 0)
+ add_encoded_char ("OElig", command);
+ else if (strcmp (command, "oe") == 0)
+ add_encoded_char ("oelig", command);
+ else if (strcmp (command, "AA") == 0)
+ add_encoded_char ("Aring", command);
+ else if (strcmp (command, "aa") == 0)
+ add_encoded_char ("aring", command);
+ else if (strcmp (command, "ss") == 0)
+ add_encoded_char ("szlig", command);
+ else if (strcmp (command, "guillemetleft") == 0
+ || strcmp (command, "guillemotleft") == 0)
+ add_encoded_char ("laquo", "<<");
+ else if (strcmp (command, "guillemetright") == 0
+ || strcmp (command, "guillemotright") == 0)
+ add_encoded_char ("raquo", ">>");
+ else
+ line_error ("cm_special_char internal error: command=@%s", command);
+ }
+ escape_html = old_escape_html;
+}
+
+/* Dotless i or j. */
+void
+cm_dotless (int arg, int start, int end)
+{
+ if (arg == END)
+ {
+ xml_no_para --;
+ if (output_paragraph[start] != 'i' && output_paragraph[start] != 'j')
+ /* This error message isn't perfect if the argument is multiple
+ characters, but it doesn't seem worth getting right. */
+ line_error (_("%c%s expects `i' or `j' as argument, not `%c'"),
+ COMMAND_PREFIX, command, output_paragraph[start]);
+
+ else if (end - start != 1)
+ line_error (_("%c%s expects a single character `i' or `j' as argument"),
+ COMMAND_PREFIX, command);
+
+ /* We've already inserted the `i' or `j', so nothing to do. */
+ }
+ else
+ xml_no_para ++;
+}
diff --git a/makeinfo/lang.h b/makeinfo/lang.h
new file mode 100644
index 0000000..b902f19
--- /dev/null
+++ b/makeinfo/lang.h
@@ -0,0 +1,141 @@
+/* lang.h -- declarations for language codes etc.
+ $Id: lang.h,v 1.14 2007/11/21 23:02:22 karl Exp $
+
+ Copyright (C) 1999, 2001, 2002, 2003, 2006, 2007
+ 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/>.
+
+ Originally written by Karl Heinz Marbaise <kama@hippo.fido.de>. */
+
+#ifndef LANG_H
+#define LANG_H
+
+/* The language code which can be changed through @documentlanguage
+ These code are the ISO-639 two letter codes. */
+
+#undef hz /* AIX 4.3.3 */
+typedef enum
+{
+ aa, ab, ae, af, ak, am, an, ar, as, av, ay, az, ba, be, bg, bh, bi,
+ bm, bn, bo, br, bs, ca, ce, ch, co, cr, cs, cu, cv, cy, da, de, dv,
+ dz, ee, el, en, eo, es, et, eu, fa, ff, fi, fj, fo, fr, fy, ga, gd,
+ gl, gn, gu, gv, ha, he, hi, ho, hr, ht, hu, hy, hz, ia, id, ie, ig,
+ ii, ik, io, is, it, iu, ja, jv, ka, kg, ki, kj, kk, kl, km, kn, ko,
+ kr, ks, ku, kv, kw, ky, la, lb, lg, li, ln, lo, lt, lu, lv, mg, mh,
+ mi, mk, ml, mn, mo, mr, ms, mt, my, na, nb, nd, ne, ng, nl, nn, no,
+ nr, nv, ny, oc, oj, om, or, os, pa, pi, pl, ps, pt, qu, rm, rn, ro,
+ ru, rw, sa, sc, sd, se, sg, si, sk, sl, sm, sn, so, sq, sr, ss, st,
+ su, sv, sw, ta, te, tg, th, ti, tk, tl, tn, to, tr, ts, tt, tw, ty,
+ ug, uk, ur, uz, ve, vi, vo, wa, wo, xh, yi, yo, za, zh, zu,
+ last_language_code
+} language_code_type;
+
+/* The current language code. */
+extern language_code_type language_code;
+
+
+/* Information for each language. */
+typedef struct
+{
+ language_code_type lc; /* language code as enum type */
+ char *abbrev; /* two letter language code */
+ char *desc; /* full name for language code */
+} language_type;
+
+extern language_type language_table[];
+
+
+
+/* The document encoding. This is useful to produce true 8-bit
+ characters according to the @documentencoding. */
+
+typedef enum {
+ no_encoding,
+ US_ASCII,
+ ISO_8859_1,
+ ISO_8859_2,
+ ISO_8859_3, /* this and none of the rest are supported. */
+ ISO_8859_4,
+ ISO_8859_5,
+ ISO_8859_6,
+ ISO_8859_7,
+ ISO_8859_8,
+ ISO_8859_9,
+ ISO_8859_10,
+ ISO_8859_11,
+ ISO_8859_12,
+ ISO_8859_13,
+ ISO_8859_14,
+ ISO_8859_15,
+ KOI8_R,
+ KOI8_U,
+ UTF_8,
+ last_encoding_code
+} encoding_code_type;
+
+/* The current document encoding, or null if not set. */
+extern encoding_code_type document_encoding_code;
+
+/* If an encoding is not supported, just keep it as a string. */
+extern char *unknown_encoding;
+
+/* Maps an HTML abbreviation to ISO and Unicode codes for a given code. */
+
+typedef unsigned short int unicode_t; /* should be 16 bits */
+typedef unsigned char byte_t;
+
+typedef struct
+{
+ char *html; /* HTML equivalent like umlaut auml => &auml; */
+ byte_t bytecode; /* 8-Bit Code (ISO 8859-1,...) */
+ unicode_t unicode; /* Unicode in U+ convention */
+ char *translit; /* 7-bit transliteration */
+} iso_map_type;
+
+/* Information about the document encoding. */
+typedef struct
+{
+ encoding_code_type ec; /* document encoding type (see above enum) */
+ char *encname; /* encoding name like "iso-8859-1", valid in
+ HTML and Emacs */
+ iso_map_type *isotab; /* address of ISO translation table */
+} encoding_type;
+
+/* Table with all the encoding codes that we recognize. */
+extern encoding_type encoding_table[];
+
+
+/* The commands. */
+extern void cm_documentlanguage (void),
+ cm_documentencoding (void);
+
+/* Accents, other non-English characters. */
+void cm_accent (int arg), cm_special_char (int arg),
+ cm_dotless (int arg, int start, int end);
+
+extern void cm_accent_umlaut (int arg, int start, int end),
+ cm_accent_acute (int arg, int start, int end),
+ cm_accent_cedilla (int arg, int start, int end),
+ cm_accent_hat (int arg, int start, int end),
+ cm_accent_grave (int arg, int start, int end),
+ cm_accent_tilde (int arg, int start, int end);
+
+extern char *current_document_encoding (void);
+
+extern const char *lang_transliterate_char (byte_t ch);
+
+extern char *document_language;
+
+#endif /* not LANG_H */
diff --git a/makeinfo/macro.c b/makeinfo/macro.c
new file mode 100644
index 0000000..10dabb2
--- /dev/null
+++ b/makeinfo/macro.c
@@ -0,0 +1,1095 @@
+/* macro.c -- user-defined macros for Texinfo.
+ $Id: macro.c,v 1.12 2007/07/01 21:20:32 karl Exp $
+
+ Copyright (C) 1998, 1999, 2002, 2003, 2005, 2007
+ 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 "system.h"
+#include "cmds.h"
+#include "files.h"
+#include "macro.h"
+#include "makeinfo.h"
+#include "insertion.h"
+
+/* If non-NULL, this is an output stream to write the full macro expansion
+ of the input text to. The result is another texinfo file, but
+ missing @include, @infoinclude, @macro, and macro invocations. Instead,
+ all of the text is placed within the file. */
+FILE *macro_expansion_output_stream = NULL;
+
+/* Output file for -E. */
+char *macro_expansion_filename;
+
+/* Nonzero means a macro string is in execution, as opposed to a file. */
+int me_executing_string = 0;
+
+/* Nonzero means we want only to expand macros and
+ leave everything else intact. */
+int only_macro_expansion = 0;
+
+static ITEXT **itext_info = NULL;
+static int itext_size = 0;
+
+/* Return the arglist on the current line. This can behave in two different
+ ways, depending on the variable BRACES_REQUIRED_FOR_MACRO_ARGS. */
+int braces_required_for_macro_args = 0;
+
+/* Array of macros and definitions. */
+MACRO_DEF **macro_list = NULL;
+
+int macro_list_len = 0; /* Number of elements. */
+int macro_list_size = 0; /* Number of slots in total. */
+
+/* Return the length of the array in ARRAY. */
+int
+array_len (char **array)
+{
+ int i = 0;
+
+ if (array)
+ for (i = 0; array[i]; i++);
+
+ return i;
+}
+
+void
+free_array (char **array)
+{
+ if (array)
+ {
+ int i;
+ for (i = 0; array[i]; i++)
+ free (array[i]);
+
+ free (array);
+ }
+}
+
+/* Return the macro definition of NAME or NULL if NAME is not defined. */
+MACRO_DEF *
+find_macro (char *name)
+{
+ int i;
+ MACRO_DEF *def;
+
+ def = NULL;
+ for (i = 0; macro_list && (def = macro_list[i]); i++)
+ {
+ if ((!def->inhibited) && (strcmp (def->name, name) == 0))
+ break;
+ }
+ return def;
+}
+
+/* Add the macro NAME with ARGLIST and BODY to the list of defined macros.
+ SOURCE_FILE is the name of the file where this definition can be found,
+ and SOURCE_LINENO is the line number within that file. If a macro already
+ exists with NAME, then a warning is produced, and that previous
+ definition is overwritten. */
+static void
+add_macro (char *name, char **arglist, char *body, char *source_file,
+ int source_lineno, int flags)
+{
+ MACRO_DEF *def;
+
+ def = find_macro (name);
+
+ if (!def)
+ {
+ if (macro_list_len + 2 >= macro_list_size)
+ macro_list = xrealloc
+ (macro_list, ((macro_list_size += 10) * sizeof (MACRO_DEF *)));
+
+ macro_list[macro_list_len] = xmalloc (sizeof (MACRO_DEF));
+ macro_list[macro_list_len + 1] = NULL;
+
+ def = macro_list[macro_list_len];
+ macro_list_len += 1;
+ def->name = name;
+ }
+ else
+ {
+ char *temp_filename = input_filename;
+ int temp_line = line_number;
+
+ warning (_("macro `%s' previously defined"), name);
+
+ input_filename = def->source_file;
+ line_number = def->source_lineno;
+ warning (_("here is the previous definition of `%s'"), name);
+
+ input_filename = temp_filename;
+ line_number = temp_line;
+
+ if (def->arglist)
+ {
+ int i;
+
+ for (i = 0; def->arglist[i]; i++)
+ free (def->arglist[i]);
+
+ free (def->arglist);
+ }
+ free (def->source_file);
+ free (def->body);
+ }
+
+ def->source_file = xstrdup (source_file);
+ def->source_lineno = source_lineno;
+ def->body = body;
+ def->arglist = arglist;
+ def->argcount = array_len (arglist);
+ def->inhibited = 0;
+ def->flags = flags;
+}
+
+
+char **
+get_brace_args (enum quote_type quote)
+{
+ char **arglist, *word;
+ int arglist_index, arglist_size;
+ int character, escape_seen, start;
+ int depth = 1;
+
+ /* There is an arglist in braces here, so gather the args inside of it. */
+ skip_whitespace_and_newlines ();
+ input_text_offset++;
+ arglist = NULL;
+ arglist_index = arglist_size = 0;
+
+ get_arg:
+ skip_whitespace_and_newlines ();
+ start = input_text_offset;
+ escape_seen = 0;
+
+ while ((character = curchar ()))
+ {
+ if (character == '\\')
+ {
+ input_text_offset += 2;
+ escape_seen = 1;
+ }
+ else if (character == '{')
+ {
+ depth++;
+ input_text_offset++;
+ }
+ else if ((character == ','
+ && !(quote == quote_single
+ || (quote == quote_many && depth > 1)))
+ || ((character == '}') && depth == 1))
+ {
+ int len = input_text_offset - start;
+
+ if (len || (character != '}'))
+ {
+ word = xmalloc (1 + len);
+ memcpy (word, input_text + start, len);
+ word[len] = 0;
+
+ /* Clean up escaped characters. */
+ if (escape_seen)
+ {
+ int i;
+ for (i = 0; word[i]; i++)
+ if (word[i] == '\\')
+ memmove (word + i, word + i + 1,
+ 1 + strlen (word + i + 1));
+ }
+
+ if (arglist_index + 2 >= arglist_size)
+ arglist = xrealloc
+ (arglist, (arglist_size += 10) * sizeof (char *));
+
+ arglist[arglist_index++] = word;
+ arglist[arglist_index] = NULL;
+ }
+
+ input_text_offset++;
+ if (character == '}')
+ break;
+ else
+ goto get_arg;
+ }
+ else if (character == '}')
+ {
+ depth--;
+ input_text_offset++;
+ }
+ else
+ {
+ input_text_offset++;
+ if (character == '\n') line_number++;
+ }
+ }
+ return arglist;
+}
+
+static char **
+get_macro_args (MACRO_DEF *def)
+{
+ int i;
+ char *word;
+
+ /* Quickly check to see if this macro has been invoked with any arguments.
+ If not, then don't skip any of the following whitespace. */
+ for (i = input_text_offset; i < input_text_length; i++)
+ if (!cr_or_whitespace (input_text[i]))
+ break;
+
+ if (input_text[i] != '{')
+ {
+ if (braces_required_for_macro_args)
+ {
+ return NULL;
+ }
+ else
+ {
+ /* Braces are not required to fill out the macro arguments. If
+ this macro takes one argument, it is considered to be the
+ remainder of the line, sans whitespace. */
+ if (def->arglist && def->arglist[0] && !def->arglist[1])
+ {
+ char **arglist;
+
+ get_rest_of_line (0, &word);
+ if (input_text_offset > 0
+ && input_text[input_text_offset - 1] == '\n')
+ {
+ input_text_offset--;
+ line_number--;
+ }
+ /* canon_white (word); */
+ arglist = xmalloc (2 * sizeof (char *));
+ arglist[0] = word;
+ arglist[1] = NULL;
+ return arglist;
+ }
+ else
+ {
+ /* The macro either took no arguments, or took more than
+ one argument. In that case, it must be invoked with
+ arguments surrounded by braces. */
+ return NULL;
+ }
+ }
+ }
+ return get_brace_args (def->argcount == 1 ? quote_single : quote_many);
+}
+
+/* Substitute actual parameters for named parameters in body.
+ The named parameters which appear in BODY must by surrounded
+ reverse slashes, as in \foo\. */
+static char *
+apply (char **named, char **actuals, char *body)
+{
+ int i;
+ int new_body_index, new_body_size;
+ char *new_body, *text;
+ int length_of_actuals;
+
+ length_of_actuals = array_len (actuals);
+ new_body_size = strlen (body);
+ new_body = xmalloc (1 + new_body_size);
+
+ /* Copy chars from BODY into NEW_BODY. */
+ i = 0;
+ new_body_index = 0;
+
+ while (body[i])
+ { /* Anything but a \ is easy. */
+ if (body[i] != '\\')
+ new_body[new_body_index++] = body[i++];
+ else
+ { /* Snarf parameter name, check against named parameters. */
+ char *param;
+ int param_start, len;
+
+ param_start = ++i;
+ while (body[i] && body[i] != '\\')
+ i++;
+
+ len = i - param_start;
+ param = xmalloc (1 + len);
+ memcpy (param, body + param_start, len);
+ param[len] = 0;
+
+ if (body[i]) /* move past \ */
+ i++;
+
+ if (len == 0)
+ { /* \\ always means \, even if macro has no args. */
+ len++;
+ text = xmalloc (1 + len);
+ sprintf (text, "\\%s", param);
+ }
+ else
+ {
+ int which;
+
+ /* Check against named parameters. */
+ for (which = 0; named && named[which]; which++)
+ if (STREQ (named[which], param))
+ break;
+
+ if (named && named[which])
+ {
+ text = which < length_of_actuals ? actuals[which] : NULL;
+ if (!text)
+ text = "";
+ len = strlen (text);
+ text = xstrdup (text); /* so we can free it */
+ }
+ else
+ { /* not a parameter, so it's an error. */
+ warning (_("\\ in macro expansion followed by `%s' instead of parameter name"),
+ param);
+ len++;
+ text = xmalloc (1 + len);
+ sprintf (text, "\\%s", param);
+ }
+ }
+
+ if (strlen (param) + 2 < len)
+ {
+ new_body_size += len + 1;
+ new_body = xrealloc (new_body, new_body_size);
+ }
+
+ free (param);
+
+ strcpy (new_body + new_body_index, text);
+ new_body_index += len;
+
+ free (text);
+ }
+ }
+
+ new_body[new_body_index] = 0;
+ return new_body;
+}
+
+/* Expand macro passed in DEF, a pointer to a MACRO_DEF, and
+ return its expansion as a string. */
+char *
+expand_macro (MACRO_DEF *def)
+{
+ char **arglist;
+ char *execution_string = NULL;
+ int start_line = line_number;
+
+ /* Gather the arguments present on the line if there are any. */
+ arglist = get_macro_args (def);
+
+ if (def->argcount < array_len (arglist))
+ {
+ free_array (arglist);
+ line_error (_("Macro `%s' called on line %d with too many args"),
+ def->name, start_line);
+ return execution_string;
+ }
+
+ if (def->body)
+ execution_string = apply (def->arglist, arglist, def->body);
+
+ free_array (arglist);
+ return execution_string;
+}
+
+/* Execute the macro passed in DEF, a pointer to a MACRO_DEF. */
+void
+execute_macro (MACRO_DEF *def)
+{
+ char *execution_string;
+ int start_line = line_number, end_line;
+
+ if (macro_expansion_output_stream && !executing_string && !me_inhibit_expansion)
+ me_append_before_this_command ();
+
+ execution_string = expand_macro (def);
+ if (!execution_string)
+ return;
+
+ if (def->body)
+ {
+ /* Reset the line number to where the macro arguments began.
+ This makes line numbers reported in error messages correct in
+ case the macro arguments span several lines and the expanded
+ arguments invoke other commands. */
+ end_line = line_number;
+ line_number = start_line;
+
+ if (macro_expansion_output_stream
+ && !executing_string && !me_inhibit_expansion)
+ {
+ remember_itext (input_text, input_text_offset);
+ me_execute_string (execution_string);
+ }
+ else
+ execute_string ("%s", execution_string);
+
+ free (execution_string);
+ line_number = end_line;
+ }
+}
+
+
+/* Read and remember the definition of a macro. If RECURSIVE is set,
+ set the ME_RECURSE flag. MACTYPE is either "macro" or "rmacro", and
+ tells us what the matching @end should be. */
+static void
+define_macro (char *mactype, int recursive)
+{
+ int i, start;
+ char *name, *line;
+ char *last_end = NULL;
+ char *body = NULL;
+ char **arglist = NULL;
+ int body_size = 0, body_index = 0;
+ int depth = 1;
+ int flags = 0;
+ int defining_line = line_number;
+
+ if (macro_expansion_output_stream && !executing_string)
+ me_append_before_this_command ();
+
+ skip_whitespace ();
+
+ /* Get the name of the macro. This is the set of characters which are
+ not whitespace and are not `{' immediately following the @macro. */
+ start = input_text_offset;
+ {
+ int len;
+
+ for (i = start; i < input_text_length && input_text[i] != '{'
+ && !cr_or_whitespace (input_text[i]);
+ i++) ;
+
+ len = i - start;
+ name = xmalloc (1 + len);
+ memcpy (name, input_text + start, len);
+ name[len] = 0;
+ input_text_offset = i;
+ }
+
+ skip_whitespace ();
+
+ /* It is not required that the definition of a macro includes an arglist.
+ If not, don't try to get the named parameters, just use a null list. */
+ if (curchar () == '{')
+ {
+ int character;
+ int arglist_index = 0, arglist_size = 0;
+ int gathering_words = 1;
+ char *word = NULL;
+
+ /* Read the words inside of the braces which determine the arglist.
+ These words will be replaced within the body of the macro at
+ execution time. */
+
+ input_text_offset++;
+ skip_whitespace_and_newlines ();
+
+ while (gathering_words)
+ {
+ int len;
+
+ for (i = input_text_offset;
+ (character = input_text[i]);
+ i++)
+ {
+ switch (character)
+ {
+ case '\n':
+ line_number++;
+ case ' ':
+ case '\t':
+ case ',':
+ case '}':
+ /* Found the end of the current arglist word. Save it. */
+ len = i - input_text_offset;
+ word = xmalloc (1 + len);
+ memcpy (word, input_text + input_text_offset, len);
+ word[len] = 0;
+ input_text_offset = i;
+
+ /* Advance to the comma or close-brace that signified
+ the end of the argument. */
+ while ((character = curchar ())
+ && character != ','
+ && character != '}')
+ {
+ input_text_offset++;
+ if (character == '\n')
+ line_number++;
+ }
+
+ /* Add the word to our list of words. */
+ if (arglist_index + 2 >= arglist_size)
+ {
+ arglist_size += 10;
+ arglist = xrealloc (arglist,
+ arglist_size * sizeof (char *));
+ }
+
+ arglist[arglist_index++] = word;
+ arglist[arglist_index] = NULL;
+ break;
+ }
+
+ if (character == '}')
+ {
+ input_text_offset++;
+ gathering_words = 0;
+ break;
+ }
+
+ if (character == ',')
+ {
+ input_text_offset++;
+ skip_whitespace_and_newlines ();
+ i = input_text_offset - 1;
+ }
+ }
+ }
+ }
+
+ /* Read the text carefully until we find an "@end macro" which
+ matches this one. The text in between is the body of the macro. */
+ skip_whitespace_and_newlines ();
+
+ while (depth)
+ {
+ if ((input_text_offset + 9) > input_text_length)
+ {
+ file_line_error (input_filename, defining_line,
+ _("%cend macro not found"), COMMAND_PREFIX);
+ return;
+ }
+
+ get_rest_of_line (0, &line);
+
+ /* Handle commands only meaningful within a macro. */
+ if ((*line == COMMAND_PREFIX) && (depth == 1) &&
+ (strncmp (line + 1, "allow-recursion", 15) == 0) &&
+ (line[16] == 0 || whitespace (line[16])))
+ {
+ warning (_("@allow-recursion is deprecated; please use @rmacro instead"));
+ for (i = 16; whitespace (line[i]); i++);
+ strcpy (line, line + i);
+ flags |= ME_RECURSE;
+ if (!*line)
+ {
+ free (line);
+ continue;
+ }
+ }
+
+ if ((*line == COMMAND_PREFIX) && (depth == 1) &&
+ (strncmp (line + 1, "quote-arg", 9) == 0) &&
+ (line[10] == 0 || whitespace (line[10])))
+ {
+ warning (_("@quote-arg is deprecated; arguments are quoted by default"));
+ for (i = 10; whitespace (line[i]); i++);
+ strcpy (line, line + i);
+ if (!*line)
+ {
+ free (line);
+ continue;
+ }
+ }
+
+ if (*line == COMMAND_PREFIX
+ && (strncmp (line + 1, "macro ", 6) == 0
+ || strncmp (line + 1, "rmacro ", 7) == 0))
+ depth++;
+
+ /* Incorrect implementation of nesting -- just check that the last
+ @end matches what we started with. Since nested macros don't
+ work in TeX anyway, this isn't worth the trouble to get right. */
+ if (*line == COMMAND_PREFIX && strncmp (line + 1, "end macro", 9) == 0)
+ {
+ depth--;
+ last_end = "macro";
+ }
+ if (*line == COMMAND_PREFIX && strncmp (line + 1, "end rmacro", 10) == 0)
+ {
+ depth--;
+ last_end = "rmacro";
+ }
+
+ if (depth)
+ {
+ if ((body_index + strlen (line) + 3) >= body_size)
+ body = xrealloc (body, body_size += 3 + strlen (line));
+ strcpy (body + body_index, line);
+ body_index += strlen (line);
+ body[body_index++] = '\n';
+ body[body_index] = 0;
+ }
+ free (line);
+ }
+
+ /* Check that @end matched the macro command. */
+ if (!STREQ (last_end, mactype))
+ warning (_("mismatched @end %s with @%s"), last_end, mactype);
+
+ /* If it was an empty macro like
+ @macro foo
+ @end macro
+ create an empty body. (Otherwise, the macro is not expanded.) */
+ if (!body)
+ {
+ body = (char *)malloc(1);
+ *body = 0;
+ }
+
+ /* We now have the name, the arglist, and the body. However, BODY
+ includes the final newline which preceded the `@end macro' text.
+ Delete it. */
+ if (body && strlen (body))
+ body[strlen (body) - 1] = 0;
+
+ if (recursive)
+ flags |= ME_RECURSE;
+
+ add_macro (name, arglist, body, input_filename, defining_line, flags);
+
+ if (macro_expansion_output_stream && !executing_string)
+ {
+ /* Remember text for future expansions. */
+ remember_itext (input_text, input_text_offset);
+
+ /* Bizarrely, output the @macro itself. This is so texinfo.tex
+ will have a chance to read it when texi2dvi calls makeinfo -E.
+ The problem is that we don't really expand macros in all
+ contexts; a @table's @item is one. And a fix is not obvious to
+ me, since it appears virtually identical to any other internal
+ expansion. Just setting a variable in cm_item caused other
+ strange expansion problems. */
+ write_region_to_macro_output ("@", 0, 1);
+ write_region_to_macro_output (mactype, 0, strlen (mactype));
+ write_region_to_macro_output (" ", 0, 1);
+ write_region_to_macro_output (input_text, start, input_text_offset);
+ }
+}
+
+void
+cm_macro (void)
+{
+ define_macro ("macro", 0);
+}
+
+void
+cm_rmacro (void)
+{
+ define_macro ("rmacro", 1);
+}
+
+/* Delete the macro with name NAME. The macro is deleted from the list,
+ but it is also returned. If there was no macro defined, NULL is
+ returned. */
+
+static MACRO_DEF *
+delete_macro (char *name)
+{
+ int i;
+ MACRO_DEF *def;
+
+ def = NULL;
+
+ for (i = 0; macro_list && (def = macro_list[i]); i++)
+ if (strcmp (def->name, name) == 0)
+ {
+ memmove (macro_list + i, macro_list + i + 1,
+ ((macro_list_len + 1) - i) * sizeof (MACRO_DEF *));
+ macro_list_len--;
+ break;
+ }
+ return def;
+}
+
+void
+cm_unmacro (void)
+{
+ int i;
+ char *line, *name;
+ MACRO_DEF *def;
+
+ if (macro_expansion_output_stream && !executing_string)
+ me_append_before_this_command ();
+
+ get_rest_of_line (0, &line);
+
+ for (i = 0; line[i] && !whitespace (line[i]); i++);
+ name = xmalloc (i + 1);
+ memcpy (name, line, i);
+ name[i] = 0;
+
+ def = delete_macro (name);
+
+ if (def)
+ {
+ free (def->source_file);
+ free (def->name);
+ free (def->body);
+
+ if (def->arglist)
+ {
+ int i;
+
+ for (i = 0; def->arglist[i]; i++)
+ free (def->arglist[i]);
+
+ free (def->arglist);
+ }
+
+ free (def);
+ }
+
+ free (line);
+ free (name);
+
+ if (macro_expansion_output_stream && !executing_string)
+ remember_itext (input_text, input_text_offset);
+}
+
+/* How to output sections of the input file verbatim. */
+
+/* Set the value of POINTER's offset to OFFSET. */
+ITEXT *
+remember_itext (char *pointer, int offset)
+{
+ int i;
+ ITEXT *itext = NULL;
+
+ /* If we have no info, initialize a blank list. */
+ if (!itext_info)
+ {
+ itext_info = xmalloc ((itext_size = 10) * sizeof (ITEXT *));
+ for (i = 0; i < itext_size; i++)
+ itext_info[i] = NULL;
+ }
+
+ /* If the pointer is already present in the list, then set the offset. */
+ for (i = 0; i < itext_size; i++)
+ if ((itext_info[i]) &&
+ (itext_info[i]->pointer == pointer))
+ {
+ itext = itext_info[i];
+ itext_info[i]->offset = offset;
+ break;
+ }
+
+ if (i == itext_size)
+ {
+ /* Find a blank slot (or create a new one), and remember the
+ pointer and offset. */
+ for (i = 0; i < itext_size; i++)
+ if (itext_info[i] == NULL)
+ break;
+
+ /* If not found, then add some slots. */
+ if (i == itext_size)
+ {
+ int j;
+
+ itext_info = xrealloc
+ (itext_info, (itext_size += 10) * sizeof (ITEXT *));
+
+ for (j = i; j < itext_size; j++)
+ itext_info[j] = NULL;
+ }
+
+ /* Now add the pointer and the offset. */
+ itext_info[i] = xmalloc (sizeof (ITEXT));
+ itext_info[i]->pointer = pointer;
+ itext_info[i]->offset = offset;
+ itext = itext_info[i];
+ }
+ return itext;
+}
+
+/* Forget the input text associated with POINTER. */
+void
+forget_itext (char *pointer)
+{
+ int i;
+
+ for (i = 0; i < itext_size; i++)
+ if (itext_info[i] && (itext_info[i]->pointer == pointer))
+ {
+ free (itext_info[i]);
+ itext_info[i] = NULL;
+ break;
+ }
+}
+
+/* Append the text which appeared in input_text from the last offset to
+ the character just before the command that we are currently executing. */
+void
+me_append_before_this_command (void)
+{
+ int i;
+
+ for (i = input_text_offset; i && (input_text[i] != COMMAND_PREFIX); i--)
+ ;
+ maybe_write_itext (input_text, i);
+}
+
+/* Similar to execute_string, but only takes a single string argument,
+ and remembers the input text location, etc. */
+void
+me_execute_string (char *execution_string)
+{
+ int saved_escape_html = escape_html;
+ int saved_in_paragraph = in_paragraph;
+ escape_html = me_executing_string == 0;
+ in_paragraph = 0;
+
+ pushfile ();
+ input_text_offset = 0;
+ /* The following xstrdup is so we can relocate input_text at will. */
+ input_text = xstrdup (execution_string);
+ input_filename = xstrdup (input_filename);
+ input_text_length = strlen (execution_string);
+
+ remember_itext (input_text, 0);
+
+ me_executing_string++;
+ reader_loop ();
+ free (input_text);
+ free (input_filename);
+ popfile ();
+ me_executing_string--;
+
+ in_paragraph = saved_in_paragraph;
+ escape_html = saved_escape_html;
+}
+
+/* A wrapper around me_execute_string which saves and restores
+ variables important for output generation. This is called
+ when we need to produce macro-expanded output for input which
+ leaves no traces in the Info output. */
+void
+me_execute_string_keep_state (char *execution_string, char *append_string)
+{
+ int op_orig, popen_orig;
+ int fill_orig, newline_orig, indent_orig, meta_pos_orig;
+
+ remember_itext (input_text, input_text_offset);
+ op_orig = output_paragraph_offset;
+ meta_pos_orig = meta_char_pos;
+ popen_orig = paragraph_is_open;
+ fill_orig = filling_enabled;
+ newline_orig = last_char_was_newline;
+ filling_enabled = 0;
+ indent_orig = no_indent;
+ no_indent = 1;
+ me_execute_string (execution_string);
+ if (append_string)
+ write_region_to_macro_output (append_string, 0, strlen (append_string));
+ output_paragraph_offset = op_orig;
+ meta_char_pos = meta_pos_orig;
+ paragraph_is_open = popen_orig;
+ filling_enabled = fill_orig;
+ last_char_was_newline = newline_orig;
+ no_indent = indent_orig;
+}
+
+/* Append the text which appears in input_text from the last offset to
+ the current OFFSET. */
+void
+append_to_expansion_output (int offset)
+{
+ int i;
+ ITEXT *itext = NULL;
+
+ for (i = 0; i < itext_size; i++)
+ if (itext_info[i] && itext_info[i]->pointer == input_text)
+ {
+ itext = itext_info[i];
+ break;
+ }
+
+ if (!itext)
+ return;
+
+ if (offset > itext->offset)
+ {
+ write_region_to_macro_output (input_text, itext->offset, offset);
+ remember_itext (input_text, offset);
+ }
+}
+
+/* Only write this input text iff it appears in our itext list. */
+void
+maybe_write_itext (char *pointer, int offset)
+{
+ int i;
+ ITEXT *itext = NULL;
+
+ for (i = 0; i < itext_size; i++)
+ if (itext_info[i] && (itext_info[i]->pointer == pointer))
+ {
+ itext = itext_info[i];
+ break;
+ }
+
+ if (itext && (itext->offset < offset))
+ {
+ write_region_to_macro_output (itext->pointer, itext->offset, offset);
+ remember_itext (pointer, offset);
+ }
+}
+
+void
+write_region_to_macro_output (char *string, int start, int end)
+{
+ if (macro_expansion_output_stream)
+ fwrite (string + start, 1, end - start, macro_expansion_output_stream);
+}
+
+/* Aliases. */
+
+typedef struct alias_struct
+{
+ char *alias;
+ char *mapto;
+ struct alias_struct *next;
+} alias_type;
+
+static alias_type *aliases;
+
+/* @alias aname = cmdname */
+
+void
+cm_alias (void)
+{
+ alias_type *a = xmalloc (sizeof (alias_type));
+
+ skip_whitespace ();
+ get_until_in_line (0, "=", &(a->alias));
+ canon_white (a->alias);
+
+ discard_until ("=");
+ skip_whitespace ();
+ get_until_in_line (0, " ", &(a->mapto));
+
+ a->next = aliases;
+ aliases = a;
+}
+
+/* Perform an alias expansion. Called from read_command. */
+char *
+alias_expand (char *tok)
+{
+ alias_type *findit = aliases;
+
+ while (findit)
+ if (strcmp (findit->alias, tok) == 0)
+ {
+ free (tok);
+ return alias_expand (xstrdup (findit->mapto));
+ }
+ else
+ findit = findit->next;
+
+ return tok;
+}
+
+/* definfoenclose implementation. */
+
+/* This structure is used to track enclosure macros. When an enclosure
+ macro is recognized, a pointer to the enclosure block corresponding
+ to its name is saved in the brace element for its argument. */
+typedef struct enclose_struct
+{
+ char *enclose;
+ char *before;
+ char *after;
+ struct enclose_struct *next;
+} enclosure_type;
+
+static enclosure_type *enclosures;
+
+typedef struct enclosure_stack_struct
+{
+ enclosure_type *current;
+ struct enclosure_stack_struct *next;
+} enclosure_stack_type;
+
+static enclosure_stack_type *enclosure_stack;
+
+/* @definfoenclose */
+void
+cm_definfoenclose (void)
+{
+ enclosure_type *e = xmalloc (sizeof (enclosure_type));
+
+ skip_whitespace ();
+ get_until_in_line (1, ",", &(e->enclose));
+ discard_until (",");
+ get_until_in_line (0, ",", &(e->before));
+ discard_until (",");
+ get_until_in_line (0, "\n", &(e->after));
+
+ e->next = enclosures;
+ enclosures = e;
+}
+
+/* If TOK is an enclosure command, push it on the enclosure stack and
+ return 1. Else return 0. */
+
+int
+enclosure_command (char *tok)
+{
+ enclosure_type *findit = enclosures;
+
+ while (findit)
+ if (strcmp (findit->enclose, tok) == 0)
+ {
+ enclosure_stack_type *new = xmalloc (sizeof (enclosure_stack_type));
+ new->current = findit;
+ new->next = enclosure_stack;
+ enclosure_stack = new;
+
+ return 1;
+ }
+ else
+ findit = findit->next;
+
+ return 0;
+}
+
+/* actually perform the enclosure expansion */
+void
+enclosure_expand (int arg, int start, int end)
+{
+ if (arg == START)
+ add_word (enclosure_stack->current->before);
+ else
+ {
+ enclosure_stack_type *temp;
+
+ add_word (enclosure_stack->current->after);
+
+ temp = enclosure_stack;
+ enclosure_stack = enclosure_stack->next;
+ free (temp);
+ }
+}
diff --git a/makeinfo/macro.h b/makeinfo/macro.h
new file mode 100644
index 0000000..de9c65a
--- /dev/null
+++ b/makeinfo/macro.h
@@ -0,0 +1,77 @@
+/* macro.h -- declarations for macro.c.
+ $Id: macro.h,v 1.6 2007/07/01 21:20:32 karl Exp $
+
+ Copyright (C) 1998, 1999, 2007 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/>. */
+
+#ifndef MACRO_H
+#define MACRO_H
+
+extern FILE *macro_expansion_output_stream;
+extern char *macro_expansion_filename;
+extern int me_executing_string;
+extern int only_macro_expansion;
+
+/* Here is a structure used to remember input text strings and offsets
+ within them. */
+typedef struct {
+ char *pointer; /* Pointer to the input text. */
+ int offset; /* Offset of the last character output. */
+} ITEXT;
+
+/* Macro definitions for user-defined commands. */
+typedef struct {
+ char *name; /* Name of the macro. */
+ char **arglist; /* Args to replace when executing. */
+ int argcount; /* Number of args in arglist */
+ char *body; /* Macro body. */
+ char *source_file; /* File where this macro is defined. */
+ int source_lineno; /* Line number within FILENAME. */
+ int inhibited; /* Nonzero means make find_macro () fail. */
+ int flags; /* ME_RECURSE, etc. */
+} MACRO_DEF;
+
+/* flags for MACRO_DEF */
+#define ME_RECURSE 0x01
+
+extern void execute_macro (MACRO_DEF *def);
+extern MACRO_DEF *find_macro (char *name);
+extern char *expand_macro (MACRO_DEF *def);
+
+extern ITEXT *remember_itext (char *pointer, int offset);
+extern void forget_itext (char *pointer);
+extern void maybe_write_itext (char *pointer, int offset);
+extern void write_region_to_macro_output (char *string, int start, int end);
+extern void append_to_expansion_output (int offset);
+extern void me_append_before_this_command (void);
+extern void me_execute_string (char *execution_string);
+extern void me_execute_string_keep_state (char *execution_string,
+ char *append_string);
+
+extern char *alias_expand (char *tok);
+extern int enclosure_command (char *tok);
+extern void enclosure_expand (int arg, int start, int end);
+
+/* The @commands. */
+extern void cm_macro (void), cm_rmacro (void), cm_unmacro (void);
+extern void cm_alias (void), cm_definfoenclose (void);
+
+extern int array_len (char **array);
+extern void free_array (char **array);
+
+enum quote_type { quote_none, quote_single, quote_many };
+extern char **get_brace_args (enum quote_type type);
+
+#endif /* not MACRO_H */
diff --git a/makeinfo/makeinfo.c b/makeinfo/makeinfo.c
new file mode 100644
index 0000000..362687b
--- /dev/null
+++ b/makeinfo/makeinfo.c
@@ -0,0 +1,4397 @@
+/* makeinfo -- convert Texinfo source into other formats.
+ $Id: makeinfo.c,v 1.123 2008/08/28 22:53:30 karl Exp $
+
+ Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+ 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/>.
+
+ Original author of makeinfo: Brian Fox (bfox@ai.mit.edu). */
+
+#include "system.h"
+#include "getopt.h"
+#include "mbswidth.h"
+
+#define COMPILING_MAKEINFO
+#include "makeinfo.h"
+#include "cmds.h"
+#include "files.h"
+#include "float.h"
+#include "footnote.h"
+#include "html.h"
+#include "index.h"
+#include "insertion.h"
+#include "lang.h"
+#include "macro.h"
+#include "node.h"
+#include "sectioning.h"
+#include "toc.h"
+#include "xml.h"
+
+/* You can change some of the behavior of Makeinfo by changing the
+ following defines: */
+
+/* Define INDENT_PARAGRAPHS_IN_TABLE if you want the paragraphs which
+ appear within an @table, @ftable, or @itemize environment to have
+ standard paragraph indentation. Without this, such paragraphs have
+ no starting indentation. */
+/* #define INDENT_PARAGRAPHS_IN_TABLE */
+
+/* Define PARAGRAPH_START_INDENT to be the amount of indentation that
+ the first lines of paragraphs receive by default, where no other
+ value has been specified. Users can change this value on the command
+ line, with the --paragraph-indent option, or within the texinfo file,
+ with the @paragraphindent command. */
+#define PARAGRAPH_START_INDENT 3
+
+/* Define DEFAULT_PARAGRAPH_SPACING as the number of blank lines that you
+ wish to appear between paragraphs. A value of 1 creates a single blank
+ line between paragraphs. Paragraphs are defined by 2 or more consecutive
+ newlines in the input file (i.e., one or more blank lines). */
+#define DEFAULT_PARAGRAPH_SPACING 1
+
+/* Global variables. */
+
+/* The output file name. */
+char *output_filename = NULL;
+
+/* Name of the output file that the user elected to pass on the command line.
+ Such a name overrides any name found with the @setfilename command. */
+char *command_output_filename = NULL;
+static char *save_command_output_filename = NULL;
+
+/* The amount of indentation to add at the starts of paragraphs.
+ 0 means don't change existing indentation at paragraph starts.
+ > 0 is amount to indent new paragraphs by.
+ < 0 means indent to column zero by removing indentation if necessary.
+
+ This is normally zero, but some people prefer paragraph starts to be
+ somewhat more indented than paragraph bodies. A pretty value for
+ this is 3. */
+int paragraph_start_indent = PARAGRAPH_START_INDENT;
+
+/* Indentation that is pending insertion. We have this for hacking lines
+ which look blank, but contain whitespace. We want to treat those as
+ blank lines. */
+int pending_indent = 0;
+
+/* The index in our internal command table of the currently
+ executing command. */
+int command_index;
+
+/* A search string which is used to find the first @setfilename. */
+char setfilename_search[] =
+ { COMMAND_PREFIX,
+ 's', 'e', 't', 'f', 'i', 'l', 'e', 'n', 'a', 'm', 'e', 0 };
+
+/* Values for calling handle_variable_internal (). */
+#define SET 1
+#define CLEAR 2
+#define IFSET 3
+#define IFCLEAR 4
+
+/* Flags controlling the operation of the program. */
+
+/* Default is to remove output if there were errors. */
+int force = 0;
+
+/* Default is to notify users of bad choices. */
+int print_warnings = 1;
+
+/* Number of errors that we tolerate on a given fileset. */
+int max_error_level = 100;
+
+/* The actual last inserted character. Note that this may be something
+ other than NEWLINE even if last_char_was_newline is 1. */
+int last_inserted_character = 0;
+
+/* Nonzero means that a newline character has already been
+ inserted, so close_paragraph () should insert one less. */
+int line_already_broken = 0;
+
+/* When nonzero we have finished an insertion (see end_insertion ()) and we
+ want to ignore false continued paragraph closings. */
+int insertion_paragraph_closed = 0;
+
+/* Nonzero means attempt to make all of the lines have fill_column width. */
+int do_justification = 0;
+
+/* Nonzero means don't replace whitespace with &nbsp; in HTML mode. */
+int in_html_elt = 0;
+
+/* Nonzero means we are inserting a block level HTML element that must not be
+ enclosed in a <p>, such as <ul>, <ol> and <h?>. */
+int in_html_block_level_elt = 0;
+
+/* True when expanding a macro definition. */
+static int executing_macro = 0;
+
+/* True when we are inside a <li> block of a menu. */
+static int in_menu_item = 0;
+
+/* The column position of output_paragraph[0]. This is not saved and restored
+ in the multitable code because flush_output () is only called in environment
+ 0. */
+static int output_paragraph_start_column = 0;
+
+typedef struct brace_element
+{
+ struct brace_element *next;
+ COMMAND_FUNCTION *proc;
+ char *command;
+ int pos, line;
+ int in_fixed_width_font;
+} BRACE_ELEMENT;
+
+BRACE_ELEMENT *brace_stack = NULL;
+
+static void convert_from_file (char *name);
+static void convert_from_loaded_file (char *name);
+static void convert_from_stream (FILE *stream, char *name);
+static void do_flush_right_indentation (void);
+static void handle_variable (int action);
+static void handle_variable_internal (int action, char *name);
+static void init_brace_stack (void);
+static void init_internals (void);
+static void pop_and_call_brace (void);
+static void remember_brace (COMMAND_FUNCTION (*proc));
+static void write_trailer (char *filename, char *trailer);
+static int end_of_sentence_p (void);
+
+void maybe_update_execution_strings (char **text, unsigned int new_len);
+
+/* Error handling. */
+
+/* Number of errors encountered. */
+int errors_printed = 0;
+
+/* Remember that an error has been printed. If more than
+ max_error_level have been printed, then exit the program. */
+static void
+remember_error (void)
+{
+ errors_printed++;
+ if (max_error_level && (errors_printed > max_error_level))
+ {
+ fprintf (stderr, _("Too many errors! Gave up.\n"));
+ flush_file_stack ();
+ if (errors_printed - max_error_level < 2)
+ cm_bye ();
+ xexit (1);
+ }
+}
+
+/* Print the last error gotten from the file system. */
+int
+fs_error (char *filename)
+{
+ remember_error ();
+ perror (filename);
+ return 0;
+}
+
+/* Print an error message, and return false. */
+void
+#if defined (VA_FPRINTF) && __STDC__
+error (const char *format, ...)
+#else
+error (format, va_alist)
+ const char *format;
+ va_dcl
+#endif
+{
+#ifdef VA_FPRINTF
+ va_list ap;
+#endif
+
+ remember_error ();
+
+ VA_START (ap, format);
+#ifdef VA_FPRINTF
+ VA_FPRINTF (stderr, format, ap);
+#else
+ fprintf (stderr, format, a1, a2, a3, a4, a5, a6, a7, a8);
+#endif /* not VA_FPRINTF */
+ va_end (ap);
+
+ putc ('\n', stderr);
+}
+
+/* Just like error (), but print the input file and line number as well. */
+void
+#if defined (VA_FPRINTF) && __STDC__
+file_line_error (char *infile, int lno, const char *format, ...)
+#else
+file_line_error (infile, lno, format, va_alist)
+ char *infile;
+ int lno;
+ const char *format;
+ va_dcl
+#endif
+{
+#ifdef VA_FPRINTF
+ va_list ap;
+#endif
+
+ remember_error ();
+ fprintf (stderr, "%s:%d: ", infile, lno);
+
+ VA_START (ap, format);
+#ifdef VA_FPRINTF
+ VA_FPRINTF (stderr, format, ap);
+#else
+ fprintf (stderr, format, a1, a2, a3, a4, a5, a6, a7, a8);
+#endif /* not VA_FPRINTF */
+ va_end (ap);
+
+ fprintf (stderr, ".\n");
+}
+
+/* Just like file_line_error (), but take the input file and the line
+ number from global variables. */
+void
+#if defined (VA_FPRINTF) && __STDC__
+line_error (const char *format, ...)
+#else
+line_error (format, va_alist)
+ const char *format;
+ va_dcl
+#endif
+{
+#ifdef VA_FPRINTF
+ va_list ap;
+#endif
+
+ remember_error ();
+ fprintf (stderr, "%s:%d: ", input_filename, line_number);
+
+ VA_START (ap, format);
+#ifdef VA_FPRINTF
+ VA_FPRINTF (stderr, format, ap);
+#else
+ fprintf (stderr, format, a1, a2, a3, a4, a5, a6, a7, a8);
+#endif /* not VA_FPRINTF */
+ va_end (ap);
+
+ fprintf (stderr, ".\n");
+}
+
+void
+#if defined (VA_FPRINTF) && __STDC__
+warning (const char *format, ...)
+#else
+warning (format, va_alist)
+ const char *format;
+ va_dcl
+#endif
+{
+#ifdef VA_FPRINTF
+ va_list ap;
+#endif
+
+ if (print_warnings)
+ {
+ fprintf (stderr, _("%s:%d: warning: "), input_filename, line_number);
+
+ VA_START (ap, format);
+#ifdef VA_FPRINTF
+ VA_FPRINTF (stderr, format, ap);
+#else
+ fprintf (stderr, format, a1, a2, a3, a4, a5, a6, a7, a8);
+#endif /* not VA_FPRINTF */
+ va_end (ap);
+
+ fprintf (stderr, ".\n");
+ }
+}
+
+
+/* The other side of a malformed expression. */
+static void
+misplaced_brace (void)
+{
+ line_error (_("Misplaced %c"), '}');
+}
+
+/* Main. */
+
+/* Display the version info of this invocation of Makeinfo. */
+static void
+print_version_info (void)
+{
+ printf ("makeinfo (GNU %s) %s\n", PACKAGE, VERSION);
+}
+
+/* If EXIT_VALUE is zero, print the full usage message to stdout.
+ Otherwise, just say to use --help for more info.
+ Then exit with EXIT_VALUE. */
+static void
+usage (int exit_value)
+{
+ if (exit_value != 0)
+ fprintf (stderr, _("Try `%s --help' for more information.\n"), progname);
+ else
+ {
+ printf (_("Usage: %s [OPTION]... TEXINFO-FILE...\n"), progname);
+ puts ("");
+
+ puts (_("\
+Translate Texinfo source documentation to various other formats, by default\n\
+Info files suitable for reading online with Emacs or standalone GNU Info.\n"));
+
+ printf (_("\
+General options:\n\
+ --error-limit=NUM quit after NUM errors (default %d).\n\
+ --document-language=STR locale to use in translating Texinfo keywords\n\
+ for the output document (default C).\n\
+ --force preserve output even if errors.\n\
+ --help display this help and exit.\n\
+ --no-validate suppress node cross-reference validation.\n\
+ --no-warn suppress warnings (but not errors).\n\
+ -v, --verbose explain what is being done.\n\
+ --version display version information and exit.\n"),
+ max_error_level);
+ puts ("");
+
+ /* xgettext: no-wrap */
+ puts (_("\
+Output format selection (default is to produce Info):\n\
+ --docbook output Docbook XML rather than Info.\n\
+ --html output HTML rather than Info.\n\
+ --xml output Texinfo XML rather than Info.\n\
+ --plaintext output plain text rather than Info.\n\
+"));
+
+ puts (_("\
+General output options:\n\
+ -E, --macro-expand=FILE output macro-expanded source to FILE,\n\
+ ignoring any @setfilename.\n\
+ --no-headers suppress node separators, Node: lines, and menus\n\
+ from Info output (thus producing plain text)\n\
+ or from HTML (thus producing shorter output);\n\
+ also, write to standard output by default.\n\
+ --no-split suppress the splitting of Info or HTML output,\n\
+ generate only one output file.\n\
+ --number-sections output chapter and sectioning numbers.\n\
+ -o, --output=FILE output to FILE (or directory if split HTML).\n\
+"));
+
+ printf (_("\
+Options for Info and plain text:\n\
+ --disable-encoding do not output accented and special characters\n\
+ in Info output based on @documentencoding.\n\
+ --enable-encoding override --disable-encoding (default).\n\
+ --fill-column=NUM break Info lines at NUM characters (default %d).\n\
+ --footnote-style=STYLE output footnotes in Info according to STYLE:\n\
+ `separate' to put them in their own node;\n\
+ `end' to put them at the end of the node, in\n\
+ which they are defined (this is the default).\n\
+ --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %d).\n\
+ If VAL is `none', do not indent; if VAL is\n\
+ `asis', preserve existing indentation.\n\
+ --split-size=NUM split Info files at size NUM (default %d).\n"),
+ fill_column, paragraph_start_indent,
+ DEFAULT_SPLIT_SIZE);
+ puts ("");
+
+ puts (_("\
+Options for HTML:\n\
+ --css-include=FILE include FILE in HTML <style> output;\n\
+ read stdin if FILE is -.\n\
+ --css-ref=URL generate reference to a CSS file.\n\
+ --internal-links=FILE produce list of internal links in FILE.\n\
+ --transliterate-file-names\n\
+ produce file names in ASCII transliteration.\n\
+"));
+
+ printf (_("\
+Options for XML and Docbook:\n\
+ --output-indent=VAL indent XML elements by VAL spaces (default %d).\n\
+ If VAL is 0, ignorable whitespace is dropped.\n\
+"), xml_indentation_increment);
+ puts ("");
+
+ puts (_("\
+Input file options:\n\
+ --commands-in-node-names allow @ commands in node names.\n\
+ -D VAR define the variable VAR, as with @set.\n\
+ -I DIR append DIR to the @include search path.\n\
+ -P DIR prepend DIR to the @include search path.\n\
+ -U VAR undefine the variable VAR, as with @clear.\n\
+"));
+
+ puts (_("\
+Conditional processing in input:\n\
+ --ifdocbook process @ifdocbook and @docbook even if\n\
+ not generating Docbook.\n\
+ --ifhtml process @ifhtml and @html even if not generating HTML.\n\
+ --ifinfo process @ifinfo even if not generating Info.\n\
+ --ifplaintext process @ifplaintext even if not generating plain text.\n\
+ --iftex process @iftex and @tex; implies --no-split.\n\
+ --ifxml process @ifxml and @xml.\n\
+ --no-ifdocbook do not process @ifdocbook and @docbook text.\n\
+ --no-ifhtml do not process @ifhtml and @html text.\n\
+ --no-ifinfo do not process @ifinfo text.\n\
+ --no-ifplaintext do not process @ifplaintext text.\n\
+ --no-iftex do not process @iftex and @tex text.\n\
+ --no-ifxml do not process @ifxml and @xml text.\n\
+\n\
+ Also, for the --no-ifFORMAT options, do process @ifnotFORMAT text.\n\
+"));
+
+ puts (_("\
+ The defaults for the @if... conditionals depend on the output format:\n\
+ if generating HTML, --ifhtml is on and the others are off;\n\
+ if generating Info, --ifinfo is on and the others are off;\n\
+ if generating plain text, --ifplaintext is on and the others are off;\n\
+ if generating XML, --ifxml is on and the others are off.\n\
+"));
+
+ fputs (_("\
+Examples:\n\
+ makeinfo foo.texi write Info to foo's @setfilename\n\
+ makeinfo --html foo.texi write HTML to @setfilename\n\
+ makeinfo --xml foo.texi write Texinfo XML to @setfilename\n\
+ makeinfo --docbook foo.texi write DocBook XML to @setfilename\n\
+ makeinfo --no-headers foo.texi write plain text to standard output\n\
+\n\
+ makeinfo --html --no-headers foo.texi write html without node lines, menus\n\
+ makeinfo --number-sections foo.texi write Info with numbered sections\n\
+ makeinfo --no-split foo.texi write one Info file however big\n\
+"), stdout);
+
+ puts (_("\n\
+Email bug reports to bug-texinfo@gnu.org,\n\
+general questions and discussion to help-texinfo@gnu.org.\n\
+Texinfo home page: http://www.gnu.org/software/texinfo/"));
+
+ } /* end of full help */
+
+ xexit (exit_value);
+}
+
+#define OPT_CSSREF 256
+#define OPT_TRANSLITERATE_FILE_NAMES 257
+#define OPT_INTERNAL_LINKS 258
+
+struct option long_options[] =
+{
+ { "commands-in-node-names", 0, &expensive_validation, 1 },
+ { "css-include", 1, 0, 'C' },
+ { "css-ref", 1, 0, OPT_CSSREF },
+ { "docbook", 0, 0, 'd' },
+ { "disable-encoding", 0, &enable_encoding, 0 },
+ { "enable-encoding", 0, &enable_encoding, 1 },
+ { "document-language", 1, 0, 'l' },
+ { "error-limit", 1, 0, 'e' },
+ { "fill-column", 1, 0, 'f' },
+ { "footnote-style", 1, 0, 's' },
+ { "force", 0, &force, 1 },
+ { "help", 0, 0, 'h' },
+ { "html", 0, 0, 'w' },
+ { "ifdocbook", 0, &process_docbook, 1 },
+ { "ifhtml", 0, &process_html, 1 },
+ { "ifinfo", 0, &process_info, 1 },
+ { "ifplaintext", 0, &process_plaintext, 1 },
+ { "iftex", 0, &process_tex, 1 },
+ { "ifxml", 0, &process_xml, 1 },
+ { "internal-links", 1, 0, OPT_INTERNAL_LINKS },
+ { "macro-expand", 1, 0, 'E' },
+ { "no-headers", 0, &no_headers, 1 },
+ { "no-ifdocbook", 0, &process_docbook, 0 },
+ { "no-ifhtml", 0, &process_html, 0 },
+ { "no-ifinfo", 0, &process_info, 0 },
+ { "no-ifplaintext", 0, &process_plaintext, 0 },
+ { "no-iftex", 0, &process_tex, 0 },
+ { "no-ifxml", 0, &process_xml, 0 },
+ { "no-number-footnotes", 0, &number_footnotes, 0 },
+ { "no-number-sections", 0, &number_sections, 0 },
+ { "no-pointer-validate", 0, &validating, 0 },
+ { "no-split", 0, &splitting, 0 },
+ { "no-validate", 0, &validating, 0 },
+ { "no-warn", 0, &print_warnings, 0 },
+ { "number-footnotes", 0, &number_footnotes, 1 },
+ { "number-sections", 0, &number_sections, 1 },
+ { "output", 1, 0, 'o' },
+ { "output-indent", 1, 0, 'i' },
+ { "paragraph-indent", 1, 0, 'p' },
+ { "plaintext", 0, 0, 't' },
+ { "reference-limit", 1, 0, 'r' },
+ { "split-size", 1, 0, 'S'},
+ { "transliterate-file-names", 0, &transliterate_file_names, 1 },
+ { "verbose", 0, &verbose_mode, 1 },
+ { "version", 0, 0, 'V' },
+ { "xml", 0, 0, 'x' },
+ {NULL, 0, NULL, 0}
+};
+
+/* We use handle_variable_internal for -D and -U, and it depends on
+ execute_string, which depends on input_filename, which is not defined
+ while we are handling options. :-\ So we save these defines in this
+ struct, and handle them later. */
+typedef struct command_line_define
+{
+ struct command_line_define *next;
+ int action;
+ char *define;
+} COMMAND_LINE_DEFINE;
+
+static COMMAND_LINE_DEFINE *command_line_defines = NULL;
+
+/* For each file mentioned in the command line, process it, turning
+ Texinfo commands into wonderfully formatted output text. */
+int
+main (int argc, char *argv[])
+{
+ int c, ind;
+ int reading_from_stdin = 0;
+
+#ifdef HAVE_SETLOCALE
+ /* Do not use LC_ALL, because LC_NUMERIC screws up the scanf parsing
+ of the argument to @multicolumn. */
+ setlocale (LC_TIME, "");
+#ifdef LC_MESSAGES /* ultrix, djgpp 2.04 */
+ setlocale (LC_MESSAGES, "");
+#endif
+ setlocale (LC_CTYPE, "");
+ setlocale (LC_COLLATE, "");
+#endif
+
+#ifdef ENABLE_NLS
+ /* Set the text message domain. */
+ bindtextdomain (PACKAGE, LOCALEDIR);
+ textdomain (PACKAGE);
+#endif
+
+ /* If TEXINFO_OUTPUT_FORMAT envvar is set, use it to set default output.
+ Can be overridden with one of the output options. */
+ if (getenv ("TEXINFO_OUTPUT_FORMAT") != NULL)
+ {
+ if (STREQ (getenv ("TEXINFO_OUTPUT_FORMAT"), "docbook"))
+ {
+ splitting = 0;
+ html = 0;
+ docbook = 1;
+ xml = 1;
+ process_docbook = 1;
+ }
+ else if (STREQ (getenv ("TEXINFO_OUTPUT_FORMAT"), "html"))
+ {
+ html = 1;
+ docbook = 0;
+ xml = 0;
+ process_html = 1;
+ }
+ else if (STREQ (getenv ("TEXINFO_OUTPUT_FORMAT"), "info"))
+ {
+ html = 0;
+ docbook = 0;
+ xml = 0;
+ }
+ else if (STREQ (getenv ("TEXINFO_OUTPUT_FORMAT"), "plaintext"))
+ {
+ splitting = 0;
+ no_headers = 1;
+ html = 0;
+ docbook = 0;
+ xml = 0;
+ process_plaintext = 1;
+ }
+ else if (STREQ (getenv ("TEXINFO_OUTPUT_FORMAT"), "xml"))
+ {
+ splitting = 0;
+ html = 0;
+ docbook = 0;
+ xml = 1;
+ process_xml = 1;
+ }
+ else
+ fprintf (stderr,
+ _("%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"),
+ progname, getenv ("TEXINFO_OUTPUT_FORMAT"));
+ }
+
+ /* Parse argument flags from the input line. */
+ while ((c = getopt_long (argc, argv, "D:de:E:f:hI:i:o:p:P:r:s:t:U:vV:wx",
+ long_options, &ind)) != EOF)
+ {
+ if (c == 0 && long_options[ind].flag == 0)
+ c = long_options[ind].val;
+
+ switch (c)
+ {
+ case 'C': /* --css-include */
+ css_include = xstrdup (optarg);
+ break;
+
+ case OPT_CSSREF:
+ css_ref = xstrdup (optarg);
+ break;
+
+ case 'D':
+ case 'U':
+ /* User specified variable to set or clear. */
+ if (xml && !docbook)
+ {
+ COMMAND_LINE_DEFINE *new = xmalloc (sizeof (COMMAND_LINE_DEFINE));
+ new->action = (c == 'D') ? SET : CLEAR;
+ new->define = xstrdup (optarg);
+ new->next = command_line_defines;
+ command_line_defines = new;
+ }
+ else
+ handle_variable_internal ((c == 'D' ? SET : CLEAR), optarg);
+ break;
+
+ case 'd': /* --docbook */
+ splitting = 0;
+ xml = 1;
+ docbook = 1;
+ html = 0;
+ process_docbook = 1;
+ break;
+
+ case 'e': /* --error-limit */
+ if (sscanf (optarg, "%d", &max_error_level) != 1)
+ {
+ fprintf (stderr,
+ _("%s: %s arg must be numeric, not `%s'.\n"),
+ progname, "--error-limit", optarg);
+ usage (1);
+ }
+ break;
+
+ case 'E': /* --macro-expand */
+ if (!macro_expansion_output_stream)
+ {
+ macro_expansion_filename = optarg;
+ macro_expansion_output_stream
+ = strcmp (optarg, "-") == 0 ? stdout : fopen (optarg, "w");
+ if (!macro_expansion_output_stream)
+ error (_("%s: could not open macro expansion output `%s'"),
+ progname, optarg);
+ }
+ else
+ fprintf (stderr,
+ _("%s: ignoring second macro expansion output `%s'.\n"),
+ progname, optarg);
+ break;
+
+ case 'f': /* --fill-column */
+ if (sscanf (optarg, "%d", &fill_column) != 1)
+ {
+ fprintf (stderr,
+ _("%s: %s arg must be numeric, not `%s'.\n"),
+ progname, "--fill-column", optarg);
+ usage (1);
+ }
+ break;
+
+ case 'h': /* --help */
+ usage (0);
+ break;
+
+ case 'I':
+ /* Append user-specified dir to include file path. */
+ append_to_include_path (optarg);
+ break;
+
+ case 'l':
+ /* save the override language code */
+ document_language = xstrdup (optarg);
+ break;
+
+ case 'i':
+ if (sscanf (optarg, "%d", &xml_indentation_increment) != 1)
+ {
+ fprintf (stderr,
+ _("%s: %s arg must be numeric, not `%s'.\n"),
+ progname, "--output-indent", optarg);
+ usage (1);
+ }
+ break;
+
+ case OPT_INTERNAL_LINKS:
+ if (!internal_links_stream)
+ {
+ internal_links_filename = xstrdup (optarg);
+ internal_links_stream = strcmp (optarg, "-") == 0 ? stdout :
+ fopen (optarg, "w");
+ if (!internal_links_stream)
+ error (_("%s: could not open internal links output `%s'"),
+ progname, optarg);
+ }
+ else
+ fprintf (stderr,
+ _("%s: ignoring second internal links output `%s'.\n"),
+ progname, optarg);
+ break;
+
+ case 'o': /* --output */
+ command_output_filename = xstrdup (optarg);
+ save_command_output_filename = command_output_filename;
+ break;
+
+ case 'p': /* --paragraph-indent */
+ if (set_paragraph_indent (optarg) < 0)
+ {
+ fprintf (stderr,
+ _("%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"),
+ progname, optarg);
+ usage (1);
+ }
+ break;
+
+ case 'P':
+ /* Prepend user-specified include dir to include path. */
+ prepend_to_include_path (optarg);
+ break;
+
+ case 'r': /* was --reference-limit; obsolete, ignore */
+ break;
+
+ case 's': /* --footnote-style */
+ if (set_footnote_style (optarg) < 0)
+ {
+ fprintf (stderr,
+ _("%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"),
+ progname, optarg);
+ usage (1);
+ }
+ footnote_style_preset = 1;
+ break;
+
+ case 'S': /* --split-size */
+ if (sscanf (optarg, "%d", &split_size) != 1)
+ {
+ fprintf (stderr,
+ _("%s: %s arg must be numeric, not `%s'.\n"),
+ progname, "--split-size", optarg);
+ usage (1);
+ }
+ break;
+
+ case 't': /* --plaintext */
+ splitting = 0;
+ no_headers = 1;
+ html = 0;
+ docbook = 0;
+ xml = 0;
+ process_plaintext = 1;
+ break;
+
+ case 'v':
+ verbose_mode++;
+ break;
+
+ case 'V': /* --version */
+ print_version_info ();
+ puts ("");
+ printf (_("Copyright (C) %s Free Software Foundation, Inc.\n\
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n\
+This is free software: you are free to change and redistribute it.\n\
+There is NO WARRANTY, to the extent permitted by law.\n"),
+ "2008");
+ xexit (0);
+ break;
+
+ case 'w': /* --html */
+ xml = 0;
+ docbook = 0;
+ html = 1;
+ process_html = 1;
+ break;
+
+ case 'x': /* --xml */
+ splitting = 0;
+ html = 0;
+ docbook = 0;
+ xml = 1;
+ process_xml = 1;
+ break;
+
+ case '?':
+ usage (1);
+ break;
+ }
+ }
+
+ if (macro_expansion_output_stream)
+ validating = 0;
+
+ if (!validating)
+ expensive_validation = 0;
+
+ if (optind == argc)
+ {
+ /* Check to see if input is a file. If so, process that. */
+ if (!isatty (fileno (stdin)))
+ reading_from_stdin = 1;
+ else
+ {
+ fprintf (stderr, _("%s: missing file argument.\n"), progname);
+ usage (1);
+ }
+ }
+
+ if (no_headers)
+ {
+ /* If the user did not specify an output file, use stdout. */
+ if (!command_output_filename)
+ command_output_filename = xstrdup ("-");
+
+ if (html && splitting && !STREQ (command_output_filename, "-"))
+ { /* --no-headers --no-split --html indicates confusion. */
+ fprintf (stderr,
+ "%s: can't split --html output to `%s' with --no-headers.\n",
+ progname, command_output_filename);
+ usage (1);
+ }
+
+ /* --no-headers implies --no-split. */
+ splitting = 0;
+ }
+
+ if (process_info == -1)
+ { /* no explicit --[no-]ifinfo option, so we'll do @ifinfo
+ if we're generating info or (for compatibility) plain text. */
+ process_info = !html && !xml;
+ }
+
+ if (process_plaintext == -1)
+ { /* no explicit --[no-]ifplaintext option, so we'll do @ifplaintext
+ if we're generating plain text. */
+ process_plaintext = no_headers && !html && !xml;
+ }
+
+ if (verbose_mode)
+ print_version_info ();
+
+ /* Remaining arguments are file names of texinfo files.
+ Convert them, one by one. */
+ if (!reading_from_stdin)
+ {
+ while (optind != argc)
+ {
+ if (STREQ (argv[optind], "-"))
+ convert_from_stream (stdin, "stdin");
+ else
+ convert_from_file (argv[optind]);
+ optind++;
+ }
+ }
+ else
+ convert_from_stream (stdin, "stdin");
+
+ xexit (errors_printed ? 2 : 0);
+ return 0; /* Avoid bogus warnings. */
+}
+
+/* Hacking tokens and strings. */
+
+/* Return the next token as a string pointer. We cons the string. This
+ `token' means simply a command name. */
+
+/* = is so @alias works. ^ and _ are so macros can be used in math mode
+ without a space following. Possibly we should simply allow alpha, to
+ be compatible with TeX. */
+#define COMMAND_CHAR(c) (!cr_or_whitespace(c) \
+ && (c) != '{' \
+ && (c) != '}' \
+ && (c) != '=' \
+ && (c) != '_' \
+ && (c) != '^' \
+ )
+
+static char *
+read_token (void)
+{
+ int i, character;
+ char *result;
+
+ /* If the first character to be read is self-delimiting, then that
+ is the command itself. */
+ character = curchar ();
+ if (self_delimiting (character))
+ {
+ input_text_offset++;
+
+ if (character == '\n')
+ line_number++;
+
+ result = xstrdup (" ");
+ *result = character;
+ return result;
+ }
+
+ for (i = 0; ((input_text_offset != input_text_length)
+ && (character = curchar ())
+ && COMMAND_CHAR (character));
+ i++, input_text_offset++);
+ result = xmalloc (i + 1);
+ memcpy (result, &input_text[input_text_offset - i], i);
+ result[i] = 0;
+ return result;
+}
+
+/* Return nonzero if CHARACTER is self-delimiting. */
+int
+self_delimiting (int character)
+{
+ /* @; and @\ are not Texinfo commands, but they are listed here
+ anyway. I don't know why. --karl, 10aug96. */
+ return strchr ("~{|}`^\\@?=;:./-,*\'\" !\n\t", character) != NULL;
+}
+
+/* Clear whitespace from the front and end of string. */
+void
+canon_white (char *string)
+{
+ char *p = string;
+ unsigned len;
+
+ if (!*p)
+ return;
+
+ do
+ {
+ if (!cr_or_whitespace (*p))
+ break;
+ ++p;
+ }
+ while (*p);
+
+ len = strlen (p);
+ while (len && cr_or_whitespace (p[len-1]))
+ --len;
+
+ if (p != string)
+ memmove (string, p, len);
+
+ string[len] = 0;
+}
+
+/* Bash STRING, replacing all whitespace with just one space. */
+void
+fix_whitespace (char *string)
+{
+ char *temp = xmalloc (strlen (string) + 1);
+ int string_index = 0;
+ int temp_index = 0;
+ int c;
+
+ canon_white (string);
+
+ while (string[string_index])
+ {
+ c = temp[temp_index++] = string[string_index++];
+
+ if (c == ' ' || c == '\n' || c == '\t')
+ {
+ temp[temp_index - 1] = ' ';
+ while ((c = string[string_index]) && (c == ' ' ||
+ c == '\t' ||
+ c == '\n'))
+ string_index++;
+ }
+ }
+ temp[temp_index] = 0;
+ strcpy (string, temp);
+ free (temp);
+}
+
+/* Discard text until the desired string is found. The string is
+ included in the discarded text. */
+void
+discard_until (char *string)
+{
+ int temp = search_forward (string, input_text_offset);
+
+ int tt = (temp < 0) ? input_text_length : temp + strlen (string);
+ int from = input_text_offset;
+
+ /* Find out what line we are on. */
+ while (from != tt)
+ if (input_text[from++] == '\n')
+ line_number++;
+
+ if (temp < 0)
+ {
+ /* not found, move current position to end of string */
+ input_text_offset = input_text_length;
+ if (strcmp (string, "\n") != 0)
+ { /* Give a more descriptive feedback, if we are looking for ``@end ''
+ during macro execution. That means someone used a multiline
+ command as an argument to, say, @section ... style commands. */
+ char *end_block = xmalloc (8);
+ sprintf (end_block, "\n%cend ", COMMAND_PREFIX);
+ if (executing_string && strstr (string, end_block))
+ line_error (_("Multiline command %c%s used improperly"),
+ COMMAND_PREFIX, command);
+ else
+ line_error (_("Expected `%s'"), string);
+ free (end_block);
+ return;
+ }
+ }
+ else
+ /* found, move current position to after the found string */
+ input_text_offset = temp + strlen (string);
+}
+
+/* Read characters from the file until we are at MATCH.
+ Place the characters read into STRING.
+ On exit input_text_offset is after the match string.
+ Return the offset where the string starts. */
+int
+get_until (char *match, char **string)
+{
+ int len, current_point, x, new_point, tem;
+
+ current_point = x = input_text_offset;
+ new_point = search_forward (match, input_text_offset);
+
+ if (new_point < 0)
+ new_point = input_text_length;
+ len = new_point - current_point;
+
+ /* Keep track of which line number we are at. */
+ tem = new_point + (strlen (match) - 1);
+ while (x != tem)
+ if (input_text[x++] == '\n')
+ line_number++;
+
+ *string = xmalloc (len + 1);
+
+ memcpy (*string, &input_text[current_point], len);
+ (*string)[len] = 0;
+
+ /* Now leave input_text_offset in a consistent state. */
+ input_text_offset = tem;
+
+ if (input_text_offset > input_text_length)
+ input_text_offset = input_text_length;
+
+ return new_point;
+}
+
+/* Replace input_text[FROM .. TO] with its expansion. */
+void
+replace_with_expansion (int from, int *to)
+{
+ char *xp;
+ unsigned xp_len, new_len;
+ char *old_input = input_text;
+ unsigned raw_len = *to - from;
+ char *str;
+
+ /* The rest of the code here moves large buffers, so let's
+ not waste time if the input cannot possibly expand
+ into anything. Unfortunately, we cannot avoid expansion
+ when we see things like @code etc., even if they only
+ asked for expansion of macros, since any Texinfo command
+ can be potentially redefined with a macro. */
+ if (only_macro_expansion &&
+ memchr (input_text + from, COMMAND_PREFIX, raw_len) == 0)
+ return;
+
+ /* Get original string from input. */
+ str = xmalloc (raw_len + 1);
+ memcpy (str, input_text + from, raw_len);
+ str[raw_len] = 0;
+
+ /* We are going to relocate input_text, so we had better output
+ pending portion of input_text now, before the pointer changes. */
+ if (macro_expansion_output_stream && !executing_string
+ && !me_inhibit_expansion)
+ append_to_expansion_output (from);
+
+ /* Expand it. */
+ xp = expansion (str, 0);
+ xp_len = strlen (xp);
+ free (str);
+
+ /* Plunk the expansion into the middle of `input_text' --
+ which is terminated by a newline, not a null. Avoid
+ expensive move of the rest of the input if the expansion
+ has the same length as the original string. */
+ if (xp_len != raw_len)
+ {
+ new_len = from + xp_len + input_text_length - *to + 1;
+ if (executing_string)
+ { /* If we are in execute_string, we might need to update
+ the relevant element in the execution_strings[] array,
+ since it could have to be relocated from under our
+ feet. (input_text is reallocated here as well, if needed.) */
+ maybe_update_execution_strings (&input_text, new_len);
+ }
+ else if (new_len > input_text_length + 1)
+ /* Don't bother to realloc if we have enough space. */
+ input_text = xrealloc (input_text, new_len);
+
+ memmove (input_text + from + xp_len,
+ input_text + *to, input_text_length - *to + 1);
+
+ *to += xp_len - raw_len;
+ /* Since we change input_text_length here, the comparison above
+ isn't really valid, but it seems the worst that might happen is
+ an extra xrealloc or two, so let's not worry. */
+ input_text_length += xp_len - raw_len;
+ }
+ memcpy (input_text + from, xp, xp_len);
+ free (xp);
+
+ /* Synchronize the macro-expansion pointers with our new input_text. */
+ if (input_text != old_input)
+ forget_itext (old_input);
+ if (macro_expansion_output_stream && !executing_string)
+ remember_itext (input_text, from);
+}
+
+/* Read characters from the file until we are at MATCH or end of line.
+ Place the characters read into STRING. If EXPAND is nonzero,
+ expand the text before looking for MATCH for those cases where
+ MATCH might be produced by some macro. */
+void
+get_until_in_line (int expand, char *match, char **string)
+{
+ int real_bottom = input_text_length;
+ int limit = search_forward ("\n", input_text_offset);
+ if (limit < 0)
+ limit = input_text_length;
+
+ /* Replace input_text[input_text_offset .. limit-1] with its expansion.
+ This allows the node names and menu entries themselves to be
+ constructed via a macro, as in:
+ @macro foo{p, q}
+ Together: \p\ & \q\.
+ @end macro
+
+ @node @foo{A,B}, next, prev, top
+
+ Otherwise, the `,' separating the macro args A and B is taken as
+ the node argument separator, so the node name is `@foo{A'. This
+ expansion is only necessary on the first call, since we expand the
+ whole line then. */
+ if (expand)
+ {
+ replace_with_expansion (input_text_offset, &limit);
+ }
+
+ real_bottom = input_text_length;
+ input_text_length = limit;
+ get_until (match, string);
+ input_text_length = real_bottom;
+}
+
+void
+get_rest_of_line (int expand, char **string)
+{
+ xml_no_para ++;
+ if (expand)
+ {
+ char *tem;
+
+ /* Don't expand non-macros in input, since we want them
+ intact in the macro-expanded output. */
+ only_macro_expansion++;
+ get_until_in_line (1, "\n", &tem);
+ only_macro_expansion--;
+ *string = expansion (tem, 0);
+ free (tem);
+ }
+ else
+ get_until_in_line (0, "\n", string);
+
+ canon_white (*string);
+
+ if (curchar () == '\n') /* as opposed to the end of the file... */
+ {
+ line_number++;
+ input_text_offset++;
+ }
+ xml_no_para --;
+}
+
+/* Backup the input pointer to the previous character, keeping track
+ of the current line number. */
+void
+backup_input_pointer (void)
+{
+ if (input_text_offset)
+ {
+ input_text_offset--;
+ if (curchar () == '\n')
+ line_number--;
+ }
+}
+
+/* Read characters from the file until we are at MATCH or closing brace.
+ Place the characters read into STRING. */
+void
+get_until_in_braces (char *match, char **string)
+{
+ char *temp;
+ int i, brace = 0;
+ int match_len = strlen (match);
+
+ for (i = input_text_offset; i < input_text_length; i++)
+ {
+ if (i < input_text_length - 1 && input_text[i] == '@')
+ {
+ i++; /* skip commands like @, and @{ */
+ continue;
+ }
+ else if (input_text[i] == '{')
+ brace++;
+ else if (input_text[i] == '}')
+ {
+ brace--;
+ /* If looking for a brace, don't stop at the interior brace,
+ like after "baz" in "@foo{something @bar{baz} more}". */
+ if (brace == 0)
+ continue;
+ }
+ else if (input_text[i] == '\n')
+ line_number++;
+
+ if (brace < 0 ||
+ (brace == 0 && strncmp (input_text + i, match, match_len) == 0))
+ break;
+ }
+
+ match_len = i - input_text_offset;
+ temp = xmalloc (2 + match_len);
+ memcpy (temp, input_text + input_text_offset, match_len);
+ temp[match_len] = 0;
+ input_text_offset = i;
+ *string = temp;
+}
+
+
+
+/* Converting a file. */
+
+/* Convert the file named by NAME. The output is saved on the file
+ named as the argument to the @setfilename command. */
+static char *suffixes[] = {
+ /* ".txi" is checked first so that on 8+3 DOS filesystems, if they
+ have "texinfo.txi" and "texinfo.tex" in the same directory, the
+ former is used rather than the latter, due to file name truncation. */
+ ".txi",
+ ".texinfo",
+ ".texi",
+ ".txinfo",
+ "",
+ NULL
+};
+
+static void
+initialize_conversion (void)
+{
+ init_tag_table ();
+ init_indices ();
+ init_internals ();
+ init_paragraph ();
+
+ /* This is used for splitting the output file and for doing section
+ headings. It was previously initialized in `init_paragraph', but its
+ use there loses with the `init_paragraph' calls done by the
+ multitable code; the tag indices get reset to zero. */
+ output_position = 0;
+}
+
+/* Reverse the chain of structures in LIST. Output the new head
+ of the chain. You should always assign the output value of this
+ function to something, or you will lose the chain. */
+GENERIC_LIST *
+reverse_list (GENERIC_LIST *list)
+{
+ GENERIC_LIST *next;
+ GENERIC_LIST *prev = NULL;
+
+ while (list)
+ {
+ next = list->next;
+ list->next = prev;
+ prev = list;
+ list = next;
+ }
+ return prev;
+}
+
+/* We read in multiples of 4k, simply because it is a typical pipe size
+ on unix systems. */
+#define READ_BUFFER_GROWTH (4 * 4096)
+
+/* Convert the Texinfo file coming from the open stream STREAM. Assume the
+ source of the stream is named NAME. */
+static void
+convert_from_stream (FILE *stream, char *name)
+{
+ char *buffer = NULL;
+ int buffer_offset = 0, buffer_size = 0;
+
+ initialize_conversion ();
+
+ /* Read until the end of the stream. This isn't strictly correct, since
+ the texinfo input may end before the stream ends, but it is a quick
+ working heuristic. */
+ while (!feof (stream))
+ {
+ int count;
+
+ if (buffer_offset + (READ_BUFFER_GROWTH + 1) >= buffer_size)
+ buffer = (char *)
+ xrealloc (buffer, (buffer_size += READ_BUFFER_GROWTH));
+
+ count = fread (buffer + buffer_offset, 1, READ_BUFFER_GROWTH, stream);
+
+ if (count < 0)
+ {
+ perror (name);
+ xexit (1);
+ }
+
+ buffer_offset += count;
+ if (count == 0)
+ break;
+ }
+
+ /* Set the globals to the new file. */
+ input_text = buffer;
+ input_text_length = buffer_offset;
+ input_filename = xstrdup (name);
+ node_filename = xstrdup (name);
+ input_text_offset = 0;
+ line_number = 1;
+
+ /* Not strictly necessary. This magic prevents read_token () from doing
+ extra unnecessary work each time it is called (that is a lot of times).
+ The INPUT_TEXT_LENGTH is one past the actual end of the text. */
+ input_text[input_text_length] = '\n';
+
+ convert_from_loaded_file (name);
+}
+
+static void
+convert_from_file (char *name)
+{
+ int i;
+ char *filename = xmalloc (strlen (name) + 50);
+
+ /* Prepend NAME's directory to the search path, so relative links work. */
+ prepend_to_include_path (pathname_part (name));
+
+ initialize_conversion ();
+
+ /* Try to load the file specified by NAME, concatenated with our
+ various suffixes. Prefer files like `makeinfo.texi' to `makeinfo'. */
+ for (i = 0; suffixes[i]; i++)
+ {
+ strcpy (filename, name);
+ strcat (filename, suffixes[i]);
+
+ if (find_and_load (filename, 1))
+ break;
+ }
+
+ if (!suffixes[i])
+ {
+ fs_error (name);
+ free (filename);
+ return;
+ }
+
+ /* `find_and_load' (when successful) clobbers this global with new
+ memory. We're about to reset it, so may as well free first. */
+ free (input_filename);
+
+ /* Set the current filename. */
+ input_filename = filename;
+
+ /* Do the main conversion. */
+ convert_from_loaded_file (name);
+
+ /* Pop the prepended path, so multiple filenames in the
+ command line do not screw each others include paths. */
+ pop_path_from_include_path ();
+}
+
+static int
+create_html_directory (char *dir, int can_remove_file)
+{
+ struct stat st;
+
+ /* Already exists. */
+ if (stat (dir, &st) == 0)
+ {
+ /* And it's a directory, so silently reuse it. */
+ if (S_ISDIR (st.st_mode))
+ return 1;
+ /* Not a directory, so move it out of the way if we are allowed. */
+ else if (can_remove_file)
+ {
+ if (unlink (dir) != 0)
+ return 0;
+ }
+ else
+ return 0;
+ }
+
+ if (mkdir (dir, 0777) == 0)
+ /* Success! */
+ return 1;
+ else
+ return 0;
+}
+
+/* Given OUTPUT_FILENAME == ``/foo/bar/baz.html'', return
+ "/foo/bar/baz/baz.html". This routine is called only if html && splitting.
+
+ Split html output goes into the subdirectory of the toplevel
+ filename, without extension. For example:
+ @setfilename foo.info
+ produces output in files foo/index.html, foo/second-node.html, ...
+
+ But if the user said -o foo.whatever on the cmd line, then use
+ foo.whatever unchanged. */
+
+static char *
+insert_toplevel_subdirectory (char *output_filename)
+{
+ static const char index_name[] = "index.html";
+ char *dir, *subdir, *base, *basename, *p;
+ char buf[PATH_MAX];
+ const int index_len = sizeof (index_name) - 1;
+
+ strcpy (buf, output_filename);
+ dir = pathname_part (buf); /* directory of output_filename */
+ base = filename_part (buf); /* strips suffix, too */
+ basename = xstrdup (base); /* remember real @setfilename name */
+ p = dir + strlen (dir) - 1;
+ if (p > dir && IS_SLASH (*p))
+ *p = 0;
+ p = strrchr (base, '.');
+ if (p)
+ *p = 0;
+
+ /* Split html output goes into subdirectory of toplevel name. */
+ if (save_command_output_filename
+ && STREQ (output_filename, save_command_output_filename))
+ subdir = basename; /* from user, use unchanged */
+ else
+ subdir = base; /* implicit, omit suffix */
+
+ free (output_filename);
+ output_filename = xmalloc (strlen (dir) + 1
+ + strlen (basename) + 1
+ + index_len
+ + 1);
+ strcpy (output_filename, dir);
+ if (strlen (dir))
+ strcat (output_filename, "/");
+ strcat (output_filename, subdir);
+
+ /* First try, do not remove existing file. */
+ if (!create_html_directory (output_filename, 0))
+ {
+ /* That failed, try subdir name with .html.
+ Remove it if it exists. */
+ strcpy (output_filename, dir);
+ if (strlen (dir))
+ strcat (output_filename, "/");
+ strcat (output_filename, basename);
+
+ if (!create_html_directory (output_filename, 1))
+ {
+ /* Last try failed too :-\ */
+ line_error (_("Can't create directory `%s': %s"),
+ output_filename, strerror (errno));
+ xexit (1);
+ }
+ }
+
+ strcat (output_filename, "/");
+ strcat (output_filename, index_name);
+ return output_filename;
+}
+
+/* FIXME: this is way too hairy */
+static void
+convert_from_loaded_file (char *name)
+{
+ char *real_output_filename = NULL;
+
+ remember_itext (input_text, 0);
+
+ input_text_offset = 0;
+
+ /* Avoid the `\input texinfo' line in HTML output (assuming it starts
+ the file). */
+ if (looking_at ("\\input"))
+ discard_until ("\n");
+
+ /* Search this file looking for the special string which starts conversion.
+ Once found, we may truly begin. */
+ while (input_text_offset >= 0)
+ {
+ input_text_offset =
+ search_forward (setfilename_search, input_text_offset);
+
+ if (input_text_offset == 0
+ || (input_text_offset > 0
+ && input_text[input_text_offset -1] == '\n'))
+ break;
+ else if (input_text_offset > 0)
+ input_text_offset++;
+ }
+
+ if (input_text_offset < 0)
+ {
+ if (!command_output_filename)
+ {
+#if defined (REQUIRE_SETFILENAME)
+ error (_("No `%s' found in `%s'"), setfilename_search, name);
+ goto finished;
+#else
+ command_output_filename = output_name_from_input_name (name);
+#endif /* !REQUIRE_SETFILENAME */
+ }
+
+ {
+ int i, end_of_first_line;
+
+ /* Find the end of the first line in the file. */
+ for (i = 0; i < input_text_length - 1; i++)
+ if (input_text[i] == '\n')
+ break;
+
+ end_of_first_line = i + 1;
+
+ for (i = 0; i < end_of_first_line; i++)
+ {
+ if ((input_text[i] == '\\') &&
+ (strncmp (input_text + i + 1, "input", 5) == 0))
+ {
+ input_text_offset = i;
+ break;
+ }
+ }
+ }
+ }
+ else
+ input_text_offset += strlen (setfilename_search);
+
+ if (!command_output_filename)
+ {
+ get_until ("\n", &output_filename); /* read rest of line */
+ if (html || xml)
+ { /* Change any extension to .html or .xml. */
+ char *html_name, *directory_part, *basename_part, *temp;
+
+ canon_white (output_filename);
+ directory_part = pathname_part (output_filename);
+
+ basename_part = filename_part (output_filename);
+
+ /* Zap any existing extension. */
+ temp = strrchr (basename_part, '.');
+ if (temp)
+ *temp = 0;
+
+ /* Construct new filename. */
+ html_name = xmalloc (strlen (directory_part)
+ + strlen (basename_part) + 6);
+ strcpy (html_name, directory_part);
+ strcat (html_name, basename_part);
+ strcat (html_name, html ? ".html" : ".xml");
+
+ /* Replace name from @setfilename with the html name. */
+ free (output_filename);
+ output_filename = html_name;
+ }
+ }
+ else
+ {
+ if (input_text_offset != -1)
+ discard_until ("\n");
+ else
+ input_text_offset = 0;
+
+ real_output_filename = output_filename = command_output_filename;
+ command_output_filename = NULL; /* for included files or whatever */
+ }
+
+ canon_white (output_filename);
+ toplevel_output_filename = xstrdup (output_filename);
+
+ if (real_output_filename && strcmp (real_output_filename, "-") == 0)
+ {
+ if (macro_expansion_filename
+ && strcmp (macro_expansion_filename, "-") == 0)
+ {
+ fprintf (stderr,
+ _("%s: Skipping macro expansion to stdout as Info output is going there.\n"),
+ progname);
+ macro_expansion_output_stream = NULL;
+ }
+ real_output_filename = xstrdup (real_output_filename);
+ output_stream = stdout;
+ splitting = 0; /* Cannot split when writing to stdout. */
+ }
+ else
+ {
+ if (html && splitting)
+ {
+ if (FILENAME_CMP (output_filename, NULL_DEVICE) == 0
+ || FILENAME_CMP (output_filename, ALSO_NULL_DEVICE) == 0)
+ splitting = 0;
+ else
+ output_filename = insert_toplevel_subdirectory (output_filename);
+ real_output_filename = xstrdup (output_filename);
+ }
+ else if (!real_output_filename)
+ real_output_filename = expand_filename (output_filename, name);
+ else
+ real_output_filename = xstrdup (real_output_filename);
+
+ output_stream = fopen (real_output_filename, "w");
+ }
+
+ set_current_output_filename (real_output_filename);
+
+ if (verbose_mode)
+ printf (_("Making %s file `%s' from `%s'.\n"),
+ no_headers ? "text"
+ : html ? "HTML"
+ : xml ? "XML"
+ : "info",
+ output_filename, input_filename);
+
+ if (output_stream == NULL)
+ {
+ fs_error (real_output_filename);
+ goto finished;
+ }
+
+ if (xml)
+ xml_begin_document (filename_part (output_filename));
+
+ /* Make the displayable filename from output_filename. Only the base
+ portion of the filename need be displayed. */
+ flush_output (); /* in case there was no @bye */
+ if (output_stream != stdout)
+ pretty_output_filename = filename_part (output_filename);
+ else
+ pretty_output_filename = xstrdup ("stdout");
+
+ /* For this file only, count the number of newlines from the top of
+ the file to here. This way, we keep track of line numbers for
+ error reporting. Line_number starts at 1, since the user isn't
+ zero-based. */
+ {
+ int temp = 0;
+ line_number = 1;
+ while (temp != input_text_offset)
+ if (input_text[temp++] == '\n')
+ line_number++;
+ }
+
+ if (xml && !docbook)
+ {
+ /* Just before the real main loop, let's handle the defines. */
+ COMMAND_LINE_DEFINE *temp;
+
+ for (temp = command_line_defines; temp; temp = temp->next)
+ {
+ handle_variable_internal (temp->action, temp->define);
+ free(temp->define);
+ }
+ }
+
+ reader_loop ();
+ if (xml)
+ xml_end_document ();
+
+
+finished:
+ discard_insertions (0);
+ close_paragraph ();
+ flush_file_stack ();
+
+ if (macro_expansion_output_stream)
+ {
+ fclose (macro_expansion_output_stream);
+ if (errors_printed && !force
+ && strcmp (macro_expansion_filename, "-") != 0
+ && FILENAME_CMP (macro_expansion_filename, NULL_DEVICE) != 0
+ && FILENAME_CMP (macro_expansion_filename, ALSO_NULL_DEVICE) != 0)
+ {
+ fprintf (stderr,
+_("%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"),
+ progname, macro_expansion_filename);
+ if (unlink (macro_expansion_filename) < 0)
+ perror (macro_expansion_filename);
+ }
+ }
+
+ if (output_stream)
+ {
+ output_pending_notes ();
+
+ if (html)
+ {
+ no_indent = 1;
+ start_paragraph ();
+ add_word ("</body></html>\n");
+ close_paragraph ();
+ }
+
+ /* Write stuff makeinfo generates after @bye, ie. info_trailer. */
+ flush_output ();
+
+ if (output_stream != stdout)
+ if (fclose (output_stream) != 0)
+ fs_error (real_output_filename);
+
+ /* If validating, then validate the entire file right now. */
+ if (validating)
+ validate_file (tag_table);
+
+ handle_delayed_writes ();
+
+ if (tag_table)
+ {
+ tag_table = (TAG_ENTRY *) reverse_list ((GENERIC_LIST *) tag_table);
+ if (!no_headers && !html && !STREQ (current_output_filename, "-"))
+ write_tag_table (real_output_filename);
+ }
+
+ /* Maybe we want local variables in info output. Must be after
+ tag table, since otherwise usually Emacs will not see it. */
+ write_trailer (real_output_filename, info_trailer ());
+
+ if (splitting && !html && (!errors_printed || force))
+ {
+ clean_old_split_files (real_output_filename);
+ split_file (real_output_filename, split_size);
+ }
+ else if (errors_printed
+ && !force
+ && strcmp (real_output_filename, "-") != 0
+ && FILENAME_CMP (real_output_filename, NULL_DEVICE) != 0
+ && FILENAME_CMP (real_output_filename, ALSO_NULL_DEVICE) != 0)
+ { /* If there were errors, and no --force, remove the output. */
+ fprintf (stderr,
+ _("%s: Removing output file `%s' due to errors; use --force to preserve.\n"),
+ progname, real_output_filename);
+ if (unlink (real_output_filename) < 0)
+ perror (real_output_filename);
+ }
+ }
+
+ if (internal_links_stream)
+ {
+ if (internal_links_stream != stdout
+ && fclose (internal_links_stream) != 0)
+ fs_error(internal_links_filename);
+ internal_links_stream = NULL;
+ if (errors_printed && !force
+ && strcmp (internal_links_filename, "-") != 0
+ && FILENAME_CMP (internal_links_filename, NULL_DEVICE) != 0
+ && FILENAME_CMP (internal_links_filename, ALSO_NULL_DEVICE) != 0)
+ {
+ fprintf (stderr,
+_("%s: Removing internal links output file `%s' due to errors; use --force to preserve.\n"),
+ progname, internal_links_filename);
+ if (unlink (internal_links_filename) < 0)
+ perror (internal_links_filename);
+ }
+ }
+
+ free (real_output_filename);
+}
+
+/* If enable_encoding is set and @documentencoding is used, return a
+ Local Variables section (as a malloc-ed string) so that Emacs'
+ locale features can work. Else return NULL. */
+char *
+info_trailer (void)
+{
+ char *encoding;
+
+ if (!enable_encoding)
+ return NULL;
+
+ encoding = current_document_encoding ();
+
+ if (encoding && *encoding)
+ {
+#define LV_FMT "\n\037\nLocal Variables:\ncoding: %s\nEnd:\n"
+ char *lv = xmalloc (sizeof (LV_FMT) + strlen (encoding));
+ sprintf (lv, LV_FMT, encoding);
+ free (encoding);
+ return lv;
+ }
+
+ free (encoding);
+ return NULL;
+}
+
+/* Append TRAILER to FILENAME for Info and HTML output. Include HTML
+ comments if needed. */
+static void
+write_trailer (char *filename, char *trailer)
+{
+ if (!trailer || xml || docbook)
+ return;
+
+ if (output_stream != stdout)
+ output_stream = fopen (filename, "a");
+ if (!output_stream)
+ {
+ fs_error (filename);
+ return;
+ }
+
+ if (html)
+ fwrite ("<!--", 1, 4, output_stream);
+
+ fwrite (trailer, 1, strlen (trailer), output_stream);
+ free (trailer);
+
+ if (html)
+ fwrite ("\n-->\n", 1, 5, output_stream);
+
+ if (output_stream != stdout)
+ if (fclose (output_stream) != 0)
+ fs_error (filename);
+}
+
+
+void
+free_and_clear (char **pointer)
+{
+ if (*pointer)
+ {
+ free (*pointer);
+ *pointer = NULL;
+ }
+}
+
+ /* Initialize some state. */
+static void
+init_internals (void)
+{
+ free_and_clear (&output_filename);
+ free_and_clear (&command);
+ free_and_clear (&input_filename);
+ free_node_references ();
+ free_node_node_references ();
+ toc_free ();
+ init_insertion_stack ();
+ init_brace_stack ();
+ current_node = NULL; /* sometimes already freed */
+ command_index = 0;
+ in_menu = 0;
+ in_detailmenu = 0;
+ top_node_seen = 0;
+ non_top_node_seen = 0;
+ node_number = -1;
+}
+
+void
+init_paragraph (void)
+{
+ if (output_paragraph)
+ free (output_paragraph);
+ output_paragraph = xmalloc (paragraph_buffer_len);
+ output_paragraph[0] = 0;
+ output_paragraph_offset = 0;
+ output_paragraph_start_column = 0;
+ paragraph_is_open = 0;
+ current_indent = 0;
+ meta_char_pos = 0;
+}
+
+/* This is called from `reader_loop' when we are at the * beginning a
+ menu line. */
+
+static void
+handle_menu_entry (void)
+{
+ char *tem;
+
+ /* Ugh, glean_node_from_menu wants to read the * itself. */
+ input_text_offset--;
+
+ /* Find node name in menu entry and save it in references list for
+ later validation. Use followed_reference type for detailmenu
+ references since we don't want to use them for default node pointers. */
+ tem = glean_node_from_menu (1, in_detailmenu
+ ? followed_reference : menu_reference);
+
+ if (html && tem)
+ { /* Start a menu item with the cleaned-up line. Put an anchor
+ around the start text (before `:' or the node name). */
+ char *string;
+
+ discard_until ("* ");
+
+ /* The line number was already incremented in reader_loop when we
+ saw the newline, and discard_until has now incremented again. */
+ line_number--;
+
+ if (had_menu_commentary)
+ {
+ add_html_block_elt ("<ul class=\"menu\">\n");
+ had_menu_commentary = 0;
+ in_paragraph = 0;
+ }
+
+ if (in_paragraph)
+ {
+ add_html_block_elt ("</p>\n");
+ add_html_block_elt ("<ul class=\"menu\">\n");
+ in_paragraph = 0;
+ }
+
+ in_menu_item = 1;
+
+ add_html_block_elt ("<li><a");
+ if (next_menu_item_number <= 9)
+ {
+ add_word(" accesskey=");
+ add_word_args("\"%d\"", next_menu_item_number);
+ next_menu_item_number++;
+ }
+ add_word (" href=\"");
+ string = expansion (tem, 0);
+ add_anchor_name (string, 1);
+ add_word ("\">");
+ free (string);
+
+ /* The menu item may use macros, so expand them now. */
+ only_macro_expansion++;
+ get_until_in_line (1, ":", &string);
+ only_macro_expansion--;
+ execute_string ("%s", string); /* get escaping done */
+ free (string);
+
+ add_word ("</a>");
+
+ if (looking_at ("::"))
+ discard_until (":");
+ else
+ { /* discard the node name */
+ get_until_in_line (0, ".", &string);
+ free (string);
+ }
+ input_text_offset++; /* discard the second colon or the period */
+
+ /* Insert a colon only if there is a description of this menu item. */
+ {
+ int save_input_text_offset = input_text_offset;
+ int save_line_number = line_number;
+ char *test_string;
+ get_rest_of_line (0, &test_string);
+ if (strlen (test_string) > 0)
+ add_word (": ");
+ input_text_offset = save_input_text_offset;
+ line_number = save_line_number;
+ }
+ }
+ else if (xml && tem)
+ {
+ xml_start_menu_entry (tem);
+ }
+ else if (tem)
+ { /* For Info output, we can just use the input and the main case in
+ reader_loop where we output what comes in. Just move off the *
+ so the next time through reader_loop we don't end up back here. */
+ add_char ('*');
+ input_text_offset += 2; /* undo the pointer back-up above. */
+ }
+
+ if (tem)
+ free (tem);
+}
+
+/* Find the command corresponding to STRING. If the command is found,
+ return a pointer to the data structure. Otherwise return -1. */
+static COMMAND *
+get_command_entry (char *string)
+{
+ int i;
+
+ for (i = 0; command_table[i].name; i++)
+ if (strcmp (command_table[i].name, string) == 0)
+ return &command_table[i];
+
+ /* This command is not in our predefined command table. Perhaps
+ it is a user defined command. */
+ for (i = 0; i < user_command_array_len; i++)
+ if (user_command_array[i] &&
+ (strcmp (user_command_array[i]->name, string) == 0))
+ return user_command_array[i];
+
+ /* We never heard of this command. */
+ return (COMMAND *) -1;
+}
+
+
+/* input_text_offset is right at the command prefix character.
+ Read the next token to determine what to do. Return zero
+ if there's no known command or macro after the prefix character. */
+static int
+read_command (void)
+{
+ COMMAND *entry;
+ int old_text_offset = input_text_offset++;
+
+ free_and_clear (&command);
+ command = read_token ();
+
+ /* Check to see if this command is a macro. If so, execute it here. */
+ {
+ MACRO_DEF *def;
+
+ def = find_macro (command);
+
+ if (def)
+ {
+ /* We disallow recursive use of a macro call. Inhibit the expansion
+ of this macro during the life of its execution. */
+ if (!(def->flags & ME_RECURSE))
+ def->inhibited = 1;
+
+ executing_macro++;
+ execute_macro (def);
+ executing_macro--;
+
+ if (!(def->flags & ME_RECURSE))
+ def->inhibited = 0;
+
+ return 1;
+ }
+ }
+
+ if (only_macro_expansion)
+ {
+ /* Back up to the place where we were called, so the
+ caller will have a chance to process this non-macro. */
+ input_text_offset = old_text_offset;
+ return 0;
+ }
+
+ /* Perform alias expansion */
+ command = alias_expand (command);
+
+ if (enclosure_command (command))
+ {
+ remember_brace (enclosure_expand);
+ enclosure_expand (START, output_paragraph_offset, 0);
+ return 0;
+ }
+
+ entry = get_command_entry (command);
+ if (entry == (COMMAND *)-1)
+ {
+ line_error (_("Unknown command `%s'"), command);
+ return 0;
+ }
+
+ if (entry->argument_in_braces == BRACE_ARGS)
+ remember_brace (entry->proc);
+ else if (entry->argument_in_braces == MAYBE_BRACE_ARGS)
+ {
+ if (curchar () == '{')
+ remember_brace (entry->proc);
+ else
+ { /* No braces, so arg is next char. */
+ int ch;
+ int saved_offset = output_paragraph_offset;
+ (*(entry->proc)) (START, output_paragraph_offset, 0);
+
+ /* Possibilities left for the next character: @ (error), }
+ (error), whitespace (skip) anything else (normal char). */
+ skip_whitespace ();
+ ch = curchar ();
+ if (ch == '@')
+ {
+ line_error (_("Use braces to give a command as an argument to @%s"),
+ entry->name);
+ return 0;
+ }
+ else if (ch == '}')
+ {
+ /* Our caller will give the error message, because this }
+ won't match anything. */
+ return 0;
+ }
+
+ add_char (ch);
+ input_text_offset++;
+ (*(entry->proc)) (END, saved_offset, output_paragraph_offset);
+ return 1;
+ }
+ }
+
+ /* Get here if we have BRACE_ARGS, NO_BRACE_ARGS, or MAYBE_BRACE_ARGS
+ with braces. */
+ (*(entry->proc)) (START, output_paragraph_offset, 0);
+ return 1;
+}
+
+/* Okay, we are ready to start the conversion. Call the reader on
+ some text, and fill the text as it is output. Handle commands by
+ remembering things like open braces and the current file position on a
+ stack, and when the corresponding close brace is found, you can call
+ the function with the proper arguments. Although the filling isn't
+ necessary for HTML, it should do no harm. */
+void
+reader_loop (void)
+{
+ int character;
+ int done = 0;
+
+ while (!done)
+ {
+ if (input_text_offset >= input_text_length)
+ break;
+
+ character = curchar ();
+
+ /* If only_macro_expansion, only handle macros and leave
+ everything else intact. */
+ if (!only_macro_expansion && !in_fixed_width_font
+ && ((!html && !xml) || escape_html)
+ && (character == '\'' || character == '`')
+ && input_text[input_text_offset + 1] == character)
+ {
+ if (html)
+ {
+ input_text_offset += 2;
+ add_word (character == '`' ? "&ldquo;" : "&rdquo;");
+ continue;
+ }
+ else if (xml)
+ {
+ input_text_offset += 2;
+ xml_insert_entity (character == '`' ? "ldquo" : "rdquo");
+ continue;
+ }
+ else
+ {
+ input_text_offset++;
+ character = '"';
+ }
+ }
+
+ /* Convert --- to --. */
+ if (!only_macro_expansion && character == '-' && !in_fixed_width_font
+ && ((!html && !xml) || escape_html))
+ {
+ int dash_count = 0;
+
+ /* Get the number of consequtive dashes. */
+ while (input_text[input_text_offset] == '-')
+ {
+ dash_count++;
+ input_text_offset++;
+ }
+
+ /* Eat one dash. */
+ dash_count--;
+
+ if (html || xml)
+ {
+ if (dash_count == 0)
+ add_char ('-');
+ else
+ while (dash_count > 0)
+ {
+ if (dash_count >= 2)
+ {
+ if (html)
+ add_word ("&mdash;");
+ else
+ xml_insert_entity ("mdash");
+ dash_count -= 2;
+ }
+ else if (dash_count >= 1)
+ {
+ if (html)
+ add_word ("&ndash;");
+ else
+ xml_insert_entity ("ndash");
+ dash_count--;
+ }
+ }
+ }
+ else
+ {
+ add_char ('-');
+ while (--dash_count > 0)
+ add_char ('-');
+ }
+
+ continue;
+ }
+
+ /* If this is a whitespace character, then check to see if the line
+ is blank. If so, advance to the carriage return. */
+ if (!only_macro_expansion && whitespace (character))
+ {
+ int i = input_text_offset + 1;
+
+ while (i < input_text_length && whitespace (input_text[i]))
+ i++;
+
+ if (i == input_text_length || input_text[i] == '\n')
+ {
+ if (i == input_text_length)
+ i--;
+
+ input_text_offset = i;
+ character = curchar ();
+ }
+ }
+
+ if (character == '\n')
+ line_number++;
+
+ switch (character)
+ {
+ case '*': /* perhaps we are at a menu */
+ /* We used to check for this in the \n case but an @c in a
+ menu swallows its newline, so check here instead. */
+ if (!only_macro_expansion && in_menu
+ && input_text_offset + 1 < input_text_length
+ && input_text_offset > 0
+ && input_text[input_text_offset-1] == '\n')
+ handle_menu_entry ();
+ else
+ { /* Duplicate code from below, but not worth twisting the
+ fallthroughs to get down there. */
+ add_char (character);
+ input_text_offset++;
+ }
+ break;
+
+ /* Escapes for HTML unless we're outputting raw HTML. Do
+ this always, even if SGML rules don't require it since
+ that's easier and safer for non-conforming browsers. */
+ case '&':
+ if (html && escape_html)
+ add_word ("&amp;");
+ else
+ add_char (character);
+ input_text_offset++;
+ break;
+
+ case '<':
+ if (html && escape_html)
+ add_word ("&lt;");
+ else if (xml && escape_html)
+ xml_insert_entity ("lt");
+ else
+ add_char (character);
+ input_text_offset++;
+ break;
+
+ case '>':
+ if (html && escape_html)
+ add_word ("&gt;");
+ else if (xml && escape_html)
+ xml_insert_entity ("gt");
+ else
+ add_char (character);
+ input_text_offset++;
+ break;
+
+ case COMMAND_PREFIX: /* @ */
+ if (read_command () || !only_macro_expansion)
+ break;
+
+ /* FALLTHROUGH (usually) */
+ case '{':
+ /* Special case. We're not supposed to see this character by itself.
+ If we do, it means there is a syntax error in the input text.
+ Report the error here, but remember this brace on the stack so
+ we can ignore its partner. */
+ if (!only_macro_expansion)
+ {
+ if (command && !STREQ (command, "math"))
+ {
+ line_error (_("Misplaced %c"), '{');
+ remember_brace (misplaced_brace);
+ }
+ else
+ /* We don't mind `extra' braces inside @math. */
+ remember_brace (cm_no_op);
+ /* remember_brace advances input_text_offset. */
+ break;
+ }
+
+ /* FALLTHROUGH (usually) */
+ case '}':
+ if (!only_macro_expansion)
+ {
+ pop_and_call_brace ();
+ input_text_offset++;
+ break;
+ }
+
+ /* FALLTHROUGH (usually) */
+ default:
+ add_char (character);
+ input_text_offset++;
+ }
+ }
+ if (macro_expansion_output_stream && !only_macro_expansion)
+ maybe_write_itext (input_text, input_text_offset);
+}
+
+static void
+init_brace_stack (void)
+{
+ brace_stack = NULL;
+}
+
+/* Remember the current output position here. Save PROC
+ along with it so you can call it later. */
+static void
+remember_brace_1 (COMMAND_FUNCTION (*proc), int position)
+{
+ BRACE_ELEMENT *new = xmalloc (sizeof (BRACE_ELEMENT));
+ new->next = brace_stack;
+ new->proc = proc;
+ new->command = xstrdup (command ? command : "");
+ new->pos = position;
+ new->line = line_number;
+ new->in_fixed_width_font = in_fixed_width_font;
+ brace_stack = new;
+}
+
+static void
+remember_brace (COMMAND_FUNCTION (*proc))
+{
+ if (curchar () != '{')
+ line_error (_("%c%s expected braces"), COMMAND_PREFIX, command);
+ else
+ input_text_offset++;
+ remember_brace_1 (proc, output_paragraph_offset);
+}
+
+/* Pop the top of the brace stack, and call the associated function
+ with the args END and POS. */
+static void
+pop_and_call_brace (void)
+{
+ if (brace_stack == NULL)
+ {
+ line_error (_("Unmatched }"));
+ return;
+ }
+
+ {
+ BRACE_ELEMENT *temp;
+
+ int pos = brace_stack->pos;
+ COMMAND_FUNCTION *proc = brace_stack->proc;
+ in_fixed_width_font = brace_stack->in_fixed_width_font;
+
+ /* Reset current command, so the proc can know who it is. This is
+ used in cm_accent. */
+ command = brace_stack->command;
+
+ temp = brace_stack->next;
+ free (brace_stack);
+ brace_stack = temp;
+
+ (*proc) (END, pos, output_paragraph_offset);
+ }
+}
+
+/* Shift all of the markers in `brace_stack' by AMOUNT. */
+static void
+adjust_braces_following (int here, int amount)
+{
+ BRACE_ELEMENT *stack = brace_stack;
+
+ while (stack)
+ {
+ if (stack->pos >= here)
+ stack->pos += amount;
+ stack = stack->next;
+ }
+}
+
+/* Return the string which invokes PROC; a pointer to a function.
+ Always returns the first function in the command table if more than
+ one matches PROC. */
+static const char *
+find_proc_name (COMMAND_FUNCTION (*proc))
+{
+ int i;
+
+ for (i = 0; command_table[i].name; i++)
+ if (proc == command_table[i].proc)
+ return command_table[i].name;
+ return _("NO_NAME!");
+}
+
+/* You call discard_braces () when you shouldn't have any braces on the stack.
+ I used to think that this happens for commands that don't take arguments
+ in braces, but that was wrong because of things like @code{foo @@}. So now
+ I only detect it at the beginning of nodes. */
+void
+discard_braces (void)
+{
+ if (!brace_stack)
+ return;
+
+ while (brace_stack)
+ {
+ if (brace_stack->proc != misplaced_brace)
+ {
+ const char *proc_name;
+
+ proc_name = find_proc_name (brace_stack->proc);
+ file_line_error (input_filename, brace_stack->line,
+ _("%c%s missing close brace"), COMMAND_PREFIX,
+ proc_name);
+ pop_and_call_brace ();
+ }
+ else
+ {
+ BRACE_ELEMENT *temp;
+ temp = brace_stack->next;
+ free (brace_stack);
+ brace_stack = temp;
+ }
+ }
+}
+
+/* Return the 0-based number of the current output column */
+int
+current_output_column (void)
+{
+ int i, column;
+
+ for (i = output_paragraph_offset; i > 0 && output_paragraph[i - 1] != '\n';
+ i--)
+ ;
+ if (i == 0)
+ column = output_paragraph_start_column;
+ else
+ column = 0;
+ while (i < output_paragraph_offset)
+ {
+ int j;
+
+ /* Find a span of non-control characters */
+ for (j = i; j < output_paragraph_offset; j++)
+ {
+ char c;
+
+ c = output_paragraph[j];
+ if ((0 <= c && c < ' ') || c == '\t' || c == NON_BREAKING_SPACE)
+ break;
+ }
+ if (i < j)
+ {
+ column += mbsnwidth ((char *)(output_paragraph + i), j - i, 0);
+ i = j;
+ }
+ if (i < output_paragraph_offset)
+ {
+ char c;
+
+ /* Handle a control character */
+ c = output_paragraph[i];
+ if (c == '\t')
+ {
+ column = (column + 8) & ~0x7;
+ if (column > fill_column)
+ column = fill_column;
+ }
+ else if (c == NON_BREAKING_SPACE)
+ column++;
+ else
+ {
+ /* ASCII control characters appear as two characters in the
+ output (e.g., ^A). */
+ if (!(0 <= c && c < ' '))
+ abort ();
+ column += 2;
+ }
+ i++;
+ }
+ }
+ return column;
+}
+
+void
+#if defined (VA_FPRINTF) && __STDC__
+add_word_args (const char *format, ...)
+#else
+add_word_args (format, va_alist)
+ const char *format;
+ va_dcl
+#endif
+{
+ char buffer[2000]; /* xx no fixed limits */
+#ifdef VA_FPRINTF
+ va_list ap;
+#endif
+
+ VA_START (ap, format);
+#ifdef VA_SPRINTF
+ VA_SPRINTF (buffer, format, ap);
+#else
+ sprintf (buffer, format, a1, a2, a3, a4, a5, a6, a7, a8);
+#endif /* not VA_SPRINTF */
+ va_end (ap);
+ add_word (buffer);
+}
+
+/* Add STRING to output_paragraph. */
+void
+add_word (char *string)
+{
+ while (*string)
+ add_char (*string++);
+}
+
+/* Like add_word, but inhibits conversion of whitespace into &nbsp;.
+ Use this to output HTML directives with embedded blanks, to make
+ them @w-safe. */
+void
+add_html_elt (char *string)
+{
+ in_html_elt++;
+ add_word (string);
+ in_html_elt--;
+}
+
+/* These two functions below, add_html_block_elt and add_html_block_elt_args,
+ are mixtures of add_html_elt and add_word_args. They inform makeinfo that
+ the current HTML element being inserted should not be enclosed in a <p>
+ element. */
+void
+add_html_block_elt (char *string)
+{
+ in_html_block_level_elt++;
+ add_word (string);
+ in_html_block_level_elt--;
+}
+
+void
+#if defined (VA_FPRINTF) && __STDC__
+add_html_block_elt_args (const char *format, ...)
+#else
+add_html_block_elt_args (format, va_alist)
+ const char *format;
+ va_dcl
+#endif
+{
+ char buffer[2000]; /* xx no fixed limits */
+#ifdef VA_FPRINTF
+ va_list ap;
+#endif
+
+ VA_START (ap, format);
+#ifdef VA_SPRINTF
+ VA_SPRINTF (buffer, format, ap);
+#else
+ sprintf (buffer, format, a1, a2, a3, a4, a5, a6, a7, a8);
+#endif /* not VA_SPRINTF */
+ va_end (ap);
+ add_html_block_elt (buffer);
+}
+
+/* Here is another awful kludge, used in add_char. Ordinarily, macro
+ expansions take place in the body of the document, and therefore we
+ should html_output_head when we see one. But there's an exception: a
+ macro call might take place within @copying, and that does not start
+ the real output, even though we fully expand the copying text.
+
+ So we need to be able to check if we are defining the @copying text.
+ We do this by looking back through the insertion stack. */
+static int
+defining_copying (void)
+{
+ INSERTION_ELT *i;
+ for (i = insertion_stack; i; i = i->next)
+ {
+ if (i->insertion == copying)
+ return 1;
+ }
+ return 0;
+}
+
+/* Output the header for Info.
+ html fixxme: should output this as trailer on first page (at least). */
+
+static void
+info_output_head (void)
+{
+ add_word_args (gdt("This is %s, produced by makeinfo version %s from %s.\n"),
+ output_filename, VERSION, input_filename);
+
+ /* Start afresh with whatever real text we have. */
+ close_paragraph ();
+
+ /* We do not want indentation in what follows, which is usually going
+ to be a node marker (CTRL-_). */
+ if (inhibit_paragraph_indentation == 0)
+ inhibit_paragraph_indentation = -1;
+}
+
+void
+output_head (void)
+{
+ if (output_head_p) /* no-op if we're mistakenly called twice */
+ return;
+ output_head_p = 1;
+
+ if (html)
+ html_output_head ();
+ else if (xml)
+ ; /* handled differently, via xml_begin_document */
+ else if (no_headers)
+ ; /* no header for plain text */
+ else
+ info_output_head ();
+}
+
+
+/* Add the character to the current paragraph. If filling_enabled is
+ nonzero, then do filling as well. */
+void
+add_char (int character)
+{
+ if (xml)
+ {
+ xml_add_char (character);
+ return;
+ }
+
+ /* If we are avoiding outputting headers, and we are currently
+ in a menu, then simply return. But if we're only expanding macros,
+ then we're being called from glean_node_from_menu to try to
+ remember a menu reference, and we need that so we can do defaulting. */
+ if (no_headers && !only_macro_expansion && (in_menu || in_detailmenu))
+ return;
+
+ /* If we are adding a character now, then we don't have to
+ ignore close_paragraph () calls any more. */
+ if (must_start_paragraph && character != '\n')
+ {
+ int column;
+
+ must_start_paragraph = 0;
+ line_already_broken = 0; /* The line is no longer broken. */
+ column = current_output_column ();
+ if (current_indent > column)
+ indent (current_indent - column);
+ }
+
+ if (non_splitting_words
+ && !(html && in_html_elt)
+ && strchr (" \t\n", character))
+ {
+ if (html || docbook)
+ { /* Seems cleaner to use &nbsp; than an 8-bit char. */
+ int saved_escape_html = escape_html;
+ escape_html = 0;
+ add_word ("&nbsp");
+ escape_html = saved_escape_html;
+ character = ';';
+ }
+ else
+ character = NON_BREAKING_SPACE; /* restored in flush_output */
+ }
+
+ insertion_paragraph_closed = 0;
+
+ switch (character)
+ {
+ case '\n':
+ if (!filling_enabled && !(html && (in_menu || in_detailmenu)))
+ {
+ insert ('\n');
+
+ if (force_flush_right)
+ {
+ close_paragraph ();
+ /* Hack to force single blank lines out in this mode. */
+ flush_output ();
+ }
+
+ if (!no_indent && paragraph_is_open)
+ indent (current_indent);
+ break;
+ }
+ else if (end_of_sentence_p () && !french_spacing)
+ /* CHARACTER is newline, filling is enabled, and we're at the
+ end of a sentence. Insert an extra space, unless
+ @frenchspacing is in effect. */
+ {
+ insert (' ');
+ last_inserted_character = character;
+ }
+
+ if (last_char_was_newline)
+ {
+ if (html)
+ last_char_was_newline++;
+ close_paragraph ();
+ pending_indent = 0;
+ }
+ else
+ {
+ last_char_was_newline = 1;
+ if (html)
+ insert ('\n');
+ else
+ insert (' ');
+ }
+ break;
+
+ default: /* not at newline */
+ {
+ int column;
+ int suppress_insert = 0;
+
+ if ((character == ' ') && (last_char_was_newline))
+ {
+ if (!paragraph_is_open)
+ {
+ pending_indent++;
+ return;
+ }
+ }
+
+ /* This is a sad place to do this, but it seems highly desirable
+ to not force any particular order on the front matter
+ commands. This way, the document can do @settitle,
+ @documentlanguage, etc, in any order and with any omissions,
+ and we'll still output the header ("produced by makeinfo",
+ HTML <head>, etc.) `just in time'. */
+ if ((executing_macro || !executing_string)
+ && !only_macro_expansion
+ && !defining_copying ()
+ && !output_head_p)
+ {
+ output_head ();
+ }
+
+ if (!paragraph_is_open)
+ {
+ start_paragraph ();
+ /* If the paragraph is supposed to be indented a certain
+ way, then discard all of the pending whitespace.
+ Otherwise, we let the whitespace stay. */
+ if (!paragraph_start_indent)
+ indent (pending_indent);
+ pending_indent = 0;
+
+ /* This check for in_html_block_level_elt prevents <p> from being
+ inserted when we already have html markup starting a paragraph,
+ as with <ul> and <h1> and the like. */
+ if (html && !in_html_block_level_elt)
+ {
+ if ((in_menu || in_detailmenu) && in_menu_item)
+ {
+ insert_string ("</li></ul>\n");
+ in_menu_item = 0;
+ }
+ insert_string ("<p>");
+ in_paragraph = 1;
+ adjust_braces_following (0, 3); /* adjust for <p> */
+ }
+ }
+
+ output_paragraph[output_paragraph_offset] = character;
+ output_paragraph_offset++;
+ column = current_output_column ();
+ output_paragraph_offset--;
+ if (column > fill_column)
+ {
+ if (filling_enabled && !html)
+ {
+ int temp = output_paragraph_offset;
+ while (--temp > 0 && output_paragraph[temp] != '\n')
+ {
+ /* If we have found a space, we have the place to break
+ the line. */
+ if (output_paragraph[temp] == ' ')
+ {
+ /* Remove trailing whitespace from output. */
+ while (temp && whitespace (output_paragraph[temp - 1]))
+ temp--;
+
+ /* If we went back all the way to the newline of the
+ preceding line, it probably means that the word we
+ are adding is itself wider than the space that the
+ indentation and the fill_column let us use. In
+ that case, do NOT insert another newline, since it
+ won't help. Just indent to current_indent and
+ leave it alone, since that's the most we can do. */
+ if (temp && output_paragraph[temp - 1] != '\n')
+ output_paragraph[temp++] = '\n';
+
+ /* We have correctly broken the line where we want
+ to. What we don't want is spaces following where
+ we have decided to break the line. We get rid of
+ them. */
+ {
+ int t1 = temp;
+
+ for (;; t1++)
+ {
+ if (t1 == output_paragraph_offset)
+ {
+ if (whitespace (character))
+ suppress_insert = 1;
+ break;
+ }
+ if (!whitespace (output_paragraph[t1]))
+ break;
+ }
+
+ if (t1 != temp)
+ {
+ adjust_braces_following (temp, (- (t1 - temp)));
+ memmove (&output_paragraph[temp],
+ &output_paragraph[t1],
+ output_paragraph_offset - t1);
+ output_paragraph_offset -= (t1 - temp);
+ }
+ }
+
+ /* Filled, but now indent if that is right. */
+ if (indented_fill && current_indent > 0)
+ {
+ int buffer_len = ((output_paragraph_offset - temp)
+ + current_indent);
+ char *temp_buffer = xmalloc (buffer_len);
+ int indentation = 0;
+
+ /* We have to shift any markers that are in
+ front of the wrap point. */
+ adjust_braces_following (temp, current_indent);
+
+ while (current_indent > 0 &&
+ indentation != current_indent)
+ temp_buffer[indentation++] = ' ';
+
+ memcpy ((char *) &temp_buffer[current_indent],
+ (char *) &output_paragraph[temp],
+ buffer_len - current_indent);
+
+ if (output_paragraph_offset + buffer_len
+ >= paragraph_buffer_len)
+ {
+ unsigned char *tt = xrealloc
+ (output_paragraph,
+ (paragraph_buffer_len += buffer_len));
+ output_paragraph = tt;
+ }
+ memcpy ((char *) &output_paragraph[temp],
+ temp_buffer, buffer_len);
+ output_paragraph_offset += current_indent;
+ free (temp_buffer);
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ if (!suppress_insert)
+ {
+ insert (character);
+ last_inserted_character = character;
+ }
+ last_char_was_newline = 0;
+ line_already_broken = 0;
+ }
+ }
+}
+
+/* Add a character and store its position in meta_char_pos. */
+void
+add_meta_char (int character)
+{
+ meta_char_pos = output_paragraph_offset;
+ add_char (character);
+}
+
+/* Insert CHARACTER into `output_paragraph'. */
+void
+insert (int character)
+{
+ /* We don't want to strip trailing whitespace in multitables. Otherwise
+ horizontal separators confuse the font locking in Info mode in Emacs,
+ because it looks like a @subsection. Adding a trailing space to those
+ lines fixes it. */
+ if (character == '\n' && !html && !xml && !multitable_active)
+ {
+ while (output_paragraph_offset
+ && whitespace (output_paragraph[output_paragraph_offset-1]))
+ output_paragraph_offset--;
+ }
+
+ output_paragraph[output_paragraph_offset++] = character;
+ if (output_paragraph_offset == paragraph_buffer_len)
+ {
+ output_paragraph =
+ xrealloc (output_paragraph, (paragraph_buffer_len += 100));
+ }
+}
+
+/* Insert the null-terminated string STRING into `output_paragraph'. */
+void
+insert_string (const char *string)
+{
+ while (*string)
+ insert (*string++);
+}
+
+
+/* Sentences might have these characters after the period (or whatever). */
+#define POST_SENTENCE(c) ((c) == ')' || (c) == '\'' || (c) == '"' \
+ || (c) == ']')
+
+/* Return true if at an end-of-sentence character, possibly followed by
+ post-sentence punctuation to ignore. */
+static int
+end_of_sentence_p (void)
+{
+ int loc = output_paragraph_offset - 1;
+
+ /* If nothing has been output, don't check output_paragraph[-1]. */
+ if (loc < 0)
+ return 0;
+
+ /* A post-sentence character that is at meta_char_pos is not really
+ a post-sentence character; it was produced by a markup such as
+ @samp. We don't want the period inside @samp to be treated as a
+ sentence ender. */
+ while (loc > 0
+ && loc != meta_char_pos && POST_SENTENCE (output_paragraph[loc]))
+ loc--;
+ return loc != meta_char_pos && sentence_ender (output_paragraph[loc]);
+}
+
+
+/* Remove upto COUNT characters of whitespace from the
+ the current output line. If COUNT is less than zero,
+ then remove until none left. */
+void
+kill_self_indent (int count)
+{
+ /* Handle infinite case first. */
+ if (count < 0)
+ {
+ while (output_paragraph_offset)
+ {
+ if (whitespace (output_paragraph[output_paragraph_offset - 1]))
+ output_paragraph_offset--;
+ else
+ break;
+ }
+ }
+ else
+ {
+ while (output_paragraph_offset && count--)
+ if (whitespace (output_paragraph[output_paragraph_offset - 1]))
+ output_paragraph_offset--;
+ else
+ break;
+ }
+}
+
+/* Nonzero means do not honor calls to flush_output (). */
+static int flushing_ignored = 0;
+
+/* Prevent calls to flush_output () from having any effect. */
+void
+inhibit_output_flushing (void)
+{
+ flushing_ignored++;
+}
+
+/* Allow calls to flush_output () to write the paragraph data. */
+void
+uninhibit_output_flushing (void)
+{
+ flushing_ignored--;
+}
+
+void
+flush_output (void)
+{
+ int i;
+
+ if (!output_paragraph_offset || flushing_ignored)
+ return;
+
+ for (i = 0; i < output_paragraph_offset; i++)
+ {
+ if (output_paragraph[i] == '\n')
+ {
+ output_line_number++;
+ node_line_number++;
+ }
+
+ /* If we turned on the 8th bit for a space inside @w, turn it back off
+ for output. Don't do this for HTML, since the nbsp character is valid
+ input and must be passed along to the browser. */
+ if (!html && output_paragraph[i] == NON_BREAKING_SPACE)
+ output_paragraph[i] = ' ';
+ }
+
+ fwrite (output_paragraph, 1, output_paragraph_offset, output_stream);
+
+ output_position += output_paragraph_offset;
+ output_paragraph_start_column = current_output_column ();
+ output_paragraph_offset = 0;
+ meta_char_pos = 0;
+}
+
+/* How to close a paragraph controlling the number of lines between
+ this one and the last one. */
+
+/* Paragraph spacing is controlled by this variable. It is the number of
+ blank lines that you wish to appear between paragraphs. A value of
+ 1 creates a single blank line between paragraphs. */
+int paragraph_spacing = DEFAULT_PARAGRAPH_SPACING;
+
+static void
+close_paragraph_with_lines (int lines)
+{
+ int old_spacing = paragraph_spacing;
+ paragraph_spacing = lines;
+ close_paragraph ();
+ paragraph_spacing = old_spacing;
+}
+
+/* Close the current paragraph, leaving no blank lines between them. */
+void
+close_single_paragraph (void)
+{
+ close_paragraph_with_lines (0);
+}
+
+/* Close a paragraph after an insertion has ended. */
+void
+close_insertion_paragraph (void)
+{
+ if (!insertion_paragraph_closed)
+ {
+ /* Close the current paragraph, breaking the line. */
+ close_single_paragraph ();
+
+ /* Start a new paragraph, with the correct indentation for the now
+ current insertion level (one above the one that we are ending). */
+ start_paragraph ();
+
+ /* Tell `close_paragraph' that the previous line has already been
+ broken, so it should insert one less newline. */
+ line_already_broken = 1;
+
+ /* Tell functions such as `add_char' we've already found a newline. */
+ ignore_blank_line ();
+ }
+ else
+ {
+ int column;
+
+ /* If the insertion paragraph is closed already, then we are seeing
+ two `@end' commands in a row. Note that the first one we saw was
+ handled in the first part of this if-then-else clause, and at that
+ time `start_paragraph' was called, partially to handle the proper
+ indentation of the current line. However, the indentation level
+ may have just changed again, so we may have to outdent the current
+ line to the new indentation level. */
+ column = current_output_column ();
+ if (current_indent < column)
+ kill_self_indent (column - current_indent);
+ }
+
+ insertion_paragraph_closed = 1;
+}
+
+/* Close the currently open paragraph. */
+void
+close_paragraph (void)
+{
+ int i;
+
+ /* We don't need these newlines in XML and Docbook outputs for
+ paragraph separation. We have the <para> element for that. */
+ if (xml)
+ return;
+
+ /* The insertion paragraph is no longer closed. */
+ insertion_paragraph_closed = 0;
+
+ if (paragraph_is_open && !must_start_paragraph)
+ {
+ int tindex = output_paragraph_offset;
+
+ /* Back up to last non-newline/space character, forcing all such
+ subsequent characters to be newlines. This isn't strictly
+ necessary, but a couple of functions use the presence of a newline
+ to make decisions. */
+ for (tindex = output_paragraph_offset - 1; tindex >= 0; --tindex)
+ {
+ int c = output_paragraph[tindex];
+
+ if (c == ' '|| c == '\n')
+ output_paragraph[tindex] = '\n';
+ else
+ break;
+ }
+
+ /* All trailing whitespace is ignored. */
+ output_paragraph_offset = ++tindex;
+
+ /* Break the line if that is appropriate. */
+ if (paragraph_spacing >= 0)
+ insert ('\n');
+
+ /* Add as many blank lines as is specified in `paragraph_spacing'. */
+ if (!force_flush_right)
+ {
+ for (i = 0; i < (paragraph_spacing - line_already_broken); i++)
+ {
+ insert ('\n');
+ /* Don't need anything extra for HTML in usual case of no
+ extra paragraph spacing. */
+ if (html && i > 0)
+ insert_string ("<br>");
+ }
+ }
+
+ /* If we are doing flush right indentation, then do it now
+ on the paragraph (really a single line). */
+ if (force_flush_right)
+ do_flush_right_indentation ();
+
+ flush_output ();
+ paragraph_is_open = 0;
+ no_indent = 0;
+ }
+
+ ignore_blank_line ();
+}
+
+/* Make the last line just read look as if it were only a newline. */
+void
+ignore_blank_line (void)
+{
+ last_inserted_character = '\n';
+ last_char_was_newline = 1;
+}
+
+/* Align the end of the text in output_paragraph with fill_column. The last
+ character in output_paragraph is '\n'. */
+static void
+do_flush_right_indentation (void)
+{
+ char *temp;
+
+ kill_self_indent (-1);
+
+ if (output_paragraph[0] != '\n')
+ {
+ int width;
+
+ width = mbsnwidth ((char *)output_paragraph, output_paragraph_offset - 1,
+ 0) + 1;
+ if (width < fill_column)
+ {
+ int i;
+
+ if (output_paragraph_offset + (fill_column - width)
+ >= paragraph_buffer_len)
+ output_paragraph =
+ xrealloc (output_paragraph,
+ (paragraph_buffer_len += fill_column));
+
+ temp = xmalloc (output_paragraph_offset);
+ memcpy (temp, (char *)output_paragraph, output_paragraph_offset);
+
+ for (i = 0; i < fill_column - width; i++)
+ output_paragraph[i] = ' ';
+
+ memcpy ((char *)output_paragraph + i, temp, output_paragraph_offset);
+ free (temp);
+ output_paragraph_offset += i;
+ adjust_braces_following (0, i);
+ }
+ }
+}
+
+/* Begin a new paragraph. */
+void
+start_paragraph (void)
+{
+ /* First close existing one. */
+ if (paragraph_is_open)
+ close_paragraph ();
+
+ /* In either case, the insertion paragraph is no longer closed. */
+ insertion_paragraph_closed = 0;
+
+ /* However, the paragraph is open! */
+ paragraph_is_open = 1;
+
+ /* If we MUST_START_PARAGRAPH, that simply means that start_paragraph ()
+ had to be called before we would allow any other paragraph operations
+ to have an effect. */
+ if (!must_start_paragraph)
+ {
+ int amount_to_indent = 0;
+
+ /* If doing indentation, then insert the appropriate amount. */
+ if (!no_indent)
+ {
+ int column;
+
+ if (inhibit_paragraph_indentation)
+ {
+ amount_to_indent = current_indent;
+ if (inhibit_paragraph_indentation < 0)
+ inhibit_paragraph_indentation++;
+ }
+ else if (paragraph_start_indent < 0)
+ amount_to_indent = current_indent;
+ else
+ amount_to_indent = current_indent + paragraph_start_indent;
+
+ column = current_output_column ();
+ if (amount_to_indent >= column)
+ indent (amount_to_indent - column);
+ }
+ }
+ else
+ must_start_paragraph = 0;
+}
+
+/* Insert the indentation specified by AMOUNT. */
+void
+indent (int amount)
+{
+ /* For every START_POS saved within the brace stack which will be affected
+ by this indentation, bump that start pos forward. */
+ adjust_braces_following (output_paragraph_offset, amount);
+
+ while (--amount >= 0)
+ insert (' ');
+}
+
+/* Search forward for STRING in input_text.
+ FROM says where to start. */
+int
+search_forward (const char *string, int from)
+{
+ int len = strlen (string);
+
+ while (from < input_text_length)
+ {
+ if (strncmp (input_text + from, string, len) == 0)
+ return from;
+ from++;
+ }
+ return -1;
+}
+
+/* search_forward until n characters. */
+int
+search_forward_until_pos (char *string, int from, int end_pos)
+{
+ int save_input_text_length = input_text_length;
+ input_text_length = end_pos;
+
+ from = search_forward (string, from);
+
+ input_text_length = save_input_text_length;
+
+ return from;
+}
+
+/* Return next non-whitespace and non-cr character. */
+int
+next_nonwhitespace_character (void)
+{
+ /* First check the current input_text. Start from the next char because
+ we already have input_text[input_text_offset] in ``current''. */
+ int pos = input_text_offset + 1;
+
+ while (pos < input_text_length)
+ {
+ if (!cr_or_whitespace(input_text[pos]))
+ return input_text[pos];
+ pos++;
+ }
+
+ { /* Can't find a valid character, so go through filestack
+ in case we are doing @include or expanding a macro. */
+ FSTACK *tos = filestack;
+
+ while (tos)
+ {
+ int tmp_input_text_length = filestack->size;
+ int tmp_input_text_offset = filestack->offset;
+ char *tmp_input_text = filestack->text;
+
+ while (tmp_input_text_offset < tmp_input_text_length)
+ {
+ if (!cr_or_whitespace(tmp_input_text[tmp_input_text_offset]))
+ return tmp_input_text[tmp_input_text_offset];
+ tmp_input_text_offset++;
+ }
+
+ tos = tos->next;
+ }
+ }
+
+ return -1;
+}
+
+
+
+/* Replace " with \" and \ with \\. Used for alt tag in Info output.
+ Return a newly-malloced string in all cases. */
+
+static char *
+bs_escape_quote (const char *src)
+{
+ int c;
+ char *dest = xmalloc (2 * strlen (src) + 1); /* can't need more. */
+ char *p = dest;
+
+ for (; c = *src; src++)
+ {
+ if (c == '"' || c == '\\')
+ *p++ = '\\';
+
+ *p++ = c;
+ }
+ *p = 0;
+
+ return dest;
+}
+
+
+
+/* An external image is a reference, kind of. The parsing is (not
+ coincidentally) similar, anyway. */
+
+void
+cm_image (int arg)
+{
+ char *name_arg, *w_arg, *h_arg, *alt_arg, *ext_arg;
+
+ if (arg == END)
+ return;
+
+ name_arg = get_xref_token (1); /* expands all macros in image */
+ w_arg = get_xref_token (0);
+ h_arg = get_xref_token (0);
+ alt_arg = get_xref_token (1); /* expands all macros in alt text */
+ ext_arg = get_xref_token (0);
+
+ if (*name_arg)
+ {
+ struct stat file_info;
+ char *pathname = NULL;
+ unsigned ext_len = (ext_arg && *ext_arg) ? strlen (ext_arg) : 0;
+ /* One byte for the . period separator, one byte for the null.
+ The 3 is for the max length of the hardwired extensions we try. */
+ char *fullname = xmalloc (strlen (name_arg) + 1 + MAX (ext_len, 3) + 1);
+
+ if (ext_arg && *ext_arg)
+ {
+ sprintf (fullname, "%s%s", name_arg, ext_arg);
+ if (access (fullname, R_OK) != 0)
+ pathname = get_file_info_in_path (fullname, include_files_path,
+ &file_info);
+
+ if (pathname == NULL)
+ {
+ /* Backwards compatibility (4.6 <= version < 4.7):
+ try prefixing @image's EXTENSION parameter with a period. */
+ sprintf (fullname, "%s.%s", name_arg, ext_arg);
+ if (access (fullname, R_OK) != 0)
+ pathname = get_file_info_in_path (fullname, include_files_path,
+ &file_info);
+ }
+ }
+ else
+ {
+ sprintf (fullname, "%s.png", name_arg);
+ if (access (fullname, R_OK) != 0) {
+ pathname = get_file_info_in_path (fullname,
+ include_files_path, &file_info);
+ if (pathname == NULL) {
+ sprintf (fullname, "%s.jpg", name_arg);
+ if (access (fullname, R_OK) != 0) {
+ pathname = get_file_info_in_path (fullname,
+ include_files_path,
+ &file_info);
+ if (pathname == NULL) {
+ sprintf (fullname, "%s.gif", name_arg);
+ if (access (fullname, R_OK) != 0) {
+ pathname = get_file_info_in_path (fullname,
+ include_files_path,
+ &file_info);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if (html)
+ {
+ int image_in_div = 0;
+
+ if (pathname == NULL && access (fullname, R_OK) != 0)
+ {
+ line_error(_("@image file `%s' (for HTML) not readable: %s"),
+ fullname, strerror (errno));
+ return;
+ }
+ if (pathname != NULL && access (pathname, R_OK) != 0)
+ {
+ line_error (_("No such file `%s'"),
+ fullname);
+ return;
+ }
+
+ if (!paragraph_is_open)
+ {
+ add_html_block_elt ("<div class=\"block-image\">");
+ image_in_div = 1;
+ }
+
+ add_html_elt ("<img src=");
+ add_word_args ("\"%s\"", fullname);
+ add_html_elt (" alt=");
+ add_word_args ("\"%s\">",
+ escape_string (*alt_arg ? text_expansion (alt_arg) : fullname));
+
+ if (image_in_div)
+ add_html_block_elt ("</div>");
+ }
+ else if (xml && docbook)
+ xml_insert_docbook_image (name_arg);
+ else if (xml)
+ {
+ extern int xml_in_para;
+ extern int xml_no_para;
+ int elt = xml_in_para ? INLINEIMAGE : IMAGE;
+
+ if (!xml_in_para)
+ xml_no_para++;
+
+ xml_insert_element_with_attribute (elt,
+ START, "width=\"%s\" height=\"%s\" name=\"%s\" extension=\"%s\"",
+ w_arg, h_arg, name_arg, ext_arg);
+ xml_insert_element (IMAGEALTTEXT, START);
+ execute_string ("%s", alt_arg);
+ xml_insert_element (IMAGEALTTEXT, END);
+ xml_insert_element (elt, END);
+
+ if (!xml_in_para)
+ xml_no_para--;
+ }
+ else
+ { /* Prefer foo.txt for Info/ASCII. Seems wrong nowadays. */
+ FILE *image_file;
+ char *txtpath = NULL;
+ char *txtname = xmalloc (strlen (name_arg) + 4 + 1);
+ strcpy (txtname, name_arg);
+ strcat (txtname, ".txt");
+ image_file = fopen (txtname, "r");
+ if (image_file == NULL)
+ {
+ txtpath = get_file_info_in_path (txtname,
+ include_files_path, &file_info);
+ if (txtpath != NULL)
+ image_file = fopen (txtpath, "r");
+ }
+
+ if (image_file != NULL
+ || access (fullname, R_OK) == 0
+ || (pathname != NULL && access (pathname, R_OK) == 0))
+ {
+ int ch;
+ int save_inhibit_indentation = inhibit_paragraph_indentation;
+ int save_filling_enabled = filling_enabled;
+ int image_in_brackets = paragraph_is_open;
+
+ /* Write magic ^@^H[image ...^@^H] cookie in the info file, if
+ there's an accompanying bitmap. Otherwise just include the
+ text image. In the plaintext output, always include the text
+ image without the magic cookie. */
+ int use_magic_cookie = !no_headers
+ && access (fullname, R_OK) == 0 && !STREQ (fullname, txtname);
+
+ inhibit_paragraph_indentation = 1;
+ filling_enabled = 0;
+ last_char_was_newline = 0;
+
+ if (use_magic_cookie)
+ {
+ add_char ('\0');
+ add_word ("\010[image");
+
+ if (access (fullname, R_OK) == 0
+ || (pathname != NULL && access (pathname, R_OK) == 0))
+ add_word_args (" src=\"%s\"", fullname);
+
+ if (*alt_arg)
+ {
+ char *expanded = text_expansion (alt_arg);
+ char *escaped = bs_escape_quote (expanded);
+ add_word_args (" alt=\"%s\"", escaped);
+ free (expanded);
+ free (escaped);
+ }
+ }
+
+ if (image_file != NULL)
+ {
+ if (use_magic_cookie)
+ add_word (" text=\"");
+
+ if (image_in_brackets)
+ add_char ('[');
+
+ /* Maybe we need to remove the final newline if the image
+ file is only one line to allow in-line images. On the
+ other hand, they could just make the file without a
+ final newline. */
+ while ((ch = getc (image_file)) != EOF)
+ {
+ if (use_magic_cookie && (ch == '"' || ch == '\\'))
+ add_char ('\\');
+ add_char (ch);
+ }
+
+ if (image_in_brackets)
+ add_char (']');
+
+ if (use_magic_cookie)
+ add_char ('"');
+
+ if (fclose (image_file) != 0)
+ perror (txtname);
+ }
+
+ if (use_magic_cookie)
+ {
+ add_char ('\0');
+ add_word ("\010]");
+ }
+
+ inhibit_paragraph_indentation = save_inhibit_indentation;
+ filling_enabled = save_filling_enabled;
+ }
+ else
+ warning (_("@image file `%s' (for text) unreadable: %s"),
+ txtname, strerror (errno));
+ }
+
+ free (fullname);
+ if (pathname)
+ free (pathname);
+ }
+ else
+ line_error (_("@image missing filename argument"));
+
+ if (name_arg)
+ free (name_arg);
+ if (w_arg)
+ free (w_arg);
+ if (h_arg)
+ free (h_arg);
+ if (alt_arg)
+ free (alt_arg);
+ if (ext_arg)
+ free (ext_arg);
+}
+
+/* Conditionals. */
+
+/* A structure which contains `defined' variables. */
+typedef struct defines {
+ struct defines *next;
+ char *name;
+ char *value;
+} DEFINE;
+
+/* The linked list of `set' defines. */
+DEFINE *defines = NULL;
+
+/* Add NAME to the list of `set' defines. */
+static void
+set (char *name, char *value)
+{
+ DEFINE *temp;
+
+ for (temp = defines; temp; temp = temp->next)
+ if (strcmp (name, temp->name) == 0)
+ {
+ free (temp->value);
+ temp->value = xstrdup (value);
+ return;
+ }
+
+ temp = xmalloc (sizeof (DEFINE));
+ temp->next = defines;
+ temp->name = xstrdup (name);
+ temp->value = xstrdup (value);
+ defines = temp;
+
+ if (xml && !docbook)
+ {
+ xml_insert_element_with_attribute (SETVALUE, START, "name=\"%s\"", name);
+ execute_string ("%s", value);
+ xml_insert_element (SETVALUE, END);
+ }
+}
+
+/* Remove NAME from the list of `set' defines. */
+static void
+clear (char *name)
+{
+ DEFINE *temp, *last;
+
+ last = NULL;
+ temp = defines;
+
+ while (temp)
+ {
+ if (strcmp (temp->name, name) == 0)
+ {
+ if (last)
+ last->next = temp->next;
+ else
+ defines = temp->next;
+
+ free (temp->name);
+ free (temp->value);
+ free (temp);
+ break;
+ }
+ last = temp;
+ temp = temp->next;
+ }
+
+ if (xml && !docbook)
+ {
+ xml_insert_element_with_attribute (CLEARVALUE, START, "name=\"%s\"", name);
+ xml_insert_element (CLEARVALUE, END);
+ }
+}
+
+/* Return the value of NAME. The return value is NULL if NAME is unset. */
+static char *
+set_p (char *name)
+{
+ DEFINE *temp;
+
+ for (temp = defines; temp; temp = temp->next)
+ if (strcmp (temp->name, name) == 0)
+ return temp->value;
+
+ return NULL;
+}
+
+/* Create a variable whose name appears as the first word on this line. */
+void
+cm_set (void)
+{
+ handle_variable (SET);
+}
+
+/* Remove a variable whose name appears as the first word on this line. */
+void
+cm_clear (void)
+{
+ handle_variable (CLEAR);
+}
+
+void
+cm_ifset (void)
+{
+ handle_variable (IFSET);
+}
+
+void
+cm_ifclear (void)
+{
+ handle_variable (IFCLEAR);
+}
+
+/* This command takes braces, but we parse the contents specially, so we
+ don't use the standard brace popping code.
+
+ The syntax @ifeq{arg1, arg2, texinfo-commands} performs texinfo-commands
+ if ARG1 and ARG2 caselessly string compare to the same string, otherwise,
+ it produces no output. */
+void
+cm_ifeq (void)
+{
+ char **arglist;
+
+ arglist = get_brace_args (quote_none);
+
+ if (arglist)
+ {
+ if (array_len (arglist) > 1)
+ {
+ if ((mbscasecmp (arglist[0], arglist[1]) == 0) &&
+ (arglist[2]))
+ execute_string ("%s\n", arglist[2]);
+ }
+
+ free_array (arglist);
+ }
+}
+
+void
+cm_value (int arg, int start_pos, int end_pos)
+{
+ static int value_level = 0, saved_meta_pos = -1;
+
+ /* xml_add_char() skips any content inside menus when output format is
+ Docbook, so @value{} is no use there. Also start_pos and end_pos does not
+ get updated, causing name to be empty string. So just return. */
+ if (docbook && in_menu)
+ return;
+
+ /* All the text after @value{ upto the matching } will eventually
+ disappear from output_paragraph, when this function is called
+ with ARG == END. If the text produced until then sets
+ meta_char_pos, we will need to restore it to the value it had
+ before @value was seen. So we need to save the previous value
+ of meta_char_pos here. */
+ if (arg == START)
+ {
+ /* If we are already inside some outer @value, don't overwrite
+ the value saved in saved_meta_pos. */
+ if (!value_level)
+ saved_meta_pos = meta_char_pos;
+ value_level++;
+ /* While the argument of @value is processed, we need to inhibit
+ textual transformations like "--" into "-", since @set didn't
+ do that when it grabbed the name of the variable. */
+ in_fixed_width_font++;
+ }
+ else
+ {
+ char *name = (char *) &output_paragraph[start_pos];
+ char *value;
+ output_paragraph[end_pos] = 0;
+ name = xstrdup (name);
+ value = set_p (name);
+ output_paragraph_offset = start_pos;
+
+ /* Restore the previous value of meta_char_pos if the stuff
+ inside this @value{} moved it. */
+ if (saved_meta_pos == -1) /* can't happen inside @value{} */
+ abort ();
+ if (value_level == 1
+ && meta_char_pos >= start_pos && meta_char_pos < end_pos)
+ {
+ meta_char_pos = saved_meta_pos;
+ saved_meta_pos = -1;
+ }
+ value_level--;
+ /* No need to decrement in_fixed_width_font, since before
+ we are called with arg == END, the reader loop already
+ popped the brace stack, which restored in_fixed_width_font,
+ among other things. */
+
+ if (value)
+ {
+ /* We need to get past the closing brace since the value may
+ expand to a context-sensitive macro (e.g. @xref) and produce
+ spurious warnings */
+ input_text_offset++;
+ execute_string ("%s", value);
+ input_text_offset--;
+ }
+ else
+ {
+ warning (_("undefined flag: %s"), name);
+ add_word_args (_("{No value for `%s'}"), name);
+ }
+
+ free (name);
+ }
+}
+
+/* Set, clear, or conditionalize based on ACTION. */
+static void
+handle_variable (int action)
+{
+ char *name;
+
+ get_rest_of_line (0, &name);
+ /* If we hit the end of text in get_rest_of_line, backing up
+ input pointer will cause the last character of the last line
+ be pushed back onto the input, which is wrong. */
+ if (input_text_offset < input_text_length)
+ backup_input_pointer ();
+ handle_variable_internal (action, name);
+ free (name);
+}
+
+static void
+handle_variable_internal (int action, char *name)
+{
+ char *temp;
+ int delimiter, additional_text_present = 0;
+
+ /* Only the first word of NAME is a valid tag. */
+ temp = name;
+ delimiter = 0;
+ while (*temp && (delimiter || !whitespace (*temp)))
+ {
+/* #if defined (SET_WITH_EQUAL) */
+ if (*temp == '"' || *temp == '\'')
+ {
+ if (*temp == delimiter)
+ delimiter = 0;
+ else
+ delimiter = *temp;
+ }
+/* #endif SET_WITH_EQUAL */
+ temp++;
+ }
+
+ if (*temp)
+ additional_text_present++;
+
+ *temp = 0;
+
+ if (!*name)
+ line_error (_("%c%s requires a name"), COMMAND_PREFIX, command);
+ else
+ {
+ switch (action)
+ {
+ case SET:
+ {
+ char *value;
+
+#if defined (SET_WITH_EQUAL)
+ /* Allow a value to be saved along with a variable. The value is
+ the text following an `=' sign in NAME, if any is present. */
+
+ for (value = name; *value && *value != '='; value++);
+
+ if (*value)
+ *value++ = 0;
+
+ if (*value == '"' || *value == '\'')
+ {
+ value++;
+ value[strlen (value) - 1] = 0;
+ }
+
+#else /* !SET_WITH_EQUAL */
+ /* The VALUE of NAME is the remainder of the line sans
+ whitespace. */
+ if (additional_text_present)
+ {
+ value = temp + 1;
+ canon_white (value);
+ }
+ else
+ value = "";
+#endif /* !SET_WITH_VALUE */
+
+ set (name, value);
+ }
+ break;
+
+ case CLEAR:
+ clear (name);
+ break;
+
+ case IFSET:
+ case IFCLEAR:
+ /* If IFSET and NAME is not set, or if IFCLEAR and NAME is set,
+ read lines from the the file until we reach a matching
+ "@end CONDITION". This means that we only take note of
+ "@ifset/clear" and "@end" commands. */
+ {
+ char condition[8];
+ int condition_len;
+ int orig_line_number = line_number;
+
+ if (action == IFSET)
+ strcpy (condition, "ifset");
+ else
+ strcpy (condition, "ifclear");
+
+ condition_len = strlen (condition);
+
+ if ((action == IFSET && !set_p (name))
+ || (action == IFCLEAR && set_p (name)))
+ {
+ int level = 0, done = 0;
+
+ while (!done && input_text_offset < input_text_length)
+ {
+ char *freeable_line, *line;
+
+ get_rest_of_line (0, &freeable_line);
+
+ for (line = freeable_line; whitespace (*line); line++);
+
+ if (*line == COMMAND_PREFIX &&
+ (strncmp (line + 1, condition, condition_len) == 0))
+ level++;
+ else if (strncmp (line, "@end", 4) == 0)
+ {
+ char *cname = line + 4;
+ char *temp;
+
+ while (*cname && whitespace (*cname))
+ cname++;
+ temp = cname;
+
+ while (*temp && !whitespace (*temp))
+ temp++;
+ *temp = 0;
+
+ if (strcmp (cname, condition) == 0)
+ {
+ if (!level)
+ {
+ done = 1;
+ }
+ else
+ level--;
+ }
+ }
+ free (freeable_line);
+ }
+
+ if (!done)
+ file_line_error (input_filename, orig_line_number,
+ _("Reached eof before matching @end %s"),
+ condition);
+
+ /* We found the end of a false @ifset/ifclear. If we are
+ in a menu, back up over the newline that ends the ifset,
+ since that newline may also begin the next menu entry. */
+ break;
+ }
+ else
+ {
+ if (action == IFSET)
+ begin_insertion (ifset);
+ else
+ begin_insertion (ifclear);
+ }
+ }
+ break;
+ }
+ }
+}
+
+/* Execution of random text not in file. */
+typedef struct {
+ char *string; /* The string buffer. */
+ int size; /* The size of the buffer. */
+ int in_use; /* Nonzero means string currently in use. */
+} EXECUTION_STRING;
+
+static EXECUTION_STRING **execution_strings = NULL;
+static int execution_strings_index = 0;
+static int execution_strings_slots = 0;
+
+static EXECUTION_STRING *
+get_execution_string (int initial_size)
+{
+ int i = 0;
+ EXECUTION_STRING *es = NULL;
+
+ if (execution_strings)
+ {
+ for (i = 0; i < execution_strings_index; i++)
+ if (execution_strings[i] && (execution_strings[i]->in_use == 0))
+ {
+ es = execution_strings[i];
+ break;
+ }
+ }
+
+ if (!es)
+ {
+ if (execution_strings_index + 1 >= execution_strings_slots)
+ {
+ execution_strings = xrealloc
+ (execution_strings,
+ (execution_strings_slots += 3) * sizeof (EXECUTION_STRING *));
+ for (; i < execution_strings_slots; i++)
+ execution_strings[i] = NULL;
+ }
+
+ execution_strings[execution_strings_index] =
+ xmalloc (sizeof (EXECUTION_STRING));
+ es = execution_strings[execution_strings_index];
+ execution_strings_index++;
+
+ es->size = 0;
+ es->string = NULL;
+ es->in_use = 0;
+ }
+
+ if (initial_size > es->size)
+ {
+ es->string = xrealloc (es->string, initial_size);
+ es->size = initial_size;
+ }
+ return es;
+}
+
+/* Given a pointer to TEXT and its desired length NEW_LEN, find TEXT's
+ entry in the execution_strings[] array and change the .STRING and
+ .SIZE members of that entry as appropriate. */
+void
+maybe_update_execution_strings (char **text, unsigned int new_len)
+{
+ int i = 0;
+
+ if (execution_strings)
+ {
+ for (i = 0; i < execution_strings_index; i++)
+ if (execution_strings[i] && (execution_strings[i]->in_use == 1) &&
+ execution_strings[i]->string == *text)
+ {
+ /* Don't ever shrink the string storage in execution_strings[]!
+ execute_string assumes that it is always big enough to store
+ every possible execution_string, and will break if that's
+ not true. So we only enlarge the string storage if the
+ current size isn't big enough. */
+ if (execution_strings[i]->size < new_len)
+ {
+ execution_strings[i]->string =
+ *text = xrealloc (*text, new_len + 1);
+ execution_strings[i]->size = new_len + 1;
+ }
+ return;
+ }
+ }
+ /* We should *never* end up here, since if we are inside
+ execute_string, TEXT is always in execution_strings[]. */
+ abort ();
+}
+
+#define EXECUTE_STRING_MAX (32*1024) /* FIXXME: this is an arbitrary limit. */
+
+/* Execute the string produced by formatting the ARGs with FORMAT. This
+ is like submitting a new file with @include. */
+void
+#if defined (VA_FPRINTF) && __STDC__
+execute_string (char *format, ...)
+#else
+execute_string (format, va_alist)
+ char *format;
+ va_dcl
+#endif
+{
+ EXECUTION_STRING *es;
+ char *temp_string, *temp_input_filename;
+#ifdef VA_FPRINTF
+ va_list ap;
+#endif
+ int insertion_level_at_start = insertion_level;
+
+ es = get_execution_string (EXECUTE_STRING_MAX);
+ temp_string = es->string;
+ es->in_use = 1;
+
+ VA_START (ap, format);
+#ifdef VA_SPRINTF
+ VA_SPRINTF (temp_string, format, ap);
+#else
+ sprintf (temp_string, format, a1, a2, a3, a4, a5, a6, a7, a8);
+#endif /* not VA_SPRINTF */
+ va_end (ap);
+
+ pushfile ();
+ input_text_offset = 0;
+ input_text = temp_string;
+ input_text_length = strlen (temp_string);
+ input_filename = xstrdup (input_filename);
+ temp_input_filename = input_filename;
+
+ executing_string++;
+ reader_loop ();
+
+ /* If insertion stack level changes during execution, that means a multiline
+ command is used inside braces or @section ... kind of commands. */
+ if (insertion_level_at_start != insertion_level && !executing_macro)
+ {
+ line_error (_("Multiline command %c%s used improperly"),
+ COMMAND_PREFIX,
+ command);
+ /* We also need to keep insertion_level intact to make sure warnings are
+ issued for @end ... command. */
+ while (insertion_level > insertion_level_at_start)
+ pop_insertion ();
+ }
+
+ popfile ();
+ executing_string--;
+ es->in_use = 0;
+ free (temp_input_filename);
+}
+
+
+/* Return what would be output for STR (in newly-malloced memory), i.e.,
+ expand Texinfo commands according to the current output format. If
+ IMPLICIT_CODE is set, expand @code{STR}. This is generally used for
+ short texts; filling, indentation, and html escapes are disabled. */
+
+char *
+expansion (char *str, int implicit_code)
+{
+ return maybe_escaped_expansion (str, implicit_code, 0);
+}
+
+
+/* Do HTML escapes according to DO_HTML_ESCAPE. Needed in
+ cm_printindex, q.v. */
+
+char *
+maybe_escaped_expansion (char *str, int implicit_code, int do_html_escape)
+{
+ char *result;
+
+ /* Inhibit indentation and filling, so that extra newlines
+ are not added to the expansion. (This is undesirable if
+ we write the expanded text to macro_expansion_output_stream.) */
+ int saved_filling_enabled = filling_enabled;
+ int saved_indented_fill = indented_fill;
+ int saved_no_indent = no_indent;
+ int saved_escape_html = escape_html;
+
+ filling_enabled = 0;
+ indented_fill = 0;
+ no_indent = 1;
+ escape_html = do_html_escape;
+ xml_no_para++;
+
+ result = full_expansion (str, implicit_code);
+
+ filling_enabled = saved_filling_enabled;
+ indented_fill = saved_indented_fill;
+ no_indent = saved_no_indent;
+ escape_html = saved_escape_html;
+ xml_no_para--;
+
+ return result;
+}
+
+
+/* Expand STR (or @code{STR} if IMPLICIT_CODE is nonzero). No change to
+ any formatting parameters -- filling, indentation, html escapes,
+ etc., are not reset. Always returned in new memory. */
+
+char *
+full_expansion (char *str, int implicit_code)
+{
+ int length;
+ char *result;
+
+ /* Inhibit any real output. */
+ int start = output_paragraph_offset;
+ int saved_paragraph_is_open = paragraph_is_open;
+
+ /* More output state to save. */
+ int saved_meta_pos = meta_char_pos;
+ int saved_last_char = last_inserted_character;
+ int saved_last_nl = last_char_was_newline;
+
+ /* If we are called in the middle of processing a command, we need
+ to dup and save the global variable `command' (which holds the
+ name of this command), since the recursive reader loop will free
+ it from under our feet if it finds any macros in STR. */
+ char *saved_command = command ? xstrdup (command) : NULL;
+
+ inhibit_output_flushing ();
+ paragraph_is_open = 1;
+ if (strlen (str) > (implicit_code
+ ? EXECUTE_STRING_MAX - 1 - sizeof("@code{}")
+ : EXECUTE_STRING_MAX - 1))
+ line_error (_("`%.40s...' is too long for expansion; not expanded"), str);
+ else
+ execute_string (implicit_code ? "@code{%s}" : "%s", str);
+ uninhibit_output_flushing ();
+
+ /* Copy the expansion from the buffer. */
+ length = output_paragraph_offset - start;
+ result = xmalloc (1 + length);
+ memcpy (result, (char *) (output_paragraph + start), length);
+ result[length] = 0;
+
+ /* Pretend it never happened. */
+ free_and_clear (&command);
+ command = saved_command;
+
+ output_paragraph_offset = start;
+ paragraph_is_open = saved_paragraph_is_open;
+
+ meta_char_pos = saved_meta_pos;
+ last_inserted_character = saved_last_char;
+ last_char_was_newline = saved_last_nl;
+
+ return result;
+}
+
+
+/* Return text (info) expansion of STR no matter what the current output
+ format is. */
+
+char *
+text_expansion (char *str)
+{
+ char *ret;
+ int save_html = html;
+ int save_xml = xml;
+ int save_docbook = docbook;
+
+ html = 0;
+ xml = 0;
+ docbook = 0;
+ ret = expansion (str, 0);
+ html = save_html;
+ xml = save_xml;
+ docbook = save_docbook;
+
+ return ret;
+}
+
+
+/* Set the paragraph indentation variable to the value specified in STRING.
+ Values can be:
+ `asis': Don't change existing indentation.
+ `none': Remove existing indentation.
+ NUM: Indent NUM spaces at the starts of paragraphs.
+ If NUM is zero, we assume `none'.
+ Returns 0 if successful, or nonzero if STRING isn't one of the above. */
+int
+set_paragraph_indent (char *string)
+{
+ if (strcmp (string, "asis") == 0 || strcmp (string, _("asis")) == 0)
+ paragraph_start_indent = 0;
+ else if (strcmp (string, "none") == 0 || strcmp (string, _("none")) == 0)
+ paragraph_start_indent = -1;
+ else
+ {
+ if (sscanf (string, "%d", &paragraph_start_indent) != 1)
+ return -1;
+ else
+ {
+ if (paragraph_start_indent == 0)
+ paragraph_start_indent = -1;
+ }
+ }
+ return 0;
+}
+
+
+/* Translate MSGID according to the document language (@documentlanguage
+ value or --document-language), rather than the current locale
+ (LANGUAGE/LC_ALL/LANG). This code is from the get_title function in
+ gettext. (xsetenv and unsetenv come from the gnulib xsetenv module.) */
+
+char *
+getdocumenttext (const char *msgid)
+{
+ /* The original get_title also saves, sets, and restores
+ OUTPUT_CHARSET, so that the translation will be given in
+ the proper encoding (via canonical_locale_charset). But defining
+ that function ends up pulling a whole lot of subsidiary functions.
+ Not sure how to handle it; skip the whole thing for now. */
+ const char *tmp;
+ char *old_LC_ALL;
+ char *old_LANGUAGE;
+ const char *result;
+#ifdef HAVE_SETLOCALE
+ char *old_locale;
+#endif
+
+ /* Save LC_ALL, LANGUAGE environment variables. */
+
+ tmp = getenv ("LC_ALL");
+ old_LC_ALL = (tmp != NULL ? xstrdup (tmp) : NULL);
+
+ tmp = getenv ("LANGUAGE");
+ old_LANGUAGE = (tmp != NULL ? xstrdup (tmp) : NULL);
+
+ xsetenv ("LC_ALL", document_language, 1);
+ unsetenv ("LANGUAGE");
+
+#ifdef HAVE_SETLOCALE
+ old_locale = xstrdup (setlocale (LC_ALL, NULL));
+ if (setlocale (LC_ALL, "") == NULL)
+ /* Nonexistent locale. Use the original. */
+ result = msgid;
+ else
+#endif
+ {
+ /* Fetch the translation. */
+ result = gettext ((char *) msgid);
+ }
+
+ /* Restore LC_ALL, LANGUAGE environment variables. */
+
+ if (old_LC_ALL != NULL)
+ xsetenv ("LC_ALL", old_LC_ALL, 1), free (old_LC_ALL);
+ else
+ unsetenv ("LC_ALL");
+
+ if (old_LANGUAGE != NULL)
+ xsetenv ("LANGUAGE", old_LANGUAGE, 1), free (old_LANGUAGE);
+ else
+ unsetenv ("LANGUAGE");
+
+#ifdef HAVE_SETLOCALE
+ setlocale (LC_ALL, old_locale);
+ free (old_locale);
+#endif
+
+ return (char *) result;
+}
diff --git a/makeinfo/makeinfo.h b/makeinfo/makeinfo.h
new file mode 100644
index 0000000..ec3b26b
--- /dev/null
+++ b/makeinfo/makeinfo.h
@@ -0,0 +1,395 @@
+/* makeinfo.h -- declarations for Makeinfo.
+ $Id: makeinfo.h,v 1.31 2008/03/26 23:57:12 karl Exp $
+
+ Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+ 2005, 2006, 2007, 2008 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 Brian Fox (bfox@ai.mit.edu). */
+
+#ifndef MAKEINFO_H
+#define MAKEINFO_H
+
+#ifdef COMPILING_MAKEINFO
+# define DECLARE(type,var,init) type var = init
+#else
+# define DECLARE(type,var,init) extern type var
+#endif
+
+/* Hardcoded per GNU standards, not dependent on argv[0]. */
+DECLARE (char *, progname, "makeinfo");
+
+/* Nonzero means a string is in execution, as opposed to a file. */
+DECLARE (int, executing_string, 0);
+
+/* Nonzero means to inhibit writing macro expansions to the output
+ stream, because it has already been written. */
+DECLARE (int, me_inhibit_expansion, 0);
+
+/* Current output stream. */
+DECLARE (FILE *, output_stream, NULL);
+
+DECLARE (char *, pretty_output_filename, NULL);
+
+/* Current output file name. */
+DECLARE (char *, current_output_filename, NULL);
+
+/* Output paragraph buffer and its length. */
+#define INITIAL_PARAGRAPH_BUFFER_LEN 5000
+DECLARE (unsigned char *, output_paragraph, NULL);
+DECLARE (int, paragraph_buffer_len, INITIAL_PARAGRAPH_BUFFER_LEN);
+
+/* Offset into OUTPUT_PARAGRAPH. */
+DECLARE (int, output_paragraph_offset, 0);
+
+/* Position in the output file. */
+DECLARE (int, output_position, 0);
+
+/* Number of lines in the output. */
+DECLARE (int, output_line_number, 1);
+DECLARE (int, node_line_number, 0);
+
+/* The offset into OUTPUT_PARAGRAPH where we have a meta character
+ produced by a markup such as @code or @dfn. */
+DECLARE (int, meta_char_pos, -1);
+
+/* Nonzero means output_paragraph contains text. */
+DECLARE (int, paragraph_is_open, 0);
+
+/* Nonzero means that `start_paragraph' MUST be called before we pay
+ any attention to `close_paragraph' calls. */
+DECLARE (int, must_start_paragraph, 0);
+
+/* Nonzero if we have output the topmatter of the output file. */
+DECLARE (int, output_head_p, 0);
+
+/* Nonzero means that we have seen "@top" once already. */
+DECLARE (int, top_node_seen, 0);
+
+/* Nonzero means that we have seen a non-"@top" node already. */
+DECLARE (int, non_top_node_seen, 0);
+
+/* Nonzero indicates that indentation is temporarily turned off. */
+DECLARE (int, no_indent, 1);
+
+/* The amount of indentation to apply at the start of each line. */
+DECLARE (int, current_indent, 0);
+
+/* Nonzero means that we suppress the indentation of the first paragraph
+ following any section heading. */
+DECLARE (int, do_first_par_indent, 0);
+
+/* Amount by which @example indentation increases/decreases. */
+DECLARE (int, example_indentation_increment, 5);
+
+/* Amount by which @table, @defun, etc. indentation increases/decreases. */
+DECLARE (int, default_indentation_increment, 5);
+
+/* Amount by which xml indentation increases/decreases.
+ Zero means unnecessary whitespace is compressed. */
+DECLARE (int, xml_indentation_increment, 2);
+
+/* Nonzero indicates that filling a line also indents the new line. */
+DECLARE (int, indented_fill, 0);
+
+/* Nonzero means forcing output text to be flushright. */
+DECLARE (int, force_flush_right, 0);
+
+/* The column at which long lines are broken. */
+DECLARE (int, fill_column, 72);
+
+/* Nonzero means we're doing one space after sentences (@frenchspacing). */
+DECLARE (int, french_spacing, 0);
+
+/* Nonzero means that words are not to be split, even in long lines. This
+ gets changed for cm_w (). */
+DECLARE (int, non_splitting_words, 0);
+
+/* Nonzero means that we are currently hacking the insides of an
+ insertion which would use a fixed width font. */
+DECLARE (int, in_fixed_width_font, 0);
+
+/* Nonzero if we are currently processing a multitable command */
+DECLARE (int, multitable_active, 0);
+
+/* Nonzero means that we're generating HTML. (--html) */
+DECLARE (int, html, 0);
+
+/* Nonzero means that we're generating XML. (--xml) */
+DECLARE (int, xml, 0);
+
+/* Nonzero means that we're generating DocBook. (--docbook) */
+DECLARE (int, docbook, 0);
+
+/* Nonzero means 8-bit output for Info and plain text, according to
+ @documentencoding. (--enable-encoding) */
+DECLARE (int, enable_encoding, 1);
+
+/* Nonzero means escape characters in HTML output. */
+DECLARE (int, escape_html, 1);
+
+/* Access key number for next menu entry to be generated (1 to 9, or 10 to
+ mean no access key) */
+DECLARE (int, next_menu_item_number, 1);
+
+/* Nonzero means that the use of paragraph_start_indent is inhibited.
+ @example uses this to line up the left columns of the example text.
+ A negative value for this variable is incremented each time it is used.
+ @noindent uses this to inhibit indentation for a single paragraph. */
+DECLARE (int, inhibit_paragraph_indentation, 0);
+
+/* Nonzero indicates that filling will take place on long lines. */
+DECLARE (int, filling_enabled, 1);
+
+/* The current node's node name. */
+DECLARE (char *, current_node, NULL);
+
+/* Command name in the process of being hacked. */
+DECLARE (char *, command, NULL);
+
+/* Nonzero if we have seen an @titlepage command. */
+DECLARE (int, titlepage_cmd_present, 0);
+
+/* @copying ... @end copying. */
+DECLARE (char *, copying_text, NULL);
+
+/* @documentdescription ... @end documentdescription. */
+DECLARE (const char *, document_description, NULL);
+
+/* Nonzero if the last character inserted has the syntax class of NEWLINE. */
+DECLARE (int, last_char_was_newline, 1);
+
+/* The current input file state. */
+DECLARE (char *, input_filename, (char *)NULL);
+DECLARE (char *, input_text, (char *)NULL);
+DECLARE (int, input_text_length, 0);
+DECLARE (int, input_text_offset, 0);
+DECLARE (int, line_number, 0);
+DECLARE (char *, toplevel_output_filename, NULL);
+#define curchar() input_text[input_text_offset]
+
+/* A colon separated list of directories to search for files included
+ with @include. This can be controlled with the `-I' option to makeinfo. */
+DECLARE (char *, include_files_path, NULL);
+
+/* The filename of the current input file. This is never freed. */
+DECLARE (char *, node_filename, NULL);
+
+/* Name of CSS file to include, if any. (--css-include). */
+DECLARE (char *, css_include, NULL);
+
+/* Name of CSS to reference, if any. (--css-ref). */
+DECLARE (char *, css_ref, NULL);
+
+/* Transliterate file names into ASCII */
+DECLARE (int, transliterate_file_names, 0);
+
+/* Nonzero means do not output "Node: Foo" for node separations, that
+ is, generate plain text. (--no-headers) */
+DECLARE (int, no_headers, 0);
+
+/* Nonzero means that we process @docbook and @ifdocbook. (--ifdocbook) */
+DECLARE (int, process_docbook, 0);
+
+/* Nonzero means that we process @html and @rawhtml even when not
+ generating HTML. (--ifhtml) */
+DECLARE (int, process_html, 0);
+
+/* Positive means process @ifinfo (even if not generating Info);
+ zero means don't process @ifinfo (even if we are);
+ -1 means we don't know yet. (--ifinfo) */
+DECLARE (int, process_info, -1);
+
+/* Positive means process @ifplaintext (even if not generating plain text);
+ zero means we don't process @ifplaintext (even if we are);
+ -1 means we don't know yet. (--ifplaintext) */
+DECLARE (int, process_plaintext, -1);
+
+/* Nonzero means that we process @tex and @iftex. (--iftex) */
+DECLARE (int, process_tex, 0);
+
+/* Nonzero means that we process @xml and @ifxml. (--ifxml) */
+DECLARE (int, process_xml, 0);
+
+/* Default is to check node references. (--no-validate) */
+DECLARE (int, validating, 1);
+
+/* Nonzero means print information about what is going on. (--verbose) */
+DECLARE (int, verbose_mode, 0);
+
+/* Nonzero means prefix each @chapter, ... with a number like
+ 1, 1.1, etc. (--number-sections) */
+DECLARE (int, number_sections, 1);
+
+/* Nonzero means split size. When zero, DEFAULT_SPLIT_SIZE is used. */
+DECLARE (int, split_size, 0);
+
+/* Nonzero means expand node names and references while validating.
+ This will avoid errors when the Texinfo document uses features
+ like @@ and @value inconsistently in node names, but will slow
+ the program by about 80%. You HAVE been warned. */
+DECLARE (int, expensive_validation, 0);
+
+/* C's standard macros don't check to make sure that the characters being
+ changed are within range. So I have to check explicitly. */
+
+#define coerce_to_upper(c) ((islower(c) ? toupper(c) : (c)))
+#define coerce_to_lower(c) ((isupper(c) ? tolower(c) : (c)))
+
+#define whitespace(c) ((c) == '\t' || (c) == ' ')
+#define sentence_ender(c) ((c) == '.' || (c) == '?' || (c) == '!')
+#define cr_or_whitespace(c) (whitespace(c) || (c) == '\r' || (c) == '\n')
+
+#ifndef isletter
+#define isletter(c) (((c) >= 'A' && (c) <= 'Z') || ((c) >= 'a' && (c) <= 'z'))
+#endif
+
+#ifndef isupper
+#define isupper(c) ((c) >= 'A' && (c) <= 'Z')
+#endif
+
+#ifndef isdigit
+#define isdigit(c) ((c) >= '0' && (c) <= '9')
+#endif
+
+#ifndef digit_value
+#define digit_value(c) ((c) - '0')
+#endif
+
+/* These characters are not really HTML-safe (with strict XHTML),
+ and also there are possible collisions. That's the whole reason we
+ designed a new conversion scheme in the first place. But we
+ nevertheless need to generate the old names. See
+ `add_escaped_anchor_name' in html.c. */
+#define OLD_HTML_SAFE "$-_.+!*'()"
+#define OLD_URL_SAFE_CHAR(ch) (strchr (OLD_HTML_SAFE, ch))
+
+/* For the current/stable scheme. */
+#define URL_SAFE_CHAR(ch) (((unsigned char)ch)<128 && isalnum (ch))
+
+#define COMMAND_PREFIX '@'
+
+/* A byte value to represent a non-breaking space until flush_output (). */
+#define NON_BREAKING_SPACE 036
+
+#define END_VERBATIM "end verbatim"
+
+/* Stuff for splitting large files. The numbers for Emacs
+ texinfo-format-buffer are much smaller, but memory capacities have
+ increased so much, 50k info files seem a bit tiny these days. */
+#define DEFAULT_SPLIT_SIZE 300000
+DECLARE (int, splitting, 1); /* Defaults to true for now. */
+
+#define skip_whitespace() \
+ while ((input_text_offset != input_text_length) && \
+ whitespace (curchar())) \
+ input_text_offset++
+
+#define skip_whitespace_and_newlines() \
+ do { \
+ while (input_text_offset != input_text_length \
+ && cr_or_whitespace (curchar ())) \
+ { \
+ if (curchar () == '\n') \
+ line_number++; \
+ input_text_offset++; \
+ } \
+ } while (0)
+
+/* Return nonzero if STRING is the text at input_text + input_text_offset,
+ else zero. */
+#define looking_at(string) \
+ (strncmp (input_text + input_text_offset, string, strlen (string)) == 0)
+
+/* Any list with a member named `next'. */
+typedef struct generic_list {
+ struct generic_list *next;
+} GENERIC_LIST;
+
+/* Use `gdt' instead of `_' to translate strings that end up in the
+ output document. */
+extern char *getdocumenttext (const char *msgid);
+#define gdt(s) getdocumenttext(s)
+
+/* Reverse the order of a list. */
+extern GENERIC_LIST * reverse_list (GENERIC_LIST *list);
+
+/* Possibly return Local Variables trailer for Info output. */
+extern char *info_trailer (void),
+ *expansion (char *str, int implicit_code),
+ *text_expansion (char *str),
+ *maybe_escaped_expansion (char *str, int implicit_code, int do_escape_html),
+ *full_expansion (char *str, int implicit_code);
+
+extern void free_and_clear (char **pointer),
+ add_word (char *string),
+ add_char (int character),
+ add_meta_char (int character),
+ close_single_paragraph (void),
+ insert_string (const char *),
+ insert (int character),
+ get_rest_of_line (int expand, char **string),
+ add_html_block_elt (char *string),
+ get_until_in_braces (char *match, char **string),
+ get_until_in_line (int expand, char *match, char **string),
+ canon_white (char *string),
+ discard_until (char *string),
+ indent (int amount),
+ kill_self_indent (int count),
+ backup_input_pointer (void),
+ inhibit_output_flushing (void),
+ uninhibit_output_flushing (void),
+ flush_output (void),
+ start_paragraph (void),
+ close_paragraph (void),
+ close_insertion_paragraph (void),
+ init_paragraph (void),
+ ignore_blank_line (void),
+ reader_loop (void),
+ discard_braces (void),
+ replace_with_expansion (int from, int *to),
+ fix_whitespace (char *string),
+ output_head (void),
+ add_html_elt (char *string);
+
+extern int get_until (char *match, char **string),
+ set_paragraph_indent (char *string),
+ self_delimiting (int character),
+ search_forward (const char *string, int from),
+ search_forward_until_pos (char *string, int from, int end_pos),
+ next_nonwhitespace_character (void),
+ current_output_column (void),
+ fs_error (char *filename);
+
+#if defined (VA_FPRINTF) && __STDC__
+/* Unfortunately we must use prototypes if we are to use <stdarg.h>. */
+extern void add_word_args (const char *, ...),
+ add_html_block_elt_args (const char *, ...),
+ execute_string (char *, ...),
+ warning (const char *format, ...),
+ error (const char *format, ...),
+ line_error (const char *format, ...),
+ file_line_error (char *infile, int lno, const char *format, ...);
+#else
+extern void add_word_args (),
+ add_html_block_elt_args (),
+ execute_string (),
+ warning (),
+ error (),
+ line_error (),
+ file_line_error ();
+#endif /* no prototypes */
+
+#endif /* not MAKEINFO_H */
diff --git a/makeinfo/multi.c b/makeinfo/multi.c
new file mode 100644
index 0000000..43033a2
--- /dev/null
+++ b/makeinfo/multi.c
@@ -0,0 +1,646 @@
+/* multi.c -- multiple-column tables (@multitable) for makeinfo.
+ $Id: multi.c,v 1.18 2007/07/01 21:20:33 karl Exp $
+
+ Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2007
+ 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/>.
+
+ Originally written by phr@gnu.org (Paul Rubin). */
+
+#include "system.h"
+#include "mbswidth.h"
+#include "cmds.h"
+#include "insertion.h"
+#include "makeinfo.h"
+#include "multi.h"
+#include "xml.h"
+
+#define MAXCOLS 100 /* remove this limit later @@ */
+
+
+/*
+ * Output environments. This is a hack grafted onto existing
+ * structure. The "output environment" used to consist of the
+ * global variables `output_paragraph', `fill_column', etc.
+ * Routines like add_char would manipulate these variables.
+ *
+ * Now, when formatting a multitable, we maintain separate environments
+ * for each column. That way we can build up the columns separately
+ * and write them all out at once. The "current" output environment"
+ * is still kept in those global variables, so that the old output
+ * routines don't have to change. But we provide routines to save
+ * and restore these variables in an "environment table". The
+ * `select_output_environment' function switches from one output
+ * environment to another.
+ *
+ * Environment #0 (i.e., element #0 of the table) is the regular
+ * environment that is used when we're not formatting a multitable.
+ *
+ * Environment #N (where N = 1,2,3,...) is the env. for column #N of
+ * the table, when a multitable is active.
+ */
+
+/* contents of an output environment */
+/* some more vars may end up being needed here later @@ */
+static struct env
+{
+ unsigned char *output_paragraph;
+ int output_paragraph_offset;
+ int paragraph_buffer_len;
+ int paragraph_is_open;
+ int meta_char_pos;
+ int current_indent;
+ int fill_column;
+} envs[MAXCOLS]; /* the environment table */
+
+/* index in environment table of currently selected environment */
+static int current_env_no;
+
+/* current column number */
+static int current_column_no;
+
+/* We need to make a difference between template based widths and
+ @columnfractions for HTML tables' sake. Sigh. */
+static int seen_column_fractions;
+
+/* column number of last column in current multitable */
+static int last_column;
+
+/* flags indicating whether horizontal and vertical separators need
+ to be drawn, separating rows and columns in the current multitable. */
+static int hsep, vsep;
+
+/* whether this is the first row. */
+static int first_row;
+
+/* Called to handle a {...} template on the @multitable line.
+ We're at the { and our first job is to find the matching }; as a side
+ effect, we change *PARAMS to point to after it. Our other job is to
+ expand the template text and return the width of that string. */
+static unsigned
+find_template_width (char **params)
+{
+ char *template, *xtemplate;
+ unsigned len;
+ char *start = *params;
+ int brace_level = 0;
+
+ /* The first character should be a {. */
+ if (!params || !*params || **params != '{')
+ {
+ line_error ("find_template width internal error: passed %s",
+ params ? *params : "null");
+ return 0;
+ }
+
+ do
+ {
+ if (**params == '{' && (*params == start || (*params)[-1] != '@'))
+ brace_level++;
+ else if (**params == '}' && (*params)[-1] != '@')
+ brace_level--;
+ else if (**params == 0)
+ {
+ line_error (_("Missing } in @multitable template"));
+ return 0;
+ }
+ (*params)++;
+ }
+ while (brace_level > 0);
+
+ template = substring (start + 1, *params - 1); /* omit braces */
+ xtemplate = expansion (template, 0);
+ len = strlen (xtemplate);
+
+ free (template);
+ free (xtemplate);
+
+ return len;
+}
+
+/* Direct current output to environment number N. Used when
+ switching work from one column of a multitable to the next.
+ Returns previous environment number. */
+static int
+select_output_environment (int n)
+{
+ struct env *e = &envs[current_env_no];
+ int old_env_no = current_env_no;
+
+ /* stash current env info from global vars into the old environment */
+ e->output_paragraph = output_paragraph;
+ e->output_paragraph_offset = output_paragraph_offset;
+ e->paragraph_buffer_len = paragraph_buffer_len;
+ e->paragraph_is_open = paragraph_is_open;
+ e->meta_char_pos = meta_char_pos;
+ e->current_indent = current_indent;
+ e->fill_column = fill_column;
+
+ /* now copy new environment into global vars */
+ current_env_no = n;
+ e = &envs[current_env_no];
+ output_paragraph = e->output_paragraph;
+ output_paragraph_offset = e->output_paragraph_offset;
+ /* All the elements in the output environment structures start out as
+ zeros from the static declaration. However, we don't want to try
+ to malloc zero bytes when init_paragraph is called just below,
+ after we return. */
+ paragraph_buffer_len = e->paragraph_buffer_len ? e->paragraph_buffer_len
+ : INITIAL_PARAGRAPH_BUFFER_LEN;
+ paragraph_is_open = e->paragraph_is_open;
+ meta_char_pos = e->meta_char_pos;
+ current_indent = e->current_indent;
+ fill_column = e->fill_column;
+
+ return old_env_no;
+}
+
+/* Initialize environment number ENV_NO, of width WIDTH.
+ The idea is that we're going to use one environment for each column of
+ a multitable, so we can build them up separately and print them
+ all out at the end. */
+static int
+setup_output_environment (int env_no, int width)
+{
+ int old_env = select_output_environment (env_no);
+
+ /* clobber old environment and set width of new one */
+ init_paragraph ();
+
+ /* make our change */
+ fill_column = width;
+
+ /* Save new environment and restore previous one. */
+ select_output_environment (old_env);
+
+ return env_no;
+}
+
+/* Read the parameters for a multitable from the current command
+ line, save the parameters away, and return the
+ number of columns. */
+static int
+setup_multitable_parameters (void)
+{
+ char *params = insertion_stack->item_function;
+ int nchars;
+ float columnfrac;
+ char command[200]; /* xx no fixed limits */
+ int i = 1;
+
+ /* We implement @hsep and @vsep even though TeX doesn't.
+ We don't get mixing of @columnfractions and templates right,
+ but TeX doesn't either. */
+ hsep = vsep = 0;
+
+ /* Assume no @columnfractions per default. */
+ seen_column_fractions = 0;
+
+ while (*params) {
+ while (whitespace (*params))
+ params++;
+
+ if (*params == '@') {
+ sscanf (params, "%200s", command);
+ nchars = strlen (command);
+ params += nchars;
+ if (strcmp (command, "@hsep") == 0)
+ hsep++;
+ else if (strcmp (command, "@vsep") == 0)
+ vsep++;
+ else if (strcmp (command, "@columnfractions") == 0) {
+ seen_column_fractions = 1;
+ /* Clobber old environments and create new ones, starting at #1.
+ Environment #0 is the normal output, so don't mess with it. */
+ for ( ; i <= MAXCOLS; i++) {
+ if (sscanf (params, "%f", &columnfrac) < 1)
+ goto done;
+ /* Unfortunately, can't use %n since m68k-hp-bsd libc (at least)
+ doesn't support it. So skip whitespace (preceding the
+ number) and then non-whitespace (the number). */
+ while (*params && (*params == ' ' || *params == '\t'))
+ params++;
+ /* Hmm, but what about @columnfractions 3foo. Oh well,
+ it's invalid input anyway. */
+ while (*params && *params != ' ' && *params != '\t'
+ && *params != '\n' && *params != '@')
+ params++;
+
+ {
+ /* For html/xml/docbook, translate fractions into integer
+ percentages, adding .005 to avoid rounding problems. For
+ info, we want the character width. */
+ int width = xml || html ? (columnfrac + .005) * 100
+ : (columnfrac * (fill_column - current_indent) + .5);
+ setup_output_environment (i, width);
+ }
+ }
+ }
+
+ } else if (*params == '{') {
+ unsigned template_width = find_template_width (&params);
+
+ /* This gives us two spaces between columns. Seems reasonable.
+ How to take into account current_indent here? */
+ setup_output_environment (i++, template_width + 2);
+
+ } else {
+ warning (_("ignoring stray text `%s' after @multitable"), params);
+ break;
+ }
+ }
+
+done:
+ flush_output ();
+ inhibit_output_flushing ();
+
+ last_column = i - 1;
+ return last_column;
+}
+
+/* Output a row. Calls insert, but also flushes the buffered output
+ when we see a newline, since in multitable every line is a separate
+ paragraph. */
+static void
+out_char (int ch)
+{
+ if (html || xml)
+ add_char (ch);
+ else
+ {
+ int env = select_output_environment (0);
+ insert (ch);
+ if (ch == '\n')
+ {
+ uninhibit_output_flushing ();
+ flush_output ();
+ inhibit_output_flushing ();
+ }
+ select_output_environment (env);
+ }
+}
+
+
+static void
+draw_horizontal_separator (void)
+{
+ int i, j, s;
+
+ if (html)
+ {
+ add_word ("<hr>");
+ return;
+ }
+ if (xml)
+ return;
+
+ for (s = 0; s < envs[0].current_indent; s++)
+ out_char (' ');
+ if (vsep)
+ out_char ('+');
+ for (i = 1; i <= last_column; i++) {
+ for (j = 0; j <= envs[i].fill_column; j++)
+ out_char ('-');
+ if (vsep)
+ out_char ('+');
+ }
+ out_char (' ');
+ out_char ('\n');
+}
+
+
+/* multitable strategy:
+ for each item {
+ for each column in an item {
+ initialize a new paragraph
+ do ordinary formatting into the new paragraph
+ save the paragraph away
+ repeat if there are more paragraphs in the column
+ }
+ dump out the saved paragraphs and free the storage
+ }
+
+ For HTML we construct a simple HTML 3.2 table with <br>s inserted
+ to help non-tables browsers. `@item' inserts a <tr> and `@tab'
+ inserts <td>; we also try to close <tr>. The only real
+ alternative is to rely on the info formatting engine and present
+ preformatted text. */
+
+void
+do_multitable (void)
+{
+ int ncolumns;
+
+ if (multitable_active)
+ {
+ line_error ("Multitables cannot be nested");
+ return;
+ }
+
+ close_single_paragraph ();
+
+ if (xml)
+ {
+ xml_no_para = 1;
+ if (output_paragraph_offset > 0
+ && output_paragraph[output_paragraph_offset-1] == '\n')
+ output_paragraph_offset--;
+ }
+
+ /* scan the current item function to get the field widths
+ and number of columns, and set up the output environment list
+ accordingly. */
+ ncolumns = setup_multitable_parameters ();
+ first_row = 1;
+
+ /* <p> for non-tables browsers. @multitable implicitly ends the
+ current paragraph, so this is ok. */
+ if (html)
+ add_html_block_elt ("<p><table summary=\"\">");
+ /* else if (docbook)*/ /* 05-08 */
+ else if (xml)
+ {
+ int *widths = xmalloc (ncolumns * sizeof (int));
+ int i;
+ for (i=0; i<ncolumns; i++)
+ widths[i] = envs[i+1].fill_column;
+ xml_begin_multitable (ncolumns, widths);
+ free (widths);
+ }
+
+ if (hsep)
+ draw_horizontal_separator ();
+
+ /* The next @item command will direct stdout into the first column
+ and start processing. @tab will then switch to the next column,
+ and @item will flush out the saved output and return to the first
+ column. Environment #1 is the first column. (Environment #0 is
+ the normal output) */
+
+ ++multitable_active;
+}
+
+/* advance to the next environment number */
+static void
+nselect_next_environment (void)
+{
+ if (current_env_no >= last_column) {
+ line_error (_("Too many columns in multitable item (max %d)"), last_column);
+ return;
+ }
+ select_output_environment (current_env_no + 1);
+}
+
+
+/* do anything needed at the beginning of processing a
+ multitable column. */
+static void
+init_column (void)
+{
+ /* don't indent 1st paragraph in the item */
+ cm_noindent ();
+
+ /* throw away possible whitespace after @item or @tab command */
+ skip_whitespace ();
+}
+
+static void
+output_multitable_row (void)
+{
+ /* offset in the output paragraph of the next char needing
+ to be output for that column. */
+ int offset[MAXCOLS];
+ int i, j, s, remaining;
+ int had_newline = 0;
+
+ for (i = 0; i <= last_column; i++)
+ offset[i] = 0;
+
+ /* select the current environment, to make sure the env variables
+ get updated */
+ select_output_environment (current_env_no);
+
+#define CHAR_ADDR(n) (offset[i] + (n))
+#define CHAR_AT(n) (envs[i].output_paragraph[CHAR_ADDR(n)])
+
+ /* remove trailing whitespace from each column */
+ for (i = 1; i <= last_column; i++) {
+ while (envs[i].output_paragraph_offset
+ && cr_or_whitespace (CHAR_AT (envs[i].output_paragraph_offset - 1)))
+ envs[i].output_paragraph_offset--;
+
+ if (i == current_env_no)
+ output_paragraph_offset = envs[i].output_paragraph_offset;
+ }
+
+ /* read the current line from each column, outputting them all
+ pasted together. Do this til all lines are output from all
+ columns. */
+ for (;;) {
+ remaining = 0;
+ /* first, see if there is any work to do */
+ for (i = 1; i <= last_column; i++) {
+ if (CHAR_ADDR (0) < envs[i].output_paragraph_offset) {
+ remaining = 1;
+ break;
+ }
+ }
+ if (!remaining)
+ break;
+
+ for (s = 0; s < envs[0].current_indent; s++)
+ out_char (' ');
+
+ if (vsep)
+ out_char ('|');
+
+ for (i = 1; i <= last_column; i++) {
+ for (s = 0; s < envs[i].current_indent; s++)
+ out_char (' ');
+ for (j = 0; CHAR_ADDR (j) < envs[i].output_paragraph_offset; j++) {
+ if (CHAR_AT (j) == '\n')
+ break;
+ out_char (CHAR_AT (j));
+ }
+ /* Do not output trailing blanks if we're in the last column and
+ there will be no trailing |. */
+ if (i < last_column && !vsep)
+ for (s = mbsnwidth ((char *)&CHAR_AT (0), j, 0);
+ s <= envs[i].fill_column; s++)
+ out_char (' ');
+ if (vsep)
+ out_char ('|'); /* draw column separator */
+
+ offset[i] += j + 1; /* skip last text plus skip the newline */
+ }
+ out_char ('\n'); /* end of line */
+ had_newline = 1;
+ }
+
+ /* If completely blank item, get blank line despite no other output. */
+ if (!had_newline)
+ out_char ('\n'); /* end of line */
+
+ if (hsep)
+ draw_horizontal_separator ();
+
+ /* Now dispose of the buffered output. */
+ for (i = 1; i <= last_column; i++) {
+ select_output_environment (i);
+ init_paragraph ();
+ }
+}
+
+int after_headitem = 0;
+int headitem_row = 0;
+
+/* start a new item (row) of a multitable */
+int
+multitable_item (void)
+{
+ if (!multitable_active) {
+ line_error ("multitable_item internal error: no active multitable");
+ xexit (1);
+ }
+
+ current_column_no = 1;
+
+ if (html)
+ {
+ if (!first_row)
+ /* <br> for non-tables browsers. */
+ add_word_args ("<br></%s></tr>", after_headitem ? "th" : "td");
+
+ if (seen_column_fractions)
+ add_word_args ("<tr align=\"left\"><%s valign=\"top\" width=\"%d%%\">",
+ headitem_flag ? "th" : "td",
+ envs[current_column_no].fill_column);
+ else
+ add_word_args ("<tr align=\"left\"><%s valign=\"top\">",
+ headitem_flag ? "th" : "td");
+
+ if (headitem_flag)
+ after_headitem = 1;
+ else
+ after_headitem = 0;
+ first_row = 0;
+ headitem_row = headitem_flag;
+ headitem_flag = 0;
+ return 0;
+ }
+ /* else if (docbook)*/ /* 05-08 */
+ else if (xml)
+ {
+ xml_end_multitable_row (first_row);
+ if (headitem_flag)
+ after_headitem = 1;
+ else
+ after_headitem = 0;
+ first_row = 0;
+ headitem_flag = 0;
+ return 0;
+ }
+ first_row = 0;
+
+ if (current_env_no > 0) {
+ output_multitable_row ();
+ }
+ /* start at column 1 */
+ select_output_environment (1);
+ if (!output_paragraph) {
+ line_error (_("[unexpected] cannot select column #%d in multitable"),
+ current_env_no);
+ xexit (1);
+ }
+
+ init_column ();
+
+ if (headitem_flag)
+ hsep = 1;
+ else
+ hsep = 0;
+
+ if (headitem_flag)
+ after_headitem = 1;
+ else
+ after_headitem = 0;
+ headitem_flag = 0;
+
+ return 0;
+}
+
+#undef CHAR_AT
+#undef CHAR_ADDR
+
+/* select a new column in current row of multitable */
+void
+cm_tab (void)
+{
+ if (!multitable_active)
+ error (_("ignoring @tab outside of multitable"));
+
+ current_column_no++;
+
+ if (html)
+ {
+ if (seen_column_fractions)
+ add_word_args ("</%s><%s valign=\"top\" width=\"%d%%\">",
+ headitem_row ? "th" : "td",
+ headitem_row ? "th" : "td",
+ envs[current_column_no].fill_column);
+ else
+ add_word_args ("</%s><%s valign=\"top\">",
+ headitem_row ? "th" : "td",
+ headitem_row ? "th" : "td");
+ }
+ /* else if (docbook)*/ /* 05-08 */
+ else if (xml)
+ xml_end_multitable_column ();
+ else
+ nselect_next_environment ();
+
+ init_column ();
+}
+
+/* close a multitable, flushing its output and resetting
+ whatever needs resetting */
+void
+end_multitable (void)
+{
+ if (!html && !docbook)
+ output_multitable_row ();
+
+ /* Multitables cannot be nested. Otherwise, we'd have to save the
+ previous output environment number on a stack somewhere, and then
+ restore to that environment. */
+ select_output_environment (0);
+ multitable_active = 0;
+ uninhibit_output_flushing ();
+ close_insertion_paragraph ();
+
+ if (html)
+ add_word_args ("<br></%s></tr></table>\n", headitem_row ? "th" : "td");
+ /* else if (docbook)*/ /* 05-08 */
+ else if (xml)
+ xml_end_multitable ();
+
+#if 0
+ printf (_("** Multicolumn output from last row:\n"));
+ for (i = 1; i <= last_column; i++) {
+ select_output_environment (i);
+ printf (_("* column #%d: output = %s\n"), i, output_paragraph);
+ }
+#endif
+}
diff --git a/makeinfo/multi.h b/makeinfo/multi.h
new file mode 100644
index 0000000..391c05d
--- /dev/null
+++ b/makeinfo/multi.h
@@ -0,0 +1,26 @@
+/* multi.h -- declarations for multi.c.
+ $Id: multi.h,v 1.4 2007/07/01 21:20:33 karl Exp $
+
+ Copyright (C) 2004, 2007 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/>. */
+
+#ifndef MULTI_H
+#define MULTI_H
+
+extern void do_multitable (void);
+extern void end_multitable (void);
+extern int multitable_item (void);
+
+#endif /* !MULTI_H */
diff --git a/makeinfo/node.c b/makeinfo/node.c
new file mode 100644
index 0000000..4a5a598
--- /dev/null
+++ b/makeinfo/node.c
@@ -0,0 +1,1947 @@
+/* node.c -- nodes for Texinfo.
+ $Id: node.c,v 1.41 2008/07/05 23:57:29 karl Exp $
+
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008
+ 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 "system.h"
+#include "cmds.h"
+#include "files.h"
+#include "float.h"
+#include "footnote.h"
+#include "macro.h"
+#include "makeinfo.h"
+#include "node.h"
+#include "html.h"
+#include "sectioning.h"
+#include "insertion.h"
+#include "xml.h"
+
+/* See comments in node.h. */
+NODE_REF *node_references = NULL;
+NODE_REF *node_node_references = NULL;
+TAG_ENTRY *tag_table = NULL;
+int node_number = -1;
+int node_order = 0;
+int current_section = 0;
+int outstanding_node = 0;
+
+/* Adding nodes, and making tags. */
+
+/* Start a new tag table. */
+void
+init_tag_table (void)
+{
+ while (tag_table)
+ {
+ TAG_ENTRY *temp = tag_table;
+ free (temp->node);
+ free (temp->prev);
+ free (temp->next);
+ free (temp->up);
+ tag_table = tag_table->next_ent;
+ free (temp);
+ }
+}
+
+/* Write out the contents of the existing tag table.
+ INDIRECT_P says how to format the output (it depends on whether the
+ table is direct or indirect). */
+static void
+write_tag_table_internal (int indirect_p)
+{
+ TAG_ENTRY *node;
+ int old_indent = no_indent;
+
+ if (xml)
+ {
+ flush_output ();
+ return;
+ }
+
+ no_indent = 1;
+ filling_enabled = 0;
+ must_start_paragraph = 0;
+ close_paragraph ();
+
+ if (!indirect_p)
+ {
+ no_indent = 1;
+ insert ('\n');
+ }
+
+ add_word_args ("\037\nTag Table:\n%s", indirect_p ? "(Indirect)\n" : "");
+
+ /* Do not collapse -- to -, etc., in node names. */
+ in_fixed_width_font++;
+
+ for (node = tag_table; node; node = node->next_ent)
+ {
+ if (node->flags & TAG_FLAG_ANCHOR)
+ { /* This reference is to an anchor. */
+ execute_string ("Ref: %s", node->node);
+ }
+ else
+ { /* This reference is to a node. */
+ execute_string ("Node: %s", node->node);
+ }
+ add_word_args ("\177%d\n", node->position);
+ }
+
+ add_word ("\037\nEnd Tag Table\n");
+
+ /* Do not collapse -- to -, etc., in node names. */
+ in_fixed_width_font--;
+
+ flush_output ();
+ no_indent = old_indent;
+}
+
+void
+write_tag_table (char *filename)
+{
+ output_stream = fopen (filename, "a");
+ if (!output_stream)
+ {
+ fs_error (filename);
+ return;
+ }
+
+ write_tag_table_internal (0); /* Not indirect. */
+
+ if (fclose (output_stream) != 0)
+ fs_error (filename);
+}
+
+static void
+write_tag_table_indirect (void)
+{
+ write_tag_table_internal (1);
+}
+
+/* Convert "top" and friends into "Top". */
+static void
+normalize_node_name (char *string)
+{
+ if (mbscasecmp (string, "Top") == 0)
+ strcpy (string, "Top");
+}
+
+static char *
+get_node_token (int expand)
+{
+ char *string;
+
+ get_until_in_line (expand, ",", &string);
+
+ if (curchar () == ',')
+ input_text_offset++;
+
+ fix_whitespace (string);
+
+ /* Force all versions of "top" to be "Top". */
+ normalize_node_name (string);
+
+ return string;
+}
+
+/* Expand any macros and other directives in a node name, and
+ return the expanded name as an malloc'ed string. */
+char *
+expand_node_name (char *node)
+{
+ char *result = node;
+
+ if (node)
+ {
+ /* Don't expand --, `` etc., in case somebody will want
+ to print the result. */
+ in_fixed_width_font++;
+ result = expansion (node, 0);
+ in_fixed_width_font--;
+ fix_whitespace (result);
+ normalize_node_name (result);
+ }
+ return result;
+}
+
+/* Look up NAME in the tag table, and return the associated
+ tag_entry. If the node is not in the table return NULL. */
+TAG_ENTRY *
+find_node (char *name)
+{
+ TAG_ENTRY *tag = tag_table;
+ char *expanded_name;
+ char n1 = name[0];
+
+ while (tag)
+ {
+ if (tag->node[0] == n1 && strcmp (tag->node, name) == 0)
+ return tag;
+ tag = tag->next_ent;
+ }
+
+ if (!expensive_validation)
+ return NULL;
+
+ /* Try harder. Maybe TAG_TABLE has the expanded NAME, or maybe NAME
+ is expanded while TAG_TABLE has its unexpanded form. This may
+ slow down the search, but if they want this feature, let them
+ pay! If they want it fast, they should write every node name
+ consistently (either always expanded or always unexpaned). */
+ expanded_name = expand_node_name (name);
+ for (tag = tag_table; tag; tag = tag->next_ent)
+ {
+ if (STREQ (tag->node, expanded_name))
+ break;
+ /* If the tag name doesn't have the command prefix, there's no
+ chance it could expand into anything but itself. */
+ if (strchr (tag->node, COMMAND_PREFIX))
+ {
+ char *expanded_node = expand_node_name (tag->node);
+
+ if (STREQ (expanded_node, expanded_name))
+ {
+ free (expanded_node);
+ break;
+ }
+ free (expanded_node);
+ }
+ }
+ free (expanded_name);
+ return tag;
+}
+
+/* Look in the tag table for a node whose file name is FNAME, and
+ return the associated tag_entry. If there's no such node in the
+ table, return NULL. */
+static TAG_ENTRY *
+find_node_by_fname (char *fname)
+{
+ TAG_ENTRY *tag = tag_table;
+ while (tag)
+ {
+ if (tag->html_fname && FILENAME_CMP (tag->html_fname, fname) == 0)
+ return tag;
+ tag = tag->next_ent;
+ }
+
+ return tag;
+}
+
+/* Remember next, prev, etc. references in a @node command, where we
+ don't care about most of the entries. */
+static void
+remember_node_node_reference (char *node)
+{
+ NODE_REF *temp = xmalloc (sizeof (NODE_REF));
+ int number;
+
+ if (!node) return;
+ temp->next = node_node_references;
+ temp->node = xstrdup (node);
+ temp->type = followed_reference;
+ number = number_of_node (node);
+ if (number)
+ temp->number = number; /* Already assigned. */
+ else
+ {
+ node_number++;
+ temp->number = node_number;
+ }
+ node_node_references = temp;
+}
+
+/* Remember NODE and associates. */
+static void
+remember_node (char *node, char *prev, char *next, char *up,
+ int position, int line_no, char *fname, int flags)
+{
+ /* Check for existence of this tag already. */
+ if (validating)
+ {
+ TAG_ENTRY *tag = find_node (node);
+ if (tag)
+ {
+ line_error (_("Node `%s' previously defined at line %d"),
+ node, tag->line_no);
+ return;
+ }
+ }
+
+ if (!(flags & TAG_FLAG_ANCHOR))
+ {
+ /* Make this the current node. */
+ current_node = node;
+ }
+
+ /* Add it to the list. */
+ {
+ int number = number_of_node (node);
+
+ TAG_ENTRY *new = xmalloc (sizeof (TAG_ENTRY));
+ new->node = node;
+ new->prev = prev;
+ new->next = next;
+ new->up = up;
+ new->position = position;
+ new->line_no = line_no;
+ new->filename = node_filename;
+ new->touched = 0;
+ new->flags = flags;
+ if (number)
+ new->number = number; /* Already assigned. */
+ else
+ {
+ node_number++;
+ new->number = node_number;
+ }
+ if (fname)
+ new->html_fname = fname;
+ else
+ /* This happens for Top node under split-HTML, for example. */
+ new->html_fname
+ = normalize_filename (filename_part (current_output_filename));
+ new->next_ent = tag_table;
+
+ /* Increment the order counter, and save it. */
+ node_order++;
+ new->order = node_order;
+
+ tag_table = new;
+ }
+
+ if (html)
+ { /* Note the references to the next etc. nodes too. */
+ remember_node_node_reference (next);
+ remember_node_node_reference (prev);
+ remember_node_node_reference (up);
+ }
+}
+
+/* Remember this node name for later validation use. This is used to
+ remember menu references while reading the input file. After the
+ output file has been written, if validation is on, then we use the
+ contents of `node_references' as a list of nodes to validate. */
+void
+remember_node_reference (char *node, int line, enum reftype type)
+{
+ NODE_REF *temp = xmalloc (sizeof (NODE_REF));
+ int number = number_of_node (node);
+
+ temp->next = node_references;
+ temp->node = xstrdup (node);
+ temp->line_no = line;
+ temp->section = current_section;
+ temp->type = type;
+ temp->containing_node = xstrdup (current_node ? current_node : "");
+ temp->filename = node_filename;
+ if (number)
+ temp->number = number; /* Already assigned. */
+ else
+ {
+ node_number++;
+ temp->number = node_number;
+ }
+
+ node_references = temp;
+}
+
+static void
+isolate_nodename (char *nodename)
+{
+ int i, c;
+ int paren_seen, paren;
+
+ if (!nodename)
+ return;
+
+ canon_white (nodename);
+ paren_seen = paren = i = 0;
+
+ if (*nodename == '.' || !*nodename)
+ {
+ *nodename = 0;
+ return;
+ }
+
+ if (*nodename == '(')
+ {
+ paren++;
+ paren_seen++;
+ i++;
+ }
+
+ for (; (c = nodename[i]); i++)
+ {
+ if (paren)
+ {
+ if (c == '(')
+ paren++;
+ else if (c == ')')
+ paren--;
+
+ continue;
+ }
+
+ /* If the character following the close paren is a space, then this
+ node has no more characters associated with it. */
+ if (c == '\t' ||
+ c == '\n' ||
+ c == ',' ||
+ ((paren_seen && i > 0 && nodename[i - 1] == ')') &&
+ (c == ' ' || c == '.')) ||
+ (c == '.' &&
+ ((!nodename[i + 1] ||
+ (cr_or_whitespace (nodename[i + 1])) ||
+ (nodename[i + 1] == ')')))))
+ break;
+ }
+ nodename[i] = 0;
+}
+
+/* This function gets called at the start of every line while inside a
+ menu. It checks to see if the line starts with "* ", and if so and
+ REMEMBER_REF is nonzero, remembers the node reference as type
+ REF_TYPE that this menu refers to. input_text_offset is at the \n
+ just before the menu line. If REMEMBER_REF is zero, REF_TYPE is unused. */
+#define MENU_STARTER "* "
+char *
+glean_node_from_menu (int remember_ref, enum reftype ref_type)
+{
+ int i, orig_offset = input_text_offset;
+ char *nodename;
+ char *line, *expanded_line;
+ char *old_input = input_text;
+ int old_size = input_text_length;
+
+ if (strncmp (&input_text[input_text_offset + 1],
+ MENU_STARTER,
+ strlen (MENU_STARTER)) != 0)
+ return NULL;
+ else
+ input_text_offset += strlen (MENU_STARTER) + 1;
+
+ /* The menu entry might include macro calls, so we need to expand them. */
+ get_until ("\n", &line);
+ only_macro_expansion++; /* only expand macros in menu entries */
+ expanded_line = expansion (line, 0);
+ only_macro_expansion--;
+ free (line);
+ input_text = expanded_line;
+ input_text_offset = 0;
+ input_text_length = strlen (expanded_line);
+
+ get_until_in_line (0, ":", &nodename);
+ if (curchar () == ':')
+ input_text_offset++;
+
+ if (curchar () != ':')
+ {
+ free (nodename);
+ get_until_in_line (0, "\n", &nodename);
+ isolate_nodename (nodename);
+ }
+
+ input_text = old_input;
+ input_text_offset = orig_offset;
+ input_text_length = old_size;
+ free (expanded_line);
+ fix_whitespace (nodename);
+ normalize_node_name (nodename);
+ i = strlen (nodename);
+ if (i && nodename[i - 1] == ':')
+ nodename[i - 1] = 0;
+
+ if (remember_ref)
+ remember_node_reference (nodename, line_number, ref_type);
+
+ return nodename;
+}
+
+/* Set the name of the current output file. */
+void
+set_current_output_filename (const char *fname)
+{
+ if (current_output_filename)
+ free (current_output_filename);
+ current_output_filename = xstrdup (fname);
+}
+
+
+/* Output the <a name="..."></a> constructs for NODE. We output both
+ the new-style conversion and the old-style, if they are different.
+ See comments at `add_escaped_anchor_name' in html.c. */
+
+static void
+add_html_names (char *node)
+{
+ char *tem = expand_node_name (node);
+ char *otem = xstrdup (tem);
+
+ /* Determine if the old and new schemes come up with different names;
+ only output the old scheme if that is so. We don't want to output
+ the same name twice. */
+ canon_white (otem);
+ {
+ char *optr = otem;
+ int need_old = 0;
+
+ for (; *optr; optr++)
+ {
+ if (!cr_or_whitespace (*optr) && !URL_SAFE_CHAR (*optr))
+ {
+ need_old = 1;
+ break;
+ }
+ }
+
+ if (need_old)
+ {
+ add_word ("<a name=\"");
+ add_anchor_name (otem, -1); /* old anchor name conversion */
+ add_word ("\"></a>\n");
+ }
+ free (otem);
+ }
+
+ /* Always output the new scheme. */
+ canon_white (tem);
+ add_word ("<a name=\"");
+ add_anchor_name (tem, 0);
+ add_word ("\"></a>\n");
+
+ free (tem);
+}
+
+
+/* The order is: nodename, nextnode, prevnode, upnode.
+ If all of the NEXT, PREV, and UP fields are empty, they are defaulted.
+ You must follow a node command which has those fields defaulted
+ with a sectioning command (e.g., @chapter) giving the "level" of that node.
+ It is an error not to do so.
+ The defaults come from the menu in this node's parent. */
+void
+cm_node (void)
+{
+ static long epilogue_len = 0L;
+ char *node, *prev, *next, *up;
+ int new_node_pos, defaulting, this_section;
+ int no_warn = 0;
+ char *fname_for_this_node = NULL;
+ char *tem;
+ TAG_ENTRY *tag = NULL;
+
+ if (strcmp (command, "nwnode") == 0)
+ no_warn = TAG_FLAG_NO_WARN;
+
+ /* Get rid of unmatched brace arguments from previous commands. */
+ discard_braces ();
+
+ /* There also might be insertions left lying around that haven't been
+ ended yet. Do that also. */
+ discard_insertions (1);
+
+ if (!html && !already_outputting_pending_notes)
+ {
+ close_paragraph ();
+ output_pending_notes ();
+ }
+
+ new_node_pos = output_position;
+
+ if (macro_expansion_output_stream && !executing_string)
+ append_to_expansion_output (input_text_offset + 1);
+
+ /* Do not collapse -- to -, etc., in node names. */
+ in_fixed_width_font++;
+
+ /* While expanding the @node line, leave any non-macros
+ intact, so that the macro-expanded output includes them. */
+ only_macro_expansion++;
+ node = get_node_token (1);
+ only_macro_expansion--;
+ next = get_node_token (0);
+ prev = get_node_token (0);
+ up = get_node_token (0);
+
+ if (html && splitting
+ /* If there is a Top node, it always goes into index.html. So
+ don't start a new HTML file for Top. */
+ && (top_node_seen || mbscasecmp (node, "Top") != 0))
+ {
+ /* We test *node here so that @node without a valid name won't
+ start a new file name with a bogus name such as ".html".
+ This could happen if we run under "--force", where we cannot
+ simply bail out. Continuing to use the same file sounds like
+ the best we can do in such cases. */
+ if (current_output_filename && output_stream && *node)
+ {
+ char *fname_for_prev_node;
+
+ if (current_node)
+ {
+ /* NOTE: current_node at this point still holds the name
+ of the previous node. */
+ tem = expand_node_name (current_node);
+ fname_for_prev_node = nodename_to_filename (tem);
+ free (tem);
+ }
+ else /* could happen if their top node isn't named "Top" */
+ fname_for_prev_node = filename_part (current_output_filename);
+ tem = expand_node_name (node);
+ fname_for_this_node = nodename_to_filename (tem);
+ free (tem);
+ /* Don't close current output file, if next output file is
+ to have the same name. This may happen at top level, or
+ if two nodes produce the same file name under --split. */
+ if (FILENAME_CMP (fname_for_this_node, fname_for_prev_node) != 0)
+ {
+ long pos1 = 0;
+
+ /* End the current split output file. */
+ close_paragraph ();
+ output_pending_notes ();
+ start_paragraph ();
+ /* Compute the length of the HTML file's epilogue. We
+ cannot know the value until run time, due to the
+ text/binary nuisance on DOS/Windows platforms, where
+ 2 `\r' characters could be added to the epilogue when
+ it is written in text mode. */
+ if (epilogue_len == 0)
+ {
+ flush_output ();
+ pos1 = ftell (output_stream);
+ }
+ add_word ("</body></html>\n");
+ close_paragraph ();
+ if (epilogue_len == 0)
+ epilogue_len = ftell (output_stream) - pos1;
+ fclose (output_stream);
+ output_stream = NULL;
+ output_position = 0;
+ tag = find_node_by_fname (fname_for_this_node);
+ }
+ free (fname_for_prev_node);
+ }
+ }
+
+ filling_enabled = indented_fill = 0;
+ if (!html || (html && splitting))
+ current_footnote_number = 1;
+
+ if (verbose_mode)
+ printf (_("Formatting node %s...\n"), node);
+
+ if (macro_expansion_output_stream && !executing_string)
+ remember_itext (input_text, input_text_offset);
+
+ /* Reset the line number in each node for Info output, so that
+ index entries will save the line numbers of parent node. */
+ node_line_number = 0;
+
+ no_indent = 1;
+ if (xml)
+ {
+ xml_begin_node ();
+ if (!docbook)
+ {
+ xml_insert_element (NODENAME, START);
+ if (macro_expansion_output_stream && !executing_string)
+ me_execute_string (node);
+ else
+ execute_string ("%s", node);
+ xml_insert_element (NODENAME, END);
+ }
+ else
+ xml_node_id = xml_id (node);
+ }
+ else if (!no_headers && !html)
+ {
+ /* Emacs Info reader cannot grok indented escape sequence. */
+ kill_self_indent (-1);
+
+ add_word_args ("\037\nFile: %s, Node: ", pretty_output_filename);
+
+ if (macro_expansion_output_stream && !executing_string)
+ me_execute_string (node);
+ else
+ execute_string ("%s", node);
+ filling_enabled = indented_fill = 0;
+ }
+
+ /* Check for defaulting of this node's next, prev, and up fields. */
+ defaulting = (*next == 0 && *prev == 0 && *up == 0);
+
+ this_section = what_section (input_text + input_text_offset, NULL);
+
+ /* If we are defaulting, then look at the immediately following
+ sectioning command (error if none) to determine the node's
+ level. Find the node that contains the menu mentioning this node
+ that is one level up (error if not found). That node is the "Up"
+ of this node. Default the "Next" and "Prev" from the menu. */
+ if (defaulting)
+ {
+ NODE_REF *last_ref = NULL;
+ NODE_REF *ref = node_references;
+
+ if (this_section < 0 && !STREQ (node, "Top"))
+ {
+ char *polite_section_name = "top";
+ int i;
+
+ for (i = 0; section_alist[i].name; i++)
+ if (section_alist[i].level == current_section + 1)
+ {
+ polite_section_name = section_alist[i].name;
+ break;
+ }
+
+ line_error
+ (_("Node `%s' requires a sectioning command (e.g., %c%s)"),
+ node, COMMAND_PREFIX, polite_section_name);
+ }
+ else
+ {
+ if (strcmp (node, "Top") == 0)
+ {
+ /* Default the NEXT pointer to be the first menu item in
+ this node, if there is a menu in this node. We have to
+ try very hard to find the menu, as it may be obscured
+ by execution_strings which are on the filestack. For
+ every member of the filestack which has a FILENAME
+ member which is identical to the current INPUT_FILENAME,
+ search forward from that offset. */
+ int saved_input_text_offset = input_text_offset;
+ int saved_input_text_length = input_text_length;
+ char *saved_input_text = input_text;
+ FSTACK *next_file = filestack;
+
+ int orig_offset, orig_size;
+
+ int bye_offset = search_forward ("\n@bye", input_text_offset);
+
+ /* No matter what, make this file point back at `(dir)'. */
+ free (up);
+ up = xstrdup ("(dir)"); /* html fixxme */
+
+ while (1)
+ {
+ orig_offset = input_text_offset;
+ orig_size =
+ search_forward (node_search_string, orig_offset);
+
+ if (orig_size < 0)
+ orig_size = input_text_length;
+
+ input_text_offset = search_forward ("\n@menu", orig_offset);
+ if (input_text_offset > -1
+ && (bye_offset > -1 && input_text_offset < bye_offset)
+ && cr_or_whitespace (input_text[input_text_offset + 6]))
+ {
+ char *nodename_from_menu = NULL;
+
+ input_text_offset =
+ search_forward ("\n* ", input_text_offset);
+
+ if (input_text_offset != -1)
+ nodename_from_menu = glean_node_from_menu (0,
+ (enum reftype) 0);
+
+ if (nodename_from_menu)
+ {
+ free (next);
+ next = nodename_from_menu;
+ break;
+ }
+ }
+
+ /* We got here, so it hasn't been found yet. Try
+ the next file on the filestack if there is one. */
+ if (next_file
+ && FILENAME_CMP (next_file->filename, input_filename)
+ == 0)
+ {
+ input_text = next_file->text;
+ input_text_offset = next_file->offset;
+ input_text_length = next_file->size;
+ next_file = next_file->next;
+ }
+ else
+ { /* No more input files to check. */
+ break;
+ }
+ }
+
+ input_text = saved_input_text;
+ input_text_offset = saved_input_text_offset;
+ input_text_length = saved_input_text_length;
+ }
+ }
+
+ /* Fix the level of the menu references in the Top node, iff it
+ was declared with @top, and no subsequent reference was found. */
+ if (top_node_seen && !non_top_node_seen)
+ {
+ /* Then this is the first non-@top node seen. */
+ int level;
+
+ level = set_top_section_level (this_section - 1);
+ non_top_node_seen = 1;
+
+ while (ref)
+ {
+ if (ref->section == level)
+ ref->section = this_section - 1;
+ ref = ref->next;
+ }
+
+ ref = node_references;
+ }
+
+ while (ref)
+ {
+ if (ref->section == (this_section - 1)
+ && ref->type == menu_reference
+ && strcmp (ref->node, node) == 0)
+ {
+ char *containing_node = ref->containing_node;
+
+ free (up);
+ up = xstrdup (containing_node);
+
+ if (last_ref
+ && last_ref->type == menu_reference
+ && strcmp (last_ref->containing_node, containing_node) == 0)
+ {
+ free (next);
+ next = xstrdup (last_ref->node);
+ }
+
+ while (ref->section == this_section - 1
+ && ref->next
+ && ref->next->type != menu_reference)
+ ref = ref->next;
+
+ if (ref->next && ref->type == menu_reference
+ && strcmp (ref->next->containing_node, containing_node) == 0)
+ {
+ free (prev);
+ prev = xstrdup (ref->next->node);
+ }
+ else if (!ref->next
+ && mbscasecmp (ref->containing_node, "Top") == 0)
+ {
+ free (prev);
+ prev = xstrdup (ref->containing_node);
+ }
+ break;
+ }
+ last_ref = ref;
+ ref = ref->next;
+ }
+ }
+
+ /* Insert the correct args if we are expanding macros, and the node's
+ pointers weren't defaulted. */
+ if (macro_expansion_output_stream && !executing_string && !defaulting)
+ {
+ char *temp;
+ int op_orig = output_paragraph_offset;
+ int meta_pos_orig = meta_char_pos;
+ int extra = html ? strlen (node) : 0;
+
+ temp = xmalloc (7 + extra + strlen (next) + strlen (prev) + strlen (up));
+ sprintf (temp, "%s, %s, %s, %s", html ? node : "", next, prev, up);
+ me_execute_string (temp);
+ free (temp);
+
+ output_paragraph_offset = op_orig;
+ meta_char_pos = meta_pos_orig;
+ }
+
+ if (!*node)
+ {
+ line_error (_("No node name specified for `%c%s' command"),
+ COMMAND_PREFIX, command);
+ free (node);
+ free (next); next = NULL;
+ free (prev); prev= NULL;
+ free (up); up = NULL;
+ node_number++; /* else it doesn't get bumped */
+ }
+ else
+ {
+ if (!*next) { free (next); next = NULL; }
+ if (!*prev) { free (prev); prev = NULL; }
+ if (!*up) { free (up); up = NULL; }
+ remember_node (node, prev, next, up, new_node_pos, line_number,
+ fname_for_this_node, no_warn);
+ outstanding_node = 1;
+ }
+
+ if (html)
+ {
+ if (splitting && *node && output_stream == NULL)
+ {
+ char *dirname;
+ char filename[PATH_MAX];
+
+ dirname = pathname_part (current_output_filename);
+ strcpy (filename, dirname);
+ strcat (filename, fname_for_this_node);
+ free (dirname);
+
+ /* See if the node name converted to a file name clashes
+ with other nodes or anchors. If it clashes with an
+ anchor, we complain and nuke that anchor's file. */
+ if (!tag)
+ {
+ output_stream = fopen (filename, "w");
+ output_head_p = 0; /* so that we generate HTML preamble */
+ output_head ();
+ }
+ else if ((tag->flags & TAG_FLAG_ANCHOR) != 0)
+ {
+ line_error (_("Anchor `%s' and node `%s' map to the same file name"),
+ tag->node, node);
+ file_line_error (tag->filename, tag->line_no,
+ _("This @anchor command ignored; references to it will not work"));
+ file_line_error (tag->filename, tag->line_no,
+ _("Rename this anchor or use the `--no-split' option"));
+ /* Nuke the file name recorded in anchor's tag.
+ Since we are about to nuke the file itself, we
+ don't want find_node_by_fname to consider this
+ anchor anymore. */
+ free (tag->html_fname);
+ tag->html_fname = NULL;
+ output_stream = fopen (filename, "w");
+ output_head_p = 0; /* so that we generate HTML preamble */
+ output_head ();
+ }
+ else
+ {
+ /* This node's file name clashes with another node.
+ We put them both on the same file. */
+ output_stream = fopen (filename, "r+");
+ if (output_stream)
+ {
+ static char html_end[] = "</body></html>\n";
+ char end_line[sizeof(html_end)];
+ int fpos = fseek (output_stream, -epilogue_len,
+ SEEK_END);
+
+ if (fpos < 0
+ || fgets (end_line, sizeof (html_end),
+ output_stream) == NULL
+ /* Paranoia: did someone change the way HTML
+ files are finished up? */
+ || mbscasecmp (end_line, html_end) != 0)
+ {
+ line_error (_("Unexpected string at end of split-HTML file `%s'"),
+ fname_for_this_node);
+ fclose (output_stream);
+ xexit (1);
+ }
+ fseek (output_stream, -epilogue_len, SEEK_END);
+ }
+ }
+ if (output_stream == NULL)
+ {
+ fs_error (filename);
+ xexit (1);
+ }
+ set_current_output_filename (filename);
+ }
+
+ if (!splitting && no_headers)
+ { /* cross refs need a name="#anchor" even if not writing headers */
+ add_html_names (node);
+ }
+
+ if (splitting || !no_headers)
+ { /* Navigation bar. */
+ add_html_block_elt ("<div class=\"node\">\n");
+
+ /* In the split HTML case, the filename is wrong for the
+ old-style converted names, but we'll add them anyway, for
+ consistency. (And we need them in the normal (not
+ no_headers) nonsplit case.) */
+ add_html_names (node);
+
+ /* Do this after adding the anchors, so the browser rendering
+ can be better. The <p> avoids the links area running on
+ with old Lynxen. */
+ add_word_args ("<p>%s\n", splitting ? "" : "<hr>");
+
+ if (next)
+ {
+ tem = expansion (next, 0);
+ add_word ((char *) gdt("Next:"));
+ add_word ("&nbsp;");
+
+ add_word ("<a rel=\"next\" accesskey=\"n\" href=\"");
+ add_anchor_name (tem, 1);
+ tem = escape_string (tem);
+ add_word_args ("\">%s</a>", tem);
+
+ free (tem);
+
+ if (prev || up)
+ add_word (",\n");
+ }
+ if (prev)
+ {
+ tem = expansion (prev, 0);
+ add_word ((char *) gdt("Previous:"));
+ add_word ("&nbsp;");
+ add_word ("<a rel=\"previous\" accesskey=\"p\" href=\"");
+ add_anchor_name (tem, 1);
+ tem = escape_string (tem);
+ add_word_args ("\">%s</a>", tem);
+ free (tem);
+
+ if (up)
+ add_word (",\n");
+ }
+ if (up)
+ {
+ tem = expansion (up, 0);
+ add_word ((char *) gdt("Up:"));
+ add_word ("&nbsp;");
+ add_word ("<a rel=\"up\" accesskey=\"u\" href=\"");
+ add_anchor_name (tem, 1);
+ tem = escape_string (tem);
+ add_word_args ("\">%s</a>", tem);
+ free (tem);
+ }
+ /* html fixxme: we want a `top' or `contents' link here. */
+
+ add_word_args ("\n%s\n", splitting ? "<hr>" : "");
+ add_word ("</div>\n");
+ }
+ }
+ else if (docbook)
+ ;
+ else if (xml)
+ {
+ if (next)
+ {
+ xml_insert_element (NODENEXT, START);
+ execute_string ("%s", next);
+ xml_insert_element (NODENEXT, END);
+ }
+ if (prev)
+ {
+ xml_insert_element (NODEPREV, START);
+ execute_string ("%s", prev);
+ xml_insert_element (NODEPREV, END);
+ }
+ if (up)
+ {
+ xml_insert_element (NODEUP, START);
+ execute_string ("%s", up);
+ xml_insert_element (NODEUP, END);
+ }
+ }
+ else if (!no_headers)
+ {
+ if (macro_expansion_output_stream)
+ me_inhibit_expansion++;
+
+ /* These strings are not translatable. */
+ if (next)
+ {
+ execute_string (", Next: %s", next);
+ filling_enabled = indented_fill = 0;
+ }
+ if (prev)
+ {
+ execute_string (", Prev: %s", prev);
+ filling_enabled = indented_fill = 0;
+ }
+ if (up)
+ {
+ execute_string (", Up: %s", up);
+ filling_enabled = indented_fill = 0;
+ }
+ if (macro_expansion_output_stream)
+ me_inhibit_expansion--;
+ }
+
+ close_paragraph ();
+ no_indent = 0;
+
+ /* Change the section only if there was a sectioning command. */
+ if (this_section >= 0)
+ current_section = this_section;
+
+ if (current_node && STREQ (current_node, "Top"))
+ top_node_seen = 1;
+
+ filling_enabled = 1;
+ in_fixed_width_font--;
+}
+
+/* Cross-reference target at an arbitrary spot. */
+void
+cm_anchor (int arg)
+{
+ char *anchor;
+ char *fname_for_anchor = NULL;
+
+ if (arg == END)
+ {
+ /* We want to ignore whitespace following @anchor a la
+ texinfo.tex, but we're sitting at the }. So advance past it,
+ ignore the whitespace, and then go back one character. When we
+ return, reader_loop will increment input_text_offset again (see
+ the '}' case). Sorry. */
+ input_text_offset++;
+ skip_whitespace_and_newlines ();
+ input_text_offset--;
+ return;
+ }
+
+ /* Parse the anchor text. */
+ anchor = get_xref_token (1);
+
+ /* Force all versions of "top" to be "Top". */
+ normalize_node_name (anchor);
+
+ /* In HTML mode, need to actually produce some output. */
+ if (html)
+ {
+ /* If this anchor is at the beginning of a new paragraph, make
+ sure a new paragraph is indeed started. */
+ if (!paragraph_is_open)
+ {
+ if (!executing_string && html)
+ output_head ();
+ start_paragraph ();
+ if (!in_fixed_width_font || in_menu || in_detailmenu)
+ {
+ insert_string ("<p>");
+ in_paragraph = 1;
+ }
+ }
+ add_word ("<a name=\"");
+ add_anchor_name (anchor, 0);
+ add_word ("\"></a>");
+ if (splitting)
+ {
+ /* If we are splitting, cm_xref will produce a reference to
+ a file whose name is derived from the anchor name. So we
+ must create a file when we see an @anchor, otherwise
+ xref's to anchors won't work. The file we create simply
+ redirects to the file of this anchor's node. */
+ TAG_ENTRY *tag;
+
+ fname_for_anchor = nodename_to_filename (anchor);
+ /* See if the anchor name converted to a file name clashes
+ with other anchors or nodes. */
+ tag = find_node_by_fname (fname_for_anchor);
+ if (tag)
+ {
+ if ((tag->flags & TAG_FLAG_ANCHOR) != 0)
+ line_error (_("Anchors `%s' and `%s' map to the same file name"),
+ anchor, tag->node);
+ else
+ line_error (_("Anchor `%s' and node `%s' map to the same file name"),
+ anchor, tag->node);
+ line_error (_("@anchor command ignored; references to it will not work"));
+ line_error (_("Rename this anchor or use the `--no-split' option"));
+ free (fname_for_anchor);
+ /* We will not be creating a file for this anchor, so
+ set its name to NULL, so that remember_node stores a
+ NULL and find_node_by_fname won't consider this
+ anchor for clashes. */
+ fname_for_anchor = NULL;
+ }
+ else
+ {
+ char *dirname, *p;
+ char filename[PATH_MAX];
+ FILE *anchor_stream;
+
+ dirname = pathname_part (current_output_filename);
+ strcpy (filename, dirname);
+ strcat (filename, fname_for_anchor);
+ free (dirname);
+
+ anchor_stream = fopen (filename, "w");
+ if (anchor_stream == NULL)
+ {
+ fs_error (filename);
+ xexit (1);
+ }
+ /* The HTML magic below will cause the browser to
+ immediately go to the anchor's node's file. Lynx
+ seems not to support this redirection, but it looks
+ like a bug in Lynx, and they can work around it by
+ clicking on the link once more. */
+ fputs ("<meta http-equiv=\"refresh\" content=\"0; url=",
+ anchor_stream);
+ /* Make the indirect link point to the current node's
+ file and anchor's "<a name" label. If we don't have
+ a valid node name, refer to the current output file
+ instead. */
+ if (current_node && *current_node)
+ {
+ char *fn, *tem;
+
+ tem = expand_node_name (current_node);
+ fn = nodename_to_filename (tem);
+ free (tem);
+ fputs (fn, anchor_stream);
+ free (fn);
+ }
+ else
+ {
+ char *base = filename_part (current_output_filename);
+
+ fputs (base, anchor_stream);
+ free (base);
+ }
+ fputs ("#", anchor_stream);
+ for (p = anchor; *p; p++)
+ {
+ if (*p == '&')
+ fputs ("&amp;", anchor_stream);
+ else if (!URL_SAFE_CHAR (*p))
+ fprintf (anchor_stream, "%%%x", (unsigned char) *p);
+ else
+ fputc (*p, anchor_stream);
+ }
+ fputs ("\">\n", anchor_stream);
+ fclose (anchor_stream);
+ }
+ }
+ }
+ else if (xml || docbook)
+ {
+ xml_insert_element_with_attribute (ANCHOR, START,
+ docbook ? "id=\"%s\"" : "name=\"%s\"",
+ anchor);
+ xml_insert_element (ANCHOR, END);
+ }
+
+ /* Save it in the tag table. */
+ remember_node (anchor, NULL, NULL, NULL,
+ output_position + output_paragraph_offset,
+ line_number, fname_for_anchor, TAG_FLAG_ANCHOR);
+}
+
+/* Find NODE in REF_LIST. */
+static NODE_REF *
+find_node_reference (char *node, NODE_REF *ref_list)
+{
+ NODE_REF *orig_ref_list = ref_list;
+ char *expanded_node;
+
+ while (ref_list)
+ {
+ if (strcmp (node, ref_list->node) == 0)
+ break;
+ ref_list = ref_list->next;
+ }
+
+ if (ref_list || !expensive_validation)
+ return ref_list;
+
+ /* Maybe NODE is not expanded yet. This may be SLOW. */
+ expanded_node = expand_node_name (node);
+ for (ref_list = orig_ref_list; ref_list; ref_list = ref_list->next)
+ {
+ if (STREQ (expanded_node, ref_list->node))
+ break;
+ if (strchr (ref_list->node, COMMAND_PREFIX))
+ {
+ char *expanded_ref = expand_node_name (ref_list->node);
+
+ if (STREQ (expanded_node, expanded_ref))
+ {
+ free (expanded_ref);
+ break;
+ }
+ free (expanded_ref);
+ }
+ }
+ free (expanded_node);
+ return ref_list;
+}
+
+void
+free_node_references (void)
+{
+ NODE_REF *list, *temp;
+
+ list = node_references;
+
+ while (list)
+ {
+ temp = list;
+ free (list->node);
+ free (list->containing_node);
+ list = list->next;
+ free (temp);
+ }
+ node_references = NULL;
+}
+
+void
+free_node_node_references (void)
+{
+ NODE_REF *list, *temp;
+
+ list = node_references;
+
+ while (list)
+ {
+ temp = list;
+ free (list->node);
+ list = list->next;
+ free (temp);
+ }
+ node_node_references = NULL;
+}
+
+/* Return the number assigned to a named node in either the tag_table
+ or node_references list or zero if no number has been assigned. */
+int
+number_of_node (char *node)
+{
+ NODE_REF *temp_ref;
+ TAG_ENTRY *temp_node = find_node (node);
+
+ if (temp_node)
+ return temp_node->number;
+ else if ((temp_ref = find_node_reference (node, node_references)))
+ return temp_ref->number;
+ else if ((temp_ref = find_node_reference (node, node_node_references)))
+ return temp_ref->number;
+ else
+ return 0;
+}
+
+/* validation */
+
+/* Return 1 if TAG (at LINE) correctly validated, or 0 if not.
+ LABEL is the (translated) description of the type of reference --
+ Menu, Cross, Next, etc. */
+
+static int
+validate (char *tag, int line, const char *label)
+{
+ TAG_ENTRY *result;
+
+ /* If there isn't a tag to verify, or if the tag is in another file,
+ then it must be okay. */
+ if (!tag || !*tag || *tag == '(')
+ return 1;
+
+ /* Otherwise, the tag must exist. */
+ result = find_node (tag);
+
+ if (!result)
+ {
+ line_number = line;
+ line_error (_("%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"), label, tag);
+ return 0;
+ }
+ result->touched++;
+ return 1;
+}
+
+/* The strings here are followed in the message by `reference to...' in
+ the `validate' routine. They are only used in messages, thus are
+ translated. */
+static const char *
+reftype_type_string (enum reftype type)
+{
+ switch (type)
+ {
+ case menu_reference:
+ return gdt("Menu");
+ case followed_reference:
+ return gdt("Cross");
+ default:
+ return "Internal-bad-reference-type";
+ }
+}
+
+static void
+validate_other_references (NODE_REF *ref_list)
+{
+ char *old_input_filename = input_filename;
+
+ while (ref_list)
+ {
+ input_filename = ref_list->filename;
+ validate (ref_list->node, ref_list->line_no,
+ reftype_type_string (ref_list->type));
+ ref_list = ref_list->next;
+ }
+ input_filename = old_input_filename;
+}
+
+/* Validation of an info file.
+ Scan through the list of tag entries touching the Prev, Next, and Up
+ elements of each. It is an error not to be able to touch one of them,
+ except in the case of external node references, such as "(DIR)".
+
+ If the Prev is different from the Up,
+ then the Prev node must have a Next pointing at this node.
+
+ Every node except Top must have an Up.
+ The Up node must contain some sort of reference, other than a Next,
+ to this node.
+
+ If the Next is different from the Next of the Up,
+ then the Next node must have a Prev pointing at this node. */
+void
+validate_file (TAG_ENTRY *tag_table)
+{
+ char *old_input_filename = input_filename;
+ TAG_ENTRY *tags = tag_table;
+
+ while (tags)
+ {
+ TAG_ENTRY *temp_tag;
+ char *tem1, *tem2;
+
+ input_filename = tags->filename;
+ line_number = tags->line_no;
+
+ /* If this is a "no warn" node, don't validate it in any way. */
+ if (tags->flags & TAG_FLAG_NO_WARN)
+ {
+ tags = tags->next_ent;
+ continue;
+ }
+
+ /* If this node has a Next, then make sure that the Next exists. */
+ if (tags->next)
+ {
+ validate (tags->next, tags->line_no, gdt("Next"));
+
+ /* If the Next node exists, and there is no Up, then make sure
+ that the Prev of the Next points back. But do nothing if
+ we aren't supposed to issue warnings about this node. */
+ temp_tag = find_node (tags->next);
+ if (temp_tag && !(temp_tag->flags & TAG_FLAG_NO_WARN))
+ {
+ char *prev = temp_tag->prev;
+ int you_lose = !prev || !STREQ (prev, tags->node);
+
+ if (you_lose && expensive_validation)
+ {
+ tem1 = expand_node_name (prev);
+ tem2 = expand_node_name (tags->node);
+
+ if (tem1 && tem2 && STREQ (tem1, tem2))
+ you_lose = 0;
+ free (tem1);
+ free (tem2);
+ }
+ if (you_lose)
+ {
+ line_error (_("Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"),
+ tags->node);
+ file_line_error (temp_tag->filename, temp_tag->line_no,
+ _("This node (%s) has the bad Prev"),
+ temp_tag->node);
+ temp_tag->flags |= TAG_FLAG_PREV_ERROR;
+ }
+ }
+ }
+
+ /* Validate the Prev field if there is one, and we haven't already
+ complained about it in some way. You don't have to have a Prev
+ field at this stage. */
+ if (!(tags->flags & TAG_FLAG_PREV_ERROR) && tags->prev)
+ {
+ int valid_p = validate (tags->prev, tags->line_no, gdt("Prev"));
+
+ if (!valid_p)
+ tags->flags |= TAG_FLAG_PREV_ERROR;
+ else
+ { /* If the Prev field is not the same as the Up field,
+ then the node pointed to by the Prev field must have
+ a Next field which points to this node. */
+ int prev_equals_up = !tags->up || STREQ (tags->prev, tags->up);
+
+ if (!prev_equals_up && expensive_validation)
+ {
+ tem1 = expand_node_name (tags->prev);
+ tem2 = expand_node_name (tags->up);
+ prev_equals_up = STREQ (tem1, tem2);
+ free (tem1);
+ free (tem2);
+ }
+ if (!prev_equals_up)
+ {
+ temp_tag = find_node (tags->prev);
+
+ /* If we aren't supposed to issue warnings about the
+ target node, do nothing. */
+ if (!temp_tag || (temp_tag->flags & TAG_FLAG_NO_WARN))
+ /* Do nothing. */ ;
+ else
+ {
+ int you_lose = !temp_tag->next
+ || !STREQ (temp_tag->next, tags->node);
+
+ if (temp_tag->next && you_lose && expensive_validation)
+ {
+ tem1 = expand_node_name (temp_tag->next);
+ tem2 = expand_node_name (tags->node);
+ if (STREQ (tem1, tem2))
+ you_lose = 0;
+ free (tem1);
+ free (tem2);
+ }
+ if (you_lose)
+ {
+ line_error
+ (_("Prev field of node `%s' not pointed to"),
+ tags->node);
+ file_line_error (temp_tag->filename,
+ temp_tag->line_no,
+ _("This node (%s) has the bad Next"),
+ temp_tag->node);
+ temp_tag->flags |= TAG_FLAG_NEXT_ERROR;
+ }
+ }
+ }
+ }
+ }
+
+ if (!tags->up
+ && !(tags->flags & TAG_FLAG_ANCHOR)
+ && mbscasecmp (tags->node, "Top") != 0)
+ line_error (_("`%s' has no Up field (perhaps incorrect sectioning?)"), tags->node);
+ else if (tags->up)
+ {
+ int valid_p = validate (tags->up, tags->line_no, gdt("Up"));
+
+ /* If node X has Up: Y, then warn if Y fails to have a menu item
+ or note pointing at X, if Y isn't of the form "(Y)". */
+ if (valid_p && *tags->up != '(')
+ {
+ NODE_REF *nref;
+ NODE_REF *tref = NULL;
+ NODE_REF *list = node_references;
+
+ for (;;)
+ {
+ nref = find_node_reference (tags->node, list);
+ if (!nref)
+ break;
+
+ if (strcmp (nref->containing_node, tags->up) == 0)
+ {
+ if (nref->type != menu_reference)
+ {
+ tref = nref;
+ list = nref->next;
+ }
+ else
+ break;
+ }
+ list = nref->next;
+ }
+
+ if (!nref)
+ {
+ if (!tref && expensive_validation)
+ {
+ /* Sigh... This might be AWFULLY slow, but if
+ they want this feature, they'll have to pay!
+ We do all the loop again expanding each
+ containing_node reference as we go. */
+ char *tags_up = expand_node_name (tags->up);
+ char *tem;
+
+ list = node_references;
+
+ for (;;)
+ {
+ nref = find_node_reference (tags->node, list);
+ if (!nref)
+ break;
+ tem = expand_node_name (nref->containing_node);
+ if (STREQ (tem, tags_up))
+ {
+ if (nref->type != menu_reference)
+ tref = nref;
+ else
+ {
+ free (tem);
+ break;
+ }
+ }
+ free (tem);
+ list = nref->next;
+ }
+ }
+ if (!nref && !tref)
+ {
+ temp_tag = find_node (tags->up);
+ file_line_error (temp_tag->filename, temp_tag->line_no,
+ _("Node `%s' lacks menu item for `%s' despite being its Up target"),
+ tags->up, tags->node);
+ }
+ }
+ }
+ }
+ tags = tags->next_ent;
+ }
+
+ validate_other_references (node_references);
+ /* We have told the user about the references which didn't exist.
+ Now tell him about the nodes which aren't referenced. */
+
+ for (tags = tag_table; tags; tags = tags->next_ent)
+ {
+ /* If this node is a "no warn" node, do nothing. */
+ if (tags->flags & TAG_FLAG_NO_WARN)
+ {
+ tags = tags->next_ent;
+ continue;
+ }
+
+ if (tags->touched == 0)
+ {
+ input_filename = tags->filename;
+ line_number = tags->line_no;
+
+ /* Notice that the node "Top" is special, and doesn't have to
+ be referenced. Anchors don't have to be referenced
+ either, you might define them for another document. */
+ if (mbscasecmp (tags->node, "Top") != 0
+ && !(tags->flags & TAG_FLAG_ANCHOR))
+ warning (_("unreferenced node `%s'"), tags->node);
+ }
+ }
+ input_filename = old_input_filename;
+}
+
+
+/* Splitting */
+
+/* Return true if the tag entry pointed to by TAGS is the last node.
+ This means only anchors follow. */
+
+static int
+last_node_p (TAG_ENTRY *tags)
+{
+ int last = 1;
+ while (tags->next_ent) {
+ tags = tags->next_ent;
+ if (tags->flags & TAG_FLAG_ANCHOR)
+ ;
+ else
+ {
+ last = 0;
+ break;
+ }
+ }
+
+ return last;
+}
+
+
+static char *
+enumerate_filename (char *pathname, char *basename, int number)
+{
+ /* Do we need to generate names of subfiles which don't exceed 8+3 limits? */
+ const int dos_file_names = !HAVE_LONG_FILENAMES (pathname ? pathname : ".");
+ unsigned name_len = strlen (basename);
+ char *filename = xmalloc (10 + strlen (pathname) + name_len);
+ char *base_filename = xmalloc (10 + name_len);
+
+ sprintf (base_filename, "%s-%d", basename, number);
+
+ if (dos_file_names)
+ {
+ char *dot = strchr (base_filename, '.');
+ unsigned base_len = strlen (base_filename);
+
+ if (dot)
+ { /* Make foobar.i1, .., foobar.i99, foobar.100, ... */
+ dot[1] = 'i';
+ memmove (number <= 99 ? dot + 2 : dot + 1,
+ base_filename + name_len + 1,
+ strlen (base_filename + name_len + 1) + 1);
+ }
+ else if (base_len > 8)
+ {
+ /* Make foobar-1, .., fooba-10, .., foob-100, ... */
+ unsigned numlen = base_len - name_len;
+
+ memmove (base_filename + 8 - numlen, base_filename + name_len, numlen + 1);
+ }
+ }
+
+ sprintf (filename, "%s%s", pathname, base_filename);
+
+ return filename;
+}
+
+/* Remove previously split files, to avoid
+ lingering parts of shrinked documents. */
+void
+clean_old_split_files (char *filename)
+{
+ char *root_filename = filename_part (filename);
+ char *root_pathname = pathname_part (filename);
+ int i;
+
+ /* We break as soon as we hit an inexistent file,
+ so looping until large numbers is harmless. */
+ for (i = 1; i < 1000; i++)
+ {
+ struct stat st;
+ char *check_file = enumerate_filename (root_pathname, root_filename, i);
+
+ if (stat (check_file, &st) != 0)
+ break;
+ else if (!S_ISDIR (st.st_mode))
+ {
+ /* Give feedback if requested, removing a file is important. */
+ if (verbose_mode)
+ printf (_("Removing %s\n"), check_file);
+
+ /* Warn user that we cannot remove the file. */
+ if (unlink (check_file) != 0)
+ warning (_("Can't remove file `%s': %s"), check_file, strerror (errno));
+ }
+
+ free (check_file);
+ }
+}
+
+
+/* Split large output files into a series of smaller files. Each file
+ is pointed to in the tag table, which then gets written out as the
+ original file. The new files have the same name as the original file
+ with a "-num" attached. SIZE is the largest number of bytes to allow
+ in any single split file. */
+void
+split_file (char *filename, int size)
+{
+ char *root_filename, *root_pathname;
+ char *the_file;
+ struct stat fileinfo;
+ long file_size;
+ char *the_header;
+ int header_size;
+
+ /* Can only do this to files with tag tables. */
+ if (!tag_table)
+ return;
+
+ if (size == 0)
+ size = DEFAULT_SPLIT_SIZE;
+
+ if ((stat (filename, &fileinfo) != 0)
+ || (((long) fileinfo.st_size) < size))
+ return;
+ file_size = (long) fileinfo.st_size;
+
+ the_file = find_and_load (filename, 0);
+ if (!the_file)
+ return;
+
+ root_filename = filename_part (filename);
+ root_pathname = pathname_part (filename);
+
+ if (!root_pathname)
+ root_pathname = xstrdup ("");
+
+ /* Start splitting the file. Walk along the tag table
+ outputting sections of the file. When we have written
+ all of the nodes in the tag table, make the top-level
+ pointer file, which contains indirect pointers and
+ tags for the nodes. */
+ {
+ int which_file = 1;
+ TAG_ENTRY *tags = tag_table;
+ char *indirect_info = NULL;
+
+ /* Maybe we want a Local Variables section. */
+ char *trailer = info_trailer ();
+ int trailer_len = trailer ? strlen (trailer) : 0;
+
+ /* Remember the `header' of this file. The first tag in the file is
+ the bottom of the header; the top of the file is the start. */
+ the_header = xmalloc (1 + (header_size = tags->position));
+ memcpy (the_header, the_file, header_size);
+
+ while (tags)
+ {
+ int file_top, file_bot, limit;
+
+ /* Have to include the Control-_. */
+ file_top = file_bot = tags->position;
+ limit = file_top + size;
+
+ /* If the rest of this file is only one node, then
+ that is the entire subfile. */
+ if (last_node_p (tags))
+ {
+ int i = tags->position + 1;
+ char last_char = the_file[i];
+
+ while (i < file_size)
+ {
+ if ((the_file[i] == '\037') &&
+ ((last_char == '\n') ||
+ (last_char == '\014')))
+ break;
+ else
+ last_char = the_file[i];
+ i++;
+ }
+ file_bot = i;
+ tags = tags->next_ent;
+ goto write_region;
+ }
+
+ /* Otherwise, find the largest number of nodes that can fit in
+ this subfile. */
+ for (; tags; tags = tags->next_ent)
+ {
+ if (last_node_p (tags))
+ {
+ /* This entry is the last node. Search forward for the end
+ of this node, and that is the end of this file. */
+ int i = tags->position + 1;
+ char last_char = the_file[i];
+
+ while (i < file_size)
+ {
+ if ((the_file[i] == '\037') &&
+ ((last_char == '\n') ||
+ (last_char == '\014')))
+ break;
+ else
+ last_char = the_file[i];
+ i++;
+ }
+ file_bot = i;
+
+ if (file_bot < limit)
+ {
+ tags = tags->next_ent;
+ goto write_region;
+ }
+ else
+ {
+ /* Here we want to write out everything before the last
+ node, and then write the last node out in a file
+ by itself. */
+ file_bot = tags->position;
+ goto write_region;
+ }
+ }
+
+ /* Write region only if this was a node, not an anchor. */
+ if (tags->next_ent->position > limit
+ && !(tags->flags & TAG_FLAG_ANCHOR))
+ {
+ if (tags->position == file_top)
+ tags = tags->next_ent;
+
+ file_bot = tags->position;
+
+ write_region:
+ {
+ int fd;
+ char *split_filename = enumerate_filename (root_pathname,
+ root_filename, which_file);
+ char *split_basename = filename_part (split_filename);
+
+ fd = open (split_filename, O_WRONLY|O_TRUNC|O_CREAT, 0666);
+ if (fd < 0
+ || write (fd, the_header, header_size) != header_size
+ || write (fd, the_file + file_top, file_bot - file_top)
+ != (file_bot - file_top)
+ || (trailer_len
+ && write (fd, trailer, trailer_len) != trailer_len)
+ || close (fd) < 0)
+ {
+ perror (split_filename);
+ if (fd != -1)
+ close (fd);
+ xexit (1);
+ }
+
+ if (!indirect_info)
+ {
+ indirect_info = the_file + file_top;
+ sprintf (indirect_info, "\037\nIndirect:\n");
+ indirect_info += strlen (indirect_info);
+ }
+
+ sprintf (indirect_info, "%s: %d\n",
+ split_basename, file_top);
+
+ free (split_basename);
+ free (split_filename);
+ indirect_info += strlen (indirect_info);
+ which_file++;
+ break;
+ }
+ }
+ }
+ }
+
+ /* We have sucessfully created the subfiles. Now write out the
+ original again. We must use `output_stream', or
+ write_tag_table_indirect () won't know where to place the output. */
+ output_stream = fopen (filename, "w");
+ if (!output_stream)
+ {
+ perror (filename);
+ xexit (1);
+ }
+
+ {
+ int distance = indirect_info - the_file;
+ fwrite (the_file, 1, distance, output_stream);
+
+ /* Inhibit newlines. */
+ paragraph_is_open = 0;
+
+ /* Write the indirect tag table. */
+ write_tag_table_indirect ();
+
+ /* preserve local variables in info output. */
+ if (trailer)
+ {
+ fwrite (trailer, 1, trailer_len, output_stream);
+ free (trailer);
+ }
+
+ fclose (output_stream);
+ free (the_header);
+ free (the_file);
+ return;
+ }
+ }
+}
diff --git a/makeinfo/node.h b/makeinfo/node.h
new file mode 100644
index 0000000..6f7fc39
--- /dev/null
+++ b/makeinfo/node.h
@@ -0,0 +1,129 @@
+/* node.h -- declarations for Node.
+ $Id: node.h,v 1.5 2007/07/01 21:20:33 karl Exp $
+
+ Copyright (C) 1996, 1997, 1998, 1999, 2002, 2007
+ 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 Brian Fox (bfox@ai.mit.edu). */
+
+#ifndef NODE_H
+#define NODE_H
+
+#include "xref.h"
+
+/* The various references that we know about. */
+/* What we remember for each node. */
+typedef struct tentry
+{
+ struct tentry *next_ent;
+ char *node; /* Name of this node. */
+ char *prev; /* Name of "Prev:" for this node. */
+ char *next; /* Name of "Next:" for this node. */
+ char *up; /* Name of "Up:" for this node. */
+ int position; /* Output file position of this node. */
+ int line_no; /* Defining line in source file. */
+ char *filename; /* The file that this node was found in. */
+ int touched; /* Nonzero means this node has been referenced. */
+ int flags;
+ int number; /* Number for this node, relevant for HTML
+ splitting -- from use+define order, not just
+ define. */
+ int order; /* The order of the tag, starting from zero. */
+ char *html_fname; /* The HTML file to which this node is written
+ (non-NULL only for HTML splitting). */
+} TAG_ENTRY;
+
+/* If node-a has a "Next" for node-b, but node-b has no "Prev" for node-a,
+ we turn on this flag bit in node-b's tag entry. This means that when
+ it is time to validate node-b, we don't report an additional error
+ if there was no "Prev" field. */
+#define TAG_FLAG_PREV_ERROR 1
+#define TAG_FLAG_NEXT_ERROR 2
+#define TAG_FLAG_UP_ERROR 4
+#define TAG_FLAG_NO_WARN 8
+#define TAG_FLAG_IS_TOP 16
+#define TAG_FLAG_ANCHOR 32
+
+/* Menu reference, *note reference, and validation hacking. */
+
+/* A structure to remember references with. A reference to a node is
+ either an entry in a menu, or a cross-reference made with [px]ref. */
+typedef struct node_ref
+{
+ struct node_ref *next;
+ char *node; /* Name of node referred to. */
+ char *containing_node; /* Name of node containing this reference. */
+ int line_no; /* Line number where the reference occurs. */
+ int section; /* Section level where the reference occurs. */
+ char *filename; /* Name of file where the reference occurs. */
+ enum reftype type; /* Type of reference, either menu or note. */
+ int number; /* Number for this node, relevant for
+ HTML splitting -- from use+define
+ order, not just define. */
+} NODE_REF;
+
+/* The linked list of such structures. */
+extern NODE_REF *node_references;
+
+/* A similar list for references occuring in @node next
+ and similar references, needed for HTML. */
+extern NODE_REF *node_node_references;
+
+/* List of all nodes. */
+extern TAG_ENTRY *tag_table;
+
+/* Counter for setting node_ref.number; zero is Top. */
+extern int node_number;
+
+/* Node order counter. */
+extern int node_order;
+
+/* The current node's section level. */
+extern int current_section;
+
+/* Nonzero when the next sectioning command should generate an anchor
+ corresponding to the current node in HTML mode. */
+extern int outstanding_node;
+
+extern TAG_ENTRY *find_node (char *name);
+
+/* A search string which is used to find a line defining a node. */
+DECLARE (char *, node_search_string, "\n@node ");
+
+/* Extract node name from a menu item. */
+extern char *glean_node_from_menu (int remember_ref, enum reftype ref_type);
+
+/* Remember a node for later validation. */
+extern void remember_node_reference (char *node, int line, enum reftype type);
+
+/* Remember the name of the current output file. */
+extern void set_current_output_filename (const char *fname);
+
+/* Expand macros and commands in the node name and canonicalize
+ whitespace in the resulting expansion. */
+extern char *expand_node_name (char *node);
+
+extern int number_of_node (char *node);
+
+extern void init_tag_table (void);
+extern void write_tag_table (char *filename);
+extern void free_node_references (void);
+extern void free_node_node_references (void);
+extern void validate_file (TAG_ENTRY *tag_table);
+extern void split_file (char *filename, int size);
+extern void clean_old_split_files (char *filename);
+
+#endif /* NODE_H */
diff --git a/makeinfo/sectioning.c b/makeinfo/sectioning.c
new file mode 100644
index 0000000..da26ebb
--- /dev/null
+++ b/makeinfo/sectioning.c
@@ -0,0 +1,832 @@
+/* sectioning.c -- for @chapter, @section, ..., @contents ...
+ $Id: sectioning.c,v 1.29 2007/07/01 21:20:33 karl Exp $
+
+ Copyright (C) 1999, 2001, 2002, 2003, 2004, 2007
+ 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/>.
+
+ Originally written by Karl Heinz Marbaise <kama@hippo.fido.de>. */
+
+#include "system.h"
+#include "cmds.h"
+#include "macro.h"
+#include "makeinfo.h"
+#include "node.h"
+#include "toc.h"
+#include "sectioning.h"
+#include "xml.h"
+
+/* See comment in sectioning.h. */
+section_alist_type section_alist[] = {
+ { "unnumberedsubsubsec", 5, ENUM_SECT_NO, TOC_YES },
+ { "unnumberedsubsec", 4, ENUM_SECT_NO, TOC_YES },
+ { "unnumberedsec", 3, ENUM_SECT_NO, TOC_YES },
+ { "unnumbered", 2, ENUM_SECT_NO, TOC_YES },
+ { "centerchap", 2, ENUM_SECT_NO, TOC_YES },
+
+ { "appendixsubsubsec", 5, ENUM_SECT_APP, TOC_YES }, /* numbered like A.X.X.X */
+ { "appendixsubsec", 4, ENUM_SECT_APP, TOC_YES },
+ { "appendixsec", 3, ENUM_SECT_APP, TOC_YES },
+ { "appendixsection", 3, ENUM_SECT_APP, TOC_YES },
+ { "appendix", 2, ENUM_SECT_APP, TOC_YES },
+
+ { "subsubsec", 5, ENUM_SECT_YES, TOC_YES },
+ { "subsubsection", 5, ENUM_SECT_YES, TOC_YES },
+ { "subsection", 4, ENUM_SECT_YES, TOC_YES },
+ { "section", 3, ENUM_SECT_YES, TOC_YES },
+ { "chapter", 2, ENUM_SECT_YES, TOC_YES },
+
+ { "subsubheading", 5, ENUM_SECT_NO, TOC_NO },
+ { "subheading", 4, ENUM_SECT_NO, TOC_NO },
+ { "heading", 3, ENUM_SECT_NO, TOC_NO },
+ { "chapheading", 2, ENUM_SECT_NO, TOC_NO },
+ { "majorheading", 2, ENUM_SECT_NO, TOC_NO },
+
+ { "top", 1, ENUM_SECT_NO, TOC_YES },
+ { NULL, 0, 0, 0 }
+};
+
+/* The argument of @settitle, used for HTML. */
+char *title = NULL;
+
+
+#define APPENDIX_MAGIC 1024
+#define UNNUMBERED_MAGIC 2048
+
+/* Number memory for every level @chapter, @section,
+ @subsection, @subsubsection. */
+static int numbers [] = { 0, 0, 0, 0 };
+
+/* enum_marker == APPENDIX_MAGIC then we are counting appendencies
+ enum_marker == UNNUMBERED_MAGIC then we are within unnumbered area.
+ Handling situations like this:
+ @unnumbered ..
+ @section ... */
+static int enum_marker = 0;
+
+/* Organized by level commands. That is, "*" == chapter, "=" == section. */
+static char *scoring_characters = "*=-.";
+
+/* Amount to offset the name of sectioning commands to levels by. */
+static int section_alist_offset = 0;
+
+/* These two variables are for @float, @cindex like commands that need to know
+ in which section they are used. */
+/* Last value returned by get_sectioning_number. */
+static char *last_sectioning_number = "";
+/* Last title used by sectioning_underscore, etc. */
+static char *last_sectioning_title = "";
+
+/* num == ENUM_SECT_NO means unnumbered (should never call this)
+ num == ENUM_SECT_YES means numbered
+ num == ENUM_SECT_APP means numbered like A.1 and so on */
+static char *
+get_sectioning_number (int level, int num)
+{
+ static char s[100]; /* should ever be enough for 99.99.99.99
+ Appendix A.1 */
+
+ char *p;
+ int i;
+
+ s[0] = 0;
+
+ /* create enumeration in front of chapter, section, subsection and so on. */
+ for (i = 0; i < level; i++)
+ {
+ p = s + strlen (s);
+ if ((i == 0) && (enum_marker == APPENDIX_MAGIC))
+ sprintf (p, "%c.", numbers[i] + 64); /* Should be changed to
+ be more portable */
+ else
+ sprintf (p, "%d.", numbers[i]);
+ }
+
+ /* the last number is never followed by a dot */
+ p = s + strlen (s);
+ if ((num == ENUM_SECT_APP)
+ && (i == 0)
+ && (enum_marker == APPENDIX_MAGIC))
+ sprintf (p, _("Appendix %c"), numbers[i] + 64);
+ else
+ sprintf (p, "%d", numbers[i]);
+
+ /* Poor man's cache :-) */
+ if (strlen (last_sectioning_number))
+ free (last_sectioning_number);
+ last_sectioning_number = xstrdup (s);
+
+ return s;
+}
+
+
+/* Set the level of @top to LEVEL. Return the old level of @top. */
+int
+set_top_section_level (int level)
+{
+ int i, result = -1;
+
+ for (i = 0; section_alist[i].name; i++)
+ if (strcmp (section_alist[i].name, "top") == 0)
+ {
+ result = section_alist[i].level;
+ section_alist[i].level = level;
+ break;
+ }
+ return result;
+}
+
+
+/* return the index of the given sectioning command in section_alist */
+static int
+search_sectioning (char *text)
+{
+ int i;
+ char *t;
+
+ /* ignore the optional command prefix */
+ if (text[0] == COMMAND_PREFIX)
+ text++;
+
+ for (i = 0; (t = section_alist[i].name); i++)
+ {
+ if (strcmp (t, text) == 0)
+ {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/* Return an integer which identifies the type of section present in
+ TEXT -- 1 for @top, 2 for chapters, ..., 5 for subsubsections (as
+ specified in section_alist). We take into account any @lowersections
+ and @raisesections. If SECNAME is non-NULL, also return the
+ corresponding section name. */
+int
+what_section (char *text, char **secname)
+{
+ int index, j;
+ char *temp;
+ int return_val;
+
+ find_section_command:
+ for (j = 0; text[j] && cr_or_whitespace (text[j]); j++);
+ if (text[j] != COMMAND_PREFIX)
+ return -1;
+
+ text = text + j + 1;
+
+ /* We skip @c, @comment, and @?index commands. */
+ if ((strncmp (text, "comment", strlen ("comment")) == 0) ||
+ (text[0] == 'c' && cr_or_whitespace (text[1])) ||
+ (strcmp (text + 1, "index") == 0))
+ {
+ while (*text++ != '\n');
+ goto find_section_command;
+ }
+
+ /* Handle italicized sectioning commands. */
+ if (*text == 'i')
+ text++;
+
+ for (j = 0; text[j] && !cr_or_whitespace (text[j]); j++);
+
+ temp = xmalloc (1 + j);
+ strncpy (temp, text, j);
+ temp[j] = 0;
+
+ index = search_sectioning (temp);
+ free (temp);
+ if (index >= 0)
+ {
+ return_val = section_alist[index].level + section_alist_offset;
+ if (return_val < 0)
+ return_val = 0;
+ else if (return_val > 5)
+ return_val = 5;
+
+ if (secname)
+ {
+ int i;
+ int alist_size = sizeof (section_alist) / sizeof(section_alist_type);
+ /* Find location of offset sectioning entry, but don't go off
+ either end of the array. */
+ int index_offset = MAX (index - section_alist_offset, 0);
+ index_offset = MIN (index_offset, alist_size - 1);
+
+ /* Also make sure we don't go into the next "group" of
+ sectioning changes, e.g., change from an @appendix to an
+ @heading or some such. */
+#define SIGN(expr) ((expr) < 0 ? -1 : 1)
+ for (i = index; i != index_offset; i -= SIGN (section_alist_offset))
+ {
+ /* As it happens, each group has unique .num/.toc values. */
+ if (section_alist[i].num != section_alist[index_offset].num
+ || section_alist[i].toc != section_alist[index_offset].toc)
+ break;
+ }
+ *secname = section_alist[i].name;
+ }
+ return return_val;
+ }
+ return -1;
+}
+
+/* Returns current top level division (ie. chapter, unnumbered) number.
+ - For chapters, returns the number.
+ - For unnumbered sections, returns empty string.
+ - For appendices, returns A, B, etc. */
+char *
+current_chapter_number (void)
+{
+ if (enum_marker == UNNUMBERED_MAGIC)
+ return xstrdup ("");
+ else if (enum_marker == APPENDIX_MAGIC)
+ {
+ char s[1];
+ sprintf (s, "%c", numbers[0] + 64);
+ return xstrdup (s);
+ }
+ else
+ {
+ char s[5];
+ sprintf (s, "%d", numbers[0]);
+ return xstrdup (s);
+ }
+}
+
+/* Returns number of the last sectioning command used. */
+char *
+current_sectioning_number (void)
+{
+ if (enum_marker == UNNUMBERED_MAGIC || !number_sections)
+ return xstrdup ("");
+ else
+ return xstrdup (last_sectioning_number);
+}
+
+/* Returns arguments of the last sectioning command used. */
+char *
+current_sectioning_name (void)
+{
+ return xstrdup (last_sectioning_title);
+}
+
+/* insert_and_underscore, sectioning_underscore and sectioning_html call this. */
+
+static char *
+handle_enum_increment (int level, int index)
+{
+ /* Here is how TeX handles enumeration:
+ - Anything starting with @unnumbered is not enumerated.
+ - @majorheading and the like are not enumberated. */
+ int i;
+
+ /* First constraint above. */
+ if (enum_marker == UNNUMBERED_MAGIC && level == 0)
+ return xstrdup ("");
+
+ /* Second constraint. */
+ if (section_alist[index].num == ENUM_SECT_NO)
+ return xstrdup ("");
+
+ /* reset all counters which are one level deeper */
+ for (i = level; i < 3; i++)
+ numbers [i + 1] = 0;
+
+ numbers[level]++;
+ if (section_alist[index].num == ENUM_SECT_NO || enum_marker == UNNUMBERED_MAGIC
+ || !number_sections)
+ return xstrdup ("");
+ else
+ return xstrdup (get_sectioning_number (level, section_alist[index].num));
+}
+
+
+void
+sectioning_underscore (char *cmd)
+{
+ char *temp, *secname;
+ int level;
+
+ /* If we're not indenting the first paragraph, we shall make it behave
+ like @noindent is called directly after the section heading. */
+ if (! do_first_par_indent)
+ cm_noindent ();
+
+ temp = xmalloc (2 + strlen (cmd));
+ temp[0] = COMMAND_PREFIX;
+ strcpy (&temp[1], cmd);
+ level = what_section (temp, &secname);
+ level -= 2;
+ if (level < 0)
+ level = 0;
+ free (temp);
+
+ /* If the argument to @top is empty, we try using the one from @settitle.
+ Warn if both are unusable. */
+ if (STREQ (command, "top"))
+ {
+ int save_input_text_offset = input_text_offset;
+
+ get_rest_of_line (0, &temp);
+
+ /* Due to get_rest_of_line ... */
+ line_number--;
+
+ if (strlen (temp) == 0 && (!title || strlen (title) == 0))
+ warning ("Must specify a title with least one of @settitle or @top");
+
+ input_text_offset = save_input_text_offset;
+ }
+
+ if (xml)
+ {
+ /* If the section appears in the toc, it means it's a real section
+ unlike majorheading, chapheading etc. */
+ if (section_alist[search_sectioning (cmd)].toc == TOC_YES)
+ {
+ xml_close_sections (level);
+ /* Mark the beginning of the section
+ If the next command is printindex, we will remove
+ the section and put an Index instead */
+ flush_output ();
+ xml_last_section_output_position = output_paragraph_offset;
+
+ get_rest_of_line (0, &temp);
+
+ /* Use @settitle value if @top parameter is empty. */
+ if (STREQ (command, "top") && strlen(temp) == 0)
+ temp = xstrdup (title ? title : "");
+
+ /* Docbook does not support @unnumbered at all. So we provide numbers
+ that other formats use. @appendix seems to be fine though, so we let
+ Docbook handle that as usual. */
+ if (docbook && enum_marker != APPENDIX_MAGIC)
+ {
+ if (section_alist[search_sectioning (cmd)].num == ENUM_SECT_NO
+ && section_alist[search_sectioning (cmd)].toc == TOC_YES)
+ xml_insert_element_with_attribute (xml_element (secname),
+ START, "label=\"%s\" xreflabel=\"%s\"",
+ handle_enum_increment (level, search_sectioning (cmd)),
+ text_expansion (temp));
+ else
+ xml_insert_element_with_attribute (xml_element (secname),
+ START, "label=\"%s\"",
+ handle_enum_increment (level, search_sectioning (cmd)));
+ }
+ else
+ xml_insert_element (xml_element (secname), START);
+
+ xml_insert_element (TITLE, START);
+ xml_open_section (level, secname);
+ execute_string ("%s", temp);
+ xml_insert_element (TITLE, END);
+
+ free (temp);
+ }
+ else
+ {
+ if (docbook)
+ {
+ if (level > 0)
+ xml_insert_element_with_attribute (xml_element (secname), START,
+ "renderas=\"sect%d\"", level);
+ else
+ xml_insert_element_with_attribute (xml_element (secname), START,
+ "renderas=\"other\"");
+ }
+ else
+ xml_insert_element (xml_element (secname), START);
+
+ get_rest_of_line (0, &temp);
+ execute_string ("%s", temp);
+ free (temp);
+
+ xml_insert_element (xml_element (secname), END);
+ }
+ }
+ else if (html)
+ sectioning_html (level, secname);
+ else
+ insert_and_underscore (level, secname);
+}
+
+
+/* Insert the text following input_text_offset up to the end of the line
+ in a new, separate paragraph. Directly underneath it, insert a
+ line of WITH_CHAR, the same length of the inserted text. */
+void
+insert_and_underscore (int level, char *cmd)
+{
+ int i, len;
+ int index;
+ int old_no_indent;
+ unsigned char *starting_pos, *ending_pos;
+ char *temp;
+ char with_char = scoring_characters[level];
+
+ close_paragraph ();
+ filling_enabled = indented_fill = 0;
+ old_no_indent = no_indent;
+ no_indent = 1;
+
+ if (macro_expansion_output_stream && !executing_string)
+ append_to_expansion_output (input_text_offset + 1);
+
+ get_rest_of_line (0, &temp);
+
+ /* Use @settitle value if @top parameter is empty. */
+ if (STREQ (command, "top") && strlen(temp) == 0)
+ temp = xstrdup (title ? title : "");
+
+ starting_pos = output_paragraph + output_paragraph_offset;
+
+ /* Poor man's cache for section title. */
+ if (strlen (last_sectioning_title))
+ free (last_sectioning_title);
+ last_sectioning_title = xstrdup (temp);
+
+ index = search_sectioning (cmd);
+ if (index < 0)
+ {
+ /* should never happen, but a poor guy, named Murphy ... */
+ warning (_("Internal error (search_sectioning) `%s'!"), cmd);
+ return;
+ }
+
+ /* This is a bit tricky: we must produce "X.Y SECTION-NAME" in the
+ Info output and in TOC, but only SECTION-NAME in the macro-expanded
+ output. */
+
+ /* Step 1: produce "X.Y" and add it to Info output. */
+ add_word_args ("%s ", handle_enum_increment (level, index));
+
+ /* Step 2: add "SECTION-NAME" to both Info and macro-expanded output. */
+ if (macro_expansion_output_stream && !executing_string)
+ {
+ char *temp1 = xmalloc (2 + strlen (temp));
+ sprintf (temp1, "%s\n", temp);
+ remember_itext (input_text, input_text_offset);
+ me_execute_string (temp1);
+ free (temp1);
+ }
+ else
+ execute_string ("%s\n", temp);
+
+ /* Step 3: pluck "X.Y SECTION-NAME" from the output buffer and
+ insert it into the TOC. */
+ ending_pos = output_paragraph + output_paragraph_offset;
+ if (section_alist[index].toc == TOC_YES)
+ toc_add_entry (substring ((char *)starting_pos, (char *)ending_pos - 1),
+ level, current_node, NULL);
+
+ free (temp);
+
+ len = (ending_pos - starting_pos) - 1;
+ for (i = 0; i < len; i++)
+ add_char (with_char);
+ insert ('\n');
+ close_paragraph ();
+ filling_enabled = 1;
+ no_indent = old_no_indent;
+}
+
+/* Insert the text following input_text_offset up to the end of the
+ line as an HTML heading element of the appropriate `level' and
+ tagged as an anchor for the current node.. */
+
+void
+sectioning_html (int level, char *cmd)
+{
+ static int toc_ref_count = 0;
+ int index;
+ int old_no_indent;
+ unsigned char *starting_pos, *ending_pos;
+ char *temp, *toc_anchor = NULL;
+
+ close_paragraph ();
+ filling_enabled = indented_fill = 0;
+ old_no_indent = no_indent;
+ no_indent = 1;
+
+ /* level 0 (chapter) is <h2>, and we go down from there. */
+ add_html_block_elt_args ("<h%d class=\"%s\">", level + 2, cmd);
+
+ /* If we are outside of any node, produce an anchor that
+ the TOC could refer to. */
+ if (!current_node || !*current_node)
+ {
+ static const char a_name[] = "<a name=\"";
+
+ starting_pos = output_paragraph + output_paragraph_offset;
+ add_word_args ("%sTOC%d\">", a_name, toc_ref_count++);
+ toc_anchor = substring ((char *)starting_pos + sizeof (a_name) - 1,
+ (char *)output_paragraph
+ + output_paragraph_offset);
+ /* This must be added after toc_anchor is extracted, since
+ toc_anchor cannot include the closing </a>. For details,
+ see toc.c:toc_add_entry and toc.c:contents_update_html.
+
+ Also, the anchor close must be output before the section name
+ in case the name itself contains an anchor. */
+ add_word ("</a>");
+ }
+ starting_pos = output_paragraph + output_paragraph_offset;
+
+ if (macro_expansion_output_stream && !executing_string)
+ append_to_expansion_output (input_text_offset + 1);
+
+ get_rest_of_line (0, &temp);
+
+ /* Use @settitle value if @top parameter is empty. */
+ if (STREQ (command, "top") && strlen(temp) == 0)
+ temp = xstrdup (title ? title : "");
+
+ index = search_sectioning (cmd);
+ if (index < 0)
+ {
+ /* should never happen, but a poor guy, named Murphy ... */
+ warning (_("Internal error (search_sectioning) \"%s\"!"), cmd);
+ return;
+ }
+
+ /* Produce "X.Y" and add it to HTML output. */
+ {
+ char *title_number = handle_enum_increment (level, index);
+ if (strlen (title_number) > 0)
+ add_word_args ("%s ", title_number);
+ }
+
+ /* add the section name to both HTML and macro-expanded output. */
+ if (macro_expansion_output_stream && !executing_string)
+ {
+ remember_itext (input_text, input_text_offset);
+ me_execute_string (temp);
+ write_region_to_macro_output ("\n", 0, 1);
+ }
+ else
+ execute_string ("%s", temp);
+
+ ending_pos = output_paragraph + output_paragraph_offset;
+
+ /* Pluck ``X.Y SECTION-NAME'' from the output buffer and insert it
+ into the TOC. */
+ if (section_alist[index].toc == TOC_YES)
+ toc_add_entry (substring ((char *)starting_pos, (char *)ending_pos),
+ level, current_node, toc_anchor);
+
+ free (temp);
+
+ if (outstanding_node)
+ outstanding_node = 0;
+
+ add_word_args ("</h%d>", level + 2);
+ close_paragraph();
+ filling_enabled = 1;
+ no_indent = old_no_indent;
+}
+
+
+/* Shift the meaning of @section to @chapter. */
+void
+cm_raisesections (void)
+{
+ discard_until ("\n");
+ section_alist_offset--;
+}
+
+/* Shift the meaning of @chapter to @section. */
+void
+cm_lowersections (void)
+{
+ discard_until ("\n");
+ section_alist_offset++;
+}
+
+/* The command still works, but prints a warning message in addition. */
+void
+cm_ideprecated (int arg, int start, int end)
+{
+ warning (_("%c%s is obsolete; use %c%s instead"),
+ COMMAND_PREFIX, command, COMMAND_PREFIX, command + 1);
+ sectioning_underscore (command + 1);
+}
+
+
+/* Treat this just like @unnumbered. The only difference is
+ in node defaulting. */
+void
+cm_top (void)
+{
+ /* It is an error to have more than one @top. */
+ if (top_node_seen && strcmp (current_node, "Top") != 0)
+ {
+ TAG_ENTRY *tag = tag_table;
+
+ line_error (_("Node with %ctop as a section already exists"),
+ COMMAND_PREFIX);
+
+ while (tag)
+ {
+ if (tag->flags & TAG_FLAG_IS_TOP)
+ {
+ file_line_error (tag->filename, tag->line_no,
+ _("Here is the %ctop node"), COMMAND_PREFIX);
+ return;
+ }
+ tag = tag->next_ent;
+ }
+ }
+ else
+ {
+ top_node_seen = 1;
+
+ /* It is an error to use @top before using @node. */
+ if (!tag_table)
+ {
+ char *top_name;
+
+ get_rest_of_line (0, &top_name);
+ line_error (_("%ctop used before %cnode, defaulting to %s"),
+ COMMAND_PREFIX, COMMAND_PREFIX, top_name);
+ execute_string ("@node Top, , (dir), (dir)\n@top %s\n", top_name);
+ free (top_name);
+ return;
+ }
+
+ cm_unnumbered ();
+
+ /* The most recently defined node is the top node. */
+ tag_table->flags |= TAG_FLAG_IS_TOP;
+
+ /* Now set the logical hierarchical level of the Top node. */
+ {
+ int orig_offset = input_text_offset;
+
+ input_text_offset = search_forward (node_search_string, orig_offset);
+
+ if (input_text_offset > 0)
+ {
+ int this_section;
+
+ /* We have encountered a non-top node, so mark that one exists. */
+ non_top_node_seen = 1;
+
+ /* Move to the end of this line, and find out what the
+ sectioning command is here. */
+ while (input_text[input_text_offset] != '\n')
+ input_text_offset++;
+
+ if (input_text_offset < input_text_length)
+ input_text_offset++;
+
+ this_section = what_section (input_text + input_text_offset,
+ NULL);
+
+ /* If we found a sectioning command, then give the top section
+ a level of this section - 1. */
+ if (this_section != -1)
+ set_top_section_level (this_section - 1);
+ }
+ input_text_offset = orig_offset;
+ }
+ }
+}
+
+/* The remainder of the text on this line is a chapter heading. */
+void
+cm_chapter (void)
+{
+ enum_marker = 0;
+ sectioning_underscore ("chapter");
+}
+
+/* The remainder of the text on this line is a section heading. */
+void
+cm_section (void)
+{
+ sectioning_underscore ("section");
+}
+
+/* The remainder of the text on this line is a subsection heading. */
+void
+cm_subsection (void)
+{
+ sectioning_underscore ("subsection");
+}
+
+/* The remainder of the text on this line is a subsubsection heading. */
+void
+cm_subsubsection (void)
+{
+ sectioning_underscore ("subsubsection");
+}
+
+/* The remainder of the text on this line is an unnumbered heading. */
+void
+cm_unnumbered (void)
+{
+ enum_marker = UNNUMBERED_MAGIC;
+ sectioning_underscore ("unnumbered");
+}
+
+/* The remainder of the text on this line is an unnumbered section heading. */
+void
+cm_unnumberedsec (void)
+{
+ sectioning_underscore ("unnumberedsec");
+}
+
+/* The remainder of the text on this line is an unnumbered
+ subsection heading. */
+void
+cm_unnumberedsubsec (void)
+{
+ sectioning_underscore ("unnumberedsubsec");
+}
+
+/* The remainder of the text on this line is an unnumbered
+ subsubsection heading. */
+void
+cm_unnumberedsubsubsec (void)
+{
+ sectioning_underscore ("unnumberedsubsubsec");
+}
+
+/* The remainder of the text on this line is an appendix heading. */
+void
+cm_appendix (void)
+{
+ /* Reset top level number so we start from Appendix A */
+ if (enum_marker != APPENDIX_MAGIC)
+ numbers [0] = 0;
+ enum_marker = APPENDIX_MAGIC;
+ sectioning_underscore ("appendix");
+}
+
+/* The remainder of the text on this line is an appendix section heading. */
+void
+cm_appendixsec (void)
+{
+ sectioning_underscore ("appendixsec");
+}
+
+/* The remainder of the text on this line is an appendix subsection heading. */
+void
+cm_appendixsubsec (void)
+{
+ sectioning_underscore ("appendixsubsec");
+}
+
+/* The remainder of the text on this line is an appendix
+ subsubsection heading. */
+void
+cm_appendixsubsubsec (void)
+{
+ sectioning_underscore ("appendixsubsubsec");
+}
+
+/* Compatibility functions substitute for chapter, section, etc. */
+void
+cm_majorheading (void)
+{
+ sectioning_underscore ("majorheading");
+}
+
+void
+cm_chapheading (void)
+{
+ sectioning_underscore ("chapheading");
+}
+
+void
+cm_heading (void)
+{
+ sectioning_underscore ("heading");
+}
+
+void
+cm_subheading (void)
+{
+ sectioning_underscore ("subheading");
+}
+
+void
+cm_subsubheading (void)
+{
+ sectioning_underscore ("subsubheading");
+}
diff --git a/makeinfo/sectioning.h b/makeinfo/sectioning.h
new file mode 100644
index 0000000..30b4451
--- /dev/null
+++ b/makeinfo/sectioning.h
@@ -0,0 +1,102 @@
+/* sectioning.h -- all related stuff @chapter, @section... @contents
+ $Id: sectioning.h,v 1.8 2007/07/01 21:20:33 karl Exp $
+
+ Copyright (C) 1999, 2003, 2007 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 Karl Heinz Marbaise <kama@hippo.fido.de>. */
+
+#ifndef SECTIONING_H
+#define SECTIONING_H
+
+/* Sectioning. */
+
+/* Level 4. */
+extern void cm_chapter (void),
+ cm_unnumbered (void),
+ cm_appendix (void),
+ cm_top (void);
+
+/* Level 3. */
+extern void cm_section (void),
+ cm_unnumberedsec (void),
+ cm_appendixsec (void);
+
+/* Level 2. */
+extern void cm_subsection (void),
+ cm_unnumberedsubsec (void),
+ cm_appendixsubsec (void);
+
+/* Level 1. */
+extern void cm_subsubsection (void),
+ cm_unnumberedsubsubsec (void),
+ cm_appendixsubsubsec (void);
+
+/* Headings. */
+extern void cm_heading (void),
+ cm_chapheading (void),
+ cm_subheading (void),
+ cm_subsubheading (void),
+ cm_majorheading (void);
+
+extern void cm_raisesections (void),
+ cm_lowersections (void),
+ cm_ideprecated (int arg, int start, int end);
+
+extern void
+ sectioning_underscore (char *cmd),
+ insert_and_underscore (int level, char *cmd);
+
+/* needed in node.c */
+extern int set_top_section_level (int level);
+
+extern void sectioning_html (int level, char *cmd);
+extern int what_section (char *text, char **secname);
+extern char *current_chapter_number (void),
+ *current_sectioning_number (void),
+ *current_sectioning_name (void);
+
+/* The argument of @settitle, used for HTML. */
+extern char *title;
+
+
+/* Here is a structure which associates sectioning commands with
+ an integer that reflects the depth of the current section. */
+typedef struct
+{
+ char *name;
+ int level; /* I can't replace the levels with defines
+ because it is changed during run */
+ int num; /* ENUM_SECT_NO means no enumeration...
+ ENUM_SECT_YES means enumerated version
+ ENUM_SECT_APP appendix (Character enumerated
+ at first position */
+ int toc; /* TOC_NO means do not enter in toc;
+ TOC_YES means enter it in toc */
+} section_alist_type;
+
+extern section_alist_type section_alist[];
+
+/* enumerate sections */
+#define ENUM_SECT_NO 0
+#define ENUM_SECT_YES 1
+#define ENUM_SECT_APP 2
+
+/* make entries into toc no/yes */
+#define TOC_NO 0
+#define TOC_YES 1
+
+
+#endif /* not SECTIONING_H */
diff --git a/makeinfo/tests/Makefile.am b/makeinfo/tests/Makefile.am
new file mode 100644
index 0000000..353a822
--- /dev/null
+++ b/makeinfo/tests/Makefile.am
@@ -0,0 +1,40 @@
+# $Id: Makefile.am,v 1.7 2006/07/10 23:07:12 karl Exp $
+# Makefile.am for texinfo/tests/makeinfo.
+#
+# This file is free software; as a special exception the author 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.
+
+TESTS = accent accentenc \
+ cond \
+ copying \
+ defxcond \
+ emph-option \
+ html-docdesc html-extrali html-min html-manuals html-para html-title \
+ html-top \
+ include-value \
+ macro-at menu-whitespace \
+ no-headers \
+ node-expand node-value node-whitespace \
+ quote-args \
+ top \
+ twofiles
+
+noinst_SCRIPTS = $(TESTS)
+
+EXTRA_DIST = $(noinst_SCRIPTS) \
+ accent.txi accentenc.txi accent-text.txi \
+ cond.txi copying.txi \
+ defxcond.txi \
+ emph-option.txi \
+ html-docdesc.txi html-extrali.txi html-min.txi html-para.txi html-title.txi \
+ html-top.txi \
+ include-value.txi incl-incl.txi \
+ macro-at.txi menu-whitespace.txi \
+ node-expand.txi node-value.txi node-whitespace.txi \
+ quote-args.txi \
+ top.txi # top2.txi
diff --git a/makeinfo/tests/Makefile.in b/makeinfo/tests/Makefile.in
new file mode 100644
index 0000000..0467b8f
--- /dev/null
+++ b/makeinfo/tests/Makefile.in
@@ -0,0 +1,672 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008 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@
+
+# $Id: Makefile.am,v 1.7 2006/07/10 23:07:12 karl Exp $
+# Makefile.am for texinfo/tests/makeinfo.
+#
+# This file is free software; as a special exception the author 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@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@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 = makeinfo/tests
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/gnulib/m4/alloca.m4 \
+ $(top_srcdir)/gnulib/m4/argz.m4 \
+ $(top_srcdir)/gnulib/m4/codeset.m4 \
+ $(top_srcdir)/gnulib/m4/eealloc.m4 \
+ $(top_srcdir)/gnulib/m4/environ.m4 \
+ $(top_srcdir)/gnulib/m4/error.m4 \
+ $(top_srcdir)/gnulib/m4/exitfail.m4 \
+ $(top_srcdir)/gnulib/m4/extensions.m4 \
+ $(top_srcdir)/gnulib/m4/getopt.m4 \
+ $(top_srcdir)/gnulib/m4/gettext.m4 \
+ $(top_srcdir)/gnulib/m4/gettimeofday.m4 \
+ $(top_srcdir)/gnulib/m4/glibc21.m4 \
+ $(top_srcdir)/gnulib/m4/gnulib-common.m4 \
+ $(top_srcdir)/gnulib/m4/gnulib-comp.m4 \
+ $(top_srcdir)/gnulib/m4/iconv.m4 \
+ $(top_srcdir)/gnulib/m4/include_next.m4 \
+ $(top_srcdir)/gnulib/m4/inline.m4 \
+ $(top_srcdir)/gnulib/m4/intlmacosx.m4 \
+ $(top_srcdir)/gnulib/m4/lib-ld.m4 \
+ $(top_srcdir)/gnulib/m4/lib-link.m4 \
+ $(top_srcdir)/gnulib/m4/lib-prefix.m4 \
+ $(top_srcdir)/gnulib/m4/localcharset.m4 \
+ $(top_srcdir)/gnulib/m4/longlong.m4 \
+ $(top_srcdir)/gnulib/m4/malloc.m4 \
+ $(top_srcdir)/gnulib/m4/malloca.m4 \
+ $(top_srcdir)/gnulib/m4/mbchar.m4 \
+ $(top_srcdir)/gnulib/m4/mbiter.m4 \
+ $(top_srcdir)/gnulib/m4/mbrtowc.m4 \
+ $(top_srcdir)/gnulib/m4/mbscasecmp.m4 \
+ $(top_srcdir)/gnulib/m4/mbschr.m4 \
+ $(top_srcdir)/gnulib/m4/mbslen.m4 \
+ $(top_srcdir)/gnulib/m4/mbsncasecmp.m4 \
+ $(top_srcdir)/gnulib/m4/mbsstr.m4 \
+ $(top_srcdir)/gnulib/m4/mbstate_t.m4 \
+ $(top_srcdir)/gnulib/m4/mbswidth.m4 \
+ $(top_srcdir)/gnulib/m4/memchr.m4 \
+ $(top_srcdir)/gnulib/m4/memcmp.m4 \
+ $(top_srcdir)/gnulib/m4/memcpy.m4 \
+ $(top_srcdir)/gnulib/m4/memmem.m4 \
+ $(top_srcdir)/gnulib/m4/memmove.m4 \
+ $(top_srcdir)/gnulib/m4/mempcpy.m4 \
+ $(top_srcdir)/gnulib/m4/mkstemp.m4 \
+ $(top_srcdir)/gnulib/m4/nls.m4 \
+ $(top_srcdir)/gnulib/m4/onceonly.m4 \
+ $(top_srcdir)/gnulib/m4/po.m4 \
+ $(top_srcdir)/gnulib/m4/progtest.m4 \
+ $(top_srcdir)/gnulib/m4/setenv.m4 \
+ $(top_srcdir)/gnulib/m4/stdbool.m4 \
+ $(top_srcdir)/gnulib/m4/stdint.m4 \
+ $(top_srcdir)/gnulib/m4/stdlib_h.m4 \
+ $(top_srcdir)/gnulib/m4/stpcpy.m4 \
+ $(top_srcdir)/gnulib/m4/strdup.m4 \
+ $(top_srcdir)/gnulib/m4/strerror.m4 \
+ $(top_srcdir)/gnulib/m4/string_h.m4 \
+ $(top_srcdir)/gnulib/m4/strndup.m4 \
+ $(top_srcdir)/gnulib/m4/strnlen.m4 \
+ $(top_srcdir)/gnulib/m4/sys_stat_h.m4 \
+ $(top_srcdir)/gnulib/m4/sys_time_h.m4 \
+ $(top_srcdir)/gnulib/m4/tempname.m4 \
+ $(top_srcdir)/gnulib/m4/unistd_h.m4 \
+ $(top_srcdir)/gnulib/m4/wchar.m4 \
+ $(top_srcdir)/gnulib/m4/wchar_t.m4 \
+ $(top_srcdir)/gnulib/m4/wctype.m4 \
+ $(top_srcdir)/gnulib/m4/wcwidth.m4 \
+ $(top_srcdir)/gnulib/m4/wint_t.m4 \
+ $(top_srcdir)/gnulib/m4/xalloc.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 =
+SCRIPTS = $(noinst_SCRIPTS)
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+ARGZ_H = @ARGZ_H@
+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@
+GETOPT_H = @GETOPT_H@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_DUP2 = @GNULIB_DUP2@
+GNULIB_ENVIRON = @GNULIB_ENVIRON@
+GNULIB_FCHDIR = @GNULIB_FCHDIR@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+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_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRSEP = @GNULIB_STRSEP@
+GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
+GNULIB_STRSTR = @GNULIB_STRSTR@
+GNULIB_STRTOD = @GNULIB_STRTOD@
+GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
+GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GREP = @GREP@
+HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR = @HAVE_DECL_STRERROR@
+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_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SETENV = @HAVE_SETENV@
+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_SLEEP = @HAVE_SLEEP@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRNDUP = @HAVE_STRNDUP@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNSETENV = @HAVE_UNSETENV@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE__BOOL = @HAVE__BOOL@
+HELP2MAN = @HELP2MAN@
+HEVEA = @HEVEA@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LDFLAGS = @LDFLAGS@
+LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@
+LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_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_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_FCHDIR = @REPLACE_FCHDIR@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+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@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYS_STAT_H = @SYS_STAT_H@
+SYS_TIME_H = @SYS_TIME_H@
+TERMLIBS = @TERMLIBS@
+TEX = @TEX@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+VOID_UNSETENV = @VOID_UNSETENV@
+WCHAR_H = @WCHAR_H@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WCTYPE_H = @WCTYPE_H@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+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@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_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@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+native_tools = @native_tools@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+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@
+TESTS = accent accentenc \
+ cond \
+ copying \
+ defxcond \
+ emph-option \
+ html-docdesc html-extrali html-min html-manuals html-para html-title \
+ html-top \
+ include-value \
+ macro-at menu-whitespace \
+ no-headers \
+ node-expand node-value node-whitespace \
+ quote-args \
+ top \
+ twofiles
+
+noinst_SCRIPTS = $(TESTS)
+EXTRA_DIST = $(noinst_SCRIPTS) \
+ accent.txi accentenc.txi accent-text.txi \
+ cond.txi copying.txi \
+ defxcond.txi \
+ emph-option.txi \
+ html-docdesc.txi html-extrali.txi html-min.txi html-para.txi html-title.txi \
+ html-top.txi \
+ include-value.txi incl-incl.txi \
+ macro-at.txi menu-whitespace.txi \
+ node-expand.txi node-value.txi node-whitespace.txi \
+ quote-args.txi \
+ top.txi # top2.txi
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu makeinfo/tests/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu makeinfo/tests/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; ws='[ ]'; \
+ srcdir=$(srcdir); export srcdir; \
+ list=' $(TESTS) '; \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *$$ws$$tst$$ws*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ echo "XPASS: $$tst"; \
+ ;; \
+ *) \
+ echo "PASS: $$tst"; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *$$ws$$tst$$ws*) \
+ xfail=`expr $$xfail + 1`; \
+ echo "XFAIL: $$tst"; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ echo "FAIL: $$tst"; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ echo "SKIP: $$tst"; \
+ fi; \
+ done; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="All $$all tests passed"; \
+ else \
+ banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all tests failed"; \
+ else \
+ banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ skipped="($$skip tests were not run)"; \
+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ echo "$$dashes"; \
+ echo "$$banner"; \
+ test -z "$$skipped" || echo "$$skipped"; \
+ test -z "$$report" || echo "$$report"; \
+ echo "$$dashes"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
+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 $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$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
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(SCRIPTS)
+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:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+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
+
+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-TESTS check-am clean clean-generic \
+ 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 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/makeinfo/tests/accent b/makeinfo/tests/accent
new file mode 100755
index 0000000..16c69e8
--- /dev/null
+++ b/makeinfo/tests/accent
@@ -0,0 +1,34 @@
+#!/bin/sh
+# Test accent output.
+
+unset TEXINFO_OUTPUT
+: ${srcdir=.}
+input=`basename $0`.txi
+
+# html.
+houtput=`basename $0`.html
+../makeinfo --html --no-split -I$srcdir $srcdir/$input
+hexit_status=$?
+if test $hexit_status = 0; then
+ grep '&igrave;' $houtput >/dev/null \
+ && grep '&acute;j' $houtput >/dev/null \
+ && grep '&Oslash;' $houtput >/dev/null \
+ && grep '/L' $houtput >/dev/null
+ hexit_status=$?
+fi
+
+# info
+ioutput=`basename $0`.info
+../makeinfo --no-split -I$srcdir $srcdir/$input
+iexit_status=$?
+if test $iexit_status = 0; then
+ grep 'i`' $ioutput >/dev/null \
+ && grep 'i"' $ioutput >/dev/null \
+ && grep '/L' $ioutput >/dev/null
+ iexit_status=$?
+fi
+
+rm -f $houtput $ioutput
+
+exit_status=`expr $hexit_status + $iexit_status`
+exit $exit_status
diff --git a/makeinfo/tests/accent-text.txi b/makeinfo/tests/accent-text.txi
new file mode 100644
index 0000000..4d9ef3c
--- /dev/null
+++ b/makeinfo/tests/accent-text.txi
@@ -0,0 +1,73 @@
+@c args with braces, without braces/following whitespace
+
+should be e`: @`{e} @`e
+
+should be e': @'{e} @'e
+
+should be e^: @^{e} @^e
+
+should be u": @"{u} @"u
+
+should be i`: @`{i} @`i
+
+should be i': @'{i} @'i
+
+should be i^: @^{i} @^i
+
+should be u": @"{u} @"u
+
+should be c,: @,{c} @,c
+
+should be n~: @~{n} @~n
+
+should be e=: @={e} @=e
+
+should be e@w{'}': @H{e} @H e
+
+should be e.: @dotaccent{e} @dotaccent e
+
+should be e*: @ringaccent{e} @ringaccent e
+
+should be ee[: @tieaccent{ee}
+
+should be e(: @u{e} @u e
+
+should be e_: @ubaraccent{e} @ubaraccent e
+
+should be .e: @udotaccent{e} @udotaccent e
+
+should be e<: @v{e} @v e
+
+upside down: @questiondown{} @exclamdown{}
+
+A-with-circle: @aa{},@AA{}
+
+AE, OE ligatures: @ae{} @AE{} @oe{} @OE{}
+
+dotless i, j: @dotless{i} @dotless{j}
+
+Polish suppressed-L: @l{} @L{}
+
+O-with-slash: @o{} @O{}
+
+es-zet or sharp S: @ss{}
+
+pounds sterling: @pounds{}
+
+@c arg is command -- @dotless{i} is special-cased for HTML
+should be dotless i`: @`{@dotless{i}}
+
+should be dotless i': @'{@dotless{i}}
+
+should be dotless i^: @^{@dotless{i}}
+
+should be dotless i": @"{@dotless{i}}
+
+@c arg is command -- @dotless{j}
+should be dotless j`: @`{@dotless{j}}
+
+should be dotless j': @'{@dotless{j}}
+
+should be dotless j^: @^{@dotless{j}}
+
+should be dotless j": @"{@dotless{j}}
diff --git a/makeinfo/tests/accent.txi b/makeinfo/tests/accent.txi
new file mode 100644
index 0000000..3c52a90
--- /dev/null
+++ b/makeinfo/tests/accent.txi
@@ -0,0 +1,10 @@
+\input texinfo
+@setfilename accent.info
+@settitle Accent test
+
+@node Top
+@top Accent test top
+
+@include accent-text.txi
+
+@bye
diff --git a/makeinfo/tests/accentenc b/makeinfo/tests/accentenc
new file mode 100755
index 0000000..be842c3
--- /dev/null
+++ b/makeinfo/tests/accentenc
@@ -0,0 +1,24 @@
+#!/bin/sh
+# Test encoded accent info output.
+
+unset TEXINFO_OUTPUT
+: ${srcdir=.}
+input=`basename $0`.txi
+output=`basename $0`.info
+
+# we expect two invalid encoded characters:
+# accent-text.txi:45: warning: invalid encoded character `#156'.
+# accent-text.txi:45: warning: invalid encoded character `#140'.
+# These are oe and OE, and they are not supported in Latin 1.
+../makeinfo --enable-encoding --no-split -I$srcdir $srcdir/$input 2>/dev/null
+exit_status=$?
+if test $exit_status = 0; then
+ grep 'ì' $output >/dev/null \
+ && grep 'ï' $output >/dev/null \
+ && grep '/L' $output >/dev/null
+ exit_status=$?
+fi
+
+rm -f $output
+
+exit $exit_status
diff --git a/makeinfo/tests/accentenc.txi b/makeinfo/tests/accentenc.txi
new file mode 100644
index 0000000..b6e209c
--- /dev/null
+++ b/makeinfo/tests/accentenc.txi
@@ -0,0 +1,11 @@
+\input texinfo
+@setfilename accentenc.info
+@settitle Accent encoding test
+@documentencoding ISO-8859-1
+
+@node Top
+@top Accent encoding test top
+
+@include accent-text.txi
+
+@bye
diff --git a/makeinfo/tests/cond b/makeinfo/tests/cond
new file mode 100755
index 0000000..41f5920
--- /dev/null
+++ b/makeinfo/tests/cond
@@ -0,0 +1,33 @@
+#!/bin/sh
+# Test conditional text.
+
+unset TEXINFO_OUTPUT
+: ${srcdir=.}
+
+# Default Info output.
+../makeinfo -o cond.out $srcdir/cond.txi || exit 1
+egrep 'This is (ifnothtml|ifinfo|ifnottex) text' cond.out >/dev/null \
+ || exit 2
+test `fgrep -c ' text.' cond.out` -eq 3 || exit 3
+
+# Default HTML output.
+../makeinfo --no-split --html -o cond.out $srcdir/cond.txi || exit 1
+egrep 'This is (html|ifhtml|ifnotinfo|ifnottex) text' cond.out >/dev/null \
+ || exit 2
+test `fgrep -c ' text.' cond.out` -eq 4 || exit 3
+
+# --ifhtml off, --ifinfo off, --iftex off.
+../makeinfo --no-ifhtml --no-ifinfo --no-iftex -o cond.out $srcdir/cond.txi || exit 1
+egrep 'This is ifnot(html|info|tex) text' cond.out >/dev/null \
+ || exit 2
+test `fgrep -c ' text.' cond.out` -eq 3 || exit 3
+
+# Do we really need to test all the other permutations?
+
+# --ifhtml on, --ifinfo on, --iftex on.
+../makeinfo --ifhtml --ifinfo --iftex -o cond.out $srcdir/cond.txi || exit 1
+egrep 'This is (html|ifhtml|ifinfo|tex|iftex) text' cond.out >/dev/null \
+ || exit 2
+test `fgrep -c ' text.' cond.out` -eq 5 || exit 3
+
+rm -f cond.out cond.info
diff --git a/makeinfo/tests/cond.txi b/makeinfo/tests/cond.txi
new file mode 100644
index 0000000..b602423
--- /dev/null
+++ b/makeinfo/tests/cond.txi
@@ -0,0 +1,40 @@
+\input texinfo
+@setfilename cond.info
+
+@node Top
+
+@html
+This is html text.
+@end html
+
+@ifhtml
+This is ifhtml text.
+@end ifhtml
+
+@ifnothtml
+This is ifnothtml text.
+@end ifnothtml
+
+
+@ifinfo
+This is ifinfo text.
+@end ifinfo
+
+@ifnotinfo
+This is ifnotinfo text.
+@end ifnotinfo
+
+
+@tex
+This is tex text.
+@end tex
+
+@iftex
+This is iftex text.
+@end iftex
+
+@ifnottex
+This is ifnottex text.
+@end ifnottex
+
+@bye
diff --git a/makeinfo/tests/copying b/makeinfo/tests/copying
new file mode 100755
index 0000000..4a033f0
--- /dev/null
+++ b/makeinfo/tests/copying
@@ -0,0 +1,13 @@
+#!/bin/sh
+# $Id: copying,v 1.4 2007/07/01 18:38:52 karl Exp $
+# Test @copying. The configure script for tramp uses this to make sure
+# the makeinfo that is present supports @copying.
+
+unset TEXINFO_OUTPUT LANG LANGUAGE
+LC_ALL=POSIX; export LC_ALL
+: ${srcdir=.}
+
+../makeinfo -o copying.out $srcdir/copying.txi || exit 1
+fgrep 'produced by' copying.out >/dev/null || exit 2
+
+rm -f copying.out
diff --git a/makeinfo/tests/copying.txi b/makeinfo/tests/copying.txi
new file mode 100644
index 0000000..4981170
--- /dev/null
+++ b/makeinfo/tests/copying.txi
@@ -0,0 +1,8 @@
+\input texinfo @c -*-texinfo-*-
+@copying
+Public domain.
+@end copying
+
+@insertcopying
+
+@bye
diff --git a/makeinfo/tests/defxcond b/makeinfo/tests/defxcond
new file mode 100755
index 0000000..e489867
--- /dev/null
+++ b/makeinfo/tests/defxcond
@@ -0,0 +1,16 @@
+#!/bin/sh
+# Test conditionalized @deffnx.
+# Report from: Akim Demaille <akim@epita.fr>, 14 Aug 2003 12:10:37 +0200.
+
+unset TEXINFO_OUTPUT
+: ${srcdir=.}
+
+test=defxcond
+
+../makeinfo -Dbar -o $test.out $srcdir/$test.txi || exit 1
+grep ' -- bar:' $test.out >/dev/null || exit 2
+
+../makeinfo -Ubar -o $test.out $srcdir/$test.txi || exit 3
+grep ' -- bar:' $test.out >/dev/null && exit 4
+
+rm -f $test.out
diff --git a/makeinfo/tests/defxcond.txi b/makeinfo/tests/defxcond.txi
new file mode 100644
index 0000000..a7af9e2
--- /dev/null
+++ b/makeinfo/tests/defxcond.txi
@@ -0,0 +1,18 @@
+\input texinfo
+@setfilename defxcond.info
+
+@c set this from the command line.
+@c set bar
+
+@c deffnx inside conditional.
+@deffn foo
+
+@ifset bar
+@deffnx bar
+@end ifset
+
+Documentation.
+
+@end deffn
+
+@bye
diff --git a/makeinfo/tests/emph-option b/makeinfo/tests/emph-option
new file mode 100755
index 0000000..2dfb150
--- /dev/null
+++ b/makeinfo/tests/emph-option
@@ -0,0 +1,10 @@
+#!/bin/sh
+# Test @option inside @emph.
+
+unset TEXINFO_OUTPUT
+: ${srcdir=.}
+
+../makeinfo --no-split --html -o emph-option.out $srcdir/emph-option.txi || exit 1
+fgrep '<em>emphasized and referring to <samp></em>' emph-option.out && exit 3
+
+rm -f emph-option.out
diff --git a/makeinfo/tests/emph-option.txi b/makeinfo/tests/emph-option.txi
new file mode 100644
index 0000000..601c9f3
--- /dev/null
+++ b/makeinfo/tests/emph-option.txi
@@ -0,0 +1,8 @@
+\input texinfo
+@setfilename cond.info
+
+@node Top
+
+Foo @emph{emphasized and referring to @option{--some} option}.
+
+@bye
diff --git a/makeinfo/tests/html-docdesc b/makeinfo/tests/html-docdesc
new file mode 100755
index 0000000..59df74e
--- /dev/null
+++ b/makeinfo/tests/html-docdesc
@@ -0,0 +1,12 @@
+#!/bin/sh
+# Test that @documentdescription works.
+
+if ../makeinfo --html --no-split ${srcdir-.}/html-docdesc.txi; then
+ grep 'explicit document description' html-docdesc.html >/dev/null
+ exit_status=$?
+else
+ exit_status=1
+fi
+
+rm -f html-docdesc.html
+exit $exit_status
diff --git a/makeinfo/tests/html-docdesc.txi b/makeinfo/tests/html-docdesc.txi
new file mode 100644
index 0000000..0b328da
--- /dev/null
+++ b/makeinfo/tests/html-docdesc.txi
@@ -0,0 +1,14 @@
+\input texinfo
+@setfilename html-docdesc.info
+@settitle HTML docdesc test
+
+@documentdescription
+This is the explicit document description.
+@end documentdescription
+
+@node Top
+@top Top of HTML docdesc test
+
+This is the top.
+
+@bye
diff --git a/makeinfo/tests/html-extrali b/makeinfo/tests/html-extrali
new file mode 100755
index 0000000..7d0e5f9
--- /dev/null
+++ b/makeinfo/tests/html-extrali
@@ -0,0 +1,14 @@
+#!/bin/sh
+# Test no extra <li> from @menu.
+
+: ${srcdir=.}
+
+li_count=`../makeinfo --no-split --html -o - $srcdir/html-extrali.txi 2>/dev/null \
+| grep -c '<li>'`
+
+if test "$li_count" -ne 1; then
+ echo "$li_count <li>s instead of one." >&2
+ exit 1
+else
+ exit 0
+fi
diff --git a/makeinfo/tests/html-extrali.txi b/makeinfo/tests/html-extrali.txi
new file mode 100644
index 0000000..d0c17e9
--- /dev/null
+++ b/makeinfo/tests/html-extrali.txi
@@ -0,0 +1,11 @@
+\input texinfo
+@setfilename menuli.info
+
+@c extra li generated after <menu>
+@c From: Marius Groeger <mag@sysgo.de>, 13nov98.
+
+@menu
+* entry1::
+@end menu
+
+@bye
diff --git a/makeinfo/tests/html-manuals b/makeinfo/tests/html-manuals
new file mode 100755
index 0000000..2ba24f3
--- /dev/null
+++ b/makeinfo/tests/html-manuals
@@ -0,0 +1,13 @@
+#!/bin/sh
+# $Id: html-manuals,v 1.3 2004/04/11 17:56:47 karl Exp $
+# Test that all the distribution manuals can be converted to HTML.
+
+: ${srcdir=.}
+
+for manual in info.texi info-stnd.texi texinfo.txi; do
+ base=`echo $manual | sed 's/\.te*xi$//'`
+ ../makeinfo --html -I$srcdir/../../doc -I../../doc --no-split \
+ $srcdir/../../doc/$manual -o $base.html \
+ || exit 1
+ rm -f $base.html
+done
diff --git a/makeinfo/tests/html-min b/makeinfo/tests/html-min
new file mode 100755
index 0000000..948071a
--- /dev/null
+++ b/makeinfo/tests/html-min
@@ -0,0 +1,8 @@
+#!/bin/sh
+# Test that a minimal Texinfo file can be converted to HTML.
+
+../makeinfo --html --no-split ${srcdir-.}/html-min.txi
+exit_status=$?
+
+rm -f html-min.html
+exit $exit_status
diff --git a/makeinfo/tests/html-min.txi b/makeinfo/tests/html-min.txi
new file mode 100644
index 0000000..116519e
--- /dev/null
+++ b/makeinfo/tests/html-min.txi
@@ -0,0 +1,12 @@
+\input texinfo
+@setfilename html-min.info
+@settitle HTML min test
+
+@node Top
+@top Top of HTML min test
+
+Top.
+
+Second paragraph.
+
+@bye
diff --git a/makeinfo/tests/html-para b/makeinfo/tests/html-para
new file mode 100755
index 0000000..a9ea2b5
--- /dev/null
+++ b/makeinfo/tests/html-para
@@ -0,0 +1,8 @@
+#!/bin/sh
+# Test that paragraph beginnings in HTML work ok.
+
+../makeinfo --no-split --html ${srcdir-.}/html-para.txi
+exit_status=$?
+
+rm -f html-para.html
+exit $exit_status
diff --git a/makeinfo/tests/html-para.txi b/makeinfo/tests/html-para.txi
new file mode 100644
index 0000000..c6e34fd
--- /dev/null
+++ b/makeinfo/tests/html-para.txi
@@ -0,0 +1,24 @@
+\input texinfo
+@setfilename html-para.info
+@settitle HTML paragraph beginning test
+
+@c <p> is emitted at paragraph beginning, which makes the text
+@c between START and END not exactly what some cm_xxx functions
+@c expect, when they are called by pop_and_call_brace.
+
+@set val @@value@{@}
+@definfoenclose foo,\\,//
+
+@node Top
+@top Top of HTML paragraph test
+
+@value{val} should work at the beginning of a new paragraph.
+
+@dotless{i} dotless should not trigger error messages at the beginning
+of a new paragraph.
+
+@sc{small-caps} should work at the beginning of a new paragraph.
+
+@foo{@@definfoenclose} should work at the beginning of a new paragraph.
+
+@bye
diff --git a/makeinfo/tests/html-title b/makeinfo/tests/html-title
new file mode 100755
index 0000000..54badd5
--- /dev/null
+++ b/makeinfo/tests/html-title
@@ -0,0 +1,13 @@
+#!/bin/sh
+# Test that titles with @ commands don't produce markup in the <title>.
+# (And that the @ commands get expanded.)
+
+if ../makeinfo --no-split --html ${srcdir-.}/html-title.txi; then
+ grep '^<title>@[^<>]*</title>$' html-title.html >/dev/null
+ exit_status=$?
+else
+ exit_status=1
+fi
+
+rm -f html-title.html
+exit $exit_status
diff --git a/makeinfo/tests/html-title.txi b/makeinfo/tests/html-title.txi
new file mode 100644
index 0000000..2e2f25c
--- /dev/null
+++ b/makeinfo/tests/html-title.txi
@@ -0,0 +1,12 @@
+\input texinfo
+@setfilename html-title.info
+@settitle @@title @sc{html} @code{test}
+
+@node Top
+@top Top of @@title @sc{html} @code{test}
+
+Top.
+
+Second paragraph.
+
+@bye
diff --git a/makeinfo/tests/html-top b/makeinfo/tests/html-top
new file mode 100755
index 0000000..038404a
--- /dev/null
+++ b/makeinfo/tests/html-top
@@ -0,0 +1,13 @@
+#!/bin/sh
+# Test that a bare top node does not crash with --html.
+
+: ${srcdir=.}
+
+# But this input file is erroneous, so throw away errors.
+../makeinfo --no-split --force -o html-top.html --html $srcdir/html-top.txi \
+2>/dev/null
+test -s html-top.html
+exit_status=$?
+
+rm -f html-top.html
+exit $exit_status
diff --git a/makeinfo/tests/html-top.txi b/makeinfo/tests/html-top.txi
new file mode 100644
index 0000000..ade7214
--- /dev/null
+++ b/makeinfo/tests/html-top.txi
@@ -0,0 +1,7 @@
+\input texinfo
+@setfilename top.info
+
+@node start
+@top
+
+@bye
diff --git a/makeinfo/tests/incl-incl.txi b/makeinfo/tests/incl-incl.txi
new file mode 100644
index 0000000..4efea48
--- /dev/null
+++ b/makeinfo/tests/incl-incl.txi
@@ -0,0 +1 @@
+This is the @emph{included} file (include-value2.txi).
diff --git a/makeinfo/tests/include-value b/makeinfo/tests/include-value
new file mode 100755
index 0000000..3cef577
--- /dev/null
+++ b/makeinfo/tests/include-value
@@ -0,0 +1,22 @@
+#!/bin/sh
+# $Id: include-value,v 1.4 2005/04/05 21:04:16 karl Exp $
+# Test @value expansion in @include and @verbatiminclude names.
+
+unset TEXINFO_OUTPUT
+: ${srcdir=.}
+
+../makeinfo -I $srcdir $srcdir/include-value.txi
+exit_status=$?
+
+if test $exit_status = 0; then
+ # should have three instances of _included_,
+ # and three of {included}.
+ count=`grep -c _included_ include-value.info`
+ test $count = 3 || exit_status=`expr $exit_status + 1`
+
+ count=`grep -c '{included}' include-value.info`
+ test $count = 3 || exit_status=`expr $exit_status + 1`
+fi
+
+rm -f include-value.info
+exit $exit_status
diff --git a/makeinfo/tests/include-value.txi b/makeinfo/tests/include-value.txi
new file mode 100644
index 0000000..1c7f9b9
--- /dev/null
+++ b/makeinfo/tests/include-value.txi
@@ -0,0 +1,32 @@
+\input texinfo
+@setfilename include-value.info
+@c $Id: include-value.txi,v 1.2 2004/04/11 17:56:47 karl Exp $
+
+@set testvar incl-incl.txi
+
+@c test - in the variable name, and concatenation of text after.
+@set test-var incl-incl.tx
+
+@c test - in the variable name, and concatenation of text before and after.
+@set test_var ncl-incl.tx
+
+
+@node Top
+
+testvar include: @include @value{testvar}
+
+testvar verbatiminclude: @verbatiminclude @value{testvar}
+
+
+test-var include: @include @value{test-var}i
+
+test-var verbatiminclude: @verbatiminclude @value{test-var}i
+
+
+test_var include: @include i@value{test_var}i
+
+test_var verbatiminclude: @verbatiminclude i@value{test_var}i
+
+
+@bye
+
diff --git a/makeinfo/tests/macro-at b/makeinfo/tests/macro-at
new file mode 100755
index 0000000..a9dfdab
--- /dev/null
+++ b/makeinfo/tests/macro-at
@@ -0,0 +1,8 @@
+#!/bin/sh
+# Test @@ in macro expansions, etc. --eliz, 14nov99.
+
+unset TEXINFO_OUTPUT
+: ${srcdir=.}
+../makeinfo $srcdir/macro-at.txi || exit 1
+
+rm -f macro-at.info
diff --git a/makeinfo/tests/macro-at.txi b/makeinfo/tests/macro-at.txi
new file mode 100644
index 0000000..24b9101
--- /dev/null
+++ b/makeinfo/tests/macro-at.txi
@@ -0,0 +1,38 @@
+\input texinfo @c -*- texinfo -*-
+@setfilename macro-at.info
+@settitle AUTHORS -- who did what on GNU LilyPond
+
+@macro foo
+foo-expansion
+@end macro
+
+@macro bar
+bar-expansion
+@end macro
+
+@node Top, , AUTHORS -- who did what on GNU LilyPond, (dir)
+@top
+@menu
+* AUTHORS -- who did what on GNU LilyPond:: AUTHORS -- who did what.
+@end menu
+
+@node AUTHORS -- who did what on GNU LilyPond, Top, , Top
+@chapter AUTHORS -- who did what on GNU LilyPond?
+
+This file lists authors of GNU LilyPond, and what they wrote.
+It also uses foobar@{.
+
+@itemize @bullet
+@item @email{pinard@@iro.montreal.ca, Fran@,{c}ois Pinard},
+ parts of Documentation.
+@item @email{foobar@@baz@@, The Foobar},
+ the usual foobarical thing.
+@item @email{another@@foobar@{, Buzzer},
+ buzzed all the way.
+@item @email{@foo{}@@@bar{}},
+ also helped.
+@item @email{tomcato@@xoommail.com, Tom Cato Amundsen},
+ cembalo-partita in mundela.
+@end itemize
+
+@bye
diff --git a/makeinfo/tests/menu-whitespace b/makeinfo/tests/menu-whitespace
new file mode 100755
index 0000000..a01a38d
--- /dev/null
+++ b/makeinfo/tests/menu-whitespace
@@ -0,0 +1,72 @@
+#!/bin/sh
+# Bug where whitespace after @menu caused confusion.
+
+unset TEXINFO_OUTPUT
+: ${srcdir=.}
+input=`basename $0`.txi
+
+../makeinfo -o /dev/null $srcdir/$input
+exit $?
+
+Date: 07 Dec 1998 11:23:44 +0100
+From: Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+To: bug-texinfo@gnu.org
+Subject: Makeinfo mishandles defaulted node links
+
+The following example demonstrates a bug in makeinfo:
+
+$ cat top.texi
+@setfilename top.info
+
+@node Top
+@top Top
+
+@menu
+* first::
+@end menu
+
+@node first
+@chapter first
+
+@menu @c
+* second::
+@end menu
+
+@node second
+@section second
+$ makeinfo top.texi
+Making info file `top.info' from `top.texi'.
+./top.texi:3: Next field of node `Top' not pointed to.
+./top.texi:17: This node (second) has the bad Prev.
+makeinfo: Removing output file `/home/as/test/top.info' due to errors; use --force to preserve.
+
+Makeinfo is being confused by the whitespace after @menu, or rather by its
+absence.
+
+
+1998-12-06 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
+
+ * makeinfo/node.c (cm_node): When searching for @menu don't
+ require a space after it.
+
+--- texinfo-3.12b/makeinfo/node.c.~1~ Mon Oct 26 23:14:59 1998
++++ texinfo-3.12b/makeinfo/node.c Sun Dec 6 00:23:59 1998
+@@ -523,9 +523,10 @@
+ orig_size = size_of_input_text;
+
+ input_text_offset =
+- search_forward ("\n@menu ", orig_offset);
++ search_forward ("\n@menu", orig_offset);
+
+- if (input_text_offset > -1)
++ if (input_text_offset > -1
++ && cr_or_whitespace (input_text[input_text_offset + 6]))
+ {
+ char *nodename_from_menu = NULL;
+
+
+--
+Andreas Schwab "And now for something
+schwab@issan.cs.uni-dortmund.de completely different"
+schwab@gnu.org
+
diff --git a/makeinfo/tests/menu-whitespace.txi b/makeinfo/tests/menu-whitespace.txi
new file mode 100644
index 0000000..fd1c39f
--- /dev/null
+++ b/makeinfo/tests/menu-whitespace.txi
@@ -0,0 +1,18 @@
+@setfilename top.info
+
+@node Top
+@top Top
+
+@menu
+* first::
+@end menu
+
+@node first
+@chapter first
+
+@menu @c
+* second::
+@end menu
+
+@node second
+@section second
diff --git a/makeinfo/tests/no-headers b/makeinfo/tests/no-headers
new file mode 100755
index 0000000..6b96184
--- /dev/null
+++ b/makeinfo/tests/no-headers
@@ -0,0 +1,12 @@
+#!/bin/sh
+# Test that info.texi works with --no-headers (this includes node
+# pointer defaulting).
+
+# maybe need "nul" sometimes? Not clear.
+: ${nulldev=/dev/null}
+
+unset TEXINFO_OUTPUT
+: ${srcdir=.}
+docdir=$srcdir/../../doc
+
+../makeinfo --no-headers -o $nulldev -I$docdir info.texi
diff --git a/makeinfo/tests/node-expand b/makeinfo/tests/node-expand
new file mode 100755
index 0000000..26dee24
--- /dev/null
+++ b/makeinfo/tests/node-expand
@@ -0,0 +1,12 @@
+#!/bin/sh
+# Test command expansion in node names.
+
+unset TEXINFO_OUTPUT
+: ${srcdir=.}
+
+../makeinfo --commands-in-node-names $srcdir/node-expand.txi
+test -s node-expand.info
+exit_status=$?
+
+rm -f node-expand.info
+exit $exit_status
diff --git a/makeinfo/tests/node-expand.txi b/makeinfo/tests/node-expand.txi
new file mode 100644
index 0000000..c31be5a
--- /dev/null
+++ b/makeinfo/tests/node-expand.txi
@@ -0,0 +1,64 @@
+\input texinfo.tex @c -*-texinfo-*-
+
+@setfilename node-expand.info
+
+@c Makeinfo should expand non-macros such as @@ and @value
+@c in node names and node references, including menus.
+@c This file deliberately references "Node 1" both via
+@c @value and directly; this should not trigger any errors,
+@c as long as --commands-in-node-names is used.
+@c Index entries should all be expanded as well.
+
+@set node1 Node 1
+
+@ifnottex
+
+@node Top, (dir), (dir), (dir)
+@top Expansion in Node Names
+
+@end ifnottex
+
+@menu
+* @value{node1} ::
+* @@node `2'::
+* ``node'' with---tricks::
+@end menu
+
+@xref{@@node `2'}.
+
+@node @value{node1}, @@node `2', Top, Top
+@chapter Chapter 1
+
+@cindex entry for chapter 1
+This is chapter 1.
+@xref{@@node `2'}.
+
+@set sec1 Section 1.1
+
+@menu
+* @value{sec1}::
+@end menu
+
+@node Section 1.1, , Node 1, Node 1
+@comment node-name, next, previous, up
+
+@cindex entry for section 1.1
+This is section 1.1.
+
+@node @@node `2', ``node'' with---tricks, @value{node1}, Top
+@comment node-name, next, previous, up
+@chapter Node 2
+
+@cindex entry for chapter 2
+This is chapter 2.
+@xref{@value{node1}}. @xref{Node 1}.
+@xref{``node'' with---tricks, Node with some tricks}.
+
+@node ``node'' with---tricks, , @@node `2', Top
+
+@cindex tricks
+Another node.
+
+@printindex cp
+
+@bye
diff --git a/makeinfo/tests/node-value b/makeinfo/tests/node-value
new file mode 100755
index 0000000..aff0be2
--- /dev/null
+++ b/makeinfo/tests/node-value
@@ -0,0 +1,12 @@
+#!/bin/sh
+# Test @value expansion in node names.
+
+unset TEXINFO_OUTPUT
+: ${srcdir=.}
+
+../makeinfo $srcdir/node-value.txi
+grep -v "No Value" node-value.info >/dev/null
+exit_status=$?
+
+rm -f node-value.info
+exit $exit_status
diff --git a/makeinfo/tests/node-value.txi b/makeinfo/tests/node-value.txi
new file mode 100644
index 0000000..ba1173f
--- /dev/null
+++ b/makeinfo/tests/node-value.txi
@@ -0,0 +1,15 @@
+\input texinfo
+@setfilename node-value.info
+@set a--foo bar
+
+@node Top, @value{a--foo}, (dir), (dir)
+@top Var @value{a--foo}
+@value{a--foo}
+
+@node @value{a--foo}, BarFoo, Top, (dir)
+@chapter BarFoo
+
+@node BarFoo, , @value{a--foo}, (dir)
+@chapter bar
+
+@bye
diff --git a/makeinfo/tests/node-whitespace b/makeinfo/tests/node-whitespace
new file mode 100755
index 0000000..e480108
--- /dev/null
+++ b/makeinfo/tests/node-whitespace
@@ -0,0 +1,12 @@
+#!/bin/sh
+# Test whitespace collapse in node names.
+
+unset TEXINFO_OUTPUT
+: ${srcdir=.}
+
+../makeinfo $srcdir/node-whitespace.txi
+test -s node-whitespace.info
+exit_status=$?
+
+rm -f node-whitespace.info
+exit $exit_status
diff --git a/makeinfo/tests/node-whitespace.txi b/makeinfo/tests/node-whitespace.txi
new file mode 100644
index 0000000..04f0339
--- /dev/null
+++ b/makeinfo/tests/node-whitespace.txi
@@ -0,0 +1,30 @@
+\input texinfo.tex @c -*-texinfo-*-
+
+@setfilename node-whitespace.info
+
+@c Makeinfo should collapse whitespace in node names.
+
+@ifnottex
+
+@node Top
+@top Whitespace in Node Names
+
+@end ifnottex
+
+@menu
+* Chap 1.3 ::
+* Chap 1.4 :Chap 1.4.
+@end menu
+
+@node Chap 1.3
+@chapter Chap 1.3
+
+Can I reach here?
+
+@node Chap 1.4
+@chapter Another space test
+
+How about here?
+@xref{Chap 1.3}.
+
+@bye
diff --git a/makeinfo/tests/quote-args b/makeinfo/tests/quote-args
new file mode 100755
index 0000000..6940c0c
--- /dev/null
+++ b/makeinfo/tests/quote-args
@@ -0,0 +1,19 @@
+#!/bin/sh
+# Test @quote-args facility.
+
+: ${srcdir=.}
+
+unset TEXINFO_OUTPUT
+TMP=quote-args.out
+
+cat > quote-args.samp <<EOT
+*FIXME: Many arguments, separated by commas, are processed here*
+natopocotuototam
+
+EOT
+
+../makeinfo --plaintex $srcdir/quote-args.txi | diff - quote-args.samp
+exit_code=$?
+
+rm quote-args.samp
+exit $exit_code
diff --git a/makeinfo/tests/quote-args.txi b/makeinfo/tests/quote-args.txi
new file mode 100644
index 0000000..4f78d1d
--- /dev/null
+++ b/makeinfo/tests/quote-args.txi
@@ -0,0 +1,20 @@
+\input texinfo
+@smallbook
+@setfilename quote-args.info
+@settitle Quote-args facility in macros
+
+@rmacro cat{a,b}
+\a\\b\
+@end rmacro
+
+@macro FIXME{a}
+@strong{FIXME: \a\}
+@end macro
+
+@node Top, , (dir), (dir)
+
+@noindent
+@FIXME{Many arguments, separated by commas, are processed here}
+@cat{@cat{@cat{@cat{@cat{@cat{na, to}, po}, co}, tu}, oto},tam}
+@bye
+
diff --git a/makeinfo/tests/top b/makeinfo/tests/top
new file mode 100755
index 0000000..c1288f3
--- /dev/null
+++ b/makeinfo/tests/top
@@ -0,0 +1,11 @@
+#!/bin/sh
+# Test that a top node can be ignored.
+
+unset TEXINFO_OUTPUT
+: ${srcdir=.}
+../makeinfo $srcdir/top.txi || exit 1
+
+# Expected warnings due to use of @ifinfo instead of @ifnottex.
+../makeinfo --no-split --no-warn --html $srcdir/top.txi -o top.html || exit 1
+
+rm -f top*.html top.info
diff --git a/makeinfo/tests/top.txi b/makeinfo/tests/top.txi
new file mode 100644
index 0000000..e8c3cbb
--- /dev/null
+++ b/makeinfo/tests/top.txi
@@ -0,0 +1,25 @@
+\input texinfo
+@setfilename top.info
+@settitle top test
+
+@c This traditional top node uses @ifinfo for testing.
+@c Therefore there will be warnings when processing with --html.
+@c The solution is to use @ifnottex instead.
+
+@ifinfo
+@node Top
+@top Top test
+
+Typical top node.
+@end ifinfo
+
+@menu
+* Subnode::
+@end menu
+
+@node Subnode
+@chapter Subnode
+
+Subnode.
+
+@bye
diff --git a/makeinfo/tests/twofiles b/makeinfo/tests/twofiles
new file mode 100755
index 0000000..22c477c
--- /dev/null
+++ b/makeinfo/tests/twofiles
@@ -0,0 +1,23 @@
+#!/bin/sh
+# $Id: twofiles,v 1.3 2004/04/11 17:56:47 karl Exp $
+# Test that an existing and nonexisting file doesn't cause a
+# segmentation fault.
+# From: Arkadiusz Miskiewicz <misiek@pld.ORG.PL>, 15 Feb 2003 13:22:49 +0100.
+
+unset TEXINFO_OUTPUT
+: ${srcdir=.}
+
+outfile=outfile
+errfile=errfile
+trap 'status=$?; rm -f $outfile $errfile && exit $status' 0
+
+../makeinfo -o /dev/null $srcdir/html-min.txi /nonexistent.texinfo \
+>$outfile 2>$errfile
+exit_status=$?
+
+# we expect one error message about /nonexistent.texinfo and bad exit status.
+test $exit_status -ne 0 \
+&& grep /nonexistent $errfile >/dev/null \
+&& exit_status=0
+
+exit $exit_status
diff --git a/makeinfo/toc.c b/makeinfo/toc.c
new file mode 100644
index 0000000..3f0fd87
--- /dev/null
+++ b/makeinfo/toc.c
@@ -0,0 +1,378 @@
+/* toc.c -- table of contents handling.
+ $Id: toc.c,v 1.12 2008/05/19 18:26:48 karl Exp $
+
+ Copyright (C) 1999, 2000, 2001, 2002, 2003, 2007, 2008
+ 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/>.
+
+ Originally written by Karl Heinz Marbaise <kama@hippo.fido.de>. */
+
+#include "system.h"
+#include "makeinfo.h"
+#include "cmds.h"
+#include "files.h"
+#include "macro.h"
+#include "node.h"
+#include "html.h"
+#include "lang.h"
+#include "makeinfo.h"
+#include "sectioning.h"
+#include "toc.h"
+#include "xml.h"
+
+/* array of toc entries */
+static TOC_ENTRY_ELT **toc_entry_alist = NULL;
+
+/* toc_counter start from 0 ... n for every @chapter, @section ... */
+static int toc_counter = 0;
+
+/* Routine to add an entry to the table of contents */
+int
+toc_add_entry (char *tocname, int level, char *node_name, char *anchor)
+{
+ char *expanded_node, *d;
+ char *s = NULL;
+ char *filename = NULL;
+
+ if (!node_name)
+ node_name = "";
+
+ /* I assume that xrealloc behaves like xmalloc if toc_entry_alist is
+ NULL */
+ toc_entry_alist = xrealloc (toc_entry_alist,
+ (toc_counter + 1) * sizeof (TOC_ENTRY_ELT *));
+
+ toc_entry_alist[toc_counter] = xmalloc (sizeof (TOC_ENTRY_ELT));
+
+ if (html)
+ {
+ /* We need to insert the expanded node name into the toc, so
+ that when we eventually output the toc, its <a ref= link will
+ point to the <a name= tag created by cm_node in the navigation
+ bar. We cannot expand the containing_node member, for the
+ reasons explained in the WARNING below. We also cannot wait
+ with the node name expansion until the toc is actually output,
+ since by that time the macro definitions may have been changed.
+ So instead we store in the tocname member the expanded node
+ name and the toc name concatenated together (with the necessary
+ html markup), since that's how they are output. */
+ if (!anchor)
+ s = expanded_node = expand_node_name (node_name);
+ else
+ expanded_node = anchor;
+ if (splitting)
+ {
+ if (!anchor)
+ filename = nodename_to_filename (expanded_node);
+ else
+ filename = filename_part (current_output_filename);
+ }
+ if (!anchor)
+ /* Need to HTML-escape the expanded node name like
+ add_anchor_name does... */
+ d = escaped_anchor_name (expanded_node);
+ else
+ /* Section outside any node, they provided explicit anchor. */
+ d = xstrdup(anchor);
+
+ /* Add space for the "> which may be needed, and the tocname */
+ d = xrealloc (d, strlen (d) + strlen (tocname) + 3);
+ if (!anchor)
+ strcat (d, "\">");
+ strcat (d, tocname);
+ free (tocname); /* it was malloc'ed by substring() */
+ free (expanded_node);
+ toc_entry_alist[toc_counter]->name = d;
+ }
+ else
+ toc_entry_alist[toc_counter]->name = tocname;
+ /* WARNING! The node name saved in containing_node member must
+ be the node name with _only_ macros expanded (the macros in
+ the node name are expanded by cm_node when it grabs the name
+ from the @node directive). Non-macros, like @value, @@ and
+ other @-commands must NOT be expanded in containing_node,
+ because toc_find_section_of_node looks up the node name where
+ they are also unexpanded. You *have* been warned! */
+ toc_entry_alist[toc_counter]->containing_node = xstrdup (node_name);
+ toc_entry_alist[toc_counter]->level = level;
+ toc_entry_alist[toc_counter]->number = toc_counter;
+ toc_entry_alist[toc_counter]->html_file = filename;
+
+ /* have to be done at least */
+ return toc_counter++;
+}
+
+/* Return the name of a chapter/section/subsection etc. that
+ corresponds to the node NODE. If the node isn't found,
+ return NULL.
+
+ WARNING! This function relies on NODE being unexpanded
+ except for macros (i.e., @value, @@, and other non-macros
+ should NOT be expanded), because the containing_node member
+ stores unexpanded node names.
+
+ Note that this function returns the first section whose
+ containing node is NODE. Thus, they will lose if they use
+ more than a single chapter structioning command in a node,
+ or if they have a node without any structuring commands. */
+char *
+toc_find_section_of_node (char *node)
+{
+ int i;
+
+ if (!node)
+ node = "";
+ for (i = 0; i < toc_counter; i++)
+ if (STREQ (node, toc_entry_alist[i]->containing_node))
+ return toc_entry_alist[i]->name;
+
+ return NULL;
+}
+
+/* free up memory used by toc entries */
+void
+toc_free (void)
+{
+ int i;
+
+ if (toc_counter)
+ {
+ for (i = 0; i < toc_counter; i++)
+ {
+ free (toc_entry_alist[i]->name);
+ free (toc_entry_alist[i]->containing_node);
+ free (toc_entry_alist[i]);
+ }
+
+ free (toc_entry_alist);
+ toc_entry_alist = NULL; /* to be sure ;-) */
+ toc_counter = 0; /* to be absolutley sure ;-) */
+ }
+}
+
+/* Print table of contents in HTML. */
+
+static void
+contents_update_html (void)
+{
+ int i;
+ int k;
+ int last_level;
+
+ /* does exist any toc? */
+ if (!toc_counter)
+ /* no, so return to sender ;-) */
+ return;
+
+ add_html_block_elt_args ("\n<div class=\"contents\">\n<h2>%s</h2>\n<ul>\n", gdt("Table of Contents"));
+
+ last_level = toc_entry_alist[0]->level;
+
+ for (i = 0; i < toc_counter; i++)
+ {
+ if (toc_entry_alist[i]->level > last_level)
+ {
+ /* unusual, but it is possible
+ @chapter ...
+ @subsubsection ... ? */
+ for (k = 0; k < (toc_entry_alist[i]->level-last_level); k++)
+ add_html_block_elt ("<ul>\n");
+ }
+ else if (toc_entry_alist[i]->level < last_level)
+ {
+ /* @subsubsection ...
+ @chapter ... this IS usual.*/
+ for (k = 0; k < (last_level-toc_entry_alist[i]->level); k++)
+ add_word ("</li></ul>\n");
+ }
+
+ /* No double entries in TOC. */
+ if (!(i && strcmp (toc_entry_alist[i]->name,
+ toc_entry_alist[i-1]->name) == 0))
+ {
+ /* each toc entry is a list item. */
+ add_word ("<li>");
+
+ /* Insert link -- to an external file if splitting, or
+ within the current document if not splitting. */
+ add_word ("<a ");
+ /* For chapters (only), insert an anchor that the short contents
+ will link to. */
+ if (toc_entry_alist[i]->level == 0)
+ {
+ char *p = toc_entry_alist[i]->name;
+
+ /* toc_entry_alist[i]->name has the form `foo">bar',
+ that is, it includes both the node name and anchor
+ text. We need to find where `foo', the node name,
+ ends, and use that in toc_FOO. */
+ while (*p && *p != '"')
+ p++;
+ add_word_args ("name=\"toc_%.*s\" ",
+ p - toc_entry_alist[i]->name, toc_entry_alist[i]->name);
+ /* save the link if necessary */
+ if (internal_links_stream)
+ {
+ fprintf (internal_links_stream, "%s#toc_%.*s\ttoc\t%s\n",
+ splitting ? toc_entry_alist[i]->html_file : "",
+ p - toc_entry_alist[i]->name, toc_entry_alist[i]->name,
+ p + 2);
+ }
+ }
+ add_word_args ("href=\"%s#%s</a>\n",
+ splitting ? toc_entry_alist[i]->html_file : "",
+ toc_entry_alist[i]->name);
+ }
+
+ last_level = toc_entry_alist[i]->level;
+ }
+
+ /* Go back to start level. */
+ if (toc_entry_alist[0]->level < last_level)
+ for (k = 0; k < (last_level-toc_entry_alist[0]->level); k++)
+ add_word ("</li></ul>\n");
+
+ add_word ("</li></ul>\n</div>\n\n");
+}
+
+/* print table of contents in ASCII (--no-headers)
+ May be we should create a new command line switch --ascii ? */
+static void
+contents_update_info (void)
+{
+ int i;
+ int k;
+
+ if (!toc_counter)
+ return;
+
+ insert_string ((char *) gdt("Table of Contents"));
+ insert ('\n');
+ for (i = 0; i < strlen (gdt("Table of Contents")); i++)
+ insert ('*');
+ insert_string ("\n\n");
+
+ for (i = 0; i < toc_counter; i++)
+ {
+ if (toc_entry_alist[i]->level == 0)
+ add_char ('\n');
+
+ /* indention with two spaces per level, should this
+ changed? */
+ for (k = 0; k < toc_entry_alist[i]->level; k++)
+ insert_string (" ");
+
+ insert_string (toc_entry_alist[i]->name);
+ insert ('\n');
+ }
+ insert_string ("\n\n");
+}
+
+/* shortcontents in HTML; Should this produce a standalone file? */
+static void
+shortcontents_update_html (char *contents_filename)
+{
+ int i;
+ char *toc_file = NULL;
+
+ /* does exist any toc? */
+ if (!toc_counter)
+ return;
+
+ add_html_block_elt_args ("\n<div class=\"shortcontents\">\n<h2>%s</h2>\n<ul>\n", gdt("Short Contents"));
+
+ if (contents_filename)
+ toc_file = filename_part (contents_filename);
+
+ for (i = 0; i < toc_counter; i++)
+ {
+ char *name = toc_entry_alist[i]->name;
+
+ if (toc_entry_alist[i]->level == 0)
+ {
+ if (contents_filename)
+ add_word_args ("<li><a href=\"%s#toc_%s</a></li>\n",
+ splitting ? toc_file : "", name);
+ else
+ add_word_args ("<a href=\"%s#%s</a>\n",
+ splitting ? toc_entry_alist[i]->html_file : "", name);
+ }
+ }
+ add_word ("</ul>\n</div>\n\n");
+ if (contents_filename)
+ free (toc_file);
+}
+
+/* short contents in ASCII (--no-headers). */
+static void
+shortcontents_update_info (void)
+{
+ int i;
+
+ if (!toc_counter)
+ return;
+
+ insert_string ((char *) gdt("Short Contents"));
+ insert ('\n');
+ for (i = 0; i < strlen (gdt("Short Contents")); i++)
+ insert ('*');
+ insert_string ("\n\n");
+
+ for (i = 0; i < toc_counter; i++)
+ {
+ if (toc_entry_alist[i]->level == 0)
+ {
+ insert_string (toc_entry_alist[i]->name);
+ insert ('\n');
+ }
+ }
+ insert_string ("\n\n");
+}
+
+void
+cm_contents (int arg)
+{
+ /* the file where we found the @contents directive */
+ static char *contents_filename;
+
+ /* No need to mess with delayed stuff for XML and Docbook. */
+ if (xml)
+ {
+ if (arg == START)
+ {
+ int elt = STREQ (command, "contents") ? CONTENTS : SHORTCONTENTS;
+ xml_insert_element (elt, START);
+ xml_insert_element (elt, END);
+ }
+ }
+ else if (!handling_delayed_writes)
+ {
+ register_delayed_write (STREQ (command, "contents")
+ ? "@contents" : "@shortcontents");
+
+ if (html && STREQ (command, "contents"))
+ {
+ if (contents_filename)
+ free (contents_filename);
+ contents_filename = xstrdup (current_output_filename);
+ }
+ }
+ else if (html)
+ STREQ (command, "contents")
+ ? contents_update_html () : shortcontents_update_html (contents_filename);
+ else if (no_headers)
+ STREQ (command, "contents")
+ ? contents_update_info () : shortcontents_update_info ();
+}
diff --git a/makeinfo/toc.h b/makeinfo/toc.h
new file mode 100644
index 0000000..788420c
--- /dev/null
+++ b/makeinfo/toc.h
@@ -0,0 +1,44 @@
+/* toc.h -- table of contents handling.
+ $Id: toc.h,v 1.5 2007/07/01 21:20:33 karl Exp $
+
+ Copyright (C) 1999, 2007 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 Karl Heinz Marbaise <kama@hippo.fido.de>. */
+
+#ifndef TOC_H
+#define TOC_H
+
+/* Structure to hold one entry for the toc. */
+typedef struct toc_entry_elt {
+ char *name;
+ char *containing_node; /* Name of node containing this section. */
+ char *html_file; /* Name of HTML node-file in split-HTML mode */
+ int number; /* counting number from 0...n independent from
+ chapter/section can be used for anchors or
+ references to it. */
+ int level; /* level: chapter, section, subsection... */
+} TOC_ENTRY_ELT;
+
+/* all routines which have relationship with TOC should start with
+ toc_ (this is a kind of name-space) */
+extern int toc_add_entry (char *tocname, int level,
+ char *node_name, char *anchor); /* return the number for the toc-entry */
+extern void toc_free (void);
+extern char *toc_find_section_of_node (char *node);
+
+extern void cm_contents (int arg);
+
+#endif /* not TOC_H */
diff --git a/makeinfo/xml.c b/makeinfo/xml.c
new file mode 100644
index 0000000..88c452a
--- /dev/null
+++ b/makeinfo/xml.c
@@ -0,0 +1,2252 @@
+/* xml.c -- xml output, both TexinfoML and Docbook.
+ $Id: xml.c,v 1.75 2008/01/31 18:33:27 karl Exp $
+
+ Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+ 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/>.
+
+ Originally written by Philippe Martin <feloy@free.fr>. */
+
+#include "system.h"
+#include "makeinfo.h"
+#include "insertion.h"
+#include "files.h"
+#include "float.h"
+#include "macro.h"
+#include "cmds.h"
+#include "lang.h"
+
+#include "xml.h"
+
+#include <assert.h>
+
+#if !__OPTIMIZE__
+/* To make enum names available to debugger. */
+static enum xml_element xml_element_dummy;
+#endif
+
+typedef struct _element
+{
+ char name[32];
+ int contains_para;
+ int contained_in_para;
+ int keep_space;
+} element;
+
+element texinfoml_element_list [] = {
+ { "texinfo", 1, 0, 0 },
+ { "setfilename", 0, 0, 0 },
+ { "titlefont", 0, 0, 0 },
+ { "settitle", 0, 0, 0 },
+ { "documentdescription", 1, 0, 0 },
+
+ { "node", 1, 0, 0 },
+ { "nodenext", 0, 0, 0 },
+ { "nodeprev", 0, 0, 0 },
+ { "nodeup", 0, 0, 0 },
+
+ { "chapter", 1, 0, 0 },
+ { "section", 1, 0, 0 },
+ { "subsection", 1, 0, 0 },
+ { "subsubsection", 1, 0, 0 },
+
+ { "top", 1, 0, 0 },
+ { "unnumbered", 1, 0, 0 },
+ { "unnumberedsec", 1, 0, 0 },
+ { "unnumberedsubsec", 1, 0, 0 },
+ { "unnumberedsubsubsec", 1, 0, 0 },
+
+ { "appendix", 1, 0, 0 },
+ { "appendixsec", 1, 0, 0 },
+ { "appendixsubsec", 1, 0, 0 },
+ { "appendixsubsubsec", 1, 0, 0 },
+
+ { "majorheading", 0, 0, 0 },
+ { "chapheading", 0, 0, 0 },
+ { "heading", 0, 0, 0 },
+ { "subheading", 0, 0, 0 },
+ { "subsubheading", 0, 0, 0 },
+
+ { "titlepage", 1, 0, 0 },
+ { "author", 0, 0, 0 },
+ { "booktitle", 0, 0, 0 },
+ { "booksubtitle", 0, 0, 0 },
+
+ { "menu", 1, 0, 0 },
+ { "detailmenu", 1, 0, 0 },
+ { "menuentry", 0, 0, 0 },
+ { "menutitle", 0, 0, 0 },
+ { "menucomment", 0, 0, 0 },
+ { "menunode", 0, 0, 0 },
+ { "nodename", 0, 0, 0 },
+
+ { "acronym", 0, 1, 0 },
+ { "acronymword", 0, 1, 0 },
+ { "acronymdesc", 0, 1, 0 },
+
+ { "abbrev", 0, 1, 0 },
+ { "abbrevword", 0, 1, 0 },
+ { "abbrevdesc", 0, 1, 0 },
+
+ { "tt", 0, 1, 0 },
+ { "code", 0, 1, 0 },
+ { "command", 0, 1, 0 },
+ { "env", 0, 1, 0 },
+ { "file", 0, 1, 0 },
+ { "option", 0, 1, 0 },
+ { "samp", 0, 1, 0 },
+ { "kbd", 0, 1, 0 },
+ { "url", 0, 1, 0 },
+ { "key", 0, 1, 0 },
+ { "var", 0, 1, 0 },
+ { "sc", 0, 1, 0 },
+ { "dfn", 0, 1, 0 },
+ { "emph", 0, 1, 0 },
+ { "strong", 0, 1, 0 },
+ { "cite", 0, 1, 0 },
+ { "notfixedwidth", 0, 1, 0 },
+ { "i", 0, 1, 0 },
+ { "b", 0, 1, 0 },
+ { "r", 0, 1, 0 },
+ { "slanted", 0, 1, 0 },
+ { "sansserif", 0, 1, 0 },
+
+ { "exdent", 0, 0, 0 },
+
+ { "title", 0, 0, 0 },
+ { "ifinfo", 1, 0, 0 },
+ { "sp", 0, 0, 0 },
+ { "center", 1, 0, 0 },
+ { "dircategory", 0, 0, 0 },
+ { "quotation", 1, 0, 0 },
+ { "example", 0, 0, 1 },
+ { "smallexample", 0, 0, 1 },
+ { "lisp", 0, 0, 1 },
+ { "smalllisp", 0, 0, 1 },
+ { "cartouche", 1, 0, 0 },
+ { "copying", 1, 0, 0 },
+ { "format", 0, 0, 1 },
+ { "smallformat", 0, 0, 1 },
+ { "display", 0, 0, 1 },
+ { "smalldisplay", 0, 0, 1 },
+ { "verbatim", 0, 0, 1 },
+ { "footnote", 0, 1, 0 },
+ { "", 0, 1, 0 }, /* LINEANNOTATION (docbook) */
+
+ { "", 1, 0, 0 }, /* TIP (docbook) */
+ { "", 1, 0, 0 }, /* NOTE (docbook) */
+ { "", 1, 0, 0 }, /* IMPORTANT (docbook) */
+ { "", 1, 0, 0 }, /* WARNING (docbook) */
+ { "", 1, 0, 0 }, /* CAUTION (docbook) */
+
+ { "itemize", 0, 0, 0 },
+ { "itemfunction", 0, 0, 0 },
+ { "item", 1, 0, 0 },
+ { "enumerate", 0, 0, 0 },
+ { "table", 0, 0, 0 },
+ { "tableitem", 0, 0, 0 },
+ { "tableterm", 0, 0, 0 },
+
+ { "indexterm", 0, 1, 0 },
+
+ { "math", 0, 1, 0 },
+
+ { "dmn", 0, 1, 0 },
+
+ { "clicksequence", 0, 1, 0 },
+ { "click", 0, 1, 0 },
+
+ { "xref", 0, 1, 0 },
+ { "xrefnodename", 0, 1, 0 },
+ { "xrefinfoname", 0, 1, 0 },
+ { "xrefprinteddesc", 0, 1, 0 },
+ { "xrefinfofile", 0, 1, 0 },
+ { "xrefprintedname", 0, 1, 0 },
+
+ { "inforef", 0, 1, 0 },
+ { "inforefnodename", 0, 1, 0 },
+ { "inforefrefname", 0, 1, 0 },
+ { "inforefinfoname", 0, 1, 0 },
+
+ { "uref", 0, 1, 0 },
+ { "urefurl", 0, 1, 0 },
+ { "urefdesc", 0, 1, 0 },
+ { "urefreplacement", 0, 1, 0 },
+
+ { "email", 0, 1, 0 },
+ { "emailaddress", 0, 1, 0 },
+ { "emailname", 0, 1, 0 },
+
+ { "group", 0, 0, 0 },
+ { "float", 1, 0, 0 },
+ { "floattype", 0, 0, 0 },
+ { "floatpos", 0, 0, 0 },
+ { "caption", 0, 0, 0 },
+ { "shortcaption", 0, 0, 0 },
+
+ { "", 0, 0, 0 }, /* TABLE (docbook) */
+ { "", 0, 0, 0 }, /* FIGURE (docbook) */
+ { "", 0, 0, 0 }, /* EXAMPLE (docbook) */
+ { "", 1, 0, 0 }, /* SIDEBAR (docbook) */
+
+ { "printindex", 0, 0, 0 },
+ { "listoffloats", 0, 0, 0 },
+ { "anchor", 0, 1, 0 },
+
+ { "image", 0, 0, 0 },
+ { "inlineimage", 0, 1, 0 },
+ { "alttext", 0, 1, 0 },
+
+ { "", 0, 1, 0 }, /* PRIMARY (docbook) */
+ { "", 0, 1, 0 }, /* SECONDARY (docbook) */
+ { "", 0, 0, 0 }, /* INFORMALFIGURE (docbook) */
+ { "", 0, 0, 0 }, /* MEDIAOBJECT (docbook) */
+ { "", 0, 0, 0 }, /* IMAGEOBJECT (docbook) */
+ { "", 0, 0, 0 }, /* IMAGEDATA (docbook) */
+ { "", 0, 0, 0 }, /* TEXTOBJECT (docbook) */
+ { "", 0, 0, 0 }, /* INDEXENTRY (docbook) */
+ { "", 0, 0, 0 }, /* PRIMARYIE (docbook) */
+ { "", 0, 0, 0 }, /* SECONDARYIE (docbook) */
+ { "", 0, 0, 0 }, /* INDEXDIV (docbook) */
+ { "multitable", 0, 0, 0 },
+ { "", 0, 0, 0 }, /* TGROUP (docbook) */
+ { "columnfraction", 0, 0, 0 },
+ { "thead", 0, 0, 0 },
+ { "tbody", 0, 0, 0 },
+ { "entry", 0, 0, 0 },
+ { "row", 0, 0, 0 },
+ { "", 0, 0, 0 }, /* BOOKINFO (docbook) */
+ { "", 0, 0, 0 }, /* ABSTRACT (docbook) */
+ { "", 0, 0, 0 }, /* REPLACEABLE (docbook) */
+ { "", 0, 0, 0 }, /* ENVAR (docbook) */
+ { "", 0, 0, 0 }, /* COMMENT (docbook) */
+ { "", 0, 0, 0 }, /* FUNCTION (docbook) */
+ { "", 0, 0, 0 }, /* LEGALNOTICE (docbook) */
+
+ { "contents", 0, 0, 0 },
+ { "shortcontents", 0, 0, 0 },
+ { "documentlanguage", 0, 0, 0 },
+
+ { "setvalue", 0, 0, 0 },
+ { "clearvalue", 0, 0, 0 },
+
+ { "definition", 0, 0, 0 },
+ { "definitionterm", 0, 0, 0 },
+ { "definitionitem", 1, 0, 0 },
+ { "defcategory", 0, 0, 0 },
+ { "deffunction", 0, 0, 0 },
+ { "defvariable", 0, 0, 0 },
+ { "defparam", 0, 0, 0 },
+ { "defdelimiter", 0, 0, 0 },
+ { "deftype", 0, 0, 0 },
+ { "defparamtype", 0, 0, 0 },
+ { "defdatatype", 0, 0, 0 },
+ { "defclass", 0, 0, 0 },
+ { "defclassvar", 0, 0, 0 },
+ { "defoperation", 0, 0, 0 },
+ { "frenchspacing", 0, 0, 0 },
+
+ { "para", 0, 0, 0 } /* Must be last */
+ /* name / contains para / contained in para / preserve space */
+};
+
+element docbook_element_list [] = {
+ { "book", 0, 0, 0 }, /* TEXINFO */
+ { "", 0, 0, 0 }, /* SETFILENAME */
+ { "", 0, 0, 0 }, /* TITLEINFO */
+ { "title", 0, 0, 0 }, /* SETTITLE */
+ { "", 1, 0, 0 }, /* DOCUMENTDESCRIPTION (?) */
+
+ { "", 1, 0, 0 }, /* NODE */
+ { "", 0, 0, 0 }, /* NODENEXT */
+ { "", 0, 0, 0 }, /* NODEPREV */
+ { "", 0, 0, 0 }, /* NODEUP */
+
+ { "chapter", 1, 0, 0 },
+ { "sect1", 1, 0, 0 }, /* SECTION */
+ { "sect2", 1, 0, 0 }, /* SUBSECTION */
+ { "sect3", 1, 0, 0 }, /* SUBSUBSECTION */
+
+ { "chapter", 1, 0, 0 }, /* TOP */
+ { "chapter", 1, 0, 0 }, /* UNNUMBERED */
+ { "sect1", 1, 0, 0 }, /* UNNUMBEREDSEC */
+ { "sect2", 1, 0, 0 }, /* UNNUMBEREDSUBSEC */
+ { "sect3", 1, 0, 0 }, /* UNNUMBEREDSUBSUBSEC */
+
+ { "appendix", 1, 0, 0 },
+ { "sect1", 1, 0, 0 }, /* APPENDIXSEC */
+ { "sect2", 1, 0, 0 }, /* APPENDIXSUBSEC */
+ { "sect3", 1, 0, 0 }, /* APPENDIXSUBSUBSEC */
+
+ { "bridgehead", 0, 0, 0 }, /* MAJORHEADING */
+ { "bridgehead", 0, 0, 0 }, /* CHAPHEADING */
+ { "bridgehead", 0, 0, 0 }, /* HEADING */
+ { "bridgehead", 0, 0, 0 }, /* SUBHEADING */
+ { "bridgehead", 0, 0, 0 }, /* SUBSUBHEADING */
+
+ { "", 0, 0, 0 }, /* TITLEPAGE */
+ { "", 0, 0, 0 }, /* AUTHOR */
+ { "", 0, 0, 0 }, /* BOOKTITLE */
+ { "", 0, 0, 0 }, /* BOOKSUBTITLE */
+
+ { "", 1, 0, 0 }, /* MENU */
+ { "", 1, 0, 0 }, /* DETAILMENU */
+ { "", 1, 0, 0 }, /* MENUENTRY */
+ { "", 0, 0, 0 }, /* MENUTITLE */
+ { "", 1, 0, 0 }, /* MENUCOMMENT */
+ { "", 0, 0, 0 }, /* MENUNODE */
+ { "anchor", 0, 0, 0 }, /* NODENAME */
+
+ { "acronym", 0, 1, 0 },
+ { "", 0, 1, 0 }, /* ACRONYMWORD */
+ { "", 0, 1, 0 }, /* ACRONYMDESC */
+
+ { "abbrev", 0, 1, 0 },
+ { "", 0, 1, 0 }, /* ABBREVWORD */
+ { "", 0, 1, 0 }, /* ABBREVDESC */
+
+ { "literal", 0, 1, 0 }, /* TT */
+ { "literal", 0, 1, 0 }, /* CODE */
+ { "command", 0, 1, 0 }, /* COMMAND */
+ { "envar", 0, 1, 0 }, /* ENV */
+ { "filename", 0, 1, 0 }, /* FILE */
+ { "option", 0, 1, 0 }, /* OPTION */
+ { "literal", 0, 1, 0 }, /* SAMP */
+ { "userinput", 0, 1, 0 }, /* KBD */
+ { "wordasword", 0, 1, 0 }, /* URL */
+ { "keycap", 0, 1, 0 }, /* KEY */
+ { "replaceable", 0, 1, 0 }, /* VAR */
+ { "", 0, 1, 0 }, /* SC */
+ { "firstterm", 0, 1, 0 }, /* DFN */
+ { "emphasis", 0, 1, 0 }, /* EMPH */
+ { "emphasis", 0, 1, 0 }, /* STRONG */
+ { "citetitle", 0, 1, 0 }, /* CITE */
+ { "", 0, 1, 0 }, /* NOTFIXEDWIDTH */
+ { "wordasword", 0, 1, 0 }, /* I */
+ { "emphasis", 0, 1, 0 }, /* B */
+ { "", 0, 1, 0 }, /* R */
+ { "", 0, 1, 0 }, /* SLANTED */
+ { "", 0, 1, 0 }, /* SANSSERIF */
+
+ { "", 0, 0, 0 }, /* EXDENT */
+
+ { "title", 0, 0, 0 },
+ { "", 1, 0, 0 }, /* IFINFO */
+ { "", 0, 0, 0 }, /* SP */
+ { "", 1, 0, 0 }, /* CENTER */
+ { "", 0, 0, 0 }, /* DIRCATEGORY */
+ { "blockquote", 1, 0, 0 }, /* QUOTATION */
+ { "screen", 0, 0, 1 }, /* EXAMPLE */
+ { "screen", 0, 0, 1 }, /* SMALLEXAMPLE */
+ { "programlisting", 0, 0, 1 }, /* LISP */
+ { "programlisting", 0, 0, 1 }, /* SMALLLISP */
+ { "", 1, 0, 0 }, /* CARTOUCHE */
+ { "", 1, 0, 0 }, /* COPYING */
+ { "screen", 0, 1, 1 }, /* FORMAT */
+ { "screen", 0, 1, 1 }, /* SMALLFORMAT */
+ { "literallayout", 0, 1, 1 }, /* DISPLAY */
+ { "literallayout", 0, 1, 1 }, /* SMALLDISPLAY */
+ { "screen", 0, 0, 1 }, /* VERBATIM */
+ { "footnote", 0, 1, 0 },
+ { "lineannotation", 0, 1, 0 },
+
+ { "tip", 1, 0, 0 },
+ { "note", 1, 0, 0 },
+ { "important", 1, 0, 0 },
+ { "warning", 1, 0, 0 },
+ { "caution", 1, 0, 0 },
+
+ { "itemizedlist", 0, 0, 0 }, /* ITEMIZE */
+ { "", 0, 0, 0 }, /* ITEMFUNCTION */
+ { "listitem", 1, 0, 0 }, /* ITEM */
+ { "orderedlist", 0, 0, 0 }, /* ENUMERATE */
+ { "variablelist", 0, 0, 0 }, /* TABLE */
+ { "varlistentry", 0, 0, 0 }, /* TABLEITEM */
+ { "term", 0, 0, 0 }, /* TABLETERM */
+
+ { "indexterm", 0, 1, 0 }, /* INDEXTERM */
+
+ { "", 0, 1, 0 }, /* MATH */
+
+ { "", 0, 1, 0 }, /* DIMENSION */
+
+ { "", 0, 1, 0 }, /* CLICKSEQUENCE */
+ { "", 0, 1, 0 }, /* CLICK */
+
+ { "xref", 0, 1, 0 }, /* XREF */
+ { "link", 0, 1, 0 }, /* XREFNODENAME */
+ { "", 0, 1, 0 }, /* XREFINFONAME */
+ { "", 0, 1, 0 }, /* XREFPRINTEDDESC */
+ { "", 0, 1, 0 }, /* XREFINFOFILE */
+ { "", 0, 1, 0 }, /* XREFPRINTEDNAME */
+
+ { "", 0, 1, 0 }, /* INFOREF */
+ { "", 0, 1, 0 }, /* INFOREFNODENAME */
+ { "", 0, 1, 0 }, /* INFOREFREFNAME */
+ { "", 0, 1, 0 }, /* INFOREFINFONAME */
+
+ { "ulink", 0, 1, 0 }, /* UREF */
+ { "", 0, 1, 0 }, /* UREFURL */
+ { "", 0, 1, 0 }, /* UREFDESC */
+ { "", 0, 1, 0 }, /* UREFREPLACEMENT */
+
+ { "ulink", 0, 1, 0 }, /* EMAIL */
+ { "email", 0, 1, 0 }, /* EMAILADDRESS */
+ { "", 0, 1, 0 }, /* EMAILNAME */
+
+ { "", 0, 0, 0 }, /* GROUP */
+ { "", 1, 0, 0 }, /* FLOAT */
+ { "", 0, 0, 0 }, /* FLOATTYPE */
+ { "", 0, 0, 0 }, /* FLOATPOS */
+ { "", 0, 0, 0 }, /* CAPTION */
+ { "", 0, 0, 0 }, /* SHORTCAPTION */
+
+ { "table", 0, 1, 0 },
+ { "figure", 0, 1, 0 },
+ { "example", 1, 1, 0 },
+ { "sidebar", 1, 0, 0 },
+
+ { "index", 0, 0, 0 }, /* PRINTINDEX */
+ { "", 0, 1, 0 }, /* LISTOFFLOATS */
+ { "anchor", 0, 1, 0 }, /* ANCHOR */
+
+ { "", 0, 0, 0 }, /* IMAGE */
+ { "inlinemediaobject", 0, 1, 0 }, /* INLINEIMAGE */
+ { "", 0, 0, 0 }, /* IMAGEALTTEXT */
+
+ { "primary", 0, 1, 0 }, /* PRIMARY */
+ { "secondary", 0, 1, 0 },
+ { "informalfigure", 0, 0, 0 },
+ { "mediaobject", 0, 0, 0 },
+ { "imageobject", 0, 1, 0 },
+ { "imagedata", 0, 1, 0 },
+ { "textobject", 0, 1, 0 },
+ { "indexentry", 0, 0, 0 },
+ { "primaryie", 0, 0, 0 },
+ { "secondaryie", 0, 0, 0 },
+ { "indexdiv", 0, 0, 0 },
+ { "informaltable", 0, 0, 0 },
+ { "tgroup", 0, 0, 0 },
+ { "colspec", 0, 0, 0 },
+ { "thead", 0, 0, 0 },
+ { "tbody", 0, 0, 0 },
+ { "entry", 0, 0, 0 },
+ { "row", 0, 0, 0 },
+ { "bookinfo", 0, 0, 0 },
+ { "abstract", 1, 0, 0 },
+ { "replaceable", 0, 0, 0 },
+ { "envar", 0, 1, 0 },
+ { "comment", 0, 0, 0 },
+ { "function", 0, 1, 0 },
+ { "legalnotice", 1, 0, 0 },
+
+ { "", 0, 0, 0 }, /* CONTENTS (xml) */
+ { "", 0, 0, 0 }, /* SHORTCONTENTS (xml) */
+ { "", 0, 0, 0 }, /* DOCUMENT LANGUAGE (xml) */
+
+ { "", 0, 0, 0 }, /* SETVALUE (xml) */
+ { "", 0, 0, 0 }, /* CLEARVALUE (xml) */
+
+ { "informalfigure", 1, 0, 0 }, /* DEFINITION */
+ { "synopsis", 0, 0, 1 }, /* DEFINITIONTERM */
+ { "blockquote", 1, 0, 0 }, /* DEFINITIONITEM (xml) */
+ { "", 0, 0, 0 }, /* DEFCATEGORY (xml) */
+ { "function", 0, 0, 0 }, /* DEFFUNCTION */
+ { "varname", 0, 0, 0 }, /* DEFVARIABLE */
+ { "replaceable", 0, 0, 0 }, /* DEFPARAM */
+ { "", 0, 0, 0 }, /* DEFDELIMITER (xml) */
+ { "returnvalue", 0, 0, 0 }, /* DEFTYPE */
+ { "type", 0, 0, 0 }, /* DEFPARAMTYPE */
+ { "structname", 0, 0, 0 }, /* DEFDATATYPE */
+ { "classname", 0, 0, 0 }, /* DEFCLASS */
+ { "property", 0, 0, 0 }, /* DEFCLASSVAR */
+ { "methodname", 0, 0, 0 }, /* DEFOPERATION */
+ { "", 0, 0, 0 }, /* FRENCHSPACING */
+
+ { "para", 0, 0, 0 } /* Must be last */
+ /* name / contains para / contained in para / preserve space */
+};
+
+element *xml_element_list = NULL;
+
+
+typedef struct _replace_element
+{
+ int element_to_replace;
+ int element_containing;
+ int element_replacing;
+} replace_element;
+
+/* Elements to replace - Docbook only
+ -------------------
+ if `element_to_replace' have to be inserted
+ as a child of `element_containing,'
+ use `element_replacing' instead.
+
+ A value of `-1' for element_replacing means `do not use any element.'
+*/
+
+replace_element replace_elements [] = {
+ { I, TABLETERM, EMPH },
+ { B, TABLETERM, EMPH },
+ { TT, CODE, -1 },
+ { EXAMPLE, DISPLAY, -1 },
+ { CODE, DFN, -1 },
+ { CODE, VAR, -1 },
+ { EMPH, CODE, REPLACEABLE },
+ { VAR, VAR, -1},
+ { VAR, B, EMPH},
+ { B, CODE, ENVAR},
+ { CODE, I, EMPH},
+ { SAMP, VAR, -1 },
+ { FORMAT, BOOKINFO, ABSTRACT },
+ { QUOTATION, ABSTRACT, -1},
+ { LINEANNOTATION, LINEANNOTATION, -1 },
+ { LEGALNOTICE, ABSTRACT, -1 },
+ { QUOTATION, QUOTATION, -1 },
+ /* Formal versions of table and image elements. */
+ { MULTITABLE, FLOAT, FLOATTABLE },
+ { INFORMALFIGURE, FLOAT, FLOATFIGURE },
+ { CARTOUCHE, FLOAT, FLOATCARTOUCHE },
+ /* Unnecessary markup in @defun blocks. */
+ { VAR, DEFPARAM, -1 },
+ { CODE, DEFTYPE, -1 },
+ /* Add your elements to replace here */
+ {-1, 0, 0}
+};
+
+int xml_in_menu_entry = 0;
+int xml_in_menu_entry_comment = 0;
+int xml_node_open = 0;
+int xml_node_level = -1;
+int xml_in_para = 0;
+int xml_just_after_element = 0;
+int xml_keep_space = 0;
+
+int xml_no_indent = 0;
+
+int xml_no_para = 0;
+char *xml_node_id = NULL;
+
+/* Currently sorting the index. */
+int xml_sort_index = 0;
+
+int xml_in_xref_token = 0;
+int xml_in_bookinfo = 0;
+int xml_in_book_title = 0;
+int xml_in_abstract = 0;
+
+/* Non-zero if we are handling an element that can appear between
+ @item and @itemx, @deffn and @deffnx. */
+int xml_dont_touch_items_defs = 0;
+
+/* We need to keep footnote state, because elements inside footnote may try
+ to close the previous parent para. */
+static int xml_in_footnote = 0;
+
+static int xml_after_table_term = 0;
+static int book_started = 0;
+static int first_section_opened = 0;
+
+static int xml_in_tableitem[256];
+static int xml_in_item[256];
+static int xml_table_level = 0;
+
+static int xml_in_def_item[256];
+static int xml_definition_level = 0;
+int xml_after_def_term = 0;
+
+static int in_table_title = 0;
+
+static int in_indexentry = 0;
+static int in_secondary = 0;
+static int in_indexterm = 0;
+
+/* Technically there are certain Unicode characters which cannot
+ appear. Trying to implement the real rules would lead to deep
+ waters. So essentially just pass along what we are given. Some
+ references:
+ http://www.w3.org/TR/xml-id/
+ -> http://www.w3.org/TR/xml-names11/#NT-NCName
+ -> http://www.w3.org/TR/xml11/#NT-NameChar
+*/
+
+char *
+xml_id (char *id)
+{
+ char *tem = xmalloc (strlen (id) + 1);
+ char *p = tem;
+ strcpy (tem, id);
+ while (*p)
+ {
+ if (strchr (":\" \t\f\r\n", *p))
+ *p = '-';
+ p++;
+ }
+ p = tem;
+
+ /* First character cannot be a number. Clearly we should make this
+ dependent on the actual numeral found. */
+ if (strchr ("0123456789", *p))
+ *p = 'i';
+
+ return tem;
+}
+
+int
+xml_element (char *name)
+{
+ int i;
+ for (i = 0; i<=PARA; i++)
+ {
+ if (mbscasecmp (name, texinfoml_element_list[i].name) == 0)
+ return i;
+ }
+ printf ("Error xml_element\n");
+ return -1;
+}
+
+void
+xml_begin_document (const char *output_basename)
+{
+ if (book_started)
+ return;
+
+ book_started = 1;
+
+ /* Make sure this is the very first string of the output document. */
+ output_paragraph_offset = 0;
+
+ insert_string ("<?xml version=\"1.0\"");
+
+ /* At this point, we register a delayed writing for document encoding,
+ so in the end, proper encoding attribute will be inserted here.
+ Since the user is unaware that we are implicitly executing this
+ command, we should disable warnings temporarily, in order to avoid
+ possible confusion. (ie. if the output is not seekable,
+ register_delayed_write issues a warning.) */
+ {
+ extern int print_warnings;
+ int save_print_warnings = print_warnings;
+ print_warnings = 0;
+ register_delayed_write ("@documentencoding");
+ print_warnings = save_print_warnings;
+ }
+
+ insert_string ("?>\n");
+
+ if (docbook)
+ {
+ insert_string ("<!DOCTYPE book PUBLIC \"-//OASIS//DTD DocBook XML V4.2//EN\" \"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd\" [\n <!ENTITY tex \"TeX\">\n <!ENTITY latex \"LaTeX\">\n]>");
+ xml_element_list = docbook_element_list;
+ }
+ else
+ {
+ insert_string ("<!DOCTYPE texinfo PUBLIC \"-//GNU//DTD TexinfoML V");
+ insert_string (VERSION);
+ insert_string ("//EN\" \"http://www.gnu.org/software/texinfo/dtd/");
+ insert_string (VERSION);
+ insert_string ("/texinfo.dtd\">");
+ xml_element_list = texinfoml_element_list;
+ }
+
+ if (strcmp (xml_element_list[PARA].name, "para"))
+ {
+ warning ("internal error: xml_element_list table inconsistent");
+ xexit (-1);
+ }
+
+ if (language_code != last_language_code)
+ {
+ if (docbook)
+ /* The toplevel <book> element needs an id attribute if you want
+ to use the chunk.xml feature of the Docbook-XSL stylesheets.
+ Might as well use the output filename? */
+ xml_insert_element_with_attribute (TEXINFO, START,
+ "id=\"%s\" lang=\"%s\"",
+ output_basename,
+ language_table[language_code].abbrev);
+ else
+ xml_insert_element_with_attribute (TEXINFO, START,
+ "xml:lang=\"%s\"",
+ language_table[language_code].abbrev);
+ }
+ if (!docbook)
+ {
+ xml_insert_element (SETFILENAME, START);
+ insert_string (output_basename);
+ xml_insert_element (SETFILENAME, END);
+ }
+}
+
+/* */
+static int element_stack[256];
+static int element_stack_index = 0;
+
+static int
+xml_current_element (void)
+{
+ assert (element_stack_index > 0);
+ return element_stack[element_stack_index-1];
+}
+
+static void
+xml_push_current_element (int elt)
+{
+ element_stack[element_stack_index++] = elt;
+ if (element_stack_index > 200) /* fixxme, no hard limits */
+ warning ("internal error: xml stack overflow (%d - %s)",
+ element_stack_index, xml_element_list[elt].name);
+}
+
+static void
+xml_pop_current_element (void)
+{
+ element_stack_index--;
+ if (element_stack_index < 0)
+ {
+ warning ("internal error: xml stack underflow (index %d)",
+ element_stack_index);
+ element_stack_index = 0;
+ }
+}
+
+int
+xml_current_stack_index (void)
+{
+ return element_stack_index;
+}
+
+void
+xml_end_current_element (void)
+{
+ xml_insert_element (xml_current_element (), END);
+}
+
+static void
+xml_indent (void)
+{
+ if (xml_indentation_increment > 0)
+ {
+ int i;
+ if (output_paragraph[output_paragraph_offset-1] != '\n')
+ insert ('\n');
+ for (i = 0; i < element_stack_index * xml_indentation_increment; i++)
+ insert (' ');
+ }
+}
+
+void
+xml_start_para (void)
+{
+ if (xml_in_para || xml_in_footnote
+ || !xml_element_list[xml_current_element()].contains_para)
+ return;
+
+ while (output_paragraph_offset > 0
+ && output_paragraph[output_paragraph_offset-1] == '\n')
+ output_paragraph_offset--;
+ xml_indent ();
+
+ insert_string ("<para");
+ if (xml_no_indent)
+ insert_string (" role=\"continues\"");
+ insert_string (">");
+ xml_no_indent = 0;
+ xml_in_para = 1;
+}
+
+void
+xml_end_para (void)
+{
+ if (!xml_in_para || xml_in_footnote)
+ return;
+
+ while (output_paragraph_offset > 0
+ && cr_or_whitespace(output_paragraph[output_paragraph_offset-1]))
+ output_paragraph_offset--;
+
+ insert_string ("</para>");
+ if (xml_indentation_increment > 0)
+ insert ('\n');
+ xml_in_para = 0;
+}
+
+void
+xml_end_document (void)
+{
+ if (xml_node_open)
+ {
+ if (xml_node_level != -1)
+ {
+ xml_close_sections (xml_node_level);
+ xml_node_level = -1;
+ }
+ xml_insert_element (NODE, END);
+ }
+ else
+ xml_close_sections (xml_node_level);
+
+ xml_insert_element (TEXINFO, END);
+ if (xml_indentation_increment == 0)
+ insert ('\n');
+ insert_string ("<!-- Keep this comment at the end of the file\n\
+Local variables:\n\
+mode: sgml\n\
+sgml-indent-step:1\n\
+sgml-indent-data:nil\n\
+End:\n\
+-->\n");
+ if (element_stack_index != 0)
+ error ("Element stack index : %d\n", element_stack_index);
+}
+
+/* MUST be 0 or 1, not true or false values */
+static int start_element_inserted = 1;
+
+/* NOTE: We use `elt' rather than `element' in the argument list of
+ the next function, since otherwise the Solaris SUNWspro compiler
+ barfs because `element' is a typedef declared near the beginning of
+ this file. */
+void
+#if defined (VA_FPRINTF) && __STDC__
+xml_insert_element_with_attribute (int elt, int arg, char *format, ...)
+#else
+xml_insert_element_with_attribute (elt, arg, format, va_alist)
+ int elt;
+ int arg;
+ char *format;
+ va_dcl
+#endif
+{
+ /* Look at the replace_elements table to see if we have to change the element */
+ if (xml_sort_index)
+ return;
+ if (docbook && element_stack_index > 0)
+ {
+ replace_element *element_list = replace_elements;
+ while (element_list->element_to_replace >= 0)
+ {
+ if ( ( (arg == START) &&
+ (element_list->element_containing == xml_current_element ()) &&
+ (element_list->element_to_replace == elt) ) ||
+ ( (arg == END) &&
+ (element_list->element_containing == element_stack[element_stack_index-1-start_element_inserted]) &&
+ (element_list->element_to_replace == elt) ) )
+ {
+ elt = element_list->element_replacing;
+ break;
+ }
+ element_list ++;
+ }
+
+ /* Forget the element */
+ if (elt < 0)
+ {
+ if (arg == START)
+ start_element_inserted = 0;
+ else
+ /* Replace the default value, for the next time */
+ start_element_inserted = 1;
+ return;
+ }
+ }
+
+ if (!book_started)
+ return;
+
+ if (!xml_dont_touch_items_defs && arg == START)
+ {
+ if (xml_after_table_term && elt != TABLETERM && xml_table_level
+ && !xml_in_item[xml_table_level])
+ {
+ xml_after_table_term = 0;
+ xml_insert_element (ITEM, START);
+ xml_in_item[xml_table_level] = 1;
+ }
+ else if (xml_after_def_term && elt != DEFINITIONTERM)
+ {
+ xml_after_def_term = 0;
+ xml_insert_element (DEFINITIONITEM, START);
+ xml_in_def_item[xml_definition_level] = 1;
+ }
+ }
+
+ if (docbook && !only_macro_expansion && (in_menu || in_detailmenu))
+ return;
+
+ if (executing_string && arg == END)
+ switch (elt)
+ {
+ case TABLEITEM:
+ xml_in_tableitem[xml_table_level] = 0;
+ break;
+ case ITEM:
+ xml_in_item[xml_table_level] = 0;
+ break;
+ case DEFINITIONTERM:
+ xml_in_def_item[xml_definition_level] = 0;
+ break;
+ }
+
+ /* We are special-casing FIGURE element for docbook. It does appear in
+ the tag stack, but not in the output. This is to make element replacement
+ work beautifully. */
+ if (docbook && elt == FLOAT)
+ {
+ if (arg == START)
+ xml_push_current_element (elt);
+ else
+ xml_pop_current_element ();
+ return;
+ }
+
+ if (!xml_element_list[elt].name || !strlen (xml_element_list[elt].name))
+ {
+ /*printf ("Warning: Inserting empty element %d\n", elt);*/
+ return;
+ }
+
+ if (arg == START && !xml_in_para && !xml_no_para
+ && xml_element_list[elt].contained_in_para)
+ xml_start_para ();
+
+ if (arg == START && xml_in_para && !xml_element_list[elt].contained_in_para)
+ xml_end_para ();
+
+ if (arg == END && xml_in_para && !xml_element_list[elt].contained_in_para)
+ xml_end_para ();
+
+ /* Oddly, we want to do the same thing whether we starting or ending
+ the detailmenu -- close any existing menu elements before inserting
+ the detailmenu element. */
+ if (elt == DETAILMENU && xml_in_menu_entry)
+ {
+ if (xml_in_menu_entry_comment)
+ {
+ xml_insert_element (MENUCOMMENT, END);
+ xml_in_menu_entry_comment = 0;
+ }
+ xml_insert_element (MENUENTRY, END);
+ xml_in_menu_entry = 0;
+ }
+
+ if (docbook && xml_table_level && !in_table_title
+ && !xml_in_tableitem[xml_table_level] && !xml_in_item[xml_table_level]
+ && arg == START && elt != TABLEITEM && elt != TABLETERM
+ && !in_indexterm && xml_current_element() == TABLE)
+ {
+ in_table_title = 1;
+ xml_insert_element (TITLE, START);
+ }
+
+ if (arg == START && !xml_in_para && !xml_keep_space
+ && !xml_element_list[elt].contained_in_para)
+ xml_indent ();
+
+ if (arg == START)
+ xml_push_current_element (elt);
+ else
+ xml_pop_current_element ();
+
+ /* Eat one newline before </example> and the like. */
+ if (!docbook && arg == END
+ && (xml_element_list[elt].keep_space || elt == GROUP)
+ && output_paragraph_offset > 0
+ && output_paragraph[output_paragraph_offset-1] == '\n')
+ output_paragraph_offset--;
+
+ /* And eat whitespace before </entry> in @multitables. */
+ if (arg == END && elt == ENTRY)
+ while (output_paragraph_offset > 0 &&
+ cr_or_whitespace(output_paragraph[output_paragraph_offset-1]))
+ output_paragraph_offset--;
+
+ /* Indent elements that can contain <para>. */
+ if (arg == END && !xml_in_para && !xml_keep_space
+ && xml_element_list[elt].contains_para)
+ xml_indent ();
+
+ /* Here are the elements we want indented. These do not contain <para>
+ directly. */
+ if (arg == END && (elt == MENUENTRY || elt == ITEMIZE || elt == ENUMERATE
+ || elt == TABLEITEM || elt == TABLE
+ || elt == MULTITABLE || elt == TGROUP || elt == THEAD || elt == TBODY
+ || elt == ROW || elt == INFORMALFIGURE
+ || (!docbook && (elt == DEFINITION || elt == DEFINITIONTERM))))
+ xml_indent ();
+
+ insert ('<');
+ if (arg == END)
+ insert ('/');
+ insert_string (xml_element_list[elt].name);
+
+ /* printf ("%s ", xml_element_list[elt].name);*/
+
+ if (format)
+ {
+ char temp_string[2000]; /* xx no fixed limits */
+#ifdef VA_SPRINTF
+ va_list ap;
+#endif
+
+ VA_START (ap, format);
+#ifdef VA_SPRINTF
+ VA_SPRINTF (temp_string, format, ap);
+#else
+ sprintf (temp_string, format, a1, a2, a3, a4, a5, a6, a7, a8);
+#endif
+ insert (' ');
+ insert_string (temp_string);
+ va_end (ap);
+ }
+
+ if (arg == START && xml_node_id && elt != NODENAME)
+ {
+ insert_string (" id=\"");
+ insert_string (xml_node_id);
+ insert ('"');
+ free (xml_node_id);
+ xml_node_id = NULL;
+ }
+
+ if (xml_element_list[elt].keep_space)
+ {
+ if (arg == START)
+ {
+ if (!docbook)
+ insert_string (" xml:space=\"preserve\"");
+ xml_keep_space++;
+ }
+ else
+ xml_keep_space--;
+ }
+
+ insert ('>');
+
+ if (!xml_in_para && !xml_element_list[elt].contained_in_para
+ && xml_element_list[elt].contains_para && xml_indentation_increment > 0)
+ insert ('\n');
+
+ xml_just_after_element = 1;
+}
+
+/* See the NOTE before xml_insert_element_with_attribute, for why we
+ use `elt' rather than `element' here. */
+void
+xml_insert_element (int elt, int arg)
+{
+ xml_insert_element_with_attribute (elt, arg, NULL);
+}
+
+void
+xml_insert_entity (char *entity_name)
+{
+ int saved_escape_html = escape_html;
+
+ if (xml)
+ {
+ if (!book_started)
+ return;
+ if (docbook && !only_macro_expansion && (in_menu || in_detailmenu))
+ return;
+
+ if (!xml_in_para && !xml_no_para && !only_macro_expansion
+ && xml_element_list[xml_current_element ()].contains_para
+ && !in_fixed_width_font)
+ xml_start_para ();
+ }
+
+ escape_html = 0;
+ add_char ('&');
+ escape_html = saved_escape_html;
+ insert_string (entity_name);
+ add_char (';');
+}
+
+typedef struct _xml_section xml_section;
+struct _xml_section {
+ int level;
+ char *name;
+ xml_section *prev;
+};
+
+xml_section *last_section = NULL;
+
+void
+xml_begin_node (void)
+{
+ first_section_opened = 1;
+ if (xml_in_abstract)
+ {
+ xml_insert_element (ABSTRACT, END);
+ xml_in_abstract = 0;
+ }
+ if (xml_in_bookinfo)
+ {
+ xml_insert_element (BOOKINFO, END);
+ xml_in_bookinfo = 0;
+ }
+ if (xml_node_open && !docbook)
+ {
+ if (xml_node_level != -1)
+ {
+ xml_close_sections (xml_node_level);
+ xml_node_level = -1;
+ }
+ xml_insert_element (NODE, END);
+ }
+ xml_insert_element (NODE, START);
+ xml_node_open = 1;
+}
+
+void
+xml_close_sections (int level)
+{
+ if (!first_section_opened)
+ {
+ if (xml_in_abstract)
+ {
+ xml_insert_element (ABSTRACT, END);
+ xml_in_abstract = 0;
+ }
+ if (xml_in_bookinfo)
+ {
+ xml_insert_element (BOOKINFO, END);
+ xml_in_bookinfo = 0;
+ }
+ first_section_opened = 1;
+ }
+
+ while (last_section && last_section->level >= level)
+ {
+ xml_section *temp = last_section;
+ xml_insert_element (xml_element(last_section->name), END);
+ temp = last_section;
+ last_section = last_section->prev;
+ free (temp->name);
+ free (temp);
+ }
+}
+
+void
+xml_open_section (int level, char *name)
+{
+ xml_section *sect = (xml_section *) xmalloc (sizeof (xml_section));
+
+ sect->level = level;
+ sect->name = xmalloc (1 + strlen (name));
+ strcpy (sect->name, name);
+ sect->prev = last_section;
+ last_section = sect;
+
+ if (xml_node_open && xml_node_level == -1)
+ xml_node_level = level;
+}
+
+void
+xml_start_menu_entry (char *tem)
+{
+ char *string;
+ discard_until ("* ");
+
+ /* The line number was already incremented in reader_loop when we
+ saw the newline, and discard_until has now incremented again. */
+ line_number--;
+
+ if (xml_in_menu_entry)
+ {
+ if (xml_in_menu_entry_comment)
+ {
+ xml_insert_element (MENUCOMMENT, END);
+ xml_in_menu_entry_comment = 0;
+ }
+ xml_insert_element (MENUENTRY, END);
+ xml_in_menu_entry = 0;
+ }
+ xml_insert_element (MENUENTRY, START);
+ xml_in_menu_entry = 1;
+
+ xml_insert_element (MENUNODE, START);
+ string = expansion (tem, 0);
+ add_word (string);
+ xml_insert_element (MENUNODE, END);
+ free (string);
+
+ /* The menu item may use macros, so expand them now. */
+ xml_insert_element (MENUTITLE, START);
+ only_macro_expansion++;
+ get_until_in_line (1, ":", &string);
+ only_macro_expansion--;
+ execute_string ("%s", string); /* get escaping done */
+ xml_insert_element (MENUTITLE, END);
+ free (string);
+
+ if (looking_at ("::"))
+ discard_until (":");
+ else
+ { /* discard the node name */
+ get_until_in_line (0, ".", &string);
+ free (string);
+ }
+ input_text_offset++; /* discard the second colon or the period */
+ skip_whitespace_and_newlines();
+ xml_insert_element (MENUCOMMENT, START);
+ xml_in_menu_entry_comment ++;
+}
+
+void
+xml_end_menu (void)
+{
+ if (xml_in_menu_entry)
+ {
+ if (xml_in_menu_entry_comment)
+ {
+ xml_insert_element (MENUCOMMENT, END);
+ xml_in_menu_entry_comment --;
+ }
+ xml_insert_element (MENUENTRY, END);
+ xml_in_menu_entry--;
+ }
+ xml_insert_element (MENU, END);
+}
+
+static int xml_last_character;
+
+void
+xml_add_char (int character)
+{
+ if (!book_started)
+ return;
+ if (docbook && !only_macro_expansion && (in_menu || in_detailmenu))
+ return;
+
+ if (docbook && xml_table_level && !in_table_title
+ && !xml_in_item[xml_table_level] && !xml_in_tableitem[xml_table_level]
+ && !cr_or_whitespace (character) && !in_indexterm)
+ {
+ in_table_title = 1;
+ xml_insert_element (TITLE, START);
+ }
+
+ if (!first_section_opened && !xml_in_abstract && !xml_in_book_title
+ && !xml_no_para && character != '\r' && character != '\n'
+ && character != ' ' && !is_in_insertion_of_type (copying))
+ {
+ if (!xml_in_bookinfo)
+ {
+ xml_insert_element (BOOKINFO, START);
+ xml_in_bookinfo = 1;
+ }
+ xml_insert_element (ABSTRACT, START);
+ xml_in_abstract = 1;
+ }
+
+ if (!xml_sort_index && !xml_in_xref_token && !xml_dont_touch_items_defs)
+ {
+ if (xml_after_table_term && xml_table_level
+ && !xml_in_item[xml_table_level])
+ {
+ xml_after_table_term = 0;
+ xml_insert_element (ITEM, START);
+ xml_in_item[xml_table_level] = 1;
+ }
+ else if (xml_after_def_term)
+ {
+ xml_after_def_term = 0;
+ xml_insert_element (DEFINITIONITEM, START);
+ xml_in_def_item[xml_definition_level] = 1;
+ }
+ }
+
+ if (xml_just_after_element && !xml_in_para && !inhibit_paragraph_indentation)
+ {
+ if (character == '\r' || character == '\n' || character == '\t' || character == ' ')
+ return;
+ xml_just_after_element = 0;
+ }
+
+ if (element_stack_index > 0
+ && xml_element_list[xml_current_element()].contains_para
+ && !xml_in_para && !only_macro_expansion && !xml_no_para
+ && !cr_or_whitespace (character) && !in_fixed_width_font)
+ xml_start_para ();
+
+ if (xml_in_para && character == '\n' && xml_last_character == '\n'
+ && !only_macro_expansion && !xml_no_para
+ && xml_element_list[xml_current_element()].contains_para )
+ {
+ xml_end_para ();
+ xml_just_after_element = 1;
+ return;
+ }
+
+ if (xml_in_menu_entry_comment && character == '\n' && xml_last_character == '\n')
+ {
+ xml_insert_element (MENUCOMMENT, END);
+ xml_in_menu_entry_comment = 0;
+ xml_insert_element (MENUENTRY, END);
+ xml_in_menu_entry = 0;
+ }
+
+ if (xml_in_menu_entry_comment && whitespace(character)
+ && cr_or_whitespace(xml_last_character))
+ return;
+
+ if (character == '\n' && !xml_in_para && !inhibit_paragraph_indentation)
+ return;
+
+ xml_last_character = character;
+
+ if (character == '&' && escape_html)
+ insert_string ("&amp;");
+ else if (character == '<' && escape_html)
+ insert_string ("&lt;");
+ else if (character == '>' && escape_html)
+ insert_string ("&gt;");
+ else if (character == '\n' && !xml_keep_space)
+ {
+ if (!xml_in_para && xml_just_after_element && !multitable_active)
+ return;
+ else
+ insert (docbook ? '\n' : ' ');
+ }
+ else
+ insert (character);
+
+ return;
+}
+
+void
+xml_insert_footnote (char *note)
+{
+ if (!xml_in_para)
+ xml_start_para ();
+
+ xml_in_footnote = 1;
+ xml_insert_element (FOOTNOTE, START);
+ insert_string ("<para>");
+ execute_string ("%s", note);
+ insert_string ("</para>");
+ xml_insert_element (FOOTNOTE, END);
+ xml_in_footnote = 0;
+}
+
+/* We need to keep the quotation stack ourself, because insertion_stack
+ loses item_function when we are closing the block, so we don't know
+ what to close then. */
+typedef struct quotation_elt
+{
+ struct quotation_elt *next;
+ char *type;
+} QUOTATION_ELT;
+
+static QUOTATION_ELT *quotation_stack = NULL;
+
+void
+xml_insert_quotation (char *type, int arg)
+{
+ int quotation_started = 0;
+
+ if (arg == START)
+ {
+ QUOTATION_ELT *new = xmalloc (sizeof (QUOTATION_ELT));
+ new->type = xstrdup (type);
+ new->next = quotation_stack;
+ quotation_stack = new;
+ }
+ else
+ type = quotation_stack->type;
+
+ /* Make use of special quotation styles of Docbook if we can. */
+ if (docbook && strlen (type))
+ {
+ /* Let's assume it started. */
+ quotation_started = 1;
+
+ if (mbscasecmp (type, "tip") == 0)
+ xml_insert_element (TIP, arg);
+ else if (mbscasecmp (type, "note") == 0)
+ xml_insert_element (NOTE, arg);
+ else if (mbscasecmp (type, "important") == 0)
+ xml_insert_element (IMPORTANT, arg);
+ else if (mbscasecmp (type, "warning") == 0)
+ xml_insert_element (WARNING, arg);
+ else if (mbscasecmp (type, "caution") == 0)
+ xml_insert_element (CAUTION, arg);
+ else
+ /* Didn't find a known quotation type :\ */
+ quotation_started = 0;
+ }
+
+ if (!quotation_started)
+ {
+ xml_insert_element (QUOTATION, arg);
+ if (strlen(type) && arg == START)
+ execute_string ("@b{%s:} ", type);
+ }
+
+ if (arg == END)
+ {
+ QUOTATION_ELT *temp = quotation_stack;
+ if (temp == NULL)
+ return;
+ quotation_stack = quotation_stack->next;
+ free(temp->type);
+ free(temp);
+ }
+}
+
+/* Starting generic docbook floats. Just starts elt with correct label
+ and id attributes, and inserts title. */
+void
+xml_begin_docbook_float (int elt)
+{
+ if (current_float_used_title ()) /* in a nested float */
+ {
+ xml_insert_element (elt, START); /* just insert the tag */
+ return;
+ }
+
+
+ /* OK, need the title, tag, etc. */
+ if (elt == CARTOUCHE) /* no labels on <sidebar> */
+ {
+ if (strlen (current_float_id ()) == 0)
+ xml_insert_element (elt, START);
+ else
+ xml_insert_element_with_attribute (elt, START,
+ "id=\"%s\"", xml_id (current_float_id ()));
+ }
+ else if (strlen (current_float_id ()) == 0)
+ xml_insert_element_with_attribute (elt, START, "label=\"\"");
+ else
+ xml_insert_element_with_attribute (elt, START,
+ "id=\"%s\" label=\"%s\"", xml_id (current_float_id ()),
+ current_float_number ());
+
+ xml_insert_element (TITLE, START);
+ execute_string ("%s", current_float_title ());
+ xml_insert_element (TITLE, END);
+
+ current_float_set_title_used (); /* mark this title, tag, etc used */
+}
+
+/*
+ * Lists and Tables
+ */
+void
+xml_begin_table (int type, char *item_function)
+{
+ switch (type)
+ {
+ case ftable:
+ case vtable:
+ case table:
+ /*if (docbook)*/ /* 05-08 */
+ {
+ xml_insert_element (TABLE, START);
+ xml_table_level ++;
+ xml_in_tableitem[xml_table_level] = 0;
+ xml_in_item[xml_table_level] = 0;
+ xml_after_table_term = 0;
+ }
+ break;
+ case itemize:
+ if (!docbook || item_function==default_item_function)
+ xml_insert_element (ITEMIZE, START);
+ else
+ xml_insert_element_with_attribute (ITEMIZE, START,
+ "mark=\"%s\"",
+ (*item_function == COMMAND_PREFIX) ?
+ &item_function[1] : item_function);
+ xml_table_level ++;
+ xml_in_item[xml_table_level] = 0;
+ if (!docbook)
+ {
+ xml_insert_element (ITEMFUNCTION, START);
+ if (*item_function == COMMAND_PREFIX
+ && item_function[strlen (item_function) - 1] != '}'
+ && command_needs_braces (item_function + 1))
+ execute_string ("%s{}", item_function);
+ else
+ execute_string ("%s", item_function);
+ xml_insert_element (ITEMFUNCTION, END);
+ }
+ break;
+ }
+}
+
+void
+xml_end_table (int type)
+{
+ switch (type)
+ {
+ case ftable:
+ case vtable:
+ case table:
+ if (xml_in_item[xml_table_level])
+ {
+ xml_insert_element (ITEM, END);
+ xml_in_item[xml_table_level] = 0;
+ }
+ if (xml_in_tableitem[xml_table_level])
+ {
+ xml_insert_element (TABLEITEM, END);
+ xml_in_tableitem[xml_table_level] = 0;
+ }
+ xml_insert_element (TABLE, END);
+ xml_after_table_term = 0;
+ xml_table_level --;
+
+ break;
+ case itemize:
+ if (xml_in_item[xml_table_level])
+ {
+ xml_insert_element (ITEM, END);
+ xml_in_item[xml_table_level] = 0;
+ }
+ /* gnat-style manual contains an itemized list without items! */
+ if (in_table_title)
+ {
+ xml_insert_element (TITLE, END);
+ in_table_title = 0;
+ }
+ xml_insert_element (ITEMIZE, END);
+ xml_table_level --;
+ break;
+ }
+}
+
+void
+xml_begin_item (void)
+{
+ if (xml_in_item[xml_table_level])
+ xml_insert_element (ITEM, END);
+
+ xml_insert_element (ITEM, START);
+ xml_in_item[xml_table_level] = 1;
+}
+
+void
+xml_begin_table_item (void)
+{
+ if (!xml_after_table_term)
+ {
+ if (xml_in_item[xml_table_level])
+ xml_insert_element (ITEM, END);
+ if (xml_in_tableitem[xml_table_level])
+ xml_insert_element (TABLEITEM, END);
+
+ if (in_table_title)
+ {
+ in_table_title = 0;
+ xml_insert_element (TITLE, END);
+ }
+ xml_insert_element (TABLEITEM, START);
+ }
+ xml_insert_element (TABLETERM, START);
+ xml_in_tableitem[xml_table_level] = 1;
+ xml_in_item[xml_table_level] = 0;
+ xml_after_table_term = 0;
+}
+
+void
+xml_continue_table_item (void)
+{
+ xml_insert_element (TABLETERM, END);
+ xml_after_table_term = 1;
+ xml_in_item[xml_table_level] = 0;
+}
+
+void
+xml_begin_enumerate (char *enum_arg)
+{
+ if (!docbook)
+ xml_insert_element_with_attribute (ENUMERATE, START, "first=\"%s\"", enum_arg);
+ else
+ {
+ if (isdigit (*enum_arg))
+ {
+ int enum_val = atoi (enum_arg);
+
+ /* Have to check the value, not just the first digit. */
+ if (enum_val == 0)
+ xml_insert_element_with_attribute (ENUMERATE, START,
+ "numeration=\"arabic\" role=\"0\"", NULL);
+ else if (enum_val == 1)
+ xml_insert_element_with_attribute (ENUMERATE, START,
+ "numeration=\"arabic\"", NULL);
+ else
+ xml_insert_element_with_attribute (ENUMERATE, START,
+ "continuation=\"continues\" numeration=\"arabic\"", NULL);
+ }
+ else if (isupper (*enum_arg))
+ {
+ if (enum_arg[0] == 'A')
+ xml_insert_element_with_attribute (ENUMERATE, START,
+ "numeration=\"upperalpha\"", NULL);
+ else
+ xml_insert_element_with_attribute (ENUMERATE, START,
+ "continuation=\"continues\" numeration=\"upperalpha\"", NULL);
+ }
+ else
+ {
+ if (enum_arg[0] == 'a')
+ xml_insert_element_with_attribute (ENUMERATE, START,
+ "numeration=\"loweralpha\"", NULL);
+ else
+ xml_insert_element_with_attribute (ENUMERATE, START,
+ "continuation=\"continues\" numeration=\"loweralpha\"", NULL);
+ }
+ }
+ xml_table_level ++;
+ xml_in_item[xml_table_level] = 0;
+}
+
+void
+xml_end_enumerate (void)
+{
+ if (xml_in_item[xml_table_level])
+ {
+ xml_insert_element (ITEM, END);
+ xml_in_item[xml_table_level] = 0;
+ }
+ xml_insert_element (ENUMERATE, END);
+ xml_table_level --;
+}
+
+static void
+xml_insert_text_file (char *name_arg)
+{
+ char *fullname = xmalloc (strlen (name_arg) + 4 + 1);
+ FILE *image_file;
+ strcpy (fullname, name_arg);
+ strcat (fullname, ".txt");
+ image_file = fopen (fullname, "r");
+ if (image_file)
+ {
+ int ch;
+ int save_inhibit_indentation = inhibit_paragraph_indentation;
+ int save_filling_enabled = filling_enabled;
+
+ xml_insert_element (TEXTOBJECT, START);
+ xml_insert_element (DISPLAY, START);
+
+ inhibit_paragraph_indentation = 1;
+ filling_enabled = 0;
+ last_char_was_newline = 0;
+
+ /* Maybe we need to remove the final newline if the image
+ file is only one line to allow in-line images. On the
+ other hand, they could just make the file without a
+ final newline. */
+ while ((ch = getc (image_file)) != EOF)
+ add_char (ch);
+
+ inhibit_paragraph_indentation = save_inhibit_indentation;
+ filling_enabled = save_filling_enabled;
+
+ xml_insert_element (DISPLAY, END);
+ xml_insert_element (TEXTOBJECT, END);
+
+ if (fclose (image_file) != 0)
+ perror (fullname);
+ }
+ else
+ warning (_("@image file `%s' unreadable: %s"), fullname,
+ strerror (errno));
+
+ free (fullname);
+}
+
+/* If NAME.EXT is accessible or FORCE is nonzero, insert a docbook
+ imagedata element for FMT. Return 1 if inserted something, 0 else. */
+
+static int
+try_docbook_image (const char *name, const char *ext, const char *fmt,
+ int force)
+{
+ int used = 0;
+ char *fullname = xmalloc (strlen (name) + 1 + strlen (ext) + 1);
+ sprintf (fullname, "%s.%s", name, ext);
+
+ if (force || access (fullname, R_OK) == 0)
+ {
+ xml_insert_element (IMAGEOBJECT, START);
+ xml_insert_element_with_attribute (IMAGEDATA, START,
+ "fileref=\"%s\" format=\"%s\"", fullname, fmt);
+ xml_insert_element (IMAGEDATA, END);
+ xml_insert_element (IMAGEOBJECT, END);
+ used = 1;
+ }
+
+ free (fullname);
+ return used;
+}
+
+
+void
+xml_insert_docbook_image (char *name_arg)
+{
+ int found = 0;
+ int elt = xml_in_para ? INLINEIMAGE : MEDIAOBJECT;
+
+ if (is_in_insertion_of_type (floatenv))
+ xml_begin_docbook_float (INFORMALFIGURE);
+ else if (!xml_in_para)
+ xml_insert_element (INFORMALFIGURE, START);
+
+ xml_no_para++;
+
+ xml_insert_element (elt, START);
+
+ /* A selected few from http://docbook.org/tdg/en/html/imagedata.html. */
+ if (try_docbook_image (name_arg, "eps", "EPS", 0))
+ found++;
+ if (try_docbook_image (name_arg, "gif", "GIF", 0))
+ found++;
+ if (try_docbook_image (name_arg, "jpg", "JPG", 0))
+ found++;
+ if (try_docbook_image (name_arg, "jpeg", "JPEG", 0))
+ found++;
+ if (try_docbook_image (name_arg, "pdf", "PDF", 0))
+ found++;
+ if (try_docbook_image (name_arg, "png", "PNG", 0))
+ found++;
+ if (try_docbook_image (name_arg, "svg", "SVG", 0))
+ found++;
+
+ /* If no luck so far, just assume we'll eventually have a jpg. */
+ if (!found)
+ try_docbook_image (name_arg, "jpg", "JPG", 1);
+
+ xml_insert_text_file (name_arg);
+ xml_insert_element (elt, END);
+
+ xml_no_para--;
+
+ if (elt == MEDIAOBJECT)
+ xml_insert_element (INFORMALFIGURE, END);
+}
+
+void
+xml_asterisk (void)
+{
+}
+
+
+/*
+ * INDEX
+ */
+/* Used to separate primary and secondary entries in an index -- we need
+ to have real multilivel indexing support, not just string analysis. */
+#define INDEX_SEP "@this string will never appear@" /* was , */
+
+typedef struct
+{
+ char *from;
+ char *to;
+} XML_SYNONYM;
+
+static XML_SYNONYM **xml_synonyms = NULL;
+static int xml_synonyms_count = 0;
+
+void
+xml_insert_indexterm (char *indexterm, char *index)
+{
+ /* @index commands can appear between @item and @itemx, @deffn and @deffnx. */
+ if (!docbook)
+ {
+ /* Check to see if we need to do index redirection per @synindex. */
+ int i;
+ for (i = 0; i < xml_synonyms_count; i++)
+ {
+ if (STREQ (xml_synonyms[i]->from, index))
+ index = xstrdup (xml_synonyms[i]->to);
+ }
+
+ xml_dont_touch_items_defs++;
+ xml_insert_element_with_attribute (INDEXTERM, START, "index=\"%s\"", index);
+ in_indexterm = 1;
+ execute_string ("%s", indexterm);
+ xml_insert_element (INDEXTERM, END);
+ in_indexterm = 0;
+ xml_dont_touch_items_defs--;
+ }
+ else
+ {
+ char *primary = NULL, *secondary = NULL;
+ if (strstr (indexterm+1, INDEX_SEP))
+ {
+ primary = xmalloc (strlen (indexterm) + 1);
+ strcpy (primary, indexterm);
+ secondary = strstr (primary+1, INDEX_SEP);
+ *secondary = '\0';
+ secondary += strlen (INDEX_SEP);
+ }
+ xml_insert_element_with_attribute (INDEXTERM, START, "role=\"%s\"", index);
+ in_indexterm = 1;
+ xml_insert_element (PRIMARY, START);
+ if (primary)
+ execute_string ("%s", primary);
+ else
+ execute_string ("%s", indexterm);
+ xml_insert_element (PRIMARY, END);
+ if (primary)
+ {
+ xml_insert_element (SECONDARY, START);
+ execute_string ("%s", secondary);
+ xml_insert_element (SECONDARY, END);
+ }
+ xml_insert_element (INDEXTERM, END);
+ in_indexterm = 0;
+ }
+}
+
+
+int xml_last_section_output_position = 0;
+static char last_division_letter = ' ';
+static char index_primary[2000]; /** xx no fixed limit */
+static int indexdivempty = 0;
+
+static void
+xml_close_indexentry (void)
+{
+ if (!in_indexentry)
+ return;
+ if (in_secondary)
+ xml_insert_element (SECONDARYIE, END);
+ xml_insert_element (INDEXENTRY, END);
+ in_secondary = 0;
+ in_indexentry = 0;
+}
+
+void
+xml_begin_index (void)
+{
+ if (handling_delayed_writes)
+ {
+ /* We put <INDEX> */
+ xml_insert_element (PRINTINDEX, START);
+ }
+}
+
+void
+xml_end_index (void)
+{
+ xml_insert_element (PRINTINDEX, END);
+}
+
+static void
+xml_index_divide (char *entry)
+{
+ char c;
+ if (strlen (entry) > (strlen (xml_element_list[CODE].name) + 2) &&
+ strncmp (entry+1, xml_element_list[CODE].name, strlen (xml_element_list[CODE].name)) == 0)
+ c = entry[strlen (xml_element_list[CODE].name)+2];
+ else
+ c = entry[0];
+ if (tolower (c) != last_division_letter && isalpha (c))
+ {
+ last_division_letter = tolower (c);
+ xml_close_indexentry ();
+ if (!indexdivempty)
+ {
+ xml_insert_element (INDEXDIV, END);
+ xml_insert_element (INDEXDIV, START);
+ }
+ xml_insert_element (TITLE, START);
+ insert (toupper (c));
+ xml_insert_element (TITLE, END);
+ }
+}
+
+void
+xml_synindex (char *from, char *to)
+{
+ int i, slot;
+
+ slot = -1;
+ for (i = 0; i < xml_synonyms_count; i++)
+ if (!xml_synonyms[i])
+ {
+ slot = i;
+ break;
+ }
+
+ if (slot < 0)
+ {
+ slot = xml_synonyms_count;
+ xml_synonyms_count++;
+
+ xml_synonyms = (XML_SYNONYM **) xrealloc (xml_synonyms,
+ (xml_synonyms_count + 1) * sizeof (XML_SYNONYM *));
+ }
+
+ xml_synonyms[slot] = xmalloc (sizeof (XML_SYNONYM));
+ xml_synonyms[slot]->from = xstrdup (from);
+ xml_synonyms[slot]->to = xstrdup (to);
+}
+
+/*
+ * MULTITABLE
+ */
+
+static int multitable_columns_count;
+static int *multitable_column_widths;
+
+void
+xml_begin_multitable (int ncolumns, int *column_widths)
+{
+ int i;
+ if (docbook)
+ {
+ if (is_in_insertion_of_type (floatenv))
+ xml_begin_docbook_float (MULTITABLE);
+ else
+ xml_insert_element (MULTITABLE, START);
+
+ multitable_columns_count = ncolumns;
+ multitable_column_widths = xmalloc (sizeof (int) * ncolumns);
+ memcpy (multitable_column_widths, column_widths,
+ sizeof (int) * ncolumns);
+
+ xml_no_para = 1;
+ }
+ else
+ {
+ xml_insert_element (MULTITABLE, START);
+ for (i = 0; i < ncolumns; i++)
+ {
+ xml_insert_element (COLSPEC, START);
+ add_word_args ("%d", column_widths[i]);
+ xml_insert_element (COLSPEC, END);
+ }
+ xml_no_para = 1;
+ }
+}
+
+static void
+xml_begin_multitable_group (void)
+{
+ int i;
+
+ xml_insert_element_with_attribute (TGROUP, START, "cols=\"%d\"",
+ multitable_columns_count);
+
+ for (i = 0; i < multitable_columns_count; i++)
+ {
+ xml_insert_element_with_attribute (COLSPEC, START,
+ "colwidth=\"%d*\"", multitable_column_widths[i]);
+ xml_insert_element (COLSPEC, END);
+ }
+}
+
+void
+xml_end_multitable_row (int first_row)
+{
+ if (!first_row)
+ {
+ xml_insert_element (ENTRY, END);
+ xml_insert_element (ROW, END);
+ }
+
+ if (headitem_flag)
+ {
+ if (!first_row)
+ {
+ if (after_headitem)
+ xml_insert_element (THEAD, END);
+ else
+ xml_insert_element (TBODY, END);
+ xml_insert_element (TGROUP, END);
+ }
+
+ xml_begin_multitable_group ();
+ xml_insert_element (THEAD, START);
+ }
+ else if (first_row)
+ {
+ xml_begin_multitable_group ();
+ xml_insert_element (TBODY, START);
+ }
+ else if (after_headitem)
+ {
+ xml_insert_element (THEAD, END);
+ xml_insert_element (TBODY, START);
+ }
+ else if (first_row)
+ xml_insert_element (TBODY, START);
+
+ xml_insert_element (ROW, START);
+ xml_insert_element (ENTRY, START);
+}
+
+void
+xml_end_multitable_column (void)
+{
+ xml_insert_element (ENTRY, END);
+ xml_insert_element (ENTRY, START);
+}
+
+void
+xml_end_multitable (void)
+{
+ xml_insert_element (ENTRY, END);
+ xml_insert_element (ROW, END);
+
+ if (after_headitem)
+ {
+ if (docbook)
+ warning (_("@headitem as the last item of @multitable produces invalid Docbook documents"));
+ xml_insert_element (THEAD, END);
+ }
+ else
+ xml_insert_element (TBODY, END);
+
+ if (docbook)
+ xml_insert_element (TGROUP, END);
+
+ xml_insert_element (MULTITABLE, END);
+ xml_no_para = 0;
+}
+
+/*
+ * Parameters in @def definitions
+ */
+
+#define DEFUN_SELF_DELIMITING(c) \
+ ((c) == '(' || (c) == ')' || (c) == '[' || (c) == ']')
+
+void
+xml_process_defun_args (char **defun_args, int auto_var_p)
+{
+ int pending_space = 0;
+ int just_after_paramtype = 0;
+
+ for (;;)
+ {
+ char *defun_arg = *defun_args++;
+
+ if (defun_arg == NULL)
+ break;
+
+ if (defun_arg[0] == ' ')
+ {
+ pending_space = 1;
+ continue;
+ }
+
+ if (pending_space)
+ {
+ add_char (' ');
+ pending_space = 0;
+ }
+
+ if (DEFUN_SELF_DELIMITING (defun_arg[0]))
+ {
+ xml_insert_element (DEFDELIMITER, START);
+ add_char (defun_arg[0]);
+ xml_insert_element (DEFDELIMITER, END);
+ just_after_paramtype = 0;
+ }
+ else if (defun_arg[0] == '&')
+ {
+ xml_insert_element (DEFPARAM, START);
+ add_word (defun_arg);
+ xml_insert_element (DEFPARAM, END);
+ just_after_paramtype = 0;
+ }
+ else if (defun_arg[0] == COMMAND_PREFIX || just_after_paramtype)
+ {
+ xml_insert_element (DEFPARAM, START);
+ execute_string ("%s", defun_arg);
+ xml_insert_element (DEFPARAM, END);
+ just_after_paramtype = 0;
+ }
+ else if (defun_arg[0] == ',' || defun_arg[0] == ';')
+ {
+ xml_insert_element (DEFDELIMITER, START);
+ add_word (defun_arg);
+ xml_insert_element (DEFDELIMITER, END);
+ just_after_paramtype = 0;
+ }
+ else if (auto_var_p)
+ {
+ xml_insert_element (DEFPARAM, START);
+ add_word (defun_arg);
+ xml_insert_element (DEFPARAM, END);
+ just_after_paramtype = 0;
+ }
+ else
+ {
+ xml_insert_element (DEFPARAMTYPE, START);
+ add_word (defun_arg);
+ xml_insert_element (DEFPARAMTYPE, END);
+ just_after_paramtype = 1;
+ }
+ }
+}
+
+void
+xml_begin_definition (void)
+{
+ xml_insert_element (DEFINITION, START);
+ xml_definition_level ++;
+ xml_in_def_item[xml_definition_level] = 0;
+}
+
+void
+xml_end_definition (void)
+{
+ if (xml_in_def_item[xml_definition_level])
+ {
+ xml_insert_element (DEFINITIONITEM, END);
+ xml_in_def_item[xml_definition_level] = 0;
+ }
+ xml_after_def_term = 0;
+ xml_insert_element (DEFINITION, END);
+ xml_definition_level --;
+}
+
+void
+xml_begin_def_term (int base_type, const char *category,
+ char *defined_name, char *type_name, char *type_name2)
+{
+ xml_after_def_term = 0;
+ if (docbook)
+ xml_insert_element_with_attribute (DEFINITIONTERM, START,
+ "role=\"%s\"", category);
+ else
+ xml_insert_element (DEFINITIONTERM, START);
+
+ /* Index entry */
+ switch (base_type)
+ {
+ case deffn:
+ case deftypefn:
+ execute_string ("@findex %s\n", defined_name);
+ break;
+ case defvr:
+ case deftypevr:
+ case defcv:
+ execute_string ("@vindex %s\n", defined_name);
+ break;
+ case deftypecv:
+ case deftypeivar:
+ execute_string ("@vindex %s %s %s\n", defined_name, _("of"), type_name);
+ break;
+ case deftypemethod:
+ case defop:
+ case deftypeop:
+ execute_string ("@findex %s %s %s\n", defined_name, _("on"), type_name);
+ break;
+ case deftp:
+ execute_string ("@tindex %s\n", defined_name);
+ break;
+ }
+
+ /* Start with category. */
+ if (! docbook)
+ {
+ xml_insert_element (DEFCATEGORY, START);
+ execute_string (docbook ? "[%s]" : "%s", category);
+ xml_insert_element (DEFCATEGORY, END);
+ add_char(' ');
+ }
+
+ /* Output type name first for typed definitions. */
+ switch (base_type)
+ {
+ case deffn:
+ case defvr:
+ case deftp:
+ break;
+
+ case deftypefn:
+ case deftypevr:
+ xml_insert_element (DEFTYPE, START);
+ execute_string ("%s", type_name);
+ xml_insert_element (DEFTYPE, END);
+ add_char (' ');
+ break;
+
+ case deftypecv:
+ case deftypeivar:
+ case deftypemethod:
+ case deftypeop:
+ xml_insert_element (DEFTYPE, START);
+ execute_string ("%s", type_name2);
+ xml_insert_element (DEFTYPE, END);
+ add_char (' ');
+ break;
+
+ default:
+ xml_insert_element (DEFCLASS, START);
+ execute_string ("%s", type_name);
+ xml_insert_element (DEFCLASS, END);
+ add_char (' ');
+ break;
+ }
+
+ /* Categorize rest of the definitions. */
+ switch (base_type)
+ {
+ case deffn:
+ case deftypefn:
+ xml_insert_element (DEFFUNCTION, START);
+ execute_string ("%s", defined_name);
+ xml_insert_element (DEFFUNCTION, END);
+ break;
+
+ case defvr:
+ case deftypevr:
+ xml_insert_element (DEFVARIABLE, START);
+ execute_string ("%s", defined_name);
+ xml_insert_element (DEFVARIABLE, END);
+ break;
+
+ case deftp:
+ xml_insert_element (DEFDATATYPE, START);
+ execute_string ("%s", defined_name);
+ xml_insert_element (DEFDATATYPE, END);
+ break;
+
+ case defcv:
+ case deftypecv:
+ case deftypeivar:
+ xml_insert_element (DEFCLASSVAR, START);
+ execute_string ("%s", defined_name);
+ xml_insert_element (DEFCLASSVAR, END);
+ break;
+
+ case defop:
+ case deftypeop:
+ case deftypemethod:
+ /* Operation / Method */
+ xml_insert_element (DEFOPERATION, START);
+ execute_string ("%s", defined_name);
+ xml_insert_element (DEFOPERATION, END);
+ break;
+ }
+}
+
+void
+xml_end_def_term (void)
+{
+ xml_insert_element (DEFINITIONTERM, END);
+ xml_after_def_term = 1;
+}
diff --git a/makeinfo/xml.h b/makeinfo/xml.h
new file mode 100644
index 0000000..5d18ff5
--- /dev/null
+++ b/makeinfo/xml.h
@@ -0,0 +1,159 @@
+/* xml.h -- xml (including Docbook) output declarations.
+ $Id: xml.h,v 1.32 2008/01/31 18:33:28 karl Exp $
+
+ Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007, 2008
+ 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/>.
+
+ Originally written by Philippe Martin <feloy@free.fr>. */
+
+#ifndef XML_H
+#define XML_H
+
+/* Currently sorting the index. */
+extern int xml_sort_index;
+
+/* Options. */
+
+extern int xml_no_indent;
+
+extern int xml_node_open;
+extern int xml_no_para;
+extern char *xml_node_id;
+extern int xml_last_section_output_position;
+
+extern int xml_in_xref_token;
+extern int xml_in_bookinfo;
+extern int xml_in_book_title;
+extern int xml_in_abstract;
+
+/* Non-zero if we are handling an element that can appear between
+ @item and @itemx, @deffn and @deffnx. */
+extern int xml_dont_touch_items_defs;
+
+/* Non-zero if whitespace in the source document should be kept as-is. */
+extern int xml_keep_space;
+
+enum xml_element
+{
+ TEXINFO=0, SETFILENAME, TITLEFONT, SETTITLE, DOCUMENTDESCRIPTION,
+ /* Node */
+ NODE, NODENEXT, NODEPREV, NODEUP,
+ /* Structuring */
+ CHAPTER, SECTION, SUBSECTION, SUBSUBSECTION,
+ TOP, UNNUMBERED, UNNUMBEREDSEC, UNNUMBEREDSUBSEC,
+ UNNUMBEREDSUBSUBSEC,
+ APPENDIX, APPENDIXSEC, APPENDIXSUBSEC, APPENDIXSUBSUBSEC,
+ MAJORHEADING, CHAPHEADING, HEADING, SUBHEADING, SUBSUBHEADING,
+ /* Titlepage */
+ TITLEPAGE, AUTHOR, BOOKTITLE, BOOKSUBTITLE,
+ /* Menu */
+ MENU, DETAILMENU, MENUENTRY, MENUTITLE, MENUCOMMENT, MENUNODE,
+ NODENAME,
+ /* -- */
+ ACRONYM, ACRONYMWORD, ACRONYMDESC,
+ ABBREV, ABBREVWORD, ABBREVDESC,
+ TT, CODE, COMMAND_TAG, ENV, FILE_TAG, OPTION, SAMP, KBD, URL, KEY,
+ VAR, SC, DFN, EMPH, STRONG, CITE, NOTFIXEDWIDTH, I, B, R, SLANTED, SANSSERIF,
+ EXDENT,
+ TITLE,
+ IFINFO,
+ SP, CENTER,
+ DIRCATEGORY,
+ QUOTATION, EXAMPLE, SMALLEXAMPLE, LISP, SMALLLISP, CARTOUCHE,
+ COPYING, FORMAT, SMALLFORMAT, DISPLAY, SMALLDISPLAY, VERBATIM,
+ FOOTNOTE, LINEANNOTATION,
+ TIP, NOTE, IMPORTANT, WARNING, CAUTION,
+ ITEMIZE, ITEMFUNCTION, ITEM, ENUMERATE, TABLE, TABLEITEM, TABLETERM,
+ INDEXTERM,
+ MATH, DIMENSION,
+ CLICKSEQUENCE, CLICK,
+ XREF, XREFNODENAME, XREFINFONAME, XREFPRINTEDDESC, XREFINFOFILE,
+ XREFPRINTEDNAME,
+ INFOREF, INFOREFNODENAME, INFOREFREFNAME, INFOREFINFONAME,
+ UREF, UREFURL, UREFDESC, UREFREPLACEMENT,
+ EMAIL, EMAILADDRESS, EMAILNAME,
+ GROUP, FLOAT, FLOATTYPE, FLOATPOS, CAPTION, SHORTCAPTION,
+ FLOATTABLE, FLOATFIGURE, FLOATEXAMPLE, FLOATCARTOUCHE,
+ PRINTINDEX, LISTOFFLOATS,
+ ANCHOR,
+ IMAGE, INLINEIMAGE, IMAGEALTTEXT,
+ PRIMARY, SECONDARY, INFORMALFIGURE, MEDIAOBJECT, IMAGEOBJECT,
+ IMAGEDATA, TEXTOBJECT,
+ INDEXENTRY, PRIMARYIE, SECONDARYIE, INDEXDIV,
+ MULTITABLE, TGROUP, COLSPEC, THEAD, TBODY, ENTRY, ROW,
+ BOOKINFO, ABSTRACT, REPLACEABLE, ENVAR, COMMENT, FUNCTION, LEGALNOTICE,
+ CONTENTS, SHORTCONTENTS, DOCUMENTLANGUAGE,
+ SETVALUE, CLEARVALUE,
+ DEFINITION, DEFINITIONTERM, DEFINITIONITEM,
+ DEFCATEGORY, DEFFUNCTION, DEFVARIABLE, DEFPARAM, DEFDELIMITER, DEFTYPE,
+ DEFPARAMTYPE, DEFDATATYPE, DEFCLASS, DEFCLASSVAR, DEFOPERATION,
+ FRENCHSPACING,
+ PARA
+};
+
+extern void xml_add_char (int character),
+ xml_asterisk (void),
+ xml_insert_element (int elt, int arg),
+ xml_insert_entity (char *entity_name),
+ xml_insert_footnote (char *note),
+ xml_insert_quotation (char *type, int arg),
+ xml_insert_indexterm (char *indexterm, char *index),
+ xml_insert_docbook_image (char *name_arg),
+ xml_synindex (char *from, char *to),
+ xml_start_para (void),
+ xml_end_para (void),
+ xml_begin_document (const char *output_basename),
+ xml_end_document (void),
+ xml_start_menu_entry (char *tem),
+ xml_end_menu (void),
+ xml_end_current_element (void),
+ xml_open_section (int level, char *name),
+ xml_close_sections (int level),
+ xml_begin_node (void),
+ xml_begin_index (void),
+ xml_end_index (void),
+ xml_begin_multitable (int ncolumns, int *column_widths),
+ xml_end_multitable (void),
+ xml_end_multitable_row (int first_row),
+ xml_end_multitable_column (void),
+ xml_begin_table (int type, char *item_function),
+ xml_end_table (int type),
+ xml_begin_item (void),
+ xml_begin_table_item (void),
+ xml_continue_table_item (void),
+ xml_begin_enumerate (char *enum_arg),
+ xml_end_enumerate (void),
+ xml_begin_docbook_float (int elt);
+
+extern char *xml_id (char *id);
+
+extern void xml_begin_definition (void),
+ xml_end_definition (void),
+ xml_process_defun_args (char **defun_args, int auto_var_p),
+ xml_begin_def_term (int base_type, const char *category,
+ char *defined_name, char *type_name, char *type_name2),
+ xml_end_def_term (void);
+
+extern int xml_current_stack_index (void),
+ xml_element (char *name);
+
+#if defined (VA_FPRINTF) && __STDC__
+void xml_insert_element_with_attribute (int elt, int arg, char *format, ...);
+#else
+void xml_insert_element_with_attribute ();
+#endif
+
+#endif /* XML_H */
diff --git a/makeinfo/xref.c b/makeinfo/xref.c
new file mode 100644
index 0000000..43e9ae9
--- /dev/null
+++ b/makeinfo/xref.c
@@ -0,0 +1,632 @@
+/* xref.c -- cross references for Texinfo.
+ $Id: xref.c,v 1.14 2007/09/26 20:53:40 karl Exp $
+
+ Copyright (C) 2004, 2005, 2007 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 "system.h"
+#include "cmds.h"
+#include "float.h"
+#include "html.h"
+#include "index.h"
+#include "macro.h"
+#include "makeinfo.h"
+#include "node.h"
+#include "xml.h"
+#include "xref.h"
+
+/* Flags which control initial output string for xrefs. */
+int px_ref_flag = 0;
+int ref_flag = 0;
+
+/* Called in the multiple-argument case to make sure we generate a valid
+ Info reference. In the single-argument case, the :: we output
+ suffices for the Info readers to find the end of the reference. */
+static void
+add_xref_punctuation (void)
+{
+ if (px_ref_flag || ref_flag) /* user inserts punct after @xref */
+ {
+ /* Check if there's already punctuation. */
+ int next_char = next_nonwhitespace_character ();
+
+ if (next_char == -1)
+ /* EOF while looking for punctuation, let's
+ insert a period instead of crying. */
+ add_char ('.');
+ else if (next_char != ',' && next_char != '.')
+ /* period and comma terminate xrefs, and nothing else. Instead
+ of generating an Info reference that can't be followed,
+ though, just insert a period. Not pretty, but functional. */
+ add_char ('.');
+ }
+}
+
+/* Return next comma-delimited argument, but do not cross a close-brace
+ boundary. Clean up whitespace, too. If EXPAND is nonzero, replace
+ the entire brace-delimited argument list with its expansion before
+ looking for the next comma. */
+char *
+get_xref_token (int expand)
+{
+ char *string = 0;
+
+ if (docbook)
+ xml_in_xref_token = 1;
+
+ if (expand)
+ {
+ int old_offset = input_text_offset;
+ int old_lineno = line_number;
+
+ get_until_in_braces ("}", &string);
+ if (curchar () == '}') /* as opposed to end of text */
+ input_text_offset++;
+ if (input_text_offset > old_offset)
+ {
+ int limit = input_text_offset;
+
+ input_text_offset = old_offset;
+ line_number = old_lineno;
+ only_macro_expansion++;
+ replace_with_expansion (input_text_offset, &limit);
+ only_macro_expansion--;
+ }
+ free (string);
+ }
+
+ get_until_in_braces (",", &string);
+ if (curchar () == ',')
+ input_text_offset++;
+ fix_whitespace (string);
+
+ if (docbook)
+ xml_in_xref_token = 0;
+
+ return string;
+}
+
+
+/* NOTE: If you wonder why the HTML output is produced with such a
+ peculiar mix of calls to add_word and execute_string, here's the
+ reason. get_xref_token (1) expands all macros in a reference, but
+ any other commands, like @value, @@, etc., are left intact. To
+ expand them, we need to run the arguments through execute_string.
+ However, characters like <, &, > and others cannot be let into
+ execute_string, because they will be escaped. See the mess? */
+
+/* Make a cross reference. */
+void
+cm_xref (int arg)
+{
+ if (arg == START)
+ {
+ char *arg1 = get_xref_token (1); /* expands all macros in xref */
+ char *arg2 = get_xref_token (0);
+ char *arg3 = get_xref_token (0);
+ char *arg4 = get_xref_token (0);
+ char *arg5 = get_xref_token (0);
+ char *tem;
+
+ /* "@xref{,Foo,, Bar, Baz} is not valid usage of @xref. The
+ first argument must never be blank." --rms.
+ We hereby comply by disallowing such constructs. */
+ if (!*arg1)
+ line_error (_("First argument to cross-reference may not be empty"));
+
+ if (docbook)
+ {
+ if (!ref_flag)
+ add_word (px_ref_flag || printing_index
+ ? (char *) gdt("see ") : (char *) gdt("See "));
+
+ if (!*arg4 && !*arg5)
+ {
+ char *arg1_id = xml_id (arg1);
+
+ if (*arg2 || *arg3)
+ {
+ xml_insert_element_with_attribute (XREFNODENAME, START,
+ "linkend=\"%s\"", arg1_id);
+ free (arg1_id);
+ execute_string ("%s", *arg3 ? arg3 : arg2);
+ xml_insert_element (XREFNODENAME, END);
+ }
+ else
+ {
+ xml_insert_element_with_attribute (XREF, START,
+ "linkend=\"%s\"", arg1_id);
+ xml_insert_element (XREF, END);
+ free (arg1_id);
+ }
+ }
+ else if (*arg5)
+ {
+ add_word_args (gdt("See section ``%s'' in "), *arg3 ? arg3 : arg1);
+ xml_insert_element (CITE, START);
+ add_word (arg5);
+ xml_insert_element (CITE, END);
+ }
+ else if (*arg4)
+ {
+ /* Very sad, we are losing xrefs made to ``info only'' books. */
+ }
+ }
+ else if (xml)
+ {
+ if (!ref_flag)
+ add_word_args ("%s", px_ref_flag ? gdt("see ") : gdt("See "));
+
+ xml_insert_element (XREF, START);
+ xml_insert_element (XREFNODENAME, START);
+ execute_string ("%s", arg1);
+ xml_insert_element (XREFNODENAME, END);
+ if (*arg2)
+ {
+ xml_insert_element (XREFINFONAME, START);
+ execute_string ("%s", arg2);
+ xml_insert_element (XREFINFONAME, END);
+ }
+ if (*arg3)
+ {
+ xml_insert_element (XREFPRINTEDDESC, START);
+ execute_string ("%s", arg3);
+ xml_insert_element (XREFPRINTEDDESC, END);
+ }
+ if (*arg4)
+ {
+ xml_insert_element (XREFINFOFILE, START);
+ execute_string ("%s", arg4);
+ xml_insert_element (XREFINFOFILE, END);
+ }
+ if (*arg5)
+ {
+ xml_insert_element (XREFPRINTEDNAME, START);
+ execute_string ("%s", arg5);
+ xml_insert_element (XREFPRINTEDNAME, END);
+ }
+ xml_insert_element (XREF, END);
+ }
+ else if (html)
+ {
+ if (!ref_flag)
+ add_word_args ("%s", px_ref_flag ? gdt("see ") : gdt("See "));
+ }
+ else
+ add_word_args ("%s", px_ref_flag || ref_flag ? "*note " : "*Note ");
+
+ if (!xml)
+ {
+ if (*arg5 || *arg4)
+ {
+ /* arg1 - node name
+ arg2 - reference name
+ arg3 - title or topic (and reference name if arg2 is NULL)
+ arg4 - info file name
+ arg5 - printed manual title */
+ char *ref_name;
+
+ if (!*arg2)
+ {
+ if (*arg3)
+ ref_name = arg3;
+ else
+ ref_name = arg1;
+ }
+ else
+ ref_name = arg2;
+
+ if (html)
+ { /* More to do eventually, down to Unicode
+ Normalization Form C. See the HTML Xref nodes in
+ the manual. */
+ char *file_arg = arg4;
+ add_html_elt ("<a href=");
+
+ {
+ /* If there's a directory part, ignore it. */
+ char *p = strrchr (file_arg, '/');
+ if (p)
+ file_arg = p + 1;
+
+ /* If there's a dot, make it a NULL terminator, so the
+ extension does not get into the way. */
+ p = strrchr (file_arg , '.');
+ if (p != NULL)
+ *p = 0;
+ }
+
+ if (! *file_arg)
+ warning (_("Empty file name for HTML cross reference in `%s'"),
+ arg4);
+
+ /* Note that if we are splitting, and the referenced
+ tag is an anchor rather than a node, we will
+ produce a reference to a file whose name is
+ derived from the anchor name. However, only
+ nodes create files, so we are referencing a
+ non-existent file. cm_anchor, which see, deals
+ with that problem. */
+ if (splitting)
+ execute_string ("\"../%s/", file_arg);
+ else
+ execute_string ("\"%s.html", file_arg);
+ /* Do not collapse -- to -, etc., in references. */
+ in_fixed_width_font++;
+ tem = expansion (arg1, 0); /* expand @-commands in node */
+ in_fixed_width_font--;
+ add_anchor_name (tem, 1);
+ free (tem);
+ add_word ("\">");
+ execute_string ("%s",ref_name);
+ add_word ("</a>");
+ }
+ else
+ {
+ execute_string ("%s:", ref_name);
+ in_fixed_width_font++;
+ execute_string (" (%s)%s", arg4, arg1);
+ add_xref_punctuation ();
+ in_fixed_width_font--;
+ }
+
+ /* Free all of the arguments found. */
+ if (arg1) free (arg1);
+ if (arg2) free (arg2);
+ if (arg3) free (arg3);
+ if (arg4) free (arg4);
+ if (arg5) free (arg5);
+ return;
+ }
+ else
+ remember_node_reference (arg1, line_number, followed_reference);
+
+ if (*arg3)
+ {
+ if (html)
+ {
+ add_html_elt ("<a href=\"");
+ in_fixed_width_font++;
+ tem = expansion (arg1, 0);
+ in_fixed_width_font--;
+ add_anchor_name (tem, 1);
+ free (tem);
+ add_word ("\">");
+ execute_string ("%s", *arg2 ? arg2 : arg3);
+ add_word ("</a>");
+ }
+ else
+ {
+ execute_string ("%s:", *arg2 ? arg2 : arg3);
+ in_fixed_width_font++;
+ execute_string (" %s", arg1);
+ add_xref_punctuation ();
+ in_fixed_width_font--;
+ }
+ }
+ else
+ {
+ if (html)
+ {
+ add_html_elt ("<a href=\"");
+ in_fixed_width_font++;
+ tem = expansion (arg1, 0);
+ in_fixed_width_font--;
+ add_anchor_name (tem, 1);
+ free (tem);
+ add_word ("\">");
+ if (*arg2)
+ execute_string ("%s", arg2);
+ else
+ {
+ char *fref = get_float_ref (arg1);
+ execute_string ("%s", fref ? fref : arg1);
+ free (fref);
+ }
+ add_word ("</a>");
+ }
+ else
+ {
+ if (*arg2)
+ {
+ execute_string ("%s:", arg2);
+ in_fixed_width_font++;
+ execute_string (" %s", arg1);
+ add_xref_punctuation ();
+ in_fixed_width_font--;
+ }
+ else
+ {
+ char *fref = get_float_ref (arg1);
+ if (fref)
+ { /* Reference is being made to a float. */
+ execute_string ("%s:", fref);
+ in_fixed_width_font++;
+ execute_string (" %s", arg1);
+ add_xref_punctuation ();
+ in_fixed_width_font--;
+ }
+ else
+ {
+ in_fixed_width_font++;
+ execute_string ("%s::", arg1);
+ in_fixed_width_font--;
+ }
+ }
+ }
+ }
+ }
+ /* Free all of the arguments found. */
+ if (arg1) free (arg1);
+ if (arg2) free (arg2);
+ if (arg3) free (arg3);
+ if (arg4) free (arg4);
+ if (arg5) free (arg5);
+ }
+ else
+ { /* Check that the next non-whitespace character is valid to follow
+ an xref (so Info readers can find the node names).
+ `input_text_offset' is pointing at the "}" which ended the xref
+ command. This is not used for @pxref or @ref, since we insert
+ the necessary punctuation above, if needed. */
+ int temp = next_nonwhitespace_character ();
+
+ if (temp == -1)
+ warning (_("End of file reached while looking for `.' or `,'"));
+ else if (temp != '.' && temp != ',')
+ {
+ warning (_("`.' or `,' must follow @%s, not `%c'"), command, temp);
+ if (temp == ')')
+ warning (_("for cross-references in parentheses, use @pxref"));
+ }
+ }
+}
+
+void
+cm_pxref (int arg)
+{
+ if (arg == START)
+ {
+ px_ref_flag++;
+ cm_xref (arg);
+ px_ref_flag--;
+ }
+ /* cm_xref isn't called with arg == END, which disables the code near
+ the end of cm_xref that checks for `.' or `,' after the
+ cross-reference. This is because cm_xref generates the required
+ character itself (when needed) if px_ref_flag is set. */
+}
+
+void
+cm_ref (int arg)
+{
+ /* See the comments in cm_pxref about the checks for punctuation. */
+ if (arg == START)
+ {
+ ref_flag++;
+ cm_xref (arg);
+ ref_flag--;
+ }
+}
+
+void
+cm_inforef (int arg)
+{
+ if (arg == START)
+ {
+ char *node = get_xref_token (1); /* expands all macros in inforef */
+ char *pname = get_xref_token (0);
+ char *file = get_xref_token (0);
+
+ /* (see comments at cm_xref). */
+ if (!*node)
+ line_error (_("First argument to @inforef may not be empty"));
+
+ if (xml && !docbook)
+ {
+ xml_insert_element (INFOREF, START);
+ xml_insert_element (INFOREFNODENAME, START);
+ execute_string ("%s", node);
+ xml_insert_element (INFOREFNODENAME, END);
+ if (*pname)
+ {
+ xml_insert_element (INFOREFREFNAME, START);
+ execute_string ("%s", pname);
+ xml_insert_element (INFOREFREFNAME, END);
+ }
+ xml_insert_element (INFOREFINFONAME, START);
+ execute_string ("%s", file);
+ xml_insert_element (INFOREFINFONAME, END);
+
+ xml_insert_element (INFOREF, END);
+ }
+ else if (html)
+ {
+ char *tem;
+
+ add_word ((char *) gdt("see "));
+ /* html fixxme: revisit this */
+ add_html_elt ("<a href=");
+ if (splitting)
+ execute_string ("\"../%s/", file);
+ else
+ execute_string ("\"%s.html", file);
+ tem = expansion (node, 0);
+ add_anchor_name (tem, 1);
+ add_word ("\">");
+ execute_string ("%s", *pname ? pname : tem);
+ add_word ("</a>");
+ free (tem);
+ }
+ else
+ {
+ if (*pname)
+ execute_string ("*note %s: (%s)%s", pname, file, node);
+ else
+ execute_string ("*note (%s)%s::", file, node);
+ }
+
+ free (node);
+ free (pname);
+ free (file);
+ }
+}
+
+/* A URL reference. */
+void
+cm_uref (int arg)
+{
+ if (arg == START)
+ {
+ char *url = get_xref_token (1); /* expands all macros in uref */
+ char *desc = get_xref_token (0);
+ char *replacement = get_xref_token (0);
+
+ if (docbook)
+ {
+ xml_insert_element_with_attribute (UREF, START, "url=\"%s\"",
+ maybe_escaped_expansion (url, 0, 1));
+ if (*replacement)
+ execute_string ("%s", replacement);
+ else if (*desc)
+ execute_string ("%s", desc);
+ else
+ execute_string ("%s", url);
+ xml_insert_element (UREF, END);
+ }
+ else if (xml)
+ {
+ xml_insert_element (UREF, START);
+ xml_insert_element (UREFURL, START);
+ execute_string ("%s", url);
+ xml_insert_element (UREFURL, END);
+ if (*desc)
+ {
+ xml_insert_element (UREFDESC, START);
+ execute_string ("%s", desc);
+ xml_insert_element (UREFDESC, END);
+ }
+ if (*replacement)
+ {
+ xml_insert_element (UREFREPLACEMENT, START);
+ execute_string ("%s", replacement);
+ xml_insert_element (UREFREPLACEMENT, END);
+ }
+ xml_insert_element (UREF, END);
+ }
+ else if (html)
+ { /* never need to show the url */
+ add_html_elt ("<a href=");
+ /* don't collapse `--' etc. in the url */
+ in_fixed_width_font++;
+ execute_string ("\"%s\"", url);
+ in_fixed_width_font--;
+ add_word (">");
+ execute_string ("%s", *replacement ? replacement
+ : (*desc ? desc : url));
+ add_word ("</a>");
+ }
+ else if (*replacement) /* do not show the url */
+ execute_string ("%s", replacement);
+ else if (*desc) /* show both text and url */
+ {
+ execute_string ("%s ", desc);
+ in_fixed_width_font++;
+ execute_string ("(%s)", url);
+ in_fixed_width_font--;
+ }
+ else /* no text at all, so have the url to show */
+ {
+ in_fixed_width_font++;
+ execute_string ("%s%s%s",
+ printing_index ? "" : "`",
+ url,
+ printing_index ? "" : "'");
+ in_fixed_width_font--;
+ }
+ if (url)
+ free (url);
+ if (desc)
+ free (desc);
+ if (replacement)
+ free (replacement);
+ }
+}
+
+/* An email reference. */
+void
+cm_email (int arg)
+{
+ if (arg == START)
+ {
+ char *addr = get_xref_token (1); /* expands all macros in email */
+ char *name = get_xref_token (0);
+
+ if (xml && docbook)
+ {
+ if (*name)
+ {
+ xml_insert_element_with_attribute (EMAIL, START,
+ "url=\"mailto:%s\"",
+ maybe_escaped_expansion (addr, 0, 1));
+ execute_string ("%s", name);
+ xml_insert_element (EMAIL, END);
+ }
+ else
+ {
+ xml_insert_element (EMAILADDRESS, START);
+ execute_string ("%s", addr);
+ xml_insert_element (EMAILADDRESS, END);
+ }
+ }
+ else if (xml)
+ {
+ xml_insert_element (EMAIL, START);
+ xml_insert_element (EMAILADDRESS, START);
+ execute_string ("%s", addr);
+ xml_insert_element (EMAILADDRESS, END);
+ if (*name)
+ {
+ xml_insert_element (EMAILNAME, START);
+ execute_string ("%s", name);
+ xml_insert_element (EMAILNAME, END);
+ }
+ xml_insert_element (EMAIL, END);
+ }
+ else if (html)
+ {
+ add_html_elt ("<a href=");
+ /* don't collapse `--' etc. in the address */
+ in_fixed_width_font++;
+ execute_string ("\"mailto:%s\"", addr);
+ in_fixed_width_font--;
+ add_word (">");
+ execute_string ("%s", *name ? name : addr);
+ add_word ("</a>");
+ }
+ else
+ {
+ execute_string ("%s%s", name, *name ? " " : "");
+ in_fixed_width_font++;
+ execute_string ("<%s>", addr);
+ in_fixed_width_font--;
+ }
+
+ if (addr)
+ free (addr);
+ if (name)
+ free (name);
+ }
+}
diff --git a/makeinfo/xref.h b/makeinfo/xref.h
new file mode 100644
index 0000000..a6fc874
--- /dev/null
+++ b/makeinfo/xref.h
@@ -0,0 +1,29 @@
+/* xref.h -- declarations for the cross references.
+ $Id: xref.h,v 1.4 2007/07/01 21:20:33 karl Exp $
+
+ Copyright (C) 2004, 2007 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/>. */
+
+#ifndef XREF_H
+#define XREF_H
+
+enum reftype
+{
+ menu_reference, followed_reference
+};
+
+extern char *get_xref_token (int expand);
+
+#endif /* not XREF_H */
diff --git a/po/ChangeLog b/po/ChangeLog
new file mode 100644
index 0000000..a540c5c
--- /dev/null
+++ b/po/ChangeLog
@@ -0,0 +1,36 @@
+2007-12-23 gettextize <bug-gnu-gettext@gnu.org>
+
+ * Makefile.in.in: Upgrade to gettext-0.17.
+ * ORIG: New file, from gettext-0.17.
+
+2007-02-10 gettextize <bug-gnu-gettext@gnu.org>
+
+ * Makefile.in.in: Upgrade to gettext-0.16.
+
+2005-05-28 gettextize <bug-gnu-gettext@gnu.org>
+
+ * ORIG: New file, from gettext-0.14.5.
+
+2005-03-15 gettextize <bug-gnu-gettext@gnu.org>
+
+ * ORIG: New file, from gettext-0.14.3.
+
+2005-03-12 gettextize <bug-gnu-gettext@gnu.org>
+
+ * Makefile.in.in: Upgrade to gettext-0.14.2.
+ * ORIG: New file, from gettext-0.14.2.
+
+2004-02-05 gettextize <bug-gnu-gettext@gnu.org>
+
+ * Makefile.in.in: Upgrade to gettext-0.14.1.
+ * ORIG: New file, from gettext-0.14.1.
+ * Rules-quot: Upgrade to gettext-0.14.1.
+
+2003-12-20 gettextize <bug-gnu-gettext@gnu.org>
+
+ * ORIG: New file, from gettext-0.13.1.
+
+2003-12-13 gettextize <bug-gnu-gettext@gnu.org>
+
+ * ORIG: New file, from gettext-0.13.
+
diff --git a/po/LINGUAS b/po/LINGUAS
new file mode 100644
index 0000000..2c0c5f7
--- /dev/null
+++ b/po/LINGUAS
@@ -0,0 +1,22 @@
+cs
+da
+de
+de_AT
+eo
+es
+fr
+he
+hr
+hu
+ja
+nl
+nb
+pl
+ro
+ru
+rw
+sv
+tr
+vi
+zh_CN
+zh_TW
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
new file mode 100644
index 0000000..fecf500
--- /dev/null
+++ b/po/Makefile.in.in
@@ -0,0 +1,429 @@
+# Makefile for PO directory in any package using GNU gettext.
+# Copyright (C) 1995-1997, 2000-2007 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+#
+# This file can be copied and used freely without restrictions. It can
+# be used in projects which are not available under the GNU General Public
+# License but which still want to provide support for the GNU gettext
+# functionality.
+# Please note that the actual code of GNU gettext is covered by the GNU
+# General Public License and is *not* in the public domain.
+#
+# Origin: gettext-0.17
+GETTEXT_MACRO_VERSION = 0.17
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+
+SHELL = /bin/sh
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datarootdir = @datarootdir@
+datadir = @datadir@
+localedir = @localedir@
+gettextsrcdir = $(datadir)/gettext/po
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+
+# We use $(mkdir_p).
+# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
+# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
+# @install_sh@ does not start with $(SHELL), so we add it.
+# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined
+# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
+# versions, $(mkinstalldirs) and $(install_sh) are unused.
+mkinstalldirs = $(SHELL) @install_sh@ -d
+install_sh = $(SHELL) @install_sh@
+MKDIR_P = @MKDIR_P@
+mkdir_p = @mkdir_p@
+
+GMSGFMT_ = @GMSGFMT@
+GMSGFMT_no = @GMSGFMT@
+GMSGFMT_yes = @GMSGFMT_015@
+GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT))
+MSGFMT_ = @MSGFMT@
+MSGFMT_no = @MSGFMT@
+MSGFMT_yes = @MSGFMT_015@
+MSGFMT = $(MSGFMT_$(USE_MSGCTXT))
+XGETTEXT_ = @XGETTEXT@
+XGETTEXT_no = @XGETTEXT@
+XGETTEXT_yes = @XGETTEXT_015@
+XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
+MSGMERGE = msgmerge
+MSGMERGE_UPDATE = @MSGMERGE@ --update
+MSGINIT = msginit
+MSGCONV = msgconv
+MSGFILTER = msgfilter
+
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+UPDATEPOFILES = @UPDATEPOFILES@
+DUMMYPOFILES = @DUMMYPOFILES@
+DISTFILES.common = Makefile.in.in remove-potcdate.sin \
+$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
+DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \
+$(POFILES) $(GMOFILES) \
+$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+
+# Makevars gets inserted here. (Don't remove this line!)
+
+.SUFFIXES:
+.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update
+
+.po.mo:
+ @echo "$(MSGFMT) -c -o $@ $<"; \
+ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@
+
+.po.gmo:
+ @lang=`echo $* | sed -e 's,.*/,,'`; \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \
+ cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo
+
+.sin.sed:
+ sed -e '/^#/d' $< > t-$@
+ mv t-$@ $@
+
+
+all: check-macro-version all-@USE_NLS@
+
+all-yes: stamp-po
+all-no:
+
+# Ensure that the gettext macros and this Makefile.in.in are in sync.
+check-macro-version:
+ @test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \
+ || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \
+ exit 1; \
+ }
+
+# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
+# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
+# we don't want to bother translators with empty POT files). We assume that
+# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
+# In this case, stamp-po is a nop (i.e. a phony target).
+
+# stamp-po is a timestamp denoting the last time at which the CATALOGS have
+# been loosely updated. Its purpose is that when a developer or translator
+# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS,
+# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent
+# invocations of "make" will do nothing. This timestamp would not be necessary
+# if updating the $(CATALOGS) would always touch them; however, the rule for
+# $(POFILES) has been designed to not touch files that don't need to be
+# changed.
+stamp-po: $(srcdir)/$(DOMAIN).pot
+ test ! -f $(srcdir)/$(DOMAIN).pot || \
+ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
+ @test ! -f $(srcdir)/$(DOMAIN).pot || { \
+ echo "touch stamp-po" && \
+ echo timestamp > stamp-poT && \
+ mv stamp-poT stamp-po; \
+ }
+
+# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
+# otherwise packages like GCC can not be built if only parts of the source
+# have been downloaded.
+
+# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
+# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
+$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
+ if LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null | grep -v 'libtool:' >/dev/null; then \
+ package_gnu='GNU '; \
+ else \
+ package_gnu=''; \
+ fi; \
+ if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
+ msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
+ else \
+ msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
+ fi; \
+ case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \
+ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+ --files-from=$(srcdir)/POTFILES.in \
+ --copyright-holder='$(COPYRIGHT_HOLDER)' \
+ --msgid-bugs-address="$$msgid_bugs_address" \
+ ;; \
+ *) \
+ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+ --files-from=$(srcdir)/POTFILES.in \
+ --copyright-holder='$(COPYRIGHT_HOLDER)' \
+ --package-name="$${package_gnu}@PACKAGE@" \
+ --package-version='@VERSION@' \
+ --msgid-bugs-address="$$msgid_bugs_address" \
+ ;; \
+ esac
+ test ! -f $(DOMAIN).po || { \
+ if test -f $(srcdir)/$(DOMAIN).pot; then \
+ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
+ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
+ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
+ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
+ else \
+ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
+ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+ fi; \
+ else \
+ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+ fi; \
+ }
+
+# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
+# every "make" invocation, only create it when it is missing.
+# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
+$(srcdir)/$(DOMAIN).pot:
+ $(MAKE) $(DOMAIN).pot-update
+
+# This target rebuilds a PO file if $(DOMAIN).pot has changed.
+# Note that a PO file is not touched if it doesn't need to be changed.
+$(POFILES): $(srcdir)/$(DOMAIN).pot
+ @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
+ if test -f "$(srcdir)/$${lang}.po"; then \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \
+ cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \
+ else \
+ $(MAKE) $${lang}.po-create; \
+ fi
+
+
+install: install-exec install-data
+install-exec:
+install-data: install-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+ for file in $(DISTFILES.common) Makevars.template; do \
+ $(INSTALL_DATA) $(srcdir)/$$file \
+ $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ for file in Makevars; do \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+ fi
+install-data-no: all
+install-data-yes: all
+ $(mkdir_p) $(DESTDIR)$(datadir)
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ dir=$(localedir)/$$lang/LC_MESSAGES; \
+ $(mkdir_p) $(DESTDIR)$$dir; \
+ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
+ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
+ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
+ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+ if test -n "$$lc"; then \
+ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+ for file in *; do \
+ if test -f $$file; then \
+ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+ fi; \
+ done); \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ else \
+ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+ :; \
+ else \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ fi; \
+ fi; \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
+ fi; \
+ done; \
+ done
+
+install-strip: install
+
+installdirs: installdirs-exec installdirs-data
+installdirs-exec:
+installdirs-data: installdirs-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+ else \
+ : ; \
+ fi
+installdirs-data-no:
+installdirs-data-yes:
+ $(mkdir_p) $(DESTDIR)$(datadir)
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ dir=$(localedir)/$$lang/LC_MESSAGES; \
+ $(mkdir_p) $(DESTDIR)$$dir; \
+ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+ if test -n "$$lc"; then \
+ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+ for file in *; do \
+ if test -f $$file; then \
+ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+ fi; \
+ done); \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ else \
+ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+ :; \
+ else \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ fi; \
+ fi; \
+ fi; \
+ done; \
+ done
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall: uninstall-exec uninstall-data
+uninstall-exec:
+uninstall-data: uninstall-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ for file in $(DISTFILES.common) Makevars.template; do \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+ fi
+uninstall-data-no:
+uninstall-data-yes:
+ catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ done; \
+ done
+
+check: all
+
+info dvi ps pdf html tags TAGS ctags CTAGS ID:
+
+mostlyclean:
+ rm -f remove-potcdate.sed
+ rm -f stamp-poT
+ rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
+ rm -fr *.o
+
+clean: mostlyclean
+
+distclean: clean
+ rm -f Makefile Makefile.in POTFILES *.mo
+
+maintainer-clean: distclean
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+ rm -f stamp-po $(GMOFILES)
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir:
+ $(MAKE) update-po
+ @$(MAKE) dist2
+# This is a separate target because 'update-po' must be executed before.
+dist2: stamp-po $(DISTFILES)
+ dists="$(DISTFILES)"; \
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ dists="$$dists Makevars.template"; \
+ fi; \
+ if test -f $(srcdir)/$(DOMAIN).pot; then \
+ dists="$$dists $(DOMAIN).pot stamp-po"; \
+ fi; \
+ if test -f $(srcdir)/ChangeLog; then \
+ dists="$$dists ChangeLog"; \
+ fi; \
+ for i in 0 1 2 3 4 5 6 7 8 9; do \
+ if test -f $(srcdir)/ChangeLog.$$i; then \
+ dists="$$dists ChangeLog.$$i"; \
+ fi; \
+ done; \
+ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
+ for file in $$dists; do \
+ if test -f $$file; then \
+ cp -p $$file $(distdir) || exit 1; \
+ else \
+ cp -p $(srcdir)/$$file $(distdir) || exit 1; \
+ fi; \
+ done
+
+update-po: Makefile
+ $(MAKE) $(DOMAIN).pot-update
+ test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
+ $(MAKE) update-gmo
+
+# General rule for creating PO files.
+
+.nop.po-create:
+ @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
+ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
+ exit 1
+
+# General rule for updating PO files.
+
+.nop.po-update:
+ @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
+ if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \
+ tmpdir=`pwd`; \
+ echo "$$lang:"; \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
+ cd $(srcdir); \
+ if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \
+ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+ rm -f $$tmpdir/$$lang.new.po; \
+ else \
+ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+ :; \
+ else \
+ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+ exit 1; \
+ fi; \
+ fi; \
+ else \
+ echo "msgmerge for $$lang.po failed!" 1>&2; \
+ rm -f $$tmpdir/$$lang.new.po; \
+ fi
+
+$(DUMMYPOFILES):
+
+update-gmo: Makefile $(GMOFILES)
+ @:
+
+Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
+ cd $(top_builddir) \
+ && $(SHELL) ./config.status $(subdir)/$@.in po-directories
+
+force:
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/po/Makevars b/po/Makevars
new file mode 100644
index 0000000..895f216
--- /dev/null
+++ b/po/Makevars
@@ -0,0 +1,41 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = $(PACKAGE)
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --keyword=__
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
+# package. (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.) Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright. The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER = Free Software Foundation, Inc.
+
+# This is the email address or URL to which the translators shall report
+# bugs in the untranslated strings:
+# - Strings which are not entire sentences, see the maintainer guidelines
+# in the GNU gettext documentation, section 'Preparing Strings'.
+# - Strings which use unclear terms or require additional context to be
+# understood.
+# - Strings which make invalid assumptions about notation of date, time or
+# money.
+# - Pluralisation problems.
+# - Incorrect English spelling.
+# - Incorrect formatting.
+# It can be your email address, or a mailing list address where translators
+# can write to without being subscribed, or the URL of a web page through
+# which the translators can contact you.
+MSGID_BUGS_ADDRESS = bug-texinfo@gnu.org
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used. It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644
index 0000000..1016e2f
--- /dev/null
+++ b/po/POTFILES.in
@@ -0,0 +1,47 @@
+# Copyright (C) 2005, 2006, 2007, 2008 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.
+#
+# List of source files containing translatable strings.
+
+gnulib/lib/error.c
+gnulib/lib/getopt.c
+gnulib/lib/xalloc-die.c
+gnulib/lib/xsetenv.c
+info/echo-area.c
+info/footnotes.c
+info/footnotes.h
+info/indices.c
+info/info.c
+info/infodoc.c
+info/infokey.c
+info/infomap.c
+info/m-x.c
+info/makedoc.c
+info/nodemenu.c
+info/search.c
+info/session.c
+info/tilde.c
+info/variables.c
+info/window.c
+install-info/install-info.c
+lib/xexit.c
+makeinfo/cmds.c
+makeinfo/defun.c
+makeinfo/files.c
+makeinfo/float.c
+makeinfo/footnote.c
+makeinfo/html.c
+makeinfo/index.c
+makeinfo/insertion.c
+makeinfo/lang.c
+makeinfo/macro.c
+makeinfo/makeinfo.c
+makeinfo/multi.c
+makeinfo/node.c
+makeinfo/sectioning.c
+makeinfo/xml.c
+makeinfo/xref.c
+util/texindex.c
diff --git a/po/Rules-quot b/po/Rules-quot
new file mode 100644
index 0000000..9c2a995
--- /dev/null
+++ b/po/Rules-quot
@@ -0,0 +1,47 @@
+# Special Makefile rules for English message catalogs with quotation marks.
+
+DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot
+
+.SUFFIXES: .insert-header .po-update-en
+
+en@quot.po-create:
+ $(MAKE) en@quot.po-update
+en@boldquot.po-create:
+ $(MAKE) en@boldquot.po-update
+
+en@quot.po-update: en@quot.po-update-en
+en@boldquot.po-update: en@boldquot.po-update-en
+
+.insert-header.po-update-en:
+ @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \
+ if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \
+ tmpdir=`pwd`; \
+ echo "$$lang:"; \
+ ll=`echo $$lang | sed -e 's/@.*//'`; \
+ LC_ALL=C; export LC_ALL; \
+ cd $(srcdir); \
+ if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \
+ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+ rm -f $$tmpdir/$$lang.new.po; \
+ else \
+ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+ :; \
+ else \
+ echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+ exit 1; \
+ fi; \
+ fi; \
+ else \
+ echo "creation of $$lang.po failed!" 1>&2; \
+ rm -f $$tmpdir/$$lang.new.po; \
+ fi
+
+en@quot.insert-header: insert-header.sin
+ sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header
+
+en@boldquot.insert-header: insert-header.sin
+ sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header
+
+mostlyclean: mostlyclean-quot
+mostlyclean-quot:
+ rm -f *.insert-header
diff --git a/po/boldquot.sed b/po/boldquot.sed
new file mode 100644
index 0000000..4b937aa
--- /dev/null
+++ b/po/boldquot.sed
@@ -0,0 +1,10 @@
+s/"\([^"]*\)"/“\1â€/g
+s/`\([^`']*\)'/‘\1’/g
+s/ '\([^`']*\)' / ‘\1’ /g
+s/ '\([^`']*\)'$/ ‘\1’/g
+s/^'\([^`']*\)' /‘\1’ /g
+s/“â€/""/g
+s/“/“/g
+s/â€/â€/g
+s/‘/‘/g
+s/’/’/g
diff --git a/po/cs.gmo b/po/cs.gmo
new file mode 100644
index 0000000..281e69c
--- /dev/null
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
new file mode 100644
index 0000000..f787afe
--- /dev/null
+++ b/po/cs.po
@@ -0,0 +1,3599 @@
+# Czech translations for GNU texinfo
+# Copyright (C) 1997 Free Software Foundation, Inc.
+# Vladimir Michl <Vladimir.Michl@seznam.cz>, 1997.
+#
+# Note: 2 messages untranslated, it's ok.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo 4.0\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2008-09-18 20:38+0200\n"
+"PO-Revision-Date: 2000-10-31 15:17+01:00\n"
+"Last-Translator: Vladimir Michl <Vladimir.Michl@seznam.cz>\n"
+"Language-Team: Czech <cs@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: gnulib/lib/error.c:125
+msgid "Unknown system error"
+msgstr ""
+
+#: gnulib/lib/getopt.c:526 gnulib/lib/getopt.c:542
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: pøepínaè `%s' není jednoznaèný\n"
+
+#: gnulib/lib/getopt.c:575 gnulib/lib/getopt.c:579
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: pøepínaè `--%s' musí být zadán bez argumentu\n"
+
+#: gnulib/lib/getopt.c:588 gnulib/lib/getopt.c:593
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: pøepínaè `%c%s' musí být zadán bez argumentu\n"
+
+#: gnulib/lib/getopt.c:636 gnulib/lib/getopt.c:655 gnulib/lib/getopt.c:971
+#: gnulib/lib/getopt.c:990
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: pøepínaè `%s' vy¾aduje argument\n"
+
+#: gnulib/lib/getopt.c:693 gnulib/lib/getopt.c:696
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: neznámý pøepínaè `--%s'\n"
+
+#: gnulib/lib/getopt.c:704 gnulib/lib/getopt.c:707
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: neznámý pøepínaè `%c%s'\n"
+
+#: gnulib/lib/getopt.c:759 gnulib/lib/getopt.c:762
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: neznámý pøepínaè -- %c\n"
+
+#: gnulib/lib/getopt.c:768 gnulib/lib/getopt.c:771
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: neznámý pøepínaè -- %c\n"
+
+#: gnulib/lib/getopt.c:823 gnulib/lib/getopt.c:839 gnulib/lib/getopt.c:1043
+#: gnulib/lib/getopt.c:1061
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: pøepínaè vy¾aduje argument -- %c\n"
+
+#: gnulib/lib/getopt.c:892 gnulib/lib/getopt.c:908
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: pøepínaè `-W %s' není jednoznaèný\n"
+
+#: gnulib/lib/getopt.c:932 gnulib/lib/getopt.c:950
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: pøepínaè `-W %s' musí být zadán bez argumentu\n"
+
+#: gnulib/lib/xalloc-die.c:34 gnulib/lib/xsetenv.c:37
+#, fuzzy, c-format
+msgid "memory exhausted"
+msgstr "virtuální pamì» vyèerpána"
+
+#: info/echo-area.c:283 info/session.c:966
+msgid "Move forward a character"
+msgstr "Posun na následující znak"
+
+#: info/echo-area.c:295 info/session.c:993
+msgid "Move backward a character"
+msgstr "Posun na pøedcházející znak"
+
+#: info/echo-area.c:307
+msgid "Move to the start of this line"
+msgstr "Pøesun na zaèátek tohoto øádku"
+
+#: info/echo-area.c:312
+msgid "Move to the end of this line"
+msgstr "Pøesun na konec tohoto øádku"
+
+#: info/echo-area.c:320 info/session.c:1025
+msgid "Move forward a word"
+msgstr "Posun na následující slovo"
+
+#: info/echo-area.c:360 info/session.c:1049
+msgid "Move backward a word"
+msgstr "Posun na pøedcházející slovo"
+
+#: info/echo-area.c:400
+msgid "Delete the character under the cursor"
+msgstr "Smazání znaku pod kurzorem"
+
+#: info/echo-area.c:430
+msgid "Delete the character behind the cursor"
+msgstr "Smazání prvního znaku vlevo od kurzoru"
+
+#: info/echo-area.c:451
+msgid "Cancel or quit operation"
+msgstr "Zru¹ení nebo pøeru¹ení operace"
+
+#: info/echo-area.c:466
+msgid "Accept (or force completion of) this line"
+msgstr "Akceptování (nebo vnucené dokonèení) tohoto øádku"
+
+#: info/echo-area.c:471
+msgid "Insert next character verbatim"
+msgstr "Vlo¾ení dal¹ího znaku bez interpretace jeho funkce"
+
+#: info/echo-area.c:479
+msgid "Insert this character"
+msgstr "Vlo¾ení tohoto znaku"
+
+#: info/echo-area.c:498
+msgid "Insert a TAB character"
+msgstr "Vlo¾ení tabelátoru"
+
+#: info/echo-area.c:505
+msgid "Transpose characters at point"
+msgstr "Pøemístìní znaku na pozici"
+
+#: info/echo-area.c:556
+msgid "Yank back the contents of the last kill"
+msgstr "Vlo¾ení toho co bylo naposled smazáno"
+
+#: info/echo-area.c:563
+msgid "Kill ring is empty"
+msgstr "Kruhový buffer smazaných oblastí je prázdný"
+
+#: info/echo-area.c:576
+msgid "Yank back a previous kill"
+msgstr "Vlo¾ení naposledy smazaného úseku"
+
+#: info/echo-area.c:609
+msgid "Kill to the end of the line"
+msgstr "Smazání v¹eho od kurzoru a¾ do konce øádku"
+
+#: info/echo-area.c:622
+msgid "Kill to the beginning of the line"
+msgstr "Smazání v¹eho od zaèátku øádku do kurzoru"
+
+#: info/echo-area.c:634
+msgid "Kill the word following the cursor"
+msgstr "Smazání slova, od kurzoru do konce slova"
+
+#: info/echo-area.c:654
+msgid "Kill the word preceding the cursor"
+msgstr "Smazání slova, od zaèátku slova do kurzoru"
+
+#: info/echo-area.c:870 info/echo-area.c:926
+msgid "No completions"
+msgstr "Doplnìní neexistují"
+
+#: info/echo-area.c:872
+msgid "Not complete"
+msgstr "Nekompletní"
+
+#: info/echo-area.c:913
+msgid "List possible completions"
+msgstr "Seznam mo¾ných doplnìní"
+
+#: info/echo-area.c:930
+msgid "Sole completion"
+msgstr "Jedinné doplnìní"
+
+#: info/echo-area.c:939
+msgid "One completion:\n"
+msgstr "Jedno doplnìní:\n"
+
+#: info/echo-area.c:940
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d doplnìní:\n"
+
+#: info/echo-area.c:1087
+msgid "Insert completion"
+msgstr "Vlo¾ení doplnìní"
+
+#: info/echo-area.c:1222
+msgid "Building completions..."
+msgstr "Hledám doplnìní..."
+
+#: info/echo-area.c:1342
+msgid "Scroll the completions window"
+msgstr "Odrolování obsahu okna s doplnìními"
+
+#: info/footnotes.c:212
+msgid "Footnotes could not be displayed"
+msgstr "Poznámky pod èarou nelze zobrazit"
+
+#: info/footnotes.c:238
+msgid "Show the footnotes associated with this node in another window"
+msgstr ""
+"Zobrazení poznámek pod èarou, vztahujících se k tomuto uzlu, v jiném oknì"
+
+#: info/footnotes.h:26
+#, fuzzy
+msgid "---------- Footnotes ----------"
+msgstr "---------------------\n"
+
+#: info/indices.c:171
+msgid "Look up a string in the index for this file"
+msgstr "Vyhledání øetìzce v rejstøíku tohoto souboru"
+
+#: info/indices.c:198
+msgid "Finding index entries..."
+msgstr "Jsou hledány polo¾ky rejstøíku..."
+
+#: info/indices.c:206
+msgid "No indices found."
+msgstr "®ádný rejstøík nebyl nalezen."
+
+#: info/indices.c:216
+msgid "Index entry: "
+msgstr "Polo¾ka rejstøíku: "
+
+#: info/indices.c:324
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr ""
+"Posun na dal¹í polo¾ku rejstøíku, odpovídající øetìzci z minulého pøíkazu `"
+"\\[index-search]'"
+
+#: info/indices.c:334
+msgid "No previous index search string."
+msgstr "Není zadán øetìzec, který se má vyhledávat v rejstøíku(cích)."
+
+#: info/indices.c:341
+msgid "No index entries."
+msgstr "Nejsou polo¾ky rejstøíku."
+
+#: info/indices.c:374
+#, fuzzy, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "Ji¾ není %spolo¾ka rejstøíku, která obsahuje \"%s\"."
+
+#: info/indices.c:375
+msgid "more "
+msgstr "dal¹í "
+
+#: info/indices.c:385
+msgid "CAN'T SEE THIS"
+msgstr "TOTO NELZE VIDÌT"
+
+#: info/indices.c:421
+#, fuzzy, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr "Nalezeno \"%s\" v %s. (`\\[next-index-match]' - hledání dal¹í.)"
+
+#: info/indices.c:549
+#, fuzzy, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "Prohledávám tyto rejstøíky \"%s\"..."
+
+#: info/indices.c:604
+#, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr ""
+
+#: info/indices.c:630
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr ""
+"Vyhledání øetìzce ve v¹ech známých rejstøících info souborù a vytvoøení menu"
+
+#: info/indices.c:634
+msgid "Index apropos: "
+msgstr "Hledat v rejstøíku odkaz na:"
+
+#: info/indices.c:662
+#, fuzzy, c-format
+msgid ""
+"\n"
+"* Menu: Nodes whose indices contain `%s':\n"
+msgstr ""
+"\n"
+"* Menu: Uzly jejich¾ rejstøíky obsahují \"%s\":\n"
+
+#: info/info.c:275 info/infokey.c:899
+#, c-format
+msgid "Try --help for more information.\n"
+msgstr "Více informací mù¾ete získat pomocí pøepínaèe --help.\n"
+
+#: info/info.c:294 info/infokey.c:145 install-info/install-info.c:2101
+#: makeinfo/makeinfo.c:802 util/texindex.c:295
+#, c-format
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+
+#: info/info.c:506
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "odpovídající polo¾ky rejstøíku nebyly pro `%s' nalezeny\n"
+
+#: info/info.c:600
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [MENU-ITEM...]\n"
+"\n"
+"Read documentation in Info format.\n"
+msgstr ""
+
+#: info/info.c:606
+msgid ""
+"Options:\n"
+" -k, --apropos=STRING look up STRING in all indices of all "
+"manuals.\n"
+" -d, --directory=DIR add DIR to INFOPATH.\n"
+" --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+" -f, --file=FILENAME specify Info file to visit."
+msgstr ""
+
+#: info/info.c:613
+msgid ""
+" -h, --help display this help and exit.\n"
+" --index-search=STRING go to node pointed by index entry STRING.\n"
+" -n, --node=NODENAME specify nodes in first visited Info file.\n"
+" -o, --output=FILENAME output selected nodes to FILENAME."
+msgstr ""
+
+#: info/info.c:619
+msgid ""
+" -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+" --no-raw-escapes output escapes as literal text.\n"
+" --restore=FILENAME read initial keystrokes from FILENAME.\n"
+" -O, --show-options, --usage go to command-line options node."
+msgstr ""
+
+#: info/info.c:626
+msgid " -b, --speech-friendly be friendly to speech synthesizers."
+msgstr ""
+
+#: info/info.c:630
+msgid ""
+" --subnodes recursively output menu items.\n"
+" --vi-keys use vi-like and less-like key bindings.\n"
+" --version display version information and exit.\n"
+" -w, --where, --location print physical location of Info file."
+msgstr ""
+
+#: info/info.c:636
+msgid ""
+"\n"
+"The first non-option argument, if present, is the menu entry to start from;\n"
+"it is searched for in all `dir' files along INFOPATH.\n"
+"If it is not present, info merges all `dir' files and shows the result.\n"
+"Any remaining arguments are treated as the names of menu\n"
+"items relative to the initial node visited."
+msgstr ""
+
+#: info/info.c:643
+msgid ""
+"\n"
+"For a summary of key bindings, type h within Info."
+msgstr ""
+
+#: info/info.c:646
+msgid ""
+"\n"
+"Examples:\n"
+" info show top-level dir menu\n"
+" info info show the general manual for Info readers\n"
+" info info-stnd show the manual specific to this Info program\n"
+" info emacs start at emacs node from top-level dir\n"
+" info emacs buffers start at buffers node within emacs manual\n"
+" info --show-options emacs start at node with emacs' command line options\n"
+" info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+" info -f ./foo.info show file ./foo.info, not searching dir"
+msgstr ""
+
+#: info/info.c:657 info/infokey.c:918 makeinfo/makeinfo.c:475
+#: util/texindex.c:259
+#, fuzzy
+msgid ""
+"\n"
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+" Chyby v programu oznamujte na adrese <bug-texinfo@gnu.org> (pouze "
+"anglicky),\n"
+"obecné otázky smìøujte na <help-texinfo@gnu.org>. Pøipomínky k pøekladu\n"
+"zasílejte na <cs@li.org> (èesky).\n"
+
+#: info/info.c:691
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "Uzel `%s' nelze nalézt."
+
+#: info/info.c:692
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "Uzel `(%s)%s' nelze nalézt."
+
+#: info/info.c:693
+msgid "Cannot find a window!"
+msgstr "Nelze nalézt okno!"
+
+#: info/info.c:694
+msgid "Point doesn't appear within this window's node!"
+msgstr "Bod se nevyskutuje v oknì tohoto uzlu!"
+
+#: info/info.c:695
+msgid "Cannot delete the last window."
+msgstr "Poslední okno nelze smazat."
+
+#: info/info.c:696
+msgid "No menu in this node."
+msgstr "V tomto uzlu není menu."
+
+#: info/info.c:697
+msgid "No footnotes in this node."
+msgstr "V tomto nejsou poznámky pod èarou."
+
+#: info/info.c:698
+msgid "No cross references in this node."
+msgstr "V tomto uzlu není køí¾ový odkaz."
+
+#: info/info.c:699
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Pro tento uzel není `%s' ukazatel."
+
+#: info/info.c:700
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "Neznámý Info pøíkaz `%c'; zkuste `?' pro nápovìdu."
+
+#: info/info.c:701
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr "Typ terminálu `%s' není dostateènì inteligentní pro provoz Infa."
+
+#: info/info.c:702
+msgid "You are already at the last page of this node."
+msgstr "Ji¾ jste na poslední stránce tohoto uzlu."
+
+#: info/info.c:703
+msgid "You are already at the first page of this node."
+msgstr "Ji¾ jste na první stránce tohoto uzlu."
+
+#: info/info.c:704
+msgid "Only one window."
+msgstr "Pouze jedno okno."
+
+#: info/info.c:705
+msgid "Resulting window would be too small."
+msgstr "Výsledné okno by bylo pøíli¹ malé."
+
+#: info/info.c:706
+msgid "Not enough room for a help window, please delete a window."
+msgstr "Není volné místo pro okno nápovìdy, prosím sma¾te nìkteré okno."
+
+#: info/infodoc.c:45
+msgid "Basic Info command keys\n"
+msgstr ""
+
+#: info/infodoc.c:47
+#, fuzzy
+msgid "\\%-10[quit-help] Close this help window.\n"
+msgstr " %-10s Ukonèení prohlí¾ení nápovìdy.\n"
+
+#: info/infodoc.c:48
+#, fuzzy
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr " %-10s Celkové ukonèení Infa.\n"
+
+#: info/infodoc.c:49
+#, fuzzy
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr " %-10s Vyvolání prùvodce Infem.\n"
+
+#: info/infodoc.c:51
+#, fuzzy
+msgid "\\%-10[prev-line] Move up one line.\n"
+msgstr " %-10s Posun o jeden øádek dozadu.\n"
+
+#: info/infodoc.c:52
+#, fuzzy
+msgid "\\%-10[next-line] Move down one line.\n"
+msgstr " %-10s Posun o jeden øádek dopøedu.\n"
+
+#: info/infodoc.c:53
+#, fuzzy
+msgid "\\%-10[scroll-backward] Scroll backward one screenful.\n"
+msgstr " %-10s Pøedchozí stránka.\n"
+
+#: info/infodoc.c:54
+#, fuzzy
+msgid "\\%-10[scroll-forward] Scroll forward one screenful.\n"
+msgstr " %-10s Následující stránka.\n"
+
+#: info/infodoc.c:55
+#, fuzzy
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr " %-10s Pøesun na zaèátek aktuálního uzlu.\n"
+
+#: info/infodoc.c:56
+#, fuzzy
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr " %-10s Pøesun na konec tohoto uzlu.\n"
+
+#: info/infodoc.c:58
+#, fuzzy
+msgid "\\%-10[move-to-next-xref] Skip to the next hypertext link.\n"
+msgstr " %-10s Skok na následující hypertextový odkaz v tomto uzlu.\n"
+
+#: info/infodoc.c:59
+#, fuzzy
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under the "
+"cursor.\n"
+msgstr " %-10s Následování hypertextového odkazu pod kurzorem.\n"
+
+#: info/infodoc.c:60
+#, fuzzy
+msgid "\\%-10[history-node] Go back to the last node seen in this window.\n"
+msgstr " %-10s Pøesun na poslední uzel zobrazený v tomto oknì.\n"
+
+#: info/infodoc.c:62
+#, fuzzy
+msgid "\\%-10[global-prev-node] Go to the previous node in the document.\n"
+msgstr " %-10s Pøesun na \"pøedchozí\" uzel tohoto uzlu.\n"
+
+#: info/infodoc.c:63
+#, fuzzy
+msgid "\\%-10[global-next-node] Go to the next node in the document.\n"
+msgstr " %-10s Pøesun na \"dal¹í\" uzel tohoto uzlu.\n"
+
+#: info/infodoc.c:64
+#, fuzzy
+msgid "\\%-10[prev-node] Go to the previous node on this level.\n"
+msgstr " %-10s Pøesun na \"pøedchozí\" uzel tohoto uzlu.\n"
+
+#: info/infodoc.c:65
+#, fuzzy
+msgid "\\%-10[next-node] Go to the next node on this level.\n"
+msgstr " %-10s Pøesun na \"dal¹í\" uzel tohoto uzlu.\n"
+
+#: info/infodoc.c:66
+#, fuzzy
+msgid "\\%-10[up-node] Go up one level.\n"
+msgstr " %-10s Pøesun \"nahoru\" z aktuálního uzlu.\n"
+
+#: info/infodoc.c:67
+#, fuzzy
+msgid "\\%-10[top-node] Go to the top node of this document.\n"
+msgstr " %-10s Pøesun na konec tohoto uzlu.\n"
+
+#: info/infodoc.c:68
+#, fuzzy
+msgid "\\%-10[dir-node] Go to the main `directory' node.\n"
+msgstr " %-10s Pøesun na konec tohoto uzlu.\n"
+
+#: info/infodoc.c:70
+#, fuzzy
+msgid "1...9 Pick the first...ninth item in this node's menu.\n"
+msgstr " %-10s Výbìr první ... deváté polo¾ky menu uzlu.\n"
+
+#: info/infodoc.c:71
+#, fuzzy
+msgid "\\%-10[last-menu-item] Pick the last item in this node's menu.\n"
+msgstr " %-10s Zobrazení poslední polo¾ky menu uzlu.\n"
+
+#: info/infodoc.c:72
+#, fuzzy
+msgid "\\%-10[menu-item] Pick a menu item specified by name.\n"
+msgstr " %-10s Vybrání polo¾ky menu zadané pomocí názvu.\n"
+
+#: info/infodoc.c:73
+#, fuzzy
+msgid "\\%-10[xref-item] Follow a cross reference specified by name.\n"
+msgstr " %-10s Následování køí¾ového odkazu. Ète název odkazu.\n"
+
+#: info/infodoc.c:74
+#, fuzzy
+msgid "\\%-10[goto-node] Go to a node specified by name.\n"
+msgstr " %-10s Pøesun na uzel zadaný pomocí jména.\n"
+
+#: info/infodoc.c:76
+#, fuzzy
+msgid "\\%-10[search] Search forward for a specified string.\n"
+msgstr " %-10s Hledání zadaného øetìzce v tomto Info souboru.\n"
+
+#: info/infodoc.c:77
+#, fuzzy
+msgid "\\%-10[search-previous] Search for previous occurrence.\n"
+msgstr " %-10s Pøesun na \"pøedchozí\" uzel tohoto uzlu.\n"
+
+#: info/infodoc.c:78
+#, fuzzy
+msgid "\\%-10[search-next] Search for next occurrence.\n"
+msgstr ""
+" %-10s Hledání zadaného øetìzce v rejstøíku tohoto Info souboru a výbìr\n"
+
+#: info/infodoc.c:79
+#, fuzzy
+msgid ""
+"\\%-10[index-search] Search for a specified string in the index, and\n"
+" select the node referenced by the first entry found.\n"
+msgstr " uzlu, na který ukazuje první nalezená polo¾ka.\n"
+
+#: info/infodoc.c:81
+#, fuzzy
+msgid "\\%-10[abort-key] Cancel the current operation.\n"
+msgstr "Zru¹ení aktuální operace"
+
+#: info/infodoc.c:89
+#, fuzzy
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr "Základní pøíkazy v Info oknech\n"
+
+#: info/infodoc.c:92
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s Ukonèení prohlí¾ení nápovìdy.\n"
+
+#: info/infodoc.c:93
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Celkové ukonèení Infa.\n"
+
+#: info/infodoc.c:94
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Vyvolání prùvodce Infem.\n"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr " %-10s Pøesun na \"dal¹í\" uzel tohoto uzlu.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr " %-10s Pøesun na \"pøedchozí\" uzel tohoto uzlu.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s Pøesun \"nahoru\" z aktuálního uzlu.\n"
+
+#: info/infodoc.c:101
+#, fuzzy, c-format
+msgid ""
+" %-10s Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr " Vybírání polo¾ky menu zpùsobí zobrazení tohoto uzlu.\n"
+
+#: info/infodoc.c:103
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr " %-10s Následování køí¾ového odkazu. Ète název odkazu.\n"
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr " %-10s Pøesun na poslední uzel zobrazený v tomto oknì.\n"
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr " %-10s Skok na následující hypertextový odkaz v tomto uzlu.\n"
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s Následování hypertextového odkazu pod kurzorem.\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr " %-10s Pøesun do `adresáøového' uzlu. Rovnocenné s `g (DIR)'.\n"
+
+#: info/infodoc.c:108
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr " %-10s Pøesun do nejvy¹¹ího (Top) uzlu. Rovnocenné s `g Top'.\n"
+
+#: info/infodoc.c:110
+#, fuzzy
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr "Pøesun uvnitø uzlu:\n"
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s Následující stránka.\n"
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s Pøedchozí stránka.\n"
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s Pøesun na zaèátek aktuálního uzlu.\n"
+
+#: info/infodoc.c:115
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s Pøesun na konec tohoto uzlu.\n"
+
+#: info/infodoc.c:116
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s Posun o jeden øádek dopøedu.\n"
+
+#: info/infodoc.c:117
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s Posun o jeden øádek dozadu.\n"
+
+#: info/infodoc.c:119
+#, fuzzy
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr "Dal¹í pøíkazy:\n"
+
+#: info/infodoc.c:121
+#, fuzzy, c-format
+msgid " %-10s Pick first...ninth item in node's menu.\n"
+msgstr " %-10s Výbìr první ... deváté polo¾ky menu uzlu.\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s Zobrazení poslední polo¾ky menu uzlu.\n"
+
+#: info/infodoc.c:125
+#, fuzzy, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr " uzlu, na který ukazuje první nalezená polo¾ka.\n"
+
+#: info/infodoc.c:127
+#, fuzzy, c-format
+msgid ""
+" %-10s Move to node specified by name.\n"
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr " Také mù¾ete zadat jméno souboru ve tvaru (SOUBOR)UZEL.\n"
+
+#: info/infodoc.c:129
+#, fuzzy, c-format
+msgid ""
+" %-10s Search forward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+" a zobrazení uzlu, ve kterém je nalezen dal¹í výskyt tohoto øetìzce.\n"
+
+#: info/infodoc.c:131
+#, fuzzy, c-format
+msgid ""
+" %-10s Search backward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+" a zobrazení uzlu, ve kterém je nalezen dal¹í výskyt tohoto øetìzce.\n"
+
+#: info/infodoc.c:312
+msgid "The current search path is:\n"
+msgstr "Aktuální hledací cesta je:\n"
+
+#: info/infodoc.c:316
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr "Pøíkazy dostupné v Info oknech:\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr "Pøíkazy dostupné v zobrazovacím poli:\n"
+
+#: info/infodoc.c:343
+#, fuzzy, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+"Následující pøíkazy mohou být vykonány pouze pomocí M-x:\n"
+"\n"
+
+#: info/infodoc.c:347
+#, fuzzy
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+"Následující pøíkazy mohou být vykonány pouze pomocí M-x:\n"
+"\n"
+
+#: info/infodoc.c:477
+msgid "Display help message"
+msgstr "Zobrazení nápovìdy"
+
+#: info/infodoc.c:495
+msgid "Visit Info node `(info)Help'"
+msgstr "Zobrazení Info uzlu `(info)Help'"
+
+#: info/infodoc.c:633
+msgid "Print documentation for KEY"
+msgstr "Zobrazení dokumentace ke KLÁVESE"
+
+#: info/infodoc.c:645
+#, c-format
+msgid "Describe key: %s"
+msgstr "Popis klávesy: %s"
+
+#: info/infodoc.c:656
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s je nedefinováno."
+
+#: info/infodoc.c:672 info/infodoc.c:701
+#, c-format
+msgid "%s is undefined."
+msgstr "%s je nedefinováno."
+
+#: info/infodoc.c:722
+#, c-format
+msgid "%s is defined to %s."
+msgstr "Klávesa %s je definována pro pøíkaz %s."
+
+#: info/infodoc.c:1146
+msgid "Show what to type to execute a given command"
+msgstr "Ukázání co napsat pro spu¹tìní daného pøíkazu"
+
+#: info/infodoc.c:1150
+msgid "Where is command: "
+msgstr "Kde je pøíkaz: "
+
+#: info/infodoc.c:1172
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "Pøíkaz `%s' není na ¾ádné klávese"
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "Pøíkaz %s mù¾e být vyvolán pouze pomocí %s."
+
+#: info/infodoc.c:1183
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "Pøíkaz %s mù¾e být vyvolán pomocí %s."
+
+#: info/infodoc.c:1188
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "Funkce `%s' není známa"
+
+# Udìlat patch na podtr¾ení
+#: info/infodoc.c:96
+#, fuzzy
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr "Výbìr dal¹ích uzlù:\n"
+
+#: info/infokey.c:170
+msgid "incorrect number of arguments"
+msgstr ""
+
+#: info/infokey.c:201
+#, fuzzy, c-format
+msgid "cannot open input file `%s'"
+msgstr "Rouru do `%s' nelze otevøít."
+
+#: info/infokey.c:215
+#, fuzzy, c-format
+msgid "cannot create output file `%s'"
+msgstr "Výstupní soubor `%s' nelze vytvoøit."
+
+#: info/infokey.c:226
+#, c-format
+msgid "error writing to `%s'"
+msgstr ""
+
+#: info/infokey.c:232
+#, fuzzy, c-format
+msgid "error closing output file `%s'"
+msgstr "Výstupní soubor `%s' nelze vytvoøit."
+
+#: info/infokey.c:450
+msgid "key sequence too long"
+msgstr ""
+
+#: info/infokey.c:529
+msgid "missing key sequence"
+msgstr ""
+
+#: info/infokey.c:610
+msgid "NUL character (\\000) not permitted"
+msgstr ""
+
+#: info/infokey.c:641
+#, c-format
+msgid "NUL character (^%c) not permitted"
+msgstr ""
+
+#: info/infokey.c:665
+#, fuzzy
+msgid "missing action name"
+msgstr "%c%s chybìjící uzavírací závorka"
+
+#: info/infokey.c:681 info/infokey.c:756
+msgid "section too long"
+msgstr ""
+
+#: info/infokey.c:688
+#, fuzzy, c-format
+msgid "unknown action `%s'"
+msgstr "Neznámý pøíkaz `%s'"
+
+#: info/infokey.c:698
+msgid "action name too long"
+msgstr ""
+
+#: info/infokey.c:712
+#, c-format
+msgid "extra characters following action `%s'"
+msgstr ""
+
+#: info/infokey.c:723
+#, fuzzy
+msgid "missing variable name"
+msgstr "%s: chybí argument jména souboru.\n"
+
+#: info/infokey.c:733
+msgid "missing `=' immediately after variable name"
+msgstr ""
+
+#: info/infokey.c:741
+msgid "variable name too long"
+msgstr ""
+
+#: info/infokey.c:765
+msgid "value too long"
+msgstr ""
+
+#: info/infokey.c:890
+#, c-format
+msgid "\"%s\", line %u: "
+msgstr ""
+
+#: info/infokey.c:906
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [INPUT-FILE]\n"
+"\n"
+"Compile infokey source file to infokey file. Reads INPUT-FILE (default\n"
+"$HOME/.infokey) and writes compiled key file to (by default) $HOME/.info.\n"
+"\n"
+"Options:\n"
+" --output FILE output to FILE instead of $HOME/.info\n"
+" --help display this help and exit.\n"
+" --version display version information and exit.\n"
+msgstr ""
+
+#: info/infomap.c:955
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr ""
+
+#: info/infomap.c:958
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr ""
+
+#: info/infomap.c:971
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr ""
+
+#: info/infomap.c:990
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:999
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1015
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1036
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1171
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr ""
+
+#: info/infomap.c:1221
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr ""
+
+#: info/m-x.c:68
+msgid "Read the name of an Info command and describe it"
+msgstr "Zadání jména pøíkazu a následné zobrazení jeho popisu"
+
+#: info/m-x.c:72
+msgid "Describe command: "
+msgstr "Popis pøíkazu: "
+
+#: info/m-x.c:95
+msgid "Read a command name in the echo area and execute it"
+msgstr "Zadání jména pøíkazu v zobrazovacím poli a jeho vykonání"
+
+#: info/m-x.c:139
+msgid "Cannot execute an `echo-area' command here."
+msgstr "Pøíkaz zobrazovacího pole nelze vykonat zde."
+
+#: info/m-x.c:153
+#, fuzzy, c-format
+msgid "Undefined command: %s"
+msgstr "Neznámý pøíkaz `%s'"
+
+#: info/m-x.c:159
+msgid "Set the height of the displayed window"
+msgstr "Nastavení vý¹ky obrazovky"
+
+#: info/m-x.c:172
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Vý¹ka obrazovky (%d): "
+
+#: info/makedoc.c:166 info/makedoc.c:174
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+"Pøi zpracování zdrojového souboru jsou vkládány tyto soubory:\n"
+"\n"
+
+#: info/makedoc.c:556
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "Se souborem %s nelze pracovat.\n"
+
+#: info/nodemenu.c:30
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+"\n"
+"* Menu:\n"
+" (Soubor)Uzel Øádkù Velikost Soubor\n"
+" ------------ ----- -------- ------"
+
+#: info/nodemenu.c:201
+msgid ""
+"Here is the menu of nodes you have recently visited.\n"
+"Select one from this menu, or use `\\[history-node]' in another window.\n"
+msgstr ""
+" Zde je seznam uzlù, které jste poslední dobou nav¹tívil. Vyberte jeden\n"
+"z tohoto menu, nebo u¾ijte `\\[history-node]' v tomto oknì.\n"
+
+#: info/nodemenu.c:223
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr "Vytvoøení okna obsahujícího menu v¹ech aktuálnì nav¹tívených uzlù"
+
+#: info/nodemenu.c:303
+msgid "Select a node which has been previously visited in a visible window"
+msgstr "Zobrazení uzlu, který byl zobrazen pøed tímto"
+
+#: info/nodemenu.c:316
+msgid "Select visited node: "
+msgstr "Vyberte nav¹tívený uzel: "
+
+#: info/nodemenu.c:336 info/session.c:2578
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "Odkaz se ztratil! (%s)."
+
+#: info/search.c:166
+#, c-format
+msgid "regexp error: %s"
+msgstr ""
+
+#: info/session.c:164
+#, c-format
+msgid ""
+"Welcome to Info version %s. Type \\[get-help-window] for help, \\[menu-item] "
+"for menu item."
+msgstr ""
+"Vítejte v programu Info verze %s. Stisknìte \\[get-help-window] pro "
+"nápovìdu, \\[menu-item] pro polo¾ku menu."
+
+#: info/session.c:625
+msgid "Move down to the next line"
+msgstr "Posun dolù na dal¹í øádek"
+
+#: info/session.c:661
+msgid "Move up to the previous line"
+msgstr "Posun nahoru na pøedchozí øádek"
+
+#: info/session.c:931
+msgid "Move to the end of the line"
+msgstr "Pøesun na konec øádku"
+
+#: info/session.c:942
+msgid "Move to the start of the line"
+msgstr "Pøesun na zaèátek øádku"
+
+#: info/session.c:1142
+msgid "Next"
+msgstr "Dal¹í"
+
+#: info/session.c:1158 info/session.c:1283
+msgid "No more nodes within this document."
+msgstr "V tomto dokumentu ji¾ nejsou dal¹í uzly."
+
+#: info/session.c:1309
+msgid "No `Prev' for this node."
+msgstr "Pro tento uzel není pøedchozí uzel."
+
+#: info/session.c:1329
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr "V tomto dokumentu není pro tento uzel pøedchozí nebo vy¹¹í uzel."
+
+#: info/session.c:1391
+msgid "Move forwards or down through node structure"
+msgstr "Pøesun na následující uzel nebo na první ni¾¹í v uzlové struktuøe"
+
+#: info/session.c:1407
+msgid "Move backwards or up through node structure"
+msgstr "Pøesun na pøedchozí uzel nebo na první vy¹¹í v uzlové struktuøe"
+
+#: info/session.c:1508
+msgid "Scroll forward in this window"
+msgstr "Posun o stránku dolù v tomto oknì"
+
+#: info/session.c:1516
+msgid "Scroll forward in this window and set default window size"
+msgstr "Posun dopøedu v tomto oknì a nastavení implicitní velikosti okna"
+
+#: info/session.c:1524
+#, fuzzy
+msgid "Scroll forward in this window staying within node"
+msgstr "Posun o stránku dolù v tomto oknì"
+
+#: info/session.c:1532
+#, fuzzy
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr "Posun dopøedu v tomto oknì a nastavení implicitní velikosti okna"
+
+#: info/session.c:1540
+msgid "Scroll backward in this window"
+msgstr "Posun o stránku nahoru v tomto oknì"
+
+#: info/session.c:1548
+msgid "Scroll backward in this window and set default window size"
+msgstr "Posun dozadu v tomto oknì a nastavení implicitní velikosti okna"
+
+#: info/session.c:1557
+#, fuzzy
+msgid "Scroll backward in this window staying within node"
+msgstr "Posun o stránku nahoru v tomto oknì"
+
+#: info/session.c:1565
+#, fuzzy
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr "Posun dozadu v tomto oknì a nastavení implicitní velikosti okna"
+
+#: info/session.c:1573
+msgid "Move to the start of this node"
+msgstr "Posun na zaèátek tohoto uzlu"
+
+#: info/session.c:1580
+msgid "Move to the end of this node"
+msgstr "Posun na konec tohoto uzlu"
+
+#: info/session.c:1587
+msgid "Scroll down by lines"
+msgstr "Posun dolù po øádcích"
+
+#: info/session.c:1604
+msgid "Scroll up by lines"
+msgstr "Posun nahoru po øádcích"
+
+#: info/session.c:1622
+msgid "Scroll down by half screen size"
+msgstr "Posun dolù o polovinu velikosti obrazovky"
+
+#: info/session.c:1648
+msgid "Scroll up by half screen size"
+msgstr "Posun nahoru o polovinu velikosti obrazovky"
+
+#: info/session.c:1677
+msgid "Select the next window"
+msgstr "Výbìr následujícího okna"
+
+#: info/session.c:1716
+msgid "Select the previous window"
+msgstr "Výbìr pøedchozího okna"
+
+#: info/session.c:1767
+msgid "Split the current window"
+msgstr "Rozdìlení aktuálního okna"
+
+#: info/session.c:1848
+msgid "Delete the current window"
+msgstr "Smazání aktuálního okna"
+
+#: info/session.c:1856
+msgid "Cannot delete a permanent window"
+msgstr "Permanentní okno nelze smazat"
+
+#: info/session.c:1888
+msgid "Delete all other windows"
+msgstr "Smazání v¹ech ostatních oknen"
+
+#: info/session.c:1934
+msgid "Scroll the other window"
+msgstr "Posun druhého okna o stránku dolù"
+
+#: info/session.c:1955
+msgid "Scroll the other window backward"
+msgstr "Posun druhého okna o stránku zpìt"
+
+#: info/session.c:1961
+msgid "Grow (or shrink) this window"
+msgstr "Zmìna velikosti okna"
+
+#: info/session.c:1972
+msgid "Divide the available screen space among the visible windows"
+msgstr "Zvìt¹ení nebo zmen¹ení oken na obrazovce tak, aby byla stejnì velká"
+
+#: info/session.c:1979
+msgid "Toggle the state of line wrapping in the current window"
+msgstr ""
+"Zmìna stavu zalamování v aktuálním oknì (zapnuto->vypni, vypnuto->zapni)"
+
+#: info/session.c:1986
+msgid "Toggle the usage of regular expressions in searches"
+msgstr ""
+
+#: info/session.c:1990
+msgid "Using regular expressions for searches."
+msgstr ""
+
+#: info/session.c:1991
+msgid "Using literal strings for searches."
+msgstr ""
+
+#: info/session.c:2162
+msgid "Select the Next node"
+msgstr "Zobrazení následujícího uzlu"
+
+#: info/session.c:2170
+msgid "Select the Prev node"
+msgstr "Zobrazení pøedchozího uzlu"
+
+#: info/session.c:2178
+msgid "Select the Up node"
+msgstr "Zobrazení vy¹¹ího uzlu"
+
+#: info/session.c:2185
+msgid "Select the last node in this file"
+msgstr "Zobrazení posledního uzlu v tomto souboru"
+
+#: info/session.c:2212 info/session.c:2245
+msgid "This window has no additional nodes"
+msgstr "Toto okno nemá více dal¹ích uzlù"
+
+#: info/session.c:2218
+msgid "Select the first node in this file"
+msgstr "Zobrazení prvního uzlu v tomto souboru"
+
+#: info/session.c:2252
+msgid "Select the last item in this node's menu"
+msgstr "Zobrazení poslední polo¾ky menu tohoto uzlu"
+
+#: info/session.c:2258
+msgid "Select this menu item"
+msgstr "Zobrazení této polo¾ky menu"
+
+#: info/session.c:2291
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "V tomto menu není %d. polo¾ka"
+
+#: info/session.c:2485 info/session.c:2486
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Polo¾ka menu (%s): "
+
+#: info/session.c:2489
+msgid "Menu item: "
+msgstr "Polo¾ka menu: "
+
+#: info/session.c:2496 info/session.c:2497
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Následování køí¾ového odkazu (%s): "
+
+#: info/session.c:2500
+msgid "Follow xref: "
+msgstr "Následování køí¾ového odkazu: "
+
+#: info/session.c:2629
+msgid "Read a menu item and select its node"
+msgstr "Zadání jména polo¾ky menu a následné zobrazení"
+
+#: info/session.c:2637
+msgid "Read a footnote or cross reference and select its node"
+msgstr ""
+"Zadání jména poznámky pod èarou nebo køí¾ového odkazu a následné zobrazení"
+
+#: info/session.c:2643
+msgid "Move to the start of this node's menu"
+msgstr "Pøesun na zaèátek menu tohoto uzlu"
+
+#: info/session.c:2667
+msgid "Visit as many menu items at once as possible"
+msgstr ""
+"Nav¹tívení tolika polo¾ek menu, kolik je mo¾no. Ka¾dá polo¾ka v jiném oknì."
+
+#: info/session.c:2695
+msgid "Read a node name and select it"
+msgstr "Zadání jména uzlu a jeho následné zobrazení"
+
+#: info/session.c:2750 info/session.c:2755
+msgid "Goto node: "
+msgstr "Pøesun na uzel: "
+
+#: info/session.c:2819
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "V uzlu `%s' není menu."
+
+#: info/session.c:2865
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "Polo¾ka menu `%s' v uzlu `%s' není."
+
+#: info/session.c:2895
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr "Uzel, na který se odkazuje `%s' v `%s', nelze najít."
+
+#: info/session.c:2945
+msgid "Read a list of menus starting from dir and follow them"
+msgstr "Ètení seznamu menu zaèínajíce v adresáøi a pokraèujíce dále"
+
+#: info/session.c:2947
+msgid "Follow menus: "
+msgstr "Následování menu: "
+
+#: info/session.c:3140
+msgid "Find the node describing program invocation"
+msgstr "Nalezení uzlu popisujícího pøepínaèe programu"
+
+#: info/session.c:3142
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "Nalezení uzlu s pøepínaèi programu [%s]: "
+
+#: info/session.c:3180
+msgid "Read a manpage reference and select it"
+msgstr "Zadání jména manuálové stránky a následné zobrazení"
+
+#: info/session.c:3184
+msgid "Get Manpage: "
+msgstr "Manuálová stránka: "
+
+#: info/session.c:3214
+msgid "Select the node `Top' in this file"
+msgstr "Zobrazení nejvy¹¹ího uzlu v tomto souboru"
+
+#: info/session.c:3220
+msgid "Select the node `(dir)'"
+msgstr "Zobrazení uzlu `(dir)'"
+
+#: info/session.c:3237 info/session.c:3239
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Zru¹ení uzlu (%s): "
+
+#: info/session.c:3291
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "Uzel `%s' nelze zru¹it"
+
+#: info/session.c:3301
+msgid "Cannot kill the last node"
+msgstr "Poslední uzel nelze zru¹it"
+
+#: info/session.c:3387
+msgid "Select the most recently selected node"
+msgstr "Zobrazení poslední dobou nejvíce nav¹tìvovaných uzlù"
+
+#: info/session.c:3393
+msgid "Kill this node"
+msgstr "Zru¹ení tohoto uzlu"
+
+#: info/session.c:3401
+msgid "Read the name of a file and select it"
+msgstr "Zadání jména souboru a jeho následné zobrazení"
+
+#: info/session.c:3405
+msgid "Find file: "
+msgstr "Nalezení souboru: "
+
+#: info/session.c:3422
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "Nelze najít `%s'."
+
+#: info/session.c:3465 info/session.c:3583
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "Výstupní soubor `%s' nelze vytvoøit."
+
+#: info/session.c:3479 info/session.c:3601 info/session.c:3661
+msgid "Done."
+msgstr "Dokonèeno."
+
+#: info/session.c:3534
+#, c-format
+msgid "Writing node %s..."
+msgstr "Zapisování uzlu %s..."
+
+#: info/session.c:3610
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr "Poslání obsahu tohoto uzlu pøíkazu INFO_PRINT_COMMAND"
+
+#: info/session.c:3645
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "Rouru do `%s' nelze otevøít."
+
+#: info/session.c:3651
+#, c-format
+msgid "Printing node %s..."
+msgstr "Probíhá tisk uzlu %s..."
+
+#: info/session.c:3900
+msgid "Search continued from the end of the document."
+msgstr ""
+
+#: info/session.c:3905
+#, fuzzy
+msgid "Search continued from the beginning of the document."
+msgstr "Smazání v¹eho od zaèátku øádku do kurzoru"
+
+#: info/session.c:3922
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "Probíhá hledání podsouboru %s..."
+
+#: info/session.c:3979
+msgid "Read a string and search for it case-sensitively"
+msgstr "Pøeètení øetìzce a jeho vyhledání (zále¾í na velikosti písmen)"
+
+#: info/session.c:3986
+msgid "Read a string and search for it"
+msgstr "Pøeètení øetìzce a jeho vyhledání"
+
+#: info/session.c:3994
+msgid "Read a string and search backward for it"
+msgstr "Pøeètení øetìzce a jeho vyhledání (zpìtné)"
+
+#: info/session.c:4030 info/session.c:4036
+#, fuzzy, c-format
+msgid "%s%s%s [%s]: "
+msgstr "%s%søetìzce [%s]: "
+
+#: info/session.c:4031 info/session.c:4037
+msgid "Regexp search"
+msgstr ""
+
+#: info/session.c:4032 info/session.c:4038
+#, fuzzy
+msgid " case-sensitively"
+msgstr " (velikost rozhoduje)"
+
+#: info/session.c:4033 info/session.c:4039
+#, fuzzy
+msgid " backward"
+msgstr "Zpìtné hledání"
+
+#: info/session.c:4037
+msgid "Search"
+msgstr "Hledání"
+
+#: info/session.c:4079
+msgid "Search failed."
+msgstr "Nebylo nalezeno."
+
+#: info/session.c:4097
+msgid "Repeat last search in the same direction"
+msgstr "Opakování posledního hledání tím samým smìrem"
+
+#: info/session.c:4100 info/session.c:4110
+msgid "No previous search string"
+msgstr "Není pøedchozí hledaný øetìzec"
+
+#: info/session.c:4107
+msgid "Repeat last search in the reverse direction"
+msgstr "Opakování posledního hledání opaèným smìrem"
+
+#: info/session.c:4126 info/session.c:4132
+msgid "Search interactively for a string as you type it"
+msgstr "Vyhledávání zadávaného øetìzce hned pøi zadávání"
+
+#: info/session.c:4212
+#, fuzzy
+msgid "Regexp I-search backward: "
+msgstr "zpìtné interaktivní hledání: "
+
+#: info/session.c:4213
+msgid "I-search backward: "
+msgstr "zpìtné interaktivní hledání: "
+
+#: info/session.c:4215
+#, fuzzy
+msgid "Regexp I-search: "
+msgstr "interaktivní hledání: "
+
+#: info/session.c:4216
+msgid "I-search: "
+msgstr "interaktivní hledání: "
+
+#: info/session.c:4241 info/session.c:4243
+msgid "Failing "
+msgstr "Bezvýsledné "
+
+#: info/session.c:4734
+msgid "Move to the previous cross reference"
+msgstr "Pøesun na pøedcházející køí¾ový odkaz"
+
+#: info/session.c:4752
+msgid "Move to the next cross reference"
+msgstr "Pøesun na následující køí¾ový odkaz"
+
+#: info/session.c:4774
+msgid "Select reference or menu item appearing on this line"
+msgstr "Zobrazení odkazu nebo polo¾ky menu, která je na tomto øádku"
+
+#: info/session.c:4797
+msgid "Cancel current operation"
+msgstr "Zru¹ení aktuální operace"
+
+#: info/session.c:4804
+msgid "Quit"
+msgstr "Ukonèení operace"
+
+#: info/session.c:4813
+msgid "Move the cursor to a specific line of the window"
+msgstr "Pøesun kurzoru na zadaný øádek okna"
+
+#: info/session.c:4845
+msgid "Redraw the display"
+msgstr "Pøekreslení obrazovky"
+
+#: info/session.c:4882
+msgid "Quit using Info"
+msgstr "Ukonèení Infa"
+
+#: info/session.c:4895
+msgid "Run command bound to this key's lowercase variant"
+msgstr ""
+
+#: info/session.c:4906
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "Neznámý pøíkaz (%s)."
+
+#: info/session.c:4909
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "Sekvence kláves \"%s\" je neplatná"
+
+#: info/session.c:4910
+#, fuzzy, c-format
+msgid "`%s' is invalid"
+msgstr "Sekvence kláves \"%s\" je neplatná"
+
+#: info/session.c:5125
+msgid "Add this digit to the current numeric argument"
+msgstr "Pøidání této èíslice do aktuálního èíselného argumentu"
+
+#: info/session.c:5134
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "Zaèátek (nebo dìlení ètyømi) aktuálního èíselného argumentu"
+
+#: info/session.c:5149
+msgid "Internally used by \\[universal-argument]"
+msgstr "Vnitønì u¾íváno funkcí \\[universal-argument]"
+
+#: info/tilde.c:336
+#, c-format
+msgid "readline: Out of virtual memory!\n"
+msgstr "readline: Nedostatek virtuální pamìti!\n"
+
+#: info/variables.c:37
+msgid "When \"On\", footnotes appear and disappear automatically"
+msgstr "Je-li zapnuto, pak se poznámky pod èarou objevují a mizí automaticky"
+
+#: info/variables.c:41
+msgid "When \"On\", creating or deleting a window resizes other windows"
+msgstr "Je-li zapnuto, vytvoøení a smazání okna, mìní velikost ostatních oken"
+
+#: info/variables.c:45
+msgid "When \"On\", flash the screen instead of ringing the bell"
+msgstr "Je-li zapnuto, pak místo varovného pípnutí blikne obrazovka"
+
+#: info/variables.c:49
+msgid "When \"On\", errors cause the bell to ring"
+msgstr "Je-li zapnuto, pak chyby zpùsobí varovné pípnutí"
+
+#: info/variables.c:53
+msgid "When \"On\", Info garbage collects files which had to be uncompressed"
+msgstr ""
+"Je-li zapnuto, pak Info zapomíná odkomprimovanou èást komprimovaných souborù"
+
+#: info/variables.c:56
+msgid "When \"On\", the portion of the matched search string is highlighted"
+msgstr "Je-li zapnuto, pak je hledaný øetìzec v nalezeném výrazu zvýraznìn"
+
+#: info/variables.c:60
+msgid "Controls what happens when scrolling is requested at the end of a node"
+msgstr "Øídí co se stane, kdy¾ je po¾adován posun o stranu na konci uzlu"
+
+#: info/variables.c:65
+msgid "Same as scroll-behaviour"
+msgstr ""
+
+#: info/variables.c:69
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr ""
+"Poèet øádkù, o které posunout okno, kdy¾ se kurzor dostane mimo viditelnou "
+"èást"
+
+#: info/variables.c:73
+msgid "Controls whether scroll-behavior affects cursor movement commands"
+msgstr ""
+
+#: info/variables.c:77
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr "Je-li zapnuto, pak Info akceptuje a zobrazuje znaky z normy ISO Latin"
+
+#: info/variables.c:81
+#, fuzzy
+msgid ""
+"What to do when a scrolling command is issued at the end of the last node"
+msgstr "Øídí co se stane, kdy¾ je po¾adován posun o stranu na konci uzlu"
+
+#: info/variables.c:88
+msgid "Explain the use of a variable"
+msgstr "Zobrazení popisu promìnné"
+
+#: info/variables.c:94
+msgid "Describe variable: "
+msgstr "Popis promìnné: "
+
+#: info/variables.c:113
+msgid "Set the value of an Info variable"
+msgstr "Nastavení hodnoty Info promìnné"
+
+#: info/variables.c:119
+msgid "Set variable: "
+msgstr "Nastavení promìnné: "
+
+#: info/variables.c:137
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "Nastavení promìnné %s na hodnotu (%d): "
+
+#: info/variables.c:178
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "Nastavení promìnné %s na hodnotu (%s): "
+
+#: info/window.c:1026
+msgid "--*** Tags out of Date ***"
+msgstr "--*** Znaèky jsou zastatalé ***"
+
+#: info/window.c:1037
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), øádkù ----, "
+
+#: info/window.c:1044
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, øádkù: %d --%s--"
+
+#: info/window.c:1048
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, øádkù: %d --%s--"
+
+#: info/window.c:1055
+#, c-format
+msgid " Subfile: %s"
+msgstr " Podsoubor: %s"
+
+#: install-info/install-info.c:221
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: varování: "
+
+#: install-info/install-info.c:270
+#, c-format
+msgid " for %s"
+msgstr " pro %s"
+
+#: install-info/install-info.c:500
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr "Více informací získáte pøíkazem `%s --help'.\n"
+
+#: install-info/install-info.c:508
+#, fuzzy, c-format
+msgid "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+msgstr "Pou¾ití: %s [PØEPÍNAÈ]... SOUBOR...\n"
+
+#: install-info/install-info.c:510
+msgid "Add or remove entries in INFO-FILE from the Info directory DIR-FILE."
+msgstr ""
+
+#: install-info/install-info.c:513
+msgid ""
+"Options:\n"
+" --debug report what is being done.\n"
+" --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+" don't insert any new entries.\n"
+" --description=TEXT the description of the entry is TEXT; used with\n"
+" the --name option to become synonymous with the\n"
+" --entry option.\n"
+" --dir-file=NAME specify file name of Info directory file;\n"
+" equivalent to using the DIR-FILE argument.\n"
+" --dry-run same as --test."
+msgstr ""
+
+#: install-info/install-info.c:525
+msgid ""
+" --entry=TEXT insert TEXT as an Info directory entry.\n"
+" TEXT is written as an Info menu item line followed\n"
+" by zero or more extra lines starting with "
+"whitespace.\n"
+" If you specify more than one entry, all are added.\n"
+" If you don't specify any entries, they are determined\n"
+" from information in the Info file itself.\n"
+" When removing, TEXT specifies the entry to remove.\n"
+" TEXT is only removed as a last resort, if the\n"
+" entry as determined from the Info file is not "
+"present,\n"
+" and the basename of the Info file isn't found either."
+msgstr ""
+
+#: install-info/install-info.c:537
+msgid ""
+" --help display this help and exit.\n"
+" --info-dir=DIR same as --dir-file=DIR/dir.\n"
+" --info-file=FILE specify Info file to install in the directory;\n"
+" equivalent to using the INFO-FILE argument.\n"
+" --item=TEXT same as --entry=TEXT.\n"
+" --keep-old do not replace entries, or remove empty sections.\n"
+" --menuentry=TEXT same as --name=TEXT.\n"
+" --name=TEXT the name of the entry is TEXT; used with --description\n"
+" to become synonymous with the --entry option.\n"
+" --no-indent do not format new entries in the DIR file.\n"
+" --quiet suppress warnings."
+msgstr ""
+
+#: install-info/install-info.c:550
+msgid ""
+" --regex=R put this file's entries in all sections that match the\n"
+" regular expression R (ignoring case).\n"
+" --remove same as --delete.\n"
+" --remove-exactly only remove if the info file name matches exactly;\n"
+" suffixes such as .info and .gz are not ignored.\n"
+" --section=SEC put entries in section SEC of the directory.\n"
+" If you specify more than one section, all the entries\n"
+" are added in each of the sections.\n"
+" If you don't specify any sections, they are "
+"determined\n"
+" from information in the Info file itself.\n"
+" --section R SEC equivalent to --regex=R --section=SEC --add-once."
+msgstr ""
+
+#: install-info/install-info.c:563
+msgid ""
+" --silent suppress warnings.\n"
+" --test suppress updating of DIR-FILE.\n"
+" --version display version information and exit."
+msgstr ""
+
+#: install-info/install-info.c:570
+#, fuzzy
+msgid ""
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+" Chyby v programu oznamujte na adrese <bug-texinfo@gnu.org> (pouze "
+"anglicky),\n"
+"obecné otázky smìøujte na <help-texinfo@gnu.org>. Pøipomínky k pøekladu\n"
+"zasílejte na <cs@li.org> (èesky).\n"
+
+#: install-info/install-info.c:597
+#, fuzzy, c-format
+msgid ""
+"This is the file .../info/dir, which contains the\n"
+"topmost node of the Info hierarchy, called (dir)Top.\n"
+"The first time you invoke Info you start off looking at this node.\n"
+"\n"
+"%s\tThis is the top of the INFO tree\n"
+"\n"
+" This (the Directory node) gives a menu of major topics.\n"
+" Typing \"q\" exits, \"?\" lists all Info commands, \"d\" returns here,\n"
+" \"h\" gives a primer for first-timers,\n"
+" \"mEmacs<Return>\" visits the Emacs manual, etc.\n"
+"\n"
+" In Emacs, you can click mouse button 2 on a menu item or cross reference\n"
+" to select it.\n"
+"\n"
+"%s\n"
+msgstr ""
+" Toto je soubor .../info/dir, který obsahuje nejvy¹¹í uzly hierarchie\n"
+"Info dokumentù a je nazýván (dir)Top. Kdy¾ poprvé spustíte Info dostanete\n"
+"se do tohoto uzlu.\n"
+"\n"
+"%s Toto je vrchol INFO stromu\n"
+"\n"
+" Tento (Adresáøový uzel) obsahuje menu hlavních témat.\n"
+" Stiskem \"q\" Info ukonèíte, stiskem \"?\" získáte seznam v¹ech Info "
+"pøíkazù,\n"
+" stiskem \"d\" se vrátíte sem, stiskem \"h\" získáte nápovìdu pro "
+"zaèáteèníky,\n"
+" napsáním \"mEmacs\" si zobrazíte manuál k Emacsu, atd.\n"
+"\n"
+" Pokud chcete v Emacsu zobrazit obsah polo¾ky menu nebo následovat "
+"køí¾ový\n"
+" odkaz, mù¾ete to provést kliknutím prostøedním tlaèítkem my¹i.\n"
+"\n"
+"* Menu:\n"
+
+#: install-info/install-info.c:622
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr "%s: %s nelze èíst a %s nelze vytvoøit\n"
+
+#: install-info/install-info.c:715
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: prázdný soubor"
+
+#: install-info/install-info.c:1046 install-info/install-info.c:1086
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "START-INFO-DIR-ENTRY bez odpovídajícího END-INFO-DIR-ENTRY"
+
+#: install-info/install-info.c:1081
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "END-INFO-DIR-ENTRY bez pøedchozího START-INFO-DIR-ENTRY"
+
+#: install-info/install-info.c:1946 install-info/install-info.c:1956
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr ""
+
+#: install-info/install-info.c:2036
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: Info soubor zadejte pouze jednou.\n"
+
+#: install-info/install-info.c:2069
+#, c-format
+msgid "Extra regular expression specified, ignoring `%s'"
+msgstr ""
+
+#: install-info/install-info.c:2081
+#, c-format
+msgid "Error in regular expression `%s': %s"
+msgstr ""
+
+#: install-info/install-info.c:2139
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "nadbyteèný argument `%s' v pøíkazovém øádku"
+
+#: install-info/install-info.c:2143
+msgid "No input file specified; try --help for more information."
+msgstr ""
+"Vstupní soubor nezadán; pou¾itím pøepínaèe --help získáte bli¾¹í informace."
+
+#: install-info/install-info.c:2146
+msgid "No dir file specified; try --help for more information."
+msgstr ""
+"Adresáø nebyl zadán; pou¾itím pøepínaèe `--help' získáte bli¾¹í informace"
+
+#: install-info/install-info.c:2288
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "v Info adresáøi `%s' není ¾ádná polo¾ka"
+
+#: install-info/install-info.c:2536
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "pro `%s' nebyly nalezeny ¾ádné polo¾ky"
+
+#: lib/xexit.c:54
+msgid "ferror on stdout\n"
+msgstr ""
+
+#: lib/xexit.c:59
+msgid "fflush error on stdout\n"
+msgstr ""
+
+#: makeinfo/cmds.c:582 makeinfo/cmds.c:604
+#, fuzzy, c-format
+msgid "arguments to @%s ignored"
+msgstr "©patný argument pro %c%s"
+
+#: makeinfo/cmds.c:779
+msgid "January"
+msgstr "Leden"
+
+#: makeinfo/cmds.c:779
+msgid "February"
+msgstr "Únor"
+
+#: makeinfo/cmds.c:779
+msgid "March"
+msgstr "Bøezen"
+
+#: makeinfo/cmds.c:779
+msgid "April"
+msgstr "Duben"
+
+#: makeinfo/cmds.c:779
+msgid "May"
+msgstr "Kvìten"
+
+#: makeinfo/cmds.c:780
+msgid "June"
+msgstr "Èerven"
+
+#: makeinfo/cmds.c:780
+msgid "July"
+msgstr "Èervenec"
+
+#: makeinfo/cmds.c:780
+msgid "August"
+msgstr "Srpen"
+
+#: makeinfo/cmds.c:780
+msgid "September"
+msgstr "Záøí"
+
+#: makeinfo/cmds.c:780
+msgid "October"
+msgstr "Øíjen"
+
+#: makeinfo/cmds.c:781
+msgid "November"
+msgstr "Listopad"
+
+#: makeinfo/cmds.c:781
+msgid "December"
+msgstr "Prosinec"
+
+#: makeinfo/cmds.c:1131
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "nepravdìpodobný znak %c ve @var"
+
+#: makeinfo/cmds.c:1174
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "@sc argument je celý velkými písmeny, zbyteènì"
+
+#: makeinfo/cmds.c:1229
+#, fuzzy, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "`@end' vy¾aduje `%s', ale vidí `%s'"
+
+#: makeinfo/cmds.c:1269
+msgid "end of file inside verb block"
+msgstr ""
+
+#: makeinfo/cmds.c:1277
+#, fuzzy, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "`@end' vy¾aduje `%s', ale vidí `%s'"
+
+#: makeinfo/cmds.c:1308
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+
+#: makeinfo/cmds.c:1504
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "Pøíkaz %c%s je zastaralý"
+
+#: makeinfo/cmds.c:1612
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "@sp vy¾aduje kladný èíselný argument a ne `%s'"
+
+#: makeinfo/cmds.c:2023 makeinfo/footnote.c:81
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "©patný argument pro %c%s"
+
+#: makeinfo/cmds.c:2033 makeinfo/makeinfo.c:4317
+msgid "asis"
+msgstr "asis"
+
+#: makeinfo/cmds.c:2035 makeinfo/cmds.c:2065 makeinfo/makeinfo.c:4319
+msgid "none"
+msgstr "none"
+
+#: makeinfo/cmds.c:2049
+#, fuzzy, c-format
+msgid "Bad argument to @%s"
+msgstr "©patný argument pro %c%s"
+
+#: makeinfo/cmds.c:2063
+msgid "insert"
+msgstr ""
+
+#: makeinfo/cmds.c:2079
+#, fuzzy, c-format
+msgid "Bad argument to @%s: %s"
+msgstr "©patný argument pro %c%s"
+
+#: makeinfo/cmds.c:2162
+#, c-format
+msgid "Expected @%s on or off, not `%s'"
+msgstr ""
+
+#: makeinfo/cmds.c:2182
+#, c-format
+msgid "Only @%s 10 or 11 is supported, not `%s'"
+msgstr ""
+
+#: makeinfo/defun.c:83
+msgid "Missing `}' in @def arg"
+msgstr "Chybìjící `}' v argumentu @def"
+
+#: makeinfo/defun.c:711
+#, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr ""
+
+#: makeinfo/files.c:434
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:637
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr ""
+
+#: makeinfo/files.c:645
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr ""
+
+#: makeinfo/files.c:693
+msgid "Output buffer not empty."
+msgstr ""
+
+#: makeinfo/float.c:181
+#, c-format
+msgid "Requested float type `%s' not previously used"
+msgstr ""
+
+#: makeinfo/float.c:376 makeinfo/float.c:382 makeinfo/index.c:959
+#: makeinfo/index.c:965
+msgid "See "
+msgstr "Viz"
+
+#: makeinfo/footnote.c:149
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "`%c%s' potøebuje argument `{...}' a ne pouze `%s'"
+
+#: makeinfo/footnote.c:164
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "Chybí uzavírací závorka pro poznámku pod èarou `%s'"
+
+#: makeinfo/footnote.c:197
+msgid "Footnote defined without parent node"
+msgstr "Poznámka pod èarou definována bez rodièovského uzlu"
+
+#: makeinfo/footnote.c:209
+#, fuzzy
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "Poznámka pod èarou definována bez rodièovského uzlu"
+
+#: makeinfo/footnote.c:301 makeinfo/index.c:187
+msgid "Footnotes"
+msgstr "Poznámky pod èarou"
+
+#: makeinfo/html.c:91
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr ""
+
+#: makeinfo/html.c:180
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr ""
+
+#: makeinfo/html.c:426
+msgid "[unexpected] no html tag to pop"
+msgstr ""
+
+#: makeinfo/html.c:800
+#, fuzzy, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "%s: neznámý pøepínaè `--%s'\n"
+
+#: makeinfo/index.c:167
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "Neznámý rejstøík `%s'"
+
+#: makeinfo/index.c:232
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr ""
+
+#: makeinfo/index.c:410
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "Rejstøík `%s' ji¾ existuje"
+
+#: makeinfo/index.c:453
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "Neznámý rejstøík `%s' a/nebo `%s' v @synindex"
+
+#: makeinfo/index.c:676
+msgid "(line )"
+msgstr ""
+
+#: makeinfo/index.c:684
+#, c-format
+msgid "(line %*d)"
+msgstr ""
+
+#: makeinfo/index.c:765
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "Neznámý rejstøík `%s' v @printindex"
+
+#: makeinfo/index.c:834
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "Polo¾ka pro rejstøík `%s' je mimo v¹echny uzly"
+
+#: makeinfo/index.c:837 makeinfo/index.c:873
+msgid "(outside of any node)"
+msgstr "(mimo v¹echny uzly)"
+
+#: makeinfo/insertion.c:161
+msgid "@item not allowed in argument to @itemize"
+msgstr ""
+
+#: makeinfo/insertion.c:242
+msgid "Broken-Type in insertion_type_pname"
+msgstr "Chybný typ v insertion_type_pname"
+
+#: makeinfo/insertion.c:338
+msgid "Enumeration stack overflow"
+msgstr "Výpoèetní zásobník pøetekl"
+
+#: makeinfo/insertion.c:370
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "písmenkování pøeteklo, znovu zaèínám na %c"
+
+#: makeinfo/insertion.c:639
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s vy¾aduje argument : formátovaè pro %citem"
+
+#: makeinfo/insertion.c:727
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr ""
+
+#: makeinfo/insertion.c:981
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "`@end' vy¾aduje `%s', ale vidí `%s'"
+
+#: makeinfo/insertion.c:1349
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "Chybí odpovídající `%cend %s'"
+
+#: makeinfo/insertion.c:1618
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s vy¾aduje písmeno nebo èíslici"
+
+#: makeinfo/insertion.c:1718
+msgid "end of file inside verbatim block"
+msgstr ""
+
+#: makeinfo/insertion.c:1942
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "@%s není myslitelné uvnitø `@%s' bloku"
+
+#: makeinfo/insertion.c:1978
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "@menu spatøeno pøed prvním @node, vytvoøen uzel `Top'"
+
+#: makeinfo/insertion.c:1979
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr ""
+"proto¾e vá¹ uzel @top by mìl být uzavøen v @ifnottex spí¹e ne¾ v @ifinfo?"
+
+#: makeinfo/insertion.c:1991
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "@detailmenu spatøeno pøed prvním uzlem, vytvoøen uzel `Top'"
+
+#: makeinfo/insertion.c:2047
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr ""
+
+#: makeinfo/insertion.c:2061
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "@%s není myslitelné uvnitø `@%s' bloku"
+
+#: makeinfo/insertion.c:2092
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "Nepárový `%c%s'"
+
+#: makeinfo/insertion.c:2097
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "`%c%s' potøebuje nìjaký argument"
+
+#: makeinfo/insertion.c:2103
+#, fuzzy, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "Chybný argument pro `%s', `%s', pou¾ívám `%s'"
+
+#: makeinfo/insertion.c:2200
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "@%s není myslitelné uvnitø `@%s' bloku"
+
+#: makeinfo/insertion.c:2209
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "@itemx není myslitelný uvnitø `%s' bloku"
+
+#: makeinfo/insertion.c:2383
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "%c%s nalezen mimo vkládaný blok"
+
+#: makeinfo/lang.c:1218
+#, c-format
+msgid "no default territory known for language `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:1281
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr "%s není platný kód jazyka (podle ISO 639)"
+
+#: makeinfo/lang.c:1399
+#, fuzzy, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "%s: neznámý pøepínaè `--%s'\n"
+
+#: makeinfo/lang.c:1407
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr ""
+
+#: makeinfo/lang.c:1492
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:1800
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr "%c%s vy¾aduje `i' nebo `j' jako argument, ne `%c'"
+
+#: makeinfo/lang.c:1804
+#, c-format
+msgid "%c%s expects a single character `i' or `j' as argument"
+msgstr "%c%s vy¾aduje jeden znak `i' nebo `j' jako argument"
+
+#: makeinfo/macro.c:128
+#, c-format
+msgid "macro `%s' previously defined"
+msgstr "makro `%s' ji¾ bylo definováno"
+
+#: makeinfo/macro.c:132
+#, c-format
+msgid "here is the previous definition of `%s'"
+msgstr "zde je pøedchozí definice `%s'"
+
+#: makeinfo/macro.c:359
+#, fuzzy, c-format
+msgid "\\ in macro expansion followed by `%s' instead of parameter name"
+msgstr "\\ pøi expanzi makra následováno `%s' místo \\ nebo jména parametru"
+
+#: makeinfo/macro.c:401
+#, c-format
+msgid "Macro `%s' called on line %d with too many args"
+msgstr "Makro `%s' volané na øádku %d s pøíli¹ mnoha argumenty"
+
+#: makeinfo/macro.c:580
+#, c-format
+msgid "%cend macro not found"
+msgstr "%cend makro nebylo nalezeno"
+
+#: makeinfo/macro.c:591
+msgid "@allow-recursion is deprecated; please use @rmacro instead"
+msgstr ""
+
+#: makeinfo/macro.c:606
+msgid "@quote-arg is deprecated; arguments are quoted by default"
+msgstr ""
+
+#: makeinfo/macro.c:649
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "pomíchané @end %s s @%s"
+
+#: makeinfo/makeinfo.c:188
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "Pøíli¹ mnoho chyb! Konec.\n"
+
+#: makeinfo/makeinfo.c:306
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: varování: "
+
+#: makeinfo/makeinfo.c:325 makeinfo/makeinfo.c:2340
+#, c-format
+msgid "Misplaced %c"
+msgstr "©patnì umístìný znak %c"
+
+#: makeinfo/makeinfo.c:344
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Více informací získáte pøíkazem `%s --help'.\n"
+
+#: makeinfo/makeinfo.c:347
+#, fuzzy, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "Pou¾ití: %s [PØEPÍNAÈ]... SOUBOR...\n"
+
+#: makeinfo/makeinfo.c:350
+msgid ""
+"Translate Texinfo source documentation to various other formats, by default\n"
+"Info files suitable for reading online with Emacs or standalone GNU Info.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:354
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\n"
+" --document-language=STR locale to use in translating Texinfo keywords\n"
+" for the output document (default C).\n"
+" --force preserve output even if errors.\n"
+" --help display this help and exit.\n"
+" --no-validate suppress node cross-reference validation.\n"
+" --no-warn suppress warnings (but not errors).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:369
+#, no-wrap
+msgid ""
+"Output format selection (default is to produce Info):\n"
+" --docbook output Docbook XML rather than Info.\n"
+" --html output HTML rather than Info.\n"
+" --xml output Texinfo XML rather than Info.\n"
+" --plaintext output plain text rather than Info.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:377
+msgid ""
+"General output options:\n"
+" -E, --macro-expand=FILE output macro-expanded source to FILE,\n"
+" ignoring any @setfilename.\n"
+" --no-headers suppress node separators, Node: lines, and "
+"menus\n"
+" from Info output (thus producing plain "
+"text)\n"
+" or from HTML (thus producing shorter "
+"output);\n"
+" also, write to standard output by default.\n"
+" --no-split suppress the splitting of Info or HTML "
+"output,\n"
+" generate only one output file.\n"
+" --number-sections output chapter and sectioning numbers.\n"
+" -o, --output=FILE output to FILE (or directory if split HTML).\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:391
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --disable-encoding do not output accented and special characters\n"
+" in Info output based on @documentencoding.\n"
+" --enable-encoding override --disable-encoding (default).\n"
+" --fill-column=NUM break Info lines at NUM characters (default %"
+"d).\n"
+" --footnote-style=STYLE output footnotes in Info according to STYLE:\n"
+" `separate' to put them in their own node;\n"
+" `end' to put them at the end of the node, "
+"in\n"
+" which they are defined (this is the "
+"default).\n"
+" --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %"
+"d).\n"
+" If VAL is `none', do not indent; if VAL is\n"
+" `asis', preserve existing indentation.\n"
+" --split-size=NUM split Info files at size NUM (default %d).\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:409
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+" --css-ref=URL generate reference to a CSS file.\n"
+" --internal-links=FILE produce list of internal links in FILE.\n"
+" --transliterate-file-names\n"
+" produce file names in ASCII transliteration.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:419
+#, c-format
+msgid ""
+"Options for XML and Docbook:\n"
+" --output-indent=VAL indent XML elements by VAL spaces (default %"
+"d).\n"
+" If VAL is 0, ignorable whitespace is "
+"dropped.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:426
+msgid ""
+"Input file options:\n"
+" --commands-in-node-names allow @ commands in node names.\n"
+" -D VAR define the variable VAR, as with @set.\n"
+" -I DIR append DIR to the @include search path.\n"
+" -P DIR prepend DIR to the @include search path.\n"
+" -U VAR undefine the variable VAR, as with @clear.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:435
+msgid ""
+"Conditional processing in input:\n"
+" --ifdocbook process @ifdocbook and @docbook even if\n"
+" not generating Docbook.\n"
+" --ifhtml process @ifhtml and @html even if not generating HTML.\n"
+" --ifinfo process @ifinfo even if not generating Info.\n"
+" --ifplaintext process @ifplaintext even if not generating plain text.\n"
+" --iftex process @iftex and @tex; implies --no-split.\n"
+" --ifxml process @ifxml and @xml.\n"
+" --no-ifdocbook do not process @ifdocbook and @docbook text.\n"
+" --no-ifhtml do not process @ifhtml and @html text.\n"
+" --no-ifinfo do not process @ifinfo text.\n"
+" --no-ifplaintext do not process @ifplaintext text.\n"
+" --no-iftex do not process @iftex and @tex text.\n"
+" --no-ifxml do not process @ifxml and @xml text.\n"
+"\n"
+" Also, for the --no-ifFORMAT options, do process @ifnotFORMAT text.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:454
+msgid ""
+" The defaults for the @if... conditionals depend on the output format:\n"
+" if generating HTML, --ifhtml is on and the others are off;\n"
+" if generating Info, --ifinfo is on and the others are off;\n"
+" if generating plain text, --ifplaintext is on and the others are off;\n"
+" if generating XML, --ifxml is on and the others are off.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:462
+#, fuzzy
+msgid ""
+"Examples:\n"
+" makeinfo foo.texi write Info to foo's @setfilename\n"
+" makeinfo --html foo.texi write HTML to @setfilename\n"
+" makeinfo --xml foo.texi write Texinfo XML to @setfilename\n"
+" makeinfo --docbook foo.texi write DocBook XML to @setfilename\n"
+" makeinfo --no-headers foo.texi write plain text to standard "
+"output\n"
+"\n"
+" makeinfo --html --no-headers foo.texi write html without node lines, "
+"menus\n"
+" makeinfo --number-sections foo.texi write Info with numbered sections\n"
+" makeinfo --no-split foo.texi write one Info file however big\n"
+msgstr ""
+"\n"
+" Implicitní nastavení pro podmínky @if... zále¾í na výstupním formátu:\n"
+"pøi generování HTML je zapnut pøepínaè --ifhtml a ostatní jsou vypnuty;\n"
+"pøi generování Info souboru nebo èistého textu je zapnut pøepínaè --ifinfo\n"
+"a ostatní jsou vypnuty.\n"
+"\n"
+"Pøíklady:\n"
+" makeinfo foo.texi zapí¹e Info do souboru urèeného\n"
+" pomocí @setfilename ve foo.texi\n"
+" makeinfo --html foo.texi zapí¹e HTML do souboru urèeného\n"
+" pomocí @setfilename ve foo.texi\n"
+" makeinfo --no-headers -o - foo.texi vypí¹e èistý text na standardní "
+"výstup\n"
+" makeinfo --number-sections foo.texi zapí¹e Info s èíslovanými sekcemi\n"
+" makeinfo --no-split foo.texi zapí¹e jeden Info soubor jakkoliv "
+"velký\n"
+"\n"
+" Chyby v programu oznamujte na adrese <bug-texinfo@gnu.org> (pouze "
+"anglicky),\n"
+"obecné otázky smìøujte na <help-texinfo@gnu.org>. Pøipomínky k pøekladu\n"
+"zasílejte na <cs@li.org> (èesky)."
+
+#: makeinfo/makeinfo.c:622
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:670 makeinfo/makeinfo.c:696 makeinfo/makeinfo.c:720
+#: makeinfo/makeinfo.c:780
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr "%s: %s argument musí být èíslo ne `%s'.\n"
+
+#: makeinfo/makeinfo.c:683
+#, fuzzy, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "Výstup %s pro expanzi makra nelze otevøít"
+
+#: makeinfo/makeinfo.c:688
+#, fuzzy, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "Výstup %s pro expanzi makra nelze otevøít"
+
+#: makeinfo/makeinfo.c:733
+#, fuzzy, c-format
+msgid "%s: could not open internal links output `%s'"
+msgstr "Výstup %s pro expanzi makra nelze otevøít"
+
+#: makeinfo/makeinfo.c:738
+#, fuzzy, c-format
+msgid "%s: ignoring second internal links output `%s'.\n"
+msgstr "Výstup %s pro expanzi makra nelze otevøít"
+
+#: makeinfo/makeinfo.c:751
+#, c-format
+msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
+msgstr ""
+"%s: argument pro --paragraph-indent musí být èíslo|`none'|`asis', ale ne `%"
+"s'.\n"
+
+#: makeinfo/makeinfo.c:769
+#, c-format
+msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
+msgstr ""
+"%s: argument k --footnote-style musí být `separate'|`end', ale ne `%s'.\n"
+
+#: makeinfo/makeinfo.c:844
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: chybí argument jména souboru.\n"
+
+#: makeinfo/makeinfo.c:1041 makeinfo/makeinfo.c:4166
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1044
+#, c-format
+msgid "Expected `%s'"
+msgstr "Oèekáváno `%s'"
+
+#: makeinfo/makeinfo.c:1521
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1567
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "Soubor `%s' nenalezen v `%s'"
+
+#: makeinfo/makeinfo.c:1647
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr ""
+"%s: Vynechávám expanzi makra na stdout a expanze jde jako Info výstup.\n"
+
+#: makeinfo/makeinfo.c:1677
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "Vytváøím %s soubor `%s' ze souboru `%s'.\n"
+
+#: makeinfo/makeinfo.c:1744
+#, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: Výstupní soubor maker `%s' byl odstranìn, proto¾e byly nalezeny chyby;\n"
+"u¾ijte pøepínaè --force k ponechání souboru.\n"
+
+#: makeinfo/makeinfo.c:1799
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: Výstupní soubor `%s' byl odstranìn, proto¾e byly nalezeny chyby;\n"
+"u¾ijte pøepínaè --force k ponechání souboru.\n"
+
+#: makeinfo/makeinfo.c:1818
+#, fuzzy, c-format
+msgid ""
+"%s: Removing internal links output file `%s' due to errors; use --force to "
+"preserve.\n"
+msgstr ""
+"%s: Výstupní soubor `%s' byl odstranìn, proto¾e byly nalezeny chyby;\n"
+"u¾ijte pøepínaè --force k ponechání souboru.\n"
+
+#: makeinfo/makeinfo.c:2113
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "Neznámý pøíkaz `%s'"
+
+#: makeinfo/makeinfo.c:2135
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr "Pou¾ijte závorky k zadání pøíkazu jako argumentu @%s"
+
+#: makeinfo/makeinfo.c:2394
+#, fuzzy, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s oèekáváno `{...}'"
+
+#: makeinfo/makeinfo.c:2407
+msgid "Unmatched }"
+msgstr "Nepárová }"
+
+#: makeinfo/makeinfo.c:2455
+msgid "NO_NAME!"
+msgstr "Funkce neexistuje!"
+
+#: makeinfo/makeinfo.c:2476
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s chybìjící uzavírací závorka"
+
+#: makeinfo/makeinfo.c:3482
+#, fuzzy, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "soubor `%s' v pøíkazu @image je neèitelný: %s"
+
+#: makeinfo/makeinfo.c:3488
+#, fuzzy, c-format
+msgid "No such file `%s'"
+msgstr "Soubor `%s' nenalezen v `%s'"
+
+#: makeinfo/makeinfo.c:3624
+#, fuzzy, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "soubor `%s' v pøíkazu @image je neèitelný: %s"
+
+#: makeinfo/makeinfo.c:3633
+msgid "@image missing filename argument"
+msgstr "pøíkaz @image postrádá jméno souboru"
+
+#: makeinfo/makeinfo.c:3851
+#, c-format
+msgid "undefined flag: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3852
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{Pro `%s' není hodnota}"
+
+#: makeinfo/makeinfo.c:3904
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s po¾aduje jméno"
+
+#: makeinfo/makeinfo.c:4010
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "Vstupní soubor skonèil a pøíkaz `@end %s' nebyl nalezen"
+
+#: makeinfo/makeinfo.c:4258
+#, c-format
+msgid "`%.40s...' is too long for expansion; not expanded"
+msgstr ""
+
+#: makeinfo/multi.c:116
+msgid "Missing } in @multitable template"
+msgstr "Chybìjící } v @multitable vzoru"
+
+#: makeinfo/multi.c:260
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "ignoruji zbloudilý text `%s' po pøíkazu @multitable"
+
+#: makeinfo/multi.c:400
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "Pøíli¹ mnoho sloupcù v multitabulkové polo¾ce (max %d)"
+
+#: makeinfo/multi.c:563
+#, fuzzy, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "sloupec #%d v multitabulce nelze vybrat"
+
+#: makeinfo/multi.c:592
+msgid "ignoring @tab outside of multitable"
+msgstr "pøíkaz `@tab' ignorován, je mimo multitabulku"
+
+#: makeinfo/multi.c:640
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** Vícesloupcový výstup z posledního øádku:\n"
+
+#: makeinfo/multi.c:643
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* sloupec #%d: výstup = %s\n"
+
+#: makeinfo/node.c:279
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "Uzel `%s' ji¾ byl definován na øádku %d"
+
+#: makeinfo/node.c:647
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "Formátování uzlu %s...\n"
+
+#: makeinfo/node.c:714
+#, fuzzy, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr "Uzel `%s' vy¾aduje pøíkaz na vytváøení sekcí (tøeba %c%s)"
+
+#: makeinfo/node.c:878
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "Pøíkazu `%c%s' nebyl zadán název uzlu"
+
+#: makeinfo/node.c:919 makeinfo/node.c:1163
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr ""
+
+#: makeinfo/node.c:922
+msgid "This @anchor command ignored; references to it will not work"
+msgstr ""
+
+#: makeinfo/node.c:924 makeinfo/node.c:1166
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr ""
+
+#: makeinfo/node.c:954
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr ""
+
+#: makeinfo/node.c:1160
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr ""
+
+#: makeinfo/node.c:1165
+msgid "@anchor command ignored; references to it will not work"
+msgstr ""
+
+#: makeinfo/node.c:1362
+#, fuzzy, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr "%s se odkazuje na neexistující uzel `%s'"
+
+#: makeinfo/node.c:1462
+#, fuzzy, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr "Následující uzel uzlu `%s' neukazuje na tento"
+
+#: makeinfo/node.c:1465
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "Tento uzel (%s) má chybný odkaz na pøedchozí uzel"
+
+#: makeinfo/node.c:1520
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "Pøedchozí uzel uzlu `%s' neukazuje na tento"
+
+#: makeinfo/node.c:1524
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "Tento uzel (%s) má chybný odkaz na následující uzel"
+
+#: makeinfo/node.c:1536
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1605
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr ""
+"Uzel `%s' postrádá polo¾ku menu pro `%s' navzdory tomu, ¾e je jeho vy¹¹ím "
+"uzlem"
+
+#: makeinfo/node.c:1637
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "uzel `%s' - nesmìøuje na nìj ¾ádný odkaz"
+
+#: makeinfo/node.c:1727
+#, c-format
+msgid "Removing %s\n"
+msgstr ""
+
+#: makeinfo/node.c:1731
+#, fuzzy, c-format
+msgid "Can't remove file `%s': %s"
+msgstr "Výstupní soubor `%s' nelze vytvoøit."
+
+#: makeinfo/sectioning.c:122
+#, fuzzy, c-format
+msgid "Appendix %c"
+msgstr "Dodatek %c "
+
+#: makeinfo/sectioning.c:467
+#, fuzzy, c-format
+msgid "Internal error (search_sectioning) `%s'!"
+msgstr "Interní chyba (hledání sekcí) \"%s\"!"
+
+#: makeinfo/sectioning.c:563
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "Interní chyba (hledání sekcí) \"%s\"!"
+
+#: makeinfo/sectioning.c:624
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "%c%s je zastaralý; pou¾ijte %c%s"
+
+#: makeinfo/sectioning.c:640
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "Uzel s %ctop jako sekcí ji¾ existuje"
+
+#: makeinfo/sectioning.c:648
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "Ji¾ zde je nejvy¹¹í (%ctop) uzel"
+
+#: makeinfo/sectioning.c:664
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "%ctop je pou¾it pøed %cnode, pøesmìrováno na %s"
+
+#: makeinfo/xml.c:1669
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "soubor `%s' v pøíkazu @image je neèitelný: %s"
+
+#: makeinfo/xml.c:2014
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+
+#: makeinfo/xml.c:2150
+msgid "of"
+msgstr "z"
+
+#: makeinfo/xml.c:2155
+msgid "on"
+msgstr ""
+
+#: makeinfo/xref.c:127
+msgid "First argument to cross-reference may not be empty"
+msgstr ""
+
+#: makeinfo/xref.c:252
+#, c-format
+msgid "Empty file name for HTML cross reference in `%s'"
+msgstr ""
+
+#: makeinfo/xref.c:387
+msgid "End of file reached while looking for `.' or `,'"
+msgstr ""
+
+#: makeinfo/xref.c:390
+#, fuzzy, c-format
+msgid "`.' or `,' must follow @%s, not `%c'"
+msgstr "`.' nebo `,' musí následovat za køí¾ovým odkazem, ale ne za %c"
+
+#: makeinfo/xref.c:392
+#, fuzzy
+msgid "for cross-references in parentheses, use @pxref"
+msgstr "V tomto uzlu není køí¾ový odkaz."
+
+#: makeinfo/xref.c:435
+msgid "First argument to @inforef may not be empty"
+msgstr ""
+
+#: util/texindex.c:223
+msgid "display this help and exit"
+msgstr "vypí¹e tuto nápovìdu a skonèí"
+
+#: util/texindex.c:225
+msgid "send output to FILE"
+msgstr "zapí¹e výstup do SOUBORu"
+
+#: util/texindex.c:227
+msgid "display version information and exit"
+msgstr "vypí¹e oznaèení verze a skonèí"
+
+#: util/texindex.c:237
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "Pou¾ití: %s [PØEPÍNAÈ]... SOUBOR...\n"
+
+#: util/texindex.c:238
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr "Generuje seøazený rejstøík pro ka¾dý TeXovský výstupní SOUBOR.\n"
+
+#: util/texindex.c:241
+#, c-format
+msgid "Usually FILE... is specified as `foo.%c%c' for a document `foo.texi'.\n"
+msgstr "SOUBOR... je obvykle `foo.%c%c' pro dokument `foo.texi'.\n"
+
+#: util/texindex.c:243
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Pøepínaèe:\n"
+
+#: util/texindex.c:743
+#, c-format
+msgid "failure reopening %s"
+msgstr "soubor %s nepovedlo se znovu otevøít"
+
+#: util/texindex.c:758 util/texindex.c:786
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: není texinfovský rejstøík"
+
+#: util/texindex.c:993
+#, c-format
+msgid "No page number in %s"
+msgstr "Na %s není èíslo stránky"
+
+#: util/texindex.c:1066
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr "polo¾ka %s následuje za polo¾kou se sekundárním jménem"
+
+#, fuzzy
+#~ msgid ""
+#~ "\\%-10[search] Search forward for a specified string\n"
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr ""
+#~ " a zobrazení uzlu, ve kterém je nalezen dal¹í výskyt tohoto "
+#~ "øetìzce.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "\\%-10[goto-node] Move to node specified by name.\n"
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ msgstr ""
+#~ " Také mù¾ete zadat jméno souboru ve tvaru (SOUBOR)UZEL.\n"
+
+#, fuzzy
+#~ msgid "\\%-10[next-node] Move to the next node of current section.\n"
+#~ msgstr " %-10s Pøesun na \"dal¹í\" uzel tohoto uzlu.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "\\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+#~ "node] (DIR)'.\n"
+#~ msgstr " %-10s Pøesun do `adresáøového' uzlu. Rovnocenné s `g (DIR)'.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "\\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] "
+#~ "Top'.\n"
+#~ msgstr " %-10s Pøesun do nejvy¹¹ího (Top) uzlu. Rovnocenné s `g Top'.\n"
+
+#, fuzzy
+#~ msgid "\\%-10[scroll-forward-page-only] Scroll forward within this node.\n"
+#~ msgstr " %-10s Posun o jeden øádek dopøedu.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "\\%-10[scroll-backward-page-only] Scroll backward within this node.\n"
+#~ msgstr " %-10s Posun o jeden øádek dozadu.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "\\%-10[search-backward] Search backward for a specified string\n"
+#~ " and select the node in which the previous occurrence is "
+#~ "found.\n"
+#~ msgstr ""
+#~ " a zobrazení uzlu, ve kterém je nalezen dal¹í výskyt tohoto "
+#~ "øetìzce.\n"
+
+#~ msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+#~ msgstr ""
+#~ "--- Pou¾ijte `\\[history-node]' nebo `\\[kill-node]' pro ukonèení ---\n"
+
+#, fuzzy
+#~ msgid "\\%-10[move-to-prev-xref] Skip to previous hypertext link [*].\n"
+#~ msgstr " %-10s Skok na následující hypertextový odkaz v tomto uzlu.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]... [MENU-ITEM...]\n"
+#~ "\n"
+#~ "Read documentation in Info format.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --apropos=STRING look up STRING in all indices of all "
+#~ "manuals.\n"
+#~ " -d, --directory=DIR add DIR to INFOPATH.\n"
+#~ " --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+#~ " -f, --file=FILENAME specify Info file to visit.\n"
+#~ " -h, --help display this help and exit.\n"
+#~ " --index-search=STRING go to node pointed by index entry STRING.\n"
+#~ " -n, --node=NODENAME specify nodes in first visited Info file.\n"
+#~ " -o, --output=FILENAME output selected nodes to FILENAME.\n"
+#~ " -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+#~ " --no-raw-escapes output escapes as literal text.\n"
+#~ " --restore=FILENAME read initial keystrokes from FILENAME.\n"
+#~ " -O, --show-options, --usage go to command-line options node.\n"
+#~ "%s --subnodes recursively output menu items.\n"
+#~ " -w, --where, --location print physical location of Info file.\n"
+#~ " --vi-keys use vi-like and less-like key bindings.\n"
+#~ " --version display version information and exit.\n"
+#~ "\n"
+#~ "The first non-option argument, if present, is the menu entry to start "
+#~ "from;\n"
+#~ "it is searched for in all `dir' files along INFOPATH.\n"
+#~ "If it is not present, info merges all `dir' files and shows the result.\n"
+#~ "Any remaining arguments are treated as the names of menu\n"
+#~ "items relative to the initial node visited.\n"
+#~ "\n"
+#~ "Examples:\n"
+#~ " info show top-level dir menu\n"
+#~ " info emacs start at emacs node from top-level dir\n"
+#~ " info emacs buffers start at buffers node within emacs manual\n"
+#~ " info --show-options emacs start at node with emacs' command line "
+#~ "options\n"
+#~ " info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+#~ " info -f ./foo.info show file ./foo.info, not searching dir\n"
+#~ msgstr ""
+#~ "Pou¾ití: %s [PØEPÍNAÈ]... [POLO®KA-MENU...]\n"
+#~ "\n"
+#~ " Umo¾òuje èíst dokumentaci v Info formátu.\n"
+#~ "\n"
+#~ "Pøepínaèe:\n"
+#~ "--apropos=SUBJEKT hledá SUBJEKT ve v¹ech odkazech v¹ech "
+#~ "manuálù\n"
+#~ "--directory=ADRESÁØ kromì promìnné INFOPATH prohledává i tento\n"
+#~ " ADRESÁØ\n"
+#~ "--dribble=SOUBOR ulo¾í klávesy, které stiskl u¾ivatel do "
+#~ "SOUBORu\n"
+#~ "--file=SOUBOR zadání info souboru, který se má prohlí¾et\n"
+#~ "--help vypí¹e tuto nápovìdu a skonèí\n"
+#~ "--index-search=ØETÌZEC skok na uzel urèený v rejstøíku ØETÌZCEM\n"
+#~ "--node=JMÉNO_UZLU zadání uzlù, v prvním nav¹tíveném info "
+#~ "souboru\n"
+#~ "--output=SOUBOR vypí¹e nav¹tívené uzly do SOUBORu\n"
+#~ "--restore=SOUBOR klávesy, které mají být automaticky po\n"
+#~ " spu¹tení infa stisknuty, ète ze SOUBORu\n"
+#~ "--show-options, --usage zobrazuje pøepínaèe pøíkazové øádky\n"
+#~ "--subnodes rekurzivnì vypí¹e polo¾ky menu\n"
+#~ "%s --vi=keys pou¾ije ovládání klávesami jako ve vi a "
+#~ "less\n"
+#~ "--version vypí¹e oznaèení verze a skonèí\n"
+#~ "\n"
+#~ " První nepøepínaèový argument, jestli¾e je zadán, je polo¾ka menu, "
+#~ "která\n"
+#~ "má být po spu¹tìní nav¹tívena; tato polo¾ka je vyhledávána ve v¹ech "
+#~ "`dir'\n"
+#~ "souborech podle INFOPATH.\n"
+#~ " Jestli¾e tato polo¾ka není zadána, info spojí v¹echny `dir' soubory a "
+#~ "uká¾e\n"
+#~ "výsledek. V¹echny zbývající argumenty jsou brány jako názvy polo¾ek "
+#~ "menu,\n"
+#~ "relativnì k prvnímu nav¹tívenému uzlu.\n"
+#~ "\n"
+#~ "Pøíklady:\n"
+#~ " info zobrazí seznam dokumentace\n"
+#~ " info emacs zobrazí uzel emacs ze seznamu dokumentace\n"
+#~ " info emacs buffers zobrazí uzel buffers z emacsového manuálu\n"
+#~ " info --show-options emacs zobrazí uzel s pøepínaèi pøíkazového øádku\n"
+#~ " pro emacs\n"
+#~ " info -f ./foo.info zobrazí soubor ./foo.info, nehledá v `dir' "
+#~ "soub.\n"
+#~ "\n"
+#~ " Chyby v programu oznamujte na adrese <bug-texinfo@gnu.org> (pouze "
+#~ "anglicky),\n"
+#~ "obecné otázky smìøujte na <help-texinfo@gnu.org>. Pøipomínky k pøekladu\n"
+#~ "zasílejte na adresu <cs@li.org> (èesky).\n"
+
+#~ msgid ""
+#~ " Picking a menu item causes another node to be selected.\n"
+#~ msgstr ""
+#~ " Vybírání polo¾ky menu zpùsobí zobrazení tohoto uzlu.\n"
+
+#~ msgid ""
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ msgstr ""
+#~ " Také mù¾ete zadat jméno souboru ve tvaru (SOUBOR)UZEL.\n"
+
+#, fuzzy
+#~ msgid " %-10s Search backward for a specified string\n"
+#~ msgstr " %-10s Hledání zadaného øetìzce v tomto Info souboru.\n"
+
+#~ msgid ""
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr ""
+#~ " a zobrazení uzlu, ve kterém je nalezen dal¹í výskyt tohoto "
+#~ "øetìzce.\n"
+
+#~ msgid "Following Next node..."
+#~ msgstr "Pøechod na dal¹í uzel..."
+
+#~ msgid "Selecting first menu item..."
+#~ msgstr "Zobrazování první polo¾ky menu..."
+
+#~ msgid "Selecting Next node..."
+#~ msgstr "Zobrazování dal¹ího uzlu..."
+
+#~ msgid "Moving Up %d time(s), then Next."
+#~ msgstr "Pøesouvání %d krát nahoru, potom na dal¹í."
+
+#~ msgid "Moving Prev in this window."
+#~ msgstr "Pøesun na pøedchozí uzel v tomto oknì."
+
+#~ msgid "Moving Up in this window."
+#~ msgstr "Pøesun nahoru v tomto oknì."
+
+#~ msgid "Moving to `Prev's last menu item."
+#~ msgstr "Pøesun na poslední polo¾ku menu pøedchozího uzlu."
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "Function"
+#~ msgstr "Funkce"
+
+#~ msgid "Macro"
+#~ msgstr "Makro"
+
+#~ msgid "Special Form"
+#~ msgstr "Speciální forma"
+
+#~ msgid "Variable"
+#~ msgstr "Promìnná"
+
+#~ msgid "User Option"
+#~ msgstr "U¾ivatelská volba"
+
+#~ msgid "Instance Variable"
+#~ msgstr "Instance promìnné"
+
+#~ msgid "Method"
+#~ msgstr "Metoda"
+
+#~ msgid "Untitled"
+#~ msgstr "Neoznaèeno"
+
+#~ msgid "This is %s, produced by makeinfo version %s from %s.\n"
+#~ msgstr ""
+#~ "Toto je Info soubor %s, produkován programem makeinfo verze %s ze souboru "
+#~ "%s.\n"
+
+#~ msgid "Next:"
+#~ msgstr "Dal¹í:"
+
+#~ msgid "Previous:"
+#~ msgstr "Pøedchozí:"
+
+#~ msgid "Up:"
+#~ msgstr "Nahoru:"
+
+#~ msgid "Menu"
+#~ msgstr "Menu"
+
+#~ msgid "Cross"
+#~ msgstr "Odkaz"
+
+#~ msgid "Prev"
+#~ msgstr "Pøedchozí"
+
+#~ msgid "Up"
+#~ msgstr "Nahoru"
+
+#~ msgid "see "
+#~ msgstr "viz"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+#~ "\n"
+#~ "Add or remove entries in INFO-FILE from the Info directory DIR-FILE.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --debug report what is being done.\n"
+#~ " --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+#~ " don't insert any new entries.\n"
+#~ " --dir-file=NAME specify file name of Info directory file.\n"
+#~ " This is equivalent to using the DIR-FILE argument.\n"
+#~ " --entry=TEXT insert TEXT as an Info directory entry.\n"
+#~ " TEXT should have the form of an Info menu item line\n"
+#~ " plus zero or more extra lines starting with "
+#~ "whitespace.\n"
+#~ " If you specify more than one entry, they are all "
+#~ "added.\n"
+#~ " If you don't specify any entries, they are "
+#~ "determined\n"
+#~ " from information in the Info file itself.\n"
+#~ " --help display this help and exit.\n"
+#~ " --info-file=FILE specify Info file to install in the directory.\n"
+#~ " This is equivalent to using the INFO-FILE argument.\n"
+#~ " --info-dir=DIR same as --dir-file=DIR/dir.\n"
+#~ " --item=TEXT same as --entry TEXT.\n"
+#~ " An Info directory entry is actually a menu item.\n"
+#~ " --quiet suppress warnings.\n"
+#~ " --remove same as --delete.\n"
+#~ " --remove-exactly only remove if the info file name matches exactly;\n"
+#~ " .info and/or .gz suffixes are not ignored.\n"
+#~ " --section=SEC put this file's entries in section SEC of the "
+#~ "directory.\n"
+#~ " If you specify more than one section, all the "
+#~ "entries\n"
+#~ " are added in each of the sections.\n"
+#~ " If you don't specify any sections, they are "
+#~ "determined\n"
+#~ " from information in the Info file itself.\n"
+#~ " --section-regex=R if an entry is added to a section that does not "
+#~ "exist,\n"
+#~ " look for a section matching basic regular expression "
+#~ "R\n"
+#~ " (and ignoring case) before starting a new section.\n"
+#~ " --test suppress updating of DIR-FILE.\n"
+#~ " --silent suppress warnings.\n"
+#~ " --version display version information and exit.\n"
+#~ msgstr ""
+#~ "Pou¾ití: %s [PØEPÍNAÈ]... [INFO-SOUBOR [DIR-SOUBOR]]\n"
+#~ "\n"
+#~ "Instaluje nebo ma¾e polo¾ky ze souboru INFO-SOUBOR v Info adresáøi DIR-"
+#~ "SOUBOR.\n"
+#~ "\n"
+#~ "Pøepínaèe:\n"
+#~ "--delete sma¾e existující polo¾ky INFO-SOUBORu z DIR-SOUBORU;\n"
+#~ " nevkládá ¾ádné nové.\n"
+#~ "--dir-file=JMÉNO zadání jména adresáøového souboru Infa. Rovnocenné\n"
+#~ " s pou¾itím argumentu DIR-SOUBOR.\n"
+#~ "--entry=TEXT vlo¾í text jako polo¾ku Info adresáøe. TEXT musí mít "
+#~ "formát\n"
+#~ " jako øádek polo¾ky Info menu, plus nula nebo více "
+#~ "extra\n"
+#~ " øádkù zaèínajících mezerou. Jestli¾e zadáte více ne¾ "
+#~ "jednu\n"
+#~ " polo¾ku, budou pøidány v¹echny. Jestli¾e nezadáte "
+#~ "¾ádnou\n"
+#~ " polo¾ku, budou získány z informací v Info souboru.\n"
+#~ "--help vypí¹e tuto nápovìdu a skonèí\n"
+#~ "--info-file=SOUBOR zadání Info souboru pro instalaci do Info adresáøe.\n"
+#~ " Rovnocenné s argumentem INFO-SOUBOR.\n"
+#~ "--info-dir=ADRESÁØ stejné jako --dir-file=ADRESÁØ/dir.\n"
+#~ "--item=TEXT stejné jako --entry=TEXT.\n"
+#~ " Polo¾ka Info adresáøe je aktuální polo¾ka menu.\n"
+#~ "--quiet potlaèí varování.\n"
+#~ "--remove stejné jako --delete.\n"
+#~ "--section=SEKCE vlo¾í polo¾ky adresáøe do sekce SEKCE Info adresáøe.\n"
+#~ " Jestli¾e je zadáno více sekcí, jsou v¹echny polo¾ky\n"
+#~ " pøidány do v¹ech zadaných sekcí. Jestli¾e nejsou "
+#~ "zadány\n"
+#~ " ¾ádné sekce, pak jsou sekce získány z Info souboru.\n"
+#~ "--version vypí¹e oznaèení verze a skonèí.\n"
+#~ "\n"
+#~ " Chyby v programu oznamujte na adrese <bug-texinfo@gnu.org> (pouze "
+#~ "anglicky),\n"
+#~ "obecné otázky smìøujte na <help-texinfo@gnu.org>. Pøipomínky\n"
+#~ "k pøekladu zasílejte na <cs@li.org> (èesky).\n"
+
+#~ msgid "menu item `%s' already exists, for file `%s'"
+#~ msgstr "polo¾ka menu `%s' ji¾ pro soubor `%s' existuje"
+
+#, fuzzy
+#~ msgid "\\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+#~ msgstr " %-10s Výbìr první ... deváté polo¾ky menu uzlu.\n"
+
+#~ msgid "node `%s' has been referenced %d times"
+#~ msgstr "na uzel `%s' se bylo odkazováno %d krát"
+
+#, fuzzy
+#~ msgid ""
+#~ "Copyright (C) %s Free Software Foundation, Inc.\n"
+#~ "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n"
+#~ "PARTICULAR PURPOSE. You may redistribute copies of GNU %s\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the file named COPYING.\n"
+#~ msgstr ""
+#~ " Copyright (C) %s 1996 Free Software Foundation, Inc.\n"
+#~ " Toto je volné programové vybavení, které je zcela BEZ ZÁRUKY. Podmínky "
+#~ "pro\n"
+#~ "kopírování a roz¹iøování naleznete v Obecné veøejné licenci GNU (GNU "
+#~ "General\n"
+#~ "Public Licence). Více informací získáte ve zdrojových textech v souboru\n"
+#~ "COPYING.\n"
+
+#~ msgid "@quote-arg only useful for single-argument macros"
+#~ msgstr "@quote-arg je u¾iteèné pouze pro jedno-argumentová makra"
+
+#~ msgid "Table of Contents"
+#~ msgstr "Obsah"
+
+#~ msgid "Short Contents"
+#~ msgstr "Krátký obsah"
+
+#~ msgid "keep temporary files around after processing"
+#~ msgstr "zanechá doèasné soubory po ukonèení"
+
+#~ msgid "do not keep temporary files around after processing (default)"
+#~ msgstr "nezanechá doèasné soubory po ukonèení"
+
+#~ msgid ""
+#~ " file, and select the node referenced by the first entry "
+#~ "found.\n"
+#~ msgstr " uzlu, na který ukazuje první nalezená polo¾ka.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "There is NO warranty. You may redistribute this software\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the files named COPYING.\n"
+#~ msgstr ""
+#~ " Copyright (C) %s 1996 Free Software Foundation, Inc.\n"
+#~ " Toto je volné programové vybavení, které je zcela BEZ ZÁRUKY. Podmínky "
+#~ "pro\n"
+#~ "kopírování a roz¹iøování naleznete v Obecné veøejné licenci GNU (GNU "
+#~ "General\n"
+#~ "Public Licence). Více informací získáte ve zdrojových textech v souboru\n"
+#~ "COPYING.\n"
+
+#~ msgid "%s: Specify the Info directory only once.\n"
+#~ msgstr "%s: Info adresáø zadejte pouze jednou.\n"
+
+#~ msgid "\"\" is invalid"
+#~ msgstr "Sekvence kláves \"\" je neplatná"
+
+#, fuzzy
+#~ msgid "%s is an invalid ISO code, using %c"
+#~ msgstr "%s není platný kód jazyka (podle ISO 639)"
+
+#~ msgid "Cannot specify more than one macro expansion output"
+#~ msgstr "Pro expanzi makra nelze zadat více ne¾ jeden výstup"
+
+#~ msgid "Node:"
+#~ msgstr "Uzel:"
+
+#~ msgid "%s: TOC should be here, but it was not found"
+#~ msgstr "%s: Obsah bìl být zde, ale nebyl nalezen"
+
+#, fuzzy
+#~ msgid "No `%s.png' or `.jpg', and no extension supplied"
+#~ msgstr "®ádný .png nebo .jpg soubor pro `%s'"
+
+#~ msgid "%s; for file `%s'.\n"
+#~ msgstr "%s; pro soubor `%s'.\n"
+
+#~ msgid "`%s' has no Up field"
+#~ msgstr "`%s' nemá zadán vy¹¹í uzel"
+
+#, fuzzy
+#~ msgid ""
+#~ "Email bug reports to bug-texinfo@gnu.org,\n"
+#~ "general questions and discussion to help-texinfo@gnu.org."
+#~ msgstr ""
+#~ "\n"
+#~ " Chyby v programu oznamujte na adrese <bug-texinfo@gnu.org> (pouze "
+#~ "anglicky),\n"
+#~ "obecné otázky smìøujte na <help-texinfo@gnu.org>. Pøipomínky k pøekladu\n"
+#~ "zasílejte na <cs@li.org> (èesky).\n"
+
+#~ msgid "******************************\n"
+#~ msgstr "******************************\n"
+
+#~ msgid "---------------------\n"
+#~ msgstr "---------------------\n"
+
+#~ msgid "----------------------\n"
+#~ msgstr "----------------------\n"
+
+#~ msgid "---------------\n"
+#~ msgstr "---------------\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+#~ "\n"
+#~ "Translate Texinfo source documentation to various other formats:\n"
+#~ "Info files suitable for reading online with Emacs or standalone GNU Info\n"
+#~ "(by default); plain text (with --no-headers); or HTML (with --html).\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --commands-in-node-names allow @ commands in node names.\n"
+#~ " -D VAR define a variable, as with @set.\n"
+#~ "--docbook output DocBook rather than Info format.\n"
+#~ " -E, --macro-expand FILE output macro-expanded source to FILE.\n"
+#~ " --error-limit=NUM quit after NUM errors (default %d).\n"
+#~ " --fill-column=NUM break Info lines at NUM characters (default %"
+#~ "d).\n"
+#~ " --footnote-style=STYLE output footnotes according to STYLE:\n"
+#~ " `separate' to place footnotes in their own "
+#~ "node,\n"
+#~ " `end' to place the footnotes at the end of "
+#~ "the\n"
+#~ " node in which they are defined (the "
+#~ "default).\n"
+#~ " --force preserve output even if errors.\n"
+#~ " --help display this help and exit.\n"
+#~ " --html output HTML rather than Info format.\n"
+#~ " -I DIR append DIR to the @include search path.\n"
+#~ " --ifhtml process @ifhtml and @html text even when not\n"
+#~ " generating HTML.\n"
+#~ " --ifinfo process @ifinfo text even when generating "
+#~ "HTML.\n"
+#~ " --iftex process @iftex and @tex text.\n"
+#~ " implies --no-split.\n"
+#~ msgstr ""
+#~ "Pou¾ití: %s [PØEPÍNAÈ]... TEXINFO-SOUBOR...\n"
+#~ "\n"
+#~ " Pøekládá Texinfový zdrojový soubor to mnoha rùzných formátù:\n"
+#~ "Info soubory vhodné pro on-line ètení Emacsem nebo samostatným GNU Info\n"
+#~ "prohlí¾eèem (implicitní); èistý text (pøepínaèem --no-headers); nebo "
+#~ "HTML\n"
+#~ "(pøepínaèem --html).\n"
+#~ "\n"
+#~ "Pøepínaèe:\n"
+#~ "--commands-in-node-names dovoluje @ pøíkazy v názvech uzlù\n"
+#~ "-D PROMÌNNÁ definuje promìnnou, jako pøíkaz @set\n"
+#~ "-E, --macro-expand SOUBOR výstup zdrojových textù s expandovanými makry\n"
+#~ " do SOUBORu\n"
+#~ "--error-limit=ÈÍSLO ukonèi se po ÈÍSLO chybách (implicitnì %d)\n"
+#~ "--fill-column=ÈÍSLO zalamování na ÈÍSLO znakù (implicitnì %d)\n"
+#~ "--footnote-style=STYL umístìní poznámek pod èarou podle STYLu:\n"
+#~ " `separate' umístìní poznámek pod èarou do\n"
+#~ " samostatného uzlu;\n"
+#~ " `end' umístìní poznámek pod èarou na konec "
+#~ "uzlu,\n"
+#~ " ve kterém jsou definovány (implicitní);\n"
+#~ "--force zanechá výstup dokonce i pøi chybách\n"
+#~ "--help vypí¹e tuto nápovìdu a skonèí\n"
+#~ "--html výstup v HTML formátu\n"
+#~ "-I ADRESÁØ pøidá ADRESÁØ na konec seznamu adresáøù, ve "
+#~ "kterých\n"
+#~ " jsou hledány soubory pro @include\n"
+#~ "--ifhtml zpùsobí zpracování @ifhtml a @html, i kdy¾ není\n"
+#~ " výstupem formát HTML\n"
+#~ "--ifinfo zpùsobí zpracování @ifinfo, i kdy¾ je výstupem "
+#~ "HTML\n"
+#~ "--iftex zpùsobí zpracování @iftex a @tex textu\n"
+#~ " zahrnuje --no-split.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ " --no-headers suppress Info node separators and Node: "
+#~ "lines;\n"
+#~ " write to standard output without --output.\n"
+#~ " --no-ifhtml do not process @ifhtml and @html text.\n"
+#~ " --no-ifinfo do not process @ifinfo text.\n"
+#~ " --no-iftex do not process @iftex and @tex text.\n"
+#~ " --no-split suppress splitting of Info or HTML output,\n"
+#~ " generate only one output file.\n"
+#~ " --no-validate suppress node cross-reference validation.\n"
+#~ " --no-warn suppress warnings (but not errors).\n"
+#~ " --number-sections include chapter, section, etc. numbers in "
+#~ "output.\n"
+#~ " -o, --output=FILE output to FILE (directory if split HTML),\n"
+#~ " ignoring any @setfilename.\n"
+#~ " -P DIR prepend DIR to the @include search path.\n"
+#~ " --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %"
+#~ "d).\n"
+#~ " if VAL is `none', do not indent;\n"
+#~ " if VAL is `asis', preserve existing "
+#~ "indentation.\n"
+#~ " --reference-limit=NUM warn about at most NUM references (default %"
+#~ "d).\n"
+#~ " --split-size=NUM split into files at NUM size. (default %d).\n"
+#~ " -U VAR undefine a variable, as with @clear.\n"
+#~ " -v, --verbose explain what is being done.\n"
+#~ " --version display version information and exit.\n"
+#~ " --xml output XML (TexinfoML) rather than Info "
+#~ "format.\n"
+#~ msgstr ""
+#~ "--no-headers potlaèí oddìlovaèe uzlù a jejich hlavièky a "
+#~ "zapí¹e \n"
+#~ " výstup na standardní výstup (není-li zadáno --"
+#~ "output)\n"
+#~ "--no-ifhtml zpùsobí nezpracování @ifhtml a @html textu\n"
+#~ "--no-ifinfo zpùsobí nezpracování @ifinfo textu\n"
+#~ "--no-iftex zpùsobí nezpracování @iftex a @tex textu\n"
+#~ "--no-split potlaèí rozdìlování velkých výstupních info "
+#~ "souborù\n"
+#~ " nebo generování jednoho HTML souboru na uzel\n"
+#~ "--no-validate potlaèí kontrolu køí¾ových odkazù\n"
+#~ "--no-warn potlaèí výpis varování (ne v¹ak chyb)\n"
+#~ "-o, --output=SOUB výstup do SOUBoru, ignoruje pøíkaz @setfilename\n"
+#~ "-P ADRESÁØ pøidá ADRESÁØ na zaèátek seznamu adresáøù, ve "
+#~ "kterých\n"
+#~ " jsou hledány soubory pro @include\n"
+#~ "--paragraph-indent=HODN odsadí odstavce HODN mezerami (implicitnì %d).\n"
+#~ " jestli¾e je HODN `none' neodsazuje;\n"
+#~ " jestli¾e je HODN `asis' zanechá existující "
+#~ "odsazení.\n"
+#~ "--reference-limit=ÈÍSLO oznámí, bude-li køí¾ových odkazù více ne¾ ÈÍSLO\n"
+#~ " (implicitnì %d).\n"
+#~ "-U PROMÌNNÁ oddefinuje promìnnou, jako pøíkazem @clear\n"
+#~ "-v, --verbose vypisuje bli¾¹í informace o zpracovávání\n"
+#~ "--version vypí¹e oznaèení verze a skonèí\n"
diff --git a/po/da.gmo b/po/da.gmo
new file mode 100644
index 0000000..c116dbb
--- /dev/null
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
new file mode 100644
index 0000000..4e9d2f0
--- /dev/null
+++ b/po/da.po
@@ -0,0 +1,3508 @@
+# Danish texinfo translation po-file.
+# Copyright (C) 2002 Free Software Foundation, Inc.
+# Claus Hindsgaul <claus_h@image.dk>, 2000-2001.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo 4.2e\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2008-09-18 20:38+0200\n"
+"PO-Revision-Date: 2002-11-08 09:13GMT\n"
+"Last-Translator: Claus Hindsgaul <claus_h@image.dk>\n"
+"Language-Team: Danish <dansk@klid.dk>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 0.9.6\n"
+
+#: gnulib/lib/error.c:125
+msgid "Unknown system error"
+msgstr ""
+
+#: gnulib/lib/getopt.c:526 gnulib/lib/getopt.c:542
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: tilvalg '%s' er flertydig\n"
+
+#: gnulib/lib/getopt.c:575 gnulib/lib/getopt.c:579
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: tilvalg '--%s' tillader ikke en parameter\n"
+
+#: gnulib/lib/getopt.c:588 gnulib/lib/getopt.c:593
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: tilvalg '%c%s' tillader ikke en parameter\n"
+
+#: gnulib/lib/getopt.c:636 gnulib/lib/getopt.c:655 gnulib/lib/getopt.c:971
+#: gnulib/lib/getopt.c:990
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: tilvalg '%s' kræver en parameter\n"
+
+#: gnulib/lib/getopt.c:693 gnulib/lib/getopt.c:696
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: ukendt tilvalg '--%s'\n"
+
+#: gnulib/lib/getopt.c:704 gnulib/lib/getopt.c:707
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: ukendt tilvalg '%c%s'\n"
+
+#: gnulib/lib/getopt.c:759 gnulib/lib/getopt.c:762
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: ugyldigt tilvalg -- %c\n"
+
+#: gnulib/lib/getopt.c:768 gnulib/lib/getopt.c:771
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ugyldigt tilvalg -- %c\n"
+
+#: gnulib/lib/getopt.c:823 gnulib/lib/getopt.c:839 gnulib/lib/getopt.c:1043
+#: gnulib/lib/getopt.c:1061
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: tilvalg kræver en parameter -- %c\n"
+
+#: gnulib/lib/getopt.c:892 gnulib/lib/getopt.c:908
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: tilvalg '-W %s' er flertydigt\n"
+
+#: gnulib/lib/getopt.c:932 gnulib/lib/getopt.c:950
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: tilvalg '-W %s' tillader ikke en parameter\n"
+
+#: gnulib/lib/xalloc-die.c:34 gnulib/lib/xsetenv.c:37
+#, fuzzy, c-format
+msgid "memory exhausted"
+msgstr "virtuel hukommelse opbrugt"
+
+#: info/echo-area.c:283 info/session.c:966
+msgid "Move forward a character"
+msgstr "Gå et tegn frem"
+
+#: info/echo-area.c:295 info/session.c:993
+msgid "Move backward a character"
+msgstr "Gå et tegn tilbage"
+
+#: info/echo-area.c:307
+msgid "Move to the start of this line"
+msgstr "Gå til starten af linjen"
+
+#: info/echo-area.c:312
+msgid "Move to the end of this line"
+msgstr "Gå til slutning af linjen"
+
+#: info/echo-area.c:320 info/session.c:1025
+msgid "Move forward a word"
+msgstr "Ryk et ord frem"
+
+#: info/echo-area.c:360 info/session.c:1049
+msgid "Move backward a word"
+msgstr "Ryk et ord tilbage"
+
+#: info/echo-area.c:400
+msgid "Delete the character under the cursor"
+msgstr "Slet tegnet under markøren"
+
+#: info/echo-area.c:430
+msgid "Delete the character behind the cursor"
+msgstr "Slet tegnet efter markøren"
+
+#: info/echo-area.c:451
+msgid "Cancel or quit operation"
+msgstr "Afbryd eller afslut aktivitet"
+
+#: info/echo-area.c:466
+msgid "Accept (or force completion of) this line"
+msgstr "Acceptér (eller gennemtving afslutning af) linjen"
+
+#: info/echo-area.c:471
+msgid "Insert next character verbatim"
+msgstr "Indsæt næste tegn råt"
+
+#: info/echo-area.c:479
+msgid "Insert this character"
+msgstr "Indsæt dette tegn"
+
+#: info/echo-area.c:498
+msgid "Insert a TAB character"
+msgstr "Indsæt et tabulatortegn"
+
+#: info/echo-area.c:505
+msgid "Transpose characters at point"
+msgstr "Transponér tegn ved markør"
+
+#: info/echo-area.c:556
+msgid "Yank back the contents of the last kill"
+msgstr "Gendan indholdet fra sidste sletning"
+
+#: info/echo-area.c:563
+msgid "Kill ring is empty"
+msgstr "Skraldespand er tom"
+
+#: info/echo-area.c:576
+msgid "Yank back a previous kill"
+msgstr "Gendan en tidligere sletning"
+
+#: info/echo-area.c:609
+msgid "Kill to the end of the line"
+msgstr "Slet resten af linjen"
+
+#: info/echo-area.c:622
+msgid "Kill to the beginning of the line"
+msgstr "Slet bagud til linjestart"
+
+#: info/echo-area.c:634
+msgid "Kill the word following the cursor"
+msgstr "Slet resten af ordet"
+
+#: info/echo-area.c:654
+msgid "Kill the word preceding the cursor"
+msgstr "Slet ordet før markøren"
+
+#: info/echo-area.c:870 info/echo-area.c:926
+msgid "No completions"
+msgstr "Ingen afslutninger"
+
+#: info/echo-area.c:872
+msgid "Not complete"
+msgstr "Ikke afsluttet"
+
+#: info/echo-area.c:913
+msgid "List possible completions"
+msgstr "Vis mulige afslutninger"
+
+#: info/echo-area.c:930
+msgid "Sole completion"
+msgstr "Eneste afslutning"
+
+#: info/echo-area.c:939
+msgid "One completion:\n"
+msgstr "Én afslutning:\n"
+
+#: info/echo-area.c:940
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d afslutninger:\n"
+
+#: info/echo-area.c:1087
+msgid "Insert completion"
+msgstr "Indsæt afslutning"
+
+#: info/echo-area.c:1222
+msgid "Building completions..."
+msgstr "Opbygger afslutninger..."
+
+#: info/echo-area.c:1342
+msgid "Scroll the completions window"
+msgstr "Rul afslutningsvinduet"
+
+#: info/footnotes.c:212
+msgid "Footnotes could not be displayed"
+msgstr "Fodnoter kunne ikke vises"
+
+#: info/footnotes.c:238
+msgid "Show the footnotes associated with this node in another window"
+msgstr "Vis fodnoter, det hører til dette emne i et andet vindue"
+
+#: info/footnotes.h:26
+msgid "---------- Footnotes ----------"
+msgstr "---------- Fodnoter -----------"
+
+#: info/indices.c:171
+msgid "Look up a string in the index for this file"
+msgstr "Slå en tekst op i denne fils indeks."
+
+#: info/indices.c:198
+msgid "Finding index entries..."
+msgstr "Finder indeksindgange..."
+
+#: info/indices.c:206
+msgid "No indices found."
+msgstr "Fandt intet indeks."
+
+#: info/indices.c:216
+msgid "Index entry: "
+msgstr "Indeksindgang:"
+
+#: info/indices.c:324
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr "Gå til næste fundne indekspunkt fra sidste '\\[index-search]'-kommando"
+
+#: info/indices.c:334
+msgid "No previous index search string."
+msgstr "Ingen tidligere indeks søgetekst"
+
+#: info/indices.c:341
+msgid "No index entries."
+msgstr "Ingen indeksindgange."
+
+#: info/indices.c:374
+#, fuzzy, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "Ingen %sindeksindgange indeholder \"%s\"."
+
+#: info/indices.c:375
+msgid "more "
+msgstr "mere "
+
+#: info/indices.c:385
+msgid "CAN'T SEE THIS"
+msgstr "KAN IKKE SE DETTE"
+
+#: info/indices.c:421
+#, fuzzy, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr "Fandt \"%s\" i %s. ('\\[next-index-match]' søger efter den næste.)"
+
+#: info/indices.c:549
+#, fuzzy, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "Skimmer \"%s\"'s indekser..."
+
+#: info/indices.c:604
+#, fuzzy, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr "Ingen tilgængelige info-filer har \"%s\" i sit index."
+
+#: info/indices.c:630
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr ""
+"Gennemtrævl alle kendte Info-filers indekser for en tekst og opbyg en menu"
+
+#: info/indices.c:634
+msgid "Index apropos: "
+msgstr "Indeks apropos:"
+
+#: info/indices.c:662
+#, fuzzy, c-format
+msgid ""
+"\n"
+"* Menu: Nodes whose indices contain `%s':\n"
+msgstr ""
+"\n"
+"* Menu: Emner, hvis indeks indeholder \"%s\":\n"
+
+#: info/info.c:275 info/infokey.c:899
+#, c-format
+msgid "Try --help for more information.\n"
+msgstr "Prøv --help for mere information.\n"
+
+#: info/info.c:294 info/infokey.c:145 install-info/install-info.c:2101
+#: makeinfo/makeinfo.c:802 util/texindex.c:295
+#, c-format
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+
+#: info/info.c:506
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "ingen indeksindgange blev fundet for '%s'\n"
+
+#: info/info.c:600
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [MENU-ITEM...]\n"
+"\n"
+"Read documentation in Info format.\n"
+msgstr ""
+
+#: info/info.c:606
+msgid ""
+"Options:\n"
+" -k, --apropos=STRING look up STRING in all indices of all "
+"manuals.\n"
+" -d, --directory=DIR add DIR to INFOPATH.\n"
+" --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+" -f, --file=FILENAME specify Info file to visit."
+msgstr ""
+
+#: info/info.c:613
+msgid ""
+" -h, --help display this help and exit.\n"
+" --index-search=STRING go to node pointed by index entry STRING.\n"
+" -n, --node=NODENAME specify nodes in first visited Info file.\n"
+" -o, --output=FILENAME output selected nodes to FILENAME."
+msgstr ""
+
+#: info/info.c:619
+msgid ""
+" -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+" --no-raw-escapes output escapes as literal text.\n"
+" --restore=FILENAME read initial keystrokes from FILENAME.\n"
+" -O, --show-options, --usage go to command-line options node."
+msgstr ""
+
+#: info/info.c:626
+#, fuzzy
+msgid " -b, --speech-friendly be friendly to speech synthesizers."
+msgstr " -b, --speech-friendly vær talesyntese-venlig.\n"
+
+#: info/info.c:630
+msgid ""
+" --subnodes recursively output menu items.\n"
+" --vi-keys use vi-like and less-like key bindings.\n"
+" --version display version information and exit.\n"
+" -w, --where, --location print physical location of Info file."
+msgstr ""
+
+#: info/info.c:636
+msgid ""
+"\n"
+"The first non-option argument, if present, is the menu entry to start from;\n"
+"it is searched for in all `dir' files along INFOPATH.\n"
+"If it is not present, info merges all `dir' files and shows the result.\n"
+"Any remaining arguments are treated as the names of menu\n"
+"items relative to the initial node visited."
+msgstr ""
+
+#: info/info.c:643
+msgid ""
+"\n"
+"For a summary of key bindings, type h within Info."
+msgstr ""
+
+#: info/info.c:646
+msgid ""
+"\n"
+"Examples:\n"
+" info show top-level dir menu\n"
+" info info show the general manual for Info readers\n"
+" info info-stnd show the manual specific to this Info program\n"
+" info emacs start at emacs node from top-level dir\n"
+" info emacs buffers start at buffers node within emacs manual\n"
+" info --show-options emacs start at node with emacs' command line options\n"
+" info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+" info -f ./foo.info show file ./foo.info, not searching dir"
+msgstr ""
+
+#: info/info.c:657 info/infokey.c:918 makeinfo/makeinfo.c:475
+#: util/texindex.c:259
+msgid ""
+"\n"
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+"Rapportér fejl i programmet på engelsk til bug-texinfo@gnu.org,\n"
+"generelle spørgsmål og diskussion til help-texinfo@gnu.org,\n"
+"oversættelsesfejl til claus_h@image.dk\n"
+"Texinfos hjemmeside: http://www.gnu.org/software/texinfo/"
+
+#: info/info.c:691
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "Kan ikke finde emnet '%s'."
+
+#: info/info.c:692
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "Kan ikke finde emnet '(%s)%s'."
+
+#: info/info.c:693
+msgid "Cannot find a window!"
+msgstr "Kan ikke finde et vindue!"
+
+#: info/info.c:694
+msgid "Point doesn't appear within this window's node!"
+msgstr "Punktet optræder ikke i dette vindues emne!"
+
+#: info/info.c:695
+msgid "Cannot delete the last window."
+msgstr "Kan ikke slette det sidste vindue."
+
+#: info/info.c:696
+msgid "No menu in this node."
+msgstr "Ingen menu i dette emne."
+
+#: info/info.c:697
+msgid "No footnotes in this node."
+msgstr "Ingen fodnoter i dette emne."
+
+#: info/info.c:698
+msgid "No cross references in this node."
+msgstr "Ingen krydsreferencer i dette emne."
+
+#: info/info.c:699
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Ingen '%s'-peger mod dette emne."
+
+#: info/info.c:700
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "Ukendt Info kommando '%c'; prøv '?' for hjælp."
+
+#: info/info.c:701
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr "Info kan ikke køre på terminal type '%s'."
+
+#: info/info.c:702
+msgid "You are already at the last page of this node."
+msgstr "Du er i forvejen ved emnets sidste side."
+
+#: info/info.c:703
+msgid "You are already at the first page of this node."
+msgstr "Du er i forvejen ved emnets første side."
+
+#: info/info.c:704
+msgid "Only one window."
+msgstr "Kun ét vindue."
+
+#: info/info.c:705
+msgid "Resulting window would be too small."
+msgstr "Det resulterende vindue ville være for lille."
+
+#: info/info.c:706
+msgid "Not enough room for a help window, please delete a window."
+msgstr "Ikke nok plads til et hjælpevindue. Fjern venligst et vindue."
+
+#: info/infodoc.c:45
+msgid "Basic Info command keys\n"
+msgstr ""
+
+#: info/infodoc.c:47
+#, fuzzy
+msgid "\\%-10[quit-help] Close this help window.\n"
+msgstr "\\%-10[quit-help] Afslut denne hjælp.\n"
+
+#: info/infodoc.c:48
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] Afslut hele Info-programmet.\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr "\\%-10[get-info-help-node] Kør info introduktionen.\n"
+
+#: info/infodoc.c:51
+#, fuzzy
+msgid "\\%-10[prev-line] Move up one line.\n"
+msgstr "\\%-10[forrige linje] Rul en linje tilbage.\n"
+
+#: info/infodoc.c:52
+#, fuzzy
+msgid "\\%-10[next-line] Move down one line.\n"
+msgstr "\\%-10[næste linje] Rul 1 linje frem.\n"
+
+#: info/infodoc.c:53
+#, fuzzy
+msgid "\\%-10[scroll-backward] Scroll backward one screenful.\n"
+msgstr "\\%-10[scroll-backward] Rul en side tilbage.\n"
+
+#: info/infodoc.c:54
+#, fuzzy
+msgid "\\%-10[scroll-forward] Scroll forward one screenful.\n"
+msgstr "\\%-10[scroll-forward] Rul en side frem.\n"
+
+#: info/infodoc.c:55
+#, fuzzy
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr "\\%-10[beginning-of-node] Gå til starten af emnet.\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr "\\%-10[end-of-node] Gå til enden af emnet.\n"
+
+#: info/infodoc.c:58
+#, fuzzy
+msgid "\\%-10[move-to-next-xref] Skip to the next hypertext link.\n"
+msgstr ""
+"\\%-10[move-to-next-xref] Hop til næste hypertekst-henvisning i dette "
+"emne.\n"
+
+#: info/infodoc.c:59
+#, fuzzy
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under the "
+"cursor.\n"
+msgstr ""
+"\\%-10[select-reference-this-line] Følg hypertekst-henvisningen under "
+"markøren.\n"
+
+#: info/infodoc.c:60
+#, fuzzy
+msgid "\\%-10[history-node] Go back to the last node seen in this window.\n"
+msgstr "\\%-10[history-node] Flyt til vinduets sidste synlige emne-felt.\n"
+
+#: info/infodoc.c:62
+#, fuzzy
+msgid "\\%-10[global-prev-node] Go to the previous node in the document.\n"
+msgstr "\\%-10[prev-node] Flyt til emnet 'Forrige' i dette emne.\n"
+
+#: info/infodoc.c:63
+#, fuzzy
+msgid "\\%-10[global-next-node] Go to the next node in the document.\n"
+msgstr "\\%-10[next-node] Flyt til emnet 'næste' i dette emne.\n"
+
+#: info/infodoc.c:64
+#, fuzzy
+msgid "\\%-10[prev-node] Go to the previous node on this level.\n"
+msgstr "\\%-10[prev-node] Flyt til emnet 'Forrige' i dette emne.\n"
+
+#: info/infodoc.c:65
+#, fuzzy
+msgid "\\%-10[next-node] Go to the next node on this level.\n"
+msgstr "\\%-10[next-node] Flyt til emnet 'næste' i dette emne.\n"
+
+#: info/infodoc.c:66
+#, fuzzy
+msgid "\\%-10[up-node] Go up one level.\n"
+msgstr "\\%-10[up-node] Flyt til emnet 'Op' i dette emne.\n"
+
+#: info/infodoc.c:67
+#, fuzzy
+msgid "\\%-10[top-node] Go to the top node of this document.\n"
+msgstr "\\%-10[end-of-node] Gå til enden af emnet.\n"
+
+#: info/infodoc.c:68
+#, fuzzy
+msgid "\\%-10[dir-node] Go to the main `directory' node.\n"
+msgstr "\\%-10[end-of-node] Gå til enden af emnet.\n"
+
+#: info/infodoc.c:70
+#, fuzzy
+msgid "1...9 Pick the first...ninth item in this node's menu.\n"
+msgstr " %-10s Vælg første ... niende punkt i emnets menu.\n"
+
+#: info/infodoc.c:71
+#, fuzzy
+msgid "\\%-10[last-menu-item] Pick the last item in this node's menu.\n"
+msgstr "\\%-10[last-menu-item] Vælg sidste punkt i emnets menu.\n"
+
+#: info/infodoc.c:72
+#, fuzzy
+msgid "\\%-10[menu-item] Pick a menu item specified by name.\n"
+msgstr " %-10s Vælg menupunkt angivet ved navn.\n"
+
+#: info/infodoc.c:73
+#, fuzzy
+msgid "\\%-10[xref-item] Follow a cross reference specified by name.\n"
+msgstr ""
+"\\%-10[xref-item] Følg en krydshenvisning. Indlæser referencens navn.\n"
+
+#: info/infodoc.c:74
+#, fuzzy
+msgid "\\%-10[goto-node] Go to a node specified by name.\n"
+msgstr " %-10s Gå til emne angivet ved navn.\n"
+
+#: info/infodoc.c:76
+#, fuzzy
+msgid "\\%-10[search] Search forward for a specified string.\n"
+msgstr " %-10s Søg fremad efter en given streng,\n"
+
+#: info/infodoc.c:77
+#, fuzzy
+msgid "\\%-10[search-previous] Search for previous occurrence.\n"
+msgstr "\\%-10[prev-node] Flyt til emnet 'Forrige' i dette emne.\n"
+
+#: info/infodoc.c:78
+#, fuzzy
+msgid "\\%-10[search-next] Search for next occurrence.\n"
+msgstr ""
+" %-10s Søg efter en angivet tekst i denne Info-fils indeksindgange,\n"
+
+#: info/infodoc.c:79
+#, fuzzy
+msgid ""
+"\\%-10[index-search] Search for a specified string in the index, and\n"
+" select the node referenced by the first entry found.\n"
+msgstr ""
+"\\%-10[index-search] Søg efter den angivne streng i denne Infos "
+"indeksindgange\n"
+" og vælg det emne, der refereres til af den først fundne "
+"indgang.\n"
+
+#: info/infodoc.c:81
+#, fuzzy
+msgid "\\%-10[abort-key] Cancel the current operation.\n"
+msgstr "Afbryd nuværende aktivitet"
+
+#: info/infodoc.c:89
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"Grundlæggende kommandoer i Info-vinduer\n"
+"***************************************\n"
+
+#: info/infodoc.c:92
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s Afslut hjælp.\n"
+
+#: info/infodoc.c:93
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Afslut hele Info-programmet.\n"
+
+#: info/infodoc.c:94
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Kør info introduktionen.\n"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr " %-10s Flyt til emnet 'næste' i dette emne.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr " %-10s Flyt til emnet 'Forrige' i dette emne.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s Gå et niveau op.\n"
+
+#: info/infodoc.c:101
+#, fuzzy, c-format
+msgid ""
+" %-10s Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+"\\%-10[menu-item] Vælg menupunkt angivet ved navn.\n"
+" Valg af menupunkt vælger et andet emne.\n"
+
+#: info/infodoc.c:103
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr " %-10s Følg en krydshenvisning. Indlæser referencens navn.\n"
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr " %-10s Flyt til vinduets sidste synlige emne-felt.\n"
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr " %-10s Hop til næste hypertekst-lænke i dette emne.\n"
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s Følg hypertekst-lænken under markøren.\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr " %-10s Flyt til emnet 'katalog'. Svarer til 'g (KATALOG)'.\n"
+
+#: info/infodoc.c:108
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr " %-10s Gå til emnet Top. Svarer til 'g Top'.\n"
+
+#: info/infodoc.c:110
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"Bevægelser indenfor et emne:\n"
+"----------------------------\n"
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s Rul en side frem.\n"
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s Rul en side tilbage.\n"
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s Gå til starten af emnet.\n"
+
+#: info/infodoc.c:115
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s Gå til enden af emnet.\n"
+
+#: info/infodoc.c:116
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s Rul 1 linje frem.\n"
+
+#: info/infodoc.c:117
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s Rul en linje tilbage.\n"
+
+#: info/infodoc.c:119
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"Andre kommandoer:\n"
+"-----------------\n"
+
+#: info/infodoc.c:121
+#, fuzzy, c-format
+msgid " %-10s Pick first...ninth item in node's menu.\n"
+msgstr " %-10s Vælg første ... niende punkt i emnets menu.\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s Vælg sidste punkt i emnets menu.\n"
+
+#: info/infodoc.c:125
+#, fuzzy, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr ""
+"\\%-10[index-search] Søg efter den angivne streng i denne Infos "
+"indeksindgange\n"
+" og vælg det emne, der refereres til af den først fundne "
+"indgang.\n"
+
+#: info/infodoc.c:127
+#, fuzzy, c-format
+msgid ""
+" %-10s Move to node specified by name.\n"
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+"\\%-10[goto-node] Gå til emne angivet ved navn.\n"
+" Du kan også medtage filnavn, som (FILNAVN)EMNENAVN.\n"
+
+#: info/infodoc.c:129
+#, fuzzy, c-format
+msgid ""
+" %-10s Search forward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+"\\%-10[search] Søg fremad efter en given streng\n"
+" og vælg emnet med den næste forekomst.\n"
+
+#: info/infodoc.c:131
+#, fuzzy, c-format
+msgid ""
+" %-10s Search backward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+"\\%-10[search] Søg fremad efter en given streng\n"
+" og vælg emnet med den næste forekomst.\n"
+
+#: info/infodoc.c:312
+msgid "The current search path is:\n"
+msgstr "Den nuværende søgesti er:\n"
+
+#: info/infodoc.c:316
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"Tilgængelige kommandoer i infovinduer:\n"
+"\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"Tilgængelige kommandoer i ekko-område:\n"
+"\n"
+
+#: info/infodoc.c:343
+#, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+"Følgende kommandoer kan kun køres via %s:\n"
+"\n"
+
+#: info/infodoc.c:347
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+"Følgende kommandoer kan slet ikke køres:\n"
+"\n"
+
+#: info/infodoc.c:477
+msgid "Display help message"
+msgstr "Vis hjælp"
+
+#: info/infodoc.c:495
+msgid "Visit Info node `(info)Help'"
+msgstr "Besøg infoemnet '(info)Help'"
+
+#: info/infodoc.c:633
+msgid "Print documentation for KEY"
+msgstr "Vis dokumentation for TAST"
+
+#: info/infodoc.c:645
+#, c-format
+msgid "Describe key: %s"
+msgstr "Beskriv tast: %s"
+
+#: info/infodoc.c:656
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s er ikke defineret."
+
+#: info/infodoc.c:672 info/infodoc.c:701
+#, c-format
+msgid "%s is undefined."
+msgstr "%s er ikke defineret."
+
+#: info/infodoc.c:722
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s er defineret til %s."
+
+#: info/infodoc.c:1146
+msgid "Show what to type to execute a given command"
+msgstr "Vis hvad der skal tastes, for at udføre en given kommando"
+
+#: info/infodoc.c:1150
+msgid "Where is command: "
+msgstr "Hvor er kommando: "
+
+#: info/infodoc.c:1172
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "'%s' er ikke på nogen taster"
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s kan kun udføres via %s."
+
+#: info/infodoc.c:1183
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s kan udføres via %s."
+
+#: info/infodoc.c:1188
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "Der er ingen funktion kaldet '%s'"
+
+#: info/infodoc.c:96
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"Valg af ander emnder:\n"
+"---------------------\n"
+
+#: info/infokey.c:170
+msgid "incorrect number of arguments"
+msgstr "ugyldigt antal parametre"
+
+#: info/infokey.c:201
+#, c-format
+msgid "cannot open input file `%s'"
+msgstr "can ikke åbne inddata-filen '%s'."
+
+#: info/infokey.c:215
+#, c-format
+msgid "cannot create output file `%s'"
+msgstr "kan ikke oprette uddatafil '%s'"
+
+#: info/infokey.c:226
+#, c-format
+msgid "error writing to `%s'"
+msgstr "fejl under skrivning til '%s'"
+
+#: info/infokey.c:232
+#, c-format
+msgid "error closing output file `%s'"
+msgstr "fejl under lukning af uddatafilen '%s'"
+
+#: info/infokey.c:450
+msgid "key sequence too long"
+msgstr "nøglesekvens for lang"
+
+#: info/infokey.c:529
+msgid "missing key sequence"
+msgstr "manglende nøglesekvens"
+
+#: info/infokey.c:610
+msgid "NUL character (\\000) not permitted"
+msgstr "NUL-tegn (\\000) ikke tilladt"
+
+#: info/infokey.c:641
+#, c-format
+msgid "NUL character (^%c) not permitted"
+msgstr "NUL-tegn (^%c) ikke tilladt"
+
+#: info/infokey.c:665
+msgid "missing action name"
+msgstr "mangler handlingsnavn"
+
+#: info/infokey.c:681 info/infokey.c:756
+msgid "section too long"
+msgstr "for langt afsnit"
+
+#: info/infokey.c:688
+#, c-format
+msgid "unknown action `%s'"
+msgstr "ukendt handling '%s'"
+
+#: info/infokey.c:698
+msgid "action name too long"
+msgstr "for langt handlingsnavn"
+
+#: info/infokey.c:712
+#, c-format
+msgid "extra characters following action `%s'"
+msgstr "ekstra tegn følger handlingen '%s'"
+
+#: info/infokey.c:723
+msgid "missing variable name"
+msgstr "manglende variabelnavn"
+
+#: info/infokey.c:733
+msgid "missing `=' immediately after variable name"
+msgstr "mangler '=' umiddelbart efter variabelnavn"
+
+#: info/infokey.c:741
+msgid "variable name too long"
+msgstr "for langt variabelnavn"
+
+#: info/infokey.c:765
+msgid "value too long"
+msgstr "for lang værdi"
+
+#: info/infokey.c:890
+#, c-format
+msgid "\"%s\", line %u: "
+msgstr "\"%s\", linje %u: "
+
+#: info/infokey.c:906
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [INPUT-FILE]\n"
+"\n"
+"Compile infokey source file to infokey file. Reads INPUT-FILE (default\n"
+"$HOME/.infokey) and writes compiled key file to (by default) $HOME/.info.\n"
+"\n"
+"Options:\n"
+" --output FILE output to FILE instead of $HOME/.info\n"
+" --help display this help and exit.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"Brug: %s [TILVALG]... [INDDATA-FIL]\n"
+"\n"
+"Oversæt en infokey-kildefil til en infokey-fil. Læser INDDATA-FIL (som "
+"standard\n"
+"$HOME/.infokey) og skriver oversat fil til (som standard) $HOME/.info.\n"
+"\n"
+"Tilvalg:\n"
+" --output FILNAVN uddata til FILNAVN i stedet for $HOME/.info\n"
+" --help vis denne hjælp og afslut.\n"
+" --version vis versionsoplysninger og afslut.\n"
+"\n"
+"Oversæt infokey-kildefil til infokey-fil. Læser INDDATA-FIL (standard\n"
+"$HOME/.infokey) og skriver oversat key-fil til $HOME/.info.\n"
+
+#: info/infomap.c:955
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "Ignorerer ugyldig infokey-fil '%s' - for lille"
+
+#: info/infomap.c:958
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "Ignorerer ugyldig infokey-fil '%s' - for stor"
+
+#: info/infomap.c:971
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "Fejl under læsning af infokey-fil '%s' - \"short read\""
+
+#: info/infomap.c:990
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+"Ugyldig infokey-fil '%s' (ugyldige magiske tal) -- kør infokey for at "
+"opdatere den"
+
+#: info/infomap.c:999
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr "Din infokey-fil '%s' er for gammel -- kør infokey for at opdatere den"
+
+#: info/infomap.c:1015
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+"Ugyldig infokey-fil '%s' (ugyldig afsnitslængde) -- kør infokey for at "
+"opdatere den"
+
+#: info/infomap.c:1036
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr ""
+"Ugyldig infokey-fil '%s' (ugyldig afsnitskode) -- kør infokey for at "
+"opdatere den"
+
+#: info/infomap.c:1171
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr "Ugyldige data i infokey-fil -- visse tastebindinger blev ignoreret"
+
+#: info/infomap.c:1221
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr ""
+"Ugyldige data i infokey-fil -- visse variabelindstillinger blev ignoreret"
+
+#: info/m-x.c:68
+msgid "Read the name of an Info command and describe it"
+msgstr "Indlæs navnet på en info-kommando og beskriv den"
+
+#: info/m-x.c:72
+msgid "Describe command: "
+msgstr "Beskriv kommando: "
+
+#: info/m-x.c:95
+msgid "Read a command name in the echo area and execute it"
+msgstr "Indlæs et kommandonavn i ekko-området og udfør den"
+
+#: info/m-x.c:139
+msgid "Cannot execute an `echo-area' command here."
+msgstr "Kan ikke udføre en 'ekko-område'-kommando her."
+
+#: info/m-x.c:153
+#, fuzzy, c-format
+msgid "Undefined command: %s"
+msgstr "Ukendt kommando '%s'"
+
+#: info/m-x.c:159
+msgid "Set the height of the displayed window"
+msgstr "Sæt højden på det viste vindue"
+
+#: info/m-x.c:172
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Sæt skærmhøjden til (%d): "
+
+#: info/makedoc.c:166 info/makedoc.c:174
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+" Kildetekster gennemtrævlet for at inkludere filen;\n"
+"\n"
+
+#: info/makedoc.c:556
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "Kunne ikke bearbejde filen %s.\n"
+
+#: info/nodemenu.c:30
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+"\n"
+"* Menu:\n"
+" (Fil)Emne linjer Størr. Indeholder fil\n"
+" ---------- ----- ---- ---------------"
+
+#: info/nodemenu.c:201
+msgid ""
+"Here is the menu of nodes you have recently visited.\n"
+"Select one from this menu, or use `\\[history-node]' in another window.\n"
+msgstr ""
+"Her er menuen med emner, du har besøgt for nylig.\n"
+"Vælg et fra denne menu eller brug '\\[history-node]' i et andet vindue,\n"
+
+#: info/nodemenu.c:223
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr "Opret et vindue med en menu, der indeholder alle nyligt besøgte emner"
+
+#: info/nodemenu.c:303
+msgid "Select a node which has been previously visited in a visible window"
+msgstr "Vælg et emne, som tidligere har været besøgt i et synligt vindue"
+
+#: info/nodemenu.c:316
+msgid "Select visited node: "
+msgstr "Vælg besøgt emne: "
+
+#: info/nodemenu.c:336 info/session.c:2578
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "Referencen forsvandt! (%s)."
+
+#: info/search.c:166
+#, c-format
+msgid "regexp error: %s"
+msgstr ""
+
+#: info/session.c:164
+#, c-format
+msgid ""
+"Welcome to Info version %s. Type \\[get-help-window] for help, \\[menu-item] "
+"for menu item."
+msgstr ""
+"Velkommen til Info version %s. Skriv \\[get-help-window] for hjælp. \\[menu-"
+"item] for menupunkt."
+
+#: info/session.c:625
+msgid "Move down to the next line"
+msgstr "Gå ned til næste linje"
+
+#: info/session.c:661
+msgid "Move up to the previous line"
+msgstr "Gå op til forrige linje"
+
+#: info/session.c:931
+msgid "Move to the end of the line"
+msgstr "Gå til linjeslutning"
+
+#: info/session.c:942
+msgid "Move to the start of the line"
+msgstr "Gå til linjestart"
+
+#: info/session.c:1142
+msgid "Next"
+msgstr "Næste"
+
+#: info/session.c:1158 info/session.c:1283
+msgid "No more nodes within this document."
+msgstr "Ikke flere emner i dette dokument."
+
+#: info/session.c:1309
+msgid "No `Prev' for this node."
+msgstr "Ingen 'Forrige' i dette emne."
+
+#: info/session.c:1329
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr "Ingen 'Forrige' eller 'Op' for dette emne i dette dokument."
+
+#: info/session.c:1391
+msgid "Move forwards or down through node structure"
+msgstr "Gå frem eller ned gennem emne-strukturen"
+
+#: info/session.c:1407
+msgid "Move backwards or up through node structure"
+msgstr "Gå tilbage eller op gennem emne-strukturen"
+
+#: info/session.c:1508
+msgid "Scroll forward in this window"
+msgstr "Rul tilbage i vinduet"
+
+#: info/session.c:1516
+msgid "Scroll forward in this window and set default window size"
+msgstr "Rul frem i vinduet og sæt standard vinduesstørrelse"
+
+#: info/session.c:1524
+msgid "Scroll forward in this window staying within node"
+msgstr "Rul frem i vinduet i samme emne"
+
+#: info/session.c:1532
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr "Rul frem i vinduet i samme emne og sæt standard vinduesstørrelse"
+
+#: info/session.c:1540
+msgid "Scroll backward in this window"
+msgstr "Rul tilbage i vinduet"
+
+#: info/session.c:1548
+msgid "Scroll backward in this window and set default window size"
+msgstr "Rul tilbage i vinduet og sæt standard vinduesstørrelse"
+
+#: info/session.c:1557
+msgid "Scroll backward in this window staying within node"
+msgstr "Rul tilbage i vinduet indenfor samme emne"
+
+#: info/session.c:1565
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr ""
+"Rul tilbage i vinduet indenfor samme emne og sæt standard vinduesstørrelse"
+
+#: info/session.c:1573
+msgid "Move to the start of this node"
+msgstr "Gå til starten af dette emne"
+
+#: info/session.c:1580
+msgid "Move to the end of this node"
+msgstr "Gå til slutningen af dette emne"
+
+#: info/session.c:1587
+msgid "Scroll down by lines"
+msgstr "Rul N linjer ned"
+
+#: info/session.c:1604
+msgid "Scroll up by lines"
+msgstr "Rul N linjer op"
+
+#: info/session.c:1622
+msgid "Scroll down by half screen size"
+msgstr "Rul en halv skærmstørrelse ned"
+
+#: info/session.c:1648
+msgid "Scroll up by half screen size"
+msgstr "Rul en halv skærmstørrelse op"
+
+#: info/session.c:1677
+msgid "Select the next window"
+msgstr "Vælg det næste vindue"
+
+#: info/session.c:1716
+msgid "Select the previous window"
+msgstr "Vælg det forrige vindue"
+
+#: info/session.c:1767
+msgid "Split the current window"
+msgstr "Opdel nuværende vindue"
+
+#: info/session.c:1848
+msgid "Delete the current window"
+msgstr "Slet nuværende vindue"
+
+#: info/session.c:1856
+msgid "Cannot delete a permanent window"
+msgstr "Kan ikke slette et permanent vindue"
+
+#: info/session.c:1888
+msgid "Delete all other windows"
+msgstr "Slet alle andre vinduer"
+
+#: info/session.c:1934
+msgid "Scroll the other window"
+msgstr "Rul det andet vindue"
+
+#: info/session.c:1955
+msgid "Scroll the other window backward"
+msgstr "Rul det andet vindue baglæns"
+
+#: info/session.c:1961
+msgid "Grow (or shrink) this window"
+msgstr "Forstør (eller formindsk) dette vindue"
+
+#: info/session.c:1972
+msgid "Divide the available screen space among the visible windows"
+msgstr "Fordel det tilgængelige skærmområde mellem de synlige vinduer"
+
+#: info/session.c:1979
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "Vælg/fravælg linjeombrydning i nuværende vindue"
+
+#: info/session.c:1986
+msgid "Toggle the usage of regular expressions in searches"
+msgstr ""
+
+#: info/session.c:1990
+msgid "Using regular expressions for searches."
+msgstr ""
+
+#: info/session.c:1991
+msgid "Using literal strings for searches."
+msgstr ""
+
+#: info/session.c:2162
+msgid "Select the Next node"
+msgstr "Vælg emnet Næste"
+
+#: info/session.c:2170
+msgid "Select the Prev node"
+msgstr "Vælg emnet Forrige"
+
+#: info/session.c:2178
+msgid "Select the Up node"
+msgstr "Vælg emnet 'Op'"
+
+#: info/session.c:2185
+msgid "Select the last node in this file"
+msgstr "Vælg det sidste emne i filen"
+
+#: info/session.c:2212 info/session.c:2245
+msgid "This window has no additional nodes"
+msgstr "Dette vindue har ingen yderligere emner"
+
+#: info/session.c:2218
+msgid "Select the first node in this file"
+msgstr "Vælg det første emne i filen"
+
+#: info/session.c:2252
+msgid "Select the last item in this node's menu"
+msgstr "Vælg det sidste punkt i emnets menu"
+
+#: info/session.c:2258
+msgid "Select this menu item"
+msgstr "Vælg dette menupunkt"
+
+#: info/session.c:2291
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "Der er ikke %d punkter i denne menu."
+
+#: info/session.c:2485 info/session.c:2486
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Menupunkt (%s): "
+
+#: info/session.c:2489
+msgid "Menu item: "
+msgstr "Menupunkt: "
+
+#: info/session.c:2496 info/session.c:2497
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Følg krydsreference (%s): "
+
+#: info/session.c:2500
+msgid "Follow xref: "
+msgstr "Følg krydsreference: "
+
+#: info/session.c:2629
+msgid "Read a menu item and select its node"
+msgstr "Indlæs et menupunkt og vælg dets emne"
+
+#: info/session.c:2637
+msgid "Read a footnote or cross reference and select its node"
+msgstr "Indlæs en fodnote eller krydsreference og vælg dets emne"
+
+#: info/session.c:2643
+msgid "Move to the start of this node's menu"
+msgstr "Flyt til starten af dette emnes menu"
+
+#: info/session.c:2667
+msgid "Visit as many menu items at once as possible"
+msgstr "Besøg så mange menupunkter på en gang, som det er muligt"
+
+#: info/session.c:2695
+msgid "Read a node name and select it"
+msgstr "Indlæs et emnenavn og vælg det"
+
+#: info/session.c:2750 info/session.c:2755
+msgid "Goto node: "
+msgstr "Gå til emne: "
+
+#: info/session.c:2819
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "Ingen menu i emne '%s'."
+
+#: info/session.c:2865
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "Intet menupunkt '%s' i emne '%s'."
+
+#: info/session.c:2895
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr "Kunne ikke finde emnet, der refereres til af '%s' i '%s'."
+
+#: info/session.c:2945
+msgid "Read a list of menus starting from dir and follow them"
+msgstr "Indlæs en liste med menuer, der starter i katalog, og følg dem"
+
+#: info/session.c:2947
+msgid "Follow menus: "
+msgstr "Følg menuer: "
+
+#: info/session.c:3140
+msgid "Find the node describing program invocation"
+msgstr "Find emnet, der beskriver hvordan programmet startes"
+
+#: info/session.c:3142
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "Find programstart emne for [%s]: "
+
+#: info/session.c:3180
+msgid "Read a manpage reference and select it"
+msgstr "Indlæs en man-side reference og vælg den"
+
+#: info/session.c:3184
+msgid "Get Manpage: "
+msgstr "Hent man-side: "
+
+#: info/session.c:3214
+msgid "Select the node `Top' in this file"
+msgstr "Vælg emnet 'Top' i filen"
+
+#: info/session.c:3220
+msgid "Select the node `(dir)'"
+msgstr "Vælg emnet '(katalog)'"
+
+#: info/session.c:3237 info/session.c:3239
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Fjern emne (%s): "
+
+#: info/session.c:3291
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "Kan ikke fjerne emnet '%s'"
+
+#: info/session.c:3301
+msgid "Cannot kill the last node"
+msgstr "Kan ikke fjerne det sidste emne"
+
+#: info/session.c:3387
+msgid "Select the most recently selected node"
+msgstr "Vælg det sidst valgt emne"
+
+#: info/session.c:3393
+msgid "Kill this node"
+msgstr "Fjern dette emne"
+
+#: info/session.c:3401
+msgid "Read the name of a file and select it"
+msgstr "Indlæs et filnavn og vælg det"
+
+#: info/session.c:3405
+msgid "Find file: "
+msgstr "Find fil: "
+
+#: info/session.c:3422
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "Kan ikke finde '%s'."
+
+#: info/session.c:3465 info/session.c:3583
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "Kunne ikke oprette uddatafil '%s'."
+
+#: info/session.c:3479 info/session.c:3601 info/session.c:3661
+msgid "Done."
+msgstr "Færdig."
+
+#: info/session.c:3534
+#, c-format
+msgid "Writing node %s..."
+msgstr "Skriver emnet %s..."
+
+#: info/session.c:3610
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr ""
+"Udskriv indholdet af dette emne (ved videreførsel gennem INFO_PRINT_COMMAND)"
+
+#: info/session.c:3645
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "Kan ikke åbne videreførsel til '%s'."
+
+#: info/session.c:3651
+#, c-format
+msgid "Printing node %s..."
+msgstr "Udskriver emnet %s..."
+
+#: info/session.c:3900
+msgid "Search continued from the end of the document."
+msgstr ""
+
+#: info/session.c:3905
+#, fuzzy
+msgid "Search continued from the beginning of the document."
+msgstr "Slet bagud til linjestart"
+
+#: info/session.c:3922
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "Leder efter underfilen %s ..."
+
+#: info/session.c:3979
+msgid "Read a string and search for it case-sensitively"
+msgstr "Indlæs en tekst og søg efter den uden versalfølsomhed"
+
+#: info/session.c:3986
+msgid "Read a string and search for it"
+msgstr "Indlæs en tekst og søg for den"
+
+#: info/session.c:3994
+msgid "Read a string and search backward for it"
+msgstr "Indlæs en tekst og søg baglæns efter den"
+
+#: info/session.c:4030 info/session.c:4036
+#, fuzzy, c-format
+msgid "%s%s%s [%s]: "
+msgstr "%s%sefter tekst [%s]: "
+
+#: info/session.c:4031 info/session.c:4037
+msgid "Regexp search"
+msgstr ""
+
+#: info/session.c:4032 info/session.c:4038
+#, fuzzy
+msgid " case-sensitively"
+msgstr " versalfølsomt"
+
+#: info/session.c:4033 info/session.c:4039
+#, fuzzy
+msgid " backward"
+msgstr "Søg baglæns"
+
+#: info/session.c:4037
+msgid "Search"
+msgstr "Søg"
+
+#: info/session.c:4079
+msgid "Search failed."
+msgstr "Søgning mislykkedes."
+
+#: info/session.c:4097
+msgid "Repeat last search in the same direction"
+msgstr "Gentag sidste søgning i samme retning"
+
+#: info/session.c:4100 info/session.c:4110
+msgid "No previous search string"
+msgstr "Ingen tidligere søgetekst"
+
+#: info/session.c:4107
+msgid "Repeat last search in the reverse direction"
+msgstr "Gentag sidste søgning i modsat retning"
+
+#: info/session.c:4126 info/session.c:4132
+msgid "Search interactively for a string as you type it"
+msgstr "Søg interaktivt efter en tekst, mens du skriver den"
+
+#: info/session.c:4212
+#, fuzzy
+msgid "Regexp I-search backward: "
+msgstr "I-søgning baglæns: "
+
+#: info/session.c:4213
+msgid "I-search backward: "
+msgstr "I-søgning baglæns: "
+
+#: info/session.c:4215
+#, fuzzy
+msgid "Regexp I-search: "
+msgstr "I-søgning: "
+
+#: info/session.c:4216
+msgid "I-search: "
+msgstr "I-søgning: "
+
+#: info/session.c:4241 info/session.c:4243
+msgid "Failing "
+msgstr "Fejler "
+
+#: info/session.c:4734
+msgid "Move to the previous cross reference"
+msgstr "Gå til foregående krydsreference"
+
+#: info/session.c:4752
+msgid "Move to the next cross reference"
+msgstr "Gå til næste krydsreference"
+
+#: info/session.c:4774
+msgid "Select reference or menu item appearing on this line"
+msgstr "Vælg reference eller menupunkt, der optræder på denne linje"
+
+#: info/session.c:4797
+msgid "Cancel current operation"
+msgstr "Afbryd nuværende aktivitet"
+
+#: info/session.c:4804
+msgid "Quit"
+msgstr "Afslut"
+
+#: info/session.c:4813
+msgid "Move the cursor to a specific line of the window"
+msgstr "Flyt markør til bestemt linje i vinduet"
+
+#: info/session.c:4845
+msgid "Redraw the display"
+msgstr "Gentegn skærmen"
+
+#: info/session.c:4882
+msgid "Quit using Info"
+msgstr "Afslut info"
+
+#: info/session.c:4895
+msgid "Run command bound to this key's lowercase variant"
+msgstr "Kør kommandoen, der er bundet til denne tasts småbogstavs-variant"
+
+#: info/session.c:4906
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "Ukendt kommando (%s)."
+
+#: info/session.c:4909
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "\"%s\" er ugyldig"
+
+#: info/session.c:4910
+#, fuzzy, c-format
+msgid "`%s' is invalid"
+msgstr "\"%s\" er ugyldig"
+
+#: info/session.c:5125
+msgid "Add this digit to the current numeric argument"
+msgstr "Tilføj dette tegn til det nuværende numeriske parameter"
+
+#: info/session.c:5134
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "Start (eller gang med 4) det nuværende numeriske parameter"
+
+#: info/session.c:5149
+msgid "Internally used by \\[universal-argument]"
+msgstr "Bruges internt af \\[universal-argument]"
+
+#: info/tilde.c:336
+#, c-format
+msgid "readline: Out of virtual memory!\n"
+msgstr "readline: Virtuel hukommelse opbrugt!\n"
+
+#: info/variables.c:37
+msgid "When \"On\", footnotes appear and disappear automatically"
+msgstr "Når \"On\", vises og skjules fodnoter automatisk"
+
+#: info/variables.c:41
+msgid "When \"On\", creating or deleting a window resizes other windows"
+msgstr ""
+"Når \"On\", ændres størrelsen på andre vinduer, når det vindues oprettes "
+"eller fjernes"
+
+#: info/variables.c:45
+msgid "When \"On\", flash the screen instead of ringing the bell"
+msgstr "Når \"On\", blinker skærmen i stedet for at ringe med systemklokken"
+
+#: info/variables.c:49
+msgid "When \"On\", errors cause the bell to ring"
+msgstr "Når \"On\", vil fejl aktivere systemklokken"
+
+#: info/variables.c:53
+msgid "When \"On\", Info garbage collects files which had to be uncompressed"
+msgstr ""
+"Når \"On\", vil info fjerne eventuelle afkomprimerede filer, den laver."
+
+#: info/variables.c:56
+msgid "When \"On\", the portion of the matched search string is highlighted"
+msgstr "Når \"On\", vil trufne søgestrenge blive markeret"
+
+#: info/variables.c:60
+msgid "Controls what happens when scrolling is requested at the end of a node"
+msgstr "Bestemmer, hvad der sker, når rulning forsøges ved slutning af et emne"
+
+#: info/variables.c:65
+msgid "Same as scroll-behaviour"
+msgstr ""
+
+#: info/variables.c:69
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr "Antallet af linjer, der rulles, når markøren flytter ud af vinduet"
+
+#: info/variables.c:73
+msgid "Controls whether scroll-behavior affects cursor movement commands"
+msgstr ""
+
+#: info/variables.c:77
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr "Når \"On\", vil Info benytte og vise ISO Latin tegn"
+
+#: info/variables.c:81
+#, fuzzy
+msgid ""
+"What to do when a scrolling command is issued at the end of the last node"
+msgstr "Bestemmer, hvad der sker, når rulning forsøges ved slutning af et emne"
+
+#: info/variables.c:88
+msgid "Explain the use of a variable"
+msgstr "Forklar brugen af en variabel"
+
+#: info/variables.c:94
+msgid "Describe variable: "
+msgstr "Beskriv variabel: "
+
+#: info/variables.c:113
+msgid "Set the value of an Info variable"
+msgstr "Sæt værdien af en Info-variabel"
+
+#: info/variables.c:119
+msgid "Set variable: "
+msgstr "Sæt variabel: "
+
+#: info/variables.c:137
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "Sæt %s til værdien (%d): "
+
+#: info/variables.c:178
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "Sæt %s til værdien (%s): "
+
+#: info/window.c:1026
+msgid "--*** Tags out of Date ***"
+msgstr "--*** Mærker (tags) er forældede ***"
+
+#: info/window.c:1037
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), linjer ---, "
+
+#: info/window.c:1044
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d linjer -%s--"
+
+#: info/window.c:1048
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d linjer -%s--"
+
+#: info/window.c:1055
+#, c-format
+msgid " Subfile: %s"
+msgstr " Underfil: %s"
+
+#: install-info/install-info.c:221
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: advarsel: "
+
+#: install-info/install-info.c:270
+#, c-format
+msgid " for %s"
+msgstr " for %s"
+
+#: install-info/install-info.c:500
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr "\tPrøv '%s --help' for en komplet tilvalgsliste.\n"
+
+#: install-info/install-info.c:508
+#, fuzzy, c-format
+msgid "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+msgstr "Brug: %s [TILVALG]... TEXINFO-FIL...\n"
+
+#: install-info/install-info.c:510
+msgid "Add or remove entries in INFO-FILE from the Info directory DIR-FILE."
+msgstr ""
+
+#: install-info/install-info.c:513
+msgid ""
+"Options:\n"
+" --debug report what is being done.\n"
+" --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+" don't insert any new entries.\n"
+" --description=TEXT the description of the entry is TEXT; used with\n"
+" the --name option to become synonymous with the\n"
+" --entry option.\n"
+" --dir-file=NAME specify file name of Info directory file;\n"
+" equivalent to using the DIR-FILE argument.\n"
+" --dry-run same as --test."
+msgstr ""
+
+#: install-info/install-info.c:525
+msgid ""
+" --entry=TEXT insert TEXT as an Info directory entry.\n"
+" TEXT is written as an Info menu item line followed\n"
+" by zero or more extra lines starting with "
+"whitespace.\n"
+" If you specify more than one entry, all are added.\n"
+" If you don't specify any entries, they are determined\n"
+" from information in the Info file itself.\n"
+" When removing, TEXT specifies the entry to remove.\n"
+" TEXT is only removed as a last resort, if the\n"
+" entry as determined from the Info file is not "
+"present,\n"
+" and the basename of the Info file isn't found either."
+msgstr ""
+
+#: install-info/install-info.c:537
+msgid ""
+" --help display this help and exit.\n"
+" --info-dir=DIR same as --dir-file=DIR/dir.\n"
+" --info-file=FILE specify Info file to install in the directory;\n"
+" equivalent to using the INFO-FILE argument.\n"
+" --item=TEXT same as --entry=TEXT.\n"
+" --keep-old do not replace entries, or remove empty sections.\n"
+" --menuentry=TEXT same as --name=TEXT.\n"
+" --name=TEXT the name of the entry is TEXT; used with --description\n"
+" to become synonymous with the --entry option.\n"
+" --no-indent do not format new entries in the DIR file.\n"
+" --quiet suppress warnings."
+msgstr ""
+
+#: install-info/install-info.c:550
+msgid ""
+" --regex=R put this file's entries in all sections that match the\n"
+" regular expression R (ignoring case).\n"
+" --remove same as --delete.\n"
+" --remove-exactly only remove if the info file name matches exactly;\n"
+" suffixes such as .info and .gz are not ignored.\n"
+" --section=SEC put entries in section SEC of the directory.\n"
+" If you specify more than one section, all the entries\n"
+" are added in each of the sections.\n"
+" If you don't specify any sections, they are "
+"determined\n"
+" from information in the Info file itself.\n"
+" --section R SEC equivalent to --regex=R --section=SEC --add-once."
+msgstr ""
+
+#: install-info/install-info.c:563
+msgid ""
+" --silent suppress warnings.\n"
+" --test suppress updating of DIR-FILE.\n"
+" --version display version information and exit."
+msgstr ""
+
+#: install-info/install-info.c:570
+#, fuzzy
+msgid ""
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+"Rapportér fejl i programmet på engelsk til bug-texinfo@gnu.org,\n"
+"generelle spørgsmål og diskussion til help-texinfo@gnu.org,\n"
+"oversættelsesfejl til claus_h@image.dk\n"
+"Texinfos hjemmeside: http://www.gnu.org/software/texinfo/"
+
+#: install-info/install-info.c:597
+#, fuzzy, c-format
+msgid ""
+"This is the file .../info/dir, which contains the\n"
+"topmost node of the Info hierarchy, called (dir)Top.\n"
+"The first time you invoke Info you start off looking at this node.\n"
+"\n"
+"%s\tThis is the top of the INFO tree\n"
+"\n"
+" This (the Directory node) gives a menu of major topics.\n"
+" Typing \"q\" exits, \"?\" lists all Info commands, \"d\" returns here,\n"
+" \"h\" gives a primer for first-timers,\n"
+" \"mEmacs<Return>\" visits the Emacs manual, etc.\n"
+"\n"
+" In Emacs, you can click mouse button 2 on a menu item or cross reference\n"
+" to select it.\n"
+"\n"
+"%s\n"
+msgstr ""
+"Dette er filen .../info/dir, som indeholde det øverste\n"
+"emne i Info-hierakiet, kaldet (katalog)Top.\n"
+"Første gang, du kører Info, vil du indledningsvist se dette emne.\n"
+"\n"
+"%s\tDette er toppen af INFO-træet\n"
+"\n"
+" Dette (katalog emnet) indeholder en menu med hovedemner.\n"
+" Afslut med \"q\", \"?\" viser alle Info-kommandoer, \"d\" returnerer "
+"hertil,\n"
+" \"h\" introducerer nybegyndere for Info,\n"
+" \"mEmacs<Return>\" besøger Emacs-manualen, osv.\n"
+"\n"
+" I Emacs kan du klikke med museknap 2 på et menupunkt eller krydsreference\n"
+" for at vælge den.\n"
+"\n"
+"* Menu:\n"
+
+#: install-info/install-info.c:622
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr "%s: kunne ikke læse (%s) og kunne ikke oprette (%s)\n"
+
+#: install-info/install-info.c:715
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: tom fil"
+
+#: install-info/install-info.c:1046 install-info/install-info.c:1086
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "START-INFO-DIR-ENTRY uden tilhørende END-INFO-DIR-ENTRY"
+
+#: install-info/install-info.c:1081
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "END-INFO-DIR-ENTRY uden tilhørende START-INFO-DIR-ENTRY"
+
+#: install-info/install-info.c:1946 install-info/install-info.c:1956
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr ""
+
+#: install-info/install-info.c:2036
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: Angiv kun Info-filen én gang.\n"
+
+#: install-info/install-info.c:2069
+#, c-format
+msgid "Extra regular expression specified, ignoring `%s'"
+msgstr ""
+
+#: install-info/install-info.c:2081
+#, c-format
+msgid "Error in regular expression `%s': %s"
+msgstr ""
+
+#: install-info/install-info.c:2139
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "overskydende kommandolinjeparameter '%s'"
+
+#: install-info/install-info.c:2143
+msgid "No input file specified; try --help for more information."
+msgstr "Ingen inddatafil angivet; prøv --help for mere information."
+
+#: install-info/install-info.c:2146
+msgid "No dir file specified; try --help for more information."
+msgstr "Intet katalog angivet; prøv --help for mere information."
+
+#: install-info/install-info.c:2288
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "ingen infokatalog-indgang i '%s'"
+
+#: install-info/install-info.c:2536
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "ingen indgange fundet for '%s'; intet slettet"
+
+#: lib/xexit.c:54
+msgid "ferror on stdout\n"
+msgstr ""
+
+#: lib/xexit.c:59
+msgid "fflush error on stdout\n"
+msgstr ""
+
+#: makeinfo/cmds.c:582 makeinfo/cmds.c:604
+#, fuzzy, c-format
+msgid "arguments to @%s ignored"
+msgstr "Ugyldigt argument til %c%s"
+
+#: makeinfo/cmds.c:779
+msgid "January"
+msgstr "januar"
+
+#: makeinfo/cmds.c:779
+msgid "February"
+msgstr "februar"
+
+#: makeinfo/cmds.c:779
+msgid "March"
+msgstr "marts"
+
+#: makeinfo/cmds.c:779
+msgid "April"
+msgstr "april"
+
+#: makeinfo/cmds.c:779
+msgid "May"
+msgstr "maj"
+
+#: makeinfo/cmds.c:780
+msgid "June"
+msgstr "juni"
+
+#: makeinfo/cmds.c:780
+msgid "July"
+msgstr "juli"
+
+#: makeinfo/cmds.c:780
+msgid "August"
+msgstr "august"
+
+#: makeinfo/cmds.c:780
+msgid "September"
+msgstr "september"
+
+#: makeinfo/cmds.c:780
+msgid "October"
+msgstr "oktober"
+
+#: makeinfo/cmds.c:781
+msgid "November"
+msgstr "november"
+
+#: makeinfo/cmds.c:781
+msgid "December"
+msgstr "december"
+
+#: makeinfo/cmds.c:1131
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "usandsynligt tegn %c i @var"
+
+#: makeinfo/cmds.c:1174
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "@sc parameter er kun versaler, derfor ingen virkning"
+
+#: makeinfo/cmds.c:1229
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "'{' forventedes, men fandt '%c'"
+
+#: makeinfo/cmds.c:1269
+msgid "end of file inside verb block"
+msgstr "filslutning inden i en verb-blok"
+
+#: makeinfo/cmds.c:1277
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "'}' forventedes, men fandt '%c'"
+
+#: makeinfo/cmds.c:1308
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+
+#: makeinfo/cmds.c:1504
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s er forældet"
+
+#: makeinfo/cmds.c:1612
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "@sp kræver et positivt tal, ikke '%s'"
+
+#: makeinfo/cmds.c:2023 makeinfo/footnote.c:81
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "Ugyldigt argument til %c%s"
+
+#: makeinfo/cmds.c:2033 makeinfo/makeinfo.c:4317
+msgid "asis"
+msgstr "asis"
+
+#: makeinfo/cmds.c:2035 makeinfo/cmds.c:2065 makeinfo/makeinfo.c:4319
+msgid "none"
+msgstr "none"
+
+#: makeinfo/cmds.c:2049
+#, fuzzy, c-format
+msgid "Bad argument to @%s"
+msgstr "Ugyldigt argument til %c%s"
+
+#: makeinfo/cmds.c:2063
+msgid "insert"
+msgstr ""
+
+#: makeinfo/cmds.c:2079
+#, fuzzy, c-format
+msgid "Bad argument to @%s: %s"
+msgstr "Ugyldigt argument til %c%s"
+
+#: makeinfo/cmds.c:2162
+#, c-format
+msgid "Expected @%s on or off, not `%s'"
+msgstr ""
+
+#: makeinfo/cmds.c:2182
+#, c-format
+msgid "Only @%s 10 or 11 is supported, not `%s'"
+msgstr ""
+
+#: makeinfo/defun.c:83
+msgid "Missing `}' in @def arg"
+msgstr "Manglende '}' i @def parameter"
+
+#: makeinfo/defun.c:711
+#, fuzzy, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr "Skal være i '%s' indsætning for at bruge '%sx'"
+
+#: makeinfo/files.c:434
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:637
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr ""
+
+#: makeinfo/files.c:645
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr ""
+
+#: makeinfo/files.c:693
+msgid "Output buffer not empty."
+msgstr ""
+
+#: makeinfo/float.c:181
+#, c-format
+msgid "Requested float type `%s' not previously used"
+msgstr ""
+
+#: makeinfo/float.c:376 makeinfo/float.c:382 makeinfo/index.c:959
+#: makeinfo/index.c:965
+msgid "See "
+msgstr "Se "
+
+#: makeinfo/footnote.c:149
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "'%c%s' kræver en parameter i '{...}', ikke blot '%s'"
+
+#: makeinfo/footnote.c:164
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "Ingen slutparentes for fodnote '%s'"
+
+#: makeinfo/footnote.c:197
+msgid "Footnote defined without parent node"
+msgstr "Fodnote defineret uden forældre-emne"
+
+#: makeinfo/footnote.c:209
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "Fodnoter indeni fodnoter er ikke tilladt"
+
+#: makeinfo/footnote.c:301 makeinfo/index.c:187
+msgid "Footnotes"
+msgstr "Fodnoter"
+
+#: makeinfo/html.c:91
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr ""
+
+#: makeinfo/html.c:180
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr ""
+
+#: makeinfo/html.c:426
+msgid "[unexpected] no html tag to pop"
+msgstr "[uventet] ingen html-mærker at \"pop\"'e"
+
+#: makeinfo/html.c:800
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "[uventet] ugyldigt emnenavn: '%s'"
+
+#: makeinfo/index.c:167
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "Ukendt indeks '%s'"
+
+#: makeinfo/index.c:232
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr "Info kan ikke håndtere ':' i indeksindgangen '%s'"
+
+#: makeinfo/index.c:410
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "Indeks '%s' eksisterer allerede"
+
+#: makeinfo/index.c:453
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "Ukendt indeks '%s' og/eller '%s' i @synindex"
+
+#: makeinfo/index.c:676
+msgid "(line )"
+msgstr ""
+
+#: makeinfo/index.c:684
+#, c-format
+msgid "(line %*d)"
+msgstr ""
+
+#: makeinfo/index.c:765
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "Ukendt indeks '%s' i @printindex"
+
+#: makeinfo/index.c:834
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "Indgang til indeks '%s' udenfor et emne"
+
+#: makeinfo/index.c:837 makeinfo/index.c:873
+msgid "(outside of any node)"
+msgstr "(udenfor et emne)"
+
+#: makeinfo/insertion.c:161
+msgid "@item not allowed in argument to @itemize"
+msgstr ""
+
+#: makeinfo/insertion.c:242
+msgid "Broken-Type in insertion_type_pname"
+msgstr "Broken-Type i insertion_type_pname"
+
+#: makeinfo/insertion.c:338
+msgid "Enumeration stack overflow"
+msgstr "Overløb i optællingsstak (enumeration stack)"
+
+#: makeinfo/insertion.c:370
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "bogstavsoverløb, genstarter ved %c"
+
+#: makeinfo/insertion.c:639
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s kræver en parameter: formatteringen for %citem"
+
+#: makeinfo/insertion.c:727
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr ""
+
+#: makeinfo/insertion.c:981
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "'@end' forventede '%s', men fandt '%s'"
+
+#: makeinfo/insertion.c:1349
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "Mangler en tilsvarende '%cend %s'"
+
+#: makeinfo/insertion.c:1618
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s kræver et bogstav eller ciffer"
+
+#: makeinfo/insertion.c:1718
+msgid "end of file inside verbatim block"
+msgstr "filslutning indeni en verbatim-blok"
+
+#: makeinfo/insertion.c:1942
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "@%s giver ingen mening i en '@%s'-blok"
+
+#: makeinfo/insertion.c:1978
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "@menu fundet før første @node, opretter 'Top' emne"
+
+#: makeinfo/insertion.c:1979
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr "måske skulle dit @top emne indsættes i @ifnottex i stedet for @ifinfo?"
+
+#: makeinfo/insertion.c:1991
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "@detailmenu fundet før første emne, opretter emnet 'Top'"
+
+#: makeinfo/insertion.c:2047
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr ""
+
+#: makeinfo/insertion.c:2061
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "@%s giver ingen mening i en '@%s'-blok"
+
+#: makeinfo/insertion.c:2092
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "Uparret '%c%s'"
+
+#: makeinfo/insertion.c:2097
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "'%c%s' kræver noget efterfølgende"
+
+#: makeinfo/insertion.c:2103
+#, fuzzy, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "Ugyldigt parameter '%s', '%s', benytter '%s'"
+
+#: makeinfo/insertion.c:2200
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "@%s giver ingen mening i en '@%s'-blok"
+
+#: makeinfo/insertion.c:2209
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "@itemx giver ingen mening i en '%s'-blok"
+
+#: makeinfo/insertion.c:2383
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "%c%s fundet udenfor en indsætningsblok"
+
+#: makeinfo/lang.c:1218
+#, c-format
+msgid "no default territory known for language `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:1281
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr "%s er ikke en gyldig ISO 639 sprogkode"
+
+#: makeinfo/lang.c:1399
+#, fuzzy, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "ukendt indkodningsnavn '%s'"
+
+#: makeinfo/lang.c:1407
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "beklager, indkodningen '%s' understøttes ikke"
+
+#: makeinfo/lang.c:1492
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "ugyldig indkodet tegn '%s'"
+
+#: makeinfo/lang.c:1800
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr "%c%s kræver 'i' eller 'j' som parameter, ikke '%c'"
+
+#: makeinfo/lang.c:1804
+#, c-format
+msgid "%c%s expects a single character `i' or `j' as argument"
+msgstr "%c%s kræver et enkelt tegn 'i' eller 'j' som parameter"
+
+#: makeinfo/macro.c:128
+#, c-format
+msgid "macro `%s' previously defined"
+msgstr "makro '%s' er allerede defineret"
+
+#: makeinfo/macro.c:132
+#, c-format
+msgid "here is the previous definition of `%s'"
+msgstr "her er den forrige definition af '%s'"
+
+#: makeinfo/macro.c:359
+#, fuzzy, c-format
+msgid "\\ in macro expansion followed by `%s' instead of parameter name"
+msgstr "\\ i makroudfoldelse fulgt af '%s' i stedet for \\ eller parameternavn"
+
+#: makeinfo/macro.c:401
+#, c-format
+msgid "Macro `%s' called on line %d with too many args"
+msgstr "Makro '%s' kaldt på linje %d med for mange parametre"
+
+#: makeinfo/macro.c:580
+#, c-format
+msgid "%cend macro not found"
+msgstr "%cend makro ikke fundet"
+
+#: makeinfo/macro.c:591
+msgid "@allow-recursion is deprecated; please use @rmacro instead"
+msgstr ""
+
+#: makeinfo/macro.c:606
+msgid "@quote-arg is deprecated; arguments are quoted by default"
+msgstr ""
+
+#: makeinfo/macro.c:649
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "uparret @end %s med @%s"
+
+#: makeinfo/makeinfo.c:188
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "For mange fejl! Gav op.\n"
+
+#: makeinfo/makeinfo.c:306
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: advarsel: "
+
+#: makeinfo/makeinfo.c:325 makeinfo/makeinfo.c:2340
+#, c-format
+msgid "Misplaced %c"
+msgstr "Fejlplaceret %c"
+
+#: makeinfo/makeinfo.c:344
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Prøv '%s --help' for mere information.\n"
+
+#: makeinfo/makeinfo.c:347
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "Brug: %s [TILVALG]... TEXINFO-FIL...\n"
+
+#: makeinfo/makeinfo.c:350
+msgid ""
+"Translate Texinfo source documentation to various other formats, by default\n"
+"Info files suitable for reading online with Emacs or standalone GNU Info.\n"
+msgstr ""
+"Oversæt Texinfo kildedokumentation til flere andre formater, som standard "
+"til\n"
+"Info-filer, der er lavet til at blive læst på skærmen med Emacs eller GNU "
+"Info.\n"
+
+#: makeinfo/makeinfo.c:354
+#, fuzzy, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\n"
+" --document-language=STR locale to use in translating Texinfo keywords\n"
+" for the output document (default C).\n"
+" --force preserve output even if errors.\n"
+" --help display this help and exit.\n"
+" --no-validate suppress node cross-reference validation.\n"
+" --no-warn suppress warnings (but not errors).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"Generelle tilvalg:\n"
+" --error-limit=ANTAL afbryd efter ANTAL fejl (standard %d).\n"
+" --force bevar uddata selvom der opstår fejl.\n"
+" --help vis denne hjælp og afslut.\n"
+" --no-validate undertryk validering af emne-krydsreferencer.\n"
+" --no-warn undertryk advarsler (men ikke fejl).\n"
+" --reference-limit=ANTAL advar højst om ANTAL referencer (standard %"
+"d).\n"
+" -v, --verbose forklar, hvad der sker.\n"
+" --version vis versionsoplysninger og afslut.\n"
+
+#: makeinfo/makeinfo.c:369
+#, fuzzy, no-wrap
+msgid ""
+"Output format selection (default is to produce Info):\n"
+" --docbook output Docbook XML rather than Info.\n"
+" --html output HTML rather than Info.\n"
+" --xml output Texinfo XML rather than Info.\n"
+" --plaintext output plain text rather than Info.\n"
+msgstr ""
+"Valg af format på uddata (ellers laves Info):\n"
+" --docbook lav DocBook XML i stedet for Info.\n"
+" --html lav HTML i stedet for Info.\n"
+" --xml lav Texinfo XML i stedet for Info.\n"
+
+#: makeinfo/makeinfo.c:377
+#, fuzzy
+msgid ""
+"General output options:\n"
+" -E, --macro-expand=FILE output macro-expanded source to FILE,\n"
+" ignoring any @setfilename.\n"
+" --no-headers suppress node separators, Node: lines, and "
+"menus\n"
+" from Info output (thus producing plain "
+"text)\n"
+" or from HTML (thus producing shorter "
+"output);\n"
+" also, write to standard output by default.\n"
+" --no-split suppress the splitting of Info or HTML "
+"output,\n"
+" generate only one output file.\n"
+" --number-sections output chapter and sectioning numbers.\n"
+" -o, --output=FILE output to FILE (or directory if split HTML).\n"
+msgstr ""
+"Generelle uddatatilvalg:\n"
+" -E, --macro-expand FIL send makroekspanderet kildetekst til FIL.\n"
+" ignorér eventuelle @setfilename.\n"
+" --no-headers undertryk emneadskillere, Node:­linjer og "
+"menuer\n"
+" fra Infos uddata (og lav dermed simpel tekst)\n"
+" og skriv som udgangspunkt til standard-ud."
+"n --no-split undertryk opdeling af Info eller HTML-uddata,\n"
+" lav kun én uddatafil.\n"
+" --number-sections lav afsnits- og sektionsnumre.\n"
+" -o, --output=FILE send til FIL (katalog i tilfældet opdelt HTML),\n"
+
+#: makeinfo/makeinfo.c:391
+#, fuzzy, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --disable-encoding do not output accented and special characters\n"
+" in Info output based on @documentencoding.\n"
+" --enable-encoding override --disable-encoding (default).\n"
+" --fill-column=NUM break Info lines at NUM characters (default %"
+"d).\n"
+" --footnote-style=STYLE output footnotes in Info according to STYLE:\n"
+" `separate' to put them in their own node;\n"
+" `end' to put them at the end of the node, "
+"in\n"
+" which they are defined (this is the "
+"default).\n"
+" --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %"
+"d).\n"
+" If VAL is `none', do not indent; if VAL is\n"
+" `asis', preserve existing indentation.\n"
+" --split-size=NUM split Info files at size NUM (default %d).\n"
+msgstr ""
+"Tilvalg for Info og ren tekst:\n"
+" --enable-encoding konstruér specialtegn i Infouddata i henhold "
+"til\n"
+" @documentencoding.\n"
+" --fill-column=ANTAL opdel Info-linjer ved ANTAL tegn (standard %"
+"d).\n"
+" --footnote-style=STIL vis fodnoter i Info med valgt STIL:\n"
+" `separate' for at placere dem i deres eget "
+"emne;\n"
+" `end' for at placere dem i slutningen af det "
+"emne,\n"
+" de er defineret(standard).\n"
+" --paragraph-indent=ANTAL indryk Info-afsnit med ANTAL mellemrum "
+"(standard %d).\n"
+" Hvis ANTAL er 'none' indrykkes ikke. Hvis "
+"ANTAL er\n"
+" `asis', bevares eksisterende indrykning.\n"
+" --split-size=ANTAL opdel Info-filer ved størrelsen ANTAL "
+"(standard %d).\n"
+
+#: makeinfo/makeinfo.c:409
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+" --css-ref=URL generate reference to a CSS file.\n"
+" --internal-links=FILE produce list of internal links in FILE.\n"
+" --transliterate-file-names\n"
+" produce file names in ASCII transliteration.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:419
+#, c-format
+msgid ""
+"Options for XML and Docbook:\n"
+" --output-indent=VAL indent XML elements by VAL spaces (default %"
+"d).\n"
+" If VAL is 0, ignorable whitespace is "
+"dropped.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:426
+#, fuzzy
+msgid ""
+"Input file options:\n"
+" --commands-in-node-names allow @ commands in node names.\n"
+" -D VAR define the variable VAR, as with @set.\n"
+" -I DIR append DIR to the @include search path.\n"
+" -P DIR prepend DIR to the @include search path.\n"
+" -U VAR undefine the variable VAR, as with @clear.\n"
+msgstr ""
+"Inddata-tilvalg:\n"
+" --commands-in-node-names tillad @-kommandoer i emnenavne.\n"
+" -D VAR definér variablen VAR som med @set.\n"
+" -I KATALOG tilføj KATALOG til @include-søgestien.\n"
+" -P KATALOG indsæt KATALOG forrest i @include-"
+"søgestien.\n"
+" -U VAR afdefinér variablen VAR som med @clear.\n"
+
+#: makeinfo/makeinfo.c:435
+#, fuzzy
+msgid ""
+"Conditional processing in input:\n"
+" --ifdocbook process @ifdocbook and @docbook even if\n"
+" not generating Docbook.\n"
+" --ifhtml process @ifhtml and @html even if not generating HTML.\n"
+" --ifinfo process @ifinfo even if not generating Info.\n"
+" --ifplaintext process @ifplaintext even if not generating plain text.\n"
+" --iftex process @iftex and @tex; implies --no-split.\n"
+" --ifxml process @ifxml and @xml.\n"
+" --no-ifdocbook do not process @ifdocbook and @docbook text.\n"
+" --no-ifhtml do not process @ifhtml and @html text.\n"
+" --no-ifinfo do not process @ifinfo text.\n"
+" --no-ifplaintext do not process @ifplaintext text.\n"
+" --no-iftex do not process @iftex and @tex text.\n"
+" --no-ifxml do not process @ifxml and @xml text.\n"
+"\n"
+" Also, for the --no-ifFORMAT options, do process @ifnotFORMAT text.\n"
+msgstr ""
+"Betinget behandling i inddata:\n"
+" --ifhtml behandl @ifhtml og @html selvom der ikke laves HTML.\n"
+" --ifinfo behandl @ifinfo-tekst selvom der laves HTML.\n"
+" --ifplaintext behandl @ifplaintext selvom der ikke laves ren tekst.\n"
+" --iftex behandl @iftex og @tex; underforstår --no-split.\n"
+" --ifxml behandl @ifxml og @xml.\n"
+" --no-ifhtml behandl ikke @ifhtml og @html-tekst.\n"
+" --no-ifinfo behandl ikke @ifinfo-tekst.\n"
+" --no-ifplaintext behandl ikke @ifplaintext-tekst.\n"
+" --no-iftex behandl ikke @iftex og @tex-tekst.\n"
+" --no-ifxml behandl ikke @ifxml og @xml-tekst.\n"
+
+#: makeinfo/makeinfo.c:454
+#, fuzzy
+msgid ""
+" The defaults for the @if... conditionals depend on the output format:\n"
+" if generating HTML, --ifhtml is on and the others are off;\n"
+" if generating Info, --ifinfo is on and the others are off;\n"
+" if generating plain text, --ifplaintext is on and the others are off;\n"
+" if generating XML, --ifxml is on and the others are off.\n"
+msgstr ""
+" Standarden for @if... betingelser afhænger af uddataformatet:\n"
+" hvis der laves HTML, er --ifhtml aktiveret, mens de andre er "
+"deaktiverede;\n"
+" hvis der laves Info er --ifinfo aktiveret og de andre er deaktiverede;\n"
+" hvis der laves ren tekst er --ifplaintext aktiveret og de andre "
+"deaktiverede.\n"
+
+#: makeinfo/makeinfo.c:462
+#, fuzzy
+msgid ""
+"Examples:\n"
+" makeinfo foo.texi write Info to foo's @setfilename\n"
+" makeinfo --html foo.texi write HTML to @setfilename\n"
+" makeinfo --xml foo.texi write Texinfo XML to @setfilename\n"
+" makeinfo --docbook foo.texi write DocBook XML to @setfilename\n"
+" makeinfo --no-headers foo.texi write plain text to standard "
+"output\n"
+"\n"
+" makeinfo --html --no-headers foo.texi write html without node lines, "
+"menus\n"
+" makeinfo --number-sections foo.texi write Info with numbered sections\n"
+" makeinfo --no-split foo.texi write one Info file however big\n"
+msgstr ""
+"Eksempler:\n"
+" makeinfo xxx.texi skriv Info til xxx's @setfilename\n"
+" makeinfo --html xxx.texi skriv HTML til @setfilename\n"
+" makeinfo --xml xxx.texi skriv Texinfo XML til @setfilename\n"
+" makeinfo --no-headers -o - xxx.texi skriv simpel tekst til standard-ud\n"
+"\n"
+" makeinfo --html --noheaders xxx.texi skriv html uden emnelinjer og menuer\n"
+" makeinfo --number-sections xxx.texi skriv Info med nummererede afsnit\n"
+" makeinfo --no-split xxx.texi skriv én Info-fil, uanset størrelsen\n"
+
+#: makeinfo/makeinfo.c:622
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:670 makeinfo/makeinfo.c:696 makeinfo/makeinfo.c:720
+#: makeinfo/makeinfo.c:780
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr "%s: %s parameter skal være et tal, ikke '%s'.\n"
+
+#: makeinfo/makeinfo.c:683
+#, fuzzy, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "Kunne ikke åbne makroudfoldelses-uddata '%s'"
+
+#: makeinfo/makeinfo.c:688
+#, fuzzy, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "Kunne ikke åbne makroudfoldelses-uddata '%s'"
+
+#: makeinfo/makeinfo.c:733
+#, fuzzy, c-format
+msgid "%s: could not open internal links output `%s'"
+msgstr "Kunne ikke åbne makroudfoldelses-uddata '%s'"
+
+#: makeinfo/makeinfo.c:738
+#, fuzzy, c-format
+msgid "%s: ignoring second internal links output `%s'.\n"
+msgstr "Kunne ikke åbne makroudfoldelses-uddata '%s'"
+
+#: makeinfo/makeinfo.c:751
+#, c-format
+msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
+msgstr ""
+"%s: --paragraph-indent parameter skal være tal/'none'/'asis', ikke '%s'.\n"
+
+#: makeinfo/makeinfo.c:769
+#, c-format
+msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
+msgstr ""
+"%s: --footnote-style parameter skal være 'separate' eller 'end', ikke '%s'.\n"
+
+#: makeinfo/makeinfo.c:844
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: mangler filparameter.\n"
+
+#: makeinfo/makeinfo.c:1041 makeinfo/makeinfo.c:4166
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1044
+#, c-format
+msgid "Expected `%s'"
+msgstr "Forventede '%s'"
+
+#: makeinfo/makeinfo.c:1521
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "Kan ikke oprette kataloget '%s': %s"
+
+#: makeinfo/makeinfo.c:1567
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "Ingen '%s' fundet i '%s'"
+
+#: makeinfo/makeinfo.c:1647
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr ""
+"%s: Undlader makroudfoldelse til standard-ud, da Info-uddata sendes der.\n"
+
+#: makeinfo/makeinfo.c:1677
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "Producerer %s file '%s' ud fra '%s'.\n"
+
+#: makeinfo/makeinfo.c:1744
+#, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: Fjerner makro uddatafil '%s' grundet fejl; brug --force for at beholde.\n"
+
+#: makeinfo/makeinfo.c:1799
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: Fjerner uddatafil '%s' grundet fejl; brug --force for at beholde.\n"
+
+#: makeinfo/makeinfo.c:1818
+#, fuzzy, c-format
+msgid ""
+"%s: Removing internal links output file `%s' due to errors; use --force to "
+"preserve.\n"
+msgstr ""
+"%s: Fjerner uddatafil '%s' grundet fejl; brug --force for at beholde.\n"
+
+#: makeinfo/makeinfo.c:2113
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "Ukendt kommando '%s'"
+
+#: makeinfo/makeinfo.c:2135
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr "Benyt parenteser for at angive en kommando som parameter til @%s"
+
+#: makeinfo/makeinfo.c:2394
+#, fuzzy, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s forventede '{...}'"
+
+#: makeinfo/makeinfo.c:2407
+msgid "Unmatched }"
+msgstr "Uparret }"
+
+#: makeinfo/makeinfo.c:2455
+msgid "NO_NAME!"
+msgstr "INTET_NAVN!"
+
+#: makeinfo/makeinfo.c:2476
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s mangler højre parentes"
+
+#: makeinfo/makeinfo.c:3482
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "@image-fil '%s' (for HTML) er ulæselig: %s"
+
+#: makeinfo/makeinfo.c:3488
+#, fuzzy, c-format
+msgid "No such file `%s'"
+msgstr "Ingen '%s' fundet i '%s'"
+
+#: makeinfo/makeinfo.c:3624
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "@image-fil '%s' (for tekst) er ulæselig: %s"
+
+#: makeinfo/makeinfo.c:3633
+msgid "@image missing filename argument"
+msgstr "@image mangler filnavnsparameter"
+
+#: makeinfo/makeinfo.c:3851
+#, c-format
+msgid "undefined flag: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3852
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{Ingen værdi for '%s'}"
+
+#: makeinfo/makeinfo.c:3904
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s kræver et navn"
+
+#: makeinfo/makeinfo.c:4010
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "Nåede filslutning før samhørende @end %s"
+
+#: makeinfo/makeinfo.c:4258
+#, c-format
+msgid "`%.40s...' is too long for expansion; not expanded"
+msgstr "`%.40s...' er for langt til ekspansion; blev ikke ekspanderet"
+
+#: makeinfo/multi.c:116
+msgid "Missing } in @multitable template"
+msgstr "Manglende } i @multitable skabelon"
+
+#: makeinfo/multi.c:260
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "ignorerer vildfaren tekst '%s' efter @multitable"
+
+#: makeinfo/multi.c:400
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "For mange søjler i 'multitable' element (maks %d)"
+
+#: makeinfo/multi.c:563
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "[uventet] Kan ikke vælge kolonne %d i 'multitable'"
+
+#: makeinfo/multi.c:592
+msgid "ignoring @tab outside of multitable"
+msgstr "ignorerer @tab udenfor 'multitable'"
+
+#: makeinfo/multi.c:640
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** Flerkolonne uddata fra sidste række:\n"
+
+#: makeinfo/multi.c:643
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* kolonne %d: uddata = %s\n"
+
+#: makeinfo/node.c:279
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "Emne '%s' er tidligere defineret på linje %d"
+
+#: makeinfo/node.c:647
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "Formatterer emne %s...\n"
+
+#: makeinfo/node.c:714
+#, fuzzy, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr "Emne '%s' kræver en sektionsopdelende kommando (f.eks. %c%s)"
+
+#: makeinfo/node.c:878
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "Intet emnenavn angivet for '%c%s'-kommandoen"
+
+#: makeinfo/node.c:919 makeinfo/node.c:1163
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr "Mål '%s' og emne '%s' ender med at have samme filnavn"
+
+#: makeinfo/node.c:922
+msgid "This @anchor command ignored; references to it will not work"
+msgstr "Denne @anchor-kommando er ignoreret; referencer til den vil ikke virke"
+
+#: makeinfo/node.c:924 makeinfo/node.c:1166
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr "Omdøb dette mål eller brug tilvalget '--no-split'"
+
+#: makeinfo/node.c:954
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr "Uventet streng i slutningen af opdelt HTML-fil '%s'"
+
+#: makeinfo/node.c:1160
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr "Målene '%s' og '%s' ender med at have samme filnavn"
+
+#: makeinfo/node.c:1165
+msgid "@anchor command ignored; references to it will not work"
+msgstr "@anchor-kommandoen ignoreres. Referencer til den vil ikke fungere"
+
+#: makeinfo/node.c:1362
+#, fuzzy, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr "%s reference til ikke-eksisterende emne '%s'"
+
+#: makeinfo/node.c:1462
+#, fuzzy, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr "'Næste'-felt i emne '%s' blive ikke peget på"
+
+#: makeinfo/node.c:1465
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "Dette emne (%s) har den ugyldige 'Forrige'"
+
+#: makeinfo/node.c:1520
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "Feltet 'Forrige' i emne '%s' bliver ikke peget på"
+
+#: makeinfo/node.c:1524
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "Dette emne (%s) har den ugyldige 'Næste'-felt"
+
+#: makeinfo/node.c:1536
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1605
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr ""
+"Emnet '%s' mangler menupunkt for '%s' på trods af at det er dens 'Op'-mål"
+
+#: makeinfo/node.c:1637
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "ikke-refereret emne '%s'"
+
+#: makeinfo/node.c:1727
+#, c-format
+msgid "Removing %s\n"
+msgstr ""
+
+#: makeinfo/node.c:1731
+#, fuzzy, c-format
+msgid "Can't remove file `%s': %s"
+msgstr "Kan ikke oprette kataloget '%s': %s"
+
+#: makeinfo/sectioning.c:122
+#, fuzzy, c-format
+msgid "Appendix %c"
+msgstr "Appendiks %c "
+
+#: makeinfo/sectioning.c:467
+#, fuzzy, c-format
+msgid "Internal error (search_sectioning) `%s'!"
+msgstr "Intern fejl (search_sectioning) \"%s\"!"
+
+#: makeinfo/sectioning.c:563
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "Intern fejl (search_sectioning) \"%s\"!"
+
+#: makeinfo/sectioning.c:624
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "%c%s er forældet; benyt i stedet %c%s"
+
+#: makeinfo/sectioning.c:640
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "Emne med %ctop som sektion eksisterer allerede"
+
+#: makeinfo/sectioning.c:648
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "Her er %ctop-emnet"
+
+#: makeinfo/sectioning.c:664
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "%ctop benyttet før %cnode, benytter forvalget %s"
+
+#: makeinfo/xml.c:1669
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "@image-fil '%s' er ulæselig: %s"
+
+#: makeinfo/xml.c:2014
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+
+#: makeinfo/xml.c:2150
+msgid "of"
+msgstr "for"
+
+#: makeinfo/xml.c:2155
+msgid "on"
+msgstr "på"
+
+#: makeinfo/xref.c:127
+msgid "First argument to cross-reference may not be empty"
+msgstr "Første parameter i krydsreferencen må ikke være tom"
+
+#: makeinfo/xref.c:252
+#, c-format
+msgid "Empty file name for HTML cross reference in `%s'"
+msgstr ""
+
+#: makeinfo/xref.c:387
+msgid "End of file reached while looking for `.' or `,'"
+msgstr ""
+
+#: makeinfo/xref.c:390
+#, fuzzy, c-format
+msgid "`.' or `,' must follow @%s, not `%c'"
+msgstr "en krydsreference må efterfølges af '.' eller ',', ikke %c"
+
+#: makeinfo/xref.c:392
+#, fuzzy
+msgid "for cross-references in parentheses, use @pxref"
+msgstr "Ingen krydsreferencer i dette emne."
+
+#: makeinfo/xref.c:435
+msgid "First argument to @inforef may not be empty"
+msgstr "Første parameter i @inforef må ikke være tom"
+
+#: util/texindex.c:223
+msgid "display this help and exit"
+msgstr "viser denne hjælp og afslutter"
+
+#: util/texindex.c:225
+msgid "send output to FILE"
+msgstr "send uddata til FIL"
+
+#: util/texindex.c:227
+msgid "display version information and exit"
+msgstr "vis versions-information og afslut"
+
+#: util/texindex.c:237
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "Brug: %s [TILVALG]... FIL...\n"
+
+#: util/texindex.c:238
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr "Opret et ordnet indeks for hver TeX uddata-FIL.\n"
+
+#: util/texindex.c:241
+#, c-format
+msgid "Usually FILE... is specified as `foo.%c%c' for a document `foo.texi'.\n"
+msgstr "Normalt angives FIL... som 'xxx.%c%c' for dokumentet 'xxx.texi'.\n"
+
+#: util/texindex.c:243
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Tilvalg:\n"
+
+#: util/texindex.c:743
+#, c-format
+msgid "failure reopening %s"
+msgstr "kunne ikke åbne %s"
+
+#: util/texindex.c:758 util/texindex.c:786
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: ikke en texinfo indeksfil"
+
+#: util/texindex.c:993
+#, c-format
+msgid "No page number in %s"
+msgstr "Intet sidenummer i %s"
+
+#: util/texindex.c:1066
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr "indgang %s følger en indgang med et sekundært navn"
+
+#~ msgid ""
+#~ "\\%-10[search] Search forward for a specified string\n"
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr ""
+#~ "\\%-10[search] Søg fremad efter en given streng\n"
+#~ " og vælg emnet med den næste forekomst.\n"
+
+#~ msgid ""
+#~ "\\%-10[goto-node] Move to node specified by name.\n"
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ msgstr ""
+#~ "\\%-10[goto-node] Gå til emne angivet ved navn.\n"
+#~ " Du kan også medtage filnavn, som (FILNAVN)EMNENAVN.\n"
+
+#, fuzzy
+#~ msgid "\\%-10[next-node] Move to the next node of current section.\n"
+#~ msgstr "\\%-10[next-node] Flyt til emnet 'næste' i dette emne.\n"
+
+#~ msgid ""
+#~ "\\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+#~ "node] (DIR)'.\n"
+#~ msgstr ""
+#~ "\\%-10[dir-node] Flyt til emnet 'katalog'. Svarer til 'g (KATALOG)'.\n"
+
+#~ msgid ""
+#~ "\\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] "
+#~ "Top'.\n"
+#~ msgstr ""
+#~ "\\%-10[top-node] Gå til emnet Top. Svarer til '\\[goto-node] Top'.\n"
+
+#, fuzzy
+#~ msgid "\\%-10[scroll-forward-page-only] Scroll forward within this node.\n"
+#~ msgstr "\\%-10[scroll-forward] Rul 1 linje frem.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "\\%-10[scroll-backward-page-only] Scroll backward within this node.\n"
+#~ msgstr "\\%-10[scroll-backward] Rul en linje tilbage.\n"
+
+#~ msgid ""
+#~ "\\%-10[search-backward] Search backward for a specified string\n"
+#~ " and select the node in which the previous occurrence is "
+#~ "found.\n"
+#~ msgstr ""
+#~ "\\%-10[search-backward] Sæg baglæns efter en given streng\n"
+#~ " og vælg emnet med den forrige forekomst.\n"
+
+#~ msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+#~ msgstr ""
+#~ "--- Benyt '\\[history-node]' eller '\\[kill-node]' for at afslutte ---\n"
+
+#, fuzzy
+#~ msgid "\\%-10[move-to-prev-xref] Skip to previous hypertext link [*].\n"
+#~ msgstr ""
+#~ "\\%-10[move-to-prev-xref] Hop til næste hypertekst-henvisning i dette "
+#~ "emne.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]... [MENU-ITEM...]\n"
+#~ "\n"
+#~ "Read documentation in Info format.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --apropos=STRING look up STRING in all indices of all "
+#~ "manuals.\n"
+#~ " -d, --directory=DIR add DIR to INFOPATH.\n"
+#~ " --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+#~ " -f, --file=FILENAME specify Info file to visit.\n"
+#~ " -h, --help display this help and exit.\n"
+#~ " --index-search=STRING go to node pointed by index entry STRING.\n"
+#~ " -n, --node=NODENAME specify nodes in first visited Info file.\n"
+#~ " -o, --output=FILENAME output selected nodes to FILENAME.\n"
+#~ " -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+#~ " --no-raw-escapes output escapes as literal text.\n"
+#~ " --restore=FILENAME read initial keystrokes from FILENAME.\n"
+#~ " -O, --show-options, --usage go to command-line options node.\n"
+#~ "%s --subnodes recursively output menu items.\n"
+#~ " -w, --where, --location print physical location of Info file.\n"
+#~ " --vi-keys use vi-like and less-like key bindings.\n"
+#~ " --version display version information and exit.\n"
+#~ "\n"
+#~ "The first non-option argument, if present, is the menu entry to start "
+#~ "from;\n"
+#~ "it is searched for in all `dir' files along INFOPATH.\n"
+#~ "If it is not present, info merges all `dir' files and shows the result.\n"
+#~ "Any remaining arguments are treated as the names of menu\n"
+#~ "items relative to the initial node visited.\n"
+#~ "\n"
+#~ "Examples:\n"
+#~ " info show top-level dir menu\n"
+#~ " info emacs start at emacs node from top-level dir\n"
+#~ " info emacs buffers start at buffers node within emacs manual\n"
+#~ " info --show-options emacs start at node with emacs' command line "
+#~ "options\n"
+#~ " info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+#~ " info -f ./foo.info show file ./foo.info, not searching dir\n"
+#~ msgstr ""
+#~ "Brug: %s [TILVALG]... [MENUPUNKT...]\n"
+#~ "\n"
+#~ "Læs dokumentationen i Info format.\n"
+#~ "\n"
+#~ "Tilvalg:\n"
+#~ " --apropos=STRENG slå STRENG op i alle indekser og "
+#~ "manualer.\n"
+#~ " -d, --directory=KATALOG tilføj KATALOG til INFOPATH.\n"
+#~ " --dribble=FILNAVN gem brugerens tastetryk i FILNAVN.\n"
+#~ " -f, --file=FILNAVN angiv Info fil, der skal besøges.\n"
+#~ " -h, --help vis denne hjælp og afslut.\n"
+#~ " --index-search=TEKST gå til det punkt, indeks-indgang TEKST "
+#~ "angiver.\n"
+#~ " -n, --node=EMNENAVN angiv emner i først besøgte Info-fil.\n"
+#~ " -o, --output=FILNAVN udlæs de valgte emner til FILNAVN.\n"
+#~ " -R, --raw-escapes fjern ikke ANSI-escapekoder fra "
+#~ "manualsider\n"
+#~ " --restore=FILNAVN indlæs de første tastetryk fra FILNAVN.\n"
+#~ " -O, --show-options, --usage gå til emnet kommandolinje-tilvalg.\n"
+#~ "%s --subnodes udlæs menupunkter rekursivt.\n"
+#~ " --vi-keys benyt 'vi'- og 'less'-agtige "
+#~ "tastebindinger.\n"
+#~ " --version vis versionsinformation og afslut.\n"
+#~ "\n"
+#~ "Det første ikke-tilvalgs-parameter er menuindgangen der startes fra;\n"
+#~ "den søges i alle 'katalog'-filer angivet i miljøvariablen INFOPATH.\n"
+#~ "Hvis ikke dette parameter er angivet, samler info alle 'katalog'-filer\n"
+#~ " og viser resultatet.\n"
+#~ "Resterende parametre angiver navne på menupunkter i forhold til "
+#~ "startpunktet.\n"
+#~ "\n"
+#~ "Eksempler:\n"
+#~ " info viser top-niveau katalog menu\n"
+#~ " info emacs start ved emnet emacs i topniveau kataloget\n"
+#~ " info emacs buffers start ved emnet 'buffers' i emacs-manualen\n"
+#~ " info --show-options emacs start ved emnet med emacs' kommandolinje "
+#~ "tilvalg\n"
+#~ " info -f ./xxx.info vis filen ./xxx.info uden at søge i katalog\n"
+
+#~ msgid ""
+#~ " Picking a menu item causes another node to be selected.\n"
+#~ msgstr " Valg af menupunkt vælger et andet emne.\n"
+
+#~ msgid ""
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ msgstr " Du kan også medtage filnavn, som (FILNAVN)EMNENAVN.\n"
+
+#~ msgid " %-10s Search backward for a specified string\n"
+#~ msgstr " %-10s Søg baglæns efter en given streng\n"
+
+#~ msgid ""
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr " og vælg emne med den næste forekomst.\n"
+
+#~ msgid "Following Next node..."
+#~ msgstr "Følger emnet Næste..."
+
+#~ msgid "Selecting first menu item..."
+#~ msgstr "Vælger første menupunkt..."
+
+#~ msgid "Selecting Next node..."
+#~ msgstr "Vælger emnet 'Næste'..."
+
+#~ msgid "Moving Up %d time(s), then Next."
+#~ msgstr "Går 'Op' %d gang(e), derefter 'Næste'."
+
+#~ msgid "Moving Prev in this window."
+#~ msgstr "Går til 'Forrige' i dette vindue."
+
+#~ msgid "Moving Up in this window."
+#~ msgstr "Går 'Op' i dette vindue."
+
+#~ msgid "Moving to `Prev's last menu item."
+#~ msgstr "Går til 'Forrige's sidste menupunkt."
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "Function"
+#~ msgstr "Funktion"
+
+#~ msgid "Macro"
+#~ msgstr "Makro"
+
+#~ msgid "Special Form"
+#~ msgstr "Specialform"
+
+#~ msgid "Variable"
+#~ msgstr "Variabel"
+
+#~ msgid "User Option"
+#~ msgstr "Brugerfunktion"
+
+#~ msgid "Instance Variable"
+#~ msgstr "Instansvariabel"
+
+#~ msgid "Method"
+#~ msgstr "Metode"
+
+#~ msgid "Untitled"
+#~ msgstr "Uden titel"
+
+#~ msgid "This is %s, produced by makeinfo version %s from %s.\n"
+#~ msgstr "Dette er %s, produceret med makeinfo version %s ud fra %s.\n"
+
+#~ msgid "Next:"
+#~ msgstr "Næste:"
+
+#~ msgid "Previous:"
+#~ msgstr "Forrige:"
+
+#~ msgid "Up:"
+#~ msgstr "Op:"
+
+#~ msgid "Menu"
+#~ msgstr "Menu"
+
+#~ msgid "Cross"
+#~ msgstr "Kryds"
+
+#~ msgid "Prev"
+#~ msgstr "Forrige"
+
+#~ msgid "Up"
+#~ msgstr "Op"
+
+#~ msgid "see "
+#~ msgstr "se "
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+#~ "\n"
+#~ "Add or remove entries in INFO-FILE from the Info directory DIR-FILE.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --debug report what is being done.\n"
+#~ " --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+#~ " don't insert any new entries.\n"
+#~ " --dir-file=NAME specify file name of Info directory file.\n"
+#~ " This is equivalent to using the DIR-FILE argument.\n"
+#~ " --entry=TEXT insert TEXT as an Info directory entry.\n"
+#~ " TEXT should have the form of an Info menu item line\n"
+#~ " plus zero or more extra lines starting with "
+#~ "whitespace.\n"
+#~ " If you specify more than one entry, they are all "
+#~ "added.\n"
+#~ " If you don't specify any entries, they are "
+#~ "determined\n"
+#~ " from information in the Info file itself.\n"
+#~ " --help display this help and exit.\n"
+#~ " --info-file=FILE specify Info file to install in the directory.\n"
+#~ " This is equivalent to using the INFO-FILE argument.\n"
+#~ " --info-dir=DIR same as --dir-file=DIR/dir.\n"
+#~ " --item=TEXT same as --entry TEXT.\n"
+#~ " An Info directory entry is actually a menu item.\n"
+#~ " --quiet suppress warnings.\n"
+#~ " --remove same as --delete.\n"
+#~ " --remove-exactly only remove if the info file name matches exactly;\n"
+#~ " .info and/or .gz suffixes are not ignored.\n"
+#~ " --section=SEC put this file's entries in section SEC of the "
+#~ "directory.\n"
+#~ " If you specify more than one section, all the "
+#~ "entries\n"
+#~ " are added in each of the sections.\n"
+#~ " If you don't specify any sections, they are "
+#~ "determined\n"
+#~ " from information in the Info file itself.\n"
+#~ " --section-regex=R if an entry is added to a section that does not "
+#~ "exist,\n"
+#~ " look for a section matching basic regular expression "
+#~ "R\n"
+#~ " (and ignoring case) before starting a new section.\n"
+#~ " --test suppress updating of DIR-FILE.\n"
+#~ " --silent suppress warnings.\n"
+#~ " --version display version information and exit.\n"
+#~ msgstr ""
+#~ "Brug: %s [TILVALG]... [INFOFIL [KATALOGFIL]]\n"
+#~ "\n"
+#~ "Installér eller slet katalogindgange fra INFOFIL i Info katalogfilen\n"
+#~ "KATALOGFIL.\n"
+#~ "\n"
+#~ "Tilvalg:\n"
+#~ " --delete slet eksisterende indgange til INFOFIL fra "
+#~ "KATALOGFIL;\n"
+#~ " tilføj ikke nye indgange.\n"
+#~ " --dir-file=NAVN angiv navn på Info katalogfil.\n"
+#~ " Dette svarer til at bruge KATALOGFIL parameteren.\n"
+#~ " --entry=TEKST tilføj TEKST som en Info katalogindgang.\n"
+#~ " TEKST skal være formateret som en Info menupunkts-\n"
+#~ " linje plus nul eller flere ekstra linjer, der "
+#~ "starter\n"
+#~ " med mellemrum.\n"
+#~ " Hvis du angiver flere indgange, tilføjes de alle.\n"
+#~ " Hvis du ingen indgange angiver, bestemmes de ud fra\n"
+#~ " informationerne i selve Info-filen.\n"
+#~ " --help vis denne hjælp og afslut.\n"
+#~ " --info-file=FIL angiv Info-fil, der skal indsættes i kataloget.\n"
+#~ " Dette svarer til at bruge INFOFIL parameteren.\n"
+#~ " --info-dir=KATALOG svarer til --dir-file=KATALOG/katalog.\n"
+#~ " --item=TEKST svarer til --entry TEKST.\n"
+#~ " Et Info-katalog er i virkeligheden et menupunkt.\n"
+#~ " --quiet undlad advarsler.\n"
+#~ " --remove svarer til --delete.\n"
+#~ " --section=SEK put denne fil's indgange i katalogets sektion SEK.\n"
+#~ " Hvis du angiver flere sektioner, tilføjes samtlige\n"
+#~ " indgangene til alle sektionerne.\n"
+#~ " Hvis du ingen sektioner angiver, bestemmes de ud "
+#~ "fra\n"
+#~ " informationerne i selve Info-filen.\n"
+#~ " --version vis denne versions-information og afslut.\n"
+
+#~ msgid "menu item `%s' already exists, for file `%s'"
+#~ msgstr "menupunkt '%s' eksisterer allerede i filen '%s'"
+
+#~ msgid "\\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+#~ msgstr "\\%-10[menu-digit] Vælg første til niende punkt i emnets menu.\n"
+
+#~ msgid "node `%s' has been referenced %d times"
+#~ msgstr "emne '%s' blev refereret %d gange"
+
+#, fuzzy
+#~ msgid ""
+#~ "Copyright (C) %s Free Software Foundation, Inc.\n"
+#~ "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n"
+#~ "PARTICULAR PURPOSE. You may redistribute copies of GNU %s\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the file named COPYING.\n"
+#~ msgstr ""
+#~ "Copyright (C) %s Free Software Foundation, Inc.\n"
+#~ "Der er INGEN garanti. Du må redistribuere denne software\n"
+#~ "under GNU General Public License's betingelser.\n"
+#~ "For mere information om dette, se filerne 'COPYING'.\n"
+
+#~ msgid "@quote-arg only useful for single-argument macros"
+#~ msgstr "@quote-arg kan kun bruges til makroer med et enkelt parameter"
+
+#~ msgid "Table of Contents"
+#~ msgstr "Indhold"
+
+#~ msgid "Short Contents"
+#~ msgstr "Kort indhold"
+
+#~ msgid "keep temporary files around after processing"
+#~ msgstr "efterlad midlertidige filer"
+
+#~ msgid "do not keep temporary files around after processing (default)"
+#~ msgstr "efterlad ikke midlertidige filer (standard)"
+
+#~ msgid ""
+#~ " file, and select the node referenced by the first entry "
+#~ "found.\n"
+#~ msgstr ""
+#~ " og vælg det emne, der refereres til af den først fundne "
+#~ "indgang.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "There is NO warranty. You may redistribute this software\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the files named COPYING.\n"
+#~ msgstr ""
+#~ "Copyright (C) %s Free Software Foundation, Inc.\n"
+#~ "Der er INGEN garanti. Du må redistribuere denne software\n"
+#~ "under GNU General Public License's betingelser.\n"
+#~ "For mere information om dette, se filerne 'COPYING'.\n"
+
+#~ msgid "%s: Specify the Info directory only once.\n"
+#~ msgstr "%s: Angiv kun Info-kataloget én gang.\n"
+
+#~ msgid "\"\" is invalid"
+#~ msgstr "\"\" er ugyldig"
+
+#~ msgid "%s is an invalid ISO code, using %c"
+#~ msgstr "%s er en ugyldig ISO-kode, bruger %c"
+
+#~ msgid "Cannot specify more than one macro expansion output"
+#~ msgstr "Kan ikke angive mere end én makroudfoldelses-uddata"
+
+#~ msgid "File exists, but is not a directory"
+#~ msgstr "Filen eksisterer, men er ikke et katalog"
+
+#~ msgid "Node:"
+#~ msgstr "Emne:"
+
+#~ msgid "%s: TOC should be here, but it was not found"
+#~ msgstr "%s: 'Indhold' burde være her, men blev ikke fundet"
+
+#~ msgid "No `%s.png' or `.jpg', and no extension supplied"
+#~ msgstr "Ingen `%s.png' eller `.jpg', og ingen filendelse angivet"
+
+#~ msgid "%s; for file `%s'.\n"
+#~ msgstr "%s; for filen '%s'.\n"
+
+#~ msgid "`%s' has no Up field"
+#~ msgstr "'%s' har intet 'Op'-felt"
diff --git a/po/de.gmo b/po/de.gmo
new file mode 100644
index 0000000..89c79ed
--- /dev/null
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 0000000..5d4817a
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,3343 @@
+# German messages for GNU Texinfo
+# Copyright © 2004 Free Software Foundation, Inc.
+# This file is distributed under the same license as the texinfo package.
+# Karl Eichwalder <ke@ke.Central.DE>, 1996.
+# Karl Eichwalder <ke@suse.de>, 1997, 1998, 1999.
+# Karl Eichwalder <ke@gnu.franken.de>, 1999, 2000.
+# Michael Piefel <piefel@informatik.hu-berlin.de>, 2001-2005, 2007, 2008.
+#
+# 2004-03-31
+# Along with this new update, I changed the quotes to
+# „German“ as opposed to »French« quotes.
+# MPi
+#
+# 2000-02-28 08:25:03 CET
+# In HTML output, change 8bit characters to SGML entities (ß -> &szlig;, etc.)
+# Reported by Thomas Esken, 1999-09-13.
+# -ke-
+#
+# 1999-04-20 21:51:54 CEST
+# Update: version 3.12h.
+# reuse getopt translations from wget.
+# -ke-
+#
+# 1998-04-05 18:25:42 MEST
+# Hints by "Carl Friedrich Spilcke-Liss" <carl-friedriech.spilcke-liss@ensae.fr>.
+# -ke-
+#
+# 1998-02-28 14:29:49 MET
+# Revised for 3.11b
+# I refuse to translate getopt.c strings.
+# -ke-
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo 4.12.94\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2008-09-18 20:38+0200\n"
+"PO-Revision-Date: 2008-08-25 10:25+0200\n"
+"Last-Translator: Michael Piefel <piefel@informatik.hu-berlin.de>\n"
+"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#: gnulib/lib/error.c:125
+msgid "Unknown system error"
+msgstr "Unbekannter Systemfehler"
+
+#: gnulib/lib/getopt.c:526 gnulib/lib/getopt.c:542
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: Option „%s“ ist nicht eindeutig\n"
+
+#: gnulib/lib/getopt.c:575 gnulib/lib/getopt.c:579
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: Option „--%s“ erlaubt kein Argument\n"
+
+#: gnulib/lib/getopt.c:588 gnulib/lib/getopt.c:593
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: Option „%c%s“ erlaubt kein Argument\n"
+
+#: gnulib/lib/getopt.c:636 gnulib/lib/getopt.c:655 gnulib/lib/getopt.c:971
+#: gnulib/lib/getopt.c:990
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: Option „%s“ benötigt ein Argument\n"
+
+#: gnulib/lib/getopt.c:693 gnulib/lib/getopt.c:696
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: nicht erkannte Option „--%s“\n"
+
+#: gnulib/lib/getopt.c:704 gnulib/lib/getopt.c:707
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: nicht erkannte Option „%c%s“\n"
+
+#: gnulib/lib/getopt.c:759 gnulib/lib/getopt.c:762
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: ungültige Option -- %c\n"
+
+#: gnulib/lib/getopt.c:768 gnulib/lib/getopt.c:771
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ungültige Option -- %c\n"
+
+#: gnulib/lib/getopt.c:823 gnulib/lib/getopt.c:839 gnulib/lib/getopt.c:1043
+#: gnulib/lib/getopt.c:1061
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: Option benötigt ein Argument -- %c\n"
+
+#: gnulib/lib/getopt.c:892 gnulib/lib/getopt.c:908
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: Option „-W %s“ ist nicht eindeutig\n"
+
+#: gnulib/lib/getopt.c:932 gnulib/lib/getopt.c:950
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: Option „-W %s“ erlaubt kein Argument\n"
+
+#: gnulib/lib/xalloc-die.c:34 gnulib/lib/xsetenv.c:37
+#, c-format
+msgid "memory exhausted"
+msgstr "kein Speicher mehr"
+
+#: info/echo-area.c:283 info/session.c:966
+msgid "Move forward a character"
+msgstr "Ein Zeichen vorgehen"
+
+#: info/echo-area.c:295 info/session.c:993
+msgid "Move backward a character"
+msgstr "Ein Zeichen zurückgehen"
+
+#: info/echo-area.c:307
+msgid "Move to the start of this line"
+msgstr "Zum Anfang dieser Zeile bewegen"
+
+#: info/echo-area.c:312
+msgid "Move to the end of this line"
+msgstr "Zum Ende dieser Zeile bewegen"
+
+#: info/echo-area.c:320 info/session.c:1025
+msgid "Move forward a word"
+msgstr "Ein Wort vorgehen"
+
+#: info/echo-area.c:360 info/session.c:1049
+msgid "Move backward a word"
+msgstr "Ein Wort zurückgehen"
+
+#: info/echo-area.c:400
+msgid "Delete the character under the cursor"
+msgstr "Das Zeichen unter dem Cursor löschen"
+
+#: info/echo-area.c:430
+msgid "Delete the character behind the cursor"
+msgstr "Das Zeichen links vom Cursor löschen"
+
+#: info/echo-area.c:451
+msgid "Cancel or quit operation"
+msgstr "Operation abbrechen oder beenden"
+
+#: info/echo-area.c:466
+msgid "Accept (or force completion of) this line"
+msgstr "Akzeptiere diese Zeile (oder erzwinge ihre Vervollständigung)"
+
+#: info/echo-area.c:471
+msgid "Insert next character verbatim"
+msgstr "Das nächste Zeichen wörtlich eingeben"
+
+#: info/echo-area.c:479
+msgid "Insert this character"
+msgstr "Dieses Zeichen eingeben"
+
+#: info/echo-area.c:498
+msgid "Insert a TAB character"
+msgstr "Ein Tabulator-Zeichen eingeben"
+
+#: info/echo-area.c:505
+msgid "Transpose characters at point"
+msgstr "Zeichen an momentaner Position umstellen"
+
+#: info/echo-area.c:556
+msgid "Yank back the contents of the last kill"
+msgstr "Füge den Inhalt des letzten Löschvorgangs ein"
+
+# IMO muss "kill" auch im Folgenden wörtlich üs werden -ke-
+#: info/echo-area.c:563
+msgid "Kill ring is empty"
+msgstr "Der Lösch-Ring ist leer"
+
+#: info/echo-area.c:576
+msgid "Yank back a previous kill"
+msgstr "Füge Inhalt eines vorangegangenen Löschvorgangs ein"
+
+#: info/echo-area.c:609
+msgid "Kill to the end of the line"
+msgstr "Bis zum Ende der Zeile löschen"
+
+#: info/echo-area.c:622
+msgid "Kill to the beginning of the line"
+msgstr "Bis zum Anfang der Zeile löschen"
+
+#: info/echo-area.c:634
+msgid "Kill the word following the cursor"
+msgstr "Das dem Cursor folgende Wort löschen"
+
+#: info/echo-area.c:654
+msgid "Kill the word preceding the cursor"
+msgstr "Das dem Cursor vorangehende Wort löschen"
+
+#: info/echo-area.c:870 info/echo-area.c:926
+msgid "No completions"
+msgstr "Keine Vervollständigungen"
+
+#: info/echo-area.c:872
+msgid "Not complete"
+msgstr "Nicht vollständig"
+
+#: info/echo-area.c:913
+msgid "List possible completions"
+msgstr "Mögliche Vervollständigungen auflisten"
+
+#: info/echo-area.c:930
+msgid "Sole completion"
+msgstr "Einzige Vervollständigung"
+
+#: info/echo-area.c:939
+msgid "One completion:\n"
+msgstr "Eine Vervollständigung:\n"
+
+#: info/echo-area.c:940
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d Vervollständigungen:\n"
+
+#: info/echo-area.c:1087
+msgid "Insert completion"
+msgstr "Vervollständigung einfügen"
+
+#: info/echo-area.c:1222
+msgid "Building completions..."
+msgstr "Vervollständigungen werden erstellt..."
+
+#: info/echo-area.c:1342
+msgid "Scroll the completions window"
+msgstr "Im Vervollständigungs-Fenster blättern"
+
+#: info/footnotes.c:212
+msgid "Footnotes could not be displayed"
+msgstr "Fußnoten können nicht angezeigt werden"
+
+#: info/footnotes.c:238
+msgid "Show the footnotes associated with this node in another window"
+msgstr ""
+"Zeige die zu diesem Knoten gehörenden Fußnoten in einem anderen Fenster"
+
+#: info/footnotes.h:26
+msgid "---------- Footnotes ----------"
+msgstr "---------- Fußnoten ----------"
+
+#: info/indices.c:171
+msgid "Look up a string in the index for this file"
+msgstr "Eine Zeichenkette im Index dieser Datei suchen"
+
+#: info/indices.c:198
+msgid "Finding index entries..."
+msgstr "Index-Einträge werden gesucht..."
+
+#: info/indices.c:206
+msgid "No indices found."
+msgstr "Keine Indizes gefunden."
+
+#: info/indices.c:216
+msgid "Index entry: "
+msgstr "Index-Eintrag: "
+
+#: info/indices.c:324
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr ""
+"Zum nächsten übereinstimmenden Index-Eintrag vom letzten „\\[index-search]“-"
+"Befehl gehen"
+
+#: info/indices.c:334
+msgid "No previous index search string."
+msgstr "Keine vorherige zu suchende Index-Zeichenkette."
+
+#: info/indices.c:341
+msgid "No index entries."
+msgstr "Keine Index-Einträge."
+
+# checkit
+# kann im Deutschen nachgebildet werden, aber... -ke-
+#: info/indices.c:374
+#, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "Keine %sindex-Einträge, die „%s“ enthalten."
+
+#: info/indices.c:375
+msgid "more "
+msgstr "weiteren "
+
+#: info/indices.c:385
+msgid "CAN'T SEE THIS"
+msgstr "DIES IST NICHT ZU SEHEN"
+
+#: info/indices.c:421
+#, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr "„%s“ in %s gefunden. (Nächster Eintrag mit „\\[next-index-match]“.)"
+
+#: info/indices.c:549
+#, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "Indizes von „%s“ werden durchsucht..."
+
+#: info/indices.c:604
+#, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr "Keine der verfügbaren Info-Dateien hat „%s“ in ihren Indizes."
+
+#: info/indices.c:630
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr ""
+"Alle bekannten Info-Datei-Indizes nach einer Zeichenkette durchsuchen\n"
+" und ein Menü erstellen"
+
+#: info/indices.c:634
+msgid "Index apropos: "
+msgstr "Index-Apropos: "
+
+#: info/indices.c:662
+#, c-format
+msgid ""
+"\n"
+"* Menu: Nodes whose indices contain `%s':\n"
+msgstr ""
+"\n"
+"* Menü: Knoten, deren Indizes „%s“ enthalten:\n"
+
+#: info/info.c:275 info/infokey.c:899
+#, c-format
+msgid "Try --help for more information.\n"
+msgstr "„--help“ gibt weitere Informationen.\n"
+
+#: info/info.c:294 info/infokey.c:145 install-info/install-info.c:2101
+#: makeinfo/makeinfo.c:802 util/texindex.c:295
+#, c-format
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"Copyright © %s Free Software Foundation, Inc.\n"
+"Lizenz GPLv3+: GNU GPL Version 3 oder höher <http://gnu.org/licenses/gpl."
+"html>\n"
+"Dies ist freie Software: Sie können sie ändern und weiter verteilen.\n"
+"Es gibt KEINERLEI Garantie, soweit es das Gesetz erlaubt.\n"
+
+#: info/info.c:506
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "Keine Indexeinträge für „%s“ gefunden\n"
+
+#: info/info.c:600
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [MENU-ITEM...]\n"
+"\n"
+"Read documentation in Info format.\n"
+msgstr ""
+"Aufruf: %s [OPTION]... [MENU-EINTRAG...]\n"
+"\n"
+"Zum Lesen von Dokumentation, die im Info-Format vorliegt.\n"
+
+#: info/info.c:606
+msgid ""
+"Options:\n"
+" -k, --apropos=STRING look up STRING in all indices of all "
+"manuals.\n"
+" -d, --directory=DIR add DIR to INFOPATH.\n"
+" --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+" -f, --file=FILENAME specify Info file to visit."
+msgstr ""
+" -k, --apropos=ZKETTE ZKETTE in allen Indizes sämtlicher Info-Dateien\n"
+" suchen\n"
+" -d, --directory=VERZ VERZ dem INFOPATH hinzufügen\n"
+" --dribble=DATEI Tasteneingaben des Nutzers in DATEI merken\n"
+" -f, --file=DATEI zu besuchende Info-DATEI angeben"
+
+#: info/info.c:613
+msgid ""
+" -h, --help display this help and exit.\n"
+" --index-search=STRING go to node pointed by index entry STRING.\n"
+" -n, --node=NODENAME specify nodes in first visited Info file.\n"
+" -o, --output=FILENAME output selected nodes to FILENAME."
+msgstr ""
+" -h, --help diese Hilfe anzeigen und beenden\n"
+" --index-search=KETTE zu einem Knoten gehen, auf den der Indexeintrag\n"
+" KETTE zeigt\n"
+" -n, --node=KNOTEN Knoten in der ersten zu besuchenden Info-Datei\n"
+" angeben\n"
+" -o, --output=DATEI ausgewählte Knoten nach DATEI ausgeben"
+
+#: info/info.c:619
+msgid ""
+" -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+" --no-raw-escapes output escapes as literal text.\n"
+" --restore=FILENAME read initial keystrokes from FILENAME.\n"
+" -O, --show-options, --usage go to command-line options node."
+msgstr ""
+" -R, --raw-escapes „rohe“ ANSI-Escapes ausgeben (Voreinstellung)\n"
+" --no-raw-escapes Escapes als wörtlichen Text ausgeben\n"
+" --restore=DATEI die beginnenden Tasteneingaben von DATEI lesen\n"
+" -O, --show-options, --usage zum Knoten mit den Optionen für den\n"
+" Befehlsaufruf gehen"
+
+#: info/info.c:626
+msgid " -b, --speech-friendly be friendly to speech synthesizers."
+msgstr " -b, --speech-friendly zu Sprachsynthesizern freundlich sein."
+
+#: info/info.c:630
+msgid ""
+" --subnodes recursively output menu items.\n"
+" --vi-keys use vi-like and less-like key bindings.\n"
+" --version display version information and exit.\n"
+" -w, --where, --location print physical location of Info file."
+msgstr ""
+" --subnodes Menüeinträge rekursiv ausgeben\n"
+" --vi-keys Tastenbindungen ähnlich zu vi und less benutzen\n"
+" --version Programmversion anzeigen\n"
+" -w, --where, --location physischen Ort des Info-Datei anzeigen"
+
+#: info/info.c:636
+msgid ""
+"\n"
+"The first non-option argument, if present, is the menu entry to start from;\n"
+"it is searched for in all `dir' files along INFOPATH.\n"
+"If it is not present, info merges all `dir' files and shows the result.\n"
+"Any remaining arguments are treated as the names of menu\n"
+"items relative to the initial node visited."
+msgstr ""
+"\n"
+"Der erste Parameter, der keine Option ist, ist der Menüeintrag, von dem aus\n"
+"gestartet werden soll; nach diesem Menüeintrag wird in allen „dir“-Datei\n"
+"gemäß dem INFOPATH gesucht.\n"
+"Wird kein Menüeintrag angegeben, packt info alle „dir“-Dateien zusammen\n"
+"und zeigt das Ergebnis an.\n"
+"Verbleibende Parameter werden als Namen von Menüeinträgen des ersten zu\n"
+"besuchenden Knotens angesehen."
+
+#: info/info.c:643
+msgid ""
+"\n"
+"For a summary of key bindings, type h within Info."
+msgstr ""
+"\n"
+"Für eine Zusammenfassung möglicher Tastenkombinationen in Info ‚h‘ tippen."
+
+#: info/info.c:646
+msgid ""
+"\n"
+"Examples:\n"
+" info show top-level dir menu\n"
+" info info show the general manual for Info readers\n"
+" info info-stnd show the manual specific to this Info program\n"
+" info emacs start at emacs node from top-level dir\n"
+" info emacs buffers start at buffers node within emacs manual\n"
+" info --show-options emacs start at node with emacs' command line options\n"
+" info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+" info -f ./foo.info show file ./foo.info, not searching dir"
+msgstr ""
+"\n"
+"Beispiele:\n"
+" info das oberste „dir“-Menü anzeigen\n"
+" info info die allgemeine Anleitung für Info-Leser "
+"anzeigen\n"
+" info info-stnd die Anleitung für dieses Info-Programm "
+"anzeigen\n"
+" info emacs beim emacs-Knoten im obersten „dir“-Menü "
+"beginnen\n"
+" info emacs buffers beim buffers-Knoten im emacs-Manual beginnen\n"
+" info --show-options emacs beim Knoten mit den emacs-Kommandozeilen-"
+"Optionen\n"
+" beginnen\n"
+" info --subnodes -o out.txt emacs das ganze Handbuch nach out.txt "
+"schreiben\n"
+" info -f ./foo.info datei ./foo.info anzeigen"
+
+#: info/info.c:657 info/infokey.c:918 makeinfo/makeinfo.c:475
+#: util/texindex.c:259
+msgid ""
+"\n"
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+"Fehlerberichte (auf Englisch, mit LC_ALL=C) per E-Mail an bug-texinfo@gnu."
+"org\n"
+"schicken, allgemeine Fragen und Gedankenaustausch an help-texinfo@gnu.org.\n"
+"Texinfos Homepage: http://www.gnu.org/software/texinfo/"
+
+#: info/info.c:691
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "Knoten „%s“ nicht gefunden."
+
+#: info/info.c:692
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "Knoten „(%s)%s“ nicht gefunden."
+
+#: info/info.c:693
+msgid "Cannot find a window!"
+msgstr "Kein Fenster gefunden!"
+
+#: info/info.c:694
+msgid "Point doesn't appear within this window's node!"
+msgstr "Momentane Position erscheint nicht in dem Knoten dieses Fensters!"
+
+#: info/info.c:695
+msgid "Cannot delete the last window."
+msgstr "Kann das letzte Fenster nicht löschen!"
+
+#: info/info.c:696
+msgid "No menu in this node."
+msgstr "Kein Menü in diesem Knoten."
+
+#: info/info.c:697
+msgid "No footnotes in this node."
+msgstr "Keine Fußnoten in diesem Knoten."
+
+#: info/info.c:698
+msgid "No cross references in this node."
+msgstr "Keine Querverweise in diesem Knoten."
+
+#: info/info.c:699
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Kein „%s“-Verweis für diesem Knoten."
+
+#: info/info.c:700
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "Unbekannter Info-Befehl „%c“. „?“ eingeben, um Hilfe zu bekommen."
+
+#: info/info.c:701
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr "Der Terminaltyp „%s“ ist nicht fähig genug, um Info auszuführen."
+
+#: info/info.c:702
+msgid "You are already at the last page of this node."
+msgstr "Sie sind bereits auf der letzten Seite dieses Knotens."
+
+#: info/info.c:703
+msgid "You are already at the first page of this node."
+msgstr "Sie sind bereits auf der ersten Seite dieses Knotens."
+
+#: info/info.c:704
+msgid "Only one window."
+msgstr "Nur ein Fenster."
+
+#: info/info.c:705
+msgid "Resulting window would be too small."
+msgstr "Das entstehende Fenster wäre zu klein."
+
+#: info/info.c:706
+msgid "Not enough room for a help window, please delete a window."
+msgstr "Nicht genügend Platz für ein Hilfefenster. Bitte ein Fenster löschen."
+
+#: info/infodoc.c:45
+msgid "Basic Info command keys\n"
+msgstr "Grundlegende Info-Befehlstasten\n"
+
+#: info/infodoc.c:47
+msgid "\\%-10[quit-help] Close this help window.\n"
+msgstr "\\%-10[quit-help] Dieses Hilfefenster schließen.\n"
+
+#: info/infodoc.c:48
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] Info gänzlich beenden.\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr "\\%-10[get-info-help-node] Das Info-Tutorial aufrufen.\n"
+
+#: info/infodoc.c:51
+msgid "\\%-10[prev-line] Move up one line.\n"
+msgstr "\\%-10[prev-line] Eine Zeile nach oben bewegen.\n"
+
+#: info/infodoc.c:52
+msgid "\\%-10[next-line] Move down one line.\n"
+msgstr "\\%-10[next-line] Eine Zeile nach unten bewegen.\n"
+
+#: info/infodoc.c:53
+msgid "\\%-10[scroll-backward] Scroll backward one screenful.\n"
+msgstr "\\%-10[scroll-backward] Eine Bildschirmseite zurückblättern.\n"
+
+#: info/infodoc.c:54
+msgid "\\%-10[scroll-forward] Scroll forward one screenful.\n"
+msgstr "\\%-10[scroll-forward] Eine Bildschirmseite vorblättern.\n"
+
+#: info/infodoc.c:55
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr "\\%-10[beginning-of-node] Zum Anfang dieses Knotens gehen.\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr "\\%-10[end-of-node] Zum Ende dieses Knotens gehen.\n"
+
+#: info/infodoc.c:58
+msgid "\\%-10[move-to-next-xref] Skip to the next hypertext link.\n"
+msgstr "\\%-10[move-to-next-xref] Zur nächsten Verknüpfung springen.\n"
+
+#: info/infodoc.c:59
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under the "
+"cursor.\n"
+msgstr ""
+"\\%-10[select-reference-this-line] Der Verknüpfung unter dem Cursor "
+"folgen.\n"
+
+#: info/infodoc.c:60
+msgid "\\%-10[history-node] Go back to the last node seen in this window.\n"
+msgstr ""
+"\\%-10[history-node] Zum letzten in diesem Fenster besuchten Knoten gehen.\n"
+
+#: info/infodoc.c:62
+msgid "\\%-10[global-prev-node] Go to the previous node in the document.\n"
+msgstr ""
+"\\%-10[global-prev-node] Zum vorherigen Knoten dieses Dokuments gehen.\n"
+
+#: info/infodoc.c:63
+msgid "\\%-10[global-next-node] Go to the next node in the document.\n"
+msgstr ""
+"\\%-10[global-next-node] Zum nächsten Knoten dieses Dokuments gehen.\n"
+
+#: info/infodoc.c:64
+msgid "\\%-10[prev-node] Go to the previous node on this level.\n"
+msgstr "\\%-10[prev-node] Zum vorherigen Knoten auf dieser Ebene gehen.\n"
+
+#: info/infodoc.c:65
+msgid "\\%-10[next-node] Go to the next node on this level.\n"
+msgstr "\\%-10[next-node] Zum nächsten Knoten auf dieser Ebene gehen.\n"
+
+#: info/infodoc.c:66
+msgid "\\%-10[up-node] Go up one level.\n"
+msgstr "\\%-10[up-node] Eine Ebene aufwärts gehen.\n"
+
+#: info/infodoc.c:67
+msgid "\\%-10[top-node] Go to the top node of this document.\n"
+msgstr "\\%-10[top-node] Zum Startknoten dieses Dokukments gehen.\n"
+
+#: info/infodoc.c:68
+msgid "\\%-10[dir-node] Go to the main `directory' node.\n"
+msgstr "\\%-10[dir-node] Zum Hauptverzeichnisknoten gehen.\n"
+
+#: info/infodoc.c:70
+msgid "1...9 Pick the first...ninth item in this node's menu.\n"
+msgstr ""
+"1...9 Ersten ... neunten Eintrag aus dem Menü dieses Knotens wählen.\n"
+
+#: info/infodoc.c:71
+msgid "\\%-10[last-menu-item] Pick the last item in this node's menu.\n"
+msgstr ""
+"\\%-10[last-menu-item] Letzten Eintrag aus dem Menü dieses Knotens wählen.\n"
+
+#: info/infodoc.c:72
+msgid "\\%-10[menu-item] Pick a menu item specified by name.\n"
+msgstr "\\%-10[menu-item] Einen Menüeintrag nach dem Namen auswählen.\n"
+
+#: info/infodoc.c:73
+msgid "\\%-10[xref-item] Follow a cross reference specified by name.\n"
+msgstr "\\%-10[xref-item] Einem Querverweis anhand des Namens folgen.\n"
+
+#: info/infodoc.c:74
+msgid "\\%-10[goto-node] Go to a node specified by name.\n"
+msgstr "\\%-10[goto-node] Knoten nach Namen auswählen und dorthin springen.\n"
+
+#: info/infodoc.c:76
+msgid "\\%-10[search] Search forward for a specified string.\n"
+msgstr "\\%-10[search] Angegebene Zeichenkette in Vorwärtsrichtung suchen.\n"
+
+#: info/infodoc.c:77
+msgid "\\%-10[search-previous] Search for previous occurrence.\n"
+msgstr "\\%-10[search-previous] Nach vorhergehendem Auftreten suchen.\n"
+
+#: info/infodoc.c:78
+msgid "\\%-10[search-next] Search for next occurrence.\n"
+msgstr "\\%-10[search-next] Nach nächstem Auftreten suchen.\n"
+
+#: info/infodoc.c:79
+msgid ""
+"\\%-10[index-search] Search for a specified string in the index, and\n"
+" select the node referenced by the first entry found.\n"
+msgstr ""
+"\\%-10[index-search] Eine Zeichenkette in den Indexeintägen dieser Info-"
+"Datei\n"
+" suchen und zu dem Knoten springen, auf den der erste\n"
+" gefundene Eintrag verweist.\n"
+
+#: info/infodoc.c:81
+msgid "\\%-10[abort-key] Cancel the current operation.\n"
+msgstr "\\%-10[abort-key] Momentane Operation abbrechen.\n"
+
+#: info/infodoc.c:89
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"Grundbefehle in Info-Fenstern\n"
+"*****************************\n"
+
+#: info/infodoc.c:92
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s Diese Hilfe verlassen.\n"
+
+#: info/infodoc.c:93
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Info gänzlich beenden.\n"
+
+#: info/infodoc.c:94
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Das Info-Tutorial aufrufen.\n"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr " %-10s Zum nächsten Knoten („next“) dieses Knotens gehen.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr " %-10s Zum vorherigen Knoten („prev“) dieses Knotens gehen.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s Von diesem Knoten aus aufwärts („up“) gehen.\n"
+
+#: info/infodoc.c:101
+#, c-format
+msgid ""
+" %-10s Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+" %-10s Einen Menüeintrag nach dem Namen auswählen.\n"
+" Auswahl des Menüeintrags führt zu Auswahl eines anderen "
+"Knotens.\n"
+
+#: info/infodoc.c:103
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr " %-10s Einem Querverweis folgen. Liest den Namen des Verweises.\n"
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr " %-10s Zum letzten in diesem Fenster gezeigten Knoten gehen.\n"
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr " %-10s Zur nächsten Verknüpfung auf dieser Seite springen.\n"
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s Der Verknüpfung unter dem Cursor folgen.\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr " %-10s Zum „directory“-Knoten springen. Das gleiche wie „g (DIR)“.\n"
+
+#: info/infodoc.c:108
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr " %-10s Zum „Top“-Knoten springen. Das gleiche wie „g Top“.\n"
+
+#: info/infodoc.c:110
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"Bewegung innerhalb eines Knotens:\n"
+"---------------------------------\n"
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s Eine Seite vorblättern.\n"
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s Eine Seite zurückblättern.\n"
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s Zum Anfang dieses Knotens gehen.\n"
+
+#: info/infodoc.c:115
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s Zum Ende dieses Knotens gehen.\n"
+
+#: info/infodoc.c:116
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s Eine Zeile vorblättern.\n"
+
+#: info/infodoc.c:117
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s Eine Zeile zurückblättern.\n"
+
+#: info/infodoc.c:119
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"Weitere Befehle:\n"
+"----------------\n"
+
+#: info/infodoc.c:121
+#, c-format
+msgid " %-10s Pick first...ninth item in node's menu.\n"
+msgstr " %-10s Ersten ... neunten Eintrag aus dem Menü des Knotens wählen.\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s Letzten Eintrag aus dem Menü des Knotens wählen.\n"
+
+#: info/infodoc.c:125
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr ""
+" %-10s Eine Zeichenkette in den Indexeintägen dieser Info-Datei\n"
+" suchen und den Knoten wählen, auf den der erste gefundene\n"
+" Eintrag verweist.\n"
+
+#: info/infodoc.c:127
+#, c-format
+msgid ""
+" %-10s Move to node specified by name.\n"
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+" %-10s Knoten nach Namen auswählen und dorthin springen.\n"
+" Dateiname kann mit angegeben werden, also (DATEI)KNOTENNAME.\n"
+
+#: info/infodoc.c:129
+#, c-format
+msgid ""
+" %-10s Search forward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+" %-10s Angegebene Zeichenkette in Vorwärtsrichtung suchen und den\n"
+" Knoten wählen, in dem der nächste Eintrag gefunden wurde.\n"
+
+#: info/infodoc.c:131
+#, c-format
+msgid ""
+" %-10s Search backward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+" %-10s Angegebene Zeichenkette in Vorwärtsrichtung suchen und den\n"
+" Knoten wählen, in dem der nächste Eintrag gefunden wurde.\n"
+
+#: info/infodoc.c:312
+msgid "The current search path is:\n"
+msgstr "Der momentane Suchpfad ist:\n"
+
+#: info/infodoc.c:316
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"Befehle, die in Info-Fenstern verfügbar sind:\n"
+"\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"Befehle, die im Echo-Bereich verfügbar sind:\n"
+"\n"
+
+#: info/infodoc.c:343
+#, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+"Die folgenden Befehle können nur durch %s aufgerufen werden:\n"
+"\n"
+
+#: info/infodoc.c:347
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+"Die folgenden Befehle können überhaupt nicht aufgerufen werden:\n"
+"\n"
+
+#: info/infodoc.c:477
+msgid "Display help message"
+msgstr "Diesen Hilfe-Text anzeigen"
+
+#: info/infodoc.c:495
+msgid "Visit Info node `(info)Help'"
+msgstr "Info-Knoten „(info)Help“ besuchen"
+
+#: info/infodoc.c:633
+msgid "Print documentation for KEY"
+msgstr "Dokumentation für KEY ausgeben"
+
+#: info/infodoc.c:645
+#, c-format
+msgid "Describe key: %s"
+msgstr "Beschreibe Taste: %s"
+
+#: info/infodoc.c:656
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s ist nicht definiert."
+
+#: info/infodoc.c:672 info/infodoc.c:701
+#, c-format
+msgid "%s is undefined."
+msgstr "%s ist nicht definiert."
+
+#: info/infodoc.c:722
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s ist definiert als %s."
+
+#: info/infodoc.c:1146
+msgid "Show what to type to execute a given command"
+msgstr "Anzeigen, was einzugeben ist, um einen gegebenen Befehl auszuführen"
+
+#: info/infodoc.c:1150
+msgid "Where is command: "
+msgstr "Wo ist der Befehl: "
+
+#: info/infodoc.c:1172
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "Keine Taste mit „%s“ belegt"
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s kann nur durch %s aufgerufen werden."
+
+#: info/infodoc.c:1183
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s kann durch %s aufgerufen werden."
+
+#: info/infodoc.c:1188
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "Es gibt keine Funktion mit Namen „%s“"
+
+#: info/infodoc.c:96
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"Andere Knoten wählen:\n"
+"---------------------\n"
+
+#: info/infokey.c:170
+msgid "incorrect number of arguments"
+msgstr "falsche Anzahl von Argumenten"
+
+#: info/infokey.c:201
+#, c-format
+msgid "cannot open input file `%s'"
+msgstr "Eingabedatei „%s“ kann nicht geöffnet werden."
+
+#: info/infokey.c:215
+#, c-format
+msgid "cannot create output file `%s'"
+msgstr "Ausgabedatei „%s“ kann nicht angelegt werden."
+
+#: info/infokey.c:226
+#, c-format
+msgid "error writing to `%s'"
+msgstr "Fehler beim Schreiben von „%s“."
+
+#: info/infokey.c:232
+#, c-format
+msgid "error closing output file `%s'"
+msgstr "Fehler beim Schließen der Ausgabedatei „%s“."
+
+#: info/infokey.c:450
+msgid "key sequence too long"
+msgstr "Tastenkombination zu lang."
+
+#: info/infokey.c:529
+msgid "missing key sequence"
+msgstr "Fehlende Tastenkombination."
+
+#: info/infokey.c:610
+msgid "NUL character (\\000) not permitted"
+msgstr "NUL-Zeichen (\\000) nicht erlaubt."
+
+#: info/infokey.c:641
+#, c-format
+msgid "NUL character (^%c) not permitted"
+msgstr "NUL-Zeichen (^%c) nicht erlaubt."
+
+#: info/infokey.c:665
+msgid "missing action name"
+msgstr "Fehlender Befehlsname."
+
+#: info/infokey.c:681 info/infokey.c:756
+msgid "section too long"
+msgstr "Abschnitt zu lang."
+
+#: info/infokey.c:688
+#, c-format
+msgid "unknown action `%s'"
+msgstr "Unbekannter Befehl „%s“."
+
+#: info/infokey.c:698
+msgid "action name too long"
+msgstr "Befehlsname zu lang."
+
+#: info/infokey.c:712
+#, c-format
+msgid "extra characters following action `%s'"
+msgstr "Extrazeichen folgen Befehl „%s“."
+
+#: info/infokey.c:723
+msgid "missing variable name"
+msgstr "Dateiname fehlt."
+
+#: info/infokey.c:733
+msgid "missing `=' immediately after variable name"
+msgstr "Fehlendes „=“ direkt hinter Variablenname."
+
+#: info/infokey.c:741
+msgid "variable name too long"
+msgstr "Variablenname zu lang"
+
+#: info/infokey.c:765
+msgid "value too long"
+msgstr "Wert zu lang"
+
+#: info/infokey.c:890
+#, c-format
+msgid "\"%s\", line %u: "
+msgstr "„%s“, Zeile %u: "
+
+#: info/infokey.c:906
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [INPUT-FILE]\n"
+"\n"
+"Compile infokey source file to infokey file. Reads INPUT-FILE (default\n"
+"$HOME/.infokey) and writes compiled key file to (by default) $HOME/.info.\n"
+"\n"
+"Options:\n"
+" --output FILE output to FILE instead of $HOME/.info\n"
+" --help display this help and exit.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"Aufruf: %s [OPTION]... [EINGABE-DATEI]\n"
+"\n"
+"Infokey-Quelldatei in Infokey-Datei kompilieren. Liest EINGABE-DATEI\n"
+"(Voreinstellung $HOME/.infokey) und schreibt kompilierte Tastaturdatei\n"
+"(per Voreinstellung) nach $HOME/.info.\n"
+"\n"
+"Optionen:\n"
+" --output DATEINAME in DATEINAME statt in $HOME/.info ausgeben\n"
+" --help diese Hilfe anzeigen und beenden\n"
+" --version Versionsnummer anzeigen und beenden\n"
+
+#: info/infomap.c:955
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "Ungültige Info-Schlüssel-Datei „%s“ wird ignoriert - zu klein"
+
+#: info/infomap.c:958
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "Ungültige Info-Schlüssel-Datei „%s“ wird ignoriert - zu groß"
+
+#: info/infomap.c:971
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "Fehler beim Lesen der Infokey-Datei „%s“ - zu kurzes Lesen"
+
+#: info/infomap.c:990
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+"Ungültige Infokey-Datei „%s“ (fehlerhafte Signatur) -- bitte mit infokey "
+"erneuern"
+
+#: info/infomap.c:999
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr "Ihre Infokey-Datei „%s“ ist veraltet -- bitte mit infokey erneuern"
+
+#: info/infomap.c:1015
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+"Ungültige Infokey-Datei „%s“ (fehlerhafte Abschnittslänge) -- bitte mit "
+"infokey erneuern"
+
+#: info/infomap.c:1036
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr ""
+"Ungültige Infokey-Datei „%s“ (fehlerhafter Abschnittscode) -- bitte mit "
+"infokey erneuern"
+
+#: info/infomap.c:1171
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr ""
+"Fehlerhafte Daten in Infokey-Datei -- einige Tastaturbindungen ignoriert"
+
+#: info/infomap.c:1221
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr ""
+"Fehlerhafte Daten in Infokey-Datei -- einige Variableneinstellungen ignoriert"
+
+#: info/m-x.c:68
+msgid "Read the name of an Info command and describe it"
+msgstr "Namen eines Info-Befehls lesen und beschreiben"
+
+#: info/m-x.c:72
+msgid "Describe command: "
+msgstr "Beschreibe den Befehl: "
+
+#: info/m-x.c:95
+msgid "Read a command name in the echo area and execute it"
+msgstr "Einen Befehlsnamen im Echo-Bereich lesen und ausführen"
+
+#: info/m-x.c:139
+msgid "Cannot execute an `echo-area' command here."
+msgstr "Befehl für Echo-Bereich hier nicht ausführbar."
+
+#: info/m-x.c:153
+#, c-format
+msgid "Undefined command: %s"
+msgstr "Undefinierter Befehl: %s"
+
+#: info/m-x.c:159
+msgid "Set the height of the displayed window"
+msgstr "Höhe des angezeigten Fensters setzen"
+
+#: info/m-x.c:172
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Setze Bildschirm-Höhe auf (%d): "
+
+#: info/makedoc.c:166 info/makedoc.c:174
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+" Quelldateien durchsucht, damit diese Datei enthält:\n"
+"\n"
+
+#: info/makedoc.c:556
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "Datei „%s“ ist nicht veränderbar.\n"
+
+#: info/nodemenu.c:30
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+"\n"
+"* Menü:\n"
+" (Datei)Knoten Zeilen Größe Beinhaltet Datei\n"
+" ------------- ------ ----- ----------------"
+
+#: info/nodemenu.c:201
+msgid ""
+"Here is the menu of nodes you have recently visited.\n"
+"Select one from this menu, or use `\\[history-node]' in another window.\n"
+msgstr ""
+"Hier ist das Menü der Knoten, die zuletzt besucht wurden.\n"
+"Einen Eintrag auswählen oder „\\[history-node]“ in einem anderen Fenster\n"
+"benützen.\n"
+
+#: info/nodemenu.c:223
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr "Ein Fenster mit einem Menü aller aktuell besuchten Knoten erzeugen"
+
+#: info/nodemenu.c:303
+msgid "Select a node which has been previously visited in a visible window"
+msgstr ""
+"Einen Knoten auswählen, der zuvor in einem sichtbaren Fenster\n"
+" besucht wurde"
+
+#: info/nodemenu.c:316
+msgid "Select visited node: "
+msgstr "Wähle besuchten Knoten aus: "
+
+#: info/nodemenu.c:336 info/session.c:2578
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "Der Verweis ist verschwunden! (%s)."
+
+#: info/search.c:166
+#, c-format
+msgid "regexp error: %s"
+msgstr "Fehler in regulärem Ausdruck: %s"
+
+#: info/session.c:164
+#, c-format
+msgid ""
+"Welcome to Info version %s. Type \\[get-help-window] for help, \\[menu-item] "
+"for menu item."
+msgstr ""
+"Willkommen bei Info (Version %s). „\\[get-help-window]“ eingeben für Hilfe, "
+"„\\[menu-item]“ für Menüeintrag."
+
+#: info/session.c:625
+msgid "Move down to the next line"
+msgstr "Eine Zeile nach unten bewegen"
+
+#: info/session.c:661
+msgid "Move up to the previous line"
+msgstr "Eine Zeile nach oben bewegen"
+
+#: info/session.c:931
+msgid "Move to the end of the line"
+msgstr "Zum Ende dieser Zeile bewegen"
+
+#: info/session.c:942
+msgid "Move to the start of the line"
+msgstr "Zum Anfang der Zeile bewegen"
+
+#: info/session.c:1142
+msgid "Next"
+msgstr "nächstes"
+
+#: info/session.c:1158 info/session.c:1283
+msgid "No more nodes within this document."
+msgstr "Keine weiteren Knoten in diesem Dokument."
+
+#: info/session.c:1309
+msgid "No `Prev' for this node."
+msgstr "Kein „voriges“ (Prev) für diesem Knoten."
+
+#: info/session.c:1329
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr ""
+"Kein „voriges“ (Prev) oder „aufwärts“ (Up) für diesen Knoten innerhalb "
+"dieses Dokuments."
+
+#: info/session.c:1391
+msgid "Move forwards or down through node structure"
+msgstr "Vorwärts oder abwärts durch die Knotenstruktur bewegen"
+
+#: info/session.c:1407
+msgid "Move backwards or up through node structure"
+msgstr "Zurück oder aufwärts durch die Knotenstruktur bewegen"
+
+#: info/session.c:1508
+msgid "Scroll forward in this window"
+msgstr "In diesem Fenster vorwärts blättern"
+
+#: info/session.c:1516
+msgid "Scroll forward in this window and set default window size"
+msgstr ""
+"In diesem Fenster vorwärts blättern und die Standard-Fenstergröße setzen"
+
+#: info/session.c:1524
+msgid "Scroll forward in this window staying within node"
+msgstr "In diesem Fenster vorwärts blättern ohne den Knoten zu verlassen"
+
+#: info/session.c:1532
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr ""
+"In diesem Fenster vorwärts blättern (ohne den Knoten zu verlassen)\n"
+" und Standard-Fenstergröße setzen"
+
+#: info/session.c:1540
+msgid "Scroll backward in this window"
+msgstr "In diesem Fenster zurückblättern"
+
+#: info/session.c:1548
+msgid "Scroll backward in this window and set default window size"
+msgstr "In diesem Fenster zurückblättern und die Standard-Fenstergröße setzen"
+
+#: info/session.c:1557
+msgid "Scroll backward in this window staying within node"
+msgstr "In diesem Fenster zurückblättern ohne den Knoten zu verlassen"
+
+#: info/session.c:1565
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr ""
+"In diesem Fenster zurück blättern (ohne den Knoten zu verlassen)\n"
+" und Standard-Fenstergröße setzen"
+
+#: info/session.c:1573
+msgid "Move to the start of this node"
+msgstr "Zum Anfang dieses Knotens bewegen"
+
+#: info/session.c:1580
+msgid "Move to the end of this node"
+msgstr "Zum Ende dieses Knotens bewegen"
+
+#: info/session.c:1587
+msgid "Scroll down by lines"
+msgstr "Zeilenweise vorblättern"
+
+#: info/session.c:1604
+msgid "Scroll up by lines"
+msgstr "Zeilenweise zurück blättern"
+
+#: info/session.c:1622
+msgid "Scroll down by half screen size"
+msgstr "Einen halben Bildschirm vorblättern"
+
+#: info/session.c:1648
+msgid "Scroll up by half screen size"
+msgstr "Einen halben Bildschirm zurückblättern"
+
+#: info/session.c:1677
+msgid "Select the next window"
+msgstr "Das nächste Fenster auswählen"
+
+#: info/session.c:1716
+msgid "Select the previous window"
+msgstr "Das vorige Fenster auswählen"
+
+#: info/session.c:1767
+msgid "Split the current window"
+msgstr "Aktuelles Fenster unterteilen"
+
+#: info/session.c:1848
+msgid "Delete the current window"
+msgstr "Aktuelles Fenster löschen"
+
+#: info/session.c:1856
+msgid "Cannot delete a permanent window"
+msgstr "Ein permanentes Fenster kann nicht gelöscht werden"
+
+#: info/session.c:1888
+msgid "Delete all other windows"
+msgstr "Alle anderen Fenster löschen"
+
+#: info/session.c:1934
+msgid "Scroll the other window"
+msgstr "Im anderen Fenster vorblättern"
+
+#: info/session.c:1955
+msgid "Scroll the other window backward"
+msgstr "Im anderen Fenster zurück blättern"
+
+#: info/session.c:1961
+msgid "Grow (or shrink) this window"
+msgstr "Aktuelles Fenster vergrößern (oder verkleinern)"
+
+#: info/session.c:1972
+msgid "Divide the available screen space among the visible windows"
+msgstr ""
+"Den vorhandenen Bildschirmplatz unter allen sichtbaren Fenstern aufteilen"
+
+#: info/session.c:1979
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "Den Status des Zeilenumbruchs im aktuellen Fenster umschalten"
+
+#: info/session.c:1986
+msgid "Toggle the usage of regular expressions in searches"
+msgstr "Die Verwendung regulärer Ausdrücke in Suchen umschalten"
+
+#: info/session.c:1990
+msgid "Using regular expressions for searches."
+msgstr "Für Suchen werden reguläre Ausdrücke benutzt"
+
+#: info/session.c:1991
+msgid "Using literal strings for searches."
+msgstr "Für Suchen werden wortwörtliche Zeichenketten benutzt"
+
+#: info/session.c:2162
+msgid "Select the Next node"
+msgstr "Den „nächsten“ Knoten (Next) auswählen"
+
+#: info/session.c:2170
+msgid "Select the Prev node"
+msgstr "Den „vorigen“ Knoten (Prev) auswählen"
+
+#: info/session.c:2178
+msgid "Select the Up node"
+msgstr "Den übergeordneten Knoten auswählen („aufwärts“, Up)"
+
+#: info/session.c:2185
+msgid "Select the last node in this file"
+msgstr "Den letzten Knoten dieser Datei auswählen"
+
+#: info/session.c:2212 info/session.c:2245
+msgid "This window has no additional nodes"
+msgstr "Dieses Fenster hat keine weiteren Knoten"
+
+#: info/session.c:2218
+msgid "Select the first node in this file"
+msgstr "Den ersten Knoten dieser Datei auswählen"
+
+#: info/session.c:2252
+msgid "Select the last item in this node's menu"
+msgstr "Den letzten Menüeintrag dieses Knotens auswählen"
+
+#: info/session.c:2258
+msgid "Select this menu item"
+msgstr "Diesen Menüeintrag auswählen"
+
+#: info/session.c:2291
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "Es sind keine %d Einträge in diesem Menü."
+
+#: info/session.c:2485 info/session.c:2486
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Menüeintrag (%s): "
+
+#: info/session.c:2489
+msgid "Menu item: "
+msgstr "Menüeintrag: "
+
+#: info/session.c:2496 info/session.c:2497
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Folge xref (%s): "
+
+#: info/session.c:2500
+msgid "Follow xref: "
+msgstr "Folge xref: "
+
+#: info/session.c:2629
+msgid "Read a menu item and select its node"
+msgstr "Einen Menüeintrag lesen und seinen Knoten auswählen"
+
+#: info/session.c:2637
+msgid "Read a footnote or cross reference and select its node"
+msgstr "Fußnote oder Querverweis lesen und den Knoten auswählen"
+
+#: info/session.c:2643
+msgid "Move to the start of this node's menu"
+msgstr "Zum Anfang des Menüs dieses Knotens bewegen"
+
+#: info/session.c:2667
+msgid "Visit as many menu items at once as possible"
+msgstr "So viele Menüeinträge wie möglich auf einmal besuchen"
+
+#: info/session.c:2695
+msgid "Read a node name and select it"
+msgstr "Den Namen eines Knotens lesen und diesen auswählen"
+
+#: info/session.c:2750 info/session.c:2755
+msgid "Goto node: "
+msgstr "Gehe zu Knoten: "
+
+#: info/session.c:2819
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "Kein Menü im Knoten „%s“."
+
+#: info/session.c:2865
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "Kein Menüeintrag „%s“ im Knoten „%s“."
+
+#: info/session.c:2895
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr "Kann keinen Knoten finden, der von „%s“ in „%s“ referenziert wird."
+
+#: info/session.c:2945
+msgid "Read a list of menus starting from dir and follow them"
+msgstr "Menüliste lesen; bei „dir“ beginnen und ihnen folgen"
+
+#: info/session.c:2947
+msgid "Follow menus: "
+msgstr "Folge Menüs: "
+
+#: info/session.c:3140
+msgid "Find the node describing program invocation"
+msgstr "Den Knoten finden, der den Programmaufruf beschreibt"
+
+#: info/session.c:3142
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "Finde den Programmaufruf-Knoten von [%s]: "
+
+#: info/session.c:3180
+msgid "Read a manpage reference and select it"
+msgstr "Einen Verweis auf eine Manpage lesen und diese auswählen"
+
+#: info/session.c:3184
+msgid "Get Manpage: "
+msgstr "Hole Manpage: "
+
+#: info/session.c:3214
+msgid "Select the node `Top' in this file"
+msgstr "Den Knoten „Top“ dieser Datei auswählen"
+
+#: info/session.c:3220
+msgid "Select the node `(dir)'"
+msgstr "Den Knoten „(dir)“ auswählen"
+
+#: info/session.c:3237 info/session.c:3239
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Lösche Information über Knoten (%s): "
+
+#: info/session.c:3291
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "Kann Information über Knoten „%s“ nicht löschen"
+
+#: info/session.c:3301
+msgid "Cannot kill the last node"
+msgstr "Information über den letzten Knoten kann nicht gelöscht werden"
+
+#: info/session.c:3387
+msgid "Select the most recently selected node"
+msgstr "Den zuletzt gewählten Knoten auswählen"
+
+#: info/session.c:3393
+msgid "Kill this node"
+msgstr "Information über diesen Knoten löschen"
+
+#: info/session.c:3401
+msgid "Read the name of a file and select it"
+msgstr "Den Namen einer Datei lesen und diese auswählen"
+
+#: info/session.c:3405
+msgid "Find file: "
+msgstr "Finde Datei: "
+
+#: info/session.c:3422
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "Kann „%s“ nicht finden."
+
+#: info/session.c:3465 info/session.c:3583
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "Ausgabedatei „%s“ kann nicht angelegt werden."
+
+#: info/session.c:3479 info/session.c:3601 info/session.c:3661
+msgid "Done."
+msgstr "Fertig."
+
+#: info/session.c:3534
+#, c-format
+msgid "Writing node %s..."
+msgstr "Knoten „%s“ wird geschrieben..."
+
+#: info/session.c:3610
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr ""
+"Den Inhalt dieses Knotens an INFO_PRINT_COMMAND weiterreichen\n"
+" (mittels einer Pipe)"
+
+#: info/session.c:3645
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "Kann Daten nicht nach „%s“ weiterreichen (mittels einer Pipe)."
+
+#: info/session.c:3651
+#, c-format
+msgid "Printing node %s..."
+msgstr "Knoten „%s“ wird gedruckt..."
+
+#: info/session.c:3900
+msgid "Search continued from the end of the document."
+msgstr "Suche vom Ende des Dokuments fortgesetzt."
+
+#: info/session.c:3905
+msgid "Search continued from the beginning of the document."
+msgstr "Suche vom Anfang des Dokuments fortgesetzt."
+
+#: info/session.c:3922
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "Unterdatei „%s“ wird durchsucht..."
+
+#: info/session.c:3979
+msgid "Read a string and search for it case-sensitively"
+msgstr ""
+"Eine Zeichenkette einlesen und danach gemäß Groß-/Kleinschreibung suchen"
+
+#: info/session.c:3986
+msgid "Read a string and search for it"
+msgstr "Eine Zeichenkette einlesen und danach suchen"
+
+#: info/session.c:3994
+msgid "Read a string and search backward for it"
+msgstr "Eine Zeichenkette einlesen und danach in Rückwärtsrichtung suchen"
+
+#: info/session.c:4030 info/session.c:4036
+#, c-format
+msgid "%s%s%s [%s]: "
+msgstr "%s%s%s [%s]: "
+
+#: info/session.c:4031 info/session.c:4037
+msgid "Regexp search"
+msgstr "Suche mit regulärem Ausdruck"
+
+#: info/session.c:4032 info/session.c:4038
+msgid " case-sensitively"
+msgstr " gemäß Groß-/Kleinschreibung"
+
+#: info/session.c:4033 info/session.c:4039
+msgid " backward"
+msgstr " in Rückwärtsrichtung"
+
+#: info/session.c:4037
+msgid "Search"
+msgstr "Suche"
+
+#: info/session.c:4079
+msgid "Search failed."
+msgstr "Suche fehlgeschlagen."
+
+#: info/session.c:4097
+msgid "Repeat last search in the same direction"
+msgstr "Letzte Suche in der gleichen Richtung wiederholen"
+
+#: info/session.c:4100 info/session.c:4110
+msgid "No previous search string"
+msgstr "Keine vorherige Such-Zeichenkette."
+
+#: info/session.c:4107
+msgid "Repeat last search in the reverse direction"
+msgstr "Letzte Suche in der entgegengesetzten Richtung wiederholen"
+
+#: info/session.c:4126 info/session.c:4132
+msgid "Search interactively for a string as you type it"
+msgstr "Interaktiv eine Zeichenkette während der Eingabe suchen"
+
+#: info/session.c:4212
+msgid "Regexp I-search backward: "
+msgstr "Interaktive Suche mit regulärem Ausdruck in Rückwärtsrichtung: "
+
+#: info/session.c:4213
+msgid "I-search backward: "
+msgstr "Interaktive Suche in Rückwärtsrichtung: "
+
+#: info/session.c:4215
+msgid "Regexp I-search: "
+msgstr "Interaktive Suche mit regulärem Ausdruck: "
+
+#: info/session.c:4216
+msgid "I-search: "
+msgstr "Interaktive Suche: "
+
+#: info/session.c:4241 info/session.c:4243
+msgid "Failing "
+msgstr "Fehlschlagende "
+
+#: info/session.c:4734
+msgid "Move to the previous cross reference"
+msgstr "Zum vorigen Querverweis bewegen"
+
+#: info/session.c:4752
+msgid "Move to the next cross reference"
+msgstr "Zum nächsten Querverweis bewegen"
+
+#: info/session.c:4774
+msgid "Select reference or menu item appearing on this line"
+msgstr "Verweis oder Menüeintrag auswählen, der auf dieser Zeile erscheint"
+
+#: info/session.c:4797
+msgid "Cancel current operation"
+msgstr "Momentane Operation abbrechen"
+
+#: info/session.c:4804
+msgid "Quit"
+msgstr "Beenden"
+
+#: info/session.c:4813
+msgid "Move the cursor to a specific line of the window"
+msgstr "Den Cursor zu einer bestimmten Zeile des Fensters bewegen"
+
+#: info/session.c:4845
+msgid "Redraw the display"
+msgstr "Anzeige erneut darstellen"
+
+#: info/session.c:4882
+msgid "Quit using Info"
+msgstr "Info beenden"
+
+#: info/session.c:4895
+msgid "Run command bound to this key's lowercase variant"
+msgstr ""
+"Befehl ausführen, der an die kleingeschriebene Variante dieser\n"
+" Taste gebunden ist"
+
+#: info/session.c:4906
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "Unbekannter Befehl (%s)."
+
+#: info/session.c:4909
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "„%s“ ist ungültig"
+
+#: info/session.c:4910
+#, c-format
+msgid "`%s' is invalid"
+msgstr "„%s“ ist ungültig"
+
+#: info/session.c:5125
+msgid "Add this digit to the current numeric argument"
+msgstr "Diese Zahl dem aktuellen numerischen Argument hinzufügen"
+
+#: info/session.c:5134
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "Beginne (oder multipliziere mit 4) das aktuelle numerische Argument"
+
+#: info/session.c:5149
+msgid "Internally used by \\[universal-argument]"
+msgstr "Intern verwendet von \\[universal-argument]"
+
+#: info/tilde.c:336
+#, c-format
+msgid "readline: Out of virtual memory!\n"
+msgstr "readline: Kein Speicher mehr!\n"
+
+#: info/variables.c:37
+msgid "When \"On\", footnotes appear and disappear automatically"
+msgstr "Wenn „On“, dann erscheinen und verschwinden Fußnoten automatisch"
+
+#: info/variables.c:41
+msgid "When \"On\", creating or deleting a window resizes other windows"
+msgstr ""
+"Wenn „On“, dann werden beim Anlegen oder Löschen eines Fensters die anderen "
+"Fenster angepasst"
+
+#: info/variables.c:45
+msgid "When \"On\", flash the screen instead of ringing the bell"
+msgstr "Wenn „On“, dann den Bildschirm blinken lassen, kein akustisches Signal"
+
+#: info/variables.c:49
+msgid "When \"On\", errors cause the bell to ring"
+msgstr "Wenn „On“, dann erzeugen Fehler ein akustisches Signal"
+
+#: info/variables.c:53
+msgid "When \"On\", Info garbage collects files which had to be uncompressed"
+msgstr ""
+"Wenn „On“, dann behält Info keine Dateien im Speicher, die ausgepackt werden "
+"mussten"
+
+#: info/variables.c:56
+msgid "When \"On\", the portion of the matched search string is highlighted"
+msgstr ""
+"Wenn „On“, dann wird die übereinstimmende gefundene Zeichenkette markiert"
+
+#: info/variables.c:60
+msgid "Controls what happens when scrolling is requested at the end of a node"
+msgstr "Kontrolliert, was passiert, wenn am Ende eines Knotens geblättert wird"
+
+#: info/variables.c:65
+msgid "Same as scroll-behaviour"
+msgstr "Das gleiche wie scroll-behaviour"
+
+#: info/variables.c:69
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr ""
+"Anzahl der Zeilen zu blättern, wenn der Cursor aus dem Fenster bewegt wird"
+
+#: info/variables.c:73
+msgid "Controls whether scroll-behavior affects cursor movement commands"
+msgstr "Bestimmt, ob scroll-behavior Cursorbewegungsbefehle beeinflusst"
+
+#: info/variables.c:77
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr "Wenn „On“, dann akzeptiert Info ISO-Latin-Zeichen und zeigt diese an"
+
+#: info/variables.c:81
+msgid ""
+"What to do when a scrolling command is issued at the end of the last node"
+msgstr "Kontrolliert, was passiert, wenn am Ende eines Knotens geblättert wird"
+
+#: info/variables.c:88
+msgid "Explain the use of a variable"
+msgstr "Den Zweck einer Variablen erklären"
+
+#: info/variables.c:94
+msgid "Describe variable: "
+msgstr "Beschreibe Variable: "
+
+#: info/variables.c:113
+msgid "Set the value of an Info variable"
+msgstr "Den Wert einer Info-Variablen setzen"
+
+#: info/variables.c:119
+msgid "Set variable: "
+msgstr "Setze Variable: "
+
+#: info/variables.c:137
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "Setze %s auf den Wert (%d): "
+
+#: info/variables.c:178
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "Setze %s auf den Wert (%s): "
+
+#: info/window.c:1026
+msgid "--*** Tags out of Date ***"
+msgstr "--*** Tags veraltet ***"
+
+#: info/window.c:1037
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), Zeilen ----, "
+
+#: info/window.c:1044
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d Zeilen --%s--"
+
+#: info/window.c:1048
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d Zeilen --%s--"
+
+#: info/window.c:1055
+#, c-format
+msgid " Subfile: %s"
+msgstr " Unterdatei: %s"
+
+#: install-info/install-info.c:221
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: Warnung: "
+
+#: install-info/install-info.c:270
+#, c-format
+msgid " for %s"
+msgstr " für %s"
+
+#: install-info/install-info.c:500
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr "\t„%s --help“ gibt weitere Informationen.\n"
+
+#: install-info/install-info.c:508
+#, c-format
+msgid "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+msgstr "Aufruf: %s [OPTION]... [INFO-DATEI [VERZEICHNIS-DATEI]]\n"
+
+#: install-info/install-info.c:510
+msgid "Add or remove entries in INFO-FILE from the Info directory DIR-FILE."
+msgstr ""
+"Einträge in INFO-DATEI hinzufügen oder entfernen (in Info-Verzeichnis "
+"VERZEICHNIS-DATEI)"
+
+#: install-info/install-info.c:513
+msgid ""
+"Options:\n"
+" --debug report what is being done.\n"
+" --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+" don't insert any new entries.\n"
+" --description=TEXT the description of the entry is TEXT; used with\n"
+" the --name option to become synonymous with the\n"
+" --entry option.\n"
+" --dir-file=NAME specify file name of Info directory file;\n"
+" equivalent to using the DIR-FILE argument.\n"
+" --dry-run same as --test."
+msgstr ""
+"Optionen:\n"
+" --debug alle Vorgänge protokollieren\n"
+" --delete vorhandene Einträge für INFO-DATEI aus VERZEICHNIS-DATEI\n"
+" löschen; keine neuen Einträge einfügen\n"
+" --description=TEXT die Beschreibung des Eintrags auf TEXT setzen; zusammen "
+"mit\n"
+" der Option --name benutzt, um synonym zu --entry zu "
+"werden\n"
+" --dir-file=NAME Namen der Info-Verzeichnis-Datei angeben. "
+"Gleichbedeutend\n"
+" mit dem VERZEICHNIS-DATEI-Argument\n"
+" --dry-run gleichbedeutend zu --test"
+
+#: install-info/install-info.c:525
+msgid ""
+" --entry=TEXT insert TEXT as an Info directory entry.\n"
+" TEXT is written as an Info menu item line followed\n"
+" by zero or more extra lines starting with "
+"whitespace.\n"
+" If you specify more than one entry, all are added.\n"
+" If you don't specify any entries, they are determined\n"
+" from information in the Info file itself.\n"
+" When removing, TEXT specifies the entry to remove.\n"
+" TEXT is only removed as a last resort, if the\n"
+" entry as determined from the Info file is not "
+"present,\n"
+" and the basename of the Info file isn't found either."
+msgstr ""
+" --entry=TEXT TEXT als einen Info-Verzeichnis-Eintrag einfügen.\n"
+" TEXT wird als Info-Menüeintragszeile gefolgt von null\n"
+" oder mehr zusätzlichen Zeilen, die mit Freiraum\n"
+" beginnen, geschrieben.\n"
+" Wenn mehr als ein Eintrag angegeben wird, werden alle\n"
+" hinzugefügt.\n"
+" Wenn gar kein Eintrag angegeben wird, wird der\n"
+" Eintragstext der Info-Datei selbst entnommen.\n"
+" Beim Entfernen gibt TEXT den zu entfernenden Eintrag "
+"an.\n"
+" TEXT wird nur als letzt Möglichkeit entfernt, wenn der\n"
+" Eintrag, wie er aus der Info-Datei ermittelt wurde,\n"
+" nicht existiert und der Basisname der Infodatei "
+"eben-\n"
+" falls nicht gefunden wird."
+
+#: install-info/install-info.c:537
+msgid ""
+" --help display this help and exit.\n"
+" --info-dir=DIR same as --dir-file=DIR/dir.\n"
+" --info-file=FILE specify Info file to install in the directory;\n"
+" equivalent to using the INFO-FILE argument.\n"
+" --item=TEXT same as --entry=TEXT.\n"
+" --keep-old do not replace entries, or remove empty sections.\n"
+" --menuentry=TEXT same as --name=TEXT.\n"
+" --name=TEXT the name of the entry is TEXT; used with --description\n"
+" to become synonymous with the --entry option.\n"
+" --no-indent do not format new entries in the DIR file.\n"
+" --quiet suppress warnings."
+msgstr ""
+" --help diese Hilfe zeigen und beenden\n"
+" --info-dir=VERZ wie --dir-file=VERZ/dir\n"
+" --info-file=DATEI Info-Datei angeben, die im Verzeichnis zu installieren "
+"ist.\n"
+" Gleichbedeutend mit dem INFO-DATEI-Argument\n"
+" --item=TEXT wie --entry TEXT\n"
+" --keep-old Einträge nicht ersetzen oder leere Abschnitte entfernen\n"
+" --menuentry=TEXT wie --name=TEXT\n"
+" --name=TEXT der Name des Eintrags ist TEXT; zusammen mit der Option\n"
+" --description benutzt, um synonym zu --entry zu werden\n"
+" --no-indent neue Einträge in der VERZEICHNIS-Datei nicht formatieren\n"
+" --quiet Warnungen unterdrücken"
+
+#: install-info/install-info.c:550
+msgid ""
+" --regex=R put this file's entries in all sections that match the\n"
+" regular expression R (ignoring case).\n"
+" --remove same as --delete.\n"
+" --remove-exactly only remove if the info file name matches exactly;\n"
+" suffixes such as .info and .gz are not ignored.\n"
+" --section=SEC put entries in section SEC of the directory.\n"
+" If you specify more than one section, all the entries\n"
+" are added in each of the sections.\n"
+" If you don't specify any sections, they are "
+"determined\n"
+" from information in the Info file itself.\n"
+" --section R SEC equivalent to --regex=R --section=SEC --add-once."
+msgstr ""
+" --regex=R die Einträge dieser Datei in allen Abschnitten "
+"hinzufügen,\n"
+" auf die R passt (ohne Groß-/Kleinschreibung zu "
+"beachten)\n"
+" --remove wie --delete\n"
+" --remove-exactly nur löschen, wenn der Name der Info-Datei genau "
+"übereinstimmt;\n"
+" Suffixe .info oder .gz werden nicht ignoriert\n"
+" --section=SEC die Einträge dieser Datei in den Abschnitt SEC des\n"
+" Verzeichnisses stellen. Wird mehr als ein Abschnitt\n"
+" angegeben, werden alle Einträge in jedem der\n"
+" Abschnitte hinzugefügt. Wird gar kein Abschnitt\n"
+" angegeben, wird der Eintragstext der Info-Datei selbst\n"
+" entnommen.\n"
+" --section R SEC äquivalent zu --regex=R --section=SEC --add-once"
+
+#: install-info/install-info.c:563
+msgid ""
+" --silent suppress warnings.\n"
+" --test suppress updating of DIR-FILE.\n"
+" --version display version information and exit."
+msgstr ""
+" --silent Warnungen unterdrücken\n"
+" --test die VERZEICHNIS-DATEI nicht ändern\n"
+" --version Programmversion anzeigen und beenden"
+
+#: install-info/install-info.c:570
+msgid ""
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"Fehlerberichte (auf Englisch, mit LC_ALL=C) per E-Mail an bug-texinfo@gnu."
+"org\n"
+"schicken, allgemeine Fragen und Gedankenaustausch an help-texinfo@gnu.org.\n"
+"Texinfos Homepage: http://www.gnu.org/software/texinfo/"
+
+#: install-info/install-info.c:597
+#, c-format
+msgid ""
+"This is the file .../info/dir, which contains the\n"
+"topmost node of the Info hierarchy, called (dir)Top.\n"
+"The first time you invoke Info you start off looking at this node.\n"
+"\n"
+"%s\tThis is the top of the INFO tree\n"
+"\n"
+" This (the Directory node) gives a menu of major topics.\n"
+" Typing \"q\" exits, \"?\" lists all Info commands, \"d\" returns here,\n"
+" \"h\" gives a primer for first-timers,\n"
+" \"mEmacs<Return>\" visits the Emacs manual, etc.\n"
+"\n"
+" In Emacs, you can click mouse button 2 on a menu item or cross reference\n"
+" to select it.\n"
+"\n"
+"%s\n"
+msgstr ""
+"Dies ist die Datei .../info/dir, die den obersten Knoten der\n"
+"Info-Hierarchie enthält, genannt (dir)Top.\n"
+"Beim ersten Aufruf von Info geht es bei diesem Knoten los.\n"
+"\n"
+"%s\tDies ist der Beginn des INFO-Baums\n"
+"\n"
+" Dieser Verzeichnis-Knoten zeigt ein Menü aller Hauptpunkte an.\n"
+" „q“ beendet Info, „?“ listet alle Info-Befehle auf, „d“ kehrt hierher\n"
+" zurück, „h“ gibt eine Einsteiger-Hilfe, „mEmacs<Return>“ besucht das\n"
+" Emacs-Manual, etc.\n"
+"\n"
+" Im Emacs kann man mit dem zweiten Mausknopf auf einen Menüeintrag oder\n"
+" einen Querverweis klicken, um einen solchen auswählen.\n"
+"\n"
+"%s\n"
+
+#: install-info/install-info.c:622
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr "%s: kann nicht gelesen (%s) und nicht angelegt werden (%s)\n"
+
+#: install-info/install-info.c:715
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: leere Datei"
+
+#: install-info/install-info.c:1046 install-info/install-info.c:1086
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "START-INFO-DIR-ENTRY ohne END-INFO-DIR-ENTRY"
+
+#: install-info/install-info.c:1081
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "END-INFO-DIR-ENTRY ohne START-INFO-DIR-ENTRY"
+
+#: install-info/install-info.c:1946 install-info/install-info.c:1956
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr "%s: Verzeichnisdatei schon vorhanden: %s\n"
+
+#: install-info/install-info.c:2036
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: Info-Datei nur einmal angeben.\n"
+
+#: install-info/install-info.c:2069
+#, c-format
+msgid "Extra regular expression specified, ignoring `%s'"
+msgstr "Zusätzlicher regulärer Ausdruch angegeben, ignoriere „%s“"
+
+#: install-info/install-info.c:2081
+#, c-format
+msgid "Error in regular expression `%s': %s"
+msgstr "Fehler in regulärem Ausdruck „%s“: %s"
+
+#: install-info/install-info.c:2139
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "überflüssiges Kommandozeilen-Argument „%s“ wird übergangen"
+
+#: install-info/install-info.c:2143
+msgid "No input file specified; try --help for more information."
+msgstr "Keine Eingabe-Datei angegeben; „--help“ gibt weitere Informationen."
+
+#: install-info/install-info.c:2146
+msgid "No dir file specified; try --help for more information."
+msgstr "Keine dir-Datei angegeben; „--help“ gibt weitere Informationen."
+
+#: install-info/install-info.c:2288
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "Kein Info-Verzeichnis-Eintrag in „%s“"
+
+#: install-info/install-info.c:2536
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "keine Einträge für „%s“ gefunden; nichts entfernt"
+
+#: lib/xexit.c:54
+msgid "ferror on stdout\n"
+msgstr "ferror auf stdout\n"
+
+#: lib/xexit.c:59
+msgid "fflush error on stdout\n"
+msgstr "fflush-Fehler auf stdout\n"
+
+#: makeinfo/cmds.c:582 makeinfo/cmds.c:604
+#, c-format
+msgid "arguments to @%s ignored"
+msgstr "Argumente zu @%s ignoriert"
+
+#: makeinfo/cmds.c:779
+msgid "January"
+msgstr "Januar"
+
+#: makeinfo/cmds.c:779
+msgid "February"
+msgstr "Februar"
+
+#: makeinfo/cmds.c:779
+msgid "March"
+msgstr "März"
+
+#: makeinfo/cmds.c:779
+msgid "April"
+msgstr "April"
+
+#: makeinfo/cmds.c:779
+msgid "May"
+msgstr "Mai"
+
+#: makeinfo/cmds.c:780
+msgid "June"
+msgstr "Juni"
+
+#: makeinfo/cmds.c:780
+msgid "July"
+msgstr "Juli"
+
+#: makeinfo/cmds.c:780
+msgid "August"
+msgstr "August"
+
+#: makeinfo/cmds.c:780
+msgid "September"
+msgstr "September"
+
+#: makeinfo/cmds.c:780
+msgid "October"
+msgstr "Oktober"
+
+#: makeinfo/cmds.c:781
+msgid "November"
+msgstr "November"
+
+#: makeinfo/cmds.c:781
+msgid "December"
+msgstr "Dezember"
+
+#: makeinfo/cmds.c:1131
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "wahrscheinlich falsches Zeichen „%c“ in @var"
+
+#: makeinfo/cmds.c:1174
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "Argument von @sc besteht nur aus Großbuchstaben, somit keine Wirkung"
+
+#: makeinfo/cmds.c:1229
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "„{“ erwartet, jedoch „%c“ bekommen"
+
+#: makeinfo/cmds.c:1269
+msgid "end of file inside verb block"
+msgstr "Dateiende innerhalb eines @verb-Blocks"
+
+#: makeinfo/cmds.c:1277
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "„}“ erwartet, jedoch „%c“ bekommen"
+
+#: makeinfo/cmds.c:1308
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+"@strong{Bemerkung...} erzeugt einen Pseudo-Querverweis in Info; "
+"umformulieren, um das zu vermeiden"
+
+#: makeinfo/cmds.c:1504
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s ist obsolet"
+
+#: makeinfo/cmds.c:1612
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "@sp erfordert ein positives numerisches Argument, nicht „%s“"
+
+#: makeinfo/cmds.c:2023 makeinfo/footnote.c:81
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "Fehlerhaftes Argument zu %c%s"
+
+#: makeinfo/cmds.c:2033 makeinfo/makeinfo.c:4317
+msgid "asis"
+msgstr "genau"
+
+#: makeinfo/cmds.c:2035 makeinfo/cmds.c:2065 makeinfo/makeinfo.c:4319
+msgid "none"
+msgstr "kein"
+
+#: makeinfo/cmds.c:2049
+#, c-format
+msgid "Bad argument to @%s"
+msgstr "Fehlerhafte Argumente zu @%s"
+
+#: makeinfo/cmds.c:2063
+msgid "insert"
+msgstr "Einfügen"
+
+#: makeinfo/cmds.c:2079
+#, c-format
+msgid "Bad argument to @%s: %s"
+msgstr "Fehlerhafte Argumente zu @%s: %s"
+
+#: makeinfo/cmds.c:2162
+#, c-format
+msgid "Expected @%s on or off, not `%s'"
+msgstr "Erwartete @%s on oder off, nicht „%s“"
+
+#: makeinfo/cmds.c:2182
+#, c-format
+msgid "Only @%s 10 or 11 is supported, not `%s'"
+msgstr "Nur @%s 10 oder 11 unterstützt, nicht „%s“"
+
+#: makeinfo/defun.c:83
+msgid "Missing `}' in @def arg"
+msgstr "Fehlende „}“ bei @def Argument"
+
+#: makeinfo/defun.c:711
+#, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr "Muss in einer „@%s“-Umgebung sein, um „@%s“ zu benutzen"
+
+#: makeinfo/files.c:434
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:637
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr "„%s“ weggelassen vor Ausgabedateiname"
+
+#: makeinfo/files.c:645
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr "„%s“ weggelassen, da in Standardausgabe geschrieben wird"
+
+#: makeinfo/files.c:693
+msgid "Output buffer not empty."
+msgstr "Ausgabepuffer nicht leer."
+
+#: makeinfo/float.c:181
+#, c-format
+msgid "Requested float type `%s' not previously used"
+msgstr "Angeforderter Fließumgebungstyp „%s“ vorher nicht benutzt"
+
+#: makeinfo/float.c:376 makeinfo/float.c:382 makeinfo/index.c:959
+#: makeinfo/index.c:965
+msgid "See "
+msgstr "Siehe "
+
+#: makeinfo/footnote.c:149
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "„%c%s“ benötigt ein Argument „{...}“, nicht nur „%s“"
+
+#: makeinfo/footnote.c:164
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "Keine schließende Klammer für Fußnote „%s“"
+
+#: makeinfo/footnote.c:197
+msgid "Footnote defined without parent node"
+msgstr "Fußnote außerhalb eines Elternknotens definiert"
+
+#: makeinfo/footnote.c:209
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "Fußnoten innerhalb von Fußnoten sind nicht erlaubt"
+
+# HTML
+#: makeinfo/footnote.c:301 makeinfo/index.c:187
+msgid "Footnotes"
+msgstr "Fu&szlig;noten"
+
+#: makeinfo/html.c:91
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr "%s: Konnte CSS-Datei nicht öffnen: %s"
+
+#: makeinfo/html.c:180
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr "%s:%d: CSS-Datei endete inmitten eines Kommentars"
+
+#: makeinfo/html.c:426
+msgid "[unexpected] no html tag to pop"
+msgstr "[unerwartet] kein HTML-Tag für Pop-Operation"
+
+#: makeinfo/html.c:800
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "[unerwartet] ungültiger Knotenname: „%s“"
+
+#: makeinfo/index.c:167
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "Unbekannter Index „%s“"
+
+#: makeinfo/index.c:232
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr "Info kann nicht mit „:“ im Indexeintrag „%s“ umgehen"
+
+#: makeinfo/index.c:410
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "Index „%s“ existiert bereits"
+
+#: makeinfo/index.c:453
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "Unbekannter Index „%s“ und/oder „%s“ in @synindex"
+
+#: makeinfo/index.c:676
+msgid "(line )"
+msgstr "(Zeile )"
+
+#: makeinfo/index.c:684
+#, c-format
+msgid "(line %*d)"
+msgstr "(Zeile %*d)"
+
+#: makeinfo/index.c:765
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "Unbekannter Index „%s“ in @printindex"
+
+#: makeinfo/index.c:834
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "Eintrag für Index „%s“ außerhalb jeglichen Knotens"
+
+#: makeinfo/index.c:837 makeinfo/index.c:873
+msgid "(outside of any node)"
+msgstr "(außerhalb jeglichen Knotens)"
+
+#: makeinfo/insertion.c:161
+msgid "@item not allowed in argument to @itemize"
+msgstr "@item nicht im Argument für @itemize erlaubt"
+
+# checkit
+# What does this mean? -ke-
+#: makeinfo/insertion.c:242
+msgid "Broken-Type in insertion_type_pname"
+msgstr "„Broken-Type“ bei „insertion_type_pname“"
+
+#: makeinfo/insertion.c:338
+msgid "Enumeration stack overflow"
+msgstr "Überlauf bei den Zahlen der Aufzählung"
+
+#: makeinfo/insertion.c:370
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "Überlauf bei den Buchstaben der Aufzählung. Beginne wieder bei %c"
+
+# %citem ist ein Texinfo-Befehl
+#: makeinfo/insertion.c:639
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s benötigt ein Argument: den Formatierer für %citem"
+
+# %cfloat ist ein Texinfo-Befehl
+#: makeinfo/insertion.c:727
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr "%cfloat-Umgebungen können nicht verschachtelt sein"
+
+#: makeinfo/insertion.c:981
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "„@end“ erwartete „%s“, bekam jedoch „%s“"
+
+#: makeinfo/insertion.c:1349
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "Kein übereinstimmendes „%cend %s“"
+
+#: makeinfo/insertion.c:1618
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s benötigt einen Buchstaben oder eine Zahl"
+
+#: makeinfo/insertion.c:1718
+msgid "end of file inside verbatim block"
+msgstr "Dateiende innerhalb eines „Verbatim“-Blocks"
+
+#: makeinfo/insertion.c:1942
+#, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "@%s nicht sinnvoll außerhalb einer „@float“-Umgebung"
+
+#: makeinfo/insertion.c:1978
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "@menu vor ersten @node gefunden. „Top“-Knoten wird angelegt"
+
+#: makeinfo/insertion.c:1979
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr ""
+"vielleicht sollte der @top-Knoten eher von @ifnottex als von @ifinfo "
+"umschlossen werden?"
+
+#: makeinfo/insertion.c:1991
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "@detailmenu vor ersten @node gefunden. „Top“-Knoten wird angelegt"
+
+#: makeinfo/insertion.c:2047
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr ""
+"@%s nicht sinnvoll außerhalb von „@titlepage“- und „@quotation“-Umgebungen"
+
+#: makeinfo/insertion.c:2061
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "@%s nicht sinnvoll außerhalb einer „@titlepage“-Umgebung"
+
+#: makeinfo/insertion.c:2092
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "Nicht übereinstimmendes „%c%s“"
+
+#: makeinfo/insertion.c:2097
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "„%c%s“ benötigt etwas nachfolgendes"
+
+#: makeinfo/insertion.c:2103
+#, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "Fehlerhaftes Argument „%s“ zu „@%s“, benutze „%s“"
+
+#: makeinfo/insertion.c:2200
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "@%s nicht sinnvoll innerhalb eines „@%s“-Blocks"
+
+#: makeinfo/insertion.c:2209
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "@itemx nicht sinnvoll innerhalb eines „%s“-Blocks"
+
+# checkit
+#: makeinfo/insertion.c:2383
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "%c%s außerhalb eines Einfügungsblocks gefunden"
+
+#: makeinfo/lang.c:1218
+#, c-format
+msgid "no default territory known for language `%s'"
+msgstr "kein voreingestelltes Gebiet für die Sprache „%s“ bekannt"
+
+#: makeinfo/lang.c:1281
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr "%s ist kein gültiges ISO-639-Sprachkürzel"
+
+#: makeinfo/lang.c:1399
+#, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "nicht erkannter Kodierungsname „%s“"
+
+#: makeinfo/lang.c:1407
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "Kodierung „%s“ wird leider nicht unterstützt."
+
+#: makeinfo/lang.c:1492
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "Ungültiges kodiertes Zeichen: „%s“"
+
+#: makeinfo/lang.c:1800
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr "%c%s erwartet „i“ oder „j“ als Argument, nicht „%c“"
+
+#: makeinfo/lang.c:1804
+#, c-format
+msgid "%c%s expects a single character `i' or `j' as argument"
+msgstr "%c%s erwartet einen einzelnen Buchstaben „i“ oder „j“ als Argument"
+
+#: makeinfo/macro.c:128
+#, c-format
+msgid "macro `%s' previously defined"
+msgstr "Makro „%s“ früher definiert"
+
+#: makeinfo/macro.c:132
+#, c-format
+msgid "here is the previous definition of `%s'"
+msgstr "hier ist die frühere Definition von „%s“"
+
+#: makeinfo/macro.c:359
+#, c-format
+msgid "\\ in macro expansion followed by `%s' instead of parameter name"
+msgstr ""
+"Dem \\ in der Makro-Erweiterung folgt „%s“ anstelle eines Parameternamens"
+
+#: makeinfo/macro.c:401
+#, c-format
+msgid "Macro `%s' called on line %d with too many args"
+msgstr "Makro „%s“ in Zeile %d mit zuvielen Argumenten aufgerufen"
+
+#: makeinfo/macro.c:580
+#, c-format
+msgid "%cend macro not found"
+msgstr "%cend Makro nicht gefunden"
+
+#: makeinfo/macro.c:591
+msgid "@allow-recursion is deprecated; please use @rmacro instead"
+msgstr "@allow-recursion ist veraltet; bitte stattdessen @rmacro benutzen"
+
+#: makeinfo/macro.c:606
+msgid "@quote-arg is deprecated; arguments are quoted by default"
+msgstr ""
+"@quote-arg ist veraltet; Argumente werden standardmäßig in Anführungszeichen "
+"eingeschlossen"
+
+#: makeinfo/macro.c:649
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "@end %s stimmt nicht mit @%s überein"
+
+#: makeinfo/makeinfo.c:188
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "Zu viele Fehler! Abbruch.\n"
+
+#: makeinfo/makeinfo.c:306
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: Warnung: "
+
+#: makeinfo/makeinfo.c:325 makeinfo/makeinfo.c:2340
+#, c-format
+msgid "Misplaced %c"
+msgstr "Fehlplazierte %c"
+
+#: makeinfo/makeinfo.c:344
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "„%s --help“ gibt weitere Informationen.\n"
+
+#: makeinfo/makeinfo.c:347
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "Aufruf: %s [OPTION]... TEXINFO-DATEI...\n"
+
+#: makeinfo/makeinfo.c:350
+msgid ""
+"Translate Texinfo source documentation to various other formats, by default\n"
+"Info files suitable for reading online with Emacs or standalone GNU Info.\n"
+msgstr ""
+"Ãœbersetzt Texinfo-Quelldatei-Dokumentation in verschiedene andere Formate,\n"
+"standardmäßig in Info-Dateien, die online mit einem Info-Leser wie\n"
+"GNU Info (oder auch Emacs, TkInfo, etc.) gelesen werden können.\n"
+
+#: makeinfo/makeinfo.c:354
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\n"
+" --document-language=STR locale to use in translating Texinfo keywords\n"
+" for the output document (default C).\n"
+" --force preserve output even if errors.\n"
+" --help display this help and exit.\n"
+" --no-validate suppress node cross-reference validation.\n"
+" --no-warn suppress warnings (but not errors).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"Allgemeine Optionen:\n"
+" --error-limit=ZAHL nach ZAHL Fehlern beenden (Standard %d)\n"
+" --document-language=SPR Locale für die Übersetzung von Texinfo-\n"
+" Schlüsselwörtern im Ausgabedokument "
+"(Standard: C)\n"
+" --force Ausgabedatei auch bei Fehlern nicht löschen\n"
+" --help diese Hilfe zeigen und beenden\n"
+" --no-validate Überprüfen der Knoten-Querverweise "
+"unterdrücken\n"
+" --no-warn Warnungen (aber keine Fehler) unterdrücken\n"
+" -v, --verbose ausführlich die Bearbeitungschritte anzeigen\n"
+" --version Programmversion anzeigen und beenden\n"
+
+#: makeinfo/makeinfo.c:369
+#, no-wrap
+msgid ""
+"Output format selection (default is to produce Info):\n"
+" --docbook output Docbook XML rather than Info.\n"
+" --html output HTML rather than Info.\n"
+" --xml output Texinfo XML rather than Info.\n"
+" --plaintext output plain text rather than Info.\n"
+msgstr ""
+"Optionen zur Wahl des Ausgabeformats (Voreinstellung ist Info):\n"
+" --docbook DocBook XML anstelle von Info ausgeben\n"
+" --html HTML anstelle von Info ausgeben\n"
+" --xml Texinfo XML anstelle von Info ausgeben\n"
+" --plaintext einfachen Text anstelle von Info ausgeben\n"
+
+#: makeinfo/makeinfo.c:377
+msgid ""
+"General output options:\n"
+" -E, --macro-expand=FILE output macro-expanded source to FILE,\n"
+" ignoring any @setfilename.\n"
+" --no-headers suppress node separators, Node: lines, and "
+"menus\n"
+" from Info output (thus producing plain "
+"text)\n"
+" or from HTML (thus producing shorter "
+"output);\n"
+" also, write to standard output by default.\n"
+" --no-split suppress the splitting of Info or HTML "
+"output,\n"
+" generate only one output file.\n"
+" --number-sections output chapter and sectioning numbers.\n"
+" -o, --output=FILE output to FILE (or directory if split HTML).\n"
+msgstr ""
+"Allgemeine Ausgabe-Optionen:\n"
+" -E, --macro-expand DATEI originalen Quelltext mit expandierten Makros in\n"
+" DATEI ausgeben, dabei @setfilename ignorieren\n"
+" --no-headers Knoten-Unterteiler, „Knoten:“-Kopfzeilen und "
+"Menüs\n"
+" unterdrücken in Info-Ausgabe (also reinen "
+"Text\n"
+" erstellen) oder HTML (also kürzere Ausgabe "
+"erzeugen);\n"
+" außerdem in die Standardausgabe schreiben\n"
+" --no-split Aufteilen langer Info- oder HTML-Dateien "
+"unterdrücken,\n"
+" nur eine Ausgabedatei erzeugen\n"
+" --number-sections Kapitel-, Abschnitt- und Anhangzählungen "
+"ausgeben\n"
+" -o, --output=DATEI Ausgabe in DATEI (Verzeichnis bei aufgeteiltem "
+"HTML)\n"
+
+#: makeinfo/makeinfo.c:391
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --disable-encoding do not output accented and special characters\n"
+" in Info output based on @documentencoding.\n"
+" --enable-encoding override --disable-encoding (default).\n"
+" --fill-column=NUM break Info lines at NUM characters (default %"
+"d).\n"
+" --footnote-style=STYLE output footnotes in Info according to STYLE:\n"
+" `separate' to put them in their own node;\n"
+" `end' to put them at the end of the node, "
+"in\n"
+" which they are defined (this is the "
+"default).\n"
+" --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %"
+"d).\n"
+" If VAL is `none', do not indent; if VAL is\n"
+" `asis', preserve existing indentation.\n"
+" --split-size=NUM split Info files at size NUM (default %d).\n"
+msgstr ""
+"Optionen für Info und Nur-Text:\n"
+" --disable-encoding keine akzentuierten und speziellen Zeichen in "
+"die\n"
+" Info-Ausgabe gemäß @documentencoding "
+"ausgeben\n"
+" --enable-encoding Wirkung von --disable-encoding aufheben "
+"(Standard)\n"
+" --fill-column=ZAHL Zeilen nach ZAHL Zeichen umbrechen (Standard %"
+"d)\n"
+" --footnote-style=STIL Fußnoten in Info gemäß STIL ausgeben:\n"
+" „separate“: Fußnoten in eigenen Knoten\n"
+" platzieren;\n"
+" „end“: Fußnoten an das Ende des Knotens "
+"setzen,\n"
+" in dem sie definiert sind (Standard)\n"
+" --paragraph-indent=WERT Info-Absätze mit WERT Leerzeichen einziehen\n"
+" (Standard %d);\n"
+" WERT ist „none“: nicht einziehen;\n"
+" WERT ist „asis“: existierende Einzüge "
+"behalten\n"
+" --split-size=GRÖSSE in GRÖSSE große Dateien splitten (Standard %"
+"d)\n"
+
+#: makeinfo/makeinfo.c:409
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+" --css-ref=URL generate reference to a CSS file.\n"
+" --internal-links=FILE produce list of internal links in FILE.\n"
+" --transliterate-file-names\n"
+" produce file names in ASCII transliteration.\n"
+msgstr ""
+"Optionen für HTML:\n"
+" --css-include=DATEI DATEI in HTML-<style>-Ausgabe einfügen;\n"
+" aus Standardeingabe, wenn DATEI „-“ ist\n"
+" --css-ref=URL Verweis auf eine CSS-Datei generieren\n"
+" --internal-links=DATEI Liste interner Verweise in DATEI erzeugen\n"
+" --transliterate-file-names\n"
+" Dateinamen in ASCII-Transliteration "
+"produzieren\n"
+
+#: makeinfo/makeinfo.c:419
+#, c-format
+msgid ""
+"Options for XML and Docbook:\n"
+" --output-indent=VAL indent XML elements by VAL spaces (default %"
+"d).\n"
+" If VAL is 0, ignorable whitespace is "
+"dropped.\n"
+msgstr ""
+"Optionen für XML und Docbook:\n"
+" --output-indent=WERT XML-Elemente mit WERT Leerzeichen einrücken\n"
+" (Voreinstellung: %d). Wenn WERT 0 ist, wird\n"
+" ignorierbarer Leerraum weggelassen.\n"
+
+#: makeinfo/makeinfo.c:426
+msgid ""
+"Input file options:\n"
+" --commands-in-node-names allow @ commands in node names.\n"
+" -D VAR define the variable VAR, as with @set.\n"
+" -I DIR append DIR to the @include search path.\n"
+" -P DIR prepend DIR to the @include search path.\n"
+" -U VAR undefine the variable VAR, as with @clear.\n"
+msgstr ""
+"Eingabedatei-Optionen:\n"
+" --commands-in-node-names @-Befehle in Knotennamen zulassen\n"
+" -D VAR eine Variable definieren (wie mit @set)\n"
+" -I VERZ VERZ an den Suchpfad für @include anhängen\n"
+" -P VERZ VERZ dem Suchpfad für @include voranstellen\n"
+" -U VAR eine Variable aufheben (wie mit @clear)\n"
+
+#: makeinfo/makeinfo.c:435
+msgid ""
+"Conditional processing in input:\n"
+" --ifdocbook process @ifdocbook and @docbook even if\n"
+" not generating Docbook.\n"
+" --ifhtml process @ifhtml and @html even if not generating HTML.\n"
+" --ifinfo process @ifinfo even if not generating Info.\n"
+" --ifplaintext process @ifplaintext even if not generating plain text.\n"
+" --iftex process @iftex and @tex; implies --no-split.\n"
+" --ifxml process @ifxml and @xml.\n"
+" --no-ifdocbook do not process @ifdocbook and @docbook text.\n"
+" --no-ifhtml do not process @ifhtml and @html text.\n"
+" --no-ifinfo do not process @ifinfo text.\n"
+" --no-ifplaintext do not process @ifplaintext text.\n"
+" --no-iftex do not process @iftex and @tex text.\n"
+" --no-ifxml do not process @ifxml and @xml text.\n"
+"\n"
+" Also, for the --no-ifFORMAT options, do process @ifnotFORMAT text.\n"
+msgstr ""
+"Bedingte Verarbeitung in Eingabe:\n"
+" --ifdocbook @ifdocbook und @docbook bearbeiten, selbst wenn kein "
+"Docbook\n"
+" erzeugt wird\n"
+" --ifhtml @ifhtml und @html bearbeiten, selbst wenn kein HTML\n"
+" erzeugt wird\n"
+" --ifinfo @ifinfo bearbeiten, selbst wenn kein Info erzeugt wird\n"
+" --ifplaintext @ifplaintext bearbeiten, selbst wenn kein Text erzeugt "
+"wird\n"
+" --iftex @iftex und @tex bearbeiten; impliziert --no-split\n"
+" --ifxml @ifxml und @xml bearbeiten\n"
+" --no-idocbook @ifdocbook- und @docbook-Text nicht bearbeiten\n"
+" --no-ifhtml @ifhtml- und @html-Text nicht bearbeiten\n"
+" --no-ifinfo @ifinfo-Text nicht bearbeiten\n"
+" --no-ifplaintext @ifplaintext-Text nicht bearbeiten\n"
+" --no-iftex @iftex- und @tex-Text nicht bearbeiten\n"
+" --no-ifxml @ifxml und @xml nicht bearbeiten\n"
+"\n"
+" Außerdem werden bei den --no-ifFORMAT-Optionen auch die entsprechenden\n"
+" @ifnoFORMAT-Abschnitte bearbeitet.\n"
+
+#: makeinfo/makeinfo.c:454
+msgid ""
+" The defaults for the @if... conditionals depend on the output format:\n"
+" if generating HTML, --ifhtml is on and the others are off;\n"
+" if generating Info, --ifinfo is on and the others are off;\n"
+" if generating plain text, --ifplaintext is on and the others are off;\n"
+" if generating XML, --ifxml is on and the others are off.\n"
+msgstr ""
+" Die Voreinstellungen für die @if...-Bedingungen hängen vom Ausgabeformat "
+"ab:\n"
+" wird HTML erzeugt, ist --ifhtml an und die anderen sind aus;\n"
+" wird Info erzeugt, ist --ifinfo an und die anderen sind aus;\n"
+" wird reiner Text erzeugt, ist --ifplaintext an und die anderen sind aus;\n"
+" wird XML erzeugt, ist --ifxml an und die anderen sind aus.\n"
+
+#: makeinfo/makeinfo.c:462
+msgid ""
+"Examples:\n"
+" makeinfo foo.texi write Info to foo's @setfilename\n"
+" makeinfo --html foo.texi write HTML to @setfilename\n"
+" makeinfo --xml foo.texi write Texinfo XML to @setfilename\n"
+" makeinfo --docbook foo.texi write DocBook XML to @setfilename\n"
+" makeinfo --no-headers foo.texi write plain text to standard "
+"output\n"
+"\n"
+" makeinfo --html --no-headers foo.texi write html without node lines, "
+"menus\n"
+" makeinfo --number-sections foo.texi write Info with numbered sections\n"
+" makeinfo --no-split foo.texi write one Info file however big\n"
+msgstr ""
+"Beispiele:\n"
+" makeinfo foo.texi Info gemäß @setfilename von foo "
+"schreiben\n"
+" makeinfo --html foo.texi HTML gemäß @setfilename schreiben\n"
+" makeinfo --xml foo.texi Texinfo XML gemäß @setfilename "
+"schreiben\n"
+" makeinfo --docbook foo.texi DocBook XML gemäß @setfilename "
+"schreiben\n"
+" makeinfo --no-headers foo.texi reinen Text in Standardausgabe "
+"schreiben\n"
+"\n"
+" makeinfo --html --no-headers foo.texi HTML ohne Menüs oder „Knoten“-"
+"Zeilen\n"
+" makeinfo --number-sections foo.texi Info mit nummerierten Abschnitten\n"
+" makeinfo --no-split foo.texi nur eine Info-Datei (kann groß "
+"sein)\n"
+
+#: makeinfo/makeinfo.c:622
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr "%s: Ignoriere nicht erkannten Wert „%s“ für TEXINFO_OUTPUT_FORMAT.\n"
+
+#: makeinfo/makeinfo.c:670 makeinfo/makeinfo.c:696 makeinfo/makeinfo.c:720
+#: makeinfo/makeinfo.c:780
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr "%s: %s Argument muss numerisch sein, nicht „%s“.\n"
+
+#: makeinfo/makeinfo.c:683
+#, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "%s: Makro-Expansions-Ausgabedatei „%s“ kann nicht geöffnet werden"
+
+#: makeinfo/makeinfo.c:688
+#, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "%s: ignoriere zweite Makro-Expansions-Ausgabedatei „%s“.\n"
+
+#: makeinfo/makeinfo.c:733
+#, c-format
+msgid "%s: could not open internal links output `%s'"
+msgstr "%s: konnte Ausagbedatei für interne Verweise „%s“ nicht öffnen"
+
+#: makeinfo/makeinfo.c:738
+#, c-format
+msgid "%s: ignoring second internal links output `%s'.\n"
+msgstr "%s: ignoriere zweite Ausgabedatei für interne Verweise „%s“.\n"
+
+#: makeinfo/makeinfo.c:751
+#, c-format
+msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
+msgstr ""
+"%s: Argument für --paragraph-indent muss numerisch, „none“ oder „asis“ sein, "
+"nicht „%s“.\n"
+
+#: makeinfo/makeinfo.c:769
+#, c-format
+msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
+msgstr ""
+"%s: Argument für --footnote-style muss „separate“ oder „end“ sein, nicht „%"
+"s“.\n"
+
+#: makeinfo/makeinfo.c:844
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: Datei-Angabe fehlt.\n"
+
+#: makeinfo/makeinfo.c:1041 makeinfo/makeinfo.c:4166
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr "Mehrzeilen-Befehl %c%s inkorrekt verwendet"
+
+#: makeinfo/makeinfo.c:1044
+#, c-format
+msgid "Expected `%s'"
+msgstr "Habe „%s“ erwartet"
+
+#: makeinfo/makeinfo.c:1521
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "Kann Verzeichnis „%s“ nicht anlegen: %s"
+
+#: makeinfo/makeinfo.c:1567
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "Kein „%s“ in „%s“ gefunden"
+
+#: makeinfo/makeinfo.c:1647
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr ""
+"%s: Keine Makro-Auflösung nach der Standard-Ausgabe, da auch die Info-"
+"Ausgabe dorthin geht.\n"
+
+#: makeinfo/makeinfo.c:1677
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "%s-Datei „%s“ von „%s“ wird erzeugt.\n"
+
+#: makeinfo/makeinfo.c:1744
+#, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: Entferne Makro-Ausgabedatei „%s“ wegen Fehler; --force benutzen, um "
+"Datei beizubehalten.\n"
+
+#: makeinfo/makeinfo.c:1799
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: Entferne Ausgabedatei „%s“ wegen Fehler; --force benutzen, um diese "
+"beizubehalten.\n"
+
+#: makeinfo/makeinfo.c:1818
+#, c-format
+msgid ""
+"%s: Removing internal links output file `%s' due to errors; use --force to "
+"preserve.\n"
+msgstr ""
+"%s: Entferne Ausgabedatei für interne Verweise „%s“ wegen Fehler; --force "
+"benutzen, um diese beizubehalten.\n"
+
+#: makeinfo/makeinfo.c:2113
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "Unbekannter Befehl „%s“"
+
+#: makeinfo/makeinfo.c:2135
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr ""
+"Geschweifte Klammern verwenden, um einen Befehl als Argument an „@%s“ zu "
+"geben"
+
+#: makeinfo/makeinfo.c:2394
+#, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s erwartete geschweifte Klammern"
+
+#: makeinfo/makeinfo.c:2407
+msgid "Unmatched }"
+msgstr "Nicht übereinstimmende }"
+
+#: makeinfo/makeinfo.c:2455
+msgid "NO_NAME!"
+msgstr "Kein_NAME!"
+
+#: makeinfo/makeinfo.c:2476
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s fehlende schließende Klammer"
+
+#: makeinfo/makeinfo.c:3482
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "@image-Datei „%s“ (für HTML) nicht lesbar: %s"
+
+#: makeinfo/makeinfo.c:3488
+#, c-format
+msgid "No such file `%s'"
+msgstr "Kein Datei namens „%s“"
+
+#: makeinfo/makeinfo.c:3624
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "@image-Datei „%s“ (für Text) nicht lesbar: %s"
+
+#: makeinfo/makeinfo.c:3633
+msgid "@image missing filename argument"
+msgstr "@image fehlt als Argument ein Dateiname"
+
+#: makeinfo/makeinfo.c:3851
+#, c-format
+msgid "undefined flag: %s"
+msgstr "undefiniertes Flag: %s"
+
+# checkit
+#: makeinfo/makeinfo.c:3852
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{Kein Wert für „%s“}"
+
+#: makeinfo/makeinfo.c:3904
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s erfordert einen Namen"
+
+#: makeinfo/makeinfo.c:4010
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "Dateiende vor erforderlichem „@end %s“ erreicht"
+
+#: makeinfo/makeinfo.c:4258
+#, c-format
+msgid "`%.40s...' is too long for expansion; not expanded"
+msgstr "„%.40s...“ ist zum Expandieren zu lang; nicht expandiert"
+
+#: makeinfo/multi.c:116
+msgid "Missing } in @multitable template"
+msgstr "Fehlende „}“ bei @multitable-Template"
+
+#: makeinfo/multi.c:260
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "nicht interpretierbarer Text „%s“ nach @multitable wird ignoriert"
+
+#: makeinfo/multi.c:400
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "Zu viele Spalten im „@multitable“-Eintrag (maximal %d)"
+
+#: makeinfo/multi.c:563
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "[unerwartet] Spalte %d kann in „multitable“ nicht ausgewählt werden"
+
+#: makeinfo/multi.c:592
+msgid "ignoring @tab outside of multitable"
+msgstr "@tab außerhalb einer „multitable“ wird ignoriert"
+
+# checkit
+#: makeinfo/multi.c:640
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** Mehrspalten-Ausgabe von der letzten Zeile:\n"
+
+#: makeinfo/multi.c:643
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* Spalte %d: Ausgabe = %s\n"
+
+#: makeinfo/node.c:279
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "Knoten „%s“ bereits in Zeile %d definiert"
+
+#: makeinfo/node.c:647
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "Knoten „%s“ wird formatiert...\n"
+
+#: makeinfo/node.c:714
+#, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr "Knoten „%s“ benötigt einen Abschnittsbefehl (z.B. %c%s)"
+
+#: makeinfo/node.c:878
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "Kein Knotenname für den Befehl „%c%s“ angegeben"
+
+#: makeinfo/node.c:919 makeinfo/node.c:1163
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr "Anker „%s“ und Knoten „%s“ zeigen auf gleichen Dateinamen."
+
+#: makeinfo/node.c:922
+msgid "This @anchor command ignored; references to it will not work"
+msgstr ""
+"Dieser @anchor-Befehl wird ignoriert, da Verweise auf ihn nicht funktionieren"
+
+#: makeinfo/node.c:924 makeinfo/node.c:1166
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr "Entweder diesen Anker umbenennen oder Option „--no-split“ verwenden"
+
+#: makeinfo/node.c:954
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr "Unerwartete Zeichenkette am Ende der gesplitteten HTML-Datei „%s“"
+
+#: makeinfo/node.c:1160
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr "Anker „%s“ und „%s“ zeigen auf gleichen Dateinamen."
+
+#: makeinfo/node.c:1165
+msgid "@anchor command ignored; references to it will not work"
+msgstr ""
+"@anchor-Befehl wird ignoriert, da Referenzen auf ihn nicht funktionieren"
+
+#: makeinfo/node.c:1362
+#, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr ""
+"%sverweis auf nicht existierenden Knoten „%s“ (vielleicht @section statt "
+"@subsection o.ä.?)"
+
+#: makeinfo/node.c:1462
+#, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr ""
+"Auf das Feld „nächstes“ (Next) des Knotens „%s“ wird nicht verwiesen "
+"(vielleicht @section statt @subsection o.ä.?)"
+
+#: makeinfo/node.c:1465
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr ""
+"Dieser Knoten (%s) hat den fehlerhaften Eintrag im Feld „voriges“ (Prev)"
+
+#: makeinfo/node.c:1520
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "Auf das Feld „voriges“ (Prev) des Knotens „%s“ wird nicht verwiesen"
+
+#: makeinfo/node.c:1524
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr ""
+"Dieser Knoten (%s) hat den fehlerhaften Eintrag im Feld „nächstes“ (Next)"
+
+#: makeinfo/node.c:1536
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr ""
+"„%s“ hat kein Feld „aufwärts“ (Up) (vielleicht @section statt @subsection o."
+"ä.?)"
+
+#: makeinfo/node.c:1605
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr ""
+"Dem Knoten „%s“ fehlt ein Menüeintrag für „%s“, obwohl er dessen Ziel für "
+"„aufwärts“ (Up) ist"
+
+#: makeinfo/node.c:1637
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "Nicht referenzierter Knoten „%s“"
+
+#: makeinfo/node.c:1727
+#, c-format
+msgid "Removing %s\n"
+msgstr "Entferne %s\n"
+
+#: makeinfo/node.c:1731
+#, c-format
+msgid "Can't remove file `%s': %s"
+msgstr "Kann Datei „%s“ nicht entfernen: %s"
+
+#: makeinfo/sectioning.c:122
+#, c-format
+msgid "Appendix %c"
+msgstr "Anhang %c"
+
+#: makeinfo/sectioning.c:467
+#, c-format
+msgid "Internal error (search_sectioning) `%s'!"
+msgstr "Interner Fehler (search_sectioning) „%s“!"
+
+#: makeinfo/sectioning.c:563
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "Interner Fehler (search_sectioning) „%s“!"
+
+#: makeinfo/sectioning.c:624
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "%c%s ist obsolet; %c%s stattdessen benutzen"
+
+#: makeinfo/sectioning.c:640
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "Knoten mit %ctop als Abschnitt existiert bereits"
+
+#: makeinfo/sectioning.c:648
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "Hier ist der %ctop-Knoten"
+
+#: makeinfo/sectioning.c:664
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "%ctop vor %cnode benutzt, Voreinstellung %s wird genommen"
+
+#: makeinfo/xml.c:1669
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "@image-Datei „%s“ nicht lesbar: %s"
+
+#: makeinfo/xml.c:2014
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+"@headitem als letztes Element von @multitable erzeugt ungültige Docbook-"
+"Dokumente"
+
+#: makeinfo/xml.c:2150
+msgid "of"
+msgstr "aus"
+
+#: makeinfo/xml.c:2155
+msgid "on"
+msgstr "ein"
+
+#: makeinfo/xref.c:127
+msgid "First argument to cross-reference may not be empty"
+msgstr "Erstes Argument für Querverweis darf nicht leer sein."
+
+#: makeinfo/xref.c:252
+#, c-format
+msgid "Empty file name for HTML cross reference in `%s'"
+msgstr "Leerer Dateiname für HTML-Querverweis in „%s“"
+
+#: makeinfo/xref.c:387
+msgid "End of file reached while looking for `.' or `,'"
+msgstr "Dateiende erreicht, während „.“ oder „,“ gesucht wurden"
+
+#: makeinfo/xref.c:390
+#, c-format
+msgid "`.' or `,' must follow @%s, not `%c'"
+msgstr "„.“ or „,“ muss @%s folgen, nicht „%c“"
+
+#: makeinfo/xref.c:392
+msgid "for cross-references in parentheses, use @pxref"
+msgstr "für Querverweise in Klammern @pxref benutzen"
+
+#: makeinfo/xref.c:435
+msgid "First argument to @inforef may not be empty"
+msgstr "Erstes Argument für @inforef darf nicht leer sein."
+
+#: util/texindex.c:223
+msgid "display this help and exit"
+msgstr "diese Hilfe anzeigen"
+
+#: util/texindex.c:225
+msgid "send output to FILE"
+msgstr "Ausgabe nach DATEI schicken"
+
+#: util/texindex.c:227
+msgid "display version information and exit"
+msgstr "Programmversion anzeigen"
+
+#: util/texindex.c:237
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "Aufruf: %s [OPTION]... DATEI...\n"
+
+#: util/texindex.c:238
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr "Erzeuge einen sortierten Index für jede TeX-Ausgabedatei.\n"
+
+#: util/texindex.c:241
+#, c-format
+msgid "Usually FILE... is specified as `foo.%c%c' for a document `foo.texi'.\n"
+msgstr "DATEI... ist normalerweise „foo.%c%c“ für ein Dokument „foo.texi“.\n"
+
+#: util/texindex.c:243
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Optionen:\n"
+
+#: util/texindex.c:743
+#, c-format
+msgid "failure reopening %s"
+msgstr "Fehler beim Wiederöffnen von „%s“"
+
+#: util/texindex.c:758 util/texindex.c:786
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: keine Texinfo-Indexdatei"
+
+#: util/texindex.c:993
+#, c-format
+msgid "No page number in %s"
+msgstr "Keine Seitenzahl in %s"
+
+#: util/texindex.c:1066
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr "Eintrag „%s“ direkt nach einem Untereintrag"
+
+#~ msgid "@quote-arg only useful for single-argument macros"
+#~ msgstr "@quote-Argument nur sinnvoll, wenn das Makro nur ein Argument hat"
+
+#~ msgid "Table of Contents"
+#~ msgstr "Inhaltsverzeichnis"
+
+#~ msgid "Short Contents"
+#~ msgstr "Inhalt in Kurzform"
+
+#~ msgid "keep temporary files around after processing"
+#~ msgstr "temporäre Dateien nach Programmende nicht entfernen"
+
+#~ msgid "do not keep temporary files around after processing (default)"
+#~ msgstr "temporäre Dateien nach Programmende entfernen (Standard)"
+
+#~ msgid "\"\" is invalid"
+#~ msgstr "„“ ist ungültig"
+
+#~ msgid "File exists, but is not a directory"
+#~ msgstr "Datei existiert, ist aber kein Verzeichnis"
+
+#~ msgid "Node:"
+#~ msgstr "Knoten:"
+
+#~ msgid "%s: TOC should be here, but it was not found"
+#~ msgstr "%s: Inhaltsverzeichnis sollte hier sein, jedoch nicht gefunden"
+
+#~ msgid "%s: Specify the Info directory only once.\n"
+#~ msgstr "%s: Info-Verzeichnis nur einmal angeben.\n"
+
+#~ msgid "No `%s.png' or `.jpg', and no extension supplied"
+#~ msgstr "Kein .png oder .jpg für „%s“ und keine Erweiterung angegeben."
+
+#~ msgid "`%s' has no Up field"
+#~ msgstr "„%s“ hat kein „Up“-Feld"
diff --git a/po/de_AT.gmo b/po/de_AT.gmo
new file mode 100644
index 0000000..5c3b02a
--- /dev/null
+++ b/po/de_AT.gmo
Binary files differ
diff --git a/po/de_AT.po b/po/de_AT.po
new file mode 100644
index 0000000..c182985
--- /dev/null
+++ b/po/de_AT.po
@@ -0,0 +1,2881 @@
+# German/autrian messages for GNU Texinfo
+# Copyright © 1999 Free Software Foundation, Inc.
+# Karl Eichwalder <ke@suse.de>, 1999.
+#
+# 1999-02-16 21:11:38 MET
+# Vorgeschlagen von Guido Flohr <gufl0000@stud.uni-sb.de>.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo 3.12d\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2008-09-18 20:38+0200\n"
+"PO-Revision-Date: 1999-02-16 21:14+01:00\n"
+"Last-Translator: Karl Eichwalder <ke@suse.de>\n"
+"Language-Team: German <de@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#: gnulib/lib/error.c:125
+msgid "Unknown system error"
+msgstr ""
+
+#: gnulib/lib/getopt.c:526 gnulib/lib/getopt.c:542
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr ""
+
+#: gnulib/lib/getopt.c:575 gnulib/lib/getopt.c:579
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr ""
+
+#: gnulib/lib/getopt.c:588 gnulib/lib/getopt.c:593
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr ""
+
+#: gnulib/lib/getopt.c:636 gnulib/lib/getopt.c:655 gnulib/lib/getopt.c:971
+#: gnulib/lib/getopt.c:990
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr ""
+
+#: gnulib/lib/getopt.c:693 gnulib/lib/getopt.c:696
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr ""
+
+#: gnulib/lib/getopt.c:704 gnulib/lib/getopt.c:707
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr ""
+
+#: gnulib/lib/getopt.c:759 gnulib/lib/getopt.c:762
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr ""
+
+#: gnulib/lib/getopt.c:768 gnulib/lib/getopt.c:771
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr ""
+
+#: gnulib/lib/getopt.c:823 gnulib/lib/getopt.c:839 gnulib/lib/getopt.c:1043
+#: gnulib/lib/getopt.c:1061
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr ""
+
+#: gnulib/lib/getopt.c:892 gnulib/lib/getopt.c:908
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr ""
+
+#: gnulib/lib/getopt.c:932 gnulib/lib/getopt.c:950
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr ""
+
+#: gnulib/lib/xalloc-die.c:34 gnulib/lib/xsetenv.c:37
+#, c-format
+msgid "memory exhausted"
+msgstr ""
+
+#: info/echo-area.c:283 info/session.c:966
+msgid "Move forward a character"
+msgstr ""
+
+#: info/echo-area.c:295 info/session.c:993
+msgid "Move backward a character"
+msgstr ""
+
+#: info/echo-area.c:307
+msgid "Move to the start of this line"
+msgstr ""
+
+#: info/echo-area.c:312
+msgid "Move to the end of this line"
+msgstr ""
+
+#: info/echo-area.c:320 info/session.c:1025
+msgid "Move forward a word"
+msgstr ""
+
+#: info/echo-area.c:360 info/session.c:1049
+msgid "Move backward a word"
+msgstr ""
+
+#: info/echo-area.c:400
+msgid "Delete the character under the cursor"
+msgstr ""
+
+#: info/echo-area.c:430
+msgid "Delete the character behind the cursor"
+msgstr ""
+
+#: info/echo-area.c:451
+msgid "Cancel or quit operation"
+msgstr ""
+
+#: info/echo-area.c:466
+msgid "Accept (or force completion of) this line"
+msgstr ""
+
+#: info/echo-area.c:471
+msgid "Insert next character verbatim"
+msgstr ""
+
+#: info/echo-area.c:479
+msgid "Insert this character"
+msgstr ""
+
+#: info/echo-area.c:498
+msgid "Insert a TAB character"
+msgstr ""
+
+#: info/echo-area.c:505
+msgid "Transpose characters at point"
+msgstr ""
+
+#: info/echo-area.c:556
+msgid "Yank back the contents of the last kill"
+msgstr ""
+
+#: info/echo-area.c:563
+msgid "Kill ring is empty"
+msgstr ""
+
+#: info/echo-area.c:576
+msgid "Yank back a previous kill"
+msgstr ""
+
+#: info/echo-area.c:609
+msgid "Kill to the end of the line"
+msgstr ""
+
+#: info/echo-area.c:622
+msgid "Kill to the beginning of the line"
+msgstr ""
+
+#: info/echo-area.c:634
+msgid "Kill the word following the cursor"
+msgstr ""
+
+#: info/echo-area.c:654
+msgid "Kill the word preceding the cursor"
+msgstr ""
+
+#: info/echo-area.c:870 info/echo-area.c:926
+msgid "No completions"
+msgstr ""
+
+#: info/echo-area.c:872
+msgid "Not complete"
+msgstr ""
+
+#: info/echo-area.c:913
+msgid "List possible completions"
+msgstr ""
+
+#: info/echo-area.c:930
+msgid "Sole completion"
+msgstr ""
+
+#: info/echo-area.c:939
+msgid "One completion:\n"
+msgstr ""
+
+#: info/echo-area.c:940
+#, c-format
+msgid "%d completions:\n"
+msgstr ""
+
+#: info/echo-area.c:1087
+msgid "Insert completion"
+msgstr ""
+
+#: info/echo-area.c:1222
+msgid "Building completions..."
+msgstr ""
+
+#: info/echo-area.c:1342
+msgid "Scroll the completions window"
+msgstr ""
+
+#: info/footnotes.c:212
+msgid "Footnotes could not be displayed"
+msgstr ""
+
+#: info/footnotes.c:238
+msgid "Show the footnotes associated with this node in another window"
+msgstr ""
+
+#: info/footnotes.h:26
+msgid "---------- Footnotes ----------"
+msgstr ""
+
+#: info/indices.c:171
+msgid "Look up a string in the index for this file"
+msgstr ""
+
+#: info/indices.c:198
+msgid "Finding index entries..."
+msgstr ""
+
+#: info/indices.c:206
+msgid "No indices found."
+msgstr ""
+
+#: info/indices.c:216
+msgid "Index entry: "
+msgstr ""
+
+#: info/indices.c:324
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr ""
+
+#: info/indices.c:334
+msgid "No previous index search string."
+msgstr ""
+
+#: info/indices.c:341
+msgid "No index entries."
+msgstr ""
+
+#: info/indices.c:374
+#, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr ""
+
+#: info/indices.c:375
+msgid "more "
+msgstr ""
+
+#: info/indices.c:385
+msgid "CAN'T SEE THIS"
+msgstr ""
+
+#: info/indices.c:421
+#, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr ""
+
+#: info/indices.c:549
+#, c-format
+msgid "Scanning indices of `%s'..."
+msgstr ""
+
+#: info/indices.c:604
+#, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr ""
+
+#: info/indices.c:630
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr ""
+
+#: info/indices.c:634
+msgid "Index apropos: "
+msgstr ""
+
+#: info/indices.c:662
+#, c-format
+msgid ""
+"\n"
+"* Menu: Nodes whose indices contain `%s':\n"
+msgstr ""
+
+#: info/info.c:275 info/infokey.c:899
+#, c-format
+msgid "Try --help for more information.\n"
+msgstr ""
+
+#: info/info.c:294 info/infokey.c:145 install-info/install-info.c:2101
+#: makeinfo/makeinfo.c:802 util/texindex.c:295
+#, c-format
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+
+#: info/info.c:506
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr ""
+
+#: info/info.c:600
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [MENU-ITEM...]\n"
+"\n"
+"Read documentation in Info format.\n"
+msgstr ""
+
+#: info/info.c:606
+msgid ""
+"Options:\n"
+" -k, --apropos=STRING look up STRING in all indices of all "
+"manuals.\n"
+" -d, --directory=DIR add DIR to INFOPATH.\n"
+" --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+" -f, --file=FILENAME specify Info file to visit."
+msgstr ""
+
+#: info/info.c:613
+msgid ""
+" -h, --help display this help and exit.\n"
+" --index-search=STRING go to node pointed by index entry STRING.\n"
+" -n, --node=NODENAME specify nodes in first visited Info file.\n"
+" -o, --output=FILENAME output selected nodes to FILENAME."
+msgstr ""
+
+#: info/info.c:619
+msgid ""
+" -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+" --no-raw-escapes output escapes as literal text.\n"
+" --restore=FILENAME read initial keystrokes from FILENAME.\n"
+" -O, --show-options, --usage go to command-line options node."
+msgstr ""
+
+#: info/info.c:626
+msgid " -b, --speech-friendly be friendly to speech synthesizers."
+msgstr ""
+
+#: info/info.c:630
+msgid ""
+" --subnodes recursively output menu items.\n"
+" --vi-keys use vi-like and less-like key bindings.\n"
+" --version display version information and exit.\n"
+" -w, --where, --location print physical location of Info file."
+msgstr ""
+
+#: info/info.c:636
+msgid ""
+"\n"
+"The first non-option argument, if present, is the menu entry to start from;\n"
+"it is searched for in all `dir' files along INFOPATH.\n"
+"If it is not present, info merges all `dir' files and shows the result.\n"
+"Any remaining arguments are treated as the names of menu\n"
+"items relative to the initial node visited."
+msgstr ""
+
+#: info/info.c:643
+msgid ""
+"\n"
+"For a summary of key bindings, type h within Info."
+msgstr ""
+
+#: info/info.c:646
+msgid ""
+"\n"
+"Examples:\n"
+" info show top-level dir menu\n"
+" info info show the general manual for Info readers\n"
+" info info-stnd show the manual specific to this Info program\n"
+" info emacs start at emacs node from top-level dir\n"
+" info emacs buffers start at buffers node within emacs manual\n"
+" info --show-options emacs start at node with emacs' command line options\n"
+" info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+" info -f ./foo.info show file ./foo.info, not searching dir"
+msgstr ""
+
+#: info/info.c:657 info/infokey.c:918 makeinfo/makeinfo.c:475
+#: util/texindex.c:259
+msgid ""
+"\n"
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+
+#: info/info.c:691
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr ""
+
+#: info/info.c:692
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr ""
+
+#: info/info.c:693
+msgid "Cannot find a window!"
+msgstr ""
+
+#: info/info.c:694
+msgid "Point doesn't appear within this window's node!"
+msgstr ""
+
+#: info/info.c:695
+msgid "Cannot delete the last window."
+msgstr ""
+
+#: info/info.c:696
+msgid "No menu in this node."
+msgstr ""
+
+#: info/info.c:697
+msgid "No footnotes in this node."
+msgstr ""
+
+#: info/info.c:698
+msgid "No cross references in this node."
+msgstr ""
+
+#: info/info.c:699
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr ""
+
+#: info/info.c:700
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr ""
+
+#: info/info.c:701
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr ""
+
+#: info/info.c:702
+msgid "You are already at the last page of this node."
+msgstr ""
+
+#: info/info.c:703
+msgid "You are already at the first page of this node."
+msgstr ""
+
+#: info/info.c:704
+msgid "Only one window."
+msgstr ""
+
+#: info/info.c:705
+msgid "Resulting window would be too small."
+msgstr ""
+
+#: info/info.c:706
+msgid "Not enough room for a help window, please delete a window."
+msgstr ""
+
+#: info/infodoc.c:45
+msgid "Basic Info command keys\n"
+msgstr ""
+
+#: info/infodoc.c:47
+msgid "\\%-10[quit-help] Close this help window.\n"
+msgstr ""
+
+#: info/infodoc.c:48
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr ""
+
+#: info/infodoc.c:49
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr ""
+
+#: info/infodoc.c:51
+msgid "\\%-10[prev-line] Move up one line.\n"
+msgstr ""
+
+#: info/infodoc.c:52
+msgid "\\%-10[next-line] Move down one line.\n"
+msgstr ""
+
+#: info/infodoc.c:53
+msgid "\\%-10[scroll-backward] Scroll backward one screenful.\n"
+msgstr ""
+
+#: info/infodoc.c:54
+msgid "\\%-10[scroll-forward] Scroll forward one screenful.\n"
+msgstr ""
+
+#: info/infodoc.c:55
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr ""
+
+#: info/infodoc.c:56
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr ""
+
+#: info/infodoc.c:58
+msgid "\\%-10[move-to-next-xref] Skip to the next hypertext link.\n"
+msgstr ""
+
+#: info/infodoc.c:59
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under the "
+"cursor.\n"
+msgstr ""
+
+#: info/infodoc.c:60
+msgid "\\%-10[history-node] Go back to the last node seen in this window.\n"
+msgstr ""
+
+#: info/infodoc.c:62
+msgid "\\%-10[global-prev-node] Go to the previous node in the document.\n"
+msgstr ""
+
+#: info/infodoc.c:63
+msgid "\\%-10[global-next-node] Go to the next node in the document.\n"
+msgstr ""
+
+#: info/infodoc.c:64
+msgid "\\%-10[prev-node] Go to the previous node on this level.\n"
+msgstr ""
+
+#: info/infodoc.c:65
+msgid "\\%-10[next-node] Go to the next node on this level.\n"
+msgstr ""
+
+#: info/infodoc.c:66
+msgid "\\%-10[up-node] Go up one level.\n"
+msgstr ""
+
+#: info/infodoc.c:67
+msgid "\\%-10[top-node] Go to the top node of this document.\n"
+msgstr ""
+
+#: info/infodoc.c:68
+msgid "\\%-10[dir-node] Go to the main `directory' node.\n"
+msgstr ""
+
+#: info/infodoc.c:70
+msgid "1...9 Pick the first...ninth item in this node's menu.\n"
+msgstr ""
+
+#: info/infodoc.c:71
+msgid "\\%-10[last-menu-item] Pick the last item in this node's menu.\n"
+msgstr ""
+
+#: info/infodoc.c:72
+msgid "\\%-10[menu-item] Pick a menu item specified by name.\n"
+msgstr ""
+
+#: info/infodoc.c:73
+msgid "\\%-10[xref-item] Follow a cross reference specified by name.\n"
+msgstr ""
+
+#: info/infodoc.c:74
+msgid "\\%-10[goto-node] Go to a node specified by name.\n"
+msgstr ""
+
+#: info/infodoc.c:76
+msgid "\\%-10[search] Search forward for a specified string.\n"
+msgstr ""
+
+#: info/infodoc.c:77
+msgid "\\%-10[search-previous] Search for previous occurrence.\n"
+msgstr ""
+
+#: info/infodoc.c:78
+msgid "\\%-10[search-next] Search for next occurrence.\n"
+msgstr ""
+
+#: info/infodoc.c:79
+msgid ""
+"\\%-10[index-search] Search for a specified string in the index, and\n"
+" select the node referenced by the first entry found.\n"
+msgstr ""
+
+#: info/infodoc.c:81
+msgid "\\%-10[abort-key] Cancel the current operation.\n"
+msgstr ""
+
+#: info/infodoc.c:89
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+
+#: info/infodoc.c:92
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr ""
+
+#: info/infodoc.c:93
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr ""
+
+#: info/infodoc.c:94
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr ""
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr ""
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr ""
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr ""
+
+#: info/infodoc.c:101
+#, c-format
+msgid ""
+" %-10s Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+
+#: info/infodoc.c:103
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr ""
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr ""
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr ""
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr ""
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr ""
+
+#: info/infodoc.c:108
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr ""
+
+#: info/infodoc.c:110
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr ""
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr ""
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr ""
+
+#: info/infodoc.c:115
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr ""
+
+#: info/infodoc.c:116
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr ""
+
+#: info/infodoc.c:117
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr ""
+
+#: info/infodoc.c:119
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+
+#: info/infodoc.c:121
+#, c-format
+msgid " %-10s Pick first...ninth item in node's menu.\n"
+msgstr ""
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr ""
+
+#: info/infodoc.c:125
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr ""
+
+#: info/infodoc.c:127
+#, c-format
+msgid ""
+" %-10s Move to node specified by name.\n"
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+
+#: info/infodoc.c:129
+#, c-format
+msgid ""
+" %-10s Search forward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+
+#: info/infodoc.c:131
+#, c-format
+msgid ""
+" %-10s Search backward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+
+#: info/infodoc.c:312
+msgid "The current search path is:\n"
+msgstr ""
+
+#: info/infodoc.c:316
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+
+#: info/infodoc.c:343
+#, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+
+#: info/infodoc.c:347
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+
+#: info/infodoc.c:477
+msgid "Display help message"
+msgstr ""
+
+#: info/infodoc.c:495
+msgid "Visit Info node `(info)Help'"
+msgstr ""
+
+#: info/infodoc.c:633
+msgid "Print documentation for KEY"
+msgstr ""
+
+#: info/infodoc.c:645
+#, c-format
+msgid "Describe key: %s"
+msgstr ""
+
+#: info/infodoc.c:656
+#, c-format
+msgid "ESC %s is undefined."
+msgstr ""
+
+#: info/infodoc.c:672 info/infodoc.c:701
+#, c-format
+msgid "%s is undefined."
+msgstr ""
+
+#: info/infodoc.c:722
+#, c-format
+msgid "%s is defined to %s."
+msgstr ""
+
+#: info/infodoc.c:1146
+msgid "Show what to type to execute a given command"
+msgstr ""
+
+#: info/infodoc.c:1150
+msgid "Where is command: "
+msgstr ""
+
+#: info/infodoc.c:1172
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr ""
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr ""
+
+#: info/infodoc.c:1183
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr ""
+
+#: info/infodoc.c:1188
+#, c-format
+msgid "There is no function named `%s'"
+msgstr ""
+
+#: info/infodoc.c:96
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+
+#: info/infokey.c:170
+msgid "incorrect number of arguments"
+msgstr ""
+
+#: info/infokey.c:201
+#, c-format
+msgid "cannot open input file `%s'"
+msgstr ""
+
+#: info/infokey.c:215
+#, c-format
+msgid "cannot create output file `%s'"
+msgstr ""
+
+#: info/infokey.c:226
+#, c-format
+msgid "error writing to `%s'"
+msgstr ""
+
+#: info/infokey.c:232
+#, c-format
+msgid "error closing output file `%s'"
+msgstr ""
+
+#: info/infokey.c:450
+msgid "key sequence too long"
+msgstr ""
+
+#: info/infokey.c:529
+msgid "missing key sequence"
+msgstr ""
+
+#: info/infokey.c:610
+msgid "NUL character (\\000) not permitted"
+msgstr ""
+
+#: info/infokey.c:641
+#, c-format
+msgid "NUL character (^%c) not permitted"
+msgstr ""
+
+#: info/infokey.c:665
+msgid "missing action name"
+msgstr ""
+
+#: info/infokey.c:681 info/infokey.c:756
+msgid "section too long"
+msgstr ""
+
+#: info/infokey.c:688
+#, c-format
+msgid "unknown action `%s'"
+msgstr ""
+
+#: info/infokey.c:698
+msgid "action name too long"
+msgstr ""
+
+#: info/infokey.c:712
+#, c-format
+msgid "extra characters following action `%s'"
+msgstr ""
+
+#: info/infokey.c:723
+msgid "missing variable name"
+msgstr ""
+
+#: info/infokey.c:733
+msgid "missing `=' immediately after variable name"
+msgstr ""
+
+#: info/infokey.c:741
+msgid "variable name too long"
+msgstr ""
+
+#: info/infokey.c:765
+msgid "value too long"
+msgstr ""
+
+#: info/infokey.c:890
+#, c-format
+msgid "\"%s\", line %u: "
+msgstr ""
+
+#: info/infokey.c:906
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [INPUT-FILE]\n"
+"\n"
+"Compile infokey source file to infokey file. Reads INPUT-FILE (default\n"
+"$HOME/.infokey) and writes compiled key file to (by default) $HOME/.info.\n"
+"\n"
+"Options:\n"
+" --output FILE output to FILE instead of $HOME/.info\n"
+" --help display this help and exit.\n"
+" --version display version information and exit.\n"
+msgstr ""
+
+#: info/infomap.c:955
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr ""
+
+#: info/infomap.c:958
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr ""
+
+#: info/infomap.c:971
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr ""
+
+#: info/infomap.c:990
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:999
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1015
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1036
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1171
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr ""
+
+#: info/infomap.c:1221
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr ""
+
+#: info/m-x.c:68
+msgid "Read the name of an Info command and describe it"
+msgstr ""
+
+#: info/m-x.c:72
+msgid "Describe command: "
+msgstr ""
+
+#: info/m-x.c:95
+msgid "Read a command name in the echo area and execute it"
+msgstr ""
+
+#: info/m-x.c:139
+msgid "Cannot execute an `echo-area' command here."
+msgstr ""
+
+#: info/m-x.c:153
+#, c-format
+msgid "Undefined command: %s"
+msgstr ""
+
+#: info/m-x.c:159
+msgid "Set the height of the displayed window"
+msgstr ""
+
+#: info/m-x.c:172
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr ""
+
+#: info/makedoc.c:166 info/makedoc.c:174
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+
+#: info/makedoc.c:556
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr ""
+
+#: info/nodemenu.c:30
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+
+#: info/nodemenu.c:201
+msgid ""
+"Here is the menu of nodes you have recently visited.\n"
+"Select one from this menu, or use `\\[history-node]' in another window.\n"
+msgstr ""
+
+#: info/nodemenu.c:223
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr ""
+
+#: info/nodemenu.c:303
+msgid "Select a node which has been previously visited in a visible window"
+msgstr ""
+
+#: info/nodemenu.c:316
+msgid "Select visited node: "
+msgstr ""
+
+#: info/nodemenu.c:336 info/session.c:2578
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr ""
+
+#: info/search.c:166
+#, c-format
+msgid "regexp error: %s"
+msgstr ""
+
+#: info/session.c:164
+#, c-format
+msgid ""
+"Welcome to Info version %s. Type \\[get-help-window] for help, \\[menu-item] "
+"for menu item."
+msgstr ""
+
+#: info/session.c:625
+msgid "Move down to the next line"
+msgstr ""
+
+#: info/session.c:661
+msgid "Move up to the previous line"
+msgstr ""
+
+#: info/session.c:931
+msgid "Move to the end of the line"
+msgstr ""
+
+#: info/session.c:942
+msgid "Move to the start of the line"
+msgstr ""
+
+#: info/session.c:1142
+msgid "Next"
+msgstr ""
+
+#: info/session.c:1158 info/session.c:1283
+msgid "No more nodes within this document."
+msgstr ""
+
+#: info/session.c:1309
+msgid "No `Prev' for this node."
+msgstr ""
+
+#: info/session.c:1329
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr ""
+
+#: info/session.c:1391
+msgid "Move forwards or down through node structure"
+msgstr ""
+
+#: info/session.c:1407
+msgid "Move backwards or up through node structure"
+msgstr ""
+
+#: info/session.c:1508
+msgid "Scroll forward in this window"
+msgstr ""
+
+#: info/session.c:1516
+msgid "Scroll forward in this window and set default window size"
+msgstr ""
+
+#: info/session.c:1524
+msgid "Scroll forward in this window staying within node"
+msgstr ""
+
+#: info/session.c:1532
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr ""
+
+#: info/session.c:1540
+msgid "Scroll backward in this window"
+msgstr ""
+
+#: info/session.c:1548
+msgid "Scroll backward in this window and set default window size"
+msgstr ""
+
+#: info/session.c:1557
+msgid "Scroll backward in this window staying within node"
+msgstr ""
+
+#: info/session.c:1565
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr ""
+
+#: info/session.c:1573
+msgid "Move to the start of this node"
+msgstr ""
+
+#: info/session.c:1580
+msgid "Move to the end of this node"
+msgstr ""
+
+#: info/session.c:1587
+msgid "Scroll down by lines"
+msgstr ""
+
+#: info/session.c:1604
+msgid "Scroll up by lines"
+msgstr ""
+
+#: info/session.c:1622
+msgid "Scroll down by half screen size"
+msgstr ""
+
+#: info/session.c:1648
+msgid "Scroll up by half screen size"
+msgstr ""
+
+#: info/session.c:1677
+msgid "Select the next window"
+msgstr ""
+
+#: info/session.c:1716
+msgid "Select the previous window"
+msgstr ""
+
+#: info/session.c:1767
+msgid "Split the current window"
+msgstr ""
+
+#: info/session.c:1848
+msgid "Delete the current window"
+msgstr ""
+
+#: info/session.c:1856
+msgid "Cannot delete a permanent window"
+msgstr ""
+
+#: info/session.c:1888
+msgid "Delete all other windows"
+msgstr ""
+
+#: info/session.c:1934
+msgid "Scroll the other window"
+msgstr ""
+
+#: info/session.c:1955
+msgid "Scroll the other window backward"
+msgstr ""
+
+#: info/session.c:1961
+msgid "Grow (or shrink) this window"
+msgstr ""
+
+#: info/session.c:1972
+msgid "Divide the available screen space among the visible windows"
+msgstr ""
+
+#: info/session.c:1979
+msgid "Toggle the state of line wrapping in the current window"
+msgstr ""
+
+#: info/session.c:1986
+msgid "Toggle the usage of regular expressions in searches"
+msgstr ""
+
+#: info/session.c:1990
+msgid "Using regular expressions for searches."
+msgstr ""
+
+#: info/session.c:1991
+msgid "Using literal strings for searches."
+msgstr ""
+
+#: info/session.c:2162
+msgid "Select the Next node"
+msgstr ""
+
+#: info/session.c:2170
+msgid "Select the Prev node"
+msgstr ""
+
+#: info/session.c:2178
+msgid "Select the Up node"
+msgstr ""
+
+#: info/session.c:2185
+msgid "Select the last node in this file"
+msgstr ""
+
+#: info/session.c:2212 info/session.c:2245
+msgid "This window has no additional nodes"
+msgstr ""
+
+#: info/session.c:2218
+msgid "Select the first node in this file"
+msgstr ""
+
+#: info/session.c:2252
+msgid "Select the last item in this node's menu"
+msgstr ""
+
+#: info/session.c:2258
+msgid "Select this menu item"
+msgstr ""
+
+#: info/session.c:2291
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr ""
+
+#: info/session.c:2485 info/session.c:2486
+#, c-format
+msgid "Menu item (%s): "
+msgstr ""
+
+#: info/session.c:2489
+msgid "Menu item: "
+msgstr ""
+
+#: info/session.c:2496 info/session.c:2497
+#, c-format
+msgid "Follow xref (%s): "
+msgstr ""
+
+#: info/session.c:2500
+msgid "Follow xref: "
+msgstr ""
+
+#: info/session.c:2629
+msgid "Read a menu item and select its node"
+msgstr ""
+
+#: info/session.c:2637
+msgid "Read a footnote or cross reference and select its node"
+msgstr ""
+
+#: info/session.c:2643
+msgid "Move to the start of this node's menu"
+msgstr ""
+
+#: info/session.c:2667
+msgid "Visit as many menu items at once as possible"
+msgstr ""
+
+#: info/session.c:2695
+msgid "Read a node name and select it"
+msgstr ""
+
+#: info/session.c:2750 info/session.c:2755
+msgid "Goto node: "
+msgstr ""
+
+#: info/session.c:2819
+#, c-format
+msgid "No menu in node `%s'."
+msgstr ""
+
+#: info/session.c:2865
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr ""
+
+#: info/session.c:2895
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr ""
+
+#: info/session.c:2945
+msgid "Read a list of menus starting from dir and follow them"
+msgstr ""
+
+#: info/session.c:2947
+msgid "Follow menus: "
+msgstr ""
+
+#: info/session.c:3140
+msgid "Find the node describing program invocation"
+msgstr ""
+
+#: info/session.c:3142
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr ""
+
+#: info/session.c:3180
+msgid "Read a manpage reference and select it"
+msgstr ""
+
+#: info/session.c:3184
+msgid "Get Manpage: "
+msgstr ""
+
+#: info/session.c:3214
+msgid "Select the node `Top' in this file"
+msgstr ""
+
+#: info/session.c:3220
+msgid "Select the node `(dir)'"
+msgstr ""
+
+#: info/session.c:3237 info/session.c:3239
+#, c-format
+msgid "Kill node (%s): "
+msgstr ""
+
+#: info/session.c:3291
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr ""
+
+#: info/session.c:3301
+msgid "Cannot kill the last node"
+msgstr ""
+
+#: info/session.c:3387
+msgid "Select the most recently selected node"
+msgstr ""
+
+#: info/session.c:3393
+msgid "Kill this node"
+msgstr ""
+
+#: info/session.c:3401
+msgid "Read the name of a file and select it"
+msgstr ""
+
+#: info/session.c:3405
+msgid "Find file: "
+msgstr ""
+
+#: info/session.c:3422
+#, c-format
+msgid "Cannot find `%s'."
+msgstr ""
+
+#: info/session.c:3465 info/session.c:3583
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr ""
+
+#: info/session.c:3479 info/session.c:3601 info/session.c:3661
+msgid "Done."
+msgstr ""
+
+#: info/session.c:3534
+#, c-format
+msgid "Writing node %s..."
+msgstr ""
+
+#: info/session.c:3610
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr ""
+
+#: info/session.c:3645
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr ""
+
+#: info/session.c:3651
+#, c-format
+msgid "Printing node %s..."
+msgstr ""
+
+#: info/session.c:3900
+msgid "Search continued from the end of the document."
+msgstr ""
+
+#: info/session.c:3905
+msgid "Search continued from the beginning of the document."
+msgstr ""
+
+#: info/session.c:3922
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr ""
+
+#: info/session.c:3979
+msgid "Read a string and search for it case-sensitively"
+msgstr ""
+
+#: info/session.c:3986
+msgid "Read a string and search for it"
+msgstr ""
+
+#: info/session.c:3994
+msgid "Read a string and search backward for it"
+msgstr ""
+
+#: info/session.c:4030 info/session.c:4036
+#, c-format
+msgid "%s%s%s [%s]: "
+msgstr ""
+
+#: info/session.c:4031 info/session.c:4037
+msgid "Regexp search"
+msgstr ""
+
+#: info/session.c:4032 info/session.c:4038
+msgid " case-sensitively"
+msgstr ""
+
+#: info/session.c:4033 info/session.c:4039
+msgid " backward"
+msgstr ""
+
+#: info/session.c:4037
+msgid "Search"
+msgstr ""
+
+#: info/session.c:4079
+msgid "Search failed."
+msgstr ""
+
+#: info/session.c:4097
+msgid "Repeat last search in the same direction"
+msgstr ""
+
+#: info/session.c:4100 info/session.c:4110
+msgid "No previous search string"
+msgstr ""
+
+#: info/session.c:4107
+msgid "Repeat last search in the reverse direction"
+msgstr ""
+
+#: info/session.c:4126 info/session.c:4132
+msgid "Search interactively for a string as you type it"
+msgstr ""
+
+#: info/session.c:4212
+msgid "Regexp I-search backward: "
+msgstr ""
+
+#: info/session.c:4213
+msgid "I-search backward: "
+msgstr ""
+
+#: info/session.c:4215
+msgid "Regexp I-search: "
+msgstr ""
+
+#: info/session.c:4216
+msgid "I-search: "
+msgstr ""
+
+#: info/session.c:4241 info/session.c:4243
+msgid "Failing "
+msgstr ""
+
+#: info/session.c:4734
+msgid "Move to the previous cross reference"
+msgstr ""
+
+#: info/session.c:4752
+msgid "Move to the next cross reference"
+msgstr ""
+
+#: info/session.c:4774
+msgid "Select reference or menu item appearing on this line"
+msgstr ""
+
+#: info/session.c:4797
+msgid "Cancel current operation"
+msgstr ""
+
+#: info/session.c:4804
+msgid "Quit"
+msgstr ""
+
+#: info/session.c:4813
+msgid "Move the cursor to a specific line of the window"
+msgstr ""
+
+#: info/session.c:4845
+msgid "Redraw the display"
+msgstr ""
+
+#: info/session.c:4882
+msgid "Quit using Info"
+msgstr ""
+
+#: info/session.c:4895
+msgid "Run command bound to this key's lowercase variant"
+msgstr ""
+
+#: info/session.c:4906
+#, c-format
+msgid "Unknown command (%s)."
+msgstr ""
+
+#: info/session.c:4909
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr ""
+
+#: info/session.c:4910
+#, c-format
+msgid "`%s' is invalid"
+msgstr ""
+
+#: info/session.c:5125
+msgid "Add this digit to the current numeric argument"
+msgstr ""
+
+#: info/session.c:5134
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr ""
+
+#: info/session.c:5149
+msgid "Internally used by \\[universal-argument]"
+msgstr ""
+
+#: info/tilde.c:336
+#, c-format
+msgid "readline: Out of virtual memory!\n"
+msgstr ""
+
+#: info/variables.c:37
+msgid "When \"On\", footnotes appear and disappear automatically"
+msgstr ""
+
+#: info/variables.c:41
+msgid "When \"On\", creating or deleting a window resizes other windows"
+msgstr ""
+
+#: info/variables.c:45
+msgid "When \"On\", flash the screen instead of ringing the bell"
+msgstr ""
+
+#: info/variables.c:49
+msgid "When \"On\", errors cause the bell to ring"
+msgstr ""
+
+#: info/variables.c:53
+msgid "When \"On\", Info garbage collects files which had to be uncompressed"
+msgstr ""
+
+#: info/variables.c:56
+msgid "When \"On\", the portion of the matched search string is highlighted"
+msgstr ""
+
+#: info/variables.c:60
+msgid "Controls what happens when scrolling is requested at the end of a node"
+msgstr ""
+
+#: info/variables.c:65
+msgid "Same as scroll-behaviour"
+msgstr ""
+
+#: info/variables.c:69
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr ""
+
+#: info/variables.c:73
+msgid "Controls whether scroll-behavior affects cursor movement commands"
+msgstr ""
+
+#: info/variables.c:77
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr ""
+
+#: info/variables.c:81
+msgid ""
+"What to do when a scrolling command is issued at the end of the last node"
+msgstr ""
+
+#: info/variables.c:88
+msgid "Explain the use of a variable"
+msgstr ""
+
+#: info/variables.c:94
+msgid "Describe variable: "
+msgstr ""
+
+#: info/variables.c:113
+msgid "Set the value of an Info variable"
+msgstr ""
+
+#: info/variables.c:119
+msgid "Set variable: "
+msgstr ""
+
+#: info/variables.c:137
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr ""
+
+#: info/variables.c:178
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr ""
+
+#: info/window.c:1026
+msgid "--*** Tags out of Date ***"
+msgstr ""
+
+#: info/window.c:1037
+msgid "-----Info: (), lines ----, "
+msgstr ""
+
+#: info/window.c:1044
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr ""
+
+#: info/window.c:1048
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr ""
+
+#: info/window.c:1055
+#, c-format
+msgid " Subfile: %s"
+msgstr ""
+
+#: install-info/install-info.c:221
+#, c-format
+msgid "%s: warning: "
+msgstr ""
+
+#: install-info/install-info.c:270
+#, c-format
+msgid " for %s"
+msgstr ""
+
+#: install-info/install-info.c:500
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr ""
+
+#: install-info/install-info.c:508
+#, c-format
+msgid "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+msgstr ""
+
+#: install-info/install-info.c:510
+msgid "Add or remove entries in INFO-FILE from the Info directory DIR-FILE."
+msgstr ""
+
+#: install-info/install-info.c:513
+msgid ""
+"Options:\n"
+" --debug report what is being done.\n"
+" --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+" don't insert any new entries.\n"
+" --description=TEXT the description of the entry is TEXT; used with\n"
+" the --name option to become synonymous with the\n"
+" --entry option.\n"
+" --dir-file=NAME specify file name of Info directory file;\n"
+" equivalent to using the DIR-FILE argument.\n"
+" --dry-run same as --test."
+msgstr ""
+
+#: install-info/install-info.c:525
+msgid ""
+" --entry=TEXT insert TEXT as an Info directory entry.\n"
+" TEXT is written as an Info menu item line followed\n"
+" by zero or more extra lines starting with "
+"whitespace.\n"
+" If you specify more than one entry, all are added.\n"
+" If you don't specify any entries, they are determined\n"
+" from information in the Info file itself.\n"
+" When removing, TEXT specifies the entry to remove.\n"
+" TEXT is only removed as a last resort, if the\n"
+" entry as determined from the Info file is not "
+"present,\n"
+" and the basename of the Info file isn't found either."
+msgstr ""
+
+#: install-info/install-info.c:537
+msgid ""
+" --help display this help and exit.\n"
+" --info-dir=DIR same as --dir-file=DIR/dir.\n"
+" --info-file=FILE specify Info file to install in the directory;\n"
+" equivalent to using the INFO-FILE argument.\n"
+" --item=TEXT same as --entry=TEXT.\n"
+" --keep-old do not replace entries, or remove empty sections.\n"
+" --menuentry=TEXT same as --name=TEXT.\n"
+" --name=TEXT the name of the entry is TEXT; used with --description\n"
+" to become synonymous with the --entry option.\n"
+" --no-indent do not format new entries in the DIR file.\n"
+" --quiet suppress warnings."
+msgstr ""
+
+#: install-info/install-info.c:550
+msgid ""
+" --regex=R put this file's entries in all sections that match the\n"
+" regular expression R (ignoring case).\n"
+" --remove same as --delete.\n"
+" --remove-exactly only remove if the info file name matches exactly;\n"
+" suffixes such as .info and .gz are not ignored.\n"
+" --section=SEC put entries in section SEC of the directory.\n"
+" If you specify more than one section, all the entries\n"
+" are added in each of the sections.\n"
+" If you don't specify any sections, they are "
+"determined\n"
+" from information in the Info file itself.\n"
+" --section R SEC equivalent to --regex=R --section=SEC --add-once."
+msgstr ""
+
+#: install-info/install-info.c:563
+msgid ""
+" --silent suppress warnings.\n"
+" --test suppress updating of DIR-FILE.\n"
+" --version display version information and exit."
+msgstr ""
+
+#: install-info/install-info.c:570
+msgid ""
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+
+#: install-info/install-info.c:597
+#, c-format
+msgid ""
+"This is the file .../info/dir, which contains the\n"
+"topmost node of the Info hierarchy, called (dir)Top.\n"
+"The first time you invoke Info you start off looking at this node.\n"
+"\n"
+"%s\tThis is the top of the INFO tree\n"
+"\n"
+" This (the Directory node) gives a menu of major topics.\n"
+" Typing \"q\" exits, \"?\" lists all Info commands, \"d\" returns here,\n"
+" \"h\" gives a primer for first-timers,\n"
+" \"mEmacs<Return>\" visits the Emacs manual, etc.\n"
+"\n"
+" In Emacs, you can click mouse button 2 on a menu item or cross reference\n"
+" to select it.\n"
+"\n"
+"%s\n"
+msgstr ""
+
+#: install-info/install-info.c:622
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr ""
+
+#: install-info/install-info.c:715
+#, c-format
+msgid "%s: empty file"
+msgstr ""
+
+#: install-info/install-info.c:1046 install-info/install-info.c:1086
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr ""
+
+#: install-info/install-info.c:1081
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr ""
+
+#: install-info/install-info.c:1946 install-info/install-info.c:1956
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr ""
+
+#: install-info/install-info.c:2036
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr ""
+
+#: install-info/install-info.c:2069
+#, c-format
+msgid "Extra regular expression specified, ignoring `%s'"
+msgstr ""
+
+#: install-info/install-info.c:2081
+#, c-format
+msgid "Error in regular expression `%s': %s"
+msgstr ""
+
+#: install-info/install-info.c:2139
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr ""
+
+#: install-info/install-info.c:2143
+msgid "No input file specified; try --help for more information."
+msgstr ""
+
+#: install-info/install-info.c:2146
+msgid "No dir file specified; try --help for more information."
+msgstr ""
+
+#: install-info/install-info.c:2288
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr ""
+
+#: install-info/install-info.c:2536
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr ""
+
+#: lib/xexit.c:54
+msgid "ferror on stdout\n"
+msgstr ""
+
+#: lib/xexit.c:59
+msgid "fflush error on stdout\n"
+msgstr ""
+
+#: makeinfo/cmds.c:582 makeinfo/cmds.c:604
+#, c-format
+msgid "arguments to @%s ignored"
+msgstr ""
+
+#: makeinfo/cmds.c:779
+msgid "January"
+msgstr "Jänner"
+
+#: makeinfo/cmds.c:779
+msgid "February"
+msgstr ""
+
+#: makeinfo/cmds.c:779
+msgid "March"
+msgstr ""
+
+#: makeinfo/cmds.c:779
+msgid "April"
+msgstr ""
+
+#: makeinfo/cmds.c:779
+msgid "May"
+msgstr ""
+
+#: makeinfo/cmds.c:780
+msgid "June"
+msgstr ""
+
+#: makeinfo/cmds.c:780
+msgid "July"
+msgstr ""
+
+#: makeinfo/cmds.c:780
+msgid "August"
+msgstr ""
+
+#: makeinfo/cmds.c:780
+msgid "September"
+msgstr ""
+
+#: makeinfo/cmds.c:780
+msgid "October"
+msgstr ""
+
+#: makeinfo/cmds.c:781
+msgid "November"
+msgstr ""
+
+#: makeinfo/cmds.c:781
+msgid "December"
+msgstr ""
+
+#: makeinfo/cmds.c:1131
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr ""
+
+#: makeinfo/cmds.c:1174
+msgid "@sc argument all uppercase, thus no effect"
+msgstr ""
+
+#: makeinfo/cmds.c:1229
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr ""
+
+#: makeinfo/cmds.c:1269
+msgid "end of file inside verb block"
+msgstr ""
+
+#: makeinfo/cmds.c:1277
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr ""
+
+#: makeinfo/cmds.c:1308
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+
+#: makeinfo/cmds.c:1504
+#, c-format
+msgid "%c%s is obsolete"
+msgstr ""
+
+#: makeinfo/cmds.c:1612
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr ""
+
+#: makeinfo/cmds.c:2023 makeinfo/footnote.c:81
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr ""
+
+#: makeinfo/cmds.c:2033 makeinfo/makeinfo.c:4317
+msgid "asis"
+msgstr ""
+
+#: makeinfo/cmds.c:2035 makeinfo/cmds.c:2065 makeinfo/makeinfo.c:4319
+msgid "none"
+msgstr ""
+
+#: makeinfo/cmds.c:2049
+#, c-format
+msgid "Bad argument to @%s"
+msgstr ""
+
+#: makeinfo/cmds.c:2063
+msgid "insert"
+msgstr ""
+
+#: makeinfo/cmds.c:2079
+#, c-format
+msgid "Bad argument to @%s: %s"
+msgstr ""
+
+#: makeinfo/cmds.c:2162
+#, c-format
+msgid "Expected @%s on or off, not `%s'"
+msgstr ""
+
+#: makeinfo/cmds.c:2182
+#, c-format
+msgid "Only @%s 10 or 11 is supported, not `%s'"
+msgstr ""
+
+#: makeinfo/defun.c:83
+msgid "Missing `}' in @def arg"
+msgstr ""
+
+#: makeinfo/defun.c:711
+#, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr ""
+
+#: makeinfo/files.c:434
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr ""
+
+#: makeinfo/files.c:637
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr ""
+
+#: makeinfo/files.c:645
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr ""
+
+#: makeinfo/files.c:693
+msgid "Output buffer not empty."
+msgstr ""
+
+#: makeinfo/float.c:181
+#, c-format
+msgid "Requested float type `%s' not previously used"
+msgstr ""
+
+#: makeinfo/float.c:376 makeinfo/float.c:382 makeinfo/index.c:959
+#: makeinfo/index.c:965
+msgid "See "
+msgstr ""
+
+#: makeinfo/footnote.c:149
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr ""
+
+#: makeinfo/footnote.c:164
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr ""
+
+#: makeinfo/footnote.c:197
+msgid "Footnote defined without parent node"
+msgstr ""
+
+#: makeinfo/footnote.c:209
+msgid "Footnotes inside footnotes are not allowed"
+msgstr ""
+
+#: makeinfo/footnote.c:301 makeinfo/index.c:187
+msgid "Footnotes"
+msgstr ""
+
+#: makeinfo/html.c:91
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr ""
+
+#: makeinfo/html.c:180
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr ""
+
+#: makeinfo/html.c:426
+msgid "[unexpected] no html tag to pop"
+msgstr ""
+
+#: makeinfo/html.c:800
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr ""
+
+#: makeinfo/index.c:167
+#, c-format
+msgid "Unknown index `%s'"
+msgstr ""
+
+#: makeinfo/index.c:232
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr ""
+
+#: makeinfo/index.c:410
+#, c-format
+msgid "Index `%s' already exists"
+msgstr ""
+
+#: makeinfo/index.c:453
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr ""
+
+#: makeinfo/index.c:676
+msgid "(line )"
+msgstr ""
+
+#: makeinfo/index.c:684
+#, c-format
+msgid "(line %*d)"
+msgstr ""
+
+#: makeinfo/index.c:765
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr ""
+
+#: makeinfo/index.c:834
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr ""
+
+#: makeinfo/index.c:837 makeinfo/index.c:873
+msgid "(outside of any node)"
+msgstr ""
+
+#: makeinfo/insertion.c:161
+msgid "@item not allowed in argument to @itemize"
+msgstr ""
+
+#: makeinfo/insertion.c:242
+msgid "Broken-Type in insertion_type_pname"
+msgstr ""
+
+#: makeinfo/insertion.c:338
+msgid "Enumeration stack overflow"
+msgstr ""
+
+#: makeinfo/insertion.c:370
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr ""
+
+#: makeinfo/insertion.c:639
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr ""
+
+#: makeinfo/insertion.c:727
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr ""
+
+#: makeinfo/insertion.c:981
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr ""
+
+#: makeinfo/insertion.c:1349
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr ""
+
+#: makeinfo/insertion.c:1618
+#, c-format
+msgid "%s requires letter or digit"
+msgstr ""
+
+#: makeinfo/insertion.c:1718
+msgid "end of file inside verbatim block"
+msgstr ""
+
+#: makeinfo/insertion.c:1942
+#, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr ""
+
+#: makeinfo/insertion.c:1978
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr ""
+
+#: makeinfo/insertion.c:1979
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr ""
+
+#: makeinfo/insertion.c:1991
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr ""
+
+#: makeinfo/insertion.c:2047
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr ""
+
+#: makeinfo/insertion.c:2061
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr ""
+
+#: makeinfo/insertion.c:2092
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr ""
+
+#: makeinfo/insertion.c:2097
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr ""
+
+#: makeinfo/insertion.c:2103
+#, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr ""
+
+#: makeinfo/insertion.c:2200
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr ""
+
+#: makeinfo/insertion.c:2209
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr ""
+
+#: makeinfo/insertion.c:2383
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr ""
+
+#: makeinfo/lang.c:1218
+#, c-format
+msgid "no default territory known for language `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:1281
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr ""
+
+#: makeinfo/lang.c:1399
+#, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:1407
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr ""
+
+#: makeinfo/lang.c:1492
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:1800
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr ""
+
+#: makeinfo/lang.c:1804
+#, c-format
+msgid "%c%s expects a single character `i' or `j' as argument"
+msgstr ""
+
+#: makeinfo/macro.c:128
+#, c-format
+msgid "macro `%s' previously defined"
+msgstr ""
+
+#: makeinfo/macro.c:132
+#, c-format
+msgid "here is the previous definition of `%s'"
+msgstr ""
+
+#: makeinfo/macro.c:359
+#, c-format
+msgid "\\ in macro expansion followed by `%s' instead of parameter name"
+msgstr ""
+
+#: makeinfo/macro.c:401
+#, c-format
+msgid "Macro `%s' called on line %d with too many args"
+msgstr ""
+
+#: makeinfo/macro.c:580
+#, c-format
+msgid "%cend macro not found"
+msgstr ""
+
+#: makeinfo/macro.c:591
+msgid "@allow-recursion is deprecated; please use @rmacro instead"
+msgstr ""
+
+#: makeinfo/macro.c:606
+msgid "@quote-arg is deprecated; arguments are quoted by default"
+msgstr ""
+
+#: makeinfo/macro.c:649
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:188
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:306
+#, c-format
+msgid "%s:%d: warning: "
+msgstr ""
+
+#: makeinfo/makeinfo.c:325 makeinfo/makeinfo.c:2340
+#, c-format
+msgid "Misplaced %c"
+msgstr ""
+
+#: makeinfo/makeinfo.c:344
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:347
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:350
+msgid ""
+"Translate Texinfo source documentation to various other formats, by default\n"
+"Info files suitable for reading online with Emacs or standalone GNU Info.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:354
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\n"
+" --document-language=STR locale to use in translating Texinfo keywords\n"
+" for the output document (default C).\n"
+" --force preserve output even if errors.\n"
+" --help display this help and exit.\n"
+" --no-validate suppress node cross-reference validation.\n"
+" --no-warn suppress warnings (but not errors).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:369
+#, no-wrap
+msgid ""
+"Output format selection (default is to produce Info):\n"
+" --docbook output Docbook XML rather than Info.\n"
+" --html output HTML rather than Info.\n"
+" --xml output Texinfo XML rather than Info.\n"
+" --plaintext output plain text rather than Info.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:377
+msgid ""
+"General output options:\n"
+" -E, --macro-expand=FILE output macro-expanded source to FILE,\n"
+" ignoring any @setfilename.\n"
+" --no-headers suppress node separators, Node: lines, and "
+"menus\n"
+" from Info output (thus producing plain "
+"text)\n"
+" or from HTML (thus producing shorter "
+"output);\n"
+" also, write to standard output by default.\n"
+" --no-split suppress the splitting of Info or HTML "
+"output,\n"
+" generate only one output file.\n"
+" --number-sections output chapter and sectioning numbers.\n"
+" -o, --output=FILE output to FILE (or directory if split HTML).\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:391
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --disable-encoding do not output accented and special characters\n"
+" in Info output based on @documentencoding.\n"
+" --enable-encoding override --disable-encoding (default).\n"
+" --fill-column=NUM break Info lines at NUM characters (default %"
+"d).\n"
+" --footnote-style=STYLE output footnotes in Info according to STYLE:\n"
+" `separate' to put them in their own node;\n"
+" `end' to put them at the end of the node, "
+"in\n"
+" which they are defined (this is the "
+"default).\n"
+" --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %"
+"d).\n"
+" If VAL is `none', do not indent; if VAL is\n"
+" `asis', preserve existing indentation.\n"
+" --split-size=NUM split Info files at size NUM (default %d).\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:409
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+" --css-ref=URL generate reference to a CSS file.\n"
+" --internal-links=FILE produce list of internal links in FILE.\n"
+" --transliterate-file-names\n"
+" produce file names in ASCII transliteration.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:419
+#, c-format
+msgid ""
+"Options for XML and Docbook:\n"
+" --output-indent=VAL indent XML elements by VAL spaces (default %"
+"d).\n"
+" If VAL is 0, ignorable whitespace is "
+"dropped.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:426
+msgid ""
+"Input file options:\n"
+" --commands-in-node-names allow @ commands in node names.\n"
+" -D VAR define the variable VAR, as with @set.\n"
+" -I DIR append DIR to the @include search path.\n"
+" -P DIR prepend DIR to the @include search path.\n"
+" -U VAR undefine the variable VAR, as with @clear.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:435
+msgid ""
+"Conditional processing in input:\n"
+" --ifdocbook process @ifdocbook and @docbook even if\n"
+" not generating Docbook.\n"
+" --ifhtml process @ifhtml and @html even if not generating HTML.\n"
+" --ifinfo process @ifinfo even if not generating Info.\n"
+" --ifplaintext process @ifplaintext even if not generating plain text.\n"
+" --iftex process @iftex and @tex; implies --no-split.\n"
+" --ifxml process @ifxml and @xml.\n"
+" --no-ifdocbook do not process @ifdocbook and @docbook text.\n"
+" --no-ifhtml do not process @ifhtml and @html text.\n"
+" --no-ifinfo do not process @ifinfo text.\n"
+" --no-ifplaintext do not process @ifplaintext text.\n"
+" --no-iftex do not process @iftex and @tex text.\n"
+" --no-ifxml do not process @ifxml and @xml text.\n"
+"\n"
+" Also, for the --no-ifFORMAT options, do process @ifnotFORMAT text.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:454
+msgid ""
+" The defaults for the @if... conditionals depend on the output format:\n"
+" if generating HTML, --ifhtml is on and the others are off;\n"
+" if generating Info, --ifinfo is on and the others are off;\n"
+" if generating plain text, --ifplaintext is on and the others are off;\n"
+" if generating XML, --ifxml is on and the others are off.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:462
+msgid ""
+"Examples:\n"
+" makeinfo foo.texi write Info to foo's @setfilename\n"
+" makeinfo --html foo.texi write HTML to @setfilename\n"
+" makeinfo --xml foo.texi write Texinfo XML to @setfilename\n"
+" makeinfo --docbook foo.texi write DocBook XML to @setfilename\n"
+" makeinfo --no-headers foo.texi write plain text to standard "
+"output\n"
+"\n"
+" makeinfo --html --no-headers foo.texi write html without node lines, "
+"menus\n"
+" makeinfo --number-sections foo.texi write Info with numbered sections\n"
+" makeinfo --no-split foo.texi write one Info file however big\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:622
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:670 makeinfo/makeinfo.c:696 makeinfo/makeinfo.c:720
+#: makeinfo/makeinfo.c:780
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:683
+#, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr ""
+
+#: makeinfo/makeinfo.c:688
+#, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:733
+#, c-format
+msgid "%s: could not open internal links output `%s'"
+msgstr ""
+
+#: makeinfo/makeinfo.c:738
+#, c-format
+msgid "%s: ignoring second internal links output `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:751
+#, c-format
+msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:769
+#, c-format
+msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:844
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1041 makeinfo/makeinfo.c:4166
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1044
+#, c-format
+msgid "Expected `%s'"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1521
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1567
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1647
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1677
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1744
+#, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1799
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1818
+#, c-format
+msgid ""
+"%s: Removing internal links output file `%s' due to errors; use --force to "
+"preserve.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2113
+#, c-format
+msgid "Unknown command `%s'"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2135
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2394
+#, c-format
+msgid "%c%s expected braces"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2407
+msgid "Unmatched }"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2455
+msgid "NO_NAME!"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2476
+#, c-format
+msgid "%c%s missing close brace"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3482
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3488
+#, c-format
+msgid "No such file `%s'"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3624
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3633
+msgid "@image missing filename argument"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3851
+#, c-format
+msgid "undefined flag: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3852
+#, c-format
+msgid "{No value for `%s'}"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3904
+#, c-format
+msgid "%c%s requires a name"
+msgstr ""
+
+#: makeinfo/makeinfo.c:4010
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:4258
+#, c-format
+msgid "`%.40s...' is too long for expansion; not expanded"
+msgstr ""
+
+#: makeinfo/multi.c:116
+msgid "Missing } in @multitable template"
+msgstr ""
+
+#: makeinfo/multi.c:260
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr ""
+
+#: makeinfo/multi.c:400
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr ""
+
+#: makeinfo/multi.c:563
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr ""
+
+#: makeinfo/multi.c:592
+msgid "ignoring @tab outside of multitable"
+msgstr ""
+
+#: makeinfo/multi.c:640
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr ""
+
+#: makeinfo/multi.c:643
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr ""
+
+#: makeinfo/node.c:279
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr ""
+
+#: makeinfo/node.c:647
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr ""
+
+#: makeinfo/node.c:714
+#, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr ""
+
+#: makeinfo/node.c:878
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr ""
+
+#: makeinfo/node.c:919 makeinfo/node.c:1163
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr ""
+
+#: makeinfo/node.c:922
+msgid "This @anchor command ignored; references to it will not work"
+msgstr ""
+
+#: makeinfo/node.c:924 makeinfo/node.c:1166
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr ""
+
+#: makeinfo/node.c:954
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr ""
+
+#: makeinfo/node.c:1160
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr ""
+
+#: makeinfo/node.c:1165
+msgid "@anchor command ignored; references to it will not work"
+msgstr ""
+
+#: makeinfo/node.c:1362
+#, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1462
+#, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1465
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr ""
+
+#: makeinfo/node.c:1520
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr ""
+
+#: makeinfo/node.c:1524
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr ""
+
+#: makeinfo/node.c:1536
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1605
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr ""
+
+#: makeinfo/node.c:1637
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr ""
+
+#: makeinfo/node.c:1727
+#, c-format
+msgid "Removing %s\n"
+msgstr ""
+
+#: makeinfo/node.c:1731
+#, c-format
+msgid "Can't remove file `%s': %s"
+msgstr ""
+
+#: makeinfo/sectioning.c:122
+#, c-format
+msgid "Appendix %c"
+msgstr ""
+
+#: makeinfo/sectioning.c:467
+#, c-format
+msgid "Internal error (search_sectioning) `%s'!"
+msgstr ""
+
+#: makeinfo/sectioning.c:563
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr ""
+
+#: makeinfo/sectioning.c:624
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr ""
+
+#: makeinfo/sectioning.c:640
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr ""
+
+#: makeinfo/sectioning.c:648
+#, c-format
+msgid "Here is the %ctop node"
+msgstr ""
+
+#: makeinfo/sectioning.c:664
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr ""
+
+#: makeinfo/xml.c:1669
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr ""
+
+#: makeinfo/xml.c:2014
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+
+#: makeinfo/xml.c:2150
+msgid "of"
+msgstr ""
+
+#: makeinfo/xml.c:2155
+msgid "on"
+msgstr ""
+
+#: makeinfo/xref.c:127
+msgid "First argument to cross-reference may not be empty"
+msgstr ""
+
+#: makeinfo/xref.c:252
+#, c-format
+msgid "Empty file name for HTML cross reference in `%s'"
+msgstr ""
+
+#: makeinfo/xref.c:387
+msgid "End of file reached while looking for `.' or `,'"
+msgstr ""
+
+#: makeinfo/xref.c:390
+#, c-format
+msgid "`.' or `,' must follow @%s, not `%c'"
+msgstr ""
+
+#: makeinfo/xref.c:392
+msgid "for cross-references in parentheses, use @pxref"
+msgstr ""
+
+#: makeinfo/xref.c:435
+msgid "First argument to @inforef may not be empty"
+msgstr ""
+
+#: util/texindex.c:223
+msgid "display this help and exit"
+msgstr ""
+
+#: util/texindex.c:225
+msgid "send output to FILE"
+msgstr ""
+
+#: util/texindex.c:227
+msgid "display version information and exit"
+msgstr ""
+
+#: util/texindex.c:237
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr ""
+
+#: util/texindex.c:238
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr ""
+
+#: util/texindex.c:241
+#, c-format
+msgid "Usually FILE... is specified as `foo.%c%c' for a document `foo.texi'.\n"
+msgstr ""
+
+#: util/texindex.c:243
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+
+#: util/texindex.c:743
+#, c-format
+msgid "failure reopening %s"
+msgstr ""
+
+#: util/texindex.c:758 util/texindex.c:786
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr ""
+
+#: util/texindex.c:993
+#, c-format
+msgid "No page number in %s"
+msgstr ""
+
+#: util/texindex.c:1066
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr ""
diff --git a/po/en@boldquot.header b/po/en@boldquot.header
new file mode 100644
index 0000000..fedb6a0
--- /dev/null
+++ b/po/en@boldquot.header
@@ -0,0 +1,25 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
+# This catalog furthermore displays the text between the quotation marks in
+# bold face, assuming the VT100/XTerm escape sequences.
+#
diff --git a/po/en@quot.header b/po/en@quot.header
new file mode 100644
index 0000000..a9647fc
--- /dev/null
+++ b/po/en@quot.header
@@ -0,0 +1,22 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
diff --git a/po/eo.gmo b/po/eo.gmo
new file mode 100644
index 0000000..73301f9
--- /dev/null
+++ b/po/eo.gmo
Binary files differ
diff --git a/po/eo.po b/po/eo.po
new file mode 100644
index 0000000..8736c32
--- /dev/null
+++ b/po/eo.po
@@ -0,0 +1,3474 @@
+# Esperanto translations for GNU Texinfo-4.0.
+# Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc.
+# Sergio Pokrovskij <sergio.pokrovskij@gmail.com>, 1999-2006
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo 4.7.94\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2008-09-18 20:38+0200\n"
+"PO-Revision-Date: 2006-11-25 23:35+0600\n"
+"Last-Translator: Sergio Pokrovskij <sergio.pokrovskij@gmail.com>\n"
+"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#: gnulib/lib/error.c:125
+msgid "Unknown system error"
+msgstr ""
+
+#: gnulib/lib/getopt.c:526 gnulib/lib/getopt.c:542
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: opcio «%s» estas ambigua\n"
+
+#: gnulib/lib/getopt.c:575 gnulib/lib/getopt.c:579
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: opcio „--%s‟ ne toleras argumenton\n"
+
+#: gnulib/lib/getopt.c:588 gnulib/lib/getopt.c:593
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: opcio „%c%s‟ ne toleras argumenton\n"
+
+#: gnulib/lib/getopt.c:636 gnulib/lib/getopt.c:655 gnulib/lib/getopt.c:971
+#: gnulib/lib/getopt.c:990
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: opcio «%s» bezonas argumenton\n"
+
+#: gnulib/lib/getopt.c:693 gnulib/lib/getopt.c:696
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: nekonata opcio „--%s‟\n"
+
+#: gnulib/lib/getopt.c:704 gnulib/lib/getopt.c:707
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: nekonata opcio „%c%s‟\n"
+
+#: gnulib/lib/getopt.c:759 gnulib/lib/getopt.c:762
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: misa opcio -- %c\n"
+
+#: gnulib/lib/getopt.c:768 gnulib/lib/getopt.c:771
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: nevalida opcio -- %c\n"
+
+#: gnulib/lib/getopt.c:823 gnulib/lib/getopt.c:839 gnulib/lib/getopt.c:1043
+#: gnulib/lib/getopt.c:1061
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: opcio bezonas argumenton -- %c\n"
+
+#: gnulib/lib/getopt.c:892 gnulib/lib/getopt.c:908
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: opcio „-W %s‟ estas ambigua\n"
+
+#: gnulib/lib/getopt.c:932 gnulib/lib/getopt.c:950
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: opcio „-W %s‟ ne toleras argumenton\n"
+
+#: gnulib/lib/xalloc-die.c:34 gnulib/lib/xsetenv.c:37
+#, c-format
+msgid "memory exhausted"
+msgstr ""
+
+#: info/echo-area.c:283 info/session.c:966
+msgid "Move forward a character"
+msgstr "Unu signon antaÅ­en"
+
+#: info/echo-area.c:295 info/session.c:993
+msgid "Move backward a character"
+msgstr "Unu signon malantaÅ­en"
+
+#: info/echo-area.c:307
+msgid "Move to the start of this line"
+msgstr "Al la komenco de ĉi tiu linio"
+
+#: info/echo-area.c:312
+msgid "Move to the end of this line"
+msgstr "Al la fino de ĉi tiu linio"
+
+#: info/echo-area.c:320 info/session.c:1025
+msgid "Move forward a word"
+msgstr "Unu vorton antaÅ­en"
+
+#: info/echo-area.c:360 info/session.c:1049
+msgid "Move backward a word"
+msgstr "Unu vorton malantaÅ­en"
+
+#: info/echo-area.c:400
+msgid "Delete the character under the cursor"
+msgstr "Forigu la signon subkursoran"
+
+#: info/echo-area.c:430
+msgid "Delete the character behind the cursor"
+msgstr "Forigu la signon ĵus antaŭ la kursoro"
+
+#: info/echo-area.c:451
+msgid "Cancel or quit operation"
+msgstr "Rezigno aÅ­ eliro"
+
+#: info/echo-area.c:466
+msgid "Accept (or force completion of) this line"
+msgstr "Akceptu (aŭ kompletigu) ĉi tiun linion"
+
+#: info/echo-area.c:471
+msgid "Insert next character verbatim"
+msgstr "EnÅovu la tujan signon senÅanÄe"
+
+#: info/echo-area.c:479
+msgid "Insert this character"
+msgstr "EnÅovu tiun signon"
+
+#: info/echo-area.c:498
+msgid "Insert a TAB character"
+msgstr "EnÅovu TAB-signon"
+
+#: info/echo-area.c:505
+msgid "Transpose characters at point"
+msgstr "Permutu la signojn ĉe la kursoro"
+
+#: info/echo-area.c:556
+msgid "Yank back the contents of the last kill"
+msgstr "Engluu la enhavon de la lasta forviÅo"
+
+#: info/echo-area.c:563
+msgid "Kill ring is empty"
+msgstr "ViÅringo malplenas"
+
+#: info/echo-area.c:576
+msgid "Yank back a previous kill"
+msgstr "Regluu antaÅ­an forviÅaĵon"
+
+#: info/echo-area.c:609
+msgid "Kill to the end of the line"
+msgstr "ForviÅu ekde la kursoro Äis la fino de la linio"
+
+#: info/echo-area.c:622
+msgid "Kill to the beginning of the line"
+msgstr "ForviÅu ekde la kursoro Äis la komenco de la linio"
+
+#: info/echo-area.c:634
+msgid "Kill the word following the cursor"
+msgstr "ForviÅu la vorton tuj post la kursoro"
+
+#: info/echo-area.c:654
+msgid "Kill the word preceding the cursor"
+msgstr "ForviÅu la vorton ĵus antaÅ­ la kursoro"
+
+#: info/echo-area.c:870 info/echo-area.c:926
+msgid "No completions"
+msgstr "Kompletigo malestas"
+
+#: info/echo-area.c:872
+msgid "Not complete"
+msgstr "Nekompleta"
+
+#: info/echo-area.c:913
+msgid "List possible completions"
+msgstr "Eligu la eblajn kompletigojn"
+
+#: info/echo-area.c:930
+msgid "Sole completion"
+msgstr "Sola kompletigo"
+
+#: info/echo-area.c:939
+msgid "One completion:\n"
+msgstr "Unu kompletigo:\n"
+
+#: info/echo-area.c:940
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d kompletigoj:\n"
+
+#: info/echo-area.c:1087
+msgid "Insert completion"
+msgstr "EnÅovu la kompletigon"
+
+#: info/echo-area.c:1222
+msgid "Building completions..."
+msgstr "Kompletigoj estas serĉataj ..."
+
+#: info/echo-area.c:1342
+msgid "Scroll the completions window"
+msgstr "Rulumu la fenestron de kompletigoj"
+
+#: info/footnotes.c:212
+msgid "Footnotes could not be displayed"
+msgstr "La piednotoj ne eligeblas"
+
+#: info/footnotes.c:238
+msgid "Show the footnotes associated with this node in another window"
+msgstr "Montru la piednotojn el ĉi tiu nodo en alia fenestro"
+
+#: info/footnotes.h:26
+msgid "---------- Footnotes ----------"
+msgstr "---------- Piednotoj ----------"
+
+#: info/indices.c:171
+msgid "Look up a string in the index for this file"
+msgstr "Serĉu ĉenon en la indekso por ĉi tiu dosiero"
+
+#: info/indices.c:198
+msgid "Finding index entries..."
+msgstr "Estas serĉataj indeksaj artikoloj ..."
+
+#: info/indices.c:206
+msgid "No indices found."
+msgstr "Nenia indekso trovita."
+
+#: info/indices.c:216
+msgid "Index entry: "
+msgstr "Indeksa artikolo: "
+
+#: info/indices.c:324
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr ""
+"Pasu al la sekva indeksa ero kongrua al la lasta komando „\\[index-search]‟"
+
+#: info/indices.c:334
+msgid "No previous index search string."
+msgstr "Malestas antaŭa ĉeno por serĉo en indekso."
+
+#: info/indices.c:341
+msgid "No index entries."
+msgstr "Neniu indeksa artikolo."
+
+#: info/indices.c:374
+#, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "En la indekso ne estas %sartikoloj kun «%s»."
+
+#: info/indices.c:375
+msgid "more "
+msgstr "pli da "
+
+#: info/indices.c:385
+msgid "CAN'T SEE THIS"
+msgstr "MALEBLAS VIDI ĈI TION"
+
+#: info/indices.c:421
+#, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr "Trovita «%s» en %s. („\\[next-index-match]‟ serĉos la sekvan.)"
+
+#: info/indices.c:549
+#, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "Serĉo en la indeksoj de «%s» ..."
+
+#: info/indices.c:604
+#, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr "«%s» malestas en la indeksoj de la disponeblaj Info-dosieroj"
+
+#: info/indices.c:630
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr "Serĉu ĉenon en ĉiuj konataj indeksoj Info-dosieraj kaj faru menuon"
+
+#: info/indices.c:634
+msgid "Index apropos: "
+msgstr "Serĉu en indekso informon pri: "
+
+#: info/indices.c:662
+#, c-format
+msgid ""
+"\n"
+"* Menu: Nodes whose indices contain `%s':\n"
+msgstr ""
+"\n"
+"* Menu: Nodoj kies indeksoj entenas «%s»:\n"
+
+#: info/info.c:275 info/infokey.c:899
+#, c-format
+msgid "Try --help for more information.\n"
+msgstr "Por ricevi pli da informoj uzu la opcion „--help‟.\n"
+
+#: info/info.c:294 info/infokey.c:145 install-info/install-info.c:2101
+#: makeinfo/makeinfo.c:802 util/texindex.c:295
+#, c-format
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+
+#: info/info.c:506
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "por «%s» ne troviÄis indeksa artikolo\n"
+
+#: info/info.c:600
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [MENU-ITEM...]\n"
+"\n"
+"Read documentation in Info format.\n"
+msgstr ""
+
+#: info/info.c:606
+msgid ""
+"Options:\n"
+" -k, --apropos=STRING look up STRING in all indices of all "
+"manuals.\n"
+" -d, --directory=DIR add DIR to INFOPATH.\n"
+" --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+" -f, --file=FILENAME specify Info file to visit."
+msgstr ""
+
+#: info/info.c:613
+msgid ""
+" -h, --help display this help and exit.\n"
+" --index-search=STRING go to node pointed by index entry STRING.\n"
+" -n, --node=NODENAME specify nodes in first visited Info file.\n"
+" -o, --output=FILENAME output selected nodes to FILENAME."
+msgstr ""
+
+#: info/info.c:619
+msgid ""
+" -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+" --no-raw-escapes output escapes as literal text.\n"
+" --restore=FILENAME read initial keystrokes from FILENAME.\n"
+" -O, --show-options, --usage go to command-line options node."
+msgstr ""
+
+#: info/info.c:626
+#, fuzzy
+msgid " -b, --speech-friendly be friendly to speech synthesizers."
+msgstr " -b, --speech-friendly estu afabla al la parolsinteziloj.\n"
+
+#: info/info.c:630
+msgid ""
+" --subnodes recursively output menu items.\n"
+" --vi-keys use vi-like and less-like key bindings.\n"
+" --version display version information and exit.\n"
+" -w, --where, --location print physical location of Info file."
+msgstr ""
+
+#: info/info.c:636
+msgid ""
+"\n"
+"The first non-option argument, if present, is the menu entry to start from;\n"
+"it is searched for in all `dir' files along INFOPATH.\n"
+"If it is not present, info merges all `dir' files and shows the result.\n"
+"Any remaining arguments are treated as the names of menu\n"
+"items relative to the initial node visited."
+msgstr ""
+
+#: info/info.c:643
+msgid ""
+"\n"
+"For a summary of key bindings, type h within Info."
+msgstr ""
+
+#: info/info.c:646
+msgid ""
+"\n"
+"Examples:\n"
+" info show top-level dir menu\n"
+" info info show the general manual for Info readers\n"
+" info info-stnd show the manual specific to this Info program\n"
+" info emacs start at emacs node from top-level dir\n"
+" info emacs buffers start at buffers node within emacs manual\n"
+" info --show-options emacs start at node with emacs' command line options\n"
+" info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+" info -f ./foo.info show file ./foo.info, not searching dir"
+msgstr ""
+
+#: info/info.c:657 info/infokey.c:918 makeinfo/makeinfo.c:475
+#: util/texindex.c:259
+msgid ""
+"\n"
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+"Erarraportojn sendu al <bug-texinfo@nu.org>; Äeneralajn\n"
+"demandojn kaj opiniojn al <help-texinfo@gnu.org>.\n"
+"La hejmpaÄo de Texinfo: <http://www.gnu.org/software/texinfo/>.\n"
+"Por la diskutoj pri Esperanto-traduko uzu la dissendoliston\n"
+"<translation-team-eo@lists.sourceforge.net>."
+
+#: info/info.c:691
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "La nodo «%s» ne troveblas."
+
+#: info/info.c:692
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "La nodo „(%s)%s‟ ne troveblas."
+
+#: info/info.c:693
+msgid "Cannot find a window!"
+msgstr "Maleblas trovi fenestron!"
+
+#: info/info.c:694
+msgid "Point doesn't appear within this window's node!"
+msgstr "La muskursoro ne estas en ĉi-fenestra nodo!"
+
+#: info/info.c:695
+msgid "Cannot delete the last window."
+msgstr "Maleblas forigi la lastan fenestron"
+
+#: info/info.c:696
+msgid "No menu in this node."
+msgstr "En ĉi tiu nodo malestas menuo."
+
+#: info/info.c:697
+msgid "No footnotes in this node."
+msgstr "Ne estas piednotoj en ĉi tiu nodo."
+
+#: info/info.c:698
+msgid "No cross references in this node."
+msgstr "Neniu referenco en ĉi tiu nodo."
+
+#: info/info.c:699
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Mankas ligilo «%s» por ĉi tiu nodo."
+
+#: info/info.c:700
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "Nekonata Info-komando „%c‟; tajpu „?‟ por helpo."
+
+#: info/info.c:701
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr "La terminaloj de tipo «%s» ne estas sufiĉe inteligentaj por Info."
+
+#: info/info.c:702
+msgid "You are already at the last page of this node."
+msgstr "Tiu paÄo jam estas la lasta en ĉi tiu nodo"
+
+#: info/info.c:703
+msgid "You are already at the first page of this node."
+msgstr "Tio jam estas la unua paÄo de ĉi tiu nodo"
+
+#: info/info.c:704
+msgid "Only one window."
+msgstr "Nur unu fenestro."
+
+#: info/info.c:705
+msgid "Resulting window would be too small."
+msgstr "La fenestro rezultos tro malgranda."
+
+#: info/info.c:706
+msgid "Not enough room for a help window, please delete a window."
+msgstr "Mankas spaco por helpa fenestro, bv forigi iun fenestron."
+
+#: info/infodoc.c:45
+msgid "Basic Info command keys\n"
+msgstr ""
+
+#: info/infodoc.c:47
+#, fuzzy
+msgid "\\%-10[quit-help] Close this help window.\n"
+msgstr "\\%-10[quit-help] Forlasu ĉi tiun helpon.\n"
+
+#: info/infodoc.c:48
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit-help] Forlasu la tutan Info.\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr "\\%-10[get-info-help-node] Voku la lernilon pri Info.\n"
+
+#: info/infodoc.c:51
+#, fuzzy
+msgid "\\%-10[prev-line] Move up one line.\n"
+msgstr "\\%-10[next-line] Unu paÄon malantaÅ­en.\n"
+
+#: info/infodoc.c:52
+#, fuzzy
+msgid "\\%-10[next-line] Move down one line.\n"
+msgstr "\\%-10[next-line] Unu paÄon antaÅ­en.\n"
+
+#: info/infodoc.c:53
+#, fuzzy
+msgid "\\%-10[scroll-backward] Scroll backward one screenful.\n"
+msgstr "\\%-10[scroll-backward] Unu paÄon malantaÅ­en.\n"
+
+#: info/infodoc.c:54
+#, fuzzy
+msgid "\\%-10[scroll-forward] Scroll forward one screenful.\n"
+msgstr "\\%-10[scroll-forward] Unu paÄon antaÅ­en.\n"
+
+#: info/infodoc.c:55
+#, fuzzy
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr "\\%-10[beginning-of-node] Iru al la komenco de ĉi tiu nodo.\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr "\\%-10[end-of-node] Iru al la fino de ĉi tiu nodo.\n"
+
+#: info/infodoc.c:58
+#, fuzzy
+msgid "\\%-10[move-to-next-xref] Skip to the next hypertext link.\n"
+msgstr ""
+"\\%-10[move-to-next-xref] Saltu sur la sekvan hipertekstan ligilon en ĉi "
+"tiu nodo.\n"
+
+#: info/infodoc.c:59
+#, fuzzy
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under the "
+"cursor.\n"
+msgstr ""
+"\\%-10[select-reference-this-line] Iru laÅ­ la subkursora hiperteksta ligo.\n"
+
+#: info/infodoc.c:60
+#, fuzzy
+msgid "\\%-10[history-node] Go back to the last node seen in this window.\n"
+msgstr ""
+"\\%-10[history-node] Revenu al la Lasta nodo vizitita en ĉi tiu fenestro.\n"
+
+#: info/infodoc.c:62
+#, fuzzy
+msgid "\\%-10[global-prev-node] Go to the previous node in the document.\n"
+msgstr ""
+"\\%-10[prev-node] Iru al la ĵusantaŭa („Previous‟) nodo de ĉi tiu nodo.\n"
+
+#: info/infodoc.c:63
+#, fuzzy
+msgid "\\%-10[global-next-node] Go to the next node in the document.\n"
+msgstr "\\%-10[next-node] Iru al la tujsekva („Next‟) nodo de ĉi tiu nodo.\n"
+
+#: info/infodoc.c:64
+#, fuzzy
+msgid "\\%-10[prev-node] Go to the previous node on this level.\n"
+msgstr ""
+"\\%-10[prev-node] Iru al la ĵusantaŭa („Previous‟) nodo de ĉi tiu nodo.\n"
+
+#: info/infodoc.c:65
+#, fuzzy
+msgid "\\%-10[next-node] Go to the next node on this level.\n"
+msgstr "\\%-10[next-node] Iru al la tujsekva („Next‟) nodo de ĉi tiu nodo.\n"
+
+#: info/infodoc.c:66
+#, fuzzy
+msgid "\\%-10[up-node] Go up one level.\n"
+msgstr "\\%-10[up-node] Iru al la tujsupra („Up‟) nodo de ĉi tiu nodo.\n"
+
+#: info/infodoc.c:67
+#, fuzzy
+msgid "\\%-10[top-node] Go to the top node of this document.\n"
+msgstr "\\%-10[end-of-node] Iru al la fino de ĉi tiu nodo.\n"
+
+#: info/infodoc.c:68
+#, fuzzy
+msgid "\\%-10[dir-node] Go to the main `directory' node.\n"
+msgstr "\\%-10[end-of-node] Iru al la fino de ĉi tiu nodo.\n"
+
+#: info/infodoc.c:70
+#, fuzzy
+msgid "1...9 Pick the first...ninth item in this node's menu.\n"
+msgstr " %-10s Elektu resp. la unuan ... la naŭan eron de ĉi-noda menuo.\n"
+
+#: info/infodoc.c:71
+#, fuzzy
+msgid "\\%-10[last-menu-item] Pick the last item in this node's menu.\n"
+msgstr "\\%-10[last-menu-item] Elektu la lastan eron de ĉi-noda menuo.\n"
+
+#: info/infodoc.c:72
+#, fuzzy
+msgid "\\%-10[menu-item] Pick a menu item specified by name.\n"
+msgstr " %-10s Iru al la tajpota menuero.\n"
+
+#: info/infodoc.c:73
+#, fuzzy
+msgid "\\%-10[xref-item] Follow a cross reference specified by name.\n"
+msgstr ""
+"\\%-10[xref-item] Sekvu referencon (legante la nomon de la referenco).\n"
+
+#: info/infodoc.c:74
+#, fuzzy
+msgid "\\%-10[goto-node] Go to a node specified by name.\n"
+msgstr " %-10s Vizitu nodon indikotan per la nomo.\n"
+
+#: info/infodoc.c:76
+#, fuzzy
+msgid "\\%-10[search] Search forward for a specified string.\n"
+msgstr " %-10s Serĉu sube indikotan signoĉenon,\n"
+
+#: info/infodoc.c:77
+#, fuzzy
+msgid "\\%-10[search-previous] Search for previous occurrence.\n"
+msgstr ""
+"\\%-10[prev-node] Iru al la ĵusantaŭa („Previous‟) nodo de ĉi tiu nodo.\n"
+
+#: info/infodoc.c:78
+#, fuzzy
+msgid "\\%-10[search-next] Search for next occurrence.\n"
+msgstr ""
+" %-10s Serĉu indikotan signoĉenon en la indeksaj artikoloj de ĉi tiu "
+"Info-\n"
+
+#: info/infodoc.c:79
+#, fuzzy
+msgid ""
+"\\%-10[index-search] Search for a specified string in the index, and\n"
+" select the node referenced by the first entry found.\n"
+msgstr ""
+"\\%-10[index-search] Serĉu aperon de donita signoĉeno en la indeksartikoloj "
+"de ĉi\n"
+" tiu info-dosiero kaj elektu la nodon referencatan de la unua trovita "
+"artikolo.\n"
+
+#: info/infodoc.c:81
+#, fuzzy
+msgid "\\%-10[abort-key] Cancel the current operation.\n"
+msgstr "Ĉesigu la kurantan operacion"
+
+#: info/infodoc.c:89
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"La ĉefaj komandoj info-fenestraj\n"
+"*********************************\n"
+
+#: info/infodoc.c:92
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s Forlasu ĉi tiun helpon.\n"
+
+#: info/infodoc.c:93
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Forlasu la tutan Info.\n"
+
+#: info/infodoc.c:94
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Voku la lernilon pri Info.\n"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr " %-10s Iru al la tujsekva („Next‟) nodo de ĉi tiu nodo.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr " %-10s Iru al la ĵusantaŭa („Previous‟) nodo de ĉi tiu nodo.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s Iru al la tujsupra („Up‟) nodo de ĉi tiu nodo.\n"
+
+#: info/infodoc.c:101
+#, fuzzy, c-format
+msgid ""
+" %-10s Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+"\\%-10[menu-item] Elektu menueron indikitan per nomo.\n"
+" Elekto de menuero kaÅ­zas transiron en alian nodon.\n"
+
+#: info/infodoc.c:103
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr " %-10s Sekvu reFerencon (legante la nomon de la referenco).\n"
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr " %-10s Revenu al la Lasta nodo vizitita en ĉi tiu fenestro.\n"
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr " %-10s Saltu sur la sekvan hipertekstan ligilon en ĉi tiu nodo.\n"
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s Iru laÅ­ la subkursora hiperteksta ligo.\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr " %-10s Iru al la ĉefkataloga nodo. Ekvivalentas al „g (DIR)‟.\n"
+
+#: info/infodoc.c:108
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr " %-10s Iru al la radika nodo. Ekvivalentas al „g Top‟.\n"
+
+#: info/infodoc.c:110
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"Por moviÄi ene de nodo:\n"
+"------------------------\n"
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s Unu paÄon antaÅ­en.\n"
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s Unu paÄon malantaÅ­en.\n"
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s Iru al la komenco de ĉi tiu nodo.\n"
+
+#: info/infodoc.c:115
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s Iru al la fino de ĉi tiu nodo.\n"
+
+#: info/infodoc.c:116
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s Unu paÄon antaÅ­en.\n"
+
+#: info/infodoc.c:117
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s Unu paÄon malantaÅ­en.\n"
+
+#: info/infodoc.c:119
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"Ceteraj komandoj:\n"
+"-----------------\n"
+
+#: info/infodoc.c:121
+#, fuzzy, c-format
+msgid " %-10s Pick first...ninth item in node's menu.\n"
+msgstr " %-10s Elektu resp. la unuan ... la naŭan eron de ĉi-noda menuo.\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s Elektu la lastan eron de ĉi-noda menuo.\n"
+
+#: info/infodoc.c:125
+#, fuzzy, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr ""
+"\\%-10[index-search] Serĉu aperon de donita signoĉeno en la indeksartikoloj "
+"de ĉi\n"
+" tiu info-dosiero kaj elektu la nodon referencatan de la unua trovita "
+"artikolo.\n"
+
+#: info/infodoc.c:127
+#, fuzzy, c-format
+msgid ""
+" %-10s Move to node specified by name.\n"
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+"\\%-10[goto-node] Iru al nodo indikita per nomo.\n"
+" AnkaÅ­ la dosiernomon vi povas inkludi, kiel en (DOSIERO)NODO.\n"
+
+#: info/infodoc.c:129
+#, fuzzy, c-format
+msgid ""
+" %-10s Search forward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+"\\%-10[search] Serĉu sube aperon de donita signoĉeno kaj\n"
+" vizitu la nodon en kiu troviÄos la sekva apero.\n"
+
+#: info/infodoc.c:131
+#, fuzzy, c-format
+msgid ""
+" %-10s Search backward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+"\\%-10[search] Serĉu sube aperon de donita signoĉeno kaj\n"
+" vizitu la nodon en kiu troviÄos la sekva apero.\n"
+
+#: info/infodoc.c:312
+msgid "The current search path is:\n"
+msgstr "La kuranta serĉvojo estas:\n"
+
+#: info/infodoc.c:316
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"Komandoj disponeblaj en Info-fenestroj:\n"
+"\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"Komandoj disponeblaj en la eĥozono:\n"
+"\n"
+
+#: info/infodoc.c:343
+#, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+"La sekvaj komandoj vokeblas nur per %s:\n"
+"\n"
+
+#: info/infodoc.c:347
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+"La sekvaj komandoj neniel vokeblas:\n"
+"\n"
+
+#: info/infodoc.c:477
+msgid "Display help message"
+msgstr "Eligu helpomesaÄon"
+
+#: info/infodoc.c:495
+msgid "Visit Info node `(info)Help'"
+msgstr "Vizitu la Info-nodon „(info)Help‟"
+
+#: info/infodoc.c:633
+msgid "Print documentation for KEY"
+msgstr "Eligu la informon pri KLAVO"
+
+#: info/infodoc.c:645
+#, c-format
+msgid "Describe key: %s"
+msgstr "Priskribu klavon: %s"
+
+#: info/infodoc.c:656
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s estas nedifinita."
+
+#: info/infodoc.c:672 info/infodoc.c:701
+#, c-format
+msgid "%s is undefined."
+msgstr "%s estas nedifinita."
+
+#: info/infodoc.c:722
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s estas ligita al %s."
+
+#: info/infodoc.c:1146
+msgid "Show what to type to execute a given command"
+msgstr "Montru, kion tajpi por plenumi koncernan komandon"
+
+#: info/infodoc.c:1150
+msgid "Where is command: "
+msgstr "Kie estas la komando: "
+
+#: info/infodoc.c:1172
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "neniu klavo trovita por la komando «%s»"
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s vokeblas nur per %s."
+
+#: info/infodoc.c:1183
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s vokeblas per %s."
+
+#: info/infodoc.c:1188
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "Malestas funkcio nomata «%s»"
+
+#: info/infodoc.c:96
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"Por elekti aliajn nodojn:\n"
+"-------------------------\n"
+
+#: info/infokey.c:170
+msgid "incorrect number of arguments"
+msgstr "MalÄusta nombro da argumentoj"
+
+#: info/infokey.c:201
+#, c-format
+msgid "cannot open input file `%s'"
+msgstr "ne malfermiÄis eniga dosiero «%s»"
+
+#: info/infokey.c:215
+#, c-format
+msgid "cannot create output file `%s'"
+msgstr "maleblas krei eligan dosieron «%s»"
+
+#: info/infokey.c:226
+#, c-format
+msgid "error writing to `%s'"
+msgstr "eraro dum skribo en «%s»"
+
+#: info/infokey.c:232
+#, c-format
+msgid "error closing output file `%s'"
+msgstr "eraro dum fermo de eliga dosiero «%s»"
+
+#: info/infokey.c:450
+msgid "key sequence too long"
+msgstr "tro longa klavosekvenco"
+
+#: info/infokey.c:529
+msgid "missing key sequence"
+msgstr "mankanta klavosekvenco"
+
+#: info/infokey.c:610
+msgid "NUL character (\\000) not permitted"
+msgstr "NUL-signo (\\000) malpermesitas"
+
+#: info/infokey.c:641
+#, c-format
+msgid "NUL character (^%c) not permitted"
+msgstr "NUL-signo (^%c) malpermesitas"
+
+#: info/infokey.c:665
+msgid "missing action name"
+msgstr "mankas agonomo"
+
+#: info/infokey.c:681 info/infokey.c:756
+msgid "section too long"
+msgstr "tro longa sekcio"
+
+#: info/infokey.c:688
+#, c-format
+msgid "unknown action `%s'"
+msgstr "nekonata ago «%s»."
+
+#: info/infokey.c:698
+msgid "action name too long"
+msgstr "tro longa agonomo"
+
+#: info/infokey.c:712
+#, c-format
+msgid "extra characters following action `%s'"
+msgstr "kromaj signoj post la ago «%s»"
+
+#: info/infokey.c:723
+msgid "missing variable name"
+msgstr "mankas nomo de variablo"
+
+#: info/infokey.c:733
+msgid "missing `=' immediately after variable name"
+msgstr "mankas „=‟ tuj post variablonomo"
+
+#: info/infokey.c:741
+msgid "variable name too long"
+msgstr "tro longa variablonomo"
+
+#: info/infokey.c:765
+msgid "value too long"
+msgstr "tro longa valoro"
+
+#: info/infokey.c:890
+#, c-format
+msgid "\"%s\", line %u: "
+msgstr "«%s», linio %u: "
+
+#: info/infokey.c:906
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [INPUT-FILE]\n"
+"\n"
+"Compile infokey source file to infokey file. Reads INPUT-FILE (default\n"
+"$HOME/.infokey) and writes compiled key file to (by default) $HOME/.info.\n"
+"\n"
+"Options:\n"
+" --output FILE output to FILE instead of $HOME/.info\n"
+" --help display this help and exit.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"Sintakso: %s [OPCIO]... [ENIG-DOSIERO]\n"
+"\n"
+"Opcioj:\n"
+" --output=DOSIERO Eligu en DOSIEROn (anatataÅ­ $HOME/.info).\n"
+" --help Eligu ĉi tiun helpeton kaj finu.\n"
+" --version Eligu la version de la programo kaj finu.\n"
+
+#: info/infomap.c:955
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "La misa infoklava dosiero «%s» ignorita (tro mallonga)"
+
+#: info/infomap.c:958
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "La misa infoklava dosiero «%s» ignorita (tro longa)"
+
+#: info/infomap.c:971
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "Eraro dum lego de infoklava dosiero «%s» (tro frue elĉerpita)"
+
+#: info/infomap.c:990
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr "Misa infoklava dosiero «%s» (magiaj nombroj); aktualigu Äin per infokey"
+
+#: info/infomap.c:999
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr "Via infoklava dosiero «%s» malaktualas; aktualigu Äin per infokey"
+
+#: info/infomap.c:1015
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+"Misa infoklava dosiero «%s» (misa sekcilongo) -- aktualigu Äin per infokey"
+
+#: info/infomap.c:1036
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr "Misa infoklava dosiero «%s» (misa sekcikodo); aktualigu Äin per infokey"
+
+#: info/infomap.c:1171
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr "Misaj datumoj en infoklava dosiero -- iuj klavasociaĵoj ne validos"
+
+#: info/infomap.c:1221
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr ""
+"Misaj datumoj en infoklava dosiero -- iuj valorizoj de variabloj ne validos"
+
+#: info/m-x.c:68
+msgid "Read the name of an Info command and describe it"
+msgstr "Legu la nomon de Info-komando kaj priskribu Äin"
+
+#: info/m-x.c:72
+msgid "Describe command: "
+msgstr "Priskribu komandon: "
+
+#: info/m-x.c:95
+msgid "Read a command name in the echo area and execute it"
+msgstr "Legu en la eÄ¥ozono nomon de komando kaj Äin plenumu"
+
+#: info/m-x.c:139
+msgid "Cannot execute an `echo-area' command here."
+msgstr "Maleblas plenumi eĥozonan („echo-area-‟) komandon ĉi tie."
+
+#: info/m-x.c:153
+#, c-format
+msgid "Undefined command: %s"
+msgstr "Nekonata komando: %s"
+
+#: info/m-x.c:159
+msgid "Set the height of the displayed window"
+msgstr "Fiksu la alton de la prezentata fenestro"
+
+#: info/m-x.c:172
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Alto de la ekrano estu (%d): "
+
+#: info/makedoc.c:166 info/makedoc.c:174
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+" La fontodosieroj tralaboritaj por fari ĉi tiun dosieron:\n"
+"\n"
+
+#: info/makedoc.c:556
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "Maleblas prilabori la dosieron %s.\n"
+
+#: info/nodemenu.c:30
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+"\n"
+"* Menu:\n"
+" (Dosiero)Nodo Linioj Longo Entenanta Dosiero\n"
+" -------------- ------ ----- -----------------"
+
+#: info/nodemenu.c:201
+msgid ""
+"Here is the menu of nodes you have recently visited.\n"
+"Select one from this menu, or use `\\[history-node]' in another window.\n"
+msgstr ""
+"Jen la menuo de nodoj kiujn vi lastatempe vizitis.\n"
+"Elektu iun el la menuo, aŭ uzu „\\[history-node]‟ en alia fenestro.\n"
+
+#: info/nodemenu.c:223
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr "Faru fenestron entenantan menuon de ĉiuj nune vizititaj nodoj"
+
+#: info/nodemenu.c:303
+msgid "Select a node which has been previously visited in a visible window"
+msgstr "Elektu nodon jam vizititan en videbla fenestro"
+
+#: info/nodemenu.c:316
+msgid "Select visited node: "
+msgstr "Elektu vizititan nodon: "
+
+#: info/nodemenu.c:336 info/session.c:2578
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "La referenco malaperis! (%s)."
+
+#: info/search.c:166
+#, c-format
+msgid "regexp error: %s"
+msgstr ""
+
+#: info/session.c:164
+#, c-format
+msgid ""
+"Welcome to Info version %s. Type \\[get-help-window] for help, \\[menu-item] "
+"for menu item."
+msgstr ""
+"Bonvenon al Info, versio %s. Tajpu \\[get-help-window] por helpo, \\[menu-"
+"item] por menuero."
+
+#: info/session.c:625
+msgid "Move down to the next line"
+msgstr "MalleviÄu al la sekva linio"
+
+#: info/session.c:661
+msgid "Move up to the previous line"
+msgstr "LeviÄu al la antaÅ­a linio"
+
+#: info/session.c:931
+msgid "Move to the end of the line"
+msgstr "Iru al la fino de la linio"
+
+#: info/session.c:942
+msgid "Move to the start of the line"
+msgstr "Iru al la komenco de la linio"
+
+#: info/session.c:1142
+msgid "Next"
+msgstr "Sekva"
+
+#: info/session.c:1158 info/session.c:1283
+msgid "No more nodes within this document."
+msgstr "Malestas pluaj referencoj en la dokumento."
+
+#: info/session.c:1309
+msgid "No `Prev' for this node."
+msgstr "Mankas ligilo „Prev‟ por ĉi tiu nodo."
+
+#: info/session.c:1329
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr "En la dokumento mankas ligilo(j) „Prev‟ aŭ „Up‟ por tiu nodo."
+
+#: info/session.c:1391
+msgid "Move forwards or down through node structure"
+msgstr "Movu antaÅ­en aÅ­ malsupren en la strukturo de nodoj"
+
+#: info/session.c:1407
+msgid "Move backwards or up through node structure"
+msgstr "Movu malantaÅ­en aÅ­ supren en la strukturo de nodoj"
+
+#: info/session.c:1508
+msgid "Scroll forward in this window"
+msgstr "Rulumu antaŭen en ĉi tiu fenestro"
+
+#: info/session.c:1516
+msgid "Scroll forward in this window and set default window size"
+msgstr "Rulumu antaŭen en ĉi tiu fenestro kaj fiksu defaŭltan fenestrograndon"
+
+#: info/session.c:1524
+msgid "Scroll forward in this window staying within node"
+msgstr "Rulumu antaŭen en ĉi tiu fenestro sed restu en la nodo"
+
+#: info/session.c:1532
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr ""
+"Rulumu antaŭen en ĉi tiu fenestro restante en la nodo kaj\n"
+"fiksu defaÅ­ltan fenestrograndon"
+
+#: info/session.c:1540
+msgid "Scroll backward in this window"
+msgstr "Rulumu malantaŭen en ĉi tiu fenestro"
+
+#: info/session.c:1548
+msgid "Scroll backward in this window and set default window size"
+msgstr ""
+"Rulumu malantaŭen en ĉi tiu fenestro kaj fiksu defaŭltan fenestrograndon"
+
+#: info/session.c:1557
+msgid "Scroll backward in this window staying within node"
+msgstr "Rulumu malantaŭen en ĉi tiu fenestro sed restu en la nodo"
+
+#: info/session.c:1565
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr ""
+"Rulumu malantaŭen en ĉi tiu fenestro restante en la nodo kaj\n"
+" fiksu defaÅ­ltan fenestrograndon"
+
+#: info/session.c:1573
+msgid "Move to the start of this node"
+msgstr "Iru al la komenco de ĉi tiu nodo"
+
+#: info/session.c:1580
+msgid "Move to the end of this node"
+msgstr "Iru al la fino de ĉi tiu nodo"
+
+#: info/session.c:1587
+msgid "Scroll down by lines"
+msgstr "Linie rulumu suben"
+
+#: info/session.c:1604
+msgid "Scroll up by lines"
+msgstr "Linie rulumu supren"
+
+#: info/session.c:1622
+msgid "Scroll down by half screen size"
+msgstr "Duonekrane rulumu suben"
+
+#: info/session.c:1648
+msgid "Scroll up by half screen size"
+msgstr "Duonekrane rulumu supren"
+
+#: info/session.c:1677
+msgid "Select the next window"
+msgstr "Elektu la sekvan fenestron"
+
+#: info/session.c:1716
+msgid "Select the previous window"
+msgstr "Elektu la antaÅ­an fenestron"
+
+#: info/session.c:1767
+msgid "Split the current window"
+msgstr "Disfendu la kurantan fenestron"
+
+#: info/session.c:1848
+msgid "Delete the current window"
+msgstr "Forigu la kurantan fenestron"
+
+#: info/session.c:1856
+msgid "Cannot delete a permanent window"
+msgstr "Maleblas forigi fenestron permanentan"
+
+#: info/session.c:1888
+msgid "Delete all other windows"
+msgstr "Forigu ĉiujn ceterajn fenestrojn"
+
+#: info/session.c:1934
+msgid "Scroll the other window"
+msgstr "Rulumu la alian fenestron"
+
+#: info/session.c:1955
+msgid "Scroll the other window backward"
+msgstr "Rulumu la alian fenestron malantaÅ­en"
+
+#: info/session.c:1961
+msgid "Grow (or shrink) this window"
+msgstr "(Mal)pligrandigu ĉi tiun fenestron"
+
+#: info/session.c:1972
+msgid "Divide the available screen space among the visible windows"
+msgstr "Dispartigu la disponeblan ekranspacon inter la videblaj fenestroj"
+
+#: info/session.c:1979
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "BaskulÅaltu la reÄimon de linifaldo en la kuranta fenestro"
+
+#: info/session.c:1986
+msgid "Toggle the usage of regular expressions in searches"
+msgstr ""
+
+#: info/session.c:1990
+msgid "Using regular expressions for searches."
+msgstr ""
+
+#: info/session.c:1991
+msgid "Using literal strings for searches."
+msgstr ""
+
+#: info/session.c:2162
+msgid "Select the Next node"
+msgstr "Elektu la nodon sekvan („Next‟)"
+
+#: info/session.c:2170
+msgid "Select the Prev node"
+msgstr "Elektu la nodon antaŭan („Prev‟)"
+
+#: info/session.c:2178
+msgid "Select the Up node"
+msgstr "Elektu la nodon supran („Up‟)"
+
+#: info/session.c:2185
+msgid "Select the last node in this file"
+msgstr "Elektu la lastan nodon en ĉi tiu dosiero"
+
+#: info/session.c:2212 info/session.c:2245
+msgid "This window has no additional nodes"
+msgstr "Ĉi tiu fenestro ne havas pluajn nodojn"
+
+#: info/session.c:2218
+msgid "Select the first node in this file"
+msgstr "Elektu la unuan nodon en ĉi tiu dosiero"
+
+#: info/session.c:2252
+msgid "Select the last item in this node's menu"
+msgstr "Elektu la lastan eron en la menuo de ĉi tiu nodo"
+
+#: info/session.c:2258
+msgid "Select this menu item"
+msgstr "Elektu ĉi tiun menueron"
+
+#: info/session.c:2291
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "Ĉi tiu menuo ne havas %d erojn."
+
+#: info/session.c:2485 info/session.c:2486
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Menuero (%s): "
+
+#: info/session.c:2489
+msgid "Menu item: "
+msgstr "Menuero: "
+
+#: info/session.c:2496 info/session.c:2497
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Sekvu referencon (%s): "
+
+#: info/session.c:2500
+msgid "Follow xref: "
+msgstr "Sekvu referencon: "
+
+#: info/session.c:2629
+msgid "Read a menu item and select its node"
+msgstr "Legu menueron kaj elektu Äian nodon"
+
+#: info/session.c:2637
+msgid "Read a footnote or cross reference and select its node"
+msgstr "Legu piednoton aÅ­ referencon kaj elektu Äian nodon"
+
+#: info/session.c:2643
+msgid "Move to the start of this node's menu"
+msgstr "Iru al la komenco de la menuo de ĉi tiu nodo"
+
+#: info/session.c:2667
+msgid "Visit as many menu items at once as possible"
+msgstr ""
+"Vizitu samtempe kiom eble plej multe da menueroj (ĉiun en aparta fenestro)"
+
+#: info/session.c:2695
+msgid "Read a node name and select it"
+msgstr "Legu nodnomon kaj elektu la nodon"
+
+#: info/session.c:2750 info/session.c:2755
+msgid "Goto node: "
+msgstr "Iru al la nodo: "
+
+#: info/session.c:2819
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "En la nodo «%s» malestas menuo."
+
+#: info/session.c:2865
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "Menuero «%s» malestas en la nodo «%s»."
+
+#: info/session.c:2895
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr "Maleblas trovi nodon referencatan per «%s» en «%s»."
+
+#: info/session.c:2945
+msgid "Read a list of menus starting from dir and follow them"
+msgstr "Legu liston da menuoj, komencante per dir kaj sekvante ilin"
+
+#: info/session.c:2947
+msgid "Follow menus: "
+msgstr "Sekvu menuojn: "
+
+#: info/session.c:3140
+msgid "Find the node describing program invocation"
+msgstr "Trovu la nodon priskribantan programvokon"
+
+#: info/session.c:3142
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "Trovu la voknodon de [%s]: "
+
+#: info/session.c:3180
+msgid "Read a manpage reference and select it"
+msgstr "Legu referencon al manlibra paÄo kaj Äin elektu"
+
+#: info/session.c:3184
+msgid "Get Manpage: "
+msgstr "Manlibran paÄon: "
+
+#: info/session.c:3214
+msgid "Select the node `Top' in this file"
+msgstr "Elektu la nodon „Top‟ en ĉi tiu dosiero"
+
+#: info/session.c:3220
+msgid "Select the node `(dir)'"
+msgstr "Elektu la nodon „(dir)‟"
+
+#: info/session.c:3237 info/session.c:3239
+#, c-format
+msgid "Kill node (%s): "
+msgstr "ForviÅu la nodon (%s): "
+
+#: info/session.c:3291
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "Maleblas forigi la nodon «%s»"
+
+#: info/session.c:3301
+msgid "Cannot kill the last node"
+msgstr "Maleblas forigi la lastan nodon"
+
+#: info/session.c:3387
+msgid "Select the most recently selected node"
+msgstr "Elektu nodon plej ĵuse elektitan"
+
+#: info/session.c:3393
+msgid "Kill this node"
+msgstr "ForviÅu ĉi tiun nodon"
+
+#: info/session.c:3401
+msgid "Read the name of a file and select it"
+msgstr "Legu la dosiernomon kaj Äin elektu"
+
+#: info/session.c:3405
+msgid "Find file: "
+msgstr "Trovu la dosieron: "
+
+#: info/session.c:3422
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "Maleblas trovi «%s»."
+
+#: info/session.c:3465 info/session.c:3583
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "Maleblas krei eligan dosieron «%s»."
+
+#: info/session.c:3479 info/session.c:3601 info/session.c:3661
+msgid "Done."
+msgstr "Prete."
+
+#: info/session.c:3534
+#, c-format
+msgid "Writing node %s..."
+msgstr "Estas skribata la nodo «%s» ..."
+
+#: info/session.c:3610
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr "La enhavon de ĉi tiu nodo metu en la dukton per INFO_PRINT_COMMAND"
+
+#: info/session.c:3645
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "Ne malfermiÄis dukto al «%s»."
+
+#: info/session.c:3651
+#, c-format
+msgid "Printing node %s..."
+msgstr "Estas printata la nodo «%s» ..."
+
+#: info/session.c:3900
+msgid "Search continued from the end of the document."
+msgstr ""
+
+#: info/session.c:3905
+#, fuzzy
+msgid "Search continued from the beginning of the document."
+msgstr "ForviÅu ekde la kursoro Äis la komenco de la linio"
+
+#: info/session.c:3922
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "Estas serĉata la subdosiero «%s» ..."
+
+#: info/session.c:3979
+msgid "Read a string and search for it case-sensitively"
+msgstr "Legu ĉenon kaj serĉu Äin usklecodistinge"
+
+#: info/session.c:3986
+msgid "Read a string and search for it"
+msgstr "Legu ĉenon kaj Äin serĉu"
+
+#: info/session.c:3994
+msgid "Read a string and search backward for it"
+msgstr "Legu ĉenon kaj Äin serĉu malantaÅ­en"
+
+#: info/session.c:4030 info/session.c:4036
+#, fuzzy, c-format
+msgid "%s%s%s [%s]: "
+msgstr "%s%spor signoĉeno [%s]: "
+
+#: info/session.c:4031 info/session.c:4037
+msgid "Regexp search"
+msgstr ""
+
+#: info/session.c:4032 info/session.c:4038
+#, fuzzy
+msgid " case-sensitively"
+msgstr " usklecodistinge"
+
+#: info/session.c:4033 info/session.c:4039
+#, fuzzy
+msgid " backward"
+msgstr "Serĉu malantaŭen"
+
+#: info/session.c:4037
+msgid "Search"
+msgstr "Serĉu"
+
+#: info/session.c:4079
+msgid "Search failed."
+msgstr "Serĉo fiaskis."
+
+#: info/session.c:4097
+msgid "Repeat last search in the same direction"
+msgstr "Ripetu la ĵusan serĉon samdirekte"
+
+#: info/session.c:4100 info/session.c:4110
+msgid "No previous search string"
+msgstr "Malestas pli frua serĉoĉeno."
+
+#: info/session.c:4107
+msgid "Repeat last search in the reverse direction"
+msgstr "Ripetu la ĵusan serĉon alidirekte"
+
+#: info/session.c:4126 info/session.c:4132
+msgid "Search interactively for a string as you type it"
+msgstr "Interaktive serĉu ĉenon tajpatan"
+
+#: info/session.c:4212
+#, fuzzy
+msgid "Regexp I-search backward: "
+msgstr "Interaktiva serĉo malantaŭen: "
+
+#: info/session.c:4213
+msgid "I-search backward: "
+msgstr "Interaktiva serĉo malantaŭen: "
+
+#: info/session.c:4215
+#, fuzzy
+msgid "Regexp I-search: "
+msgstr "Interaktiva serĉo: "
+
+#: info/session.c:4216
+msgid "I-search: "
+msgstr "Interaktiva serĉo: "
+
+#: info/session.c:4241 info/session.c:4243
+msgid "Failing "
+msgstr "Fiasko "
+
+#: info/session.c:4734
+msgid "Move to the previous cross reference"
+msgstr "Iru al la antaÅ­a referenco"
+
+#: info/session.c:4752
+msgid "Move to the next cross reference"
+msgstr "Iru al la sekva referenco"
+
+#: info/session.c:4774
+msgid "Select reference or menu item appearing on this line"
+msgstr "Elektu la referencon aŭ la menueron de ĉi tiu linio"
+
+#: info/session.c:4797
+msgid "Cancel current operation"
+msgstr "Ĉesigu la kurantan operacion"
+
+#: info/session.c:4804
+msgid "Quit"
+msgstr "Finu"
+
+#: info/session.c:4813
+msgid "Move the cursor to a specific line of the window"
+msgstr "Movu la kursoron sur indikitan linion de la fenestro"
+
+#: info/session.c:4845
+msgid "Redraw the display"
+msgstr "RefreÅigi la ekranon"
+
+#: info/session.c:4882
+msgid "Quit using Info"
+msgstr "Eliru el Info"
+
+#: info/session.c:4895
+msgid "Run command bound to this key's lowercase variant"
+msgstr "Plenumi komandon asociitan kun ĉi tiu klavo minuskligita"
+
+#: info/session.c:4906
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "Komando nekonata (%s)."
+
+#: info/session.c:4909
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "«%s» ne validas"
+
+#: info/session.c:4910
+#, c-format
+msgid "`%s' is invalid"
+msgstr "„%s‟ ne validas"
+
+#: info/session.c:5125
+msgid "Add this digit to the current numeric argument"
+msgstr "Aldonu tiun ciferon al la kuranta argumento nombra"
+
+#: info/session.c:5134
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "Komencu (aÅ­ 4-obligu) la kurantan argumenton nombran"
+
+#: info/session.c:5149
+msgid "Internally used by \\[universal-argument]"
+msgstr "Uzata interne de \\[universal-argument]"
+
+#: info/tilde.c:336
+#, c-format
+msgid "readline: Out of virtual memory!\n"
+msgstr "readline: Virtuala memoro elĉerpita!\n"
+
+#: info/variables.c:37
+msgid "When \"On\", footnotes appear and disappear automatically"
+msgstr "Ĉe „On‟, la piednotoj aperas kaj malaperas aŭtomate"
+
+#: info/variables.c:41
+msgid "When \"On\", creating or deleting a window resizes other windows"
+msgstr "Ĉe „On‟, kreo aÅ­ forigo de fenestro kaÅ­zas rearanÄon de la ceteraj"
+
+#: info/variables.c:45
+msgid "When \"On\", flash the screen instead of ringing the bell"
+msgstr "Ĉe „On‟, anstataŭ bleki fulmetu la ekranon"
+
+#: info/variables.c:49
+msgid "When \"On\", errors cause the bell to ring"
+msgstr "Ĉe „On‟, signalu pri eraro per bleko"
+
+#: info/variables.c:53
+msgid "When \"On\", Info garbage collects files which had to be uncompressed"
+msgstr "Ĉe „On‟, Info traktas makulaturon post malpako de kunpremitaj dosieroj"
+
+#: info/variables.c:56
+msgid "When \"On\", the portion of the matched search string is highlighted"
+msgstr "Ĉe „On‟, la peco kongrua al la serĉoĉeno emfaziÄas"
+
+#: info/variables.c:60
+msgid "Controls what happens when scrolling is requested at the end of a node"
+msgstr "Determinas la konduton de rulumo fine de nodo"
+
+#: info/variables.c:65
+msgid "Same as scroll-behaviour"
+msgstr ""
+
+#: info/variables.c:69
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr ""
+"La nombro de linioj rulumataj kiam la kursoro moviÄas ekster la fenestron"
+
+#: info/variables.c:73
+msgid "Controls whether scroll-behavior affects cursor movement commands"
+msgstr ""
+
+#: info/variables.c:77
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr "Ĉe „On‟, Info akceptas kaj surekranigas la okbitajn signojn"
+
+#: info/variables.c:81
+#, fuzzy
+msgid ""
+"What to do when a scrolling command is issued at the end of the last node"
+msgstr "Determinas la konduton de rulumo fine de nodo"
+
+#: info/variables.c:88
+msgid "Explain the use of a variable"
+msgstr "Klarigu la uzon de variablo"
+
+#: info/variables.c:94
+msgid "Describe variable: "
+msgstr "Priskribu variablon: "
+
+#: info/variables.c:113
+msgid "Set the value of an Info variable"
+msgstr "Valorizu Info-variablon"
+
+#: info/variables.c:119
+msgid "Set variable: "
+msgstr "Valorizu variablon: "
+
+#: info/variables.c:137
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "Variablo %s ricevu la valoron (%d): "
+
+#: info/variables.c:178
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "%s ricevu la valoron (%s): "
+
+#: info/window.c:1026
+msgid "--*** Tags out of Date ***"
+msgstr "--*** Etikedoj malaktualiÄis ***"
+
+#: info/window.c:1037
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), linioj ----, "
+
+#: info/window.c:1044
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d linioj --%s--"
+
+#: info/window.c:1048
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d linioj --%s--"
+
+#: info/window.c:1055
+#, c-format
+msgid " Subfile: %s"
+msgstr " Subdosiero: %s"
+
+#: install-info/install-info.c:221
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: averto: "
+
+#: install-info/install-info.c:270
+#, c-format
+msgid " for %s"
+msgstr " por %s"
+
+#: install-info/install-info.c:500
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr "\tPor ricevi kompletan liston da opcioj tajpu „%s --help‟.\n"
+
+#: install-info/install-info.c:508
+#, fuzzy, c-format
+msgid "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+msgstr "Uzmaniero: %s [OPCIO]... TEXINFO-DOSIERO...\n"
+
+#: install-info/install-info.c:510
+msgid "Add or remove entries in INFO-FILE from the Info directory DIR-FILE."
+msgstr ""
+
+#: install-info/install-info.c:513
+msgid ""
+"Options:\n"
+" --debug report what is being done.\n"
+" --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+" don't insert any new entries.\n"
+" --description=TEXT the description of the entry is TEXT; used with\n"
+" the --name option to become synonymous with the\n"
+" --entry option.\n"
+" --dir-file=NAME specify file name of Info directory file;\n"
+" equivalent to using the DIR-FILE argument.\n"
+" --dry-run same as --test."
+msgstr ""
+
+#: install-info/install-info.c:525
+msgid ""
+" --entry=TEXT insert TEXT as an Info directory entry.\n"
+" TEXT is written as an Info menu item line followed\n"
+" by zero or more extra lines starting with "
+"whitespace.\n"
+" If you specify more than one entry, all are added.\n"
+" If you don't specify any entries, they are determined\n"
+" from information in the Info file itself.\n"
+" When removing, TEXT specifies the entry to remove.\n"
+" TEXT is only removed as a last resort, if the\n"
+" entry as determined from the Info file is not "
+"present,\n"
+" and the basename of the Info file isn't found either."
+msgstr ""
+
+#: install-info/install-info.c:537
+msgid ""
+" --help display this help and exit.\n"
+" --info-dir=DIR same as --dir-file=DIR/dir.\n"
+" --info-file=FILE specify Info file to install in the directory;\n"
+" equivalent to using the INFO-FILE argument.\n"
+" --item=TEXT same as --entry=TEXT.\n"
+" --keep-old do not replace entries, or remove empty sections.\n"
+" --menuentry=TEXT same as --name=TEXT.\n"
+" --name=TEXT the name of the entry is TEXT; used with --description\n"
+" to become synonymous with the --entry option.\n"
+" --no-indent do not format new entries in the DIR file.\n"
+" --quiet suppress warnings."
+msgstr ""
+
+#: install-info/install-info.c:550
+msgid ""
+" --regex=R put this file's entries in all sections that match the\n"
+" regular expression R (ignoring case).\n"
+" --remove same as --delete.\n"
+" --remove-exactly only remove if the info file name matches exactly;\n"
+" suffixes such as .info and .gz are not ignored.\n"
+" --section=SEC put entries in section SEC of the directory.\n"
+" If you specify more than one section, all the entries\n"
+" are added in each of the sections.\n"
+" If you don't specify any sections, they are "
+"determined\n"
+" from information in the Info file itself.\n"
+" --section R SEC equivalent to --regex=R --section=SEC --add-once."
+msgstr ""
+
+#: install-info/install-info.c:563
+msgid ""
+" --silent suppress warnings.\n"
+" --test suppress updating of DIR-FILE.\n"
+" --version display version information and exit."
+msgstr ""
+
+#: install-info/install-info.c:570
+#, fuzzy
+msgid ""
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+"Erarraportojn sendu al <bug-texinfo@nu.org>; Äeneralajn\n"
+"demandojn kaj opiniojn al <help-texinfo@gnu.org>.\n"
+"La hejmpaÄo de Texinfo: <http://www.gnu.org/software/texinfo/>.\n"
+"Por la diskutoj pri Esperanto-traduko uzu la dissendoliston\n"
+"<translation-team-eo@lists.sourceforge.net>."
+
+#: install-info/install-info.c:597
+#, c-format
+msgid ""
+"This is the file .../info/dir, which contains the\n"
+"topmost node of the Info hierarchy, called (dir)Top.\n"
+"The first time you invoke Info you start off looking at this node.\n"
+"\n"
+"%s\tThis is the top of the INFO tree\n"
+"\n"
+" This (the Directory node) gives a menu of major topics.\n"
+" Typing \"q\" exits, \"?\" lists all Info commands, \"d\" returns here,\n"
+" \"h\" gives a primer for first-timers,\n"
+" \"mEmacs<Return>\" visits the Emacs manual, etc.\n"
+"\n"
+" In Emacs, you can click mouse button 2 on a menu item or cross reference\n"
+" to select it.\n"
+"\n"
+"%s\n"
+msgstr ""
+"Ĉi tio estas la dosiero .../info/dir, entenanta la pinton de la \n"
+"la hierarkio Info -- la ĉefkatalogan nodon nomatan (dir)Top.\n"
+"Unuafoje lanĉinte la programon Info, vi trafas en tiun nodon.\n"
+"\n"
+"%s\\tLa pinto de la INFO-hierarkio\n"
+"\n"
+" Ĉi tie (en la Info-katalogo) estas menuo de la ĉefaj temoj.\n"
+" Tajpu „q‟ por eliri; „?‟ por eligi ĉiujn komandojn de Info;\n"
+" „d‟ por reveni ĉi tien; „h‟ vokas lernilon por komencantoj;\n"
+" „mEmacs<Return>‟ disponigas la manlibron pri Emakso; ktp.\n"
+"\n"
+" Se vi legas per Emakso, alklaku menueron aÅ­ referencon per la 2-a\n"
+" musbutono por elekti la temon.\n"
+"\n"
+"%s\n"
+
+#: install-info/install-info.c:622
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr "%s: ne povas legi (%s) kaj ne povas krei (%s)\n"
+
+#: install-info/install-info.c:715
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: malplena dosiero"
+
+#: install-info/install-info.c:1046 install-info/install-info.c:1086
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "START-INFO-DIR-ENTRY sen para END-INFO-DIR-ENTRY"
+
+#: install-info/install-info.c:1081
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "END-INFO-DIR-ENTRY sen para START-INFO-DIR-ENTRY"
+
+#: install-info/install-info.c:1946 install-info/install-info.c:1956
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr "%s: dir-dosiero estas jam havigita: %s\n"
+
+#: install-info/install-info.c:2036
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: Indiku la Info-dosieron solfoje.\n"
+
+#: install-info/install-info.c:2069
+#, c-format
+msgid "Extra regular expression specified, ignoring `%s'"
+msgstr ""
+
+#: install-info/install-info.c:2081
+#, c-format
+msgid "Error in regular expression `%s': %s"
+msgstr ""
+
+#: install-info/install-info.c:2139
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "troa argumento komandlinia: «%s»"
+
+#: install-info/install-info.c:2143
+msgid "No input file specified; try --help for more information."
+msgstr "Mankas enigdosiero; provu --help por pluaj informoj."
+
+#: install-info/install-info.c:2146
+msgid "No dir file specified; try --help for more information."
+msgstr "Mankas dosiero Info-katalogo (dir); provu --help por pluaj informoj."
+
+#: install-info/install-info.c:2288
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "Nenia informo por Info-katalogo troviÄis en «%s»"
+
+#: install-info/install-info.c:2536
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "TroviÄis nenia informo Info-kataloga pri «%s»; nenio iÄis forigita"
+
+#: lib/xexit.c:54
+msgid "ferror on stdout\n"
+msgstr ""
+
+#: lib/xexit.c:59
+msgid "fflush error on stdout\n"
+msgstr ""
+
+#: makeinfo/cmds.c:582 makeinfo/cmds.c:604
+#, c-format
+msgid "arguments to @%s ignored"
+msgstr "Argumentoj por @%s estas ignoritaj"
+
+#: makeinfo/cmds.c:779
+msgid "January"
+msgstr "januaro"
+
+#: makeinfo/cmds.c:779
+msgid "February"
+msgstr "februaro"
+
+#: makeinfo/cmds.c:779
+msgid "March"
+msgstr "marto"
+
+#: makeinfo/cmds.c:779
+msgid "April"
+msgstr "aprilo"
+
+#: makeinfo/cmds.c:779
+msgid "May"
+msgstr "majo"
+
+#: makeinfo/cmds.c:780
+msgid "June"
+msgstr "junio"
+
+#: makeinfo/cmds.c:780
+msgid "July"
+msgstr "julio"
+
+#: makeinfo/cmds.c:780
+msgid "August"
+msgstr "aÅ­gusto"
+
+#: makeinfo/cmds.c:780
+msgid "September"
+msgstr "septembro"
+
+#: makeinfo/cmds.c:780
+msgid "October"
+msgstr "oktobro"
+
+#: makeinfo/cmds.c:781
+msgid "November"
+msgstr "novembro"
+
+#: makeinfo/cmds.c:781
+msgid "December"
+msgstr "decembro"
+
+#: makeinfo/cmds.c:1131
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "dubinda signo „%c‟ en @var"
+
+#: makeinfo/cmds.c:1174
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "argumento de @sc tuta majuskla, do neniel ÅanÄita"
+
+#: makeinfo/cmds.c:1229
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "„{‟ atendata, sed „%c‟ ricevita"
+
+#: makeinfo/cmds.c:1269
+msgid "end of file inside verb block"
+msgstr "dosierfino ene de pretaranÄita bloko (verb block)"
+
+#: makeinfo/cmds.c:1277
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "„}‟ atendata, sed „%c‟ ricevita"
+
+#: makeinfo/cmds.c:1308
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+"«@strong{Note...}» estigas falsan referencon en Info; alivortigu por eviti "
+"tion"
+
+#: makeinfo/cmds.c:1504
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s arkaikiÄis"
+
+#: makeinfo/cmds.c:1612
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "@sp bezonas ne «%s» sed pozitivan argumenton nombran"
+
+#: makeinfo/cmds.c:2023 makeinfo/footnote.c:81
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "Misa argumento por %c%s"
+
+#: makeinfo/cmds.c:2033 makeinfo/makeinfo.c:4317
+msgid "asis"
+msgstr "asis"
+
+#: makeinfo/cmds.c:2035 makeinfo/cmds.c:2065 makeinfo/makeinfo.c:4319
+msgid "none"
+msgstr "none"
+
+#: makeinfo/cmds.c:2049
+#, c-format
+msgid "Bad argument to @%s"
+msgstr "Misa argumento por @%s"
+
+# set_firstparagraphindent
+#: makeinfo/cmds.c:2063
+msgid "insert"
+msgstr "enÅovu"
+
+#: makeinfo/cmds.c:2079
+#, fuzzy, c-format
+msgid "Bad argument to @%s: %s"
+msgstr "Misa argumento por @%s"
+
+#: makeinfo/cmds.c:2162
+#, c-format
+msgid "Expected @%s on or off, not `%s'"
+msgstr ""
+
+#: makeinfo/cmds.c:2182
+#, c-format
+msgid "Only @%s 10 or 11 is supported, not `%s'"
+msgstr ""
+
+#: makeinfo/defun.c:83
+msgid "Missing `}' in @def arg"
+msgstr "Mankas „}‟ en la argumento de @def"
+
+#: makeinfo/defun.c:711
+#, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr "Nur en „@%s‟-bloko uzeblas „@%s‟."
+
+#: makeinfo/files.c:434
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:637
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr "La «%s» antaŭ la eliga dosierindiko estas preterlasita"
+
+#: makeinfo/files.c:645
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr "«%s» estas preterlasita, ĉar okazas skribado en la ĉefeligujon"
+
+#: makeinfo/files.c:693
+msgid "Output buffer not empty."
+msgstr "Eliga bufro ne malplenas"
+
+#: makeinfo/float.c:181
+#, c-format
+msgid "Requested float type `%s' not previously used"
+msgstr ""
+
+#: makeinfo/float.c:376 makeinfo/float.c:382 makeinfo/index.c:959
+#: makeinfo/index.c:965
+msgid "See "
+msgstr "Vidu "
+
+#: makeinfo/footnote.c:149
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "„%c%s‟ bezonas argumenton „{...}‟, ne nuran «%s»"
+
+#: makeinfo/footnote.c:164
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "Mankas „}‟ por la piednoto «%s»"
+
+#: makeinfo/footnote.c:197
+msgid "Footnote defined without parent node"
+msgstr "Piednoto difinita sen patra nodo"
+
+#: makeinfo/footnote.c:209
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "Maleblas fari piednoton al piednoto"
+
+#: makeinfo/footnote.c:301 makeinfo/index.c:187
+msgid "Footnotes"
+msgstr "Piednotoj"
+
+#: makeinfo/html.c:91
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr "%s: Ne prosperis malfermi CSS-dosieron: %s"
+
+#: makeinfo/html.c:180
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr "%s:%d: CSS-dosiero finiÄis en komento"
+
+#: makeinfo/html.c:426
+msgid "[unexpected] no html tag to pop"
+msgstr "[neatendite] mankas HTML-etikedo por elstakigo"
+
+#: makeinfo/html.c:800
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "[neatendite] misa nodnomo: «%s»"
+
+#: makeinfo/index.c:167
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "Nekonata indekso «%s»"
+
+#: makeinfo/index.c:232
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr "Info ne povas trakti „:‟ en indeksa artikolo «%s»"
+
+#: makeinfo/index.c:410
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "Jam estas indekso «%s»"
+
+#: makeinfo/index.c:453
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "Nekonata indekso «%s» kajaŭ «%s» en @synindex"
+
+#: makeinfo/index.c:676
+msgid "(line )"
+msgstr "(linio )"
+
+#: makeinfo/index.c:684
+#, c-format
+msgid "(line %*d)"
+msgstr "(linio %*d)"
+
+#: makeinfo/index.c:765
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "Nekonata indekso «%s» en @printindex"
+
+#: makeinfo/index.c:834
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "Artikolo por indekso «%s» estas ekster iu ajn nodo"
+
+#: makeinfo/index.c:837 makeinfo/index.c:873
+msgid "(outside of any node)"
+msgstr "(ekster iu ajn nodo)"
+
+#: makeinfo/insertion.c:161
+msgid "@item not allowed in argument to @itemize"
+msgstr "„@itemize‟ ne rajtas havi argumenton „@item‟"
+
+#: makeinfo/insertion.c:242
+msgid "Broken-Type in insertion_type_pname"
+msgstr "Misa tipo en la funkcio insertion_type_pname"
+
+#: makeinfo/insertion.c:338
+msgid "Enumeration stack overflow"
+msgstr "Troo en la stako de enumeracioj"
+
+#: makeinfo/insertion.c:370
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "mankas sekva enumeracia litero, rekomencite ekde %c"
+
+#: makeinfo/insertion.c:639
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s bezonas argumenton: la aranÄilon por %citem"
+
+#: makeinfo/insertion.c:727
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr "La blokoj %cfloat ne rajtas ingiÄi unu en alia"
+
+#: makeinfo/insertion.c:981
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "„@end‟ atendis „%s‟, sed renkontis „%s‟"
+
+#: makeinfo/insertion.c:1349
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "Mankas para „%cend %s‟"
+
+#: makeinfo/insertion.c:1618
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s bezonas literon aÅ­ ciferon"
+
+#: makeinfo/insertion.c:1718
+msgid "end of file inside verbatim block"
+msgstr "dosierfino ene de pretaranÄita bloko"
+
+#: makeinfo/insertion.c:1942
+#, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "@%s estas sensenca ekster bloko „@float‟"
+
+#: makeinfo/insertion.c:1978
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "@menu jam antaŭ la unua @nodo; nodo „Top‟ kreitas"
+
+#: makeinfo/insertion.c:1979
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr "eble via @top-nodo staru sub @ifnottex anstataÅ­ sub @ifinfo?"
+
+#: makeinfo/insertion.c:1991
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "@detailmenu renkontita jam antaŭ la unua nodo; nodo „Top‟ kreitas"
+
+#: makeinfo/insertion.c:2047
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr "@%s sencas nur en bloko „@titlepage‟ aŭ „@quotation‟"
+
+#: makeinfo/insertion.c:2061
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "@%s ne sencas ekster bloko „@titlepage‟"
+
+#: makeinfo/insertion.c:2092
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "Mankas para „%c%s‟"
+
+#: makeinfo/insertion.c:2097
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "„%c%s‟ bezonas post si ion"
+
+#: makeinfo/insertion.c:2103
+#, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "Misa argumento «%s» por «%s»; estos uzata «%s»"
+
+#: makeinfo/insertion.c:2200
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "@%s estas sensenca ene de bloko „@%s‟"
+
+#: makeinfo/insertion.c:2209
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "@itemx estas sensenca ene de bloko «%s»"
+
+#: makeinfo/insertion.c:2383
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "%c%s renkontita ekster „insertion block‟"
+
+#: makeinfo/lang.c:1218
+#, c-format
+msgid "no default territory known for language `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:1281
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr "%s ne estas valida lingvokodo laÅ­ ISO 639"
+
+#: makeinfo/lang.c:1399
+#, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "Nekonata nomo de kodosistemo: «%s»"
+
+#: makeinfo/lang.c:1407
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "Pardonon, la kodo «%s» ne estas disponebla"
+
+#: makeinfo/lang.c:1492
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "misa kodoprezento: «%s»"
+
+#: makeinfo/lang.c:1800
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr "%c%s atendas argumenton „i‟ aŭ „j‟, ne „%c‟"
+
+#: makeinfo/lang.c:1804
+#, c-format
+msgid "%c%s expects a single character `i' or `j' as argument"
+msgstr "%c%s akceptas nur solsignan argumenton „i‟ aŭ „j‟"
+
+#: makeinfo/macro.c:128
+#, c-format
+msgid "macro `%s' previously defined"
+msgstr "makroo «%s» jam difinita antaŭe"
+
+#: makeinfo/macro.c:132
+#, c-format
+msgid "here is the previous definition of `%s'"
+msgstr "ĉi tie estas la antaŭa difino de «%s»"
+
+#: makeinfo/macro.c:359
+#, c-format
+msgid "\\ in macro expansion followed by `%s' instead of parameter name"
+msgstr "Dum makrogenerado: \\ sekvata de «%s» (anstataŭ de nomo de parametro)"
+
+#: makeinfo/macro.c:401
+#, c-format
+msgid "Macro `%s' called on line %d with too many args"
+msgstr "Makroo «%s» en la linio %d havas troan argumenton"
+
+#: makeinfo/macro.c:580
+#, c-format
+msgid "%cend macro not found"
+msgstr "makroo %cend ne troviÄis"
+
+#: makeinfo/macro.c:591
+msgid "@allow-recursion is deprecated; please use @rmacro instead"
+msgstr ""
+
+#: makeinfo/macro.c:606
+msgid "@quote-arg is deprecated; arguments are quoted by default"
+msgstr ""
+
+#: makeinfo/macro.c:649
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "misa @end %s por @%s"
+
+#: makeinfo/makeinfo.c:188
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "Tro multe da eraroj! Halt'.\n"
+
+#: makeinfo/makeinfo.c:306
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: averto: "
+
+#: makeinfo/makeinfo.c:325 makeinfo/makeinfo.c:2340
+#, c-format
+msgid "Misplaced %c"
+msgstr "Misloka %c"
+
+#: makeinfo/makeinfo.c:344
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Por pluaj detaloj tajpu „%s --help‟.\n"
+
+#: makeinfo/makeinfo.c:347
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "Uzmaniero: %s [OPCIO]... TEXINFO-DOSIERO...\n"
+
+#: makeinfo/makeinfo.c:350
+msgid ""
+"Translate Texinfo source documentation to various other formats, by default\n"
+"Info files suitable for reading online with Emacs or standalone GNU Info.\n"
+msgstr ""
+"Traduku fontan Texinfo-dokumenton en diversajn aliajn formojn, defaÅ­lte en\n"
+"Info-dosierojn taÅ­gajn por dialoga legado per Emakso aÅ­ aÅ­tonoma GNU-Info.\n"
+
+#: makeinfo/makeinfo.c:354
+#, fuzzy, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\n"
+" --document-language=STR locale to use in translating Texinfo keywords\n"
+" for the output document (default C).\n"
+" --force preserve output even if errors.\n"
+" --help display this help and exit.\n"
+" --no-validate suppress node cross-reference validation.\n"
+" --no-warn suppress warnings (but not errors).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"Äœeneralaj opcioj:\n"
+" --error-limit=NOM\t Ĉesu post NOM eraroj (defaŭlte %d)\n"
+" --force\t\t Retenu eligaĵon eĉ post eraroj\n"
+" --help\t\t Eligu ĉi tiun helpon kaj finu\n"
+" --no-validate\t Ne kontrolu la internodajn referencojn\n"
+" --no-warn\t\t Ne eligu avertojn (ne koncernas erarmesaÄojn)\n"
+" --reference-limit=N Avertu pri pli ol N referencoj (defaÅ­lte %d)\n"
+" -v, --verbose\t\t Rakontu kio estas farata\n"
+" --version\t\t Eligu la versio-informon kaj eliru\n"
+
+#: makeinfo/makeinfo.c:369
+#, fuzzy, no-wrap
+msgid ""
+"Output format selection (default is to produce Info):\n"
+" --docbook output Docbook XML rather than Info.\n"
+" --html output HTML rather than Info.\n"
+" --xml output Texinfo XML rather than Info.\n"
+" --plaintext output plain text rather than Info.\n"
+msgstr ""
+"Por elekti celformon (defaÅ­lte, Info):\n"
+" --docbook\t\t Generu en DocBook anstataÅ­ en Info\n"
+" --html\t\t Generu en HTML anstataÅ­ en Info\n"
+" --xml\t\t Generu en XML (TexinfoML) anstataÅ­ en Info\n"
+" --plaintext\t Generu platan tekston anstataÅ­ Infoon\n"
+
+#: makeinfo/makeinfo.c:377
+#, fuzzy
+msgid ""
+"General output options:\n"
+" -E, --macro-expand=FILE output macro-expanded source to FILE,\n"
+" ignoring any @setfilename.\n"
+" --no-headers suppress node separators, Node: lines, and "
+"menus\n"
+" from Info output (thus producing plain "
+"text)\n"
+" or from HTML (thus producing shorter "
+"output);\n"
+" also, write to standard output by default.\n"
+" --no-split suppress the splitting of Info or HTML "
+"output,\n"
+" generate only one output file.\n"
+" --number-sections output chapter and sectioning numbers.\n"
+" -o, --output=FILE output to FILE (or directory if split HTML).\n"
+msgstr ""
+"Äœeneralaj opcioj generadaj:\n"
+" -E, --macro-expand DOSIER Konservu makrotraktitan fontaĵon en DOSIERo,\n"
+" sen atenti ĉiajn @setfilename\n"
+" --no-headers Generu platan tekston, sen dispartigi en "
+"nodojn,\n"
+" sen linioj «Node:» kaj menuoj; krome, eligu\n"
+" en la ĉefeligujon manke de --output\n"
+" --no-split Ne disfendu grandan Info- aÅ­ HTML-dosieron,\n"
+" faru unu solan rezultan dosieron\n"
+" --number-sections Generu kun la numeroj de ĉapitroj, sekcioj ktp\n"
+" -o, --output=DOSIER Skribu en DOSIERon (DOSIERujon, por fenda HTML)\n"
+
+#: makeinfo/makeinfo.c:391
+#, fuzzy, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --disable-encoding do not output accented and special characters\n"
+" in Info output based on @documentencoding.\n"
+" --enable-encoding override --disable-encoding (default).\n"
+" --fill-column=NUM break Info lines at NUM characters (default %"
+"d).\n"
+" --footnote-style=STYLE output footnotes in Info according to STYLE:\n"
+" `separate' to put them in their own node;\n"
+" `end' to put them at the end of the node, "
+"in\n"
+" which they are defined (this is the "
+"default).\n"
+" --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %"
+"d).\n"
+" If VAL is `none', do not indent; if VAL is\n"
+" `asis', preserve existing indentation.\n"
+" --split-size=NUM split Info files at size NUM (default %d).\n"
+msgstr ""
+"Opcioj por Info kaj plata teksto:\n"
+" --enable-encoding\t Eligu diakritaĵojn kaj specialajn signojn\n"
+"\t\t\t\tlaÅ­ @documentencoding\n"
+" --fill-column=N\t Rompu Info-liniojn post N signoj (defaÅ­lte %d)\n"
+" --footnote-style=STILO AranÄu la piednotojn laÅ­ STILO:\n"
+"\t\t\t\t„separate‟ -- loku ilin en apartan nodon;\n"
+"\t\t\t\t„end‟ -- loku ilin fine de la nodo en kiu\n"
+"\t\t\t\t\t ili estas difinitaj (la defaÅ­lto)\n"
+" --paragraph-indent=VAL Alinea enÅovo estu VAL spacetoj (defaÅ­lte %"
+"d);\n"
+"\t\t\t\tse VAL estas „none‟, ne enÅovu;\n"
+"\t\t\t\tse VAL estas „asis‟, obeu la fontan enÅovon\n"
+" --split-size=N\t Fendu en dosierojn po N (defaÅ­lte %d)\n"
+
+#: makeinfo/makeinfo.c:409
+#, fuzzy
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+" --css-ref=URL generate reference to a CSS file.\n"
+" --internal-links=FILE produce list of internal links in FILE.\n"
+" --transliterate-file-names\n"
+" produce file names in ASCII transliteration.\n"
+msgstr ""
+"Opcioj por HTML:\n"
+" --css-include=DOSIERO Inkludu DOSIEROn en <style>-etikedon de "
+"HTMLaĵo;\n"
+"\t\t\t\tlegu la ĉefenigujon, se DOSIERO estas „-‟\n"
+
+#: makeinfo/makeinfo.c:419
+#, fuzzy, c-format
+msgid ""
+"Options for XML and Docbook:\n"
+" --output-indent=VAL indent XML elements by VAL spaces (default %"
+"d).\n"
+" If VAL is 0, ignorable whitespace is "
+"dropped.\n"
+msgstr ""
+"Opcioj por XML kaj Docbook:\n"
+" --output-indent=VAL DeÅovu XML-elementojn je VAL spacetoj\n"
+"\t\t\t\t(defaÅ­lte %d). Se VAL estas 0, forigu\n"
+"\t\t\t\tsensignifajn spacetojn\n"
+"\n"
+
+#: makeinfo/makeinfo.c:426
+msgid ""
+"Input file options:\n"
+" --commands-in-node-names allow @ commands in node names.\n"
+" -D VAR define the variable VAR, as with @set.\n"
+" -I DIR append DIR to the @include search path.\n"
+" -P DIR prepend DIR to the @include search path.\n"
+" -U VAR undefine the variable VAR, as with @clear.\n"
+msgstr ""
+"Opcioj pri la fontodosieroj:\n"
+" --commands-in-node-names Permesu @-komandojn en nodnomoj\n"
+" -D VAR\t\t Difinu la variablon VAR, kvazaÅ­ per @set\n"
+" -I UJO\t\t Alkroĉu dosierUJOn al la serĉvojo de @include\n"
+" -P UJO\t\t Antaŭmetu dosierUJOn al la serĉvojo de @include\n"
+" -U VAR\t\t Maldifinu la variablon VAR, kiel per @clear\n"
+
+#: makeinfo/makeinfo.c:435
+msgid ""
+"Conditional processing in input:\n"
+" --ifdocbook process @ifdocbook and @docbook even if\n"
+" not generating Docbook.\n"
+" --ifhtml process @ifhtml and @html even if not generating HTML.\n"
+" --ifinfo process @ifinfo even if not generating Info.\n"
+" --ifplaintext process @ifplaintext even if not generating plain text.\n"
+" --iftex process @iftex and @tex; implies --no-split.\n"
+" --ifxml process @ifxml and @xml.\n"
+" --no-ifdocbook do not process @ifdocbook and @docbook text.\n"
+" --no-ifhtml do not process @ifhtml and @html text.\n"
+" --no-ifinfo do not process @ifinfo text.\n"
+" --no-ifplaintext do not process @ifplaintext text.\n"
+" --no-iftex do not process @iftex and @tex text.\n"
+" --no-ifxml do not process @ifxml and @xml text.\n"
+"\n"
+" Also, for the --no-ifFORMAT options, do process @ifnotFORMAT text.\n"
+msgstr ""
+"Kondiĉa traktado ĉe enigo:\n"
+" --ifdocbook\t Traktu la pecojn sub @ifdocbook kaj @docbook eĉ se\n"
+"\t\t ne Docbook estas generata\n"
+" --ifhtml\t Traktu la pecojn sub @ifhtml kaj @html eĉ se ne\n"
+"\t\t HTML estas generata\n"
+" --ifinfo\t Traktu la pecojn sub @ifinfo eĉ se ne Info generatas\n"
+" --ifplaintext\t Traktu la pecojn sub @ifplaintext eĉ se alia formo ol\n"
+"\t\t plata teksto estas generata\n"
+" --iftex\t Traktu la pecojn sub @iftex kaj @tex; implicas --no-split\n"
+" --ifxml\t Traktu la pecojn sub @ifxml kaj @xml\n"
+" --no-ifdocbook Ne traktu la pecojn sub @ifdocbook kaj @docbook\n"
+" --no-ifhtml\t Ne traktu la pecojn sub @ifhtml kaj @html\n"
+" --no-ifinfo\t Ne traktu la pecojn sub @ifinfo\n"
+" --no-ifplaintext Ne traktu la pecojn sub @ifplaintext\n"
+" --no-iftex\t Ne traktu la pecojn sub @iftex kaj @tex\n"
+" --no-ifxml\t Ne traktu la pecojn sub @ifxml kaj @xml\n"
+"\n"
+" Krome, ĉe la opcioj --no-ifFORMO, ja traktu la pecojn sub @ifnotFORMO.\n"
+
+#: makeinfo/makeinfo.c:454
+msgid ""
+" The defaults for the @if... conditionals depend on the output format:\n"
+" if generating HTML, --ifhtml is on and the others are off;\n"
+" if generating Info, --ifinfo is on and the others are off;\n"
+" if generating plain text, --ifplaintext is on and the others are off;\n"
+" if generating XML, --ifxml is on and the others are off.\n"
+msgstr ""
+"La defaÅ­lta konduto de la @if...-frazoj dependas je la celata formo:\n"
+"se HTML estas generata, --ifhtml aktivas kaj la ceteraj, malaktivas;\n"
+"ĉe Info-generado, --ifinfo aktivas kaj la ceteraj, malaktivas; \n"
+"se plata teksto estas generata, --ifplaintext aktivas kaj la ceteraj,\n"
+"malaktivas; ĉe XML-generado, --ifxml aktivas kaj la ceteraj, malaktivas.\n"
+
+#: makeinfo/makeinfo.c:462
+#, fuzzy
+msgid ""
+"Examples:\n"
+" makeinfo foo.texi write Info to foo's @setfilename\n"
+" makeinfo --html foo.texi write HTML to @setfilename\n"
+" makeinfo --xml foo.texi write Texinfo XML to @setfilename\n"
+" makeinfo --docbook foo.texi write DocBook XML to @setfilename\n"
+" makeinfo --no-headers foo.texi write plain text to standard "
+"output\n"
+"\n"
+" makeinfo --html --no-headers foo.texi write html without node lines, "
+"menus\n"
+" makeinfo --number-sections foo.texi write Info with numbered sections\n"
+" makeinfo --no-split foo.texi write one Info file however big\n"
+msgstr ""
+"Ekzemploj:\n"
+" makeinfo UM.texi\t\t konservu Info laÅ­ @setfilename\n"
+" makeinfo --html UM.texi\t konservu HTML laÅ­ @setfilename\n"
+" makeinfo --xml UM.texi\t\t konservu Texinfo-XML laÅ­ @setfilename\n"
+" makeinfo --docbook UM.texi\t konservu DocBook-XML laÅ­ @setfilename\n"
+" makeinfo --no-headers -o - UM.texi sendu platan tekston en ĉefeligujon\n"
+"\n"
+" makeinfo --html --no-headers UM.texi konservu HTML sen la linioj «Node:»\n"
+" makeinfo --number-sections UM.texi konservu Infoon kun sekcinumeroj\n"
+" makeinfo --no-split UM.texi\t faru unu Info-dosieron, kiom ajn "
+"grandan\n"
+
+#: makeinfo/makeinfo.c:622
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr "%s: Nekonata valoro de TEXINFO_OUTPUT_FORMAT: «%s». Ignorita.\n"
+
+#: makeinfo/makeinfo.c:670 makeinfo/makeinfo.c:696 makeinfo/makeinfo.c:720
+#: makeinfo/makeinfo.c:780
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr "%s: La argumento %s devas esti nombro, ne «%s».\n"
+
+#: makeinfo/makeinfo.c:683
+#, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "%s: Ne prosperis malfermi makrotraktadan eligdosieron «%s»"
+
+#: makeinfo/makeinfo.c:688
+#, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "%s: Ripeta dosierindiko «%s» por makrotraktada eligo estas ignorita.\n"
+
+#: makeinfo/makeinfo.c:733
+#, fuzzy, c-format
+msgid "%s: could not open internal links output `%s'"
+msgstr "%s: Ne prosperis malfermi makrotraktadan eligdosieron «%s»"
+
+#: makeinfo/makeinfo.c:738
+#, fuzzy, c-format
+msgid "%s: ignoring second internal links output `%s'.\n"
+msgstr "%s: Ripeta dosierindiko «%s» por makrotraktada eligo estas ignorita.\n"
+
+#: makeinfo/makeinfo.c:751
+#, c-format
+msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
+msgstr ""
+"%s: Post „--paragraph-indent‟ estu nombro, „none‟ aŭ „asis‟, ne „%s‟.\n"
+
+#: makeinfo/makeinfo.c:769
+#, c-format
+msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
+msgstr "%s: Post --footnote-style estu „separate‟ aŭ „end‟, ne „%s‟.\n"
+
+#: makeinfo/makeinfo.c:844
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: mankas dosiera argumento.\n"
+
+#: makeinfo/makeinfo.c:1041 makeinfo/makeinfo.c:4166
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr "Misa uzo de plurlinia komando «%c%s»."
+
+#: makeinfo/makeinfo.c:1044
+#, c-format
+msgid "Expected `%s'"
+msgstr "«%s» atendatas"
+
+#: makeinfo/makeinfo.c:1521
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "Provo krei dosierujon «%s» malsukcesis: %s"
+
+#: makeinfo/makeinfo.c:1567
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "Neniu «%s» trovita en «%s»"
+
+#: makeinfo/makeinfo.c:1647
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr "%s: Makrotraktitaĵo ne trafos en la ĉefeligujon ĉar Info iras tien.\n"
+
+#: makeinfo/makeinfo.c:1677
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "%s-dosiero «%s» estas generata el «%s».\n"
+
+#: makeinfo/makeinfo.c:1744
+#, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: La eligdosiero «%s» por makrotraktitaĵo forigitas ĉar estis eraroj;\n"
+"uzu la opcion --force por Äin reteni.\n"
+
+#: makeinfo/makeinfo.c:1799
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: La eligdosiero «%s» forigitas ĉar estis eraroj;\n"
+"uzu la opcion --force por Äin reteni.\n"
+
+#: makeinfo/makeinfo.c:1818
+#, fuzzy, c-format
+msgid ""
+"%s: Removing internal links output file `%s' due to errors; use --force to "
+"preserve.\n"
+msgstr ""
+"%s: La eligdosiero «%s» forigitas ĉar estis eraroj;\n"
+"uzu la opcion --force por Äin reteni.\n"
+
+#: makeinfo/makeinfo.c:2113
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "Nekonata komando «%s»."
+
+#: makeinfo/makeinfo.c:2135
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr "Uzu vinkulojn por pasigi al „@%s‟ komandan argumenton"
+
+#: makeinfo/makeinfo.c:2394
+#, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s postulas vinkulojn"
+
+#: makeinfo/makeinfo.c:2407
+msgid "Unmatched }"
+msgstr "Nepara „}‟"
+
+#: makeinfo/makeinfo.c:2455
+msgid "NO_NAME!"
+msgstr "SEN_NOMO!"
+
+#: makeinfo/makeinfo.c:2476
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s sen „}‟"
+
+#: makeinfo/makeinfo.c:3482
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "por HTML, la dosiero «%s» en la komando @image estas nelegebla: %s"
+
+#: makeinfo/makeinfo.c:3488
+#, c-format
+msgid "No such file `%s'"
+msgstr "Ne estas tia dosiero: «%s»"
+
+#: makeinfo/makeinfo.c:3624
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "bilddosiero «%s» (por teksto) estas nelegebla: %s"
+
+#: makeinfo/makeinfo.c:3633
+msgid "@image missing filename argument"
+msgstr "mankas dosiera argumento en la komando @image"
+
+#: makeinfo/makeinfo.c:3851
+#, c-format
+msgid "undefined flag: %s"
+msgstr "Nedifinita flago: %s"
+
+#: makeinfo/makeinfo.c:3852
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{Mankas Valoro Por «%s»}"
+
+#: makeinfo/makeinfo.c:3904
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s bezonas nomon"
+
+#: makeinfo/makeinfo.c:4010
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "Pli frue ol la para @end %s renkontiÄis dosierfino"
+
+#: makeinfo/makeinfo.c:4258
+#, c-format
+msgid "`%.40s...' is too long for expansion; not expanded"
+msgstr "„%.40s...‟ tro longas por malvolvo; malvolvo ne okazos"
+
+#: makeinfo/multi.c:116
+msgid "Missing } in @multitable template"
+msgstr "Mankas „}‟ en la Åablono de @multitable"
+
+#: makeinfo/multi.c:260
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "la misa teksto «%s» post @multitable estas ignorita"
+
+#: makeinfo/multi.c:400
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "Tro da kolumnoj en elemento de „multitable‟ (%d maksimume)"
+
+#: makeinfo/multi.c:563
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "[neatendite] maleblas elekti %d-an kolumnon en „multitable‟."
+
+#: makeinfo/multi.c:592
+msgid "ignoring @tab outside of multitable"
+msgstr "komando @tab ekster „multitable‟; ignorita"
+
+#: makeinfo/multi.c:640
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** Multekolumna eligo el la lasta linio:\n"
+
+#: makeinfo/multi.c:643
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* kolumno %d-a: eligaĵo = %s\n"
+
+#: makeinfo/node.c:279
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "Nodo «%s» jam difinita en la linio %d"
+
+#: makeinfo/node.c:647
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "Estas aranÄata la nodo «%s» ...\n"
+
+#: makeinfo/node.c:714
+#, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr "Nodo «%s» bezonas subdividan komandon (ekz-e %c%s)"
+
+#: makeinfo/node.c:878
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "Mankas nodnomo por la komando „%c%s‟"
+
+#: makeinfo/node.c:919 makeinfo/node.c:1163
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr "Dosiernoma kolizio por la ankro «%s» kaj la nodo «%s»"
+
+#: makeinfo/node.c:922
+msgid "This @anchor command ignored; references to it will not work"
+msgstr "Ĉi tiu @anchor-komando estas ignorita; la referencoj al Äi ne funkcios"
+
+#: makeinfo/node.c:924 makeinfo/node.c:1166
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr "Alinomu la ankron aŭ uzu la opcion „--no-split‟"
+
+#: makeinfo/node.c:954
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr "Nekonvena signoĉeno fine de disfendita HTML-dosiero «%s»"
+
+#: makeinfo/node.c:1160
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr "Dosiernoma kolizio por la ankroj «%s» kaj «%s»"
+
+#: makeinfo/node.c:1165
+msgid "@anchor command ignored; references to it will not work"
+msgstr "Ignorita @anchor-komando; la referencoj al Äi ne funkcios"
+
+#: makeinfo/node.c:1362
+#, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr "%s referencas neekzistantan nodon «%s» (ĉu eraro en sekciaranÄo?)"
+
+#: makeinfo/node.c:1462
+#, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr ""
+"La kampo „Next‟ de la nodo «%s» ne estas reciprokita (ĉu misa sekciaranÄo?)"
+
+#: makeinfo/node.c:1465
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "Ĉi tiu nodo («%s») havas eraran kampon „Prev‟"
+
+#: makeinfo/node.c:1520
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "La kampo „Prev‟ de la nodo «%s» ne estas reciprokita"
+
+#: makeinfo/node.c:1524
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "Ĉi tiu nodo («%s») havas eraran kampon „Next‟"
+
+#: makeinfo/node.c:1536
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr "«%s» malhavas kampon „Up‟ (ĉu eraro en sekciaranÄo?)"
+
+#: makeinfo/node.c:1605
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr "En \"%s„ mankas menuero por ‟%s„, malgraŭ ties ligilo ‟Up„‟"
+
+#: makeinfo/node.c:1637
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "la nodo «%s» ne estas referencita"
+
+#: makeinfo/node.c:1727
+#, c-format
+msgid "Removing %s\n"
+msgstr "%s estas forigata\n"
+
+#: makeinfo/node.c:1731
+#, c-format
+msgid "Can't remove file `%s': %s"
+msgstr "Ne prosperis forigi dosierujon «%s»: %s"
+
+#: makeinfo/sectioning.c:122
+#, c-format
+msgid "Appendix %c"
+msgstr "Aldono %c"
+
+#: makeinfo/sectioning.c:467
+#, c-format
+msgid "Internal error (search_sectioning) `%s'!"
+msgstr "Interna eraro (search_sectioning) „%s‟!"
+
+#: makeinfo/sectioning.c:563
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "Interna eraro (search_sectioning) «%s»!"
+
+#: makeinfo/sectioning.c:624
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "%c%s arkaikiÄis; uzu %c%s anstataÅ­e"
+
+#: makeinfo/sectioning.c:640
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "Jam estas nodo kun sekcio %ctop"
+
+#: makeinfo/sectioning.c:648
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "Jen estas la nodo %ctop"
+
+#: makeinfo/sectioning.c:664
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "%ctop aperis pli frue ol %cnode; la defaÅ­lto uzota estas %s"
+
+#: makeinfo/xml.c:1669
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "dosiero «%s» en la komando @image estas nelegebla: %s"
+
+#: makeinfo/xml.c:2014
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+"@headitem lastelemente en @multitable rezultigas nevalidajn Docbook-"
+"dokumentojn"
+
+#: makeinfo/xml.c:2150
+msgid "of"
+msgstr "de"
+
+#: makeinfo/xml.c:2155
+msgid "on"
+msgstr "sur"
+
+#: makeinfo/xref.c:127
+msgid "First argument to cross-reference may not be empty"
+msgstr ""
+
+#: makeinfo/xref.c:252
+#, c-format
+msgid "Empty file name for HTML cross reference in `%s'"
+msgstr ""
+
+#: makeinfo/xref.c:387
+msgid "End of file reached while looking for `.' or `,'"
+msgstr ""
+
+#: makeinfo/xref.c:390
+#, c-format
+msgid "`.' or `,' must follow @%s, not `%c'"
+msgstr ""
+
+#: makeinfo/xref.c:392
+#, fuzzy
+msgid "for cross-references in parentheses, use @pxref"
+msgstr "Neniu referenco en ĉi tiu nodo."
+
+#: makeinfo/xref.c:435
+msgid "First argument to @inforef may not be empty"
+msgstr ""
+
+#: util/texindex.c:223
+msgid "display this help and exit"
+msgstr "eligu ĉi tiun helpon kaj eliru"
+
+#: util/texindex.c:225
+msgid "send output to FILE"
+msgstr "sendu la eligaĵon en DOSIEROn"
+
+#: util/texindex.c:227
+msgid "display version information and exit"
+msgstr "eligu la uzatan version kaj eliru"
+
+#: util/texindex.c:237
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "Uzmaniero: %s [OPCIO]... DOSIERO...\n"
+
+#: util/texindex.c:238
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr "Generu ordigitan indekson por ĉiu TeX-a elig-DOSIERO.\n"
+
+#: util/texindex.c:241
+#, c-format
+msgid "Usually FILE... is specified as `foo.%c%c' for a document `foo.texi'.\n"
+msgstr "Kutime DOSIERO... estas „umo.%c%c‟ por dokumento „umo.texi‟.\n"
+
+#: util/texindex.c:243
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Opcioj:\n"
+
+#: util/texindex.c:743
+#, c-format
+msgid "failure reopening %s"
+msgstr "fiasko ĉe remalfermo de %s"
+
+#: util/texindex.c:758 util/texindex.c:786
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: ne indeksa dosiero laÅ­ Texinfo"
+
+#: util/texindex.c:993
+#, c-format
+msgid "No page number in %s"
+msgstr "Mankas paÄnumero en %s"
+
+#: util/texindex.c:1066
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr "la artikolo %s sekvas artikolon kun kromnomo"
+
+#~ msgid ""
+#~ "\\%-10[search] Search forward for a specified string\n"
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr ""
+#~ "\\%-10[search] Serĉu sube aperon de donita signoĉeno kaj\n"
+#~ " vizitu la nodon en kiu troviÄos la sekva apero.\n"
+
+#~ msgid ""
+#~ "\\%-10[goto-node] Move to node specified by name.\n"
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ msgstr ""
+#~ "\\%-10[goto-node] Iru al nodo indikita per nomo.\n"
+#~ " AnkaÅ­ la dosiernomon vi povas inkludi, kiel en (DOSIERO)NODO.\n"
+
+#, fuzzy
+#~ msgid "\\%-10[next-node] Move to the next node of current section.\n"
+#~ msgstr ""
+#~ "\\%-10[next-node] Iru al la tujsekva („Next‟) nodo de ĉi tiu nodo.\n"
+
+#~ msgid ""
+#~ "\\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+#~ "node] (DIR)'.\n"
+#~ msgstr ""
+#~ "\\%-10[dir-node] Iru al la ĉefkataloga nodo. Ekvivalentas al \"g (DIR)"
+#~ "\".\n"
+
+#~ msgid ""
+#~ "\\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] "
+#~ "Top'.\n"
+#~ msgstr ""
+#~ "\\%-10[top-node] Iru al la radika nodo. Ekvivalentas al „g Top‟.\n"
+
+#~ msgid ""
+#~ "\\%-10[search-backward] Search backward for a specified string\n"
+#~ " and select the node in which the previous occurrence is "
+#~ "found.\n"
+#~ msgstr ""
+#~ "\\%-10[search-backward] Serĉu supre aperon de donita signoĉeno kaj\n"
+#~ " vizitu la nodon en kiu troviÄos la ĵusantaÅ­a apero.\n"
+
+#~ msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+#~ msgstr "--- Uzu „\\[history-node]‟ aŭ „\\[kill-node]‟ por eliri ---\n"
+
+#, fuzzy
+#~ msgid "\\%-10[move-to-prev-xref] Skip to previous hypertext link [*].\n"
+#~ msgstr ""
+#~ "\\%-10[move-to-prev-xref] Saltu sur la sekvan hipertekstan ligilon en ĉi "
+#~ "tiu nodo.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]... [MENU-ITEM...]\n"
+#~ "\n"
+#~ "Read documentation in Info format.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --apropos=STRING look up STRING in all indices of all "
+#~ "manuals.\n"
+#~ " -d, --directory=DIR add DIR to INFOPATH.\n"
+#~ " --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+#~ " -f, --file=FILENAME specify Info file to visit.\n"
+#~ " -h, --help display this help and exit.\n"
+#~ " --index-search=STRING go to node pointed by index entry STRING.\n"
+#~ " -n, --node=NODENAME specify nodes in first visited Info file.\n"
+#~ " -o, --output=FILENAME output selected nodes to FILENAME.\n"
+#~ " -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+#~ " --no-raw-escapes output escapes as literal text.\n"
+#~ " --restore=FILENAME read initial keystrokes from FILENAME.\n"
+#~ " -O, --show-options, --usage go to command-line options node.\n"
+#~ "%s --subnodes recursively output menu items.\n"
+#~ " -w, --where, --location print physical location of Info file.\n"
+#~ " --vi-keys use vi-like and less-like key bindings.\n"
+#~ " --version display version information and exit.\n"
+#~ "\n"
+#~ "The first non-option argument, if present, is the menu entry to start "
+#~ "from;\n"
+#~ "it is searched for in all `dir' files along INFOPATH.\n"
+#~ "If it is not present, info merges all `dir' files and shows the result.\n"
+#~ "Any remaining arguments are treated as the names of menu\n"
+#~ "items relative to the initial node visited.\n"
+#~ "\n"
+#~ "Examples:\n"
+#~ " info show top-level dir menu\n"
+#~ " info emacs start at emacs node from top-level dir\n"
+#~ " info emacs buffers start at buffers node within emacs manual\n"
+#~ " info --show-options emacs start at node with emacs' command line "
+#~ "options\n"
+#~ " info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+#~ " info -f ./foo.info show file ./foo.info, not searching dir\n"
+#~ msgstr ""
+#~ "Sintakso: %s [OPCIO]... [MENUERO...]\n"
+#~ "\n"
+#~ "Ebligas legi dokumentaron prezentitan en Info.\n"
+#~ "\n"
+#~ "Opcioj:\n"
+#~ " --apropos=TEMO\t Serĉu TEMOn en ĉiuj indeksoj de ĉiuj dokumentoj.\n"
+#~ "-d, --directory=UJO\t Aldonu la dosierUJOn al INFOPATH.\n"
+#~ " --dribble=DOSIERO\t Notu la klavofrapojn de la uzanto en DOSIERO.\n"
+#~ "-f, --file=DOSIERO\t Vizitu la Info-DOSIEROn.\n"
+#~ "-h, --help\t\t Eligu ĉi tiun helpeton kaj finu.\n"
+#~ " --index-search=ĈENO\t Vizitu nodon referencatan per indeksartikolo "
+#~ "ĈENO.\n"
+#~ "-n, --node=NODO\t\t Komencu per NODO.\n"
+#~ "-o, --output=DOSIERO\t Eligu la elektitajn nodojn en DOSIEROn.\n"
+#~ "-R, --raw-escapes\t Eligu ANSI-eskapilojn «krude» (la defaŭlto)\n"
+#~ " --no-raw-escapes\t Eligu ANSI-eskapilojn kiel tekstajn signojn\n"
+#~ " --restore=DOSIERO\t Legu la klavofrapojn el DOSIERO.\n"
+#~ "-O, --show-options, --usage Montru la nodon pri komandliniaj opcioj.\n"
+#~ "%s --subnodes\t\t Rekursie eligu la menuerojn.\n"
+#~ " -w, --where, --location Eligu la fizikan situon de la info-dosiero\n"
+#~ " --vi-keys\t\t Uzu vi-eskan kaj less-eskan klavararanÄon\n"
+#~ " --version\t\t Eligu la version de la programo kaj finu.\n"
+#~ "\n"
+#~ "La unua neopcia argumento, se donita, estas la nomo de unue vizitenda\n"
+#~ "menuero, serĉota en ĉiuj „dir‟-dosieroj troveblaj per INFOPATH.\n"
+#~ "Se Äi mankas, Info kunfandas ĉiujn „dir‟-dosierojn kaj eligas la "
+#~ "rezulton.\n"
+#~ "La ceteraj argumentoj estas la nomoj de menueroj relative al la unue\n"
+#~ "vizitenda nodo.\n"
+#~ "\n"
+#~ "Ekzemploj:\n"
+#~ " info\t\t\t eligu la menuon de la kataloga nodo\n"
+#~ " info emacs\t\t komencu per la nodo „emacs‟ el la kataloga nodo\n"
+#~ " info emacs buffers\t komencu per la nodo „buffers‟ el Emaksa "
+#~ "manlibro\n"
+#~ " info --show-options emacs komencu per la Emaksaj komandliniaj opcioj\n"
+#~ " info -f ./um.info\t eligu la dosieron ./um.info sen atenti „dir‟\n"
+
+#~ msgid ""
+#~ " Picking a menu item causes another node to be selected.\n"
+#~ msgstr " Elekto de menuero kaÅ­zas transiron en alian nodon.\n"
+
+#~ msgid ""
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ msgstr ""
+#~ " AnkaÅ­ la dosiernomon vi povas inkludi, kiel en (DOSIERO)NODO.\n"
+
+#~ msgid " %-10s Search backward for a specified string\n"
+#~ msgstr " %-10s Serĉu indikotan signoĉenon supre en la dosiero,\n"
+
+#~ msgid ""
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr " kaj vizitu la nodon en kiu troviÄos la sekva apero.\n"
+
+#~ msgid "Following Next node..."
+#~ msgstr "Estas legata la nodo „Next‟ ..."
+
+#~ msgid "Selecting first menu item..."
+#~ msgstr "La unua menuero estas elektata ..."
+
+#~ msgid "Selecting Next node..."
+#~ msgstr "La nodo „Next‟ estas elektata ..."
+
+#~ msgid "Moving Up %d time(s), then Next."
+#~ msgstr "%d-foje supren, poste al la sekva („Next‟)."
+
+#~ msgid "Moving Prev in this window."
+#~ msgstr "Iro al la antaŭa nodo „Prev‟ en ĉi tiu fenestro."
+
+#~ msgid "Moving Up in this window."
+#~ msgstr "LeviÄo al la nodo „Up‟ en ĉi tiu fenestro."
+
+#~ msgid "Moving to `Prev's last menu item."
+#~ msgstr "Iro al la lasta menuero de la nodo „Prev‟."
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "Function"
+#~ msgstr "Funkcio"
+
+#~ msgid "Macro"
+#~ msgstr "Makroo"
+
+#~ msgid "Special Form"
+#~ msgstr "Speciala Formo"
+
+#~ msgid "Variable"
+#~ msgstr "Variablo"
+
+#~ msgid "User Option"
+#~ msgstr "Uzula opcio"
+
+#~ msgid "Instance Variable"
+#~ msgstr "Ekzemplera variablo"
+
+#~ msgid "Method"
+#~ msgstr "Metodo"
+
+#~ msgid "Untitled"
+#~ msgstr "Sen titolo"
+
+#~ msgid "This is %s, produced by makeinfo version %s from %s.\n"
+#~ msgstr "Ĉi tiun dosieron %s generis Makeinfo-%s el %s.\n"
+
+#~ msgid "Next:"
+#~ msgstr "Sekva:"
+
+#~ msgid "Previous:"
+#~ msgstr "AntaÅ­a:"
+
+#~ msgid "Up:"
+#~ msgstr "Supre:"
+
+#~ msgid "Menu"
+#~ msgstr "Menuo"
+
+#~ msgid "Cross"
+#~ msgstr "Referenco"
+
+#~ msgid "Prev"
+#~ msgstr "AntaÅ­a"
+
+#~ msgid "Up"
+#~ msgstr "Supre"
+
+#, fuzzy
+#~ msgid "see "
+#~ msgstr "Vidu "
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+#~ "\n"
+#~ "Add or remove entries in INFO-FILE from the Info directory DIR-FILE.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --debug report what is being done.\n"
+#~ " --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+#~ " don't insert any new entries.\n"
+#~ " --dir-file=NAME specify file name of Info directory file.\n"
+#~ " This is equivalent to using the DIR-FILE argument.\n"
+#~ " --entry=TEXT insert TEXT as an Info directory entry.\n"
+#~ " TEXT should have the form of an Info menu item line\n"
+#~ " plus zero or more extra lines starting with "
+#~ "whitespace.\n"
+#~ " If you specify more than one entry, they are all "
+#~ "added.\n"
+#~ " If you don't specify any entries, they are "
+#~ "determined\n"
+#~ " from information in the Info file itself.\n"
+#~ " --help display this help and exit.\n"
+#~ " --info-file=FILE specify Info file to install in the directory.\n"
+#~ " This is equivalent to using the INFO-FILE argument.\n"
+#~ " --info-dir=DIR same as --dir-file=DIR/dir.\n"
+#~ " --item=TEXT same as --entry TEXT.\n"
+#~ " An Info directory entry is actually a menu item.\n"
+#~ " --quiet suppress warnings.\n"
+#~ " --remove same as --delete.\n"
+#~ " --remove-exactly only remove if the info file name matches exactly;\n"
+#~ " .info and/or .gz suffixes are not ignored.\n"
+#~ " --section=SEC put this file's entries in section SEC of the "
+#~ "directory.\n"
+#~ " If you specify more than one section, all the "
+#~ "entries\n"
+#~ " are added in each of the sections.\n"
+#~ " If you don't specify any sections, they are "
+#~ "determined\n"
+#~ " from information in the Info file itself.\n"
+#~ " --section-regex=R if an entry is added to a section that does not "
+#~ "exist,\n"
+#~ " look for a section matching basic regular expression "
+#~ "R\n"
+#~ " (and ignoring case) before starting a new section.\n"
+#~ " --test suppress updating of DIR-FILE.\n"
+#~ " --silent suppress warnings.\n"
+#~ " --version display version information and exit.\n"
+#~ msgstr ""
+#~ "Sintakso: %s [OPCIO]... [INFO-DOSIERO [DIR-DOSIERO]]\n"
+#~ "\n"
+#~ "Instalu aŭ forigu „dir‟-aĵojn el INFO-DOSIERO en la Info-katalogo\n"
+#~ " DIR-DOSIERO.\n"
+#~ "\n"
+#~ "Opcioj:\n"
+#~ "--delete Forigu la ekzistantajn „dir‟-aĵojn pri INFO-DOSIERO;\n"
+#~ " ne enÅovu iun ajn novan „dir‟-aĵon.\n"
+#~ "--dir-file=NOMO Indiku la dosieran NOMOn de Info-katalogo.\n"
+#~ " Samkiel uzi la argumenton DIR-DOSIERO.\n"
+#~ "--entry=TEKSTO EnÅovu TEKSTOn kiel „dir‟-aĵojn por Info-katalogo.\n"
+#~ " TEKSTO havu la formon de menuera linio plus nul aÅ­\n"
+#~ " pluraj linioj kromaj, komencantaj per blanka spaco.\n"
+#~ " Se estas pli ol unu „dir‟-aĵo, ili ĉiuj aldoniÄos.\n"
+#~ " Se estas nenia „dir‟-aĵo, aldoniÄos „dir‟-aĵoj\n"
+#~ " determinitaj el la informoj de la Info-dosiero.\n"
+#~ "--help Eligu la helpon.\n"
+#~ "--info-file=DOSIERO Indiku Info-DOSIEROn instalendan en la Info-"
+#~ "katalogo.\n"
+#~ " Samkiel uzi la argumenton INFO-DOSIERO.\n"
+#~ "--info-dir=UJO Sinonimo por --dir-file=UJO/dir.\n"
+#~ "--item=TEKSTO Sinonimo por --entry=TEKSTO\n"
+#~ " Ĉiu „dir‟-aĵo fakte estas menuero.\n"
+#~ "--quiet Ne eligu avertojn.\n"
+#~ "--remove Sinonimo por --delete.\n"
+#~ "--section=SEKC Metu la „dir‟-aĵojn en sekcion SEKC de la Info-"
+#~ "katalogo.\n"
+#~ " Se pli ol unu sekcio estas indikitaj, ĉiuj „dir‟-"
+#~ "aĵoj\n"
+#~ " aldoniÄas en ilin ĉiujn. Se neniu sekcio estas "
+#~ "indikita,\n"
+#~ " ili determiniÄos el la informoj de la Info-dosiero.\n"
+#~ "--version Eligu la nomon, la version de la programo kaj eliru.\n"
+
+#~ msgid "menu item `%s' already exists, for file `%s'"
+#~ msgstr "menuero «%s» jam ekzistas (por la dosiero «%s»)"
+
+#~ msgid "\\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+#~ msgstr ""
+#~ "\\%-10[menu-digit] Elektu resp. la unuan ... la naŭan eron el ĉi-noda "
+#~ "menuo.\n"
+
+#~ msgid "node `%s' has been referenced %d times"
+#~ msgstr "la nodo «%s» estis referencita %d fojojn"
+
+#~ msgid ""
+#~ "There is NO warranty. You may redistribute this software\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the files named COPYING.\n"
+#~ msgstr ""
+#~ "NENIA garantio estas donita. Vi rajtas pludoni ekzemplerojn de ĉi tiu\n"
+#~ "programo laŭ la kondiĉoj de la GNUa Ĝenerala Publika Permesilo.\n"
+#~ "Pluaj informoj troveblas en la dosieroj COPYING.\n"
+
+#~ msgid ""
+#~ " file, and select the node referenced by the first entry "
+#~ "found.\n"
+#~ msgstr ""
+#~ " dosiero kaj elektu la nodon referencatan de la unua trovita "
+#~ "artikolo.\n"
+
+#~ msgid ""
+#~ "Copyright (C) %s Free Software Foundation, Inc.\n"
+#~ "There is NO warranty. You may redistribute this software\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the files named COPYING.\n"
+#~ msgstr ""
+#~ "Copyright (c) %s Free Software Foundation, Inc.\n"
+#~ "NENIA garantio estas donita. Vi rajtas pludoni ekzemplerojn de ĉi tiu\n"
+#~ "programo laŭ la kondiĉoj de la GNUa Ĝenerala Publika Permesilo. Pluaj\n"
+#~ "informoj troveblas en la dosieroj COPYING.\n"
+
+#~ msgid "@quote-arg only useful for single-argument macros"
+#~ msgstr "@quote-arg utilas nur en sol-argumentaj makrooj"
+
+#~ msgid "Table of Contents"
+#~ msgstr "Enhavtabelo"
+
+#~ msgid "Short Contents"
+#~ msgstr "Maldetala enhavtabelo"
+
+#~ msgid "keep temporary files around after processing"
+#~ msgstr "konservu la labordosierojn post la traktado"
+
+#~ msgid "do not keep temporary files around after processing (default)"
+#~ msgstr "ne konservu la labordosierojn post la traktado (defaÅ­lto)"
diff --git a/po/es.gmo b/po/es.gmo
new file mode 100644
index 0000000..d7471d1
--- /dev/null
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
new file mode 100644
index 0000000..d9bb937
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,3424 @@
+# Spanish translations for texinfo-4.12.94.
+# Copyright (C) 2008 Free Software Foundation, Inc.
+# This file is distributed under the same license as the texinfo package.
+#
+# Benno Schulenberg <benno@vertaalt.nl>, 2007, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo-4.12.94\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2008-09-18 20:38+0200\n"
+"PO-Revision-Date: 2008-09-04 23:50+0200\n"
+"Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n"
+"Language-Team: Spanish <es@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: gnulib/lib/error.c:125
+msgid "Unknown system error"
+msgstr "Error de sistema desconocido"
+
+#: gnulib/lib/getopt.c:526 gnulib/lib/getopt.c:542
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: la opción `%s' es ambigua\n"
+
+#: gnulib/lib/getopt.c:575 gnulib/lib/getopt.c:579
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: la opción `--%s' no permite argumento alguno\n"
+
+#: gnulib/lib/getopt.c:588 gnulib/lib/getopt.c:593
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: la opción `%c%s' no permite argumento alguno\n"
+
+#: gnulib/lib/getopt.c:636 gnulib/lib/getopt.c:655 gnulib/lib/getopt.c:971
+#: gnulib/lib/getopt.c:990
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: la opción `%s' requiere un argumento\n"
+
+#: gnulib/lib/getopt.c:693 gnulib/lib/getopt.c:696
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: opción desconocida `--%s'\n"
+
+#: gnulib/lib/getopt.c:704 gnulib/lib/getopt.c:707
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: opción desconocida `%c%s'\n"
+
+#: gnulib/lib/getopt.c:759 gnulib/lib/getopt.c:762
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: opción inválida -- %c\n"
+
+#: gnulib/lib/getopt.c:768 gnulib/lib/getopt.c:771
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: opción inválida -- %c\n"
+
+#: gnulib/lib/getopt.c:823 gnulib/lib/getopt.c:839 gnulib/lib/getopt.c:1043
+#: gnulib/lib/getopt.c:1061
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: la opción requiere un argumento -- %c\n"
+
+#: gnulib/lib/getopt.c:892 gnulib/lib/getopt.c:908
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: la opción `-W %s' es ambigua\n"
+
+#: gnulib/lib/getopt.c:932 gnulib/lib/getopt.c:950
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: la opción `-W %s' no permite argumento alguno\n"
+
+#: gnulib/lib/xalloc-die.c:34 gnulib/lib/xsetenv.c:37
+#, c-format
+msgid "memory exhausted"
+msgstr "no más memoria disponible"
+
+#: info/echo-area.c:283 info/session.c:966
+msgid "Move forward a character"
+msgstr "Avanzar un carácter"
+
+#: info/echo-area.c:295 info/session.c:993
+msgid "Move backward a character"
+msgstr "Retroceder un carácter"
+
+#: info/echo-area.c:307
+msgid "Move to the start of this line"
+msgstr "Ir al principio de esta línea"
+
+#: info/echo-area.c:312
+msgid "Move to the end of this line"
+msgstr "Ir al final de esta línea"
+
+#: info/echo-area.c:320 info/session.c:1025
+msgid "Move forward a word"
+msgstr "Avanzar una palabra"
+
+#: info/echo-area.c:360 info/session.c:1049
+msgid "Move backward a word"
+msgstr "Retroceder una palabra"
+
+#: info/echo-area.c:400
+msgid "Delete the character under the cursor"
+msgstr "Borrar el carácter bajo el cursor"
+
+#: info/echo-area.c:430
+msgid "Delete the character behind the cursor"
+msgstr "Borrar el cáracter anterior a la posición del cursor"
+
+#: info/echo-area.c:451
+msgid "Cancel or quit operation"
+msgstr "Cancelar o abortar la operación"
+
+#: info/echo-area.c:466
+msgid "Accept (or force completion of) this line"
+msgstr "Aceptar (o forzar el completado de) esta línea"
+
+#: info/echo-area.c:471
+msgid "Insert next character verbatim"
+msgstr "Insertar siguiente carácter de forma literal"
+
+#: info/echo-area.c:479
+msgid "Insert this character"
+msgstr "Insertar este carácter"
+
+#: info/echo-area.c:498
+msgid "Insert a TAB character"
+msgstr "Insertar un carácter de tabulación (TAB)"
+
+#: info/echo-area.c:505
+msgid "Transpose characters at point"
+msgstr ""
+"Intercambiar los caracteres anterior y posterior a la posición del cursor"
+
+#: info/echo-area.c:556
+msgid "Yank back the contents of the last kill"
+msgstr "Pegar el último bloque de texto borrado"
+
+#: info/echo-area.c:563
+msgid "Kill ring is empty"
+msgstr "No existe información de anteriores bloques borrados"
+
+#: info/echo-area.c:576
+msgid "Yank back a previous kill"
+msgstr "Pegar el último borrado en bloque"
+
+#: info/echo-area.c:609
+msgid "Kill to the end of the line"
+msgstr "Borrar hasta el final de la línea"
+
+#: info/echo-area.c:622
+msgid "Kill to the beginning of the line"
+msgstr "Borrar hasta el principio de la línea"
+
+#: info/echo-area.c:634
+msgid "Kill the word following the cursor"
+msgstr "Borrar la palabra situada tras el cursor"
+
+#: info/echo-area.c:654
+msgid "Kill the word preceding the cursor"
+msgstr "Borrar la palabra situada antes el cursor"
+
+#: info/echo-area.c:870 info/echo-area.c:926
+msgid "No completions"
+msgstr "Nada que completar"
+
+#: info/echo-area.c:872
+msgid "Not complete"
+msgstr "Incompleto"
+
+#: info/echo-area.c:913
+msgid "List possible completions"
+msgstr "Listar posibles entradas"
+
+#: info/echo-area.c:930
+msgid "Sole completion"
+msgstr "Única entrada"
+
+#: info/echo-area.c:939
+msgid "One completion:\n"
+msgstr "Una entrada:\n"
+
+#: info/echo-area.c:940
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d entradas:\n"
+
+#: info/echo-area.c:1087
+msgid "Insert completion"
+msgstr "Insertar entrada"
+
+#: info/echo-area.c:1222
+msgid "Building completions..."
+msgstr "Contruyendo lista de entradas..."
+
+#: info/echo-area.c:1342
+msgid "Scroll the completions window"
+msgstr "Avanzar en la lista de entradas"
+
+#: info/footnotes.c:212
+msgid "Footnotes could not be displayed"
+msgstr "Las notas a pie de página no pudieron ser mostradas"
+
+#: info/footnotes.c:238
+msgid "Show the footnotes associated with this node in another window"
+msgstr ""
+"Mostar las notas de pie de página asociadas con este nodo en otra ventana"
+
+#: info/footnotes.h:26
+msgid "---------- Footnotes ----------"
+msgstr "---- Notas a pie de página ----"
+
+#: info/indices.c:171
+msgid "Look up a string in the index for this file"
+msgstr "Buscar un texto en el índice de este fichero"
+
+#: info/indices.c:198
+msgid "Finding index entries..."
+msgstr "Buscando en el índice..."
+
+#: info/indices.c:206
+msgid "No indices found."
+msgstr "No se encontraron índices."
+
+#: info/indices.c:216
+msgid "Index entry: "
+msgstr "Entrada del índice: "
+
+#: info/indices.c:324
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr ""
+"Ir al siguiente elemento del índice que concuerde desde la última vez que "
+"el\n"
+"comando `\\[index-search]' fue ejecutado"
+
+#: info/indices.c:334
+msgid "No previous index search string."
+msgstr "No existe constancia previa de texto de búsqueda."
+
+#: info/indices.c:341
+msgid "No index entries."
+msgstr "No existen entradas en el índice."
+
+#: info/indices.c:374
+#, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "No existe constancia de entradas de `%sindex' que contengan `%s'."
+
+#: info/indices.c:375
+msgid "more "
+msgstr "más "
+
+#: info/indices.c:385
+msgid "CAN'T SEE THIS"
+msgstr "ESTO DEBERÃA ESTAR INVISIBLE"
+
+#: info/indices.c:421
+#, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr ""
+"Encontrado `%s' en %s. (`\\[next-index-match]' tratará de encontrar la "
+"siguiente.)"
+
+#: info/indices.c:549
+#, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "Buscando índices de `%s'..."
+
+#: info/indices.c:604
+#, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr "No existen ficheros Info que contengan la palabra `%s' en sus índices."
+
+#: info/indices.c:630
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr ""
+"Buscar un texto entre todos los ficheros Info disponibles y generar un menú"
+
+#: info/indices.c:634
+msgid "Index apropos: "
+msgstr "Ãndice de apropos: "
+
+#: info/indices.c:662
+#, c-format
+msgid ""
+"\n"
+"* Menu: Nodes whose indices contain `%s':\n"
+msgstr ""
+"\n"
+"* Menú: Nodos cuyos índices contienen `%s':\n"
+
+#: info/info.c:275 info/infokey.c:899
+#, c-format
+msgid "Try --help for more information.\n"
+msgstr "Pruebe la opción `--help' para obtener más información.\n"
+
+#: info/info.c:294 info/infokey.c:145 install-info/install-info.c:2101
+#: makeinfo/makeinfo.c:802 util/texindex.c:295
+#, c-format
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"Licencia GPLv3+: GNU GPL versión 3 o posterior <http://gnu.org/licenses/gpl."
+"html>\n"
+"Esto es software libre: usted es libre de cambiarlo y redistribuirlo.\n"
+"Dicho software es provisto SIN GARANTÃA, hasta donde permite la ley.\n"
+
+#: info/info.c:506
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr ""
+"No se encontraron entradas de índice que concuerden con la palabra `%s'\n"
+
+#: info/info.c:600
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [MENU-ITEM...]\n"
+"\n"
+"Read documentation in Info format.\n"
+msgstr ""
+"Uso: %s [OPCIÓN]... [ÃTEM DE MENÚ...]\n"
+"\n"
+"Muestra documentación escrita en formato Info.\n"
+
+#: info/info.c:606
+msgid ""
+"Options:\n"
+" -k, --apropos=STRING look up STRING in all indices of all "
+"manuals.\n"
+" -d, --directory=DIR add DIR to INFOPATH.\n"
+" --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+" -f, --file=FILENAME specify Info file to visit."
+msgstr ""
+"Opciones:\n"
+" -k, --apropos=TEXTO buscar TEXTO en los índices de todos los\n"
+" manuales disponibles.\n"
+" -d, --directory=RUTA añadir RUTA a la variable INFOPATH.\n"
+" --dribble=FICHERO cargar combinaciones de teclas definidas por\n"
+" el usuario desde el fichero FICHERO.\n"
+" -f, --file=FICHERO el FICHERO Info que visitar."
+
+#: info/info.c:613
+msgid ""
+" -h, --help display this help and exit.\n"
+" --index-search=STRING go to node pointed by index entry STRING.\n"
+" -n, --node=NODENAME specify nodes in first visited Info file.\n"
+" -o, --output=FILENAME output selected nodes to FILENAME."
+msgstr ""
+" -h, --help mostrar este mensaje de ayuda.\n"
+" --index-search=TEXTO visitar el nodo al que el índice TEXTO "
+"apunta.\n"
+" -n, --node=NOMBRE_NODO nodo que mostrar del primero fichero Info.\n"
+" -o, --output=FICHERO guardar los nodos seleccionados en este "
+"FICHERO."
+
+#: info/info.c:619
+msgid ""
+" -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+" --no-raw-escapes output escapes as literal text.\n"
+" --restore=FILENAME read initial keystrokes from FILENAME.\n"
+" -O, --show-options, --usage go to command-line options node."
+msgstr ""
+" -R, --raw-escapes guardar escapes ANSI tal cual\n"
+" (comportamiento por defecto).\n"
+" --no-raw-escapes mostrar escapes ANSI de forma \"literal\".\n"
+" --restore=FICHERO leer combinaciones de teclas iniciales del\n"
+" fichero FICHERO.\n"
+" -O, --show-options, --usage ir al nodo donde se describen las opciones "
+"de\n"
+" línea de comandos del programa al que el\n"
+" fichero Info en cuestión se refiere."
+
+#: info/info.c:626
+msgid " -b, --speech-friendly be friendly to speech synthesizers."
+msgstr ""
+" -b, --speech-friendly actúa acorde a como sintetizadores de voz\n"
+" esperan que programas que los usan lo hagan."
+
+#: info/info.c:630
+msgid ""
+" --subnodes recursively output menu items.\n"
+" --vi-keys use vi-like and less-like key bindings.\n"
+" --version display version information and exit.\n"
+" -w, --where, --location print physical location of Info file."
+msgstr ""
+" --subnodes mostrar elementos del menú de forma "
+"recursiva.\n"
+" --version mostrar información de esta versión de "
+"Info --vi-keys usar combinaciones de teclas al estilo de "
+"los\n"
+" programas `vi' y `less'.\n"
+" -w, --where, --location mostrar la ruta física del fichero Info en\n"
+" cuestión."
+
+#: info/info.c:636
+msgid ""
+"\n"
+"The first non-option argument, if present, is the menu entry to start from;\n"
+"it is searched for in all `dir' files along INFOPATH.\n"
+"If it is not present, info merges all `dir' files and shows the result.\n"
+"Any remaining arguments are treated as the names of menu\n"
+"items relative to the initial node visited."
+msgstr ""
+"\n"
+"El primer argumento que no sea una opción de las arriba mencionadas, si\n"
+"hubiera alguno, correspondería a la entrada de menú que mostrar "
+"inicialmente;\n"
+"ésta es buscada en todos los ficheros `directorio' de cada una de las rutas\n"
+"mencionadas en la variable INFOPATH. Si ésta no estuviera presente, Info\n"
+"recavaría información `directorio' y mostraría el resultado. Cualquiera "
+"que\n"
+"fueran los argumentos restantes serían tratados como nombres de elementos "
+"del\n"
+"menú con respecto al nodo inicial visitado."
+
+#: info/info.c:643
+msgid ""
+"\n"
+"For a summary of key bindings, type h within Info."
+msgstr ""
+"\n"
+"Por un resumen de las teclas, teclee <h> dentro de 'info'."
+
+#: info/info.c:646
+msgid ""
+"\n"
+"Examples:\n"
+" info show top-level dir menu\n"
+" info info show the general manual for Info readers\n"
+" info info-stnd show the manual specific to this Info program\n"
+" info emacs start at emacs node from top-level dir\n"
+" info emacs buffers start at buffers node within emacs manual\n"
+" info --show-options emacs start at node with emacs' command line options\n"
+" info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+" info -f ./foo.info show file ./foo.info, not searching dir"
+msgstr ""
+"\n"
+"Ejemplos:\n"
+" info muestra el directorio\n"
+" info info muestra el manual general sobre Info-programas\n"
+" info info-stnd muestra el manual de este programa, 'info'\n"
+" info emacs muestra el nodo `emacs' en base al directorio\n"
+" info emacs buffers muestra el nodo `buffers' del fichero `emacs'\n"
+" info --show-options emacs muestra la página de opciones de línea de\n"
+" comandos para el programa `emacs'\n"
+" info --subnodes -o out.txt emacs escribe el manual de `emacs' al "
+"completo\n"
+" en el fichero `out.txt'\n"
+" info -f ./foo.info muestra el fichero `./foo.info', sin buscar en\n"
+" el directorio"
+
+#: info/info.c:657 info/infokey.c:918 makeinfo/makeinfo.c:475
+#: util/texindex.c:259
+msgid ""
+"\n"
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+"Reporte cualquier tipo de problema que usted encuentra en el funcionamiento\n"
+"de esta programa <bug-texinfo@gnu.org>. Preguntas y discusiones sobre\n"
+"Texinfo en general pueden ser dirigidas a <help-texinfo@gnu.org>.\n"
+"El sitio web de Texinfo es: http://www.gnu.org/software/texinfo/"
+
+#: info/info.c:691
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "Nodo `%s' no fue encontrado."
+
+#: info/info.c:692
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "El nodo `(%s)%s' no fue encontrado."
+
+#: info/info.c:693
+msgid "Cannot find a window!"
+msgstr "No podría encontrar una ventana!"
+
+#: info/info.c:694
+msgid "Point doesn't appear within this window's node!"
+msgstr "El cursor no parece estar sobre nodo alguno en esta ventana!"
+
+#: info/info.c:695
+msgid "Cannot delete the last window."
+msgstr "No se puede eliminar la última ventana."
+
+#: info/info.c:696
+msgid "No menu in this node."
+msgstr "No existe un menú en este nodo."
+
+#: info/info.c:697
+msgid "No footnotes in this node."
+msgstr "No hay notas de pie de página en este nodo."
+
+#: info/info.c:698
+msgid "No cross references in this node."
+msgstr "No hay enlaces en este nodo."
+
+#: info/info.c:699
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Este nodo no contiene enlace alguno a `%s'."
+
+#: info/info.c:700
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr ""
+"`%c' no es un comando conocido; pruebe usted con `?' para acceder a la ayuda."
+
+#: info/info.c:701
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr "El tipo de terminal `%s' es incapaz de ejecutar Info."
+
+#: info/info.c:702
+msgid "You are already at the last page of this node."
+msgstr "Usted ya se encuentra en la última página de este nodo."
+
+#: info/info.c:703
+msgid "You are already at the first page of this node."
+msgstr "Usted ya se encuentra en la primera página de este nodo."
+
+#: info/info.c:704
+msgid "Only one window."
+msgstr "Una única ventana."
+
+#: info/info.c:705
+msgid "Resulting window would be too small."
+msgstr "La ventana resultante sería demasiado pequeña."
+
+#: info/info.c:706
+msgid "Not enough room for a help window, please delete a window."
+msgstr ""
+"No hay pantalla suficiente como para albergar la ventana de ayuda, elimine "
+"por favor alguna otra que no esté usando."
+
+#: info/infodoc.c:45
+msgid "Basic Info command keys\n"
+msgstr "Comandos básicos para el manejo de Info\n"
+
+#: info/infodoc.c:47
+msgid "\\%-10[quit-help] Close this help window.\n"
+msgstr "\\%-10[quit-help] Salir de esta ventana de ayuda.\n"
+
+#: info/infodoc.c:48
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] Finalizar esta aplicación informática.\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr "\\%-10[get-info-help-node] Invocar el tutorial de uso de Info.\n"
+
+#: info/infodoc.c:51
+msgid "\\%-10[prev-line] Move up one line.\n"
+msgstr "\\%-10[prev-line] Retroceder una línea.\n"
+
+#: info/infodoc.c:52
+msgid "\\%-10[next-line] Move down one line.\n"
+msgstr "\\%-10[next-line] Avanzar una línea.\n"
+
+#: info/infodoc.c:53
+msgid "\\%-10[scroll-backward] Scroll backward one screenful.\n"
+msgstr "\\%-10[scroll-backward] Retroceder una página.\n"
+
+#: info/infodoc.c:54
+msgid "\\%-10[scroll-forward] Scroll forward one screenful.\n"
+msgstr "\\%-10[scroll-forward] Avanzar una página.\n"
+
+#: info/infodoc.c:55
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr "\\%-10[beginning-of-node] Ir al principio de este nodo.\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr "\\%-10[end-of-node] Ir al final de este nodo.\n"
+
+#: info/infodoc.c:58
+msgid "\\%-10[move-to-next-xref] Skip to the next hypertext link.\n"
+msgstr "\\%-10[move-to-next-xref] Ir al siguiente enlace de hiper-texto.\n"
+
+#: info/infodoc.c:59
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under the "
+"cursor.\n"
+msgstr ""
+"\\%-10[select-reference-this-line] Seguir el enlace de hiper-texto bajo el "
+"cursor.\n"
+
+#: info/infodoc.c:60
+msgid "\\%-10[history-node] Go back to the last node seen in this window.\n"
+msgstr "\\%-10[history-node] Ir al último nodo presente en esta ventana.\n"
+
+#: info/infodoc.c:62
+msgid "\\%-10[global-prev-node] Go to the previous node in the document.\n"
+msgstr "\\%-10[global-prev-node] Ir al nodo anterior en este documento.\n"
+
+#: info/infodoc.c:63
+msgid "\\%-10[global-next-node] Go to the next node in the document.\n"
+msgstr "\\%-10[global-next-node] Ir al nodo siguiente en este documento.\n"
+
+#: info/infodoc.c:64
+msgid "\\%-10[prev-node] Go to the previous node on this level.\n"
+msgstr "\\%-10[prev-node] Ir al nodo anterior en este nivel.\n"
+
+#: info/infodoc.c:65
+msgid "\\%-10[next-node] Go to the next node on this level.\n"
+msgstr "\\%-10[next-node] Ir al nodo siguiente en este nivel.\n"
+
+#: info/infodoc.c:66
+msgid "\\%-10[up-node] Go up one level.\n"
+msgstr "\\%-10[up-node] Ir al nodo un nivel más arriba.\n"
+
+#: info/infodoc.c:67
+msgid "\\%-10[top-node] Go to the top node of this document.\n"
+msgstr "\\%-10[top-node] Ir al nodo cumbre de este documento.\n"
+
+#: info/infodoc.c:68
+msgid "\\%-10[dir-node] Go to the main `directory' node.\n"
+msgstr "\\%-10[dir-node] Ir al nodo principal o `directorio'.\n"
+
+#: info/infodoc.c:70
+msgid "1...9 Pick the first...ninth item in this node's menu.\n"
+msgstr ""
+"1...9 Seleccionar el primer...noveno elemento del menú de este nodo.\n"
+
+#: info/infodoc.c:71
+msgid "\\%-10[last-menu-item] Pick the last item in this node's menu.\n"
+msgstr ""
+"\\%-10[last-menu-item] Seleccionar el último elemento en el menú de este "
+"nodo.\n"
+
+#: info/infodoc.c:72
+msgid "\\%-10[menu-item] Pick a menu item specified by name.\n"
+msgstr ""
+"\\%-10[menu-item] Seleccionar un elemento del menú especificando su "
+"nombre.\n"
+
+#: info/infodoc.c:73
+msgid "\\%-10[xref-item] Follow a cross reference specified by name.\n"
+msgstr "\\%-10[xref-item] Seguir un enlace, especificando su nombre.\n"
+
+#: info/infodoc.c:74
+msgid "\\%-10[goto-node] Go to a node specified by name.\n"
+msgstr "\\%-10[goto-node] Ir al nodo deseado, especificando su nombre.\n"
+
+#: info/infodoc.c:76
+msgid "\\%-10[search] Search forward for a specified string.\n"
+msgstr "\\%-10[search] Buscar hacia adelante el texto especificado.\n"
+
+#: info/infodoc.c:77
+msgid "\\%-10[search-previous] Search for previous occurrence.\n"
+msgstr "\\%-10[search-previous] Buscar hacia atrás la próxima ocurrencia.\n"
+
+#: info/infodoc.c:78
+msgid "\\%-10[search-next] Search for next occurrence.\n"
+msgstr "\\%-10[search-next] Buscar hacia adelante la próxima ocurrencia.\n"
+
+#: info/infodoc.c:79
+msgid ""
+"\\%-10[index-search] Search for a specified string in the index, and\n"
+" select the node referenced by the first entry found.\n"
+msgstr ""
+"\\%-10[index-search] Buscar texto en el índice de este fichero Info, y "
+"selec-\n"
+" cionar el nodo al que el primer elemento encontrado se "
+"refiere.\n"
+
+#: info/infodoc.c:81
+msgid "\\%-10[abort-key] Cancel the current operation.\n"
+msgstr "\\%-10[abort-key] Cancelar la operación en curso.\n"
+
+#: info/infodoc.c:89
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"Comandos básicos para el manejo de Info\n"
+"***************************************\n"
+
+#: info/infodoc.c:92
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s Salir de esta pantalla de ayuda.\n"
+
+#: info/infodoc.c:93
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Salir de esta aplicación informática.\n"
+
+#: info/infodoc.c:94
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Invocar el tutorial de uso de Info.\n"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr " %-10s Ir al nodo que consta como `siguiente' al actual.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr " %-10s Ir al nodo que consta como `anterior' al actual.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s Ir al nodo que consta como `superior' al actual.\n"
+
+#: info/infodoc.c:101
+#, c-format
+msgid ""
+" %-10s Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+" %-10s Seleccionar un ítem de menú por su nombre.\n"
+" Seleccionar un ítem de menú causa que otro nodo sea "
+"seleccionado.\n"
+
+#: info/infodoc.c:103
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr " %-10s Seguir un enlace. Lee el nombre del mismo.\n"
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr " %-10s Ir al último nodo presente en esta ventana.\n"
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr " %-10s Ir al siguiente enlace de hiper-texto en este nodo.\n"
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s Seguir el enlace de hiper-texto situado bajo el cursor.\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr ""
+" %-10s Ir al nodo principal o `directorio'. Equivalente a `g (DIR)'.\n"
+
+#: info/infodoc.c:108
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr " %-10s Ir al nodo cumbre. Equivalente a `g Top'.\n"
+
+#: info/infodoc.c:110
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"Moviéndose en torno a un nodo:\n"
+"------------------------------\n"
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s Avanzar una página.\n"
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s Retroceder una página.\n"
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s Ir al principio de este nodo.\n"
+
+#: info/infodoc.c:115
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s Ir al final de este nodo.\n"
+
+#: info/infodoc.c:116
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s Avanzar una línea.\n"
+
+#: info/infodoc.c:117
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s Retroceder una línea.\n"
+
+#: info/infodoc.c:119
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"Otros comandos:\n"
+"---------------\n"
+
+#: info/infodoc.c:121
+#, c-format
+msgid " %-10s Pick first...ninth item in node's menu.\n"
+msgstr ""
+" %-10s Seleccionar el primer...noveno elemento del menú de este nodo.\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s Seleccionar el último elemento del menú de este nodo.\n"
+
+#: info/infodoc.c:125
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr ""
+" %-10s Buscar texto en el índice de este fichero Info, y seleccionar\n"
+" el nodo al que el primer elemento encontrado se refiere.\n"
+
+#: info/infodoc.c:127
+#, c-format
+msgid ""
+" %-10s Move to node specified by name.\n"
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+" %-10s Ir a un nodo especificado por su nombre.\n"
+" Puede incluir un nombre de fichero. Por ejemplo:\n"
+" (NOMBRE-FICHERO)NOMBRE-NODO.\n"
+
+#: info/infodoc.c:129
+#, c-format
+msgid ""
+" %-10s Search forward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+" %-10s Buscar hacia adelante el texto especificado,\n"
+" y seleccionar el nodo en que dicho texto es encontrado.\n"
+
+#: info/infodoc.c:131
+#, c-format
+msgid ""
+" %-10s Search backward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+" %-10s Buscar hacia atrás el texto especificado,\n"
+" y seleccionar el nodo en que dicho texto es encontrado.\n"
+
+#: info/infodoc.c:312
+msgid "The current search path is:\n"
+msgstr "La lista de orden de búsqueda de ficheros actual es:\n"
+
+#: info/infodoc.c:316
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"Comandos disponibles en ventanas Info:\n"
+"\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"Comandos disponibles en la ventana de mensajes:\n"
+"\n"
+
+#: info/infodoc.c:343
+#, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+"Los siguientes comandos sólo pueden ser especificados vía %s:\n"
+"\n"
+
+#: info/infodoc.c:347
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+"Los siguientes comandos no pueden ser invocados en forma alguna:\n"
+"\n"
+
+#: info/infodoc.c:477
+msgid "Display help message"
+msgstr "Mostrar mensaje de ayuda"
+
+#: info/infodoc.c:495
+msgid "Visit Info node `(info)Help'"
+msgstr "Visitar nodo Info `(info)Help'"
+
+#: info/infodoc.c:633
+msgid "Print documentation for KEY"
+msgstr "Imprimir la documentación relacionada con la tecla KEY"
+
+#: info/infodoc.c:645
+#, c-format
+msgid "Describe key: %s"
+msgstr "Describir la tecla: %s"
+
+#: info/infodoc.c:656
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s no ha sido definido."
+
+#: info/infodoc.c:672 info/infodoc.c:701
+#, c-format
+msgid "%s is undefined."
+msgstr "%s no ha sido definido."
+
+#: info/infodoc.c:722
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s ha sido definido como %s."
+
+#: info/infodoc.c:1146
+msgid "Show what to type to execute a given command"
+msgstr "Muestra qué teclas pulsar para un comando en específico"
+
+#: info/infodoc.c:1150
+msgid "Where is command: "
+msgstr "Comando \"donde está\": "
+
+#: info/infodoc.c:1172
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "`%s' no consta como tecla (o combinación de teclas) válida "
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s sólo puede ser invocado vía %s."
+
+#: info/infodoc.c:1183
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s puede ser invocado vía %s."
+
+#: info/infodoc.c:1188
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "No existe función alguna llamada `%s'"
+
+#: info/infodoc.c:96
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"Seleccionando otros nodos:\n"
+"--------------------------\n"
+
+#: info/infokey.c:170
+msgid "incorrect number of arguments"
+msgstr "número de argumentos incorrecto"
+
+#: info/infokey.c:201
+#, c-format
+msgid "cannot open input file `%s'"
+msgstr "no se pudo abrir el fichero `%s'"
+
+#: info/infokey.c:215
+#, c-format
+msgid "cannot create output file `%s'"
+msgstr "no se pudo crear el fichero `%s'"
+
+#: info/infokey.c:226
+#, c-format
+msgid "error writing to `%s'"
+msgstr "error mientras se escribía al fichero `%s'"
+
+#: info/infokey.c:232
+#, c-format
+msgid "error closing output file `%s'"
+msgstr "error cerrando fichero `%s'"
+
+#: info/infokey.c:450
+msgid "key sequence too long"
+msgstr "secuencia de teclas demasiado larga"
+
+#: info/infokey.c:529
+msgid "missing key sequence"
+msgstr "secuencia de teclas ausente"
+
+#: info/infokey.c:610
+msgid "NUL character (\\000) not permitted"
+msgstr "El caracter `NUL' (\\000), no está permitido aquí"
+
+#: info/infokey.c:641
+#, c-format
+msgid "NUL character (^%c) not permitted"
+msgstr "El carácter nulo (^%c) no está permitido aquí"
+
+#: info/infokey.c:665
+msgid "missing action name"
+msgstr "nombre de acción ausente"
+
+#: info/infokey.c:681 info/infokey.c:756
+msgid "section too long"
+msgstr "sección demasiado larga"
+
+#: info/infokey.c:688
+#, c-format
+msgid "unknown action `%s'"
+msgstr "acción desconocida `%s'"
+
+#: info/infokey.c:698
+msgid "action name too long"
+msgstr "nombre de acción demasiado largo"
+
+#: info/infokey.c:712
+#, c-format
+msgid "extra characters following action `%s'"
+msgstr "extra caracteres tras nombre de acción `%s'"
+
+#: info/infokey.c:723
+msgid "missing variable name"
+msgstr "nombre de variable ausente"
+
+#: info/infokey.c:733
+msgid "missing `=' immediately after variable name"
+msgstr ""
+"ausencia del carácter `=' inmediatamente después del nombre de la variable"
+
+#: info/infokey.c:741
+msgid "variable name too long"
+msgstr "nombre de variable demasiado largo"
+
+#: info/infokey.c:765
+msgid "value too long"
+msgstr "valor demasiado largo"
+
+#: info/infokey.c:890
+#, c-format
+msgid "\"%s\", line %u: "
+msgstr "\"%s\", línea %u: "
+
+#: info/infokey.c:906
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [INPUT-FILE]\n"
+"\n"
+"Compile infokey source file to infokey file. Reads INPUT-FILE (default\n"
+"$HOME/.infokey) and writes compiled key file to (by default) $HOME/.info.\n"
+"\n"
+"Options:\n"
+" --output FILE output to FILE instead of $HOME/.info\n"
+" --help display this help and exit.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"Uso: %s [OPCIÓN]... [FICHERO]\n"
+"\n"
+"Compila el fichero FICHERO produciendo un fichero infokey. Lee el fichero\n"
+"FICHERO (`$HOME/.infokey' por defecto) y escribe el fichero compilado como\n"
+"`$HOME/.info' (por defecto).\n"
+"\n"
+"Opciones:\n"
+" --output FICHERO escribir en fichero FICHERO, en vez de en $HOME/."
+"info\n"
+" --help mostrar este mensaje de ayuda.\n"
+" --version mostrar información de versión de esta aplicación\n"
+" informática.\n"
+
+#: info/infomap.c:955
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "Ignorando fichero infokey `%s' (es demasiado pequeño)"
+
+#: info/infomap.c:958
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "Ignorando fichero infokey `%s' (es demasiado grande)"
+
+#: info/infomap.c:971
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "Error leyendo fichero infokey `%s' - lectura cortada"
+
+#: info/infomap.c:990
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+"El fichero infokey `%s' es inválido (secuencia de identificación inválida),\n"
+"ejecute `infokey' sobre este para acutalizarlo"
+
+#: info/infomap.c:999
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr ""
+"Su fichero infokey `%s' es demasiado viejo,\n"
+"ejecute `infokey' sobre este para actualizarlo"
+
+#: info/infomap.c:1015
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+"El fichero infokey `%s' es inválido (longitud de sección errónea),\n"
+"ejecute `infokey' sobre este para actualizarlo"
+
+#: info/infomap.c:1036
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr ""
+"El fichero infokey `%s' es inválido (número de sección inválido),\n"
+"ejecute `infokey' sobre este para actualizarlo"
+
+#: info/infomap.c:1171
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr ""
+"Datos erróneos en fichero infokey -- algunas combinaciones de teclas serán "
+"ignoradas"
+
+#: info/infomap.c:1221
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr ""
+"Datos erróneos en fichero infokey -- algunas variables que han sido "
+"declaradas serán ignoradas"
+
+#: info/m-x.c:68
+msgid "Read the name of an Info command and describe it"
+msgstr "Leer el nombre de un comando de Info y describirlo"
+
+#: info/m-x.c:72
+msgid "Describe command: "
+msgstr "Describir comando: "
+
+#: info/m-x.c:95
+msgid "Read a command name in the echo area and execute it"
+msgstr "Leer el nombre de un comando desde el área de mensajes y ejecutarlo"
+
+#: info/m-x.c:139
+msgid "Cannot execute an `echo-area' command here."
+msgstr "No se puede ejecutar el comando `echo-area' aquí."
+
+#: info/m-x.c:153
+#, c-format
+msgid "Undefined command: %s"
+msgstr "El comando `%s' no existe"
+
+#: info/m-x.c:159
+msgid "Set the height of the displayed window"
+msgstr "Establecer el ancho de la ventana"
+
+#: info/m-x.c:172
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Establecer el ancho a (%d): "
+
+#: info/makedoc.c:166 info/makedoc.c:174
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+" Los ficheros que han sido muestreados para construir este fichero "
+"incluyen:\n"
+"\n"
+
+#: info/makedoc.c:556
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "El fichero `%s' no pudo ser manipulado.\n"
+
+#: info/nodemenu.c:30
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+"\n"
+"* Menú:\n"
+" (Fichero)Nodo Líneas Tamaño Fichero Original\n"
+" ------------- ------ ------ ----------------"
+
+#: info/nodemenu.c:201
+msgid ""
+"Here is the menu of nodes you have recently visited.\n"
+"Select one from this menu, or use `\\[history-node]' in another window.\n"
+msgstr ""
+"El siguiente es el menú de nodos que usted ha visitado recientemente.\n"
+"Seleccione uno, o use `\\[history-node]' en otra ventana.\n"
+
+#: info/nodemenu.c:223
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr ""
+"Crear una ventana que contenga un menú con los nodos visitados hasta ahora"
+
+#: info/nodemenu.c:303
+msgid "Select a node which has been previously visited in a visible window"
+msgstr "Seleccionar un nodo que ha sido previamente visitado"
+
+#: info/nodemenu.c:316
+msgid "Select visited node: "
+msgstr "Seleccionar nodo visitado: "
+
+#: info/nodemenu.c:336 info/session.c:2578
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "La referencia ha desaparecido! (%s)."
+
+#: info/search.c:166
+#, c-format
+msgid "regexp error: %s"
+msgstr "Error en expresión regular: %s"
+
+#: info/session.c:164
+#, c-format
+msgid ""
+"Welcome to Info version %s. Type \\[get-help-window] for help, \\[menu-item] "
+"for menu item."
+msgstr ""
+"Este es Info, versión %s. Teclee \\[get-help-window] para ayuda, \\[menu-"
+"item] para seleccionar un ítem de menú."
+
+#: info/session.c:625
+msgid "Move down to the next line"
+msgstr "Ir a la siguiente línea"
+
+#: info/session.c:661
+msgid "Move up to the previous line"
+msgstr "Ir a la línea anterior"
+
+#: info/session.c:931
+msgid "Move to the end of the line"
+msgstr "Ir al final de la línea"
+
+#: info/session.c:942
+msgid "Move to the start of the line"
+msgstr "Ir al principio de la línea"
+
+#: info/session.c:1142
+msgid "Next"
+msgstr "Siguiente"
+
+#: info/session.c:1158 info/session.c:1283
+msgid "No more nodes within this document."
+msgstr "No hay más nodos en este documento."
+
+#: info/session.c:1309
+msgid "No `Prev' for this node."
+msgstr "No hay nodo `Anterior' a este."
+
+#: info/session.c:1329
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr "Este nodo no contiene `Anterior' ni `Superior'."
+
+#: info/session.c:1391
+msgid "Move forwards or down through node structure"
+msgstr "Moverse hacia adelante o abajo a través de la estructura de nodos"
+
+#: info/session.c:1407
+msgid "Move backwards or up through node structure"
+msgstr "Moverse hacia atrás o arriba a través de la estructura de nodos"
+
+#: info/session.c:1508
+msgid "Scroll forward in this window"
+msgstr "Avanzar en esta ventana"
+
+#: info/session.c:1516
+msgid "Scroll forward in this window and set default window size"
+msgstr "Avanzar en esta ventana y establecer el ancho de la misma"
+
+#: info/session.c:1524
+msgid "Scroll forward in this window staying within node"
+msgstr "Avanzar en esta ventana sin salir del nodo actual"
+
+#: info/session.c:1532
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr ""
+"Avanzar en esta ventana sin salir del nodo actual y establecer el ancho de "
+"la misma"
+
+#: info/session.c:1540
+msgid "Scroll backward in this window"
+msgstr "Retroceder en esta ventana"
+
+#: info/session.c:1548
+msgid "Scroll backward in this window and set default window size"
+msgstr "Retroceder en esta ventana y establecer el ancho de la misma"
+
+#: info/session.c:1557
+msgid "Scroll backward in this window staying within node"
+msgstr "Retroceder en esta ventana sin salir del nodo actual"
+
+#: info/session.c:1565
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr ""
+"Retroceder en esta ventana sin salir del nodo actual y establecer el ancho "
+"de la misma"
+
+#: info/session.c:1573
+msgid "Move to the start of this node"
+msgstr "Moverse al principio de este nodo"
+
+#: info/session.c:1580
+msgid "Move to the end of this node"
+msgstr "Moverse al final de este nodo"
+
+#: info/session.c:1587
+msgid "Scroll down by lines"
+msgstr "Avanzar por líneas"
+
+#: info/session.c:1604
+msgid "Scroll up by lines"
+msgstr "Retroceder por líneas"
+
+#: info/session.c:1622
+msgid "Scroll down by half screen size"
+msgstr "Avanzar media pantalla"
+
+#: info/session.c:1648
+msgid "Scroll up by half screen size"
+msgstr "Retroceder media pantalla"
+
+#: info/session.c:1677
+msgid "Select the next window"
+msgstr "Seleccionar la siguiente ventana"
+
+#: info/session.c:1716
+msgid "Select the previous window"
+msgstr "Seleccionar la ventana anterior"
+
+#: info/session.c:1767
+msgid "Split the current window"
+msgstr "Partir la ventana actual en dos mitades"
+
+#: info/session.c:1848
+msgid "Delete the current window"
+msgstr "Eliminar la ventana actual"
+
+#: info/session.c:1856
+msgid "Cannot delete a permanent window"
+msgstr "No se puede eliminar una ventana de tipo permanente"
+
+#: info/session.c:1888
+msgid "Delete all other windows"
+msgstr "Eliminar todas las otras ventanas"
+
+#: info/session.c:1934
+msgid "Scroll the other window"
+msgstr "Avanzar en la otra ventana"
+
+#: info/session.c:1955
+msgid "Scroll the other window backward"
+msgstr "Retroceder en la otra ventana"
+
+#: info/session.c:1961
+msgid "Grow (or shrink) this window"
+msgstr "Agrandar (o encoger) esta ventana"
+
+#: info/session.c:1972
+msgid "Divide the available screen space among the visible windows"
+msgstr ""
+"Dividir el espacio disponible de la pantalla entre las ventanas visibles"
+
+#: info/session.c:1979
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "Activar o desactivar el modo `envolver-lineas' en la ventana actual"
+
+#: info/session.c:1986
+msgid "Toggle the usage of regular expressions in searches"
+msgstr "Activar o desactivar el uso de expresiones regulares durante búsquedas"
+
+#: info/session.c:1990
+msgid "Using regular expressions for searches."
+msgstr "Usando expresiones regulares durante búsquedas."
+
+#: info/session.c:1991
+msgid "Using literal strings for searches."
+msgstr "Usando texto literal durante búsquedas."
+
+#: info/session.c:2162
+msgid "Select the Next node"
+msgstr "Seleccionar el nodo siguiente"
+
+#: info/session.c:2170
+msgid "Select the Prev node"
+msgstr "Seleccionar el nodo anterior"
+
+#: info/session.c:2178
+msgid "Select the Up node"
+msgstr "Seleccionar el nodo superior"
+
+#: info/session.c:2185
+msgid "Select the last node in this file"
+msgstr "Seleccionar el último nodo en este fichero"
+
+#: info/session.c:2212 info/session.c:2245
+msgid "This window has no additional nodes"
+msgstr "Esta ventana no dispone de nodos adicionales"
+
+#: info/session.c:2218
+msgid "Select the first node in this file"
+msgstr "Seleccionar el primer nodo en este fichero"
+
+#: info/session.c:2252
+msgid "Select the last item in this node's menu"
+msgstr "Seleccionar el último elemento del menú de este nodo"
+
+#: info/session.c:2258
+msgid "Select this menu item"
+msgstr "Seleccionar este elemento del menú"
+
+#: info/session.c:2291
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "No hay %d elementos en este menú."
+
+#: info/session.c:2485 info/session.c:2486
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Elemento del menú (%s): "
+
+#: info/session.c:2489
+msgid "Menu item: "
+msgstr "Elemento del menú: "
+
+#: info/session.c:2496 info/session.c:2497
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Seguir enlace (%s): "
+
+#: info/session.c:2500
+msgid "Follow xref: "
+msgstr "Seguir enlace: "
+
+#: info/session.c:2629
+msgid "Read a menu item and select its node"
+msgstr "Leer un elemento del menú y seleccionar el nodo al que corresponda"
+
+#: info/session.c:2637
+msgid "Read a footnote or cross reference and select its node"
+msgstr ""
+"Leer una nota de pie de página o enlace y seleccionar el nodo resultante"
+
+#: info/session.c:2643
+msgid "Move to the start of this node's menu"
+msgstr "Ir al principio del menú de este nodo"
+
+#: info/session.c:2667
+msgid "Visit as many menu items at once as possible"
+msgstr "Visitar de una sóla vez tantos elementos del menú como sea posible"
+
+#: info/session.c:2695
+msgid "Read a node name and select it"
+msgstr "Leer un nombre de nodo y seleccionarlo"
+
+#: info/session.c:2750 info/session.c:2755
+msgid "Goto node: "
+msgstr "Ir a nodo: "
+
+#: info/session.c:2819
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "El nodo `%s' no contiene menú alguno."
+
+#: info/session.c:2865
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "No existe elemento de menú alguno llamado `%s' en el nodo `%s'."
+
+#: info/session.c:2895
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr "No se encontró ningún nodo referenciado por `%s' en `%s'."
+
+#: info/session.c:2945
+msgid "Read a list of menus starting from dir and follow them"
+msgstr ""
+"Leer una lista de menús comenzando desde el directorio especificado y "
+"seguirla"
+
+#: info/session.c:2947
+msgid "Follow menus: "
+msgstr "Seguir menús: "
+
+#: info/session.c:3140
+msgid "Find the node describing program invocation"
+msgstr "Encontrar el nodo que describe la invocación del programa en cuestión"
+
+#: info/session.c:3142
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "Encontrar nodo de invocación de [%s]: "
+
+#: info/session.c:3180
+msgid "Read a manpage reference and select it"
+msgstr "Leer una referencia a páginas del manual y seleccionarla"
+
+#: info/session.c:3184
+msgid "Get Manpage: "
+msgstr "Página de manual a buscar: "
+
+#: info/session.c:3214
+msgid "Select the node `Top' in this file"
+msgstr "Seleccionar el nodo `Top' en este fichero"
+
+#: info/session.c:3220
+msgid "Select the node `(dir)'"
+msgstr "Seleccionar el nodo `(dir)'"
+
+#: info/session.c:3237 info/session.c:3239
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Terminar nodo (%s): "
+
+#: info/session.c:3291
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "No se pudo terminar el nodo `%s'"
+
+#: info/session.c:3301
+msgid "Cannot kill the last node"
+msgstr "No se puede terminar el último nodo"
+
+#: info/session.c:3387
+msgid "Select the most recently selected node"
+msgstr "Seleccionar el nodo usado más recientemente"
+
+#: info/session.c:3393
+msgid "Kill this node"
+msgstr "Terminar este nodo"
+
+#: info/session.c:3401
+msgid "Read the name of a file and select it"
+msgstr "Leer el nombre de un fichero y seleccionarlo"
+
+#: info/session.c:3405
+msgid "Find file: "
+msgstr "Fichero a buscar: "
+
+#: info/session.c:3422
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "No se encontró `%s'."
+
+#: info/session.c:3465 info/session.c:3583
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "No se pudo crear el fichero `%s'."
+
+#: info/session.c:3479 info/session.c:3601 info/session.c:3661
+msgid "Done."
+msgstr "Hecho."
+
+#: info/session.c:3534
+#, c-format
+msgid "Writing node %s..."
+msgstr "Escribiendo nodo %s..."
+
+#: info/session.c:3610
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr "Volcar el contenido de este nodo a través de INFO_PRINT_COMMAND"
+
+#: info/session.c:3645
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "No se pudo volcar sobre `%s'."
+
+#: info/session.c:3651
+#, c-format
+msgid "Printing node %s..."
+msgstr "Imprimiendo nodo %s..."
+
+#: info/session.c:3900
+msgid "Search continued from the end of the document."
+msgstr "La búsqueda continuó desde el final del documento."
+
+#: info/session.c:3905
+msgid "Search continued from the beginning of the document."
+msgstr "La búsqueda continuó desde el principio del documento."
+
+#: info/session.c:3922
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "Buscando sub-fichero %s ..."
+
+#: info/session.c:3979
+msgid "Read a string and search for it case-sensitively"
+msgstr "Leer un texto y buscarlo (mayúsculas y minúsculas son significantes)"
+
+#: info/session.c:3986
+msgid "Read a string and search for it"
+msgstr "Leer una cadena de texto y buscarla"
+
+#: info/session.c:3994
+msgid "Read a string and search backward for it"
+msgstr "Leer una cadena de texto y buscarla hacia atrás"
+
+#: info/session.c:4030 info/session.c:4036
+#, c-format
+msgid "%s%s%s [%s]: "
+msgstr "%s%s%s [%s]: "
+
+#: info/session.c:4031 info/session.c:4037
+msgid "Regexp search"
+msgstr "Buscar (exp.reg.)"
+
+#: info/session.c:4032 info/session.c:4038
+msgid " case-sensitively"
+msgstr " distinguiendo mayús./minús."
+
+#: info/session.c:4033 info/session.c:4039
+msgid " backward"
+msgstr " hacia atrás"
+
+#: info/session.c:4037
+msgid "Search"
+msgstr "Buscar"
+
+#: info/session.c:4079
+msgid "Search failed."
+msgstr "La búsqueda finalizó sin resultados."
+
+#: info/session.c:4097
+msgid "Repeat last search in the same direction"
+msgstr "Repetir la última búsqueda en la misma dirección que la anterior"
+
+#: info/session.c:4100 info/session.c:4110
+msgid "No previous search string"
+msgstr "No existe constancia de búsqueda anterior"
+
+#: info/session.c:4107
+msgid "Repeat last search in the reverse direction"
+msgstr "Repetir la última búsqueda en dirección contraria"
+
+#: info/session.c:4126 info/session.c:4132
+msgid "Search interactively for a string as you type it"
+msgstr "Buscar de forma interactiva un texto según usted lo escribe"
+
+#: info/session.c:4212
+msgid "Regexp I-search backward: "
+msgstr "Búsqueda interactiva hacia atrás (exp.reg.): "
+
+#: info/session.c:4213
+msgid "I-search backward: "
+msgstr "Búsqueda interactiva hacia atrás: "
+
+#: info/session.c:4215
+msgid "Regexp I-search: "
+msgstr "Búsqueda interactiva (exp.reg.): "
+
+#: info/session.c:4216
+msgid "I-search: "
+msgstr "Búsqueda interactiva: "
+
+#: info/session.c:4241 info/session.c:4243
+msgid "Failing "
+msgstr "Falló "
+
+#: info/session.c:4734
+msgid "Move to the previous cross reference"
+msgstr "Ir al enlace anterior"
+
+#: info/session.c:4752
+msgid "Move to the next cross reference"
+msgstr "Ir a la próxima referencia externa"
+
+#: info/session.c:4774
+msgid "Select reference or menu item appearing on this line"
+msgstr "Seleccionar la referencia o el elemento del menú situado en esta línea"
+
+#: info/session.c:4797
+msgid "Cancel current operation"
+msgstr "Cancelar la operación en curso"
+
+#: info/session.c:4804
+msgid "Quit"
+msgstr "Cancelado"
+
+#: info/session.c:4813
+msgid "Move the cursor to a specific line of the window"
+msgstr "Mover el cursor a una línea específica de la ventana"
+
+#: info/session.c:4845
+msgid "Redraw the display"
+msgstr "Redibujar los contenidos de la pantalla"
+
+#: info/session.c:4882
+msgid "Quit using Info"
+msgstr "Salir de esta aplicación informática"
+
+#: info/session.c:4895
+msgid "Run command bound to this key's lowercase variant"
+msgstr ""
+"Ejecutar comando asociado a la versión en minúsculas de esta tecla o "
+"combinación de teclas"
+
+#: info/session.c:4906
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "Comando desconocido (%s)."
+
+#: info/session.c:4909
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "\"%s\" es inválido"
+
+#: info/session.c:4910
+#, c-format
+msgid "`%s' is invalid"
+msgstr "`%s' is inválido"
+
+#: info/session.c:5125
+msgid "Add this digit to the current numeric argument"
+msgstr "Sumar este dígito al argumento numérico actual"
+
+#: info/session.c:5134
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "Comenzar (o multiplicar por 4) el argumento numérico actual"
+
+#: info/session.c:5149
+msgid "Internally used by \\[universal-argument]"
+msgstr "Internamente usado por \\[universal-argument]"
+
+#: info/tilde.c:336
+#, c-format
+msgid "readline: Out of virtual memory!\n"
+msgstr "readline: No más memoria virtual disponible!\n"
+
+#: info/variables.c:37
+msgid "When \"On\", footnotes appear and disappear automatically"
+msgstr ""
+"Cuando está activado, notas de pie de página aparecen y desaparecen de forma "
+"automática"
+
+#: info/variables.c:41
+msgid "When \"On\", creating or deleting a window resizes other windows"
+msgstr ""
+"Cuando está activado, crear o eliminar ventanas causa que las adyacentes "
+"sean redimensionadas"
+
+#: info/variables.c:45
+msgid "When \"On\", flash the screen instead of ringing the bell"
+msgstr ""
+"Cuado está activado, causa que la pantalla parpadee en vez de usar efectos "
+"sonoros"
+
+#: info/variables.c:49
+msgid "When \"On\", errors cause the bell to ring"
+msgstr "Cuando esta activado, errores producen un efecto sonoro"
+
+#: info/variables.c:53
+msgid "When \"On\", Info garbage collects files which had to be uncompressed"
+msgstr ""
+"Cuando está activado, Info recolecta ficheros que tuvieron que ser "
+"descomprimidos"
+
+#: info/variables.c:56
+msgid "When \"On\", the portion of the matched search string is highlighted"
+msgstr ""
+"Cuando está activado, la porción de cadena de texto que concuerda con la "
+"búsqueda en curso es mostrada en color llamativo"
+
+#: info/variables.c:60
+msgid "Controls what happens when scrolling is requested at the end of a node"
+msgstr "Controla que ocurre al intentar avanzar al final de un nodo"
+
+#: info/variables.c:65
+msgid "Same as scroll-behaviour"
+msgstr "Lo mismo que `scroll-behaviour'"
+
+#: info/variables.c:69
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr ""
+"El número de líneas que avanzar cuando el cursor se mueve fuera de la parte "
+"visible de la ventana"
+
+#: info/variables.c:73
+msgid "Controls whether scroll-behavior affects cursor movement commands"
+msgstr ""
+"Controla si `scroll-behavior' afecta a comandos de movimiento del cursor"
+
+#: info/variables.c:77
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr ""
+"Cuando está activado, Info acepta y muestra caracteres codificados como ISO "
+"Latin"
+
+#: info/variables.c:81
+msgid ""
+"What to do when a scrolling command is issued at the end of the last node"
+msgstr "Controla que ocurre al intentar avanzar al final del último nodo"
+
+#: info/variables.c:88
+msgid "Explain the use of a variable"
+msgstr "Explicar el uso de una variable"
+
+#: info/variables.c:94
+msgid "Describe variable: "
+msgstr "Describir variable: "
+
+#: info/variables.c:113
+msgid "Set the value of an Info variable"
+msgstr "Establecer el valor de una variable"
+
+#: info/variables.c:119
+msgid "Set variable: "
+msgstr "Establecer variable: "
+
+#: info/variables.c:137
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "Dar a %s el valor (%d): "
+
+#: info/variables.c:178
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "Dar a %s el valor (%s): "
+
+#: info/window.c:1026
+msgid "--*** Tags out of Date ***"
+msgstr "--*** Etiquetas antiguas ***"
+
+#: info/window.c:1037
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), líneas ----, "
+
+#: info/window.c:1044
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d líneas --%s--"
+
+#: info/window.c:1048
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d líneas --%s--"
+
+#: info/window.c:1055
+#, c-format
+msgid " Subfile: %s"
+msgstr " Sub-fichero: %s"
+
+#: install-info/install-info.c:221
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: precaución: "
+
+#: install-info/install-info.c:270
+#, c-format
+msgid " for %s"
+msgstr " para %s"
+
+#: install-info/install-info.c:500
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr ""
+"\tPruebe `%s --help' para obtener una lista de las opciones soportadas.\n"
+
+#: install-info/install-info.c:508
+#, c-format
+msgid "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+msgstr "Uso: %s [OPCIÓN]... [FICHERO_INFO [FICHERO_ÃNDICE]]\n"
+
+#: install-info/install-info.c:510
+msgid "Add or remove entries in INFO-FILE from the Info directory DIR-FILE."
+msgstr ""
+"Añade al o elimina del fichero índice FICHERO_ÃNDICE las\n"
+"entradas encontradas en el fichero FICHERO_INFO."
+
+#: install-info/install-info.c:513
+msgid ""
+"Options:\n"
+" --debug report what is being done.\n"
+" --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+" don't insert any new entries.\n"
+" --description=TEXT the description of the entry is TEXT; used with\n"
+" the --name option to become synonymous with the\n"
+" --entry option.\n"
+" --dir-file=NAME specify file name of Info directory file;\n"
+" equivalent to using the DIR-FILE argument.\n"
+" --dry-run same as --test."
+msgstr ""
+"Opciones:\n"
+" --debug reportar que se está haciendo\n"
+" --delete eliminar del fichero índice FICHERO_ÃNDICE las "
+"entradas\n"
+" existentes que referencian el fichero FICHERO_INFO\n"
+" --description=TEXTO la descripción de la entrada es "
+"TEXTO; usado junto con `--name' equivale al `--"
+"entry'.\n"
+" --dir-file=NOMBRE el nombre del fichero índice;\n"
+" equivale al usar el argumento FICHERO_ÃNDICE.\n"
+" --dry-run lo mismo que `--test'."
+
+#: install-info/install-info.c:525
+msgid ""
+" --entry=TEXT insert TEXT as an Info directory entry.\n"
+" TEXT is written as an Info menu item line followed\n"
+" by zero or more extra lines starting with "
+"whitespace.\n"
+" If you specify more than one entry, all are added.\n"
+" If you don't specify any entries, they are determined\n"
+" from information in the Info file itself.\n"
+" When removing, TEXT specifies the entry to remove.\n"
+" TEXT is only removed as a last resort, if the\n"
+" entry as determined from the Info file is not "
+"present,\n"
+" and the basename of the Info file isn't found either."
+msgstr ""
+" --entry=TEXTO insertar el texto TEXTO como entrada en el fichero "
+"índice\n"
+" especificado; TEXTO debe cumplir con el formato usado "
+"para\n"
+" describir elementos de menu en Info, más cero o más "
+"líneas\n"
+" extra que comiencen con un espacio en blanco. Si "
+"usted\n"
+" especifica más de un elemento, todos serán añadidos; "
+"en\n"
+" caso contrario estos vendrán determinados por los "
+"datos\n"
+" existentes en el fichero Info en cuestión."
+
+#: install-info/install-info.c:537
+msgid ""
+" --help display this help and exit.\n"
+" --info-dir=DIR same as --dir-file=DIR/dir.\n"
+" --info-file=FILE specify Info file to install in the directory;\n"
+" equivalent to using the INFO-FILE argument.\n"
+" --item=TEXT same as --entry=TEXT.\n"
+" --keep-old do not replace entries, or remove empty sections.\n"
+" --menuentry=TEXT same as --name=TEXT.\n"
+" --name=TEXT the name of the entry is TEXT; used with --description\n"
+" to become synonymous with the --entry option.\n"
+" --no-indent do not format new entries in the DIR file.\n"
+" --quiet suppress warnings."
+msgstr ""
+" --help mostrar este texto de ayuda.\n"
+" --info-dir=DIRECTORIO alias para `--dir-file=DIRECTORIO/dir.\n"
+" --info-file=FICHERO el fichero Info que instalar en el directorio;\n"
+" equivale al usar el argumento FICHERO_INFO.\n"
+" --item=TEXTO alias para `--entry=TEXTO'.\n"
+" --keep-old no sustituir a entradas, ni eliminar secciones vacías.\n"
+" --menuentry=TEXTO alias para `--name=TEXTO'.\n"
+" --name=TEXTO el nombre de la entrada es TEXTO; "
+"usado junto con `--description' equivale al `--entry'.\n"
+" --no-indent no bien arreglar nuevas entradas en el FICHERO_ÃNDICE.\n"
+" --quiet suprimir mensajes de precaución."
+
+#: install-info/install-info.c:550
+msgid ""
+" --regex=R put this file's entries in all sections that match the\n"
+" regular expression R (ignoring case).\n"
+" --remove same as --delete.\n"
+" --remove-exactly only remove if the info file name matches exactly;\n"
+" suffixes such as .info and .gz are not ignored.\n"
+" --section=SEC put entries in section SEC of the directory.\n"
+" If you specify more than one section, all the entries\n"
+" are added in each of the sections.\n"
+" If you don't specify any sections, they are "
+"determined\n"
+" from information in the Info file itself.\n"
+" --section R SEC equivalent to --regex=R --section=SEC --add-once."
+msgstr ""
+" --regex=EXPREG meter las entradas del fichero Info en cuestión en todas "
+"las\n"
+" secciones que concuerda con la expresión regular "
+"EXPREG\n"
+" (tratando mayúsculas y minúscualas por iguales)\n"
+" --remove alias para `--delete'.\n"
+" --remove-exactly eliminar el fichero Info en cuestión sólo si su nombre\n"
+" concuerda de forma exacta; ficheros con extensiones\n"
+" `.info' y/o `.gz' no son ignorados.\n"
+" --section=SECC emplazar las entradas existentes en el fichero Info al "
+"que\n"
+" se hace referencia en la sección SECC del fichero "
+"índice.\n"
+" Si usted especifica más de una sección, todas las "
+"entradas\n"
+" serán añadidas en cada una de las secciones. Si "
+"ninguna,\n"
+" éstas serán determinadas a partir de la información\n"
+" contenida en el fichero Info en cuestión.\n"
+" --section EXPREG SECC equivale a `--regex=EXPREG --section=SECC --add-"
+"once'."
+
+#: install-info/install-info.c:563
+msgid ""
+" --silent suppress warnings.\n"
+" --test suppress updating of DIR-FILE.\n"
+" --version display version information and exit."
+msgstr ""
+" --silent alias para `--quiet'.\n"
+" --test suprimir la actualización del fichero índice "
+"FICHERO_ÃNDICE.\n"
+" --version mostrar información sobre la versión de esta programa."
+
+#: install-info/install-info.c:570
+msgid ""
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"Reporte cualquier tipo de problema que usted encuentra en el funcionamiento\n"
+"de esta programa <bug-texinfo@gnu.org>. Preguntas y discusiones sobre\n"
+"Texinfo en general pueden ser dirigidas a <help-texinfo@gnu.org>.\n"
+"El sitio web de Texinfo es: http://www.gnu.org/software/texinfo/"
+
+#: install-info/install-info.c:597
+#, c-format
+msgid ""
+"This is the file .../info/dir, which contains the\n"
+"topmost node of the Info hierarchy, called (dir)Top.\n"
+"The first time you invoke Info you start off looking at this node.\n"
+"\n"
+"%s\tThis is the top of the INFO tree\n"
+"\n"
+" This (the Directory node) gives a menu of major topics.\n"
+" Typing \"q\" exits, \"?\" lists all Info commands, \"d\" returns here,\n"
+" \"h\" gives a primer for first-timers,\n"
+" \"mEmacs<Return>\" visits the Emacs manual, etc.\n"
+"\n"
+" In Emacs, you can click mouse button 2 on a menu item or cross reference\n"
+" to select it.\n"
+"\n"
+"%s\n"
+msgstr ""
+"Este es el fichero .../info/dir, el cual contiene el nodo situado\n"
+"en la cúspide de la jerarquía Info, lo cual se llama (dir)Top.\n"
+"La primera vez que usted invoque Info comenzará desde este punto.\n"
+"\n"
+"%s\tEsta es la cúspide de le jerarquía INFO\n"
+"\n"
+" Este (el Directorio principal) proporciona un menú que contiene las "
+"entradas\n"
+" mas usuales. Tecleando \"q\" saldrá de esta aplicación informática, "
+"tecleando\n"
+" \"?\" prodrá producir un listado de todos los comandos disponibles a modo "
+"de\n"
+" referencia; tecleando \"d\" volverá a esta pantalla, \"h\" provee de "
+"información\n"
+" a usuarios/as primerizos/as; presionando \"m\" y escribiendo la palabra "
+"\"Emacs\"\n"
+" podrá visitar el manual de Emacs, etc.\n"
+"\n"
+" También puede usted usar Info desde Emacs. En la versión de Emacs con\n"
+" ventanas puede hacer click con el botón izquierdo del ratón sobre "
+"elementos\n"
+" de menú o sobre enlaces para seleccionarlos o seguirlos.\n"
+"\n"
+"%s\n"
+
+#: install-info/install-info.c:622
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr "%s: No se pudo leer (%s) y no se pudo crear (%s)\n"
+
+#: install-info/install-info.c:715
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: fichero vacío"
+
+#: install-info/install-info.c:1046 install-info/install-info.c:1086
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "`START-INFO-DIR-ENTRY' presente, pero sin pareja (END-INFO-DIR-ENTRY)"
+
+#: install-info/install-info.c:1081
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "`END-INFO-DIR-ENTRY' presente, pero sin pareja (START-INFO-DIR-ENTRY)"
+
+#: install-info/install-info.c:1946 install-info/install-info.c:1956
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr "%s: ya contiene un fichero índice: %s\n"
+
+#: install-info/install-info.c:2036
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: Sólo es necesario especificar el fichero Info una vez.\n"
+
+#: install-info/install-info.c:2069
+#, c-format
+msgid "Extra regular expression specified, ignoring `%s'"
+msgstr "Expresión regular extra especificada, será ignorada `%s'"
+
+#: install-info/install-info.c:2081
+#, c-format
+msgid "Error in regular expression `%s': %s"
+msgstr "Error en la expresión regular `%s': %s"
+
+#: install-info/install-info.c:2139
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "Demasiados argumentos en la línea de comandos `%s'"
+
+#: install-info/install-info.c:2143
+msgid "No input file specified; try --help for more information."
+msgstr ""
+"No se ha especificado fichero de entrada;\n"
+"pruebe usted la opción `--help' para obetener más información."
+
+#: install-info/install-info.c:2146
+msgid "No dir file specified; try --help for more information."
+msgstr ""
+"Fichero índice no especificado;\n"
+"pruebe usted la opción `--help' para obtener más información."
+
+#: install-info/install-info.c:2288
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "No existe constancia de entrada `dir' en `%s'"
+
+#: install-info/install-info.c:2536
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "No se encontraron entradas para `%s'; nada será borrado"
+
+#: lib/xexit.c:54
+msgid "ferror on stdout\n"
+msgstr "error `ferror' en descriptor de salida estándar (stdout)\n"
+
+#: lib/xexit.c:59
+msgid "fflush error on stdout\n"
+msgstr "error `fflush' en descriptor de salida estándar (stdout)\n"
+
+#: makeinfo/cmds.c:582 makeinfo/cmds.c:604
+#, c-format
+msgid "arguments to @%s ignored"
+msgstr "argumentos para @%s serán ignorados"
+
+#: makeinfo/cmds.c:779
+msgid "January"
+msgstr "Enero"
+
+#: makeinfo/cmds.c:779
+msgid "February"
+msgstr "Febrero"
+
+#: makeinfo/cmds.c:779
+msgid "March"
+msgstr "Marzo"
+
+#: makeinfo/cmds.c:779
+msgid "April"
+msgstr "Abril"
+
+#: makeinfo/cmds.c:779
+msgid "May"
+msgstr "Mayo"
+
+#: makeinfo/cmds.c:780
+msgid "June"
+msgstr "Junio"
+
+#: makeinfo/cmds.c:780
+msgid "July"
+msgstr "Julio"
+
+#: makeinfo/cmds.c:780
+msgid "August"
+msgstr "Agosto"
+
+#: makeinfo/cmds.c:780
+msgid "September"
+msgstr "Septiembre"
+
+#: makeinfo/cmds.c:780
+msgid "October"
+msgstr "Octubre"
+
+#: makeinfo/cmds.c:781
+msgid "November"
+msgstr "Noviembre"
+
+#: makeinfo/cmds.c:781
+msgid "December"
+msgstr "Diciembre"
+
+#: makeinfo/cmds.c:1131
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "carácter extraño %c en @var"
+
+#: makeinfo/cmds.c:1174
+msgid "@sc argument all uppercase, thus no effect"
+msgstr ""
+"Todos los argumentos dados a la primitiva `@sc' están en mayúsculas. No "
+"tendrán efecto alguno"
+
+#: makeinfo/cmds.c:1229
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr ""
+"a continuación se esperaba ver el símbolo `{', pero el carácter `%c' ha sido "
+"leído en su lugar"
+
+#: makeinfo/cmds.c:1269
+msgid "end of file inside verb block"
+msgstr "fin de fichero dentro de bloque `verb'"
+
+#: makeinfo/cmds.c:1277
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr ""
+"a continuación se esperaba ver el símbolo `}', pero el carácter `%c' ha sido "
+"leído en su lugar"
+
+#: makeinfo/cmds.c:1308
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+"@strong{Note...} produce una referencia no deseada en Info; reescríbalo para "
+"que esto no ocurra"
+
+#: makeinfo/cmds.c:1504
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s es una sintaxis ya obsoleta"
+
+#: makeinfo/cmds.c:1612
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "@sp requiere un argumento numérico positivo, no `%s'"
+
+#: makeinfo/cmds.c:2023 makeinfo/footnote.c:81
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "Argumento erróneo para %c%s"
+
+#: makeinfo/cmds.c:2033 makeinfo/makeinfo.c:4317
+msgid "asis"
+msgstr "asis"
+
+#: makeinfo/cmds.c:2035 makeinfo/cmds.c:2065 makeinfo/makeinfo.c:4319
+msgid "none"
+msgstr "none"
+
+#: makeinfo/cmds.c:2049
+#, c-format
+msgid "Bad argument to @%s"
+msgstr "Argumento erróneo para @%s"
+
+#: makeinfo/cmds.c:2063
+msgid "insert"
+msgstr "insert"
+
+#: makeinfo/cmds.c:2079
+#, c-format
+msgid "Bad argument to @%s: %s"
+msgstr "Argumento erróneo para @%s: %s"
+
+#: makeinfo/cmds.c:2162
+#, c-format
+msgid "Expected @%s on or off, not `%s'"
+msgstr "Se esperaba leer @%s \"on\" u \"off\", no `%s'"
+
+#: makeinfo/cmds.c:2182
+#, c-format
+msgid "Only @%s 10 or 11 is supported, not `%s'"
+msgstr "Sólo @%s 10 or 11 está soportado, no `%s'"
+
+#: makeinfo/defun.c:83
+msgid "Missing `}' in @def arg"
+msgstr "La construcción `@def arg' necesita de un símbolo `}' al final"
+
+#: makeinfo/defun.c:711
+#, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr "Debe estar bajo la influencia del entorno `@%s' para poder usar `@%s'"
+
+#: makeinfo/files.c:434
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:637
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr "se ha omitido `%s' antes del nombre de fichero de salida"
+
+#: makeinfo/files.c:645
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr ""
+"se ha omitido `%s', ya que estamos escribiendo al descriptor de salida "
+"estándar (stdout)"
+
+#: makeinfo/files.c:693
+msgid "Output buffer not empty."
+msgstr "El acumulador (buffer) de salida no está vacío."
+
+#: makeinfo/float.c:181
+#, c-format
+msgid "Requested float type `%s' not previously used"
+msgstr "El tipo de construccion `float' `%s' no ha sido usado previamente"
+
+#: makeinfo/float.c:376 makeinfo/float.c:382 makeinfo/index.c:959
+#: makeinfo/index.c:965
+msgid "See "
+msgstr "Véase "
+
+#: makeinfo/footnote.c:149
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "`%c%s' necesita de un argumento `{...}', y no simplemente de `%s'"
+
+#: makeinfo/footnote.c:164
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "No se han cerrado llaves para la nota de pie de página `%s'"
+
+#: makeinfo/footnote.c:197
+msgid "Footnote defined without parent node"
+msgstr "Nota de pie de página definida sin nodo al que referirse"
+
+#: makeinfo/footnote.c:209
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "No está permitido anidar notas a pie de página en sí mismas"
+
+#: makeinfo/footnote.c:301 makeinfo/index.c:187
+msgid "Footnotes"
+msgstr "Notas a pie de página"
+
+#: makeinfo/html.c:91
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr "%s: no se pudo abrir --css-file: %s"
+
+#: makeinfo/html.c:180
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr "%s:%d: --css-file finaliza con un comentario"
+
+#: makeinfo/html.c:426
+msgid "[unexpected] no html tag to pop"
+msgstr "[inesperado] no etiqueta `html' que procesar"
+
+#: makeinfo/html.c:800
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "[inesperado] el nombre de nodo `%s' es inválido"
+
+#: makeinfo/index.c:167
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "Ãndice desconocido `%s'"
+
+#: makeinfo/index.c:232
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr "Info no puede manejar `:' en la entrada de índice `%s'"
+
+#: makeinfo/index.c:410
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "Ya existe un índice llamado `%s'"
+
+#: makeinfo/index.c:453
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "Ãndice desconocido `%s' y/o `%s' en `@synindex'"
+
+#: makeinfo/index.c:676
+msgid "(line )"
+msgstr "(línea )"
+
+#: makeinfo/index.c:684
+#, c-format
+msgid "(line %*d)"
+msgstr "(línea %*d)"
+
+#: makeinfo/index.c:765
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "Ãndice desconocido `%s' en `@printindex'"
+
+#: makeinfo/index.c:834
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "La entrada para el índice `%s' se encuentra fuera de nodo alguno"
+
+#: makeinfo/index.c:837 makeinfo/index.c:873
+msgid "(outside of any node)"
+msgstr "(fuera de nodo alguno)"
+
+#: makeinfo/insertion.c:161
+msgid "@item not allowed in argument to @itemize"
+msgstr "el uso de `@item' no está permitido como argumento de `@itemize'"
+
+#: makeinfo/insertion.c:242
+msgid "Broken-Type in insertion_type_pname"
+msgstr "Tipo erróneo en `insertion_type_pname'"
+
+#: makeinfo/insertion.c:338
+msgid "Enumeration stack overflow"
+msgstr "Desbordamiento de la pila por enumeración"
+
+#: makeinfo/insertion.c:370
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr ""
+"desbordamiento por tamaño de palabra, comenzando de nuevo en el carácter %c"
+
+#: makeinfo/insertion.c:639
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "`%s' requiere un argumento: el procesador de formato para %citem"
+
+#: makeinfo/insertion.c:727
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr "entornos `%cfloat' no pueden ser anidados"
+
+#: makeinfo/insertion.c:981
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "Se esperaba ver `@end' `%s', pero se ha leído `%s'"
+
+#: makeinfo/insertion.c:1349
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "No hay constancia de final de bloque `%cend %s'"
+
+#: makeinfo/insertion.c:1618
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s require una letra o número"
+
+#: makeinfo/insertion.c:1718
+msgid "end of file inside verbatim block"
+msgstr "fin de fichero sobre bloque de texto literal"
+
+#: makeinfo/insertion.c:1942
+#, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "@%s carece de sentido si se da fuera de entornos como `@float'"
+
+#: makeinfo/insertion.c:1978
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "`@menu' ha sido leído antes que `@node', se creará un nodo `Top'"
+
+#: makeinfo/insertion.c:1979
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr ""
+"¿Quizás su nodo `@top' debería quedar bajo la influencia de un bloque "
+"`@ifnottex' en vez de la de un bloque `@ifinfo'?"
+
+#: makeinfo/insertion.c:1991
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr ""
+"`@detailmenu' ha sido leído antes que nodo alguno, se creará un nodo `Top'"
+
+#: makeinfo/insertion.c:2047
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr ""
+"`@%s' carece de sentido fuera de influencias de entornos como `@titlepage' o "
+"`@quotation'"
+
+#: makeinfo/insertion.c:2061
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr ""
+"@%s carece de sentido fuera de influencias de entornos como `@titlepage'"
+
+#: makeinfo/insertion.c:2092
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "Final de bloque inexistente (`%c%s')"
+
+#: makeinfo/insertion.c:2097
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "`%c%s' necesita de algún argumento tras su declaración"
+
+#: makeinfo/insertion.c:2103
+#, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "`%s' no es un argumento correcto para `@%s', se usará `%s'"
+
+#: makeinfo/insertion.c:2200
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "`@%s' carece de sentido bajo la influencia de un bloque `@%s'"
+
+#: makeinfo/insertion.c:2209
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "`@itemx' carece de sentido bajo la influencia de un bloque `%s'"
+
+#: makeinfo/insertion.c:2383
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "`%c%s' ha sido leído fuera de un bloque de inserción"
+
+#: makeinfo/lang.c:1218
+#, c-format
+msgid "no default territory known for language `%s'"
+msgstr "No existe constancia de territorio por defecto para el lenguaje `%s'"
+
+#: makeinfo/lang.c:1281
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr ""
+"`%s' no es válido como código de lenguaje alguno que cumpla con ISO 639"
+
+#: makeinfo/lang.c:1399
+#, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "`%s' no se corresponde con ningún tipo de codificación conocido"
+
+#: makeinfo/lang.c:1407
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "lo sentimos, el tipo de codificación `%s' no está soportado"
+
+#: makeinfo/lang.c:1492
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "carácter codificado no válido `%s'"
+
+#: makeinfo/lang.c:1800
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr ""
+"el uso de `%c%s' presupone como siguientes argumentos `i' o `j', no `%c'"
+
+#: makeinfo/lang.c:1804
+#, c-format
+msgid "%c%s expects a single character `i' or `j' as argument"
+msgstr "el uso `%c%s' presupone como argumentos los caracteres `i' o `j'"
+
+#: makeinfo/macro.c:128
+#, c-format
+msgid "macro `%s' previously defined"
+msgstr "el macro `%s' ya ha sido definido en este documento"
+
+#: makeinfo/macro.c:132
+#, c-format
+msgid "here is the previous definition of `%s'"
+msgstr "la definición previa de `%s' se encuentra aquí"
+
+#: makeinfo/macro.c:359
+#, c-format
+msgid "\\ in macro expansion followed by `%s' instead of parameter name"
+msgstr ""
+"\\ fue leído durante la expansión del macro seguido de `%s' en vez de por un "
+"parámetro válido"
+
+#: makeinfo/macro.c:401
+#, c-format
+msgid "Macro `%s' called on line %d with too many args"
+msgstr "La llamada al macro `%s' en la línea %d contiene demasiados argumentos"
+
+#: makeinfo/macro.c:580
+#, c-format
+msgid "%cend macro not found"
+msgstr "no se encontró declaración de final de macro (`%cend')"
+
+#: makeinfo/macro.c:591
+msgid "@allow-recursion is deprecated; please use @rmacro instead"
+msgstr ""
+"`@allow-recursion' consta como una primitiva obsoleta; use por favor "
+"`@rmacro' en su lugar"
+
+#: makeinfo/macro.c:606
+msgid "@quote-arg is deprecated; arguments are quoted by default"
+msgstr ""
+"`@quote-arg' consta como una primitiva obsoleta; sus argumentos son "
+"entrecomillados por defecto"
+
+#: makeinfo/macro.c:649
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "se esperaba leer `@end %s' pero se ha leído `@%s'"
+
+#: makeinfo/makeinfo.c:188
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr ""
+"Demasiados errores! Se da por finalizado el proceso de este fichero aquí.\n"
+
+#: makeinfo/makeinfo.c:306
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: precaución: "
+
+#: makeinfo/makeinfo.c:325 makeinfo/makeinfo.c:2340
+#, c-format
+msgid "Misplaced %c"
+msgstr "Carácter `%c' fuera de lugar"
+
+#: makeinfo/makeinfo.c:344
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Pruebe `%s --help' para obtener más información.\n"
+
+#: makeinfo/makeinfo.c:347
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "Uso: %s [OPCIÓN]... FICHERO-TEXINFO...\n"
+
+#: makeinfo/makeinfo.c:350
+msgid ""
+"Translate Texinfo source documentation to various other formats, by default\n"
+"Info files suitable for reading online with Emacs or standalone GNU Info.\n"
+msgstr ""
+"Convierte ficheros escritos en Texinfo a varios otros formatos, por defecto "
+"a\n"
+"formato Info, que puede ser leído con Emacs o el visor de ficheros Info de "
+"GNU.\n"
+
+#: makeinfo/makeinfo.c:354
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\n"
+" --document-language=STR locale to use in translating Texinfo keywords\n"
+" for the output document (default C).\n"
+" --force preserve output even if errors.\n"
+" --help display this help and exit.\n"
+" --no-validate suppress node cross-reference validation.\n"
+" --no-warn suppress warnings (but not errors).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"Opciones generales;\n"
+" --error-limit=NÚMERO dar por finalizado el proceso del fichero en\n"
+" cuestión tras un número de errors mayor o "
+"igual\n"
+" a NÚMERO (por defecto %d).\n"
+" --document-language=TEXTO\n"
+" locale a usar con el fin de traducir "
+"primitivas\n"
+" Texinfo para el documento final (C por "
+"defecto).\n"
+" --force generar documento de salida incluso si se\n"
+" encontraron errores durante el proceso.\n"
+" --help mostrar este mensaje de ayuda.\n"
+" --no-validate suprimir la validación de enlaces.\n"
+" --no-warn suprimir mensajes de precaución (pero no "
+"errores).\n"
+" -v, --verbose explicar que se está haciendo durante el "
+"proceso\n"
+" del documento en cuestión.\n"
+" --version mostrar información sobre la versión de esta\n"
+" aplicación informática.\n"
+
+#: makeinfo/makeinfo.c:369
+#, no-wrap
+msgid ""
+"Output format selection (default is to produce Info):\n"
+" --docbook output Docbook XML rather than Info.\n"
+" --html output HTML rather than Info.\n"
+" --xml output Texinfo XML rather than Info.\n"
+" --plaintext output plain text rather than Info.\n"
+msgstr ""
+"Selección de formato de salida (por defecto se producen ficheros Info):\n"
+" --docbook generar un fichero en formato Docbook XML.\n"
+" --html generar un fichero en formato HTML.\n"
+" --xml generar un fichero en formato Texinfo XML.\n"
+" --plaintext generar un fichero en texto plano.\n"
+
+#: makeinfo/makeinfo.c:377
+msgid ""
+"General output options:\n"
+" -E, --macro-expand=FILE output macro-expanded source to FILE,\n"
+" ignoring any @setfilename.\n"
+" --no-headers suppress node separators, Node: lines, and "
+"menus\n"
+" from Info output (thus producing plain "
+"text)\n"
+" or from HTML (thus producing shorter "
+"output);\n"
+" also, write to standard output by default.\n"
+" --no-split suppress the splitting of Info or HTML "
+"output,\n"
+" generate only one output file.\n"
+" --number-sections output chapter and sectioning numbers.\n"
+" -o, --output=FILE output to FILE (or directory if split HTML).\n"
+msgstr ""
+"Opciones generales de salida:\n"
+" -E, --macro-expand=FICHERO escribir un fichero FICHERO en el que "
+"cualquier\n"
+" macro presente es expandido (primitivas\n"
+" `@setfilename' serán ignoradas).\n"
+" --no-headers suprimir separadores de nodos, líneas de "
+"`Nodo:'\n"
+" y menús del fichero Info (produciendo así\n"
+" texto plano) o de HTML (produciendo así un\n"
+" documento menor); también se escribe por\n"
+" defecto a la salida estándar (stdout).\n"
+" --no-split no generar un documento Info o HTML multi-"
+"página;\n"
+" generar un sólo documento que ocurre en una\n"
+" sóla página.\n"
+" --number-sections numerar capítulos y secciones.\n"
+" -o, --output=FICHERO escribir en fichero FICHERO (se toma como "
+"nombre\n"
+" de directorio si el formato de salida es "
+"HTML\n"
+" en modo multi-documento/multi-página).\n"
+
+#: makeinfo/makeinfo.c:391
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --disable-encoding do not output accented and special characters\n"
+" in Info output based on @documentencoding.\n"
+" --enable-encoding override --disable-encoding (default).\n"
+" --fill-column=NUM break Info lines at NUM characters (default %"
+"d).\n"
+" --footnote-style=STYLE output footnotes in Info according to STYLE:\n"
+" `separate' to put them in their own node;\n"
+" `end' to put them at the end of the node, "
+"in\n"
+" which they are defined (this is the "
+"default).\n"
+" --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %"
+"d).\n"
+" If VAL is `none', do not indent; if VAL is\n"
+" `asis', preserve existing indentation.\n"
+" --split-size=NUM split Info files at size NUM (default %d).\n"
+msgstr ""
+"Opciones para Info y texto plano:\n"
+" --disable-encoding no generar acentos y caracteres especiales en "
+"el\n"
+" documento de salida, ignorar la primitiva\n"
+" `@documentencoding' si está presente.\n"
+" --enable-encoding contradecir `--disable-encoding' (por "
+"defecto).\n"
+" --fill-column=NÚMERO no generar líneas que contengan un número de\n"
+" caracteres mayor que NÚMERO (por defecto %"
+"d).\n"
+" --footnote-style=ESTILO generar notas a pie de página de acuerdo a "
+"ESTILO:\n"
+" `separate' para emplazarlas en un nodo "
+"propio;\n"
+" `end' para emplazarlas al final de cada "
+"nodo\n"
+" en el que son definidas (este es el estilo "
+"por\n"
+" defecto).\n"
+" --paragraph-indent=NÚMERO\n"
+" proveer a párrafos con un márgen dado por el\n"
+" número de espacios NÚMERO (por defecto %d). "
+"Si\n"
+" NÚMERO fuese `none' no se insertarán "
+"márgenes;\n"
+" si NÚMERO es `asis', se preservarán los "
+"márgenes\n"
+" tal cual son leídos desde el fichero.\n"
+" --split-size=NÚMERO generar un documento multi-página, en el que "
+"cada\n"
+" una es de un tamaño NÚMERO (por defecto %"
+"d).\n"
+
+#: makeinfo/makeinfo.c:409
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+" --css-ref=URL generate reference to a CSS file.\n"
+" --internal-links=FILE produce list of internal links in FILE.\n"
+" --transliterate-file-names\n"
+" produce file names in ASCII transliteration.\n"
+msgstr ""
+"Opciones para HTML:\n"
+" --css-include=FICHERO incluir FICHERO dentro de directivas <style>;\n"
+" leer entrada estándar si FICHERO es -.\n"
+" --css-ref=URL generar referencias a una hoja de estilo CSS.\n"
+" --internal-links=FICHERO\n"
+" producir lista de enlaces internos en "
+"FICHERO.\n"
+" --transliterate-file-names\n"
+" producir nombres de ficheros en formato "
+"ASCII.\n"
+
+#: makeinfo/makeinfo.c:419
+#, c-format
+msgid ""
+"Options for XML and Docbook:\n"
+" --output-indent=VAL indent XML elements by VAL spaces (default %"
+"d).\n"
+" If VAL is 0, ignorable whitespace is "
+"dropped.\n"
+msgstr ""
+"Opción para XML y Docbook:\n"
+" --output-indent=NÚMERO dar este número de espacios de margen (por\n"
+" defecto %d) a elementos XML; si NÚMERO es "
+"0,\n"
+" espacios que pueden ser ignorados sin "
+"alterar\n"
+" el significado del documento lo serán.\n"
+
+#: makeinfo/makeinfo.c:426
+msgid ""
+"Input file options:\n"
+" --commands-in-node-names allow @ commands in node names.\n"
+" -D VAR define the variable VAR, as with @set.\n"
+" -I DIR append DIR to the @include search path.\n"
+" -P DIR prepend DIR to the @include search path.\n"
+" -U VAR undefine the variable VAR, as with @clear.\n"
+msgstr ""
+"Opciones para ficheros de entrada:\n"
+" --commands-in-node-names permitir comandos `@' en nombres de nodo.\n"
+" -D VARIABLE definir la variable VARIABLE, tal y como si "
+"así\n"
+" hubiera sido especificado en el propio\n"
+" documento mediante el uso de `@set "
+"VARIABLE'.\n"
+" -I DIRECTORIO añadir el directorio DIRECTORIO al final de "
+"la\n"
+" lista de búsqueda para primitivas "
+"`@include'.\n"
+" -P DIRECTORIO añadir el directorio DIRECTORIO al "
+"principio\n"
+" de la lista de búsqueda para primitivas\n"
+" `@include'.\n"
+" -U VARIABLE definir como nula la variable VARIABLE, tal "
+"y\n"
+" como si así hubiera sido especificado en "
+"el\n"
+" propio documento mediante el uso de\n"
+" `@clear VARIABLE'.\n"
+
+#: makeinfo/makeinfo.c:435
+msgid ""
+"Conditional processing in input:\n"
+" --ifdocbook process @ifdocbook and @docbook even if\n"
+" not generating Docbook.\n"
+" --ifhtml process @ifhtml and @html even if not generating HTML.\n"
+" --ifinfo process @ifinfo even if not generating Info.\n"
+" --ifplaintext process @ifplaintext even if not generating plain text.\n"
+" --iftex process @iftex and @tex; implies --no-split.\n"
+" --ifxml process @ifxml and @xml.\n"
+" --no-ifdocbook do not process @ifdocbook and @docbook text.\n"
+" --no-ifhtml do not process @ifhtml and @html text.\n"
+" --no-ifinfo do not process @ifinfo text.\n"
+" --no-ifplaintext do not process @ifplaintext text.\n"
+" --no-iftex do not process @iftex and @tex text.\n"
+" --no-ifxml do not process @ifxml and @xml text.\n"
+"\n"
+" Also, for the --no-ifFORMAT options, do process @ifnotFORMAT text.\n"
+msgstr ""
+"Opciones para el proceso condicional de ficheros de entrada:\n"
+" --ifdocbook procesar primitivas `@ifdocbook' y `@docbook' incluso "
+"cuando\n"
+" el formato de salida no es Docbook.\n"
+" --ifhtml procesar primitivas `@ifhtml' y `@html' incluso cuando "
+"el\n"
+" formato de salida no es HTML.\n"
+" --ifinfo procesar primitivas `@ifinfo' incluso cuando el formato "
+"de\n"
+" salida no es Info.\n"
+" --ifplaintext procesar primitivas `@ifplaintext' incluso cuando el "
+"formato\n"
+" de salida no es texto plano.\n"
+" --iftex procesar primitivas `@iftex' y `@tex', conlleva\n"
+" `--no-split'.\n"
+" --ifxml procesar primitivas `@ifxml' y `@xml'.\n"
+" --no-ifdocbook no procesar primitivas `@ifdocbook' o `@docbook'.\n"
+" --no-ifhtml no procesar primitivas `@ifhtml' o `@html'.\n"
+" --no-ifinfo no procesar primitivas `@ifinfo'.\n"
+" --no-ifplaintext no procesar primitivas `@ifplaintext'.\n"
+" --no-iftex no procesar primitivas `@iftex' o `@tex'.\n"
+" --no-ifxml no procesar primitivas `@ifxml' o `@xml'.\n"
+"\n"
+" También, para las opciones de tipo --no-ifFORMATO, procesar "
+"`@ifnotFORMATO'.\n"
+
+#: makeinfo/makeinfo.c:454
+msgid ""
+" The defaults for the @if... conditionals depend on the output format:\n"
+" if generating HTML, --ifhtml is on and the others are off;\n"
+" if generating Info, --ifinfo is on and the others are off;\n"
+" if generating plain text, --ifplaintext is on and the others are off;\n"
+" if generating XML, --ifxml is on and the others are off.\n"
+msgstr ""
+" Las acciones por defecto para primitivas condicionales del tipo `@if...'\n"
+" dependen en gran medida del formato de salida seleccionado:\n"
+" si este es HTML, --ifhtml estará activo, mientras el resto no;\n"
+" si este es Info, --ifinfo estará activo, mientras el resto no;\n"
+" si este es texto plano, --ifplaintext estará activo, mientras el resto "
+"no;\n"
+" si este es XML, --ifxml estará activo, mientras el resto no;\n"
+
+#: makeinfo/makeinfo.c:462
+msgid ""
+"Examples:\n"
+" makeinfo foo.texi write Info to foo's @setfilename\n"
+" makeinfo --html foo.texi write HTML to @setfilename\n"
+" makeinfo --xml foo.texi write Texinfo XML to @setfilename\n"
+" makeinfo --docbook foo.texi write DocBook XML to @setfilename\n"
+" makeinfo --no-headers foo.texi write plain text to standard "
+"output\n"
+"\n"
+" makeinfo --html --no-headers foo.texi write html without node lines, "
+"menus\n"
+" makeinfo --number-sections foo.texi write Info with numbered sections\n"
+" makeinfo --no-split foo.texi write one Info file however big\n"
+msgstr ""
+"Ejemplos:\n"
+"\n"
+" makeinfo foo.texi escribe el fichero cuyo nombre "
+"viene\n"
+" dado por el contenido de la "
+"primitiva\n"
+" `@setfilename' en el fichero de\n"
+" entrada, en formato Info.\n"
+"\n"
+" makeinfo --html foo.texi escribe el fichero cuyo nombre "
+"viene\n"
+" dado por el contenido de la "
+"primitiva\n"
+" `@setfilename' en el fichero de\n"
+" entrada, en formato html.\n"
+"\n"
+" makeinfo --docbook foo.texi escribe el fichero cuyo nombre "
+"viene\n"
+" dado por el contenido de la "
+"primitiva\n"
+" `@setfilename' en el fichero de\n"
+" entrada, en formato docbook.\n"
+"\n"
+" makeinfo --html --no-headers foo.texi escribe el fichero cuyo nombre "
+"viene\n"
+" dado por el contenido de la "
+"primitiva\n"
+" `@setfilename' en el fichero de\n"
+" entrada, en formato HTML, sin menus "
+"o\n"
+" información alguna sobre nodos o\n"
+" líneas.\n"
+"\n"
+" makeinfo --number-sections foo.texi escribe el fichero cuyo nombre "
+"viene\n"
+" dado por el contenido de la "
+"primitiva\n"
+" `@setfilename' en el fichero de\n"
+" entrada, en formato Info, "
+"numerando\n"
+" secciones y capítulos.\n"
+"\n"
+" makeinfo --no-split foo.texi escribe el fichero cuyo nombre "
+"viene\n"
+" dado por el contenido de la "
+"primitiva\n"
+" `@setfilename' en el fichero de\n"
+" entrada, en formato Info, todo en "
+"un\n"
+" mismo fichero.\n"
+
+#: makeinfo/makeinfo.c:622
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr "%s: Ignorando valor desconocido de TEXINFO_OUTPUT_FORMAT (`%s').\n"
+
+#: makeinfo/makeinfo.c:670 makeinfo/makeinfo.c:696 makeinfo/makeinfo.c:720
+#: makeinfo/makeinfo.c:780
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr "%s: argumento de %s debe ser numérico, así que `%s' no es válido.\n"
+
+#: makeinfo/makeinfo.c:683
+#, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "%s: no se pudo abrir el fichero `%s' para la expansión de macros"
+
+#: makeinfo/makeinfo.c:688
+#, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "%s: ignorando el segundo argumento `%s' para la expansión de macros.\n"
+
+#: makeinfo/makeinfo.c:733
+#, c-format
+msgid "%s: could not open internal links output `%s'"
+msgstr "%s: no se pudo abrir el fichero `%s' para los enlaces internos"
+
+#: makeinfo/makeinfo.c:738
+#, c-format
+msgid "%s: ignoring second internal links output `%s'.\n"
+msgstr "%s: ignorando el segundo argumento `%s' para los enlaces internos.\n"
+
+#: makeinfo/makeinfo.c:751
+#, c-format
+msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
+msgstr ""
+"%s: `--paragraph-indent' toma un argumento numérico/`none'/`asis', y no `%"
+"s'.\n"
+
+#: makeinfo/makeinfo.c:769
+#, c-format
+msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
+msgstr ""
+"%s: `--footnote-style' toma como argumentos `separate' o `end', no `%s'.\n"
+
+#: makeinfo/makeinfo.c:844
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: se necesita nombre de fichero que procesar.\n"
+
+#: makeinfo/makeinfo.c:1041 makeinfo/makeinfo.c:4166
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr "Comentario multi-línea `%c%s' usado inapropiadamente"
+
+#: makeinfo/makeinfo.c:1044
+#, c-format
+msgid "Expected `%s'"
+msgstr "Se esperaba `%s'"
+
+#: makeinfo/makeinfo.c:1521
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "No se pudo crear el directorio `%s': %s"
+
+#: makeinfo/makeinfo.c:1567
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "No se encontró `%s' en `%s'"
+
+#: makeinfo/makeinfo.c:1647
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr ""
+"%s: Ignorando expansión de macro a descriptor de salida estándar (stdout) ya "
+"que la salida Info va a ser escrita en el mismo.\n"
+
+#: makeinfo/makeinfo.c:1677
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "Generando %s fichero `%s' a partir de `%s'.\n"
+
+#: makeinfo/makeinfo.c:1744
+#, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: El fichero de expansión de macros `%s' será borrado debido a la cantidad "
+"de errores encontrados; use `--force' para preservar el mismo.\n"
+
+#: makeinfo/makeinfo.c:1799
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: El fichero `%s' será borrado debido a la cantidad de errores "
+"encontrados; use `--force' para preservar el mismo.\n"
+
+#: makeinfo/makeinfo.c:1818
+#, c-format
+msgid ""
+"%s: Removing internal links output file `%s' due to errors; use --force to "
+"preserve.\n"
+msgstr ""
+"%s: El fichero de enlaces internos `%s' será borrado debido a la cantidad de "
+"errores encontrados; use `--force' para preservar el mismo.\n"
+
+#: makeinfo/makeinfo.c:2113
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "Comando desconocido `%s'"
+
+#: makeinfo/makeinfo.c:2135
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr "Use llaves para suplir un comando como argumento a @%s"
+
+#: makeinfo/makeinfo.c:2394
+#, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s se esperaban llaves"
+
+#: makeinfo/makeinfo.c:2407
+msgid "Unmatched }"
+msgstr "`}' desemparejada"
+
+#: makeinfo/makeinfo.c:2455
+msgid "NO_NAME!"
+msgstr "NO SE ENCONTRO FUNCIÓN!"
+
+#: makeinfo/makeinfo.c:2476
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s se esperaba leer `}'"
+
+#: makeinfo/makeinfo.c:3482
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "La imagen `%s' no es válida (para su salida en formato HTML): %s"
+
+#: makeinfo/makeinfo.c:3488
+#, c-format
+msgid "No such file `%s'"
+msgstr "El fichero `%s' no existe"
+
+#: makeinfo/makeinfo.c:3624
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr ""
+"La imagen `%s' no es válida (para su salida en formato texto plano): `%s'"
+
+#: makeinfo/makeinfo.c:3633
+msgid "@image missing filename argument"
+msgstr "la primitiva `@image' carece de referencia a fichero alguno"
+
+#: makeinfo/makeinfo.c:3851
+#, c-format
+msgid "undefined flag: %s"
+msgstr "etiqueta indefinida: %s"
+
+#: makeinfo/makeinfo.c:3852
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{No se ha especificado un valor para `%s'}"
+
+#: makeinfo/makeinfo.c:3904
+#, c-format
+msgid "%c%s requires a name"
+msgstr "la construcción `%c%s' requiere un nombre"
+
+#: makeinfo/makeinfo.c:4010
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr ""
+"Se ha alcanzado el fin de fichero y no hay constancia de fin de bloque "
+"(`@end %s')"
+
+#: makeinfo/makeinfo.c:4258
+#, c-format
+msgid "`%.40s...' is too long for expansion; not expanded"
+msgstr "`%.40s...' es demasiado largo para su expansión; no será expandido"
+
+#: makeinfo/multi.c:116
+msgid "Missing } in @multitable template"
+msgstr "Se esperaba leer `}' en la plantilla `@multitable'"
+
+#: makeinfo/multi.c:260
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "ignorando texto incoherente `%s' después de `@multitable'"
+
+#: makeinfo/multi.c:400
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "Demasiadas columnas para el elemento multi-tabla (max %d)"
+
+#: makeinfo/multi.c:563
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "[inesperado] no se pudo seleccionar la columna #%d en la multi-tabla"
+
+#: makeinfo/multi.c:592
+msgid "ignoring @tab outside of multitable"
+msgstr "ignorando `@tab' no influenciado por el entorno `multitable'"
+
+#: makeinfo/multi.c:640
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** Salida multi-columna desde la última fila:\n"
+
+#: makeinfo/multi.c:643
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* columna #%d: salida = %s\n"
+
+#: makeinfo/node.c:279
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "El nodo `%s' ha sido definido previamente en la línea %d"
+
+#: makeinfo/node.c:647
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "Formateando nodo %s...\n"
+
+#: makeinfo/node.c:714
+#, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr "El nodo `%s' requiere un comando de sección, como por ejemplo `%c%s'"
+
+#: makeinfo/node.c:878
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "No se ha especificado nombre de nodo alguno para el comando `%c%s'"
+
+#: makeinfo/node.c:919 makeinfo/node.c:1163
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr "El enlace `%s' y el nodo `%s' apuntan al mismo fichero"
+
+#: makeinfo/node.c:922
+msgid "This @anchor command ignored; references to it will not work"
+msgstr ""
+"Este comando `@anchor' será ignorado; referencias a este no estarán "
+"disponibles"
+
+#: makeinfo/node.c:924 makeinfo/node.c:1166
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr "Renombre este enlace o use la opción `--no-split'"
+
+#: makeinfo/node.c:954
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr "Texto inesperado al final del fichero multi-página HMTL `%s'"
+
+#: makeinfo/node.c:1160
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr "Los enlaces `%s' y `%s' apuntan al mismo fichero"
+
+#: makeinfo/node.c:1165
+msgid "@anchor command ignored; references to it will not work"
+msgstr ""
+"El comando `@anchor' será ignorado; referencias a este no estarán disponibles"
+
+#: makeinfo/node.c:1362
+#, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr ""
+"`%s' hace referencia a un nodo inexistente (`%s'), quizás debido a un "
+"seccionado incorrecto del documento"
+
+#: makeinfo/node.c:1462
+#, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr ""
+"El próximo campo del nodo `%s' no apunta a lugar alguno, quizás debido a un "
+"seccionado incorrecto del documento"
+
+#: makeinfo/node.c:1465
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "Este nodo (%s) contiene una referencia inválida en el campo `Prev'"
+
+#: makeinfo/node.c:1520
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "El campo `Prev' del nodo `%s' no apunta a sitio alguno"
+
+#: makeinfo/node.c:1524
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "Este nodo (%s) contiene una referencia inválida en el campo `Next'"
+
+#: makeinfo/node.c:1536
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr ""
+"`%s' no contiene referencia a `Up', quizás debido a un seccionado incorrecto "
+"del documento"
+
+#: makeinfo/node.c:1605
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr ""
+"El nodo `%s' carece de elemento de menú alguno para `%s' aunque consta como "
+"destino para `Up'"
+
+#: makeinfo/node.c:1637
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "Nodo `%s' no referenciado"
+
+#: makeinfo/node.c:1727
+#, c-format
+msgid "Removing %s\n"
+msgstr "Eliminando %s\n"
+
+#: makeinfo/node.c:1731
+#, c-format
+msgid "Can't remove file `%s': %s"
+msgstr "No se pudo eliminar `%s': %s"
+
+#: makeinfo/sectioning.c:122
+#, c-format
+msgid "Appendix %c"
+msgstr "Apéndice %c"
+
+#: makeinfo/sectioning.c:467
+#, c-format
+msgid "Internal error (search_sectioning) `%s'!"
+msgstr "Error interno (search_sectioning) `%s'!"
+
+#: makeinfo/sectioning.c:563
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "Error interno (search_sectioning) \"%s\"!"
+
+#: makeinfo/sectioning.c:624
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "`%c%s' es una construcción obsoleta; use `%c%s' en su lugar"
+
+#: makeinfo/sectioning.c:640
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "Ya existe un nodo con %ctop como sección"
+
+#: makeinfo/sectioning.c:648
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "El nodo %ctop está aquí"
+
+#: makeinfo/sectioning.c:664
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "`%ctop' ha sido usado antes de `%cnode', asumiré `%s'"
+
+#: makeinfo/xml.c:1669
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "El fichero de imagen `%s' no es accesible: %s"
+
+#: makeinfo/xml.c:2014
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+"`@headitem' como último elemento de `@multitable' causa que el documento "
+"Docbook resultante sea inválido"
+
+#: makeinfo/xml.c:2150
+msgid "of"
+msgstr "de"
+
+#: makeinfo/xml.c:2155
+msgid "on"
+msgstr "en"
+
+#: makeinfo/xref.c:127
+msgid "First argument to cross-reference may not be empty"
+msgstr "El primer argumento para un enlace siempre debería estar presente"
+
+#: makeinfo/xref.c:252
+#, c-format
+msgid "Empty file name for HTML cross reference in `%s'"
+msgstr "Nombre de fichero no especificado para el enlace HTML `%s'"
+
+#: makeinfo/xref.c:387
+msgid "End of file reached while looking for `.' or `,'"
+msgstr "Se alcanzó el fin de fichero mientras se esperaba ver `.' or `,'"
+
+#: makeinfo/xref.c:390
+#, c-format
+msgid "`.' or `,' must follow @%s, not `%c'"
+msgstr "`@%s' debe ser precedido por `.' o `,', no por `%c'"
+
+#: makeinfo/xref.c:392
+msgid "for cross-references in parentheses, use @pxref"
+msgstr "Para generar enlaces entre paréntesis utilize `@pxref'"
+
+#: makeinfo/xref.c:435
+msgid "First argument to @inforef may not be empty"
+msgstr "El primer argumento de `@inforef' siempre debería estar presente"
+
+#: util/texindex.c:223
+msgid "display this help and exit"
+msgstr "mostrar este texto de ayuda"
+
+#: util/texindex.c:225
+msgid "send output to FILE"
+msgstr "enviar la salida al fichero FICHERO"
+
+#: util/texindex.c:227
+msgid "display version information and exit"
+msgstr "mostrar información sobre la versión de esta aplicación informática"
+
+#: util/texindex.c:237
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "Uso: %s [OPCIÓN]... FICHERO...\n"
+
+#: util/texindex.c:238
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr "Genera un índice ordenado para cada fichero TeX de salida FICHERO.\n"
+
+#: util/texindex.c:241
+#, c-format
+msgid "Usually FILE... is specified as `foo.%c%c' for a document `foo.texi'.\n"
+msgstr ""
+"FICHERO es generalmente especificado como `foo.%c%c' para un documento "
+"llamado `foo.texi'.\n"
+
+#: util/texindex.c:243
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Opciones:\n"
+
+#: util/texindex.c:743
+#, c-format
+msgid "failure reopening %s"
+msgstr "error al re-abrir %s"
+
+#: util/texindex.c:758 util/texindex.c:786
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: no es un fichero índice de Info"
+
+#: util/texindex.c:993
+#, c-format
+msgid "No page number in %s"
+msgstr "No hay constancia de número de página en %s"
+
+#: util/texindex.c:1066
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr "la entrada %s sigue un elemento con nombre secundario"
diff --git a/po/fr.gmo b/po/fr.gmo
new file mode 100644
index 0000000..e1205b9
--- /dev/null
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
new file mode 100644
index 0000000..f375602
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,3943 @@
+# Version française du progiciel texinfo
+# Copyright © 2004 Free Software Foundation, Inc.
+# Michel Robitaille <robitail@iro.umontreal.ca>, traducteur depuis/since 1996.
+#
+# Laurent Bourbeau est le traducteur officiel mais depuis plus d'un
+# an, Michel assume la traduction avec l'accord de Laurent.
+#
+# Laurent Bourbeau <bourbeau@progiciels-bpi.ca>, 2001.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo 4.7.90\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2008-09-18 20:38+0200\n"
+"PO-Revision-Date: 2004-12-06 08:00-05:00\n"
+"Last-Translator: Laurent Bourbeau <bourbeau@progiciels-bpi.ca>\n"
+"Language-Team: French <traduc@traduc.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: gnulib/lib/error.c:125
+msgid "Unknown system error"
+msgstr ""
+
+#: gnulib/lib/getopt.c:526 gnulib/lib/getopt.c:542
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: l'option « %s » est ambiguë\n"
+
+#: gnulib/lib/getopt.c:575 gnulib/lib/getopt.c:579
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: l'option « --%s » ne permet pas un argument\n"
+
+#: gnulib/lib/getopt.c:588 gnulib/lib/getopt.c:593
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: l'option « %c%s » ne permet pas un argument\n"
+
+#: gnulib/lib/getopt.c:636 gnulib/lib/getopt.c:655 gnulib/lib/getopt.c:971
+#: gnulib/lib/getopt.c:990
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: l'option « %s » exige un argument\n"
+
+#: gnulib/lib/getopt.c:693 gnulib/lib/getopt.c:696
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: option non reconnue « --%s »\n"
+
+#: gnulib/lib/getopt.c:704 gnulib/lib/getopt.c:707
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: option non reconnue « %c%s »\n"
+
+#: gnulib/lib/getopt.c:759 gnulib/lib/getopt.c:762
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: option illégale -- %c\n"
+
+#: gnulib/lib/getopt.c:768 gnulib/lib/getopt.c:771
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: option invalide -- %c\n"
+
+#: gnulib/lib/getopt.c:823 gnulib/lib/getopt.c:839 gnulib/lib/getopt.c:1043
+#: gnulib/lib/getopt.c:1061
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: l'option exige un argument -- %c\n"
+
+#: gnulib/lib/getopt.c:892 gnulib/lib/getopt.c:908
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: l'option « -W %s » est ambiguë\n"
+
+#: gnulib/lib/getopt.c:932 gnulib/lib/getopt.c:950
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: l'option « -W %s » ne permet pas un argument\n"
+
+#: gnulib/lib/xalloc-die.c:34 gnulib/lib/xsetenv.c:37
+#, fuzzy, c-format
+msgid "memory exhausted"
+msgstr "mémoire virtuelle épuisée"
+
+#: info/echo-area.c:283 info/session.c:966
+msgid "Move forward a character"
+msgstr "Avancer d'un caractère"
+
+#: info/echo-area.c:295 info/session.c:993
+msgid "Move backward a character"
+msgstr "Reculer d'un caractère"
+
+#: info/echo-area.c:307
+msgid "Move to the start of this line"
+msgstr "Se déplacer au début de cette ligne"
+
+#: info/echo-area.c:312
+msgid "Move to the end of this line"
+msgstr "Se déplacer à la fin de cette ligne"
+
+#: info/echo-area.c:320 info/session.c:1025
+msgid "Move forward a word"
+msgstr "Avancer d'un mot"
+
+#: info/echo-area.c:360 info/session.c:1049
+msgid "Move backward a word"
+msgstr "Reculer d'un mot"
+
+#: info/echo-area.c:400
+msgid "Delete the character under the cursor"
+msgstr "Éliminer le caractère sous le curseur"
+
+#: info/echo-area.c:430
+msgid "Delete the character behind the cursor"
+msgstr "Éliminer le caractère précédent le curseur"
+
+#: info/echo-area.c:451
+msgid "Cancel or quit operation"
+msgstr "Annuler ou opération de quitter"
+
+#: info/echo-area.c:466
+msgid "Accept (or force completion of) this line"
+msgstr "Accepter cette ligne (ou en forcer la complétion)"
+
+#: info/echo-area.c:471
+msgid "Insert next character verbatim"
+msgstr "Insérer le prochain caractère textuellement"
+
+#: info/echo-area.c:479
+msgid "Insert this character"
+msgstr "Insérer ce caractère"
+
+#: info/echo-area.c:498
+msgid "Insert a TAB character"
+msgstr "Insérer un caractère TAB (tabulation)"
+
+#: info/echo-area.c:505
+msgid "Transpose characters at point"
+msgstr "Transposer les caractères en position du point courant"
+
+#: info/echo-area.c:556
+msgid "Yank back the contents of the last kill"
+msgstr "Recoller le contenu du dernier effacement"
+
+#: info/echo-area.c:563
+msgid "Kill ring is empty"
+msgstr "L'anneau des effacements temporaires est vide"
+
+#: info/echo-area.c:576
+msgid "Yank back a previous kill"
+msgstr "Recoller un effacement antérieur"
+
+#: info/echo-area.c:609
+msgid "Kill to the end of the line"
+msgstr "Effacer du point courant jusqu'à la fin de la ligne"
+
+#: info/echo-area.c:622
+msgid "Kill to the beginning of the line"
+msgstr "Effacer du point courant jusqu'au début de la ligne"
+
+#: info/echo-area.c:634
+msgid "Kill the word following the cursor"
+msgstr "Effacer le mot suivant le curseur"
+
+#: info/echo-area.c:654
+msgid "Kill the word preceding the cursor"
+msgstr "Effacer le mot précédent le curseur"
+
+#: info/echo-area.c:870 info/echo-area.c:926
+msgid "No completions"
+msgstr "Aucune complétion"
+
+#: info/echo-area.c:872
+msgid "Not complete"
+msgstr "Non complet"
+
+#: info/echo-area.c:913
+msgid "List possible completions"
+msgstr "Énumérer les complétions possibles"
+
+#: info/echo-area.c:930
+msgid "Sole completion"
+msgstr "Une seule complétion"
+
+#: info/echo-area.c:939
+msgid "One completion:\n"
+msgstr "Une complétion:\n"
+
+#: info/echo-area.c:940
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d complétions:\n"
+
+#: info/echo-area.c:1087
+msgid "Insert completion"
+msgstr "Insérer la complétion"
+
+#: info/echo-area.c:1222
+msgid "Building completions..."
+msgstr "Construction des complétions..."
+
+#: info/echo-area.c:1342
+msgid "Scroll the completions window"
+msgstr "Dérouler la fenêtre des complétions"
+
+#: info/footnotes.c:212
+msgid "Footnotes could not be displayed"
+msgstr "Les notes en bas de page ne peuvent pas être affichées"
+
+#: info/footnotes.c:238
+msgid "Show the footnotes associated with this node in another window"
+msgstr ""
+"Montrer les notes en bas de page associées à ce noeud dans une autre fenêtre"
+
+# Est-ce vraiment un message à traduire? NON.
+#: info/footnotes.h:26
+msgid "---------- Footnotes ----------"
+msgstr "----- Notes de bas de page ----"
+
+#: info/indices.c:171
+msgid "Look up a string in the index for this file"
+msgstr "Rechercher une chaîne dans l'index pour ce fichier"
+
+#: info/indices.c:198
+msgid "Finding index entries..."
+msgstr "Recherche des entrées d'index..."
+
+#: info/indices.c:206
+msgid "No indices found."
+msgstr "Aucun indice retrouvé."
+
+#: info/indices.c:216
+msgid "Index entry: "
+msgstr "Entrée d'index: "
+
+#: info/indices.c:324
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr ""
+"Aller à prochaine référence d'index à partir de la dernière commande « "
+"\\[index-search] » "
+
+#: info/indices.c:334
+msgid "No previous index search string."
+msgstr "Aucune autre chaîne de fouille d'index."
+
+#: info/indices.c:341
+msgid "No index entries."
+msgstr "Aucune entrée d'index."
+
+#: info/indices.c:374
+#, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "Aucune entrée %sindex contenant « %s »."
+
+#: info/indices.c:375
+msgid "more "
+msgstr "plus "
+
+#: info/indices.c:385
+msgid "CAN'T SEE THIS"
+msgstr "NE PEUT PAS VOIR CECI"
+
+#: info/indices.c:421
+#, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr ""
+"« %s » repéré dans %s. (« \\[next-index-match] » cherchera le prochain.)"
+
+#: info/indices.c:549
+#, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "Fouille des indices de « %s »..."
+
+#: info/indices.c:604
+#, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr "Aucun fichier info disponible n'a « %s » dans leurs indices."
+
+#: info/indices.c:630
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr ""
+"Aplatir tous les indices de fichier Info connus pour une chaîne et "
+"construire un menu"
+
+#: info/indices.c:634
+msgid "Index apropos: "
+msgstr "Index à-propos: "
+
+#: info/indices.c:662
+#, c-format
+msgid ""
+"\n"
+"* Menu: Nodes whose indices contain `%s':\n"
+msgstr ""
+"\n"
+"* Menu: Noeuds dont les indices contiennent \"%s\":\n"
+
+#: info/info.c:275 info/infokey.c:899
+#, c-format
+msgid "Try --help for more information.\n"
+msgstr "Utiliser --help pour plus d'informations.\n"
+
+#: info/info.c:294 info/infokey.c:145 install-info/install-info.c:2101
+#: makeinfo/makeinfo.c:802 util/texindex.c:295
+#, c-format
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+
+#: info/info.c:506
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "aucune entrée d'index retrouvée pour « %s »\n"
+
+#: info/info.c:600
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [MENU-ITEM...]\n"
+"\n"
+"Read documentation in Info format.\n"
+msgstr ""
+
+#: info/info.c:606
+msgid ""
+"Options:\n"
+" -k, --apropos=STRING look up STRING in all indices of all "
+"manuals.\n"
+" -d, --directory=DIR add DIR to INFOPATH.\n"
+" --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+" -f, --file=FILENAME specify Info file to visit."
+msgstr ""
+
+#: info/info.c:613
+msgid ""
+" -h, --help display this help and exit.\n"
+" --index-search=STRING go to node pointed by index entry STRING.\n"
+" -n, --node=NODENAME specify nodes in first visited Info file.\n"
+" -o, --output=FILENAME output selected nodes to FILENAME."
+msgstr ""
+
+#: info/info.c:619
+msgid ""
+" -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+" --no-raw-escapes output escapes as literal text.\n"
+" --restore=FILENAME read initial keystrokes from FILENAME.\n"
+" -O, --show-options, --usage go to command-line options node."
+msgstr ""
+
+#: info/info.c:626
+#, fuzzy
+msgid " -b, --speech-friendly be friendly to speech synthesizers."
+msgstr ""
+" -b, --speech-friendly Être compatible au synthétiseur de voix.\n"
+
+#: info/info.c:630
+msgid ""
+" --subnodes recursively output menu items.\n"
+" --vi-keys use vi-like and less-like key bindings.\n"
+" --version display version information and exit.\n"
+" -w, --where, --location print physical location of Info file."
+msgstr ""
+
+#: info/info.c:636
+msgid ""
+"\n"
+"The first non-option argument, if present, is the menu entry to start from;\n"
+"it is searched for in all `dir' files along INFOPATH.\n"
+"If it is not present, info merges all `dir' files and shows the result.\n"
+"Any remaining arguments are treated as the names of menu\n"
+"items relative to the initial node visited."
+msgstr ""
+
+#: info/info.c:643
+msgid ""
+"\n"
+"For a summary of key bindings, type h within Info."
+msgstr ""
+
+#: info/info.c:646
+msgid ""
+"\n"
+"Examples:\n"
+" info show top-level dir menu\n"
+" info info show the general manual for Info readers\n"
+" info info-stnd show the manual specific to this Info program\n"
+" info emacs start at emacs node from top-level dir\n"
+" info emacs buffers start at buffers node within emacs manual\n"
+" info --show-options emacs start at node with emacs' command line options\n"
+" info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+" info -f ./foo.info show file ./foo.info, not searching dir"
+msgstr ""
+
+#: info/info.c:657 info/infokey.c:918 makeinfo/makeinfo.c:475
+#: util/texindex.c:259
+msgid ""
+"\n"
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+"Rapporter toute anomalie à bug-texinfo@gnu.org et poster\n"
+"vos questions et autre discussion à help-texinfo@gnu.org.\n"
+"Site de Texinfo: http://www.gnu.org/software/texinfo/"
+
+#: info/info.c:691
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "Ne peut pas trouver le noeud « %s »."
+
+#: info/info.c:692
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "Ne peut pas trouver le noeud « (%s)%s »."
+
+#: info/info.c:693
+msgid "Cannot find a window!"
+msgstr "Ne peut pas trouver une fenêtre permanente!"
+
+#: info/info.c:694
+msgid "Point doesn't appear within this window's node!"
+msgstr "Le point courant n'apparaît pas dans ce noeud de fenêtre!"
+
+#: info/info.c:695
+msgid "Cannot delete the last window."
+msgstr "Ne peut pas éliminer la dernière fenêtre."
+
+#: info/info.c:696
+msgid "No menu in this node."
+msgstr "Aucun menu dans ce noeud."
+
+#: info/info.c:697
+msgid "No footnotes in this node."
+msgstr "Aucune note de bas de page dans ce noeud."
+
+#: info/info.c:698
+msgid "No cross references in this node."
+msgstr "Aucune référence croisée dans ce noeud."
+
+#: info/info.c:699
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Aucun pointeur « %s » pour ce noeud."
+
+#: info/info.c:700
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "Commande Info « %c> » inconnue; essayer « ? » pour de l'aide."
+
+#: info/info.c:701
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr "Le type de terminal « %s » n'est pas en mesure de rouler Info."
+
+#: info/info.c:702
+msgid "You are already at the last page of this node."
+msgstr "Vous êtes déjà au point terminal de ce noeud."
+
+#: info/info.c:703
+msgid "You are already at the first page of this node."
+msgstr "Vous êtes déjà au point initial de ce noeud."
+
+#: info/info.c:704
+msgid "Only one window."
+msgstr "Une seule fenêtre."
+
+#: info/info.c:705
+msgid "Resulting window would be too small."
+msgstr "La fenêtre résultante sera trop petite."
+
+#: info/info.c:706
+msgid "Not enough room for a help window, please delete a window."
+msgstr "Pas assez de place pour une fenêtre d'aide, fermer svp une fenêtre."
+
+#: info/infodoc.c:45
+msgid "Basic Info command keys\n"
+msgstr ""
+
+#: info/infodoc.c:47
+#, fuzzy
+msgid "\\%-10[quit-help] Close this help window.\n"
+msgstr "\\%-10[quit-help] Quitter ce menu d'aide.\n"
+
+#: info/infodoc.c:48
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] Quitter complètement le mode Info.\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr "\\%-10[get-info-help-node] Faire appel au tutoriel Info.\n"
+
+#: info/infodoc.c:51
+#, fuzzy
+msgid "\\%-10[prev-line] Move up one line.\n"
+msgstr "\\%-10[prev-line] Reculer de 1 ligne.\n"
+
+#: info/infodoc.c:52
+#, fuzzy
+msgid "\\%-10[next-line] Move down one line.\n"
+msgstr "\\%-10[next-line] Avancer de 1 ligne.\n"
+
+#: info/infodoc.c:53
+#, fuzzy
+msgid "\\%-10[scroll-backward] Scroll backward one screenful.\n"
+msgstr "\\%-10[scroll-backward] Reculer d'une page.\n"
+
+#: info/infodoc.c:54
+#, fuzzy
+msgid "\\%-10[scroll-forward] Scroll forward one screenful.\n"
+msgstr "\\%-10[scroll-forward] Avancer d'une page.\n"
+
+#: info/infodoc.c:55
+#, fuzzy
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr "\\%-10[beginning-of-node] Aller au point initial de ce noeud.\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr "\\%-10[end-of-node] Aller au point terminal de ce noeud.\n"
+
+#: info/infodoc.c:58
+#, fuzzy
+msgid "\\%-10[move-to-next-xref] Skip to the next hypertext link.\n"
+msgstr ""
+"\\%-10[move-to-next-xref] Sauter au prochain hyperlien à l'intérieur de ce "
+"noeud.\n"
+
+#: info/infodoc.c:59
+#, fuzzy
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under the "
+"cursor.\n"
+msgstr ""
+"\\%-10[select-reference-this-line] Suivre l'hyperlien sous le curseur.\n"
+
+#: info/infodoc.c:60
+#, fuzzy
+msgid "\\%-10[history-node] Go back to the last node seen in this window.\n"
+msgstr ""
+"\\%-10[history-node] Aller au dernier noeud observé dans cette fenêtre.\n"
+
+#: info/infodoc.c:62
+#, fuzzy
+msgid "\\%-10[global-prev-node] Go to the previous node in the document.\n"
+msgstr "\\%-10[prev-node] Aller au noeud « previous » de ce noeud.\n"
+
+#: info/infodoc.c:63
+#, fuzzy
+msgid "\\%-10[global-next-node] Go to the next node in the document.\n"
+msgstr "\\%-10[next-node] Aller au noeud « next » de ce noeud.\n"
+
+#: info/infodoc.c:64
+#, fuzzy
+msgid "\\%-10[prev-node] Go to the previous node on this level.\n"
+msgstr "\\%-10[prev-node] Aller au noeud « previous » de ce noeud.\n"
+
+#: info/infodoc.c:65
+#, fuzzy
+msgid "\\%-10[next-node] Go to the next node on this level.\n"
+msgstr "\\%-10[next-node] Aller au noeud « next » de ce noeud.\n"
+
+#: info/infodoc.c:66
+#, fuzzy
+msgid "\\%-10[up-node] Go up one level.\n"
+msgstr "\\%-10[up-node] Aller au noeud « up » à partir de ce noeud.\n"
+
+#: info/infodoc.c:67
+#, fuzzy
+msgid "\\%-10[top-node] Go to the top node of this document.\n"
+msgstr "\\%-10[end-of-node] Aller au point terminal de ce noeud.\n"
+
+#: info/infodoc.c:68
+#, fuzzy
+msgid "\\%-10[dir-node] Go to the main `directory' node.\n"
+msgstr "\\%-10[end-of-node] Aller au point terminal de ce noeud.\n"
+
+#: info/infodoc.c:70
+#, fuzzy
+msgid "1...9 Pick the first...ninth item in this node's menu.\n"
+msgstr ""
+" %-10s Choisir d'abord ... le neuvième item dans le menu de noeuds.\n"
+
+#: info/infodoc.c:71
+#, fuzzy
+msgid "\\%-10[last-menu-item] Pick the last item in this node's menu.\n"
+msgstr ""
+"\\%-10[last-menu-item] Choisir le dernier item dans le menu de noeuds.\n"
+
+#: info/infodoc.c:72
+#, fuzzy
+msgid "\\%-10[menu-item] Pick a menu item specified by name.\n"
+msgstr " %-10s Choisir l'item menu indiqué par le nom.\n"
+
+#: info/infodoc.c:73
+#, fuzzy
+msgid "\\%-10[xref-item] Follow a cross reference specified by name.\n"
+msgstr ""
+"\\%-10[xref-item] Suivre une référence croisée. Lire le nom de la "
+"référence.\n"
+
+#: info/infodoc.c:74
+#, fuzzy
+msgid "\\%-10[goto-node] Go to a node specified by name.\n"
+msgstr " %-10s Aller au noeud indiqué par le nom.\n"
+
+#: info/infodoc.c:76
+#, fuzzy
+msgid "\\%-10[search] Search forward for a specified string.\n"
+msgstr " %-10s Fouiller vers l'avant pour une chaîne spécifiée,\n"
+
+#: info/infodoc.c:77
+#, fuzzy
+msgid "\\%-10[search-previous] Search for previous occurrence.\n"
+msgstr "\\%-10[prev-node] Aller au noeud « previous » de ce noeud.\n"
+
+#: info/infodoc.c:78
+#, fuzzy
+msgid "\\%-10[search-next] Search for next occurrence.\n"
+msgstr ""
+" %-10s Fouiller pour une chaîne spécifiée dans les entrées d'index de ce "
+"fichier Info,\n"
+
+#: info/infodoc.c:79
+#, fuzzy
+msgid ""
+"\\%-10[index-search] Search for a specified string in the index, and\n"
+" select the node referenced by the first entry found.\n"
+msgstr ""
+"\\%-10[index-search] Choisir la chaîne spécifiée dans les entrées d'index "
+"de ce Info\n"
+" et sélectionner le noeud référencé par la première entrée "
+"trouvée.\n"
+
+#: info/infodoc.c:81
+#, fuzzy
+msgid "\\%-10[abort-key] Cancel the current operation.\n"
+msgstr "Annuler l'opération courante"
+
+#: info/infodoc.c:89
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"Commandes de base en Info Windows\n"
+"---------------------------------\n"
+
+#: info/infodoc.c:92
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s Quitter ce menu d'aide.\n"
+
+#: info/infodoc.c:93
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Quitter complètement le mode Info.\n"
+
+#: info/infodoc.c:94
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Faire appel au guide Info.\n"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr " %-10s Aller au noeud « next » de ce noeud.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr " %-10s Aller au noeud « previous » de ce noeud.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s Aller au noeud « up » à partir de ce noeud.\n"
+
+#: info/infodoc.c:101
+#, fuzzy, c-format
+msgid ""
+" %-10s Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+"\\%-10[menu-item] Choisir un item menu à partir de son nom.\n"
+" Choisir un item menu provoque la sélection d'un autre noeud.\n"
+
+#: info/infodoc.c:103
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr " %-10s Suivre une référence croisée. Lire le nom de la référence.\n"
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr " %-10s Aller au dernier noeud observé dans cette fenêtre.\n"
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr " %-10s Sauter au prochain hyperlien à l'intérieur de ce noeud.\n"
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s Suivre l'hyperlien sous le curseur.\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr " %-10s Aller au noeud « directory ». Équivalent à « g (DIR) ».\n"
+
+#: info/infodoc.c:108
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr " %-10s Aller au noeud supérieur Top. Équivalent à « g Top ».\n"
+
+# Est-ce vraiment un message à traduire? NON.
+#: info/infodoc.c:110
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"Se déplacer à l'intérieur d'un noeud:\n"
+"------------------------------------\n"
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s Avancer d'une page.\n"
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s Reculer d'une page.\n"
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s Aller au point initial de ce noeud.\n"
+
+#: info/infodoc.c:115
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s Aller au point terminal de ce noeud.\n"
+
+#: info/infodoc.c:116
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s Avancer de 1 ligne.\n"
+
+#: info/infodoc.c:117
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s Reculer de 1 ligne.\n"
+
+# Est-ce vraiment un message à traduire? NON.
+#: info/infodoc.c:119
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"Autres commandes:\n"
+"----------------\n"
+
+#: info/infodoc.c:121
+#, fuzzy, c-format
+msgid " %-10s Pick first...ninth item in node's menu.\n"
+msgstr ""
+" %-10s Choisir d'abord ... le neuvième item dans le menu de noeuds.\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s Choisir le dernier item dans le menu de noeuds.\n"
+
+#: info/infodoc.c:125
+#, fuzzy, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr ""
+"\\%-10[index-search] Choisir la chaîne spécifiée dans les entrées d'index "
+"de ce Info\n"
+" et sélectionner le noeud référencé par la première entrée "
+"trouvée.\n"
+
+#: info/infodoc.c:127
+#, fuzzy, c-format
+msgid ""
+" %-10s Move to node specified by name.\n"
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+"\\%-10[goto-node] Aller au noeud spécifié par le nom.\n"
+" Vous pouvez aussi bien inclure un nom de fichier, comme dans "
+"(FILENAME)NODENAME.\n"
+
+#: info/infodoc.c:129
+#, fuzzy, c-format
+msgid ""
+" %-10s Search forward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+"\\%-10[search] Fouiller à reculons pour une chaîne spécifiée\n"
+" et sélectionner le noeud dans lequel se trouve la prochaine "
+"occurrence.\n"
+
+#: info/infodoc.c:131
+#, fuzzy, c-format
+msgid ""
+" %-10s Search backward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+"\\%-10[search] Fouiller à reculons pour une chaîne spécifiée\n"
+" et sélectionner le noeud dans lequel se trouve la prochaine "
+"occurrence.\n"
+
+#: info/infodoc.c:312
+msgid "The current search path is:\n"
+msgstr "Le chemin de fouille courant est:\n"
+
+#: info/infodoc.c:316
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"Commandes disponibles en Info Windows:\n"
+"\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"Commandes disponibles dans la zone « echo area »:\n"
+"\n"
+
+#: info/infodoc.c:343
+#, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+"Les commandes suivantes peuvent être invoquées uniquement via %s:\n"
+"\n"
+
+#: info/infodoc.c:347
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+"Les commandes suivantes ne peuvent pas être invoquées:\n"
+"\n"
+
+#: info/infodoc.c:477
+msgid "Display help message"
+msgstr "Afficher le message d'aide"
+
+#: info/infodoc.c:495
+msgid "Visit Info node `(info)Help'"
+msgstr "Visiter le noeud Info « (info)Help »"
+
+#: info/infodoc.c:633
+msgid "Print documentation for KEY"
+msgstr "Imprimer la documentation relative à KEY"
+
+#: info/infodoc.c:645
+#, c-format
+msgid "Describe key: %s"
+msgstr "Décrire la clé: %s"
+
+#: info/infodoc.c:656
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s est non défini."
+
+#: info/infodoc.c:672 info/infodoc.c:701
+#, c-format
+msgid "%s is undefined."
+msgstr "%s est non défini."
+
+#: info/infodoc.c:722
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s est défini à %s."
+
+#: info/infodoc.c:1146
+msgid "Show what to type to execute a given command"
+msgstr "Montrer quoi écrire afin d'exécuter une commande donnée"
+
+#: info/infodoc.c:1150
+msgid "Where is command: "
+msgstr "Où se trouve la commande: "
+
+#: info/infodoc.c:1172
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "« %s » ne se trouve pas sur une clé quelconque"
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s peut être invoqué uniquement via %s."
+
+#: info/infodoc.c:1183
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s peut être invoqué via %s."
+
+#: info/infodoc.c:1188
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "Il n'y a pas de fonction nommée « %s »"
+
+# Est-ce vraiment un message à traduire? NON.
+#: info/infodoc.c:96
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"Sélection d'autres modes:\n"
+"------------------------\n"
+
+#: info/infokey.c:170
+msgid "incorrect number of arguments"
+msgstr "nombre incorrect d'arguments"
+
+#: info/infokey.c:201
+#, c-format
+msgid "cannot open input file `%s'"
+msgstr "Ne peut ouvrir le fichier d'entrée « %s »."
+
+#: info/infokey.c:215
+#, c-format
+msgid "cannot create output file `%s'"
+msgstr "Ne peut pas créer le fichier de sortie « %s »."
+
+#: info/infokey.c:226
+#, c-format
+msgid "error writing to `%s'"
+msgstr "erreur d'écriture dans « %s »"
+
+#: info/infokey.c:232
+#, c-format
+msgid "error closing output file `%s'"
+msgstr "erreur de fermeture du fichier de sortie « %s »."
+
+#: info/infokey.c:450
+msgid "key sequence too long"
+msgstr "séquence de clé trop longue"
+
+#: info/infokey.c:529
+msgid "missing key sequence"
+msgstr "séquence de clé manquante"
+
+#: info/infokey.c:610
+msgid "NUL character (\\000) not permitted"
+msgstr "Caractère NUL (\\000) n'est pas permis"
+
+#: info/infokey.c:641
+#, c-format
+msgid "NUL character (^%c) not permitted"
+msgstr "Caractère NUL (^%c) n'est pas permis"
+
+#: info/infokey.c:665
+msgid "missing action name"
+msgstr "nom de l'action manquant"
+
+#: info/infokey.c:681 info/infokey.c:756
+msgid "section too long"
+msgstr "section trop longue"
+
+#: info/infokey.c:688
+#, c-format
+msgid "unknown action `%s'"
+msgstr "action inconnue « %s »."
+
+#: info/infokey.c:698
+msgid "action name too long"
+msgstr "nom de l'action trop long"
+
+#: info/infokey.c:712
+#, c-format
+msgid "extra characters following action `%s'"
+msgstr "caractères superflues détectés après l'action « %s »."
+
+#: info/infokey.c:723
+msgid "missing variable name"
+msgstr "nom de variable manquant"
+
+#: info/infokey.c:733
+msgid "missing `=' immediately after variable name"
+msgstr "« = » manquant immédiatement après le nom de la variable"
+
+#: info/infokey.c:741
+msgid "variable name too long"
+msgstr "nom de variable trop long"
+
+#: info/infokey.c:765
+msgid "value too long"
+msgstr "valeur trop longue"
+
+#: info/infokey.c:890
+#, c-format
+msgid "\"%s\", line %u: "
+msgstr "« %s », ligne %u: "
+
+#: info/infokey.c:906
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [INPUT-FILE]\n"
+"\n"
+"Compile infokey source file to infokey file. Reads INPUT-FILE (default\n"
+"$HOME/.infokey) and writes compiled key file to (by default) $HOME/.info.\n"
+"\n"
+"Options:\n"
+" --output FILE output to FILE instead of $HOME/.info\n"
+" --help display this help and exit.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"Usage: %s [OPTION]... [FICHIER-ENTRÉE]\n"
+"\n"
+"Compiler le fichier source infokey en un fichier infokey. Lire le FICHIER-"
+"ENTRÉE\n"
+"(par défaut $HOME/.infokey) et écrire le fichier de clé compilé à $HOME/."
+"info. (par défaut)\n"
+"\n"
+"Options:\n"
+" --output FICHIER Produire la sortie dans le FICHIER au lieu de $HOME/."
+"info\n"
+" --help Afficher le menu d'aide et quitter.\n"
+" --version Afficher le version du logiciel et quitter.\n"
+"\n"
+
+#: info/infomap.c:955
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "Fichier infokey invalide ignoré « %s » - trop petit"
+
+#: info/infomap.c:958
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "Fichier infokey invalide ignoré « %s » - trop gros"
+
+#: info/infomap.c:971
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "Erreur de lecture du fichier infokey « %s » - lecture écourtée"
+
+#: info/infomap.c:990
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+"Fichier infokey invalide « %s » (nombre magique erroné) -- exécuter infokey "
+"pour le mettre à jour"
+
+#: info/infomap.c:999
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr ""
+"Votre fichier infokey « %s » est désuet -- exécuter inforkey pour le mettre à "
+"jour"
+
+#: info/infomap.c:1015
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+"Fichier infokey invalide « %s » (longueur de section erronée) -- exécuter "
+"infokey pour la mettre à jour"
+
+#: info/infomap.c:1036
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr ""
+"Fichier infokey invalide « %s » (code de section erroné) -- exécuter infokey "
+"pour le mettre à jour"
+
+#: info/infomap.c:1171
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr ""
+"Données erronées dans le fichier infokey -- quelques jumelages de clés "
+"ignorés"
+
+#: info/infomap.c:1221
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr ""
+"Données erronées dans le fichier infokey -- quelques initialisations de "
+"variables ignorées"
+
+#: info/m-x.c:68
+msgid "Read the name of an Info command and describe it"
+msgstr "Lire le nom d'une commande Info et la décrire"
+
+#: info/m-x.c:72
+msgid "Describe command: "
+msgstr "Décrire la commande: "
+
+#: info/m-x.c:95
+msgid "Read a command name in the echo area and execute it"
+msgstr "Lire le nom d'une commande dans la zone « echo area » et l'exécuter"
+
+#: info/m-x.c:139
+msgid "Cannot execute an `echo-area' command here."
+msgstr "Ne peut pas exécuter une commande « echo-area » en cet endroit."
+
+#: info/m-x.c:153
+#, c-format
+msgid "Undefined command: %s"
+msgstr "commandes indéfinie: %s"
+
+#: info/m-x.c:159
+msgid "Set the height of the displayed window"
+msgstr "Ajuster la hauteur de la fenêtre affichée"
+
+#: info/m-x.c:172
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Ajuster la hauteur de l'écran à (%d): "
+
+#: info/makedoc.c:166 info/makedoc.c:174
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+" Les fichiers sources aplatis pour faire ce fichier incluent:\n"
+"\n"
+
+#: info/makedoc.c:556
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "Ne peut pas manipuler le fichier %s.\n"
+
+#: info/nodemenu.c:30
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+"\n"
+"* Menu:\n"
+" (Fichier)Noeud Lignes Taille Contenant Fichier(s)\n"
+" -------------- ------ ------ --------------------"
+
+#: info/nodemenu.c:201
+msgid ""
+"Here is the menu of nodes you have recently visited.\n"
+"Select one from this menu, or use `\\[history-node]' in another window.\n"
+msgstr ""
+"Voici le menu de noeuds que vous avez visité récemment.\n"
+"Sélectionner en un de ce menu, ou utiliser « \\[history-node] » dans une "
+"autre fenêtre.\n"
+
+#: info/nodemenu.c:223
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr ""
+"Faire une fenêtre contenant un menu de tous les noeuds actuellement visités"
+
+#: info/nodemenu.c:303
+msgid "Select a node which has been previously visited in a visible window"
+msgstr "Sélectionner un noeud qui a déjà été visité dans une fenêtre visible"
+
+#: info/nodemenu.c:316
+msgid "Select visited node: "
+msgstr "Sélectionner un noeud visité: "
+
+#: info/nodemenu.c:336 info/session.c:2578
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "La référence est disparue! (%s)."
+
+#: info/search.c:166
+#, c-format
+msgid "regexp error: %s"
+msgstr ""
+
+#: info/session.c:164
+#, c-format
+msgid ""
+"Welcome to Info version %s. Type \\[get-help-window] for help, \\[menu-item] "
+"for menu item."
+msgstr ""
+"Bienvenue au mode Info version %s.\n"
+"Taper « \\[get-help-window] » pour obtenir de l'aide.\n"
+"Taper « \\[menu-item] » pour obtenir un item menu."
+
+#: info/session.c:625
+msgid "Move down to the next line"
+msgstr "Descendre à la ligne suivante"
+
+#: info/session.c:661
+msgid "Move up to the previous line"
+msgstr "Monter à la ligne précédente"
+
+#: info/session.c:931
+msgid "Move to the end of the line"
+msgstr "Aller à la fin de la ligne"
+
+#: info/session.c:942
+msgid "Move to the start of the line"
+msgstr "Aller au début de la ligne"
+
+#: info/session.c:1142
+msgid "Next"
+msgstr "Noeud « Next »"
+
+#: info/session.c:1158 info/session.c:1283
+msgid "No more nodes within this document."
+msgstr "Aucun autre noeud dans ce document."
+
+#: info/session.c:1309
+msgid "No `Prev' for this node."
+msgstr "Aucun noeud « Prev » pour ce noeud."
+
+#: info/session.c:1329
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr "Aucun noeud « Prev » ou « Up » pour ce noeud dans ce document."
+
+#: info/session.c:1391
+msgid "Move forwards or down through node structure"
+msgstr "Avancer ou descendre à travers la structure de noeuds"
+
+#: info/session.c:1407
+msgid "Move backwards or up through node structure"
+msgstr "Reculer ou monter à travers la structure de noeuds"
+
+#: info/session.c:1508
+msgid "Scroll forward in this window"
+msgstr "Défiler vers l'avant dans cette fenêtre"
+
+#: info/session.c:1516
+msgid "Scroll forward in this window and set default window size"
+msgstr ""
+"Défiler vers l'avant dans cette fenêtre et en fixer la dimension par défaut"
+
+#: info/session.c:1524
+msgid "Scroll forward in this window staying within node"
+msgstr ""
+"Défiler vers l'avant dans cette fenêtre en demeurant à l'intérieur du noeud"
+
+#: info/session.c:1532
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr ""
+"Défiler vers l'avant dans cette fenêtre en demeurant à l'intérieur du noeud "
+"et en fixer la dimension par défaut"
+
+#: info/session.c:1540
+msgid "Scroll backward in this window"
+msgstr "Défiler à reculons dans cette fenêtre"
+
+#: info/session.c:1548
+msgid "Scroll backward in this window and set default window size"
+msgstr ""
+"Défiler à reculons dans cette fenêtre et en fixer la dimension par défaut"
+
+#: info/session.c:1557
+msgid "Scroll backward in this window staying within node"
+msgstr ""
+"Défiler à reculons dans cette fenêtre en demeurant à l'intérieur de ce noeud"
+
+#: info/session.c:1565
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr ""
+"Défiler à reculons dans cette fenêtre en demeurant à l'intérieur du noeud et "
+"en fixer la dimension par défaut"
+
+#: info/session.c:1573
+msgid "Move to the start of this node"
+msgstr "Aller au point initial de ce noeud"
+
+#: info/session.c:1580
+msgid "Move to the end of this node"
+msgstr "Aller au point terminal de ce noeud"
+
+#: info/session.c:1587
+msgid "Scroll down by lines"
+msgstr "Défiler vers le bas par pas de N lignes"
+
+#: info/session.c:1604
+msgid "Scroll up by lines"
+msgstr "Défiler vers le haut par pas de N lignes"
+
+#: info/session.c:1622
+msgid "Scroll down by half screen size"
+msgstr "Défiler vers le bas par pas d'un demi écran"
+
+#: info/session.c:1648
+msgid "Scroll up by half screen size"
+msgstr "Défiler vers le haut par pas d'un demi écran"
+
+#: info/session.c:1677
+msgid "Select the next window"
+msgstr "Sélectionner la fenêtre suivante"
+
+#: info/session.c:1716
+msgid "Select the previous window"
+msgstr "Sélectionner la fenêtre précédente"
+
+#: info/session.c:1767
+msgid "Split the current window"
+msgstr "Diviser en deux la fenêtre courante"
+
+#: info/session.c:1848
+msgid "Delete the current window"
+msgstr "Éliminer la fenêtre courante"
+
+#: info/session.c:1856
+msgid "Cannot delete a permanent window"
+msgstr "Ne peut pas éliminer une fenêtre permanente"
+
+#: info/session.c:1888
+msgid "Delete all other windows"
+msgstr "Éliminer toutes les autres fenêtres"
+
+#: info/session.c:1934
+msgid "Scroll the other window"
+msgstr "Défiler l'autre fenêtre"
+
+#: info/session.c:1955
+msgid "Scroll the other window backward"
+msgstr "Défiler l'autre fenêtre à reculons"
+
+#: info/session.c:1961
+msgid "Grow (or shrink) this window"
+msgstr "Agrandir (ou réduire) cette fenêtre"
+
+#: info/session.c:1972
+msgid "Divide the available screen space among the visible windows"
+msgstr "Répartir l'espace écran disponible parmi les fenêtres visibles"
+
+#: info/session.c:1979
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "Basculer l'état du remplissage de ligne dans la fenêtre courante"
+
+#: info/session.c:1986
+msgid "Toggle the usage of regular expressions in searches"
+msgstr ""
+
+#: info/session.c:1990
+msgid "Using regular expressions for searches."
+msgstr ""
+
+#: info/session.c:1991
+msgid "Using literal strings for searches."
+msgstr ""
+
+#: info/session.c:2162
+msgid "Select the Next node"
+msgstr "Sélectionner le noeud « Next »"
+
+#: info/session.c:2170
+msgid "Select the Prev node"
+msgstr "Sélectionner le noeud « Prev »"
+
+#: info/session.c:2178
+msgid "Select the Up node"
+msgstr "Sélectionner le noeud « Up »"
+
+#: info/session.c:2185
+msgid "Select the last node in this file"
+msgstr "Sélectionner le dernier noeud dans ce fichier"
+
+#: info/session.c:2212 info/session.c:2245
+msgid "This window has no additional nodes"
+msgstr "Cette fenêtre a aucun noeud additionnel"
+
+#: info/session.c:2218
+msgid "Select the first node in this file"
+msgstr "Sélectionner le premier noeud dans ce fichier"
+
+#: info/session.c:2252
+msgid "Select the last item in this node's menu"
+msgstr "Sélectionner le dernier item dans ce menu de noeuds"
+
+#: info/session.c:2258
+msgid "Select this menu item"
+msgstr "Sélectionner cet item menu"
+
+#: info/session.c:2291
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "Il n'y a pas %d items dans ce menu."
+
+#: info/session.c:2485 info/session.c:2486
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Item menu (%s): "
+
+#: info/session.c:2489
+msgid "Menu item: "
+msgstr "Item menu: "
+
+#: info/session.c:2496 info/session.c:2497
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Suivre xref (%s): "
+
+#: info/session.c:2500
+msgid "Follow xref: "
+msgstr "Suivre xref: "
+
+#: info/session.c:2629
+msgid "Read a menu item and select its node"
+msgstr "Lire un item menu et sélectionner son noeud"
+
+#: info/session.c:2637
+msgid "Read a footnote or cross reference and select its node"
+msgstr ""
+"Lire une note de bas de page ou une référence croisée et sélectionner son "
+"noeud"
+
+#: info/session.c:2643
+msgid "Move to the start of this node's menu"
+msgstr "Aller au point initial de ce menu de noeuds"
+
+#: info/session.c:2667
+msgid "Visit as many menu items at once as possible"
+msgstr "Visiter d'un seul coup autant d'items menu que possible"
+
+#: info/session.c:2695
+msgid "Read a node name and select it"
+msgstr "Lire un nom de noeud et sélectionner ce noeud"
+
+#: info/session.c:2750 info/session.c:2755
+msgid "Goto node: "
+msgstr "Aller au noeud: "
+
+#: info/session.c:2819
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "Aucun menu dans le noeud « %s »."
+
+#: info/session.c:2865
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "Aucun item menu « %s » dans le noeud « %s »."
+
+#: info/session.c:2895
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr "Incapable de trouver le noeud référencé par « %s » dans « %s »."
+
+#: info/session.c:2945
+msgid "Read a list of menus starting from dir and follow them"
+msgstr "Lire une liste de menus en partant de « dir » et les suivre"
+
+#: info/session.c:2947
+msgid "Follow menus: "
+msgstr "Suivre les menus: "
+
+#: info/session.c:3140
+msgid "Find the node describing program invocation"
+msgstr "Trouver le noeud décrivant l'invocation au programme"
+
+#: info/session.c:3142
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "Trouver le noeud Invocation de [%s]: "
+
+#: info/session.c:3180
+msgid "Read a manpage reference and select it"
+msgstr "Lire une référence de page-manuel et la sélectionner"
+
+#: info/session.c:3184
+msgid "Get Manpage: "
+msgstr "Obtenir la Page-manuel: "
+
+#: info/session.c:3214
+msgid "Select the node `Top' in this file"
+msgstr "Sélectionner le noeud « Top » dans ce fichier"
+
+#: info/session.c:3220
+msgid "Select the node `(dir)'"
+msgstr "Sélectionner le noeud « (dir) »"
+
+#: info/session.c:3237 info/session.c:3239
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Effacer le noeud (%s): "
+
+#: info/session.c:3291
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "Ne peut pas effacer le noeud « %s »"
+
+#: info/session.c:3301
+msgid "Cannot kill the last node"
+msgstr "Ne peut pas effacer le dernier noeud"
+
+#: info/session.c:3387
+msgid "Select the most recently selected node"
+msgstr "Choisir le noeud qui a été le plus récemment sélectionné"
+
+#: info/session.c:3393
+msgid "Kill this node"
+msgstr "Effacer ce noeud"
+
+#: info/session.c:3401
+msgid "Read the name of a file and select it"
+msgstr "Lire le nom d'un fichier et le sélectionner"
+
+#: info/session.c:3405
+msgid "Find file: "
+msgstr "Trouver le fichier: "
+
+#: info/session.c:3422
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "Ne peut pas trouver « %s »."
+
+#: info/session.c:3465 info/session.c:3583
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "Ne peut pas créer le fichier de sortie « %s »."
+
+#: info/session.c:3479 info/session.c:3601 info/session.c:3661
+msgid "Done."
+msgstr "Terminé."
+
+#: info/session.c:3534
+#, c-format
+msgid "Writing node %s..."
+msgstr "Écriture du noeud « %s »..."
+
+#: info/session.c:3610
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr "Acheminer les contenus de ce noeud à travers INFO_PRINT_COMMAND"
+
+#: info/session.c:3645
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "Ne peut ouvrir un tube de communication à « %s »."
+
+#: info/session.c:3651
+#, c-format
+msgid "Printing node %s..."
+msgstr "Impression du noeud « %s »..."
+
+#: info/session.c:3900
+msgid "Search continued from the end of the document."
+msgstr ""
+
+#: info/session.c:3905
+#, fuzzy
+msgid "Search continued from the beginning of the document."
+msgstr "Effacer du point courant jusqu'au début de la ligne"
+
+#: info/session.c:3922
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "Fouille du sous-fichier « %s »..."
+
+#: info/session.c:3979
+msgid "Read a string and search for it case-sensitively"
+msgstr ""
+"Lire une chaîne et en faire la fouille en distinguant les majuscules et "
+"minuscules"
+
+#: info/session.c:3986
+msgid "Read a string and search for it"
+msgstr "Lire une chaîne et en faire la fouille"
+
+#: info/session.c:3994
+msgid "Read a string and search backward for it"
+msgstr "Lire une chaîne et en faire la fouille à reculons"
+
+#: info/session.c:4030 info/session.c:4036
+#, fuzzy, c-format
+msgid "%s%s%s [%s]: "
+msgstr "%s%s pour la chaîne [%s]: "
+
+#: info/session.c:4031 info/session.c:4037
+msgid "Regexp search"
+msgstr ""
+
+#: info/session.c:4032 info/session.c:4038
+#, fuzzy
+msgid " case-sensitively"
+msgstr " en distinguant les casses majuscules et minuscules "
+
+#: info/session.c:4033 info/session.c:4039
+#, fuzzy
+msgid " backward"
+msgstr "Fouiller à reculons"
+
+#: info/session.c:4037
+msgid "Search"
+msgstr "Fouiller"
+
+#: info/session.c:4079
+msgid "Search failed."
+msgstr "Fouille infructueuse."
+
+#: info/session.c:4097
+msgid "Repeat last search in the same direction"
+msgstr "Répéter la dernière fouille dans la même direction"
+
+#: info/session.c:4100 info/session.c:4110
+msgid "No previous search string"
+msgstr "Aucune chaîne de fouille antérieure"
+
+#: info/session.c:4107
+msgid "Repeat last search in the reverse direction"
+msgstr "Répéter la dernière fouille dans la direction inverse"
+
+#: info/session.c:4126 info/session.c:4132
+msgid "Search interactively for a string as you type it"
+msgstr "Fouiller interactivement pour une chaîne telle que vous la tapez"
+
+#: info/session.c:4212
+#, fuzzy
+msgid "Regexp I-search backward: "
+msgstr "Fouille I-search à reculons: "
+
+#: info/session.c:4213
+msgid "I-search backward: "
+msgstr "Fouille I-search à reculons: "
+
+#: info/session.c:4215
+#, fuzzy
+msgid "Regexp I-search: "
+msgstr "Fouille I-search: "
+
+#: info/session.c:4216
+msgid "I-search: "
+msgstr "Fouille I-search: "
+
+#: info/session.c:4241 info/session.c:4243
+msgid "Failing "
+msgstr "Échec "
+
+#: info/session.c:4734
+msgid "Move to the previous cross reference"
+msgstr "Aller à la référence croisée précédente"
+
+#: info/session.c:4752
+msgid "Move to the next cross reference"
+msgstr "Aller à la prochaine référence croisée"
+
+#: info/session.c:4774
+msgid "Select reference or menu item appearing on this line"
+msgstr "Sélectionner la référence ou l'item menu apparaissant sur cette ligne"
+
+#: info/session.c:4797
+msgid "Cancel current operation"
+msgstr "Annuler l'opération courante"
+
+#: info/session.c:4804
+msgid "Quit"
+msgstr "Quitter"
+
+#: info/session.c:4813
+msgid "Move the cursor to a specific line of the window"
+msgstr "Déplacer le curseur sur une ligne spécifique de la fenêtre"
+
+#: info/session.c:4845
+msgid "Redraw the display"
+msgstr "Redessiner l'affichage écran"
+
+#: info/session.c:4882
+msgid "Quit using Info"
+msgstr "Quitter en utilisant Info"
+
+#: info/session.c:4895
+msgid "Run command bound to this key's lowercase variant"
+msgstr "Exécuter la commande liée à cette variante de touche en minuscule"
+
+#: info/session.c:4906
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "Commande inconnue (%s)."
+
+#: info/session.c:4909
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "« %s » est invalide"
+
+#: info/session.c:4910
+#, c-format
+msgid "`%s' is invalid"
+msgstr "« %s » est invalide"
+
+#: info/session.c:5125
+msgid "Add this digit to the current numeric argument"
+msgstr "Ajouter ce chiffre à l'argument numérique courant"
+
+#: info/session.c:5134
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "Enclencher (ou multiplier par 4) l'argument numérique courant"
+
+#: info/session.c:5149
+msgid "Internally used by \\[universal-argument]"
+msgstr "Utilisé internement par \\[universal-argument]"
+
+#: info/tilde.c:336
+#, c-format
+msgid "readline: Out of virtual memory!\n"
+msgstr "lecture: Mémoire virtuelle épuisée!\n"
+
+#: info/variables.c:37
+msgid "When \"On\", footnotes appear and disappear automatically"
+msgstr ""
+"En position « On », les notes en bas de page apparaissent et disparaissent "
+"automatiquement"
+
+#: info/variables.c:41
+msgid "When \"On\", creating or deleting a window resizes other windows"
+msgstr ""
+"En position « On », créer ou effacer une fenêtre réajuste la dimension des "
+"autres fenêtres"
+
+#: info/variables.c:45
+msgid "When \"On\", flash the screen instead of ringing the bell"
+msgstr ""
+"En position « On », un clignotement d'écran est utilisé plutôt qu'un bruit de "
+"cloche"
+
+#: info/variables.c:49
+msgid "When \"On\", errors cause the bell to ring"
+msgstr "En position « On », les erreurs sont signalées par un bruit de cloche"
+
+#: info/variables.c:53
+msgid "When \"On\", Info garbage collects files which had to be uncompressed"
+msgstr ""
+"En position « On », le ramasse-miette Info récolte les fichiers qui devaient "
+"être décomprimés"
+
+#: info/variables.c:56
+msgid "When \"On\", the portion of the matched search string is highlighted"
+msgstr ""
+"En position « On », la portion de la chaîne de fouille appariée est mise en "
+"surbrillance"
+
+#: info/variables.c:60
+msgid "Controls what happens when scrolling is requested at the end of a node"
+msgstr ""
+"Contrôler ce qui arrive lorsqu'un défilement est requis à la fin d'un noeud"
+
+#: info/variables.c:65
+msgid "Same as scroll-behaviour"
+msgstr ""
+
+#: info/variables.c:69
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr "Le nombre de lignes à défiler quand le curseur va hors de la fenêtre"
+
+#: info/variables.c:73
+msgid "Controls whether scroll-behavior affects cursor movement commands"
+msgstr ""
+
+#: info/variables.c:77
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr "En position « On », Info accepte et affiche les caractères ISO Latin"
+
+#: info/variables.c:81
+#, fuzzy
+msgid ""
+"What to do when a scrolling command is issued at the end of the last node"
+msgstr ""
+"Contrôler ce qui arrive lorsqu'un défilement est requis à la fin d'un noeud"
+
+#: info/variables.c:88
+msgid "Explain the use of a variable"
+msgstr "Expliquer l'usage d'une variable"
+
+#: info/variables.c:94
+msgid "Describe variable: "
+msgstr "Décrire la variable: "
+
+#: info/variables.c:113
+msgid "Set the value of an Info variable"
+msgstr "Fixer la valeur d'une variable Info"
+
+#: info/variables.c:119
+msgid "Set variable: "
+msgstr "Fixer la variable: "
+
+#: info/variables.c:137
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "Fixer %s à la valeur (%d): "
+
+#: info/variables.c:178
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "Fixer %s à la valeur (%s): "
+
+# Est-ce vraiment un message à traduire?
+#: info/window.c:1026
+msgid "--*** Tags out of Date ***"
+msgstr "--*** Étiquettes passées Date ***"
+
+#: info/window.c:1037
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), lignes ----, "
+
+#: info/window.c:1044
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d lignes --%s--"
+
+#: info/window.c:1048
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d lignes --%s--"
+
+#: info/window.c:1055
+#, c-format
+msgid " Subfile: %s"
+msgstr " Sous-fichier: %s"
+
+#: install-info/install-info.c:221
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: avertissement: "
+
+#: install-info/install-info.c:270
+#, c-format
+msgid " for %s"
+msgstr " pour %s"
+
+#: install-info/install-info.c:500
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr "\\tUtiliser « %s --help » pour une liste complète des options.\n"
+
+#: install-info/install-info.c:508
+#, fuzzy, c-format
+msgid "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+msgstr "Usage: %s [OPTION]... FICHIER-TEXINFO...\n"
+
+#: install-info/install-info.c:510
+msgid "Add or remove entries in INFO-FILE from the Info directory DIR-FILE."
+msgstr ""
+
+#: install-info/install-info.c:513
+msgid ""
+"Options:\n"
+" --debug report what is being done.\n"
+" --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+" don't insert any new entries.\n"
+" --description=TEXT the description of the entry is TEXT; used with\n"
+" the --name option to become synonymous with the\n"
+" --entry option.\n"
+" --dir-file=NAME specify file name of Info directory file;\n"
+" equivalent to using the DIR-FILE argument.\n"
+" --dry-run same as --test."
+msgstr ""
+
+#: install-info/install-info.c:525
+msgid ""
+" --entry=TEXT insert TEXT as an Info directory entry.\n"
+" TEXT is written as an Info menu item line followed\n"
+" by zero or more extra lines starting with "
+"whitespace.\n"
+" If you specify more than one entry, all are added.\n"
+" If you don't specify any entries, they are determined\n"
+" from information in the Info file itself.\n"
+" When removing, TEXT specifies the entry to remove.\n"
+" TEXT is only removed as a last resort, if the\n"
+" entry as determined from the Info file is not "
+"present,\n"
+" and the basename of the Info file isn't found either."
+msgstr ""
+
+#: install-info/install-info.c:537
+msgid ""
+" --help display this help and exit.\n"
+" --info-dir=DIR same as --dir-file=DIR/dir.\n"
+" --info-file=FILE specify Info file to install in the directory;\n"
+" equivalent to using the INFO-FILE argument.\n"
+" --item=TEXT same as --entry=TEXT.\n"
+" --keep-old do not replace entries, or remove empty sections.\n"
+" --menuentry=TEXT same as --name=TEXT.\n"
+" --name=TEXT the name of the entry is TEXT; used with --description\n"
+" to become synonymous with the --entry option.\n"
+" --no-indent do not format new entries in the DIR file.\n"
+" --quiet suppress warnings."
+msgstr ""
+
+#: install-info/install-info.c:550
+msgid ""
+" --regex=R put this file's entries in all sections that match the\n"
+" regular expression R (ignoring case).\n"
+" --remove same as --delete.\n"
+" --remove-exactly only remove if the info file name matches exactly;\n"
+" suffixes such as .info and .gz are not ignored.\n"
+" --section=SEC put entries in section SEC of the directory.\n"
+" If you specify more than one section, all the entries\n"
+" are added in each of the sections.\n"
+" If you don't specify any sections, they are "
+"determined\n"
+" from information in the Info file itself.\n"
+" --section R SEC equivalent to --regex=R --section=SEC --add-once."
+msgstr ""
+
+#: install-info/install-info.c:563
+msgid ""
+" --silent suppress warnings.\n"
+" --test suppress updating of DIR-FILE.\n"
+" --version display version information and exit."
+msgstr ""
+
+#: install-info/install-info.c:570
+#, fuzzy
+msgid ""
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+"Rapporter toute anomalie à bug-texinfo@gnu.org et poster\n"
+"vos questions et autre discussion à help-texinfo@gnu.org.\n"
+"Site de Texinfo: http://www.gnu.org/software/texinfo/"
+
+#: install-info/install-info.c:597
+#, c-format
+msgid ""
+"This is the file .../info/dir, which contains the\n"
+"topmost node of the Info hierarchy, called (dir)Top.\n"
+"The first time you invoke Info you start off looking at this node.\n"
+"\n"
+"%s\tThis is the top of the INFO tree\n"
+"\n"
+" This (the Directory node) gives a menu of major topics.\n"
+" Typing \"q\" exits, \"?\" lists all Info commands, \"d\" returns here,\n"
+" \"h\" gives a primer for first-timers,\n"
+" \"mEmacs<Return>\" visits the Emacs manual, etc.\n"
+"\n"
+" In Emacs, you can click mouse button 2 on a menu item or cross reference\n"
+" to select it.\n"
+"\n"
+"%s\n"
+msgstr ""
+"Ceci est le fichier .../info/dir, lequel contient le noeud \n"
+"le plus haut dans la hiérarchie Info, noeud appelé (dir)Top.\n"
+"La première fois que Info est invoqué, vous démarrez la recherche \n"
+"à partir de ce noeud.\n"
+"\n"
+"%s\tCeci est le haut de l'arborescence INFO\n"
+"\n"
+" Ceci (le noeud Répertoire) fournit un menu des sujets majeurs.\n"
+" Taper « q » pour quitter, « ? » pour lister toutes les commandes Info,\n"
+" « d » pour revenir à cet endroit,\n"
+" « h » fournit un guide d'initiation pour les nouveaux venus,\n"
+" « mEmacs<Return> » démarre une consultation du manuel Emacs, etc.\n"
+"\n"
+" En Emacs, vous pouvez cliquer avec le bouton-2 de la souris sur un item "
+"menu \n"
+" ou sur une référence croisée pour le sélectionner.\n"
+"\n"
+"%s\n"
+
+#: install-info/install-info.c:622
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr "%s: ne peut pas lire (%s) et ne peut pas créer (%s)\n"
+
+#: install-info/install-info.c:715
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: fichier vide"
+
+#: install-info/install-info.c:1046 install-info/install-info.c:1086
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "START-INFO-DIR-ENTRY non apparié avec END-INFO-DIR-ENTRY"
+
+#: install-info/install-info.c:1081
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "END-INFO-DIR-ENTRY non apparié avec START-INFO-DIR-ENTRY"
+
+#: install-info/install-info.c:1946 install-info/install-info.c:1956
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr "%s: a déjà un fichier répertoire: %s\n"
+
+#: install-info/install-info.c:2036
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: Spécifier le fichier Info seulement une fois.\n"
+
+#: install-info/install-info.c:2069
+#, c-format
+msgid "Extra regular expression specified, ignoring `%s'"
+msgstr ""
+
+#: install-info/install-info.c:2081
+#, c-format
+msgid "Error in regular expression `%s': %s"
+msgstr ""
+
+#: install-info/install-info.c:2139
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "excédent d'argument de ligne de commande « %s »"
+
+#: install-info/install-info.c:2143
+msgid "No input file specified; try --help for more information."
+msgstr ""
+"Aucun fichier d'entrée spécifié; utiliser --help pour plus d'informations."
+
+#: install-info/install-info.c:2146
+msgid "No dir file specified; try --help for more information."
+msgstr "Aucun fichier dir spécifié; utiliser --help pour plus d'informations."
+
+#: install-info/install-info.c:2288
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "aucune entrée répertoire Info dans « %s »"
+
+#: install-info/install-info.c:2536
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "aucune entrée trouvée pour « %s »; rien n'a été éliminé"
+
+#: lib/xexit.c:54
+msgid "ferror on stdout\n"
+msgstr ""
+
+#: lib/xexit.c:59
+msgid "fflush error on stdout\n"
+msgstr ""
+
+#: makeinfo/cmds.c:582 makeinfo/cmds.c:604
+#, c-format
+msgid "arguments to @%s ignored"
+msgstr "arguments à @%s ignorés"
+
+#: makeinfo/cmds.c:779
+msgid "January"
+msgstr "janvier"
+
+#: makeinfo/cmds.c:779
+msgid "February"
+msgstr "février"
+
+#: makeinfo/cmds.c:779
+msgid "March"
+msgstr "mars"
+
+#: makeinfo/cmds.c:779
+msgid "April"
+msgstr "avril"
+
+#: makeinfo/cmds.c:779
+msgid "May"
+msgstr "mai"
+
+#: makeinfo/cmds.c:780
+msgid "June"
+msgstr "juin"
+
+#: makeinfo/cmds.c:780
+msgid "July"
+msgstr "juillet"
+
+#: makeinfo/cmds.c:780
+msgid "August"
+msgstr "août"
+
+#: makeinfo/cmds.c:780
+msgid "September"
+msgstr "septembre"
+
+#: makeinfo/cmds.c:780
+msgid "October"
+msgstr "octobre"
+
+#: makeinfo/cmds.c:781
+msgid "November"
+msgstr "novembre"
+
+#: makeinfo/cmds.c:781
+msgid "December"
+msgstr "décembre"
+
+#: makeinfo/cmds.c:1131
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "caractère %c improbable dans la macro @var"
+
+#: makeinfo/cmds.c:1174
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "argument de la macro @sc tout en majuscules, alors aucun effet"
+
+#: makeinfo/cmds.c:1229
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "« { » attendu, mais a vu « %c »"
+
+#: makeinfo/cmds.c:1269
+msgid "end of file inside verb block"
+msgstr "fin de fichier à l'intérieur du bloc verbe"
+
+#: makeinfo/cmds.c:1277
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "« } » attendu, mais a vu « %c »"
+
+#: makeinfo/cmds.c:1308
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+"@strong{Note...} produit une table douteuse de références croisées dans "
+"Info; réécrire pour éviter cela"
+
+#: makeinfo/cmds.c:1504
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s est périmé"
+
+#: makeinfo/cmds.c:1612
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "La macro @sp exige un argument numérique positif, pas « %s »"
+
+#: makeinfo/cmds.c:2023 makeinfo/footnote.c:81
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "Mauvais argument à %c%s"
+
+#: makeinfo/cmds.c:2033 makeinfo/makeinfo.c:4317
+msgid "asis"
+msgstr "« asis »"
+
+#: makeinfo/cmds.c:2035 makeinfo/cmds.c:2065 makeinfo/makeinfo.c:4319
+msgid "none"
+msgstr "« none »"
+
+#: makeinfo/cmds.c:2049
+#, c-format
+msgid "Bad argument to @%s"
+msgstr "Mauvais argument à @%s"
+
+#: makeinfo/cmds.c:2063
+msgid "insert"
+msgstr "insérer"
+
+#: makeinfo/cmds.c:2079
+#, fuzzy, c-format
+msgid "Bad argument to @%s: %s"
+msgstr "Mauvais argument à @%s"
+
+#: makeinfo/cmds.c:2162
+#, c-format
+msgid "Expected @%s on or off, not `%s'"
+msgstr ""
+
+#: makeinfo/cmds.c:2182
+#, c-format
+msgid "Only @%s 10 or 11 is supported, not `%s'"
+msgstr ""
+
+#: makeinfo/defun.c:83
+msgid "Missing `}' in @def arg"
+msgstr "Accolade « } » manquante dans @def arg"
+
+#: makeinfo/defun.c:711
+#, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr "Doit être dans une insertion « @%s » afin d'utiliser « @%s »."
+
+#: makeinfo/files.c:434
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:637
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr "« %s » omis avant le nom de fichier de sortie"
+
+#: makeinfo/files.c:645
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr "« %s » omis avant l'écriture sur la sortie standard"
+
+#: makeinfo/files.c:693
+msgid "Output buffer not empty."
+msgstr "Tampon de sortie n'est pas vide."
+
+#: makeinfo/float.c:181
+#, c-format
+msgid "Requested float type `%s' not previously used"
+msgstr ""
+
+#: makeinfo/float.c:376 makeinfo/float.c:382 makeinfo/index.c:959
+#: makeinfo/index.c:965
+msgid "See "
+msgstr "Voir "
+
+#: makeinfo/footnote.c:149
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "« %c%s » nécessite un argument « {...} », non pas « %s » uniquement"
+
+#: makeinfo/footnote.c:164
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "Accolade fermante « } » manquante pour la note de bas de page « %s »"
+
+#: makeinfo/footnote.c:197
+msgid "Footnote defined without parent node"
+msgstr "La note de bas de page est définie sans noeud parent"
+
+#: makeinfo/footnote.c:209
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "Les notes de bas de page récursives ne sont pas permises"
+
+# Est-ce vraiement un message à traduire?
+#: makeinfo/footnote.c:301 makeinfo/index.c:187
+msgid "Footnotes"
+msgstr "Notes de bas de page"
+
+#: makeinfo/html.c:91
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr "%s: ne peut ouvrir --css-file: %s"
+
+#: makeinfo/html.c:180
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr "%s%d: --css-file terminé dans le commentaire"
+
+#: makeinfo/html.c:426
+msgid "[unexpected] no html tag to pop"
+msgstr "[inattendu] pas d'étiquette html à dépiler"
+
+#: makeinfo/html.c:800
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "[inattendu] nom de noeud invalide: « %s »"
+
+#: makeinfo/index.c:167
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "Nom d'index inconnu « %s »"
+
+#: makeinfo/index.c:232
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr "Info ne peut traiter « : » dans l'entrée d'index « %s »"
+
+#: makeinfo/index.c:410
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "L'index « %s » existe toujours"
+
+#: makeinfo/index.c:453
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "Nom d'index « %s » inconnu et/ou « %s » dans @synindex"
+
+#: makeinfo/index.c:676
+msgid "(line )"
+msgstr "(ligne )"
+
+#: makeinfo/index.c:684
+#, c-format
+msgid "(line %*d)"
+msgstr "(ligne %*d)"
+
+#: makeinfo/index.c:765
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "Nom d'index « %s » inconnu dans @printindex"
+
+#: makeinfo/index.c:834
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "Entrée pour l'index « %s » à l'extérieure de tout noeud"
+
+#: makeinfo/index.c:837 makeinfo/index.c:873
+msgid "(outside of any node)"
+msgstr "(à l'extérieur de tout noeud)"
+
+#: makeinfo/insertion.c:161
+msgid "@item not allowed in argument to @itemize"
+msgstr "@item n'est pas permis dans l'agument @itemize"
+
+#: makeinfo/insertion.c:242
+msgid "Broken-Type in insertion_type_pname"
+msgstr "Type impossible dans la fonction insertion_type_pname"
+
+#: makeinfo/insertion.c:338
+msgid "Enumeration stack overflow"
+msgstr "Débordement de la pile d'énumérations"
+
+#: makeinfo/insertion.c:370
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "débordement du lettrage, reprise à partir de %c"
+
+#: makeinfo/insertion.c:639
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s exige un argument: le formateur pour %citem"
+
+#: makeinfo/insertion.c:727
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr "%cenvironnements float ne peuvent être imbriqués"
+
+#: makeinfo/insertion.c:981
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "« @end » s'attendait à « %s », mais a vu « %s »"
+
+#: makeinfo/insertion.c:1349
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "« %cend %s » non apparié"
+
+#: makeinfo/insertion.c:1618
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s exige une lettre ou un chiffre"
+
+#: makeinfo/insertion.c:1718
+msgid "end of file inside verbatim block"
+msgstr "fin de fichier à l'intérieur du bloc verbatim"
+
+#: makeinfo/insertion.c:1942
+#, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "@%s n'a aucun sens à l'extérieur de l'environnement « @float »"
+
+#: makeinfo/insertion.c:1978
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "@menu vu avant le premier @node, création du noeud « Top »"
+
+#: makeinfo/insertion.c:1979
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr ""
+"votre noeud @top devrait se retrouver peut-être dans @ifnottex plutôt que "
+"dans @ifinfo?"
+
+#: makeinfo/insertion.c:1991
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "@detailmenu vu avant le premier noeud, création du noeud « Top »"
+
+#: makeinfo/insertion.c:2047
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr ""
+"@%s n'a aucun sens à l'extérieur des environnements « @titlepage » et « "
+"@quotation »"
+
+#: makeinfo/insertion.c:2061
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "@%s n'a aucun sens à l'extérieur de l'environnement « @titlepage »"
+
+#: makeinfo/insertion.c:2092
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "« %c%s » non apparié"
+
+#: makeinfo/insertion.c:2097
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "« %c%s » a besoin de quelque chose après lui"
+
+#: makeinfo/insertion.c:2103
+#, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "Mauvais argument « %s » à « @%s » utilisant « %s »"
+
+#: makeinfo/insertion.c:2200
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "macro @%s inactive à l'intérieur d'un bloc « %s »"
+
+#: makeinfo/insertion.c:2209
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "macro @itemx inactive à l'intérieur d'un bloc « %s »"
+
+#: makeinfo/insertion.c:2383
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "%c%s est trouvé à l'extérieur d'un bloc d'insertion"
+
+#: makeinfo/lang.c:1218
+#, c-format
+msgid "no default territory known for language `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:1281
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr "%s n'est pas un code ISO 639 valide pour l'identification de langue"
+
+#: makeinfo/lang.c:1399
+#, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "nom d'encodage non reconnu « %s »"
+
+#: makeinfo/lang.c:1407
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "désolé, l'encodage « %s » n'est pas supporté"
+
+#: makeinfo/lang.c:1492
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "caractère encodé invalide « %s »"
+
+#: makeinfo/lang.c:1800
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr "%c%s s'attend à argument « i » ou « j », non pas « %c »"
+
+#: makeinfo/lang.c:1804
+#, c-format
+msgid "%c%s expects a single character `i' or `j' as argument"
+msgstr "%c%s attend un argument d'un seul caractère « i » ou « j »"
+
+#: makeinfo/macro.c:128
+#, c-format
+msgid "macro `%s' previously defined"
+msgstr "macro « %s » déjà définie précédemment"
+
+#: makeinfo/macro.c:132
+#, c-format
+msgid "here is the previous definition of `%s'"
+msgstr "ici se trouve la définition précédente de « %s »"
+
+#: makeinfo/macro.c:359
+#, c-format
+msgid "\\ in macro expansion followed by `%s' instead of parameter name"
+msgstr ""
+"\\ dans l'expansion de macro suivie par « %s » au lieu du nom de paramètre"
+
+#: makeinfo/macro.c:401
+#, c-format
+msgid "Macro `%s' called on line %d with too many args"
+msgstr "Macro « %s » appelée à la ligne %d avec trop d'arguments"
+
+#: makeinfo/macro.c:580
+#, c-format
+msgid "%cend macro not found"
+msgstr "macro %cend non trouvée"
+
+#: makeinfo/macro.c:591
+msgid "@allow-recursion is deprecated; please use @rmacro instead"
+msgstr ""
+
+#: makeinfo/macro.c:606
+msgid "@quote-arg is deprecated; arguments are quoted by default"
+msgstr ""
+
+#: makeinfo/macro.c:649
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "macro @end %s non balancée avec @%s"
+
+#: makeinfo/makeinfo.c:188
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "Beaucoup trop d'erreurs! Abandon.\n"
+
+#: makeinfo/makeinfo.c:306
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: avertissement: "
+
+#: makeinfo/makeinfo.c:325 makeinfo/makeinfo.c:2340
+#, c-format
+msgid "Misplaced %c"
+msgstr "%c égarée ou mal placée"
+
+#: makeinfo/makeinfo.c:344
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Utiliser « %s --help » pour plus d'informations.\n"
+
+#: makeinfo/makeinfo.c:347
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "Usage: %s [OPTION]... FICHIER-TEXINFO...\n"
+
+#: makeinfo/makeinfo.c:350
+msgid ""
+"Translate Texinfo source documentation to various other formats, by default\n"
+"Info files suitable for reading online with Emacs or standalone GNU Info.\n"
+msgstr ""
+"Traduire une documentation Texinfo source en divers autres formats:\n"
+"Fichiers Info adéquats pour lire en ligne avec Emacs ou GNU Info autonome\n"
+
+#: makeinfo/makeinfo.c:354
+#, fuzzy, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\n"
+" --document-language=STR locale to use in translating Texinfo keywords\n"
+" for the output document (default C).\n"
+" --force preserve output even if errors.\n"
+" --help display this help and exit.\n"
+" --no-validate suppress node cross-reference validation.\n"
+" --no-warn suppress warnings (but not errors).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"Options générales:\n"
+" --error-limit=NUM Quitter après NUM erreurs (par défaut %d).\n"
+" --force Conserver la sortie même s'il y a des erreurs.\n"
+" --help Afficher ce menu d'aide et quitter.\n"
+" --no-validate Supprimer la validation de la table de "
+"références.\n"
+" --no-warn Supprimer les avertissements (mais pas les "
+"erreurs).\n"
+" --reference-limit=NUM Avertir après plus de NUM références (défaut %"
+"d).\n"
+" -v, --verbose En mode bavard, expliquer ce qui a été fait.\n"
+" --version Afficher la version du logiciel et quitter.\n"
+
+#: makeinfo/makeinfo.c:369
+#, fuzzy, no-wrap
+msgid ""
+"Output format selection (default is to produce Info):\n"
+" --docbook output Docbook XML rather than Info.\n"
+" --html output HTML rather than Info.\n"
+" --xml output Texinfo XML rather than Info.\n"
+" --plaintext output plain text rather than Info.\n"
+msgstr ""
+"Options de sélection de format de sortie (par défaut produire Info):\n"
+" --docbook Écrire en format DocBook XML plutôt qu'en format Info.\n"
+" --html Écrire en format HTML plutôt qu'en format Info;\n"
+" --xml Produire en Texinfo XML plutôt qu'en format Info.\n"
+" --plaintext Produire en formast plein texte plutôt qu'en format Info.\n"
+
+#: makeinfo/makeinfo.c:377
+#, fuzzy
+msgid ""
+"General output options:\n"
+" -E, --macro-expand=FILE output macro-expanded source to FILE,\n"
+" ignoring any @setfilename.\n"
+" --no-headers suppress node separators, Node: lines, and "
+"menus\n"
+" from Info output (thus producing plain "
+"text)\n"
+" or from HTML (thus producing shorter "
+"output);\n"
+" also, write to standard output by default.\n"
+" --no-split suppress the splitting of Info or HTML "
+"output,\n"
+" generate only one output file.\n"
+" --number-sections output chapter and sectioning numbers.\n"
+" -o, --output=FILE output to FILE (or directory if split HTML).\n"
+msgstr ""
+"Options générales de sortie:\n"
+" -E, --macro-expand FICHIER produire dans le FICHIER l'expension source de "
+"macro.\n"
+" ignorer tout @setfilename.\n"
+" --no-headers Supprimer les séparateurs de noeud Info et "
+"Node:\n"
+" lignes et écrire une sortie standard sans --"
+"output.\n"
+" --no-split suprimer les divisions de sortie Info ou HTML,\n"
+" générer seulement un seul fichier de sortie.\n"
+" --number-sections produire les numéros de chapitres et de "
+"sections.\n"
+" -o, --output=FICHIER produire la sortie dans le FICHIER (répertoire "
+"si division en HTML),\n"
+
+#: makeinfo/makeinfo.c:391
+#, fuzzy, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --disable-encoding do not output accented and special characters\n"
+" in Info output based on @documentencoding.\n"
+" --enable-encoding override --disable-encoding (default).\n"
+" --fill-column=NUM break Info lines at NUM characters (default %"
+"d).\n"
+" --footnote-style=STYLE output footnotes in Info according to STYLE:\n"
+" `separate' to put them in their own node;\n"
+" `end' to put them at the end of the node, "
+"in\n"
+" which they are defined (this is the "
+"default).\n"
+" --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %"
+"d).\n"
+" If VAL is `none', do not indent; if VAL is\n"
+" `asis', preserve existing indentation.\n"
+" --split-size=NUM split Info files at size NUM (default %d).\n"
+msgstr ""
+"Options pour Info et texte:\n"
+" --enable-encoding produire les caractères accentués et spéciaux\n"
+" dans une sortie Info basée sur @documentencoding.\n"
+" --fill-column=NUM briser les lignes Info à chaque NUM caractères (par "
+"défaut %d).\n"
+" --footnote-style=STYLE produire les notes des bas de page en Info selon le "
+"STYLE:\n"
+" « separate » pour les placer dans leur propre "
+"noeud;\n"
+" « end » pour les placer à la fin de leur noeud\n"
+" où ils sont définis (par défaut).\n"
+" --paragraph-indent=NUM indenter les paragraphes Info par NUM espaces (par "
+"défaut %d).\n"
+" Si NUM est « none », ne pas indenter; si NUM est\n"
+" « asis », préserver l'indentation existente.\n"
+" --split-size=NUM séparer les fichiers Info selon la taille NUM (par "
+"défaut %d).\n"
+
+#: makeinfo/makeinfo.c:409
+#, fuzzy
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+" --css-ref=URL generate reference to a CSS file.\n"
+" --internal-links=FILE produce list of internal links in FILE.\n"
+" --transliterate-file-names\n"
+" produce file names in ASCII transliteration.\n"
+msgstr ""
+" --css-include=FICHIER inclure le FICHIER dans le <style> de "
+"sortie HTML;\n"
+" lire de stdin si le FICHIER est -.\n"
+
+#: makeinfo/makeinfo.c:419
+#, fuzzy, c-format
+msgid ""
+"Options for XML and Docbook:\n"
+" --output-indent=VAL indent XML elements by VAL spaces (default %"
+"d).\n"
+" If VAL is 0, ignorable whitespace is "
+"dropped.\n"
+msgstr ""
+" --output-indent=VAL indenter les éléments XML à l'aide dee VAL "
+"espaces (par défaut %d).\n"
+" Si VAL vaut 0, les espaces pouvant être "
+"ignorés sont éliminés.\n"
+
+#: makeinfo/makeinfo.c:426
+msgid ""
+"Input file options:\n"
+" --commands-in-node-names allow @ commands in node names.\n"
+" -D VAR define the variable VAR, as with @set.\n"
+" -I DIR append DIR to the @include search path.\n"
+" -P DIR prepend DIR to the @include search path.\n"
+" -U VAR undefine the variable VAR, as with @clear.\n"
+msgstr ""
+"Options portant sur les fichier d'entrée:\n"
+" --commands-in-node-names permet les commandes @ dans les noms de "
+"noeuds.\n"
+" -D VAR Définir une variable, comme avec @set.\n"
+" -I DIR Ajouter à la fin DIR au chemin de fouille "
+"@include.\n"
+" -P DIR Ajouter au début DIR au chemin de fouille "
+"@include.\n"
+" -U VAR Rendre indéfinie une variable, comme avec "
+"@clear.\n"
+
+#: makeinfo/makeinfo.c:435
+msgid ""
+"Conditional processing in input:\n"
+" --ifdocbook process @ifdocbook and @docbook even if\n"
+" not generating Docbook.\n"
+" --ifhtml process @ifhtml and @html even if not generating HTML.\n"
+" --ifinfo process @ifinfo even if not generating Info.\n"
+" --ifplaintext process @ifplaintext even if not generating plain text.\n"
+" --iftex process @iftex and @tex; implies --no-split.\n"
+" --ifxml process @ifxml and @xml.\n"
+" --no-ifdocbook do not process @ifdocbook and @docbook text.\n"
+" --no-ifhtml do not process @ifhtml and @html text.\n"
+" --no-ifinfo do not process @ifinfo text.\n"
+" --no-ifplaintext do not process @ifplaintext text.\n"
+" --no-iftex do not process @iftex and @tex text.\n"
+" --no-ifxml do not process @ifxml and @xml text.\n"
+"\n"
+" Also, for the --no-ifFORMAT options, do process @ifnotFORMAT text.\n"
+msgstr ""
+"Traitement conditionel de l'entrée:\n"
+" --ifdocbook Traiter @ifdocbook et @docbook même s'il\n"
+" n'y a pas de génération Docbook.\n"
+" --ifhtml Traiter le textuel sous @ifhtml et @html même\n"
+" s'il n'y a pas de génération HTML.\n"
+" --ifinfo Traiter le textuel sous @ifinfo même\n"
+" s'il n'y a pas de génération Info.\n"
+" --ifplaintext Traiter le textuel sous @ifplaintext même\n"
+" s'il n'y a pas de génération plein texte\n"
+" --iftex Traiter le textuel sous @iftex et @tex.\n"
+" implique l'option --no-split.\n"
+" --ifxml Traiter le textuel sous @ifxml et sous @xml.\n"
+" --no-ifhtml Ne pas traiter le textuel sous @ifhtml et @html.\n"
+" --no-ifinfo Ne pas traiter le textuel sous @ifinfo.\n"
+" --no-ifplaintext Ne pas traiter le textuel sous @ifplaintext.\n"
+" --no-iftex Ne pas traiter le textuel sous @iftex et @tex.\n"
+" --no-ifxml Ne pas traiter le textuel sous @ifxml et @xml.\n"
+"\n"
+" Aussi pour l'options --no-ifFORMAT, ne pas traiter le textuel "
+"@ifnotFORMAT.\n"
+
+#: makeinfo/makeinfo.c:454
+msgid ""
+" The defaults for the @if... conditionals depend on the output format:\n"
+" if generating HTML, --ifhtml is on and the others are off;\n"
+" if generating Info, --ifinfo is on and the others are off;\n"
+" if generating plain text, --ifplaintext is on and the others are off;\n"
+" if generating XML, --ifxml is on and the others are off.\n"
+msgstr ""
+"Les valeurs par défaut pour le @if... conditionnels dépend du format de "
+"sortie:\n"
+"en géneration HTML, --ifhtml est « on » et les autres sont « off » ;\n"
+"en génération Info, --ifinfo est « on » et les autres sont « off » ;\n"
+"en génération plein texte, --ifplaintext est « on » et les autres sont « off "
+"» ;\n"
+"en génération XML, --ifxml est « on » et les autres sont « off ».\n"
+
+#: makeinfo/makeinfo.c:462
+#, fuzzy
+msgid ""
+"Examples:\n"
+" makeinfo foo.texi write Info to foo's @setfilename\n"
+" makeinfo --html foo.texi write HTML to @setfilename\n"
+" makeinfo --xml foo.texi write Texinfo XML to @setfilename\n"
+" makeinfo --docbook foo.texi write DocBook XML to @setfilename\n"
+" makeinfo --no-headers foo.texi write plain text to standard "
+"output\n"
+"\n"
+" makeinfo --html --no-headers foo.texi write html without node lines, "
+"menus\n"
+" makeinfo --number-sections foo.texi write Info with numbered sections\n"
+" makeinfo --no-split foo.texi write one Info file however big\n"
+msgstr ""
+"Examples:\n"
+" makeinfo foo.texi Écrire en Info dans @setfilename de "
+"foo\n"
+" makeinfo --html foo.texi Écrire en HTML dans @setfilename de "
+"foo\n"
+" makeinfo --xml foo.texi Écrire en XML dans @setfilename de "
+"foo\n"
+" makeinfo --docbook foo.texi Écrire le DocBook en XML dans "
+"@setfilename\n"
+" makeinfo --no-headers foo.texi Écrire en plein texte en sortie "
+"standard\n"
+"\n"
+" makeinfo --html --no-headers foo.texi Écrire en HTML sans les lignes de "
+"noeuds et de menus\n"
+" makeinfo --number-sections foo.texi Écrire en Info avec sections "
+"numérotées\n"
+" makeinfo --no-split foo.texi Écrire un fichier Info même "
+"volumineux\n"
+
+#: makeinfo/makeinfo.c:622
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr "%s: valeur TEXINFO_OUTPUT_FORMAT non reconnue est ignoré « %s »\n"
+
+#: makeinfo/makeinfo.c:670 makeinfo/makeinfo.c:696 makeinfo/makeinfo.c:720
+#: makeinfo/makeinfo.c:780
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr "%s: l'argument %s doit être numérique, non pas « %s ».\n"
+
+#: makeinfo/makeinfo.c:683
+#, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "%s: ne peut ouvrir la sortie d'expansion de macro « %s »"
+
+#: makeinfo/makeinfo.c:688
+#, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "%s: ignorer la sortie de l'expansion de la seconde macro « %s »\n"
+
+#: makeinfo/makeinfo.c:733
+#, fuzzy, c-format
+msgid "%s: could not open internal links output `%s'"
+msgstr "%s: ne peut ouvrir la sortie d'expansion de macro « %s »"
+
+#: makeinfo/makeinfo.c:738
+#, fuzzy, c-format
+msgid "%s: ignoring second internal links output `%s'.\n"
+msgstr "%s: ignorer la sortie de l'expansion de la seconde macro « %s »\n"
+
+#: makeinfo/makeinfo.c:751
+#, c-format
+msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
+msgstr ""
+"%s: l'argument de l'option --paragraph-indent doit être numérique, « none » "
+"ou\n"
+"« asis », non pas « %s ».\n"
+
+#: makeinfo/makeinfo.c:769
+#, c-format
+msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
+msgstr ""
+"%s: l'argument de l'option --footnote-style doit être « separate » ou\n"
+"« end », non pas « %s ».\n"
+
+#: makeinfo/makeinfo.c:844
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: absence d'un argument fichier.\n"
+
+#: makeinfo/makeinfo.c:1041 makeinfo/makeinfo.c:4166
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr "Commande multilignes %c%s utilisé de manière incorrecte"
+
+#: makeinfo/makeinfo.c:1044
+#, c-format
+msgid "Expected `%s'"
+msgstr "« %s » attendue"
+
+#: makeinfo/makeinfo.c:1521
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "Ne peut créer le répertoire « %s »: %s"
+
+#: makeinfo/makeinfo.c:1567
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "Aucun « %s » trouvé dans « %s »"
+
+#: makeinfo/makeinfo.c:1647
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr ""
+"%s: Sauter l'expansion de macro qui irait sur stdout comme la sortie Info.\n"
+
+#: makeinfo/makeinfo.c:1677
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "Fabrication du fichier %s « %s » à partir de « %s ».\n"
+
+#: makeinfo/makeinfo.c:1744
+#, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: Enlèvement du fichier de sortie de macro « %s » à cause d'erreurs;\n"
+"utiliser l'option --force pour préserver.\n"
+
+#: makeinfo/makeinfo.c:1799
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: Enlèvement du fichier de sortie « %s » à cause d'erreurs;\n"
+"utiliser l'option --force pour préserver.\n"
+
+#: makeinfo/makeinfo.c:1818
+#, fuzzy, c-format
+msgid ""
+"%s: Removing internal links output file `%s' due to errors; use --force to "
+"preserve.\n"
+msgstr ""
+"%s: Enlèvement du fichier de sortie « %s » à cause d'erreurs;\n"
+"utiliser l'option --force pour préserver.\n"
+
+#: makeinfo/makeinfo.c:2113
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "Commande inconnue « %s »."
+
+#: makeinfo/makeinfo.c:2135
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr ""
+"Utiliser des accolades pour donner une commande comme argument à « @%s »"
+
+#: makeinfo/makeinfo.c:2394
+#, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s accolades attendues"
+
+#: makeinfo/makeinfo.c:2407
+msgid "Unmatched }"
+msgstr "Accolade « } » non appariée"
+
+#: makeinfo/makeinfo.c:2455
+msgid "NO_NAME!"
+msgstr "NOM_INCONNU!"
+
+#: makeinfo/makeinfo.c:2476
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s accolade fermante manquante"
+
+#: makeinfo/makeinfo.c:3482
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "commande @image dans un fichier (pour HTML) « %s » illisible: %s"
+
+#: makeinfo/makeinfo.c:3488
+#, c-format
+msgid "No such file `%s'"
+msgstr "Aucun fichier « %s »"
+
+#: makeinfo/makeinfo.c:3624
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "commande @image avec un fichier (texte) « %s » illisible: %s"
+
+#: makeinfo/makeinfo.c:3633
+msgid "@image missing filename argument"
+msgstr "commande @image ayant un argument fichier absent"
+
+#: makeinfo/makeinfo.c:3851
+#, c-format
+msgid "undefined flag: %s"
+msgstr "fanion indéfini: %s"
+
+#: makeinfo/makeinfo.c:3852
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{Aucune valeur pour « %s »}"
+
+#: makeinfo/makeinfo.c:3904
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s exige un nom"
+
+#: makeinfo/makeinfo.c:4010
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "Fin de fichier rencontré avant l'appariement de @end %s"
+
+#: makeinfo/makeinfo.c:4258
+#, c-format
+msgid "`%.40s...' is too long for expansion; not expanded"
+msgstr "« %.40s... » est trop long pour l'expansion; n'a pas fait d'expansion"
+
+#: makeinfo/multi.c:116
+msgid "Missing } in @multitable template"
+msgstr "Accolade « } » manquante dans un patron @multitable"
+
+#: makeinfo/multi.c:260
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "abandon du texte orphelin « %s » après la commande @multitable"
+
+#: makeinfo/multi.c:400
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "Trop de colonnes dans un item de multitable (%d max)"
+
+#: makeinfo/multi.c:563
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr ""
+"[inattendu] ne peut pas sélectionner la colonne #%d dans une multitable."
+
+#: makeinfo/multi.c:592
+msgid "ignoring @tab outside of multitable"
+msgstr "inhibition d'une commande @tab à l'extérieur d'une multitable"
+
+#: makeinfo/multi.c:640
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** Sortie en multicolonnes à partir de la dernière rangée:\n"
+
+#: makeinfo/multi.c:643
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* colonne #%d: sortie = %s\n"
+
+#: makeinfo/node.c:279
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "Le noeud « %s » défini antérieurement à la ligne %d"
+
+#: makeinfo/node.c:647
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "Écriture du noeud « %s »...\n"
+
+#: makeinfo/node.c:714
+#, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr "Le noeud « %s » exige une commande de subdivision (i.e. %c%s)"
+
+#: makeinfo/node.c:878
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "Aucun nom de noeud spécifié pour la commande « %c%s »"
+
+#: makeinfo/node.c:919 makeinfo/node.c:1163
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr "Ancre « %s » et mode « %s » pointe vers le même nom de fichier"
+
+#: makeinfo/node.c:922
+msgid "This @anchor command ignored; references to it will not work"
+msgstr ""
+"Commande @anchor ignorée; les références vers celle-ci ne fonctionneront pas"
+
+#: makeinfo/node.c:924 makeinfo/node.c:1166
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr "Renommer cette ancre ou utiliser l'option « --no-split »"
+
+#: makeinfo/node.c:954
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr "Chaîne inattendue à la fin du fichier morcelé HTML « %s »"
+
+#: makeinfo/node.c:1160
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr "Ancre « %s » et mode « %s » pointe vers le même nom de fichier"
+
+#: makeinfo/node.c:1165
+msgid "@anchor command ignored; references to it will not work"
+msgstr ""
+"Commande @anchor ignorée; les références vers celle-ci ne fonctionneront pas"
+
+#: makeinfo/node.c:1362
+#, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr ""
+"%s réfère à un noeud « %s » inexistant (à mois d'un sectionnement incorrect?)"
+
+#: makeinfo/node.c:1462
+#, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr ""
+"Le champ Next du noeud « %s » n'a pas de pointeur de retour en amont (à moins "
+"d'un sectionnement incorrect?)"
+
+#: makeinfo/node.c:1465
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "Ce noeud (%s) a un noeud « Prev » erroné"
+
+#: makeinfo/node.c:1520
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "Le champ Prev du noeud « %s » n'a pas de pointeur de retour en amont"
+
+#: makeinfo/node.c:1524
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "Ce noeud (%s) a un noeud « Next » erroné"
+
+#: makeinfo/node.c:1536
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr "« %s » n'a pas de champ Up (à moins d'un sectionnement incorrect?)"
+
+#: makeinfo/node.c:1605
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr ""
+"Le noeud « %s » manque d'un item menu pour « %s » en dépit d'être son noeud « "
+"Up » cible"
+
+#: makeinfo/node.c:1637
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "noeud « %s » non référencé"
+
+#: makeinfo/node.c:1727
+#, c-format
+msgid "Removing %s\n"
+msgstr "Retrait de %s\n"
+
+#: makeinfo/node.c:1731
+#, c-format
+msgid "Can't remove file `%s': %s"
+msgstr "Ne peut enlever le fichier « %s »: %s"
+
+#: makeinfo/sectioning.c:122
+#, c-format
+msgid "Appendix %c"
+msgstr "Annexe %c"
+
+#: makeinfo/sectioning.c:467
+#, c-format
+msgid "Internal error (search_sectioning) `%s'!"
+msgstr "Erreur interne (search_sectioning) « %s »!"
+
+#: makeinfo/sectioning.c:563
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "Erreur interne (search_sectioning) « %s »!"
+
+#: makeinfo/sectioning.c:624
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "%c%s est périmé; utiliser plutôt %c%s"
+
+#: makeinfo/sectioning.c:640
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "Le noeud avec %ctop en tant que section existe déjà"
+
+#: makeinfo/sectioning.c:648
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "Le noeud %ctop se trouve ici"
+
+#: makeinfo/sectioning.c:664
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "noeud %ctop utilisé avant %cnode, %s implicitement"
+
+#: makeinfo/xml.c:1669
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "commande @image avec un fichier « %s » illisible: %s"
+
+#: makeinfo/xml.c:2014
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+"@headitem comme dernier item de @multitable produit des documents Docbook "
+"invalides"
+
+#: makeinfo/xml.c:2150
+msgid "of"
+msgstr "de"
+
+#: makeinfo/xml.c:2155
+msgid "on"
+msgstr "sur"
+
+#: makeinfo/xref.c:127
+msgid "First argument to cross-reference may not be empty"
+msgstr "Premier argument de références croisée peut ne pas être vide"
+
+#: makeinfo/xref.c:252
+#, c-format
+msgid "Empty file name for HTML cross reference in `%s'"
+msgstr ""
+
+#: makeinfo/xref.c:387
+msgid "End of file reached while looking for `.' or `,'"
+msgstr ""
+
+#: makeinfo/xref.c:390
+#, fuzzy, c-format
+msgid "`.' or `,' must follow @%s, not `%c'"
+msgstr "« . » ou « , » doit suivre une référence croisée, non pas %c"
+
+#: makeinfo/xref.c:392
+#, fuzzy
+msgid "for cross-references in parentheses, use @pxref"
+msgstr "Aucune référence croisée dans ce noeud."
+
+#: makeinfo/xref.c:435
+msgid "First argument to @inforef may not be empty"
+msgstr "Premier argument de @inforef peut ne pas être vide"
+
+#: util/texindex.c:223
+msgid "display this help and exit"
+msgstr "afficher cet aide-mémoire et quitter"
+
+#: util/texindex.c:225
+msgid "send output to FILE"
+msgstr "envoyer la sortie dans FICHIER"
+
+#: util/texindex.c:227
+msgid "display version information and exit"
+msgstr "afficher la version du logiciel et quitter"
+
+#: util/texindex.c:237
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "Usage: %s [OPTION]... FICHIER...\n"
+
+#: util/texindex.c:238
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr "Générer un index trié pour chaque FICHIER de sortie TeX.\n"
+
+#: util/texindex.c:241
+#, c-format
+msgid "Usually FILE... is specified as `foo.%c%c' for a document `foo.texi'.\n"
+msgstr ""
+"Habituellement FICHIER... est indiqué comme « foo.%c%c » pour un document « "
+"foo.texi ».\n"
+
+#: util/texindex.c:243
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Options:\n"
+
+#: util/texindex.c:743
+#, c-format
+msgid "failure reopening %s"
+msgstr "échec lors de la réouverture de %s"
+
+#: util/texindex.c:758 util/texindex.c:786
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: pas un fichier index en format Texinfo"
+
+#: util/texindex.c:993
+#, c-format
+msgid "No page number in %s"
+msgstr "Aucun numéro de page dans %s"
+
+#: util/texindex.c:1066
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr "l'entrée %s suit une entrée ayant un nom secondaire"
+
+#~ msgid ""
+#~ "\\%-10[search] Search forward for a specified string\n"
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr ""
+#~ "\\%-10[search] Fouiller à reculons pour une chaîne spécifiée\n"
+#~ " et sélectionner le noeud dans lequel se trouve la prochaine "
+#~ "occurrence.\n"
+
+#~ msgid ""
+#~ "\\%-10[goto-node] Move to node specified by name.\n"
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ msgstr ""
+#~ "\\%-10[goto-node] Aller au noeud spécifié par le nom.\n"
+#~ " Vous pouvez aussi bien inclure un nom de fichier, comme "
+#~ "dans (FILENAME)NODENAME.\n"
+
+#, fuzzy
+#~ msgid "\\%-10[next-node] Move to the next node of current section.\n"
+#~ msgstr "\\%-10[next-node] Aller au noeud « next » de ce noeud.\n"
+
+#~ msgid ""
+#~ "\\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+#~ "node] (DIR)'.\n"
+#~ msgstr ""
+#~ "\\%-10[dir-node] Aller au noeud « directory ». Équivalent à « g (DIR) ».\n"
+
+#~ msgid ""
+#~ "\\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] "
+#~ "Top'.\n"
+#~ msgstr ""
+#~ "\\%-10[top-node] Aller au noeud supérieur Top. Équivalent à « g Top ».\n"
+
+#, fuzzy
+#~ msgid "\\%-10[scroll-forward-page-only] Scroll forward within this node.\n"
+#~ msgstr "\\%-10[scroll-forward] Avancer de 1 ligne.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "\\%-10[scroll-backward-page-only] Scroll backward within this node.\n"
+#~ msgstr "\\%-10[scroll-backward] Reculer de 1 ligne.\n"
+
+#~ msgid ""
+#~ "\\%-10[search-backward] Search backward for a specified string\n"
+#~ " and select the node in which the previous occurrence is "
+#~ "found.\n"
+#~ msgstr ""
+#~ "\\%-10[search-backward] Fouiller à reculons pour une chaîne spécifiée\n"
+#~ " et sélectionner le noeud dans lequel se trouve la prochaine "
+#~ "occurrence.\n"
+
+#~ msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+#~ msgstr ""
+#~ "--- Utiliser « \\[history-node] » ou « \\[kill-node] » pour sortir ---\n"
+
+#, fuzzy
+#~ msgid "\\%-10[move-to-prev-xref] Skip to previous hypertext link [*].\n"
+#~ msgstr ""
+#~ "\\%-10[move-to-prev-xref] Sauter au prochain hyperlien à l'intérieur de "
+#~ "ce noeud.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]... [MENU-ITEM...]\n"
+#~ "\n"
+#~ "Read documentation in Info format.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --apropos=STRING look up STRING in all indices of all "
+#~ "manuals.\n"
+#~ " -d, --directory=DIR add DIR to INFOPATH.\n"
+#~ " --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+#~ " -f, --file=FILENAME specify Info file to visit.\n"
+#~ " -h, --help display this help and exit.\n"
+#~ " --index-search=STRING go to node pointed by index entry STRING.\n"
+#~ " -n, --node=NODENAME specify nodes in first visited Info file.\n"
+#~ " -o, --output=FILENAME output selected nodes to FILENAME.\n"
+#~ " -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+#~ " --no-raw-escapes output escapes as literal text.\n"
+#~ " --restore=FILENAME read initial keystrokes from FILENAME.\n"
+#~ " -O, --show-options, --usage go to command-line options node.\n"
+#~ "%s --subnodes recursively output menu items.\n"
+#~ " -w, --where, --location print physical location of Info file.\n"
+#~ " --vi-keys use vi-like and less-like key bindings.\n"
+#~ " --version display version information and exit.\n"
+#~ "\n"
+#~ "The first non-option argument, if present, is the menu entry to start "
+#~ "from;\n"
+#~ "it is searched for in all `dir' files along INFOPATH.\n"
+#~ "If it is not present, info merges all `dir' files and shows the result.\n"
+#~ "Any remaining arguments are treated as the names of menu\n"
+#~ "items relative to the initial node visited.\n"
+#~ "\n"
+#~ "Examples:\n"
+#~ " info show top-level dir menu\n"
+#~ " info emacs start at emacs node from top-level dir\n"
+#~ " info emacs buffers start at buffers node within emacs manual\n"
+#~ " info --show-options emacs start at node with emacs' command line "
+#~ "options\n"
+#~ " info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+#~ " info -f ./foo.info show file ./foo.info, not searching dir\n"
+#~ msgstr ""
+#~ "Usage: %s [OPTION]... [ITEM-MENU...]\n"
+#~ "\n"
+#~ "Lire la documentation en format Info.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --apropos=SUJET Consulter SUJET dans tout indice de tout "
+#~ "manuel.\n"
+#~ " -d, --directory=RÉP Ajouter le RÉPertoire dans INFOPATH.\n"
+#~ " --dribble=FICHIER Accumuler les clés-clavier de l'usager "
+#~ "dans FICHIER.\n"
+#~ " -f, --file=FICHIER Spécifier le fichier Info à visiter.\n"
+#~ " -h, --help Afficher ce menu d'aide et quitter.\n"
+#~ " --index-search=CHAÎNE Aller au noeud pointé par CHAÎNE d'entrée "
+#~ "d'index.\n"
+#~ " -n, --node=NOEUD Spécifier les NOEUDS dans le fichier Info "
+#~ "visité en premier.\n"
+#~ " -o, --output=FICHIER Écrire dans FICHIER les noeuds "
+#~ "sélectionnés.\n"
+#~ " -R, --raw-escapes Ne pas enlever les séquences "
+#~ "d'échappements ANSI des man pages.\n"
+#~ " --no-raw-escapes Fournir les séquences d'échappements comme "
+#~ "du texte.\n"
+#~ " --restore=FICHIER Lire du FICHIER les clés-clavier "
+#~ "initiales.\n"
+#~ " -O, --show-options, --usage Aller au noeud des options de ligne-de-"
+#~ "commande.\n"
+#~ "%s --subnodes Écrire récursivement les items-menu.\n"
+#~ " --vi-keys Utiliser les raccourcis-clavier comme vi "
+#~ "et less.\n"
+#~ " --version Afficher la version du logiciel et "
+#~ "quitter.\n"
+#~ "\n"
+#~ "Le premier argument, n'étant pas une option et si présent, est l'entrée "
+#~ "menu\n"
+#~ "de départ; il est recherché dans tous les fichiers « dir » le long de "
+#~ "INFOPATH.\n"
+#~ "S'il est absent, Info fusionne tous les fichiers « dir » et montre le "
+#~ "résultat.\n"
+#~ "Tous les arguments subséquents sont traités comme des noms d'items de "
+#~ "menu\n"
+#~ "relatifs au noeud initial visité.\n"
+#~ "\n"
+#~ "Exemples:\n"
+#~ " info Montrer le menu dir de niveau-supérieur\n"
+#~ " info emacs Partir du noeud emacs dans dir niveau-"
+#~ "supérieur\n"
+#~ " info emacs buffers Partir du noeud buffers dans le niveau "
+#~ "emacs\n"
+#~ " info --show-options emacs Partir du noeud --show-options dans niveau "
+#~ "emacs\n"
+#~ " info -f ./foo.info Montrer le fichier ./foo.info, sans chercher "
+#~ "dir\n"
+
+#~ msgid ""
+#~ " Picking a menu item causes another node to be selected.\n"
+#~ msgstr ""
+#~ " Choisir un item menu provoque la sélection d'un autre "
+#~ "noeud.\n"
+
+#~ msgid ""
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ msgstr ""
+#~ " Vous pouvez aussi bien inclure un nom de fichier, comme "
+#~ "dans (FILENAME)NODENAME.\n"
+
+#~ msgid " %-10s Search backward for a specified string\n"
+#~ msgstr " %-10s Fouiller à reculons pour une chaîne spécifiée\n"
+
+#~ msgid ""
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr ""
+#~ " et sélectionner le noeud dans lequel se trouve la prochaine "
+#~ "occurrence.\n"
+
+#~ msgid "Following Next node..."
+#~ msgstr "Suivre le noeud « Next »..."
+
+#~ msgid "Selecting first menu item..."
+#~ msgstr "Sélectionner le premier item menu..."
+
+#~ msgid "Selecting Next node..."
+#~ msgstr "Sélectionner le noeud « Next »..."
+
+#~ msgid "Moving Up %d time(s), then Next."
+#~ msgstr "Monter via « Up » %d fois, puis passer au noeud « Next »."
+
+#~ msgid "Moving Prev in this window."
+#~ msgstr "Monter au noeud « Prev » dans cette fenêtre."
+
+#~ msgid "Moving Up in this window."
+#~ msgstr "Monter au noeud « Up » dans cette fenêtre."
+
+#~ msgid "Moving to `Prev's last menu item."
+#~ msgstr "Aller au dernier item menu du noeud « Prev »."
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "Function"
+#~ msgstr "Fonction"
+
+#~ msgid "Macro"
+#~ msgstr "Macro"
+
+#~ msgid "Special Form"
+#~ msgstr "Forme Spéciale"
+
+#~ msgid "Variable"
+#~ msgstr "Variable"
+
+#~ msgid "User Option"
+#~ msgstr "Option de l'Usager"
+
+#~ msgid "Instance Variable"
+#~ msgstr "Variable d'Instance"
+
+#~ msgid "Method"
+#~ msgstr "Méthode"
+
+#~ msgid "Untitled"
+#~ msgstr "Sans titre"
+
+#~ msgid "This is %s, produced by makeinfo version %s from %s.\n"
+#~ msgstr ""
+#~ "Ceci est le fichier Info %s, produit par Makeinfo version %s à partir %"
+#~ "s.\n"
+
+#~ msgid "Next:"
+#~ msgstr "Noeud « Next »:"
+
+# Est-ce vraiment un message à traduire?
+#~ msgid "Previous:"
+#~ msgstr "Noeud « Previous »:"
+
+# Est-ce vraiment un message à traduire?
+#~ msgid "Up:"
+#~ msgstr "Noeud « Up »:"
+
+#~ msgid "Menu"
+#~ msgstr "Menu"
+
+#~ msgid "Cross"
+#~ msgstr "Référence"
+
+# Est-ce vraiment un message à traduire?
+#~ msgid "Prev"
+#~ msgstr "Noeud « Previous »"
+
+# Est-ce vraiment un message à traduire?
+#~ msgid "Up"
+#~ msgstr "Noeud « Up »"
+
+#~ msgid "see "
+#~ msgstr "voir "
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+#~ "\n"
+#~ "Add or remove entries in INFO-FILE from the Info directory DIR-FILE.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --debug report what is being done.\n"
+#~ " --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+#~ " don't insert any new entries.\n"
+#~ " --dir-file=NAME specify file name of Info directory file.\n"
+#~ " This is equivalent to using the DIR-FILE argument.\n"
+#~ " --entry=TEXT insert TEXT as an Info directory entry.\n"
+#~ " TEXT should have the form of an Info menu item line\n"
+#~ " plus zero or more extra lines starting with "
+#~ "whitespace.\n"
+#~ " If you specify more than one entry, they are all "
+#~ "added.\n"
+#~ " If you don't specify any entries, they are "
+#~ "determined\n"
+#~ " from information in the Info file itself.\n"
+#~ " --help display this help and exit.\n"
+#~ " --info-file=FILE specify Info file to install in the directory.\n"
+#~ " This is equivalent to using the INFO-FILE argument.\n"
+#~ " --info-dir=DIR same as --dir-file=DIR/dir.\n"
+#~ " --item=TEXT same as --entry TEXT.\n"
+#~ " An Info directory entry is actually a menu item.\n"
+#~ " --quiet suppress warnings.\n"
+#~ " --remove same as --delete.\n"
+#~ " --remove-exactly only remove if the info file name matches exactly;\n"
+#~ " .info and/or .gz suffixes are not ignored.\n"
+#~ " --section=SEC put this file's entries in section SEC of the "
+#~ "directory.\n"
+#~ " If you specify more than one section, all the "
+#~ "entries\n"
+#~ " are added in each of the sections.\n"
+#~ " If you don't specify any sections, they are "
+#~ "determined\n"
+#~ " from information in the Info file itself.\n"
+#~ " --section-regex=R if an entry is added to a section that does not "
+#~ "exist,\n"
+#~ " look for a section matching basic regular expression "
+#~ "R\n"
+#~ " (and ignoring case) before starting a new section.\n"
+#~ " --test suppress updating of DIR-FILE.\n"
+#~ " --silent suppress warnings.\n"
+#~ " --version display version information and exit.\n"
+#~ msgstr ""
+#~ "Usage: %s [OPTION]... [INFO-FICHIER [DIR-FICHIER]]\n"
+#~ "\n"
+#~ "Installer ou éliminer des entrées dir à partir de INFO-FICHIER dans le "
+#~ "fichier\n"
+#~ "répertoire Info DIR-FICHIER.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --delete Éliminer les entrées existantes pour INFO-FICHIER à "
+#~ "partir\n"
+#~ " de DIR-FICHIER; ne pas insérer aucunes nouvelles "
+#~ "entrées.\n"
+#~ " --dir-file=NOM Spécifier le NOM du répertoire de fichiers Info.\n"
+#~ " Ceci équivaut à utiliser l'argument DIR-FICHIER.\n"
+#~ " --entry=TEXTE Insérer TEXTE comme une entrée du répertoire Info.\n"
+#~ " TEXTE doit avoir la forme d'une ligne d'item menu "
+#~ "Info\n"
+#~ " avec zéro ou plusieurs lignes en extra commençant "
+#~ "avec\n"
+#~ " un blanc. Si plus d'une entrée est spécifiée, elles\n"
+#~ " seront toutes ajoutées. Si aucune n'est indiquée,\n"
+#~ " elles seront déterminées à partir de l'information\n"
+#~ " se trouvant dans le fichier Info lui-même.\n"
+#~ " --help Afficher ce menu d'aide et quitter.\n"
+#~ " --info-file=FICHIER Spécifier le FICHIER Info à installer dans le "
+#~ "répertoire\n"
+#~ " de fichiers Info. Ceci équivaut à utiliser "
+#~ "l'argument\n"
+#~ " INFO-FICHIER.\n"
+#~ " --info-dir=RÉP Identique à l'option --dir-file=RÉP/dir.\n"
+#~ " --item=TEXTE Identique à l'option --entry=TEXTE\n"
+#~ " Une entrée de répertoire Info est en fait un item "
+#~ "menu.\n"
+#~ " --quiet Supprimer les avertissements.\n"
+#~ " --remove Identique à l'option --delete.\n"
+#~ " --section=SEC Mettre cette entrée de fichier dans la section SEC du\n"
+#~ " répertoire. Si plus d'une section est spécifiée, "
+#~ "toutes\n"
+#~ " les entrées sont ajoutées dans chacune des sections.\n"
+#~ " Si aucune section n'est spécifiée, elles seront "
+#~ "déterminées\n"
+#~ " à partir de l'information dans le fichier Info lui-"
+#~ "même.\n"
+#~ " --version Afficher le nom et la version du logiciel et quitter.\n"
+
+#~ msgid "menu item `%s' already exists, for file `%s'"
+#~ msgstr "item menu « %s » déjà existant, pour le fichier « %s »"
+
+#~ msgid "\\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+#~ msgstr ""
+#~ "\\%-10[menu-digit] Choisir d'abord ... le neuvième item dans le menu de "
+#~ "noeuds.\n"
+
+#~ msgid "node `%s' has been referenced %d times"
+#~ msgstr "Le noeud « %s » a été référencé %d fois"
+
+#, fuzzy
+#~ msgid ""
+#~ "Copyright (C) %s Free Software Foundation, Inc.\n"
+#~ "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n"
+#~ "PARTICULAR PURPOSE. You may redistribute copies of GNU %s\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the file named COPYING.\n"
+#~ msgstr ""
+#~ "Copyright © %s Free Software Foundation, Inc.\n"
+#~ "AUCUNE garantie n'est donnée. Vous pouvez redistribuer des copies\n"
+#~ "de ce logiciel selon les termes de la licence GNU General Public "
+#~ "License.\n"
+#~ "Pour plus d'informations, consultez le fichier COPYING.\n"
+
+#~ msgid "@quote-arg only useful for single-argument macros"
+#~ msgstr "macro @quote-arg utile seulement pour des macros à un seul argument"
+
+#~ msgid "Table of Contents"
+#~ msgstr "Table des matières"
+
+#~ msgid "Short Contents"
+#~ msgstr "Sommaire"
+
+#~ msgid "keep temporary files around after processing"
+#~ msgstr "conserver les fichiers temporaires après le traitement"
+
+#~ msgid "do not keep temporary files around after processing (default)"
+#~ msgstr ""
+#~ "ne pas conserver les fichiers temporaires après le traitement (défaut)"
+
+#~ msgid ""
+#~ " file, and select the node referenced by the first entry "
+#~ "found.\n"
+#~ msgstr ""
+#~ " et sélectionner le noeud référencé par la première entrée "
+#~ "trouvée.\n"
+
+#~ msgid ""
+#~ "There is NO warranty. You may redistribute this software\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the files named COPYING.\n"
+#~ msgstr ""
+#~ "AUCUNE garantie n'est donnée. Vous pouvez redistribuer des copies\n"
+#~ "de ce logiciel selon les termes de la licence GNU General Public "
+#~ "License.\n"
+#~ "Pour plus d'informations, consultez le fichier COPYING.\n"
+
+# Est-ce que c'est " " ou « » comme caractères?
+#~ msgid "\"\" is invalid"
+#~ msgstr "\"\" est invalide"
+
+#~ msgid "%s: Specify the Info directory only once.\n"
+#~ msgstr "%s: Spécifier le répertoire Info seulement une fois.\n"
+
+#~ msgid "%s is an invalid ISO code, using %c"
+#~ msgstr "%s n'est pas un code ISO valide, utilisé %c"
+
+#~ msgid "Cannot specify more than one macro expansion output"
+#~ msgstr "Ne peut spécifier plus d'une sortie d'expansion de macro"
+
+#~ msgid "File exists, but is not a directory"
+#~ msgstr "Le fichier existe mais n'est pas un répertoire"
+
+#~ msgid "Node:"
+#~ msgstr "Noeud:"
+
+#~ msgid "%s: TOC should be here, but it was not found"
+#~ msgstr "%s: Table des matières devrait être là, elle ne s'y trouve pas"
+
+#~ msgid "No `%s.png' or `.jpg', and no extension supplied"
+#~ msgstr "Aucun « %s.png » ou « .jpg » et aucune extension fournie"
+
+#~ msgid "%s; for file `%s'.\n"
+#~ msgstr "%s; pour le fichier « %s ».\n"
+
+#~ msgid "`%s' has no Up field"
+#~ msgstr "Le noeud %s a un champ « Up » manquant"
+
+#~ msgid ""
+#~ "Email bug reports to bug-texinfo@gnu.org,\n"
+#~ "general questions and discussion to help-texinfo@gnu.org."
+#~ msgstr ""
+#~ "Rapporter toute anomalie à bug-texinfo@gnu.org et poster\n"
+#~ "vos questions et autre discussion à help-texinfo@gnu.org"
+
+#~ msgid ""
+#~ "Basic Commands in Info Windows\n"
+#~ "******************************\n"
+#~ "\n"
+#~ " \\%-10[quit-help] Quit this help.\n"
+#~ " \\%-10[quit] Quit Info altogether.\n"
+#~ " \\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+#~ "\n"
+#~ "Selecting other nodes:\n"
+#~ "----------------------\n"
+#~ " \\%-10[next-node] Move to the \"next\" node of this node.\n"
+#~ " \\%-10[prev-node] Move to the \"previous\" node of this node.\n"
+#~ " \\%-10[up-node] Move \"up\" from this node.\n"
+#~ " \\%-10[menu-item] Pick menu item specified by name.\n"
+#~ " Picking a menu item causes another node to be selected.\n"
+#~ " \\%-10[xref-item] Follow a cross reference. Reads name of reference.\n"
+#~ " \\%-10[history-node] Move to the last node seen in this window.\n"
+#~ " \\%-10[move-to-next-xref] Skip to next hypertext link within this "
+#~ "node.\n"
+#~ " \\%-10[move-to-prev-xref] Skip to previous hypertext link within this "
+#~ "node.\n"
+#~ " \\%-10[select-reference-this-line] Follow the hypertext link under "
+#~ "cursor.\n"
+#~ " \\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+#~ "node] (DIR)'.\n"
+#~ " \\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] "
+#~ "Top'.\n"
+#~ "\n"
+#~ "Moving within a node:\n"
+#~ "---------------------\n"
+#~ " \\%-10[scroll-forward] Scroll forward a page.\n"
+#~ " \\%-10[scroll-backward] Scroll backward a page.\n"
+#~ " \\%-10[beginning-of-node] Go to the beginning of this node.\n"
+#~ " \\%-10[end-of-node] Go to the end of this node.\n"
+#~ " \\%-10[1scroll-forward] Scroll forward 1 line.\n"
+#~ " \\%-10[1scroll-backward] Scroll backward 1 line.\n"
+#~ "\n"
+#~ "Other commands:\n"
+#~ "---------------\n"
+#~ " \\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+#~ " \\%-10[last-menu-item] Pick last item in node's menu.\n"
+#~ " \\%-10[index-search] Search for a specified string in the index "
+#~ "entries of this Info\n"
+#~ " file, and select the node referenced by the first entry "
+#~ "found.\n"
+#~ " \\%-10[goto-node] Move to node specified by name.\n"
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ " \\%-10[search] Search forward through this Info file for a specified "
+#~ "string,\n"
+#~ " and select the node in which the next occurrence is found.\n"
+#~ " \\%-10[search-backward] Search backward in this Info file for a "
+#~ "specified string,\n"
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr ""
+#~ "Commandes de base dans une fenêtre Info\n"
+#~ "---------------------------------------\n"
+#~ "\n"
+#~ " \\%-10[quit-help] Quitter ce menu d'aide.\n"
+#~ " \\%-10[quit] Quitter le mode Info aussi.\n"
+#~ " \\%-10[get-info-help-node] Invoquer le tutoriel de Info.\n"
+#~ "\n"
+#~ "Sélection d'autres noeuds:\n"
+#~ "-------------------------\n"
+#~ " \\%-10[next-node] Aller au prochain \"next\" noeud de ce "
+#~ "noeud.\n"
+#~ " \\%-10[prev-node] Aller au noeud précédent \"previous\" de ce "
+#~ "noeud.\n"
+#~ " \\%-10[up-node] Aller vers le haut \"up\" depuis ce noeud.\n"
+#~ " \\%-10[menu-item] Prendre l'item menu spécifié par le nom.\n"
+#~ " sélectionner un item menu provoque la "
+#~ "sélection d'un\n"
+#~ " autre noeud\n"
+#~ " \\%-10[xref-item] Suivre une référence croisée. Lire le nom "
+#~ "de référence.\n"
+#~ " \\%-10[history-node] Aller au dernier noeud vu dans cette "
+#~ "fenêtre.\n"
+#~ " \\%-10[move-to-next-xref] Escamoter le prochain lien hypertexte à "
+#~ "l'intérieur de ce noeud.\n"
+#~ " \\%-10[move-to-prev-xref] Escamoter le lien hypertextre précédent à "
+#~ "l'intérieur de ce noeud.\n"
+#~ " \\%-10[select-reference-this-line]\n"
+#~ " Suivre le lien hypertexte pointé par le "
+#~ "curseur.\n"
+#~ " \\%-10[dir-node] Se déplacer au noeud répertoire "
+#~ "`directory'. \n"
+#~ " équivalent à `\\[goto-node] (DIR)'.\n"
+#~ " \\%-10[top-node] Aller au noeud supérieur, équivalent à `"
+#~ "\\[goto-node] Top'.\n"
+#~ "\n"
+#~ "Déplacement à l'intérieur d'un noeud:\n"
+#~ "------------------------------------\n"
+#~ " \\%-10[scroll-forward] Avancer d'une page.\n"
+#~ " \\%-10[scroll-backward] Reculer d'une page.\n"
+#~ " \\%-10[beginning-of-node] Aller au début de ce noeud.\n"
+#~ " \\%-10[end-of-node] Aller à la fin de ce noeud.\n"
+#~ " \\%-10[1scroll-forward] Avancer d'une ligne.\n"
+#~ " \\%-10[1scroll-backward] Reculer d'une ligne.\n"
+#~ "\n"
+#~ "Autres commandes:\n"
+#~ "----------------\n"
+#~ " \\%-10[menu-digit] Prendre les item du 1er...9e dans le menu "
+#~ "des noeuds.\n"
+#~ " \\%-10[last-menu-item] Prendre le dernier item dans le menu des "
+#~ "noeuds.\n"
+#~ " \\%-10[index-search] Rechercher une chaîne spécifique dans "
+#~ "l'index#n du fichier Info et sélectionner le "
+#~ "noeud\n"
+#~ " référencé par la première entrée trouvée.\n"
+#~ " \\%-10[goto-node] Aller au noeud spécifié par le nom.\n"
+#~ " Vous pouvez inclure une nom du fichier "
+#~ "aussi\n"
+#~ " comme dans (NOM_DE_FICHIER)NOM_DE_NOEUD.\n"
+#~ " \\%-10[search] Rechercher par en avant à l'aide du fichier "
+#~ "Info\n"
+#~ " pour une chaîne spécifique et sélectionner "
+#~ "le noeud\n"
+#~ " de la prochaine occurenre trouvée.\n"
+#~ " \\%-10[search-backward] Rechercher par en arrière à l'aide du "
+#~ "fichier Info\n"
+#~ " pour une chaîne spécifique et sélectionner "
+#~ "le noeud\n"
+#~ " de la prochaine occurence trouvée.\n"
+
+#~ msgid "Basic Commands in Info Windows\n"
+#~ msgstr "Commandes de base de fenêtres Info\n"
+
+#~ msgid "Moving within a node:\n"
+#~ msgstr "Déplacement dans un noeud:\n"
+
+#~ msgid "Selecting other nodes:\n"
+#~ msgstr "Sélection des autres noeuds:\n"
+
+#~ msgid "Other commands:\n"
+#~ msgstr "Autres commandes:\n"
+
+#~ msgid "%s' argument to @image command not found"
+#~ msgstr "« %s » arguement de la commande @image n'a pas été retrouvé"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+#~ "\n"
+#~ "Translate Texinfo source documentation to various other formats:\n"
+#~ "Info files suitable for reading online with Emacs or standalone GNU Info\n"
+#~ "(by default); plain text (with --no-headers); or HTML (with --html).\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --commands-in-node-names allow @ commands in node names.\n"
+#~ " -D VAR define a variable, as with @set.\n"
+#~ "--docbook output DocBook rather than Info format.\n"
+#~ " -E, --macro-expand FILE output macro-expanded source to FILE.\n"
+#~ " --error-limit=NUM quit after NUM errors (default %d).\n"
+#~ " --fill-column=NUM break Info lines at NUM characters (default %"
+#~ "d).\n"
+#~ " --footnote-style=STYLE output footnotes according to STYLE:\n"
+#~ " `separate' to place footnotes in their own "
+#~ "node,\n"
+#~ " `end' to place the footnotes at the end of "
+#~ "the\n"
+#~ " node in which they are defined (the "
+#~ "default).\n"
+#~ " --force preserve output even if errors.\n"
+#~ " --help display this help and exit.\n"
+#~ " --html output HTML rather than Info format.\n"
+#~ " -I DIR append DIR to the @include search path.\n"
+#~ " --ifhtml process @ifhtml and @html text even when not\n"
+#~ " generating HTML.\n"
+#~ " --ifinfo process @ifinfo text even when generating "
+#~ "HTML.\n"
+#~ " --iftex process @iftex and @tex text.\n"
+#~ " implies --no-split.\n"
+#~ msgstr ""
+#~ "Usage: %s [OPTION]... TEXINFO-FICHIER...\n"
+#~ "\n"
+#~ "Traduire une documentation Texinfo source en divers autres formats:\n"
+#~ "Fichiers Info adéquats pour lire en ligne avec Emacs ou GNU Info "
+#~ "autonome\n"
+#~ "(par défaut); format plein texte (avec --no-headers); ou HTML (avec --"
+#~ "html).\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --commands-in-node-names Permettre des commandes @ dans les noms de "
+#~ "noeud.\n"
+#~ " -D VAR Définir une variable, comme avec @set.\n"
+#~ " -E, --macro-expand FILE Sortir un source Texinfo avec macros dans "
+#~ "FILE.\n"
+#~ " --error-limit=NUM Quitter après NUM erreurs (par défaut %d).\n"
+#~ " --fill-column=NUM Tronquer les lignes Info à NUM caractères "
+#~ "(défaut %d).\n"
+#~ " --footnote-style=STYLE Sortir les notes de bas de page selon option "
+#~ "STYLE:\n"
+#~ " « separate » pour placer les notes dans leur "
+#~ "noeud;\n"
+#~ " « end » pour les placer à la fin du noeud "
+#~ "dans \n"
+#~ " lequel elles ont été définies (par défaut).\n"
+#~ " --force Conserver la sortie même s'il y a des "
+#~ "erreurs.\n"
+#~ " --help Afficher ce menu d'aide et quitter.\n"
+#~ " --html Écrire en format HTML plutôt qu'en format "
+#~ "Info;\n"
+#~ " -I DIR Ajouter à la fin DIR au chemin de fouille "
+#~ "@include.\n"
+#~ " --ifhtml Traiter le textuel sous @ifhtml et @html même\n"
+#~ " lorsqu'on ne génère pas du HTML.\n"
+#~ " --ifinfo Traiter le textuel sous @ifinfo même "
+#~ "lorsqu'on\n"
+#~ " génère du HTML.\n"
+#~ " --iftex Traiter le textuel sous @iftex et sous @tex.\n"
+#~ " implique l'option --no-split.\n"
+
+#~ msgid ""
+#~ " --no-headers suppress Info node separators and Node: "
+#~ "lines;\n"
+#~ " write to standard output without --output.\n"
+#~ " --no-ifhtml do not process @ifhtml and @html text.\n"
+#~ " --no-ifinfo do not process @ifinfo text.\n"
+#~ " --no-iftex do not process @iftex and @tex text.\n"
+#~ " --no-split suppress splitting of Info or HTML output,\n"
+#~ " generate only one output file.\n"
+#~ " --no-validate suppress node cross-reference validation.\n"
+#~ " --no-warn suppress warnings (but not errors).\n"
+#~ " --number-sections include chapter, section, etc. numbers in "
+#~ "output.\n"
+#~ " -o, --output=FILE output to FILE (directory if split HTML),\n"
+#~ " ignoring any @setfilename.\n"
+#~ " -P DIR prepend DIR to the @include search path.\n"
+#~ " --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %"
+#~ "d).\n"
+#~ " if VAL is `none', do not indent;\n"
+#~ " if VAL is `asis', preserve existing "
+#~ "indentation.\n"
+#~ " --reference-limit=NUM warn about at most NUM references (default %"
+#~ "d).\n"
+#~ " --split-size=NUM split into files at NUM size. (default %d).\n"
+#~ " -U VAR undefine a variable, as with @clear.\n"
+#~ " -v, --verbose explain what is being done.\n"
+#~ " --version display version information and exit.\n"
+#~ " --xml output XML (TexinfoML) rather than Info "
+#~ "format.\n"
+#~ msgstr ""
+#~ " --no-headers Supprimer les séparateurs de noeud Info et "
+#~ "Node:\n"
+#~ " lignes et écrire une sortie standard sans --"
+#~ "output.\n"
+#~ " --no-ifhtml Ne pas traiter le textuel sous @ifhtml et "
+#~ "@html.\n"
+#~ " --no-ifinfo Ne pas traiter le textuel sous @ifinfo.\n"
+#~ " --no-iftex Ne pas traiter le textuel sous @iftex et "
+#~ "@tex.\n"
+#~ " --no-split Supprimer la troncation de fichiers Info "
+#~ "volumineux\n"
+#~ " ou la génération d'un fichier HTML par noeud.\n"
+#~ " --no-validate Supprimer la validation de la table de "
+#~ "références.\n"
+#~ " --no-warn Supprimer les avertissements (mais pas les "
+#~ "erreurs).\n"
+#~ " --number-sections Inclure les numéros de chapitre, section, etc. "
+#~ "en sortie.\n"
+#~ " -o, --output=FICHIER Écrire dans FICHIER, ignorer tout "
+#~ "@setfilename.\n"
+#~ " -P DIR Ajouter au début DIR au chemin de fouille "
+#~ "@include.\n"
+#~ " --paragraph-indent=VAL Indenter les paragraphes de VAL espaces "
+#~ "(défaut %d).\n"
+#~ " si VAL est « none », ne pas indenter;\n"
+#~ " si VAL est « asis », garder l'indentation "
+#~ "existante.\n"
+#~ " --reference-limit=NUM Avertir après plus de NUM références (défaut %"
+#~ "d).\n"
+#~ " --split-size=NUM Morceler en fichiers de taille NUM. (défaut %"
+#~ "d).\n"
+#~ " -U VAR Rendre indéfinie une variable, comme avec "
+#~ "@clear.\n"
+#~ " -v, --verbose En mode bavard, expliquer ce qui a été fait.\n"
+#~ " --version Afficher la version du logiciel et quitter.\n"
+#~ " --xml Produire en XML (TexinfoML) plutôt qu'en "
+#~ "format Info.\n"
diff --git a/po/he.gmo b/po/he.gmo
new file mode 100644
index 0000000..14824c9
--- /dev/null
+++ b/po/he.gmo
Binary files differ
diff --git a/po/he.po b/po/he.po
new file mode 100644
index 0000000..5ee87a3
--- /dev/null
+++ b/po/he.po
@@ -0,0 +1,3482 @@
+# Hebrew messages for GNU Texinfo -*- coding: hebrew-iso-8bit -*-
+# Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+# Eli Zaretskii <eliz@is.elta.co.il>, 2002.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo 4.2\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2008-09-18 20:38+0200\n"
+"PO-Revision-Date: 2002-04-03 12:31+0300\n"
+"Last-Translator: Eli Zaretskii <eliz@gnu.org>\n"
+"Language-Team: Hebrew <eliz@gnu.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: gnulib/lib/error.c:125
+msgid "Unknown system error"
+msgstr ""
+
+#: gnulib/lib/getopt.c:526 gnulib/lib/getopt.c:542
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s úéðëú øåáò éòîùî-ãç åðéà `%s' ïééôàî\n"
+
+#: gnulib/lib/getopt.c:575 gnulib/lib/getopt.c:579
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s úéðëú øåáò èðîåâøà ìá÷î åðéà `--%s' ïééôàî\n"
+
+#: gnulib/lib/getopt.c:588 gnulib/lib/getopt.c:593
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s úéðëú øåáò èðîåâøà ìá÷î åðéà `%c%s' ïééôàî\n"
+
+#: gnulib/lib/getopt.c:636 gnulib/lib/getopt.c:655 gnulib/lib/getopt.c:971
+#: gnulib/lib/getopt.c:990
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s úéðëú øåáò èðîåâøà áééçî `%s' ïééôàî\n"
+
+#: gnulib/lib/getopt.c:693 gnulib/lib/getopt.c:696
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s úéðëú øåáò `--%s' ääåæî-éúìá ïééôàî\n"
+
+#: gnulib/lib/getopt.c:704 gnulib/lib/getopt.c:707
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s úéðëú øåáò `%c%s' ääåæî-éúìá ïééôàî\n"
+
+#: gnulib/lib/getopt.c:759 gnulib/lib/getopt.c:762
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: é÷åç-éúìá ïééôàî -- %c\n"
+
+#: gnulib/lib/getopt.c:768 gnulib/lib/getopt.c:771
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s úéðëú øåáò éåâù ïééôàî -- %c\n"
+
+#: gnulib/lib/getopt.c:823 gnulib/lib/getopt.c:839 gnulib/lib/getopt.c:1043
+#: gnulib/lib/getopt.c:1061
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: èðîåâøà áééçî ïééôàî -- %c\n"
+
+#: gnulib/lib/getopt.c:892 gnulib/lib/getopt.c:908
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s úéðëú øåáò éòîùî-ãç åðéà `-W %s' ïééôàî\n"
+
+#: gnulib/lib/getopt.c:932 gnulib/lib/getopt.c:950
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s úéðëú øåáò èðîåâøà ìá÷î åðéà `-W %s' ïééôàî\n"
+
+#: gnulib/lib/xalloc-die.c:34 gnulib/lib/xsetenv.c:37
+#, fuzzy, c-format
+msgid "memory exhausted"
+msgstr "éìàèøéåä ïåøëæä øîâð"
+
+#: info/echo-area.c:283 info/session.c:966
+msgid "Move forward a character"
+msgstr "äîéã÷ ãçà åú ïîñ ææä"
+
+#: info/echo-area.c:295 info/session.c:993
+msgid "Move backward a character"
+msgstr "äøåçà ãçà åú ïîñ ææä"
+
+#: info/echo-area.c:307
+msgid "Move to the start of this line"
+msgstr "äøåùä úìéçúì ïîñ ææä"
+
+#: info/echo-area.c:312
+msgid "Move to the end of this line"
+msgstr "äøåùä óåñì ïîñ ææä"
+
+#: info/echo-area.c:320 info/session.c:1025
+msgid "Move forward a word"
+msgstr "äîéã÷ úçà äìéî ïîñ ææä"
+
+#: info/echo-area.c:360 info/session.c:1049
+msgid "Move backward a word"
+msgstr "äøåçà úçà äìéî ïîñ ææä"
+
+#: info/echo-area.c:400
+msgid "Delete the character under the cursor"
+msgstr "åéìò ïîñäù åúä ÷çî"
+
+#: info/echo-area.c:430
+msgid "Delete the character behind the cursor"
+msgstr "ïîñä éðôìù åúä ÷çî"
+
+#: info/echo-area.c:451
+msgid "Cancel or quit operation"
+msgstr "äðåøçà äìåòô ÷ñôä åà ìèá"
+
+#: info/echo-area.c:466
+msgid "Accept (or force completion of) this line"
+msgstr "(êøåö ùé íà äúåà íìùä) òåöéáì åæ äøåù ìá÷"
+
+#: info/echo-area.c:471
+msgid "Insert next character verbatim"
+msgstr "éìåìéî ïôåàá àáä åúä óñåä"
+
+#: info/echo-area.c:479
+msgid "Insert this character"
+msgstr "äæ åú óñåä"
+
+#: info/echo-area.c:498
+msgid "Insert a TAB character"
+msgstr "TAB óñåä"
+
+#: info/echo-area.c:505
+msgid "Transpose characters at point"
+msgstr "ïîñä ãéìù íéåú éðù ìù øãñ äðù"
+
+#: info/echo-area.c:556
+msgid "Yank back the contents of the last kill"
+msgstr "äðåøçà ä÷éçî ìù ïëåú øæçä"
+
+#: info/echo-area.c:563
+msgid "Kill ring is empty"
+msgstr "ä÷éø úå÷éçîä úøéâà úòáè"
+
+#: info/echo-area.c:576
+msgid "Yank back a previous kill"
+msgstr "úîãå÷ ä÷éçî ïëåú øæçä"
+
+#: info/echo-area.c:609
+msgid "Kill to the end of the line"
+msgstr "äøåùä óåñ ãò ÷çî"
+
+#: info/echo-area.c:622
+msgid "Kill to the beginning of the line"
+msgstr "äøåù úìéçú ãò ÷çî"
+
+#: info/echo-area.c:634
+msgid "Kill the word following the cursor"
+msgstr "ïîñä éøçàù äìéîä ÷çî"
+
+#: info/echo-area.c:654
+msgid "Kill the word preceding the cursor"
+msgstr "ïîñä éðôìù äìéîä ÷çî"
+
+#: info/echo-area.c:870 info/echo-area.c:926
+msgid "No completions"
+msgstr "äîìùä óà ïéà"
+
+#: info/echo-area.c:872
+msgid "Not complete"
+msgstr "íìù àì"
+
+#: info/echo-area.c:913
+msgid "List possible completions"
+msgstr "úåéøùôà úåîìùä âöä"
+
+#: info/echo-area.c:930
+msgid "Sole completion"
+msgstr "äãéçé äîìùä"
+
+#: info/echo-area.c:939
+msgid "One completion:\n"
+msgstr " :úçà äîìùä\n"
+
+#: info/echo-area.c:940
+#, c-format
+msgid "%d completions:\n"
+msgstr " :úåîìùä %d\n"
+
+#: info/echo-area.c:1087
+msgid "Insert completion"
+msgstr "äîìùä óñåä"
+
+#: info/echo-area.c:1222
+msgid "Building completions..."
+msgstr "...úåîìùä úîéùø áéëøî"
+
+#: info/echo-area.c:1342
+msgid "Scroll the completions window"
+msgstr "úåîìùää ïåìç úà ìåìâ"
+
+#: info/footnotes.c:212
+msgid "Footnotes could not be displayed"
+msgstr "íééìåù úåøòä âéöäì ïúéð àì"
+
+#: info/footnotes.c:238
+msgid "Show the footnotes associated with this node in another window"
+msgstr "åæ ä÷ñéôì íééìåù úåøòä âöä"
+
+#: info/footnotes.h:26
+msgid "---------- Footnotes ----------"
+msgstr "---------- Footnotes ----------"
+
+#: info/indices.c:171
+msgid "Look up a string in the index for this file"
+msgstr "äæ õáå÷ ìù ñ÷ãðéàá úæåøçî ùôç"
+
+#: info/indices.c:198
+msgid "Finding index entries..."
+msgstr "...íéñ÷ãðéàä ìë úà ÷øåñ"
+
+#: info/indices.c:206
+msgid "No indices found."
+msgstr ".ñ÷ãðéà óà àöîð àì"
+
+#: info/indices.c:216
+msgid "Index entry: "
+msgstr "Index entry: "
+
+#: info/indices.c:324
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr "äðåøçà `\\[index-search]' úãå÷ôî úæåøçî íàåúä óñåð ñ÷ãðéà èéøô ùôç"
+
+#: info/indices.c:334
+msgid "No previous index search string."
+msgstr ".ñ÷ãðéàá ùåôéçì úîãå÷ úæåøçî ïéà"
+
+#: info/indices.c:341
+msgid "No index entries."
+msgstr ".ñ÷ãðéà éèéøô åàöîð àì"
+
+#: info/indices.c:374
+#, fuzzy, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr ".\"%s\" úæåøçî íéìéëîä ñ÷ãðéà éèéøô%s ïéà"
+
+#: info/indices.c:375
+msgid "more "
+msgstr " øúåé"
+
+#: info/indices.c:385
+msgid "CAN'T SEE THIS"
+msgstr "!úåàøéäì êéøö åðéàù èñ÷è"
+
+#: info/indices.c:421
+#, fuzzy, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr "(.ãåò àåöîì äñðé `\\[next-index-match]') .\"%s\" èéøô %s-á éúàöî"
+
+#: info/indices.c:549
+#, fuzzy, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "...\"%s\" ìù íéñ÷ãðéàä ìë úà ÷øåñ"
+
+#: info/indices.c:604
+#, fuzzy, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr ".åìù ñ÷ãðéàá \"%s\" ìéëî ïàë íéð÷úåîäî Info õáå÷ óà"
+
+#: info/indices.c:630
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr ""
+"úàöîù äîî èéøôú äðáå úæåøçî íäá ùôç ,íéòåãé Info éöá÷ ìù íéñ÷ãðéàä ìëá èèç"
+
+#: info/indices.c:634
+msgid "Index apropos: "
+msgstr "Index apropos: "
+
+#: info/indices.c:662
+#, fuzzy, c-format
+msgid ""
+"\n"
+"* Menu: Nodes whose indices contain `%s':\n"
+msgstr ""
+"\n"
+"* Menu: (úåîéàúîä úåà÷ñôäå \"%s\" íéìéëîä ñ÷ãðéà éèéøô)\n"
+
+#: info/info.c:275 info/infokey.c:899
+#, c-format
+msgid "Try --help for more information.\n"
+msgstr ".øúåé áø òãéî úâöäì --help äñð\n"
+
+#: info/info.c:294 info/infokey.c:145 install-info/install-info.c:2101
+#: makeinfo/makeinfo.c:802 util/texindex.c:295
+#, c-format
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+
+#: info/info.c:506
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "`%s' úæåøçî íéìéëîä ñ÷ãðéà éèéøô ïéà\n"
+
+#: info/info.c:600
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [MENU-ITEM...]\n"
+"\n"
+"Read documentation in Info format.\n"
+msgstr ""
+
+#: info/info.c:606
+msgid ""
+"Options:\n"
+" -k, --apropos=STRING look up STRING in all indices of all "
+"manuals.\n"
+" -d, --directory=DIR add DIR to INFOPATH.\n"
+" --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+" -f, --file=FILENAME specify Info file to visit."
+msgstr ""
+
+#: info/info.c:613
+msgid ""
+" -h, --help display this help and exit.\n"
+" --index-search=STRING go to node pointed by index entry STRING.\n"
+" -n, --node=NODENAME specify nodes in first visited Info file.\n"
+" -o, --output=FILENAME output selected nodes to FILENAME."
+msgstr ""
+
+#: info/info.c:619
+msgid ""
+" -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+" --no-raw-escapes output escapes as literal text.\n"
+" --restore=FILENAME read initial keystrokes from FILENAME.\n"
+" -O, --show-options, --usage go to command-line options node."
+msgstr ""
+
+#: info/info.c:626
+#, fuzzy
+msgid " -b, --speech-friendly be friendly to speech synthesizers."
+msgstr ""
+" .øåáéã æúðñîì åîéàúäì éãë êñîì äáéúë ïôåà äðù -b, --speech-friendly\n"
+
+#: info/info.c:630
+msgid ""
+" --subnodes recursively output menu items.\n"
+" --vi-keys use vi-like and less-like key bindings.\n"
+" --version display version information and exit.\n"
+" -w, --where, --location print physical location of Info file."
+msgstr ""
+
+#: info/info.c:636
+msgid ""
+"\n"
+"The first non-option argument, if present, is the menu entry to start from;\n"
+"it is searched for in all `dir' files along INFOPATH.\n"
+"If it is not present, info merges all `dir' files and shows the result.\n"
+"Any remaining arguments are treated as the names of menu\n"
+"items relative to the initial node visited."
+msgstr ""
+
+#: info/info.c:643
+msgid ""
+"\n"
+"For a summary of key bindings, type h within Info."
+msgstr ""
+
+#: info/info.c:646
+msgid ""
+"\n"
+"Examples:\n"
+" info show top-level dir menu\n"
+" info info show the general manual for Info readers\n"
+" info info-stnd show the manual specific to this Info program\n"
+" info emacs start at emacs node from top-level dir\n"
+" info emacs buffers start at buffers node within emacs manual\n"
+" info --show-options emacs start at node with emacs' command line options\n"
+" info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+" info -f ./foo.info show file ./foo.info, not searching dir"
+msgstr ""
+
+#: info/info.c:657 info/infokey.c:918 makeinfo/makeinfo.c:475
+#: util/texindex.c:259
+msgid ""
+"\n"
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+" ,bug-texinfo@gnu.org-ì äì÷ú éçååéã çåìùì àð\n"
+" .help-texinfo@gnu.org-ì ïåéãì íéàùåðå úåéììë úåìàùå\n"
+" .http://www.gnu.org/software/texinfo/ :Texinfo ìù úéáä óã"
+
+#: info/info.c:691
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr ".äàöîð àì `%s' ä÷ñéô"
+
+#: info/info.c:692
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr ".äàöîð àì `%s' õáå÷á `%s' ä÷ñéô"
+
+#: info/info.c:693
+msgid "Cannot find a window!"
+msgstr "!ïåìç óà àöîð àì"
+
+#: info/info.c:694
+msgid "Point doesn't appear within this window's node!"
+msgstr "!äæ ïåìçá úâöåîä ä÷ñéôá àöîð åðéà ïîñä"
+
+#: info/info.c:695
+msgid "Cannot delete the last window."
+msgstr ".ãéçé ïåìç ÷åçîì ïúéð àì"
+
+#: info/info.c:696
+msgid "No menu in this node."
+msgstr ".íéèéøôú ïéà åæ ä÷ñéôá"
+
+#: info/info.c:697
+msgid "No footnotes in this node."
+msgstr ".íééìåù úåøòä ïéà åæ ä÷ñéôá"
+
+#: info/info.c:698
+msgid "No cross references in this node."
+msgstr ".íéøåùé÷ ïéà åæ ä÷ñéôá"
+
+#: info/info.c:699
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr ".%sì äééðôä ïéà åæ ä÷ñéôá"
+
+#: info/info.c:700
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr ".äøæò úìá÷ì `?' äñð ;Info-ì úøëåî äðéà `%c' äãå÷ô"
+
+#: info/info.c:701
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr ".Info õéøäì éãë åéã ììëåùî åðéà `%s' âåñî âö"
+
+#: info/info.c:702
+msgid "You are already at the last page of this node."
+msgstr ".åæ ä÷ñéô ìù ïåøçàä ãåîòá øáë ä/úà"
+
+#: info/info.c:703
+msgid "You are already at the first page of this node."
+msgstr ".åæ ä÷ñéô ìù ïåùàøä ãåîòá øáë ä/úà"
+
+#: info/info.c:704
+msgid "Only one window."
+msgstr ".ãçà ïåìç ÷ø íéé÷"
+
+#: info/info.c:705
+msgid "Resulting window would be too small."
+msgstr ".éãî øúåé ïè÷ äéä ïåìçä"
+
+#: info/info.c:706
+msgid "Not enough room for a help window, please delete a window."
+msgstr ".åäùìë ïåìç ÷åçîì àð ;äøæò ïåìç âéöäì íå÷î ÷éôñî ïéà"
+
+#: info/infodoc.c:45
+msgid "Basic Info command keys\n"
+msgstr ""
+
+#: info/infodoc.c:47
+#, fuzzy
+msgid "\\%-10[quit-help] Close this help window.\n"
+msgstr "\\%-10[quit-help] äæ äøæò ïåìç øåâñ\n"
+
+#: info/infodoc.c:48
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] Info úéðëúî éøîâì àö\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr "\\%-10[get-info-help-node] Info ùîúùîì êéøãî âöä\n"
+
+#: info/infodoc.c:51
+#, fuzzy
+msgid "\\%-10[prev-line] Move up one line.\n"
+msgstr " %-10s äøåçà úçà äøåù ïîñ ææä\n"
+
+#: info/infodoc.c:52
+#, fuzzy
+msgid "\\%-10[next-line] Move down one line.\n"
+msgstr " %-10s äîéã÷ úçà äøåù ïîñ ææä\n"
+
+#: info/infodoc.c:53
+#, fuzzy
+msgid "\\%-10[scroll-backward] Scroll backward one screenful.\n"
+msgstr "\\%-10[scroll-backward] äøåçà ãçà óã ìåìâ\n"
+
+#: info/infodoc.c:54
+#, fuzzy
+msgid "\\%-10[scroll-forward] Scroll forward one screenful.\n"
+msgstr "\\%-10[scroll-forward] äîéã÷ ãçà óã ìåìâ\n"
+
+#: info/infodoc.c:55
+#, fuzzy
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr "\\%-10[beginning-of-node] úéçëåð ä÷ñéô úìéçúì ïîñ ææä\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr "\\%-10[end-of-node] úéçëåð ä÷ñéô óåñì ïîñ ææä\n"
+
+#: info/infodoc.c:58
+#, fuzzy
+msgid "\\%-10[move-to-next-xref] Skip to the next hypertext link.\n"
+msgstr "\\%-10[move-to-next-xref] úéçëåð ä÷ñéôá àáä øåùé÷ì ïîñ ææä\n"
+
+#: info/infodoc.c:59
+#, fuzzy
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under the "
+"cursor.\n"
+msgstr "\\%-10[select-reference-this-line] åéìò àöîð ïîñäù øåùé÷ éøçà áå÷ò\n"
+
+#: info/infodoc.c:60
+#, fuzzy
+msgid "\\%-10[history-node] Go back to the last node seen in this window.\n"
+msgstr "\\%-10[history-node] äæ ïåìçá äâöåäù äðåøçàä ä÷ñéôì øåæç\n"
+
+#: info/infodoc.c:62
+#, fuzzy
+msgid "\\%-10[global-prev-node] Go to the previous node in the document.\n"
+msgstr "\\%-10[prev-node] úéçëåð ä÷ñéô éðôìù ä÷ñéôì øåáò\n"
+
+#: info/infodoc.c:63
+#, fuzzy
+msgid "\\%-10[global-next-node] Go to the next node in the document.\n"
+msgstr "\\%-10[next-node] úéçëåð ä÷ñéô éøçà äàáä ä÷ñéôì øåáò\n"
+
+#: info/infodoc.c:64
+#, fuzzy
+msgid "\\%-10[prev-node] Go to the previous node on this level.\n"
+msgstr "\\%-10[prev-node] úéçëåð ä÷ñéô éðôìù ä÷ñéôì øåáò\n"
+
+#: info/infodoc.c:65
+#, fuzzy
+msgid "\\%-10[next-node] Go to the next node on this level.\n"
+msgstr "\\%-10[next-node] úéçëåð ä÷ñéô éøçà äàáä ä÷ñéôì øåáò\n"
+
+#: info/infodoc.c:66
+#, fuzzy
+msgid "\\%-10[up-node] Go up one level.\n"
+msgstr "\\%-10[up-node] úéçëåð ä÷ñéô ìù áà-ú÷ñéôì øåáò\n"
+
+#: info/infodoc.c:67
+#, fuzzy
+msgid "\\%-10[top-node] Go to the top node of this document.\n"
+msgstr "\\%-10[end-of-node] úéçëåð ä÷ñéô óåñì ïîñ ææä\n"
+
+#: info/infodoc.c:68
+#, fuzzy
+msgid "\\%-10[dir-node] Go to the main `directory' node.\n"
+msgstr "\\%-10[end-of-node] úéçëåð ä÷ñéô óåñì ïîñ ææä\n"
+
+#: info/infodoc.c:70
+#, fuzzy
+msgid "1...9 Pick the first...ninth item in this node's menu.\n"
+msgstr " %-10s úéçëåðä ä÷ñéôä èéøôúá éòéùú ãò ïåùàø óéòñ øçá\n"
+
+#: info/infodoc.c:71
+#, fuzzy
+msgid "\\%-10[last-menu-item] Pick the last item in this node's menu.\n"
+msgstr "\\%-10[last-menu-item] úéçëåðä ä÷ñéôä èéøôúá ïåøçà óéòñ øçá\n"
+
+#: info/infodoc.c:72
+#, fuzzy
+msgid "\\%-10[menu-item] Pick a menu item specified by name.\n"
+msgstr " %-10s åîù é\"ôò èéøôúî óéòñ øçá\n"
+
+#: info/infodoc.c:73
+#, fuzzy
+msgid "\\%-10[xref-item] Follow a cross reference specified by name.\n"
+msgstr "\\%-10[xref-item] øåùé÷ä íù àøå÷ ;øåùé÷ øçà áå÷ò\n"
+
+#: info/infodoc.c:74
+#, fuzzy
+msgid "\\%-10[goto-node] Go to a node specified by name.\n"
+msgstr " %-10s äîù é\"ôò ä÷ñéôì øåáò\n"
+
+#: info/infodoc.c:76
+#, fuzzy
+msgid "\\%-10[search] Search forward for a specified string.\n"
+msgstr " %-10s äæ Info õáå÷á êìéàå ïàëî úæåøçî ùôç\n"
+
+#: info/infodoc.c:77
+#, fuzzy
+msgid "\\%-10[search-previous] Search for previous occurrence.\n"
+msgstr "\\%-10[prev-node] úéçëåð ä÷ñéô éðôìù ä÷ñéôì øåáò\n"
+
+#: info/infodoc.c:78
+#, fuzzy
+msgid "\\%-10[search-next] Search for next occurrence.\n"
+msgstr " %-10s øåáòå äæ Info õáå÷ ìù íéñ÷ãðéàá úæåøçî ùôç\n"
+
+#: info/infodoc.c:79
+#, fuzzy
+msgid ""
+"\\%-10[index-search] Search for a specified string in the index, and\n"
+" select the node referenced by the first entry found.\n"
+msgstr ""
+"\\%-10[index-search] øåáòå äæ Info õáå÷ ìù íéñ÷ãðéàá úæåøçî ùôç\n"
+" íàåú àöîðù ïåùàø ñ÷ãðéà èéøô äòéáöî äéìà ä÷ñéôì\n"
+
+#: info/infodoc.c:81
+#, fuzzy
+msgid "\\%-10[abort-key] Cancel the current operation.\n"
+msgstr "úéçëåð äìåòô ìèá"
+
+#: info/infodoc.c:89
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+" Info úåðåìçá úåéñéñá úåãå÷ô\n"
+" ***************************\n"
+
+#: info/infodoc.c:92
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s äæ äøæò ïåìç øåâñ\n"
+
+#: info/infodoc.c:93
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Info úéðëúî éøîâì àö\n"
+
+#: info/infodoc.c:94
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Info ùîúùîì êéøãî âöä\n"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr " %-10s úéçëåð ä÷ñéô éøçà äàáä ä÷ñéôì øåáò\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr " %-10s úéçëåð ä÷ñéô éðôìù ä÷ñéôì øåáò\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s úéçëåð ä÷ñéô ìù áà-ú÷ñéôì øåáò\n"
+
+#: info/infodoc.c:101
+#, fuzzy, c-format
+msgid ""
+" %-10s Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+"\\%-10[menu-item] åîù é\"ôò èéøôúî óéòñ øçá\n"
+" .úøçà ä÷ñéôì øáòîì úîøåâ èéøôúî äøéçá\n"
+
+#: info/infodoc.c:103
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr " %-10s øåùé÷ä íù àøå÷ ;øåùé÷ øçà áå÷ò\n"
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr " %-10s äæ ïåìçá äâöåäù äðåøçàä ä÷ñéôì øåæç\n"
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr " %-10s úéçëåð ä÷ñéôá àáä øåùé÷ì ïîñ ææä\n"
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s åéìò àöîð ïîñäù øåùé÷ éøçà áå÷ò\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr " %-10s `g (DIR)'-ì êøò-äååù ;DIR ä÷ñéôì øåáò\n"
+
+#: info/infodoc.c:108
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr " %-10s `g Top'-ì êøò-äååù ;Top ä÷ñéôì øåáò\n"
+
+#: info/infodoc.c:110
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+" :ä÷ñéô êåúá ïîñ úòåðú\n"
+" ---------------------\n"
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s äîéã÷ ãçà óã ìåìâ\n"
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s äøåçà ãçà óã ìåìâ\n"
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s úéçëåð ä÷ñéô úìéçúì ïîñ ææä\n"
+
+#: info/infodoc.c:115
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s úéçëåð ä÷ñéô óåñì ïîñ ææä\n"
+
+#: info/infodoc.c:116
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s äîéã÷ úçà äøåù ïîñ ææä\n"
+
+#: info/infodoc.c:117
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s äøåçà úçà äøåù ïîñ ææä\n"
+
+#: info/infodoc.c:119
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+" :úåøçà úåãå÷ô\n"
+" -------------\n"
+
+#: info/infodoc.c:121
+#, fuzzy, c-format
+msgid " %-10s Pick first...ninth item in node's menu.\n"
+msgstr " %-10s úéçëåðä ä÷ñéôä èéøôúá éòéùú ãò ïåùàø óéòñ øçá\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s úéçëåðä ä÷ñéôä èéøôúá ïåøçà óéòñ øçá\n"
+
+#: info/infodoc.c:125
+#, fuzzy, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr ""
+"\\%-10[index-search] øåáòå äæ Info õáå÷ ìù íéñ÷ãðéàá úæåøçî ùôç\n"
+" íàåú àöîðù ïåùàø ñ÷ãðéà èéøô äòéáöî äéìà ä÷ñéôì\n"
+
+#: info/infodoc.c:127
+#, fuzzy, c-format
+msgid ""
+" %-10s Move to node specified by name.\n"
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+"\\%-10[goto-node] äîù é\"ôò ä÷ñéôì øåáò\n"
+" .(FILENAME)NODENAME-á åîë ä÷ñéôä íùî ÷ìçë õáå÷ íù ïééöì ïúéð\n"
+
+#: info/infodoc.c:129
+#, fuzzy, c-format
+msgid ""
+" %-10s Search forward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+"\\%-10[search] äæ Info õå÷á êìéàå ïàëî úæåøçî ùôç\n"
+" .úæåøçîä äàöîð äá ä÷ñéôì øåáòå\n"
+
+#: info/infodoc.c:131
+#, fuzzy, c-format
+msgid ""
+" %-10s Search backward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+"\\%-10[search] äæ Info õå÷á êìéàå ïàëî úæåøçî ùôç\n"
+" .úæåøçîä äàöîð äá ä÷ñéôì øåáòå\n"
+
+#: info/infodoc.c:312
+msgid "The current search path is:\n"
+msgstr " :àéä úéçëåð ùåôéç úîéùø\n"
+
+#: info/infodoc.c:316
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+" :Info úåðåìçá úåéøùôà úåãå÷ô\n"
+"\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+" :úåãå÷ôä úøåùá úåéøùôà úåãå÷ô\n"
+"\n"
+
+#: info/infodoc.c:343
+#, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+" :ãáìá %s úåòöîàá ìéòôäì ïúéð úåàáä úåãå÷ôä úà\n"
+"\n"
+
+#: info/infodoc.c:347
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+" :ììë äìòôäì úåðúéð ïðéà úåàáä úåãå÷ôä\n"
+"\n"
+
+#: info/infodoc.c:477
+msgid "Display help message"
+msgstr "äøæò êñî âöä"
+
+#: info/infodoc.c:495
+msgid "Visit Info node `(info)Help'"
+msgstr "Info úëøòîá ùåîéùì êéøãî âöä"
+
+#: info/infodoc.c:633
+msgid "Print documentation for KEY"
+msgstr "íéåñî ù÷î øåáò ãåòéú âöä"
+
+#: info/infodoc.c:645
+#, c-format
+msgid "Describe key: %s"
+msgstr "Describe key: %s"
+
+#: info/infodoc.c:656
+#, c-format
+msgid "ESC %s is undefined."
+msgstr ".øãâåî åðéà \"ESC %s\""
+
+#: info/infodoc.c:672 info/infodoc.c:701
+#, c-format
+msgid "%s is undefined."
+msgstr ".øãâåî åðéà \"%s\""
+
+#: info/infodoc.c:722
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s is defined to %s."
+
+#: info/infodoc.c:1146
+msgid "Show what to type to execute a given command"
+msgstr "úîéåñî äãå÷ô úìòôäì ãéì÷äì äî âöä"
+
+#: info/infodoc.c:1150
+msgid "Where is command: "
+msgstr "Where is command: "
+
+#: info/infodoc.c:1172
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "åäùìë ù÷îì äøåù÷ äðéà `%s' äãå÷ôä"
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr ".`%s' úìòôäì äãéçéä êøãä àåä `%s'"
+
+#: info/infodoc.c:1183
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr ".%s äãå÷ôä úà ìéòôé %s"
+
+#: info/infodoc.c:1188
+#, c-format
+msgid "There is no function named `%s'"
+msgstr ".úîéé÷ äðéà `%s' íùá äéö÷ðåô"
+
+#: info/infodoc.c:96
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+" :úåøçà úåà÷ñéôá äøéçá\n"
+" ---------------------\n"
+
+#: info/infokey.c:170
+msgid "incorrect number of arguments"
+msgstr "éåâù äãå÷ôì íéèðîåâøàä øôñî"
+
+#: info/infokey.c:201
+#, c-format
+msgid "cannot open input file `%s'"
+msgstr "`%s' èì÷ õáå÷ úçéúôá äì÷ú"
+
+#: info/infokey.c:215
+#, c-format
+msgid "cannot create output file `%s'"
+msgstr "`%s' èìô õáå÷ úøéöéá äì÷ú"
+
+#: info/infokey.c:226
+#, c-format
+msgid "error writing to `%s'"
+msgstr "`%s'-ì äáéúëá äì÷ú"
+
+#: info/infokey.c:232
+#, c-format
+msgid "error closing output file `%s'"
+msgstr "`%s' èìô õáå÷ úøéâñá äì÷ú"
+
+#: info/infokey.c:450
+msgid "key sequence too long"
+msgstr "éãî äëåøà íéù÷î úøãñ"
+
+#: info/infokey.c:529
+msgid "missing key sequence"
+msgstr "äøñç íéù÷î úøãñ"
+
+#: info/infokey.c:610
+msgid "NUL character (\\000) not permitted"
+msgstr "øåñà (\\000) ÷éø åúá ùåîéùä"
+
+#: info/infokey.c:641
+#, c-format
+msgid "NUL character (^%c) not permitted"
+msgstr "øåñà (^%c) ÷éø åúá ùåîéùä"
+
+#: info/infokey.c:665
+msgid "missing action name"
+msgstr "äãå÷ô íù øñç"
+
+#: info/infokey.c:681 info/infokey.c:756
+msgid "section too long"
+msgstr "éãî êåøà ÷ìç"
+
+#: info/infokey.c:688
+#, c-format
+msgid "unknown action `%s'"
+msgstr "äòåãé äððéà `%s' äãå÷ô"
+
+#: info/infokey.c:698
+msgid "action name too long"
+msgstr "éãî êåøà äãå÷ô íù"
+
+#: info/infokey.c:712
+#, c-format
+msgid "extra characters following action `%s'"
+msgstr "`%s' äãå÷ôì êùîäá íéøúåéî íéåú"
+
+#: info/infokey.c:723
+msgid "missing variable name"
+msgstr "äðúùîä íù øñç"
+
+#: info/infokey.c:733
+msgid "missing `=' immediately after variable name"
+msgstr "äðúùîä íù éøçà ãéî `=' øñç"
+
+#: info/infokey.c:741
+msgid "variable name too long"
+msgstr "éãî êåøà äðúùîä íù"
+
+#: info/infokey.c:765
+msgid "value too long"
+msgstr "éãî êåøà êøò"
+
+#: info/infokey.c:890
+#, c-format
+msgid "\"%s\", line %u: "
+msgstr "\"%s\" õáå÷á %u äøåùá "
+
+#: info/infokey.c:906
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [INPUT-FILE]\n"
+"\n"
+"Compile infokey source file to infokey file. Reads INPUT-FILE (default\n"
+"$HOME/.infokey) and writes compiled key file to (by default) $HOME/.info.\n"
+"\n"
+"Options:\n"
+" --output FILE output to FILE instead of $HOME/.info\n"
+" --help display this help and exit.\n"
+" --version display version information and exit.\n"
+msgstr ""
+" %s [ïééôàî]... [èì÷-õáå÷] :ùåîéùä ïôåà\n"
+"\n"
+":ìãçîä úøéøá) èì÷-õáå÷ àøå÷ .infokey õáå÷ì íéù÷î úåøãâä ìù øå÷î õáå÷ ìôî÷\n"
+" .(úøçà úðééö àì íà) $HOME/.info-ì ìôîå÷î õáå÷ áúåëå ($HOME/.infokey\n"
+"\n"
+" :íéðééôàî\n"
+" .$HOME/.info-á íå÷îá FILE õáå÷á èìô íåùø --output FILE\n"
+" .úéðëúäî àöå äæ äøæò êñî âöä --help\n"
+" .àöå úéðëúä úñøéâ ìò òãéî âöä --version\n"
+"\n"
+
+#: info/infomap.c:955
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "ïé÷ú infokey õáå÷ úåéäì éãëá éãî ïè÷ -- `%s' õáå÷î íìòúî"
+
+#: info/infomap.c:958
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "ïé÷ú infokey õáå÷ úåéäì éãëá éãî ìåãâ -- `%s' õáå÷î íìòúî"
+
+#: info/infomap.c:971
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "àø÷ð õáå÷ä ìë àì - `%s' infokey õáå÷ úàéø÷á äì÷ú"
+
+#: info/infomap.c:990
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+"åðåëãò êøåöì infokey õøä -- (éåâù íñ÷ øôñî) ïé÷ú åðéà `%s' infokey õáå÷"
+
+#: info/infomap.c:999
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr "åðåëãò êøåöì infokey õøä -- ïëãåòî åðéà `%s' infokey õáå÷"
+
+#: info/infomap.c:1015
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+"åðåëãò êøåöì infokey õøä -- (éåâù ÷ìç êøåà) ïé÷ú åðéà `%s' infokey õáå÷"
+
+#: info/infomap.c:1036
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr "åðåëãò êøåöì infokey õøä -- (éåâù ÷ìç ãå÷) ïé÷ú åðéà `%s' infokey õáå÷"
+
+#: info/infomap.c:1171
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr "äðìòôú àì úåãçà íéù÷î úåøãâä -- infokey õáå÷á íééåâù íéðåúð"
+
+#: info/infomap.c:1221
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr "ó÷åúá àì úåãçà íéðúùî úåøãâä -- infokey õáå÷á íééåâù íéðåúð"
+
+#: info/m-x.c:68
+msgid "Read the name of an Info command and describe it"
+msgstr "äúåà øàúå Info úãå÷ô ìù íù àø÷"
+
+#: info/m-x.c:72
+msgid "Describe command: "
+msgstr "Describe command: "
+
+#: info/m-x.c:95
+msgid "Read a command name in the echo area and execute it"
+msgstr "äúåà òöáå úåãå÷ôä úøåùî äãå÷ô ìù íù àø÷"
+
+#: info/m-x.c:139
+msgid "Cannot execute an `echo-area' command here."
+msgstr ".äæ áöîá `echo-area' úãå÷ô òöáì ïúéð àì"
+
+#: info/m-x.c:153
+#, fuzzy, c-format
+msgid "Undefined command: %s"
+msgstr "`%s' úøëåî-éúìá äàøåä"
+
+#: info/m-x.c:159
+msgid "Set the height of the displayed window"
+msgstr "âöåîä ïåìçä äáåâ úà äðù"
+
+#: info/m-x.c:172
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Set screen height to (%d): "
+
+#: info/makedoc.c:166 info/makedoc.c:174
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+" :íéììåë äæ õáå÷ì åãáåòù øå÷î éöá÷\n"
+"\n"
+
+#: info/makedoc.c:556
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr ".%s õáå÷ ãáòì ïúéð àì\n"
+
+#: info/nodemenu.c:30
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+"\n"
+"* Menu:\n"
+" (õáå÷)ä÷ñéô úåøåù 'ñî ìãåâ áà-õáå÷\n"
+" ----------- --------- ---- -------"
+
+#: info/nodemenu.c:201
+msgid ""
+"Here is the menu of nodes you have recently visited.\n"
+"Select one from this menu, or use `\\[history-node]' in another window.\n"
+msgstr ""
+" .äðåøçàì úø÷éá ïäá úåà÷ñéôä úîéùøî ïëåäù èéøôú ïìäì\n"
+" .øçà ïåìçá `\\[history-node]' ìòôä åà èéøôúäî ä÷ñéô øçá\n"
+
+#: info/nodemenu.c:223
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr "äðåøçàì úø÷éá ïäá úåà÷ñéôä ìë ìù èéøôú íò ïåìç âöä"
+
+#: info/nodemenu.c:303
+msgid "Select a node which has been previously visited in a visible window"
+msgstr "úåðåìçä ãçàá íãå÷ úâöä äúåà ä÷ñéô øçá"
+
+#: info/nodemenu.c:316
+msgid "Select visited node: "
+msgstr "Select visited node: "
+
+#: info/nodemenu.c:336 info/session.c:2578
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "!íìòð (%s) øåùé÷ä ìù ãòéä"
+
+#: info/search.c:166
+#, c-format
+msgid "regexp error: %s"
+msgstr ""
+
+#: info/session.c:164
+#, c-format
+msgid ""
+"Welcome to Info version %s. Type \\[get-help-window] for help, \\[menu-item] "
+"for menu item."
+msgstr ""
+".âöåîä èéøôúäî äøéçáì \\[menu-item] ,àøæò úìá÷ì \\[get-help-window] ù÷ä .%s "
+"àñøéâ Info úéðëúì íéàáä íéëåøá"
+
+#: info/session.c:625
+msgid "Move down to the next line"
+msgstr "äàáä äøåùì ïîñ ææä"
+
+#: info/session.c:661
+msgid "Move up to the previous line"
+msgstr "úîãå÷ä äøåùì ïîñ ææä"
+
+#: info/session.c:931
+msgid "Move to the end of the line"
+msgstr "äøåùä óåñì ïîñ ææä"
+
+#: info/session.c:942
+msgid "Move to the start of the line"
+msgstr "äææ ñîï ìúçéìú äùåøä"
+
+#: info/session.c:1142
+msgid "Next"
+msgstr "Next äãù"
+
+#: info/session.c:1158 info/session.c:1283
+msgid "No more nodes within this document."
+msgstr ".äæ êîñîá úåà÷ñéô øúåé ïéà"
+
+#: info/session.c:1309
+msgid "No `Prev' for this node."
+msgstr ".åæ ä÷ñéôá `Prev' øåùé÷ ïéà"
+
+#: info/session.c:1329
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr ".åæ ä÷ñéô øåáò `Up'-å `Prev' ììåë åðéà äæ êîñî"
+
+#: info/session.c:1391
+msgid "Move forwards or down through node structure"
+msgstr ".úåà÷ñéôä äðáîá øúåé ÷åîò åà äîéã÷ òåð"
+
+#: info/session.c:1407
+msgid "Move backwards or up through node structure"
+msgstr ".úåà÷ñéôä äðáîá äìòî éôìë åà äøåçà òåð"
+
+#: info/session.c:1508
+msgid "Scroll forward in this window"
+msgstr ".äæ ïåìçá äîéã÷ ìåìâ"
+
+#: info/session.c:1516
+msgid "Scroll forward in this window and set default window size"
+msgstr "ïåìç ìãåâ ìù ç\"îøá êøò äðùå äæ ïåìçá äîéã÷ ìåìâ"
+
+#: info/session.c:1524
+msgid "Scroll forward in this window staying within node"
+msgstr "úéçëåðä ä÷ñéôäî úàöì éìáî äæ ïåìçá äîéã÷ ìåìâ"
+
+#: info/session.c:1532
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr ""
+"ïåìç ìãåâ ìù ç\"îøá êøò äðùå úéçëåðä ä÷ñéôäî úàöì éìáî äæ ïåìçá äîéã÷ ìåìâ"
+
+#: info/session.c:1540
+msgid "Scroll backward in this window"
+msgstr "äæ ïåìçá äøåçà ìåìâ"
+
+#: info/session.c:1548
+msgid "Scroll backward in this window and set default window size"
+msgstr "ïåìç ìãåâ ìù ç\"îøá êøò äðùå äæ ïåìçá äøåçà ìåìâ"
+
+#: info/session.c:1557
+msgid "Scroll backward in this window staying within node"
+msgstr "úéçëåðä ä÷ñéôäî úàöì éìáî äæ ïåìçá äøåçà ìåìâ"
+
+#: info/session.c:1565
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr ""
+"ïåìç ìãåâ ìù ç\"îøá êøò äðùå úéçëåðä ä÷ñéôäî úàöì éìáî äæ ïåìçá äøåçà ìåìâ"
+
+#: info/session.c:1573
+msgid "Move to the start of this node"
+msgstr "åæ ä÷ñéô úìéçúì ïîñ ææä"
+
+#: info/session.c:1580
+msgid "Move to the end of this node"
+msgstr "åæ ä÷ñéô óåñì ïîñ ææä"
+
+#: info/session.c:1587
+msgid "Scroll down by lines"
+msgstr "äèî éôìë úåøåù N ìåìâ"
+
+#: info/session.c:1604
+msgid "Scroll up by lines"
+msgstr "äìòî éôìë úåøåù N ìåìâ"
+
+#: info/session.c:1622
+msgid "Scroll down by half screen size"
+msgstr "äèî éôìë äâåöú éöç ìåìâ"
+
+#: info/session.c:1648
+msgid "Scroll up by half screen size"
+msgstr "äìòî éôìë äâåöú éöç ìåìâ"
+
+#: info/session.c:1677
+msgid "Select the next window"
+msgstr "àáä ïåìçá øçá"
+
+#: info/session.c:1716
+msgid "Select the previous window"
+msgstr "íãå÷ä ïåìçá øçá"
+
+#: info/session.c:1767
+msgid "Split the current window"
+msgstr "íééðùì éçëåðä ïåìçä ÷ìç"
+
+#: info/session.c:1848
+msgid "Delete the current window"
+msgstr "éçëåðä ïåìçä úà øñä"
+
+#: info/session.c:1856
+msgid "Cannot delete a permanent window"
+msgstr "òåá÷ ïåìç øéñäì ïúéð àì"
+
+#: info/session.c:1888
+msgid "Delete all other windows"
+msgstr "éçëåðä ãáìî úåðåìçä ìë úà øñä"
+
+#: info/session.c:1934
+msgid "Scroll the other window"
+msgstr "àáä ïåìçá ìåìâ"
+
+#: info/session.c:1955
+msgid "Scroll the other window backward"
+msgstr "àáä ïåìçá äøåçà ìåìâ"
+
+#: info/session.c:1961
+msgid "Grow (or shrink) this window"
+msgstr "äæ ïåìç (ïè÷ä åà) ìãâä"
+
+#: info/session.c:1972
+msgid "Divide the available screen space among the visible windows"
+msgstr "íéâöåîä úåðåìçä ìë ïéá äâåöúä çèù ÷ìç"
+
+#: info/session.c:1979
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "éçëåðä ïåìçá åùìâù úåøåù úâöä áöî äðù"
+
+#: info/session.c:1986
+msgid "Toggle the usage of regular expressions in searches"
+msgstr ""
+
+#: info/session.c:1990
+msgid "Using regular expressions for searches."
+msgstr ""
+
+#: info/session.c:1991
+msgid "Using literal strings for searches."
+msgstr ""
+
+#: info/session.c:2162
+msgid "Select the Next node"
+msgstr "äàáä ä÷ñéôá øåáò"
+
+#: info/session.c:2170
+msgid "Select the Prev node"
+msgstr "úîãå÷ä ä÷ñéôì øåáò"
+
+#: info/session.c:2178
+msgid "Select the Up node"
+msgstr "ìòîù ä÷ñéôì øåáò"
+
+#: info/session.c:2185
+msgid "Select the last node in this file"
+msgstr "äæ êîñîá äðåøçàä ä÷ñéôì øåáò"
+
+#: info/session.c:2212 info/session.c:2245
+msgid "This window has no additional nodes"
+msgstr "äæ ïåìçá úåà÷ñéô øúåé ïéà"
+
+#: info/session.c:2218
+msgid "Select the first node in this file"
+msgstr "äæ êîñîá äðåùàøä ä÷ñéôì øåáò"
+
+#: info/session.c:2252
+msgid "Select the last item in this node's menu"
+msgstr "åæä ä÷ñéôä èéøôúî ïåøçàä óéòñá øçá"
+
+#: info/session.c:2258
+msgid "Select this menu item"
+msgstr "èéøôúäî äæ óéòñá øçá"
+
+#: info/session.c:2291
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr ".íéôéòñ %d ïéà äæ èéøôúá"
+
+#: info/session.c:2485 info/session.c:2486
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Menu item (%s): "
+
+#: info/session.c:2489
+msgid "Menu item: "
+msgstr "Menu item: "
+
+#: info/session.c:2496 info/session.c:2497
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Follow xref (%s): "
+
+#: info/session.c:2500
+msgid "Follow xref: "
+msgstr "Follow xref: "
+
+#: info/session.c:2629
+msgid "Read a menu item and select its node"
+msgstr "äîéàúîä ä÷ñéôì øåáòå èéøôúî óéòñ íù àø÷"
+
+#: info/session.c:2637
+msgid "Read a footnote or cross reference and select its node"
+msgstr "äîéàúîä ä÷ñéôì øåáòå øåùé÷ åà äøòä ìù íù àø÷"
+
+#: info/session.c:2643
+msgid "Move to the start of this node's menu"
+msgstr "åæ ä÷ñéôá èéøôúä úìéçúì ïîñ ææä"
+
+#: info/session.c:2667
+msgid "Visit as many menu items at once as possible"
+msgstr "äæ èéøôúî íéôéòñ ìù øùôàä ìëë áø øôñî âöä"
+
+#: info/session.c:2695
+msgid "Read a node name and select it"
+msgstr "äéìà øåáòå ä÷ñéô ìù íù àø÷"
+
+#: info/session.c:2750 info/session.c:2755
+msgid "Goto node: "
+msgstr "Goto node: "
+
+#: info/session.c:2819
+#, c-format
+msgid "No menu in node `%s'."
+msgstr ".íéèéøôú `%s' ïéà ä÷ñéôá"
+
+#: info/session.c:2865
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr ".`%s' óéòñ ïéà `%s' ä÷ñéô ìù èéøôúá"
+
+#: info/session.c:2895
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr ".`%s' óéòñá äéìà øù÷î `%s'-á èéøôúä øùà ä÷ñéô éúàöî àì"
+
+#: info/session.c:2945
+msgid "Read a list of menus starting from dir and follow them"
+msgstr "íäéøçà áå÷òå dir-î äìéçúîä èéøôú éôéòñ úøãéñ àø÷"
+
+#: info/session.c:2947
+msgid "Follow menus: "
+msgstr "Follow menus: "
+
+#: info/session.c:3140
+msgid "Find the node describing program invocation"
+msgstr "úéðëúä õéøäì ãöéë úøàúîä ä÷ñéôä úà àöî"
+
+#: info/session.c:3142
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "Find Invocation node of [%s]: "
+
+#: info/session.c:3180
+msgid "Read a manpage reference and select it"
+msgstr "åúåà âöäå manpage-ì äééðôä àø÷"
+
+#: info/session.c:3184
+msgid "Get Manpage: "
+msgstr "Get Manpage: "
+
+#: info/session.c:3214
+msgid "Select the node `Top' in this file"
+msgstr "äæ êîñîá (`Top') úéùàøä ä÷ñéôì øåáò"
+
+#: info/session.c:3220
+msgid "Select the node `(dir)'"
+msgstr "`(dir)' ä÷ñéôì øåáò"
+
+#: info/session.c:3237 info/session.c:3239
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Kill node (%s): "
+
+#: info/session.c:3291
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "`%s' ä÷ñéô ÷ìñì úåøùôà ïéà"
+
+#: info/session.c:3301
+msgid "Cannot kill the last node"
+msgstr "äãéçé ä÷ñéô ÷ìñì úåøùôà ïéà"
+
+#: info/session.c:3387
+msgid "Select the most recently selected node"
+msgstr "äâöåäù äðåøçàä ä÷ñéôì øåæç"
+
+#: info/session.c:3393
+msgid "Kill this node"
+msgstr "åæ ä÷ñéô ÷ìñ"
+
+#: info/session.c:3401
+msgid "Read the name of a file and select it"
+msgstr "åúåà âöäå õáå÷ ìù íù àø÷"
+
+#: info/session.c:3405
+msgid "Find file: "
+msgstr "Find file: "
+
+#: info/session.c:3422
+#, c-format
+msgid "Cannot find `%s'."
+msgstr ".àöîð àì `%s' õáå÷"
+
+#: info/session.c:3465 info/session.c:3583
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr ".`%s' èìô õáå÷ úøéöéá äì÷ú"
+
+# Note that this needs to make sense when displayed to the _right_ of
+# the translated "Writing node foo..." and "Printing node foo...",
+# no matter whether the following word is masculine or feminine!
+#: info/session.c:3479 info/session.c:3601 info/session.c:3661
+msgid "Done."
+msgstr "á äçìöä"
+
+# No ellipsis because that would look awkward when the translation of
+# "Done." is appended.
+#: info/session.c:3534
+#, c-format
+msgid "Writing node %s..."
+msgstr "`%s' ä÷ñéô èìô"
+
+#: info/session.c:3610
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr "INFO_PRINT_COMMAND êøã åæ ä÷ñéô ïëåú ñôãä"
+
+#: info/session.c:3645
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr ".`%s'-ì ÷éôà úçéúôá äì÷ú"
+
+# No ellipsis because that would look awkward when the translation of
+# "Done." is appended.
+#: info/session.c:3651
+#, c-format
+msgid "Printing node %s..."
+msgstr "%s ä÷ñéô úñôãä"
+
+#: info/session.c:3900
+msgid "Search continued from the end of the document."
+msgstr ""
+
+#: info/session.c:3905
+#, fuzzy
+msgid "Search continued from the beginning of the document."
+msgstr "äøåù úìéçú ãò ÷çî"
+
+#: info/session.c:3922
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "... %s õáå÷-úú ÷øåñ"
+
+#: info/session.c:3979
+msgid "Read a string and search for it case-sensitively"
+msgstr "úåéùéøá úåáùçúä êåú äúåà ùôçå úæåøçî àø÷"
+
+#: info/session.c:3986
+msgid "Read a string and search for it"
+msgstr "äúåà ùôçå úæåøçî àø÷"
+
+#: info/session.c:3994
+msgid "Read a string and search backward for it"
+msgstr "äøåçà äúåà ùôçå úæåøçî àø÷"
+
+#: info/session.c:4030 info/session.c:4036
+#, fuzzy, c-format
+msgid "%s%s%s [%s]: "
+msgstr "%s%sfor string [%s]: "
+
+#: info/session.c:4031 info/session.c:4037
+msgid "Regexp search"
+msgstr ""
+
+#: info/session.c:4032 info/session.c:4038
+#, fuzzy
+msgid " case-sensitively"
+msgstr " case-sensitively "
+
+# The following 4 are untranslated because they are used with the
+# format string above in a prompt, and we don't translate prompts.
+#: info/session.c:4033 info/session.c:4039
+#, fuzzy
+msgid " backward"
+msgstr "Search backward"
+
+#: info/session.c:4037
+msgid "Search"
+msgstr "Search"
+
+#: info/session.c:4079
+msgid "Search failed."
+msgstr ".äàöîð àì úæåøçîä"
+
+#: info/session.c:4097
+msgid "Repeat last search in the same direction"
+msgstr "ïååéë åúåàá ïåøçà ùåôéç ìò øåæç"
+
+#: info/session.c:4100 info/session.c:4110
+msgid "No previous search string"
+msgstr "ïåøçà ùåôéçî úæåøçî ïéà"
+
+#: info/session.c:4107
+msgid "Repeat last search in the reverse direction"
+msgstr "êåôä ïååéëá ïåøçà ùåôéç ìò øåæç"
+
+#: info/session.c:4126 info/session.c:4132
+msgid "Search interactively for a string as you type it"
+msgstr "äúåà ä/ãéì÷î ä/úàù éãë êåú úæåøçî ùôç"
+
+#: info/session.c:4212
+#, fuzzy
+msgid "Regexp I-search backward: "
+msgstr "I-search backward: "
+
+#: info/session.c:4213
+msgid "I-search backward: "
+msgstr "I-search backward: "
+
+#: info/session.c:4215
+#, fuzzy
+msgid "Regexp I-search: "
+msgstr "I-search: "
+
+#: info/session.c:4216
+msgid "I-search: "
+msgstr "I-search: "
+
+# Untranslated because is used with the I-search: prompt.
+#: info/session.c:4241 info/session.c:4243
+msgid "Failing "
+msgstr "Failing "
+
+#: info/session.c:4734
+msgid "Move to the previous cross reference"
+msgstr "íãå÷ä øåùé÷ì ïîñ ææä"
+
+#: info/session.c:4752
+msgid "Move to the next cross reference"
+msgstr "àáä øåùé÷ì ïîñ ææä"
+
+#: info/session.c:4774
+msgid "Select reference or menu item appearing on this line"
+msgstr "úéçëåðä äøåùá òéôåîä èéøôúî óéòñ åà øåùé÷ øçà áå÷ò"
+
+#: info/session.c:4797
+msgid "Cancel current operation"
+msgstr "úéçëåð äìåòô ìèá"
+
+#: info/session.c:4804
+msgid "Quit"
+msgstr "ìèåá"
+
+#: info/session.c:4813
+msgid "Move the cursor to a specific line of the window"
+msgstr "äæ ïåìçá úîéåñî äøåùì ïîñ ææä"
+
+#: info/session.c:4845
+msgid "Redraw the display"
+msgstr "äâåöú ùãç"
+
+#: info/session.c:4882
+msgid "Quit using Info"
+msgstr "Info úéðëåúî àö"
+
+#: info/session.c:4895
+msgid "Run command bound to this key's lowercase variant"
+msgstr "äæ ù÷î ìù úåðè÷ úåéúåà úñøéâì äøåù÷ä äãå÷ô ìòôä"
+
+#: info/session.c:4906
+#, c-format
+msgid "Unknown command (%s)."
+msgstr ".(%s) úøëåî-éúìá äãå÷ô"
+
+#: info/session.c:4909
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "\"%s\" äéåâù äãå÷ô"
+
+#: info/session.c:4910
+#, fuzzy, c-format
+msgid "`%s' is invalid"
+msgstr "\"%s\" äéåâù äãå÷ô"
+
+#: info/session.c:5125
+msgid "Add this digit to the current numeric argument"
+msgstr "éçëåð éøîåð èðîåâøàì åæ äøôñ óñåä"
+
+#: info/session.c:5134
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "4-á íéé÷ êøò ìåôë åà ,éøîåð èðîåâøà ìù äãì÷ä ìçúä"
+
+#: info/session.c:5149
+msgid "Internally used by \\[universal-argument]"
+msgstr "åæ äãå÷ôá ùîúùî \\[universal-argument]"
+
+#: info/tilde.c:336
+#, c-format
+msgid "readline: Out of virtual memory!\n"
+msgstr "!éåðô ïåøëæ øúåé ïéà :readline\n"
+
+#: info/variables.c:37
+msgid "When \"On\", footnotes appear and disappear automatically"
+msgstr "úéèîåèåà úåîìòðå úåòéôåî íééìåù úåøòä ,\"On\" áöîá íà"
+
+#: info/variables.c:41
+msgid "When \"On\", creating or deleting a window resizes other windows"
+msgstr "íéøçà úåðåìç éãîéî äðùî ïåìç ìù ÷åìéñ åà äøéöé ,\"On\" áöîá íà"
+
+#: info/variables.c:45
+msgid "When \"On\", flash the screen instead of ringing the bell"
+msgstr "ìéìö úòîùä íå÷îá êñîä éòáöá ÷æáä ,\"On\" áöîá íà"
+
+#: info/variables.c:49
+msgid "When \"On\", errors cause the bell to ring"
+msgstr "äòøúà ìéìö úòîùäì úîøåâ äàéâù ìë ,\"On\" áöîá íà"
+
+#: info/variables.c:53
+msgid "When \"On\", Info garbage collects files which had to be uncompressed"
+msgstr ""
+"äôùà óåñéà êéìäú é\"ò íéñåçã íéöá÷ì äö÷åäù ïåøëæ øæçîî Info ,\"On\" áöîá íà"
+
+#: info/variables.c:56
+msgid "When \"On\", the portion of the matched search string is highlighted"
+msgstr "ùåôéç úæåøçîì íéàúäù ñ÷ãðéà éèéøô ìù ÷ìçä ùâãåé ,\"On\" áöîá íà"
+
+#: info/variables.c:60
+msgid "Controls what happens when scrolling is requested at the end of a node"
+msgstr "ä÷ñéô óåñá äìéìâä úåâäðúä ìò èìåù"
+
+#: info/variables.c:65
+msgid "Same as scroll-behaviour"
+msgstr ""
+
+#: info/variables.c:69
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr "ïåìçä úåìåáâî àöåé ïîñäùë äâåöú ìåìâì úåøåù øôñî"
+
+#: info/variables.c:73
+msgid "Controls whether scroll-behavior affects cursor movement commands"
+msgstr ""
+
+#: info/variables.c:77
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr "úåéáéñ 8 éìòá ISO éåú âéöîå èìå÷ Info ,\"On\" áöîá íà"
+
+#: info/variables.c:81
+#, fuzzy
+msgid ""
+"What to do when a scrolling command is issued at the end of the last node"
+msgstr "ä÷ñéô óåñá äìéìâä úåâäðúä ìò èìåù"
+
+#: info/variables.c:88
+msgid "Explain the use of a variable"
+msgstr "íéðúùî ìù ãé÷ôú øàú"
+
+#: info/variables.c:94
+msgid "Describe variable: "
+msgstr "Describe variable: "
+
+#: info/variables.c:113
+msgid "Set the value of an Info variable"
+msgstr "Info äðúùî ìù êøò äðù"
+
+#: info/variables.c:119
+msgid "Set variable: "
+msgstr "Set variable: "
+
+#: info/variables.c:137
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "Set %s to value (%d): "
+
+#: info/variables.c:178
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "Set %s to value (%s): "
+
+#: info/window.c:1026
+msgid "--*** Tags out of Date ***"
+msgstr "--*** úðëãåòî äðéà Tags úìáè ***-- "
+
+#: info/window.c:1037
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), lines ----, "
+
+#: info/window.c:1044
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d lines --%s--"
+
+#: info/window.c:1048
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d lines --%s--"
+
+#: info/window.c:1055
+#, c-format
+msgid " Subfile: %s"
+msgstr " Subfile: %s"
+
+#: install-info/install-info.c:221
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: warning: "
+
+#: install-info/install-info.c:270
+#, c-format
+msgid " for %s"
+msgstr " for %s"
+
+#: install-info/install-info.c:500
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr ".íéðééôàî ìù äàìî äîéùø úìá÷ì `%s --help' äñð\n"
+
+#: install-info/install-info.c:508
+#, fuzzy, c-format
+msgid "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+msgstr "%s [íéðééôàî]... TEXINFO-õáå÷... :ùåîéùä ïôåà\n"
+
+#: install-info/install-info.c:510
+msgid "Add or remove entries in INFO-FILE from the Info directory DIR-FILE."
+msgstr ""
+
+#: install-info/install-info.c:513
+msgid ""
+"Options:\n"
+" --debug report what is being done.\n"
+" --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+" don't insert any new entries.\n"
+" --description=TEXT the description of the entry is TEXT; used with\n"
+" the --name option to become synonymous with the\n"
+" --entry option.\n"
+" --dir-file=NAME specify file name of Info directory file;\n"
+" equivalent to using the DIR-FILE argument.\n"
+" --dry-run same as --test."
+msgstr ""
+
+#: install-info/install-info.c:525
+msgid ""
+" --entry=TEXT insert TEXT as an Info directory entry.\n"
+" TEXT is written as an Info menu item line followed\n"
+" by zero or more extra lines starting with "
+"whitespace.\n"
+" If you specify more than one entry, all are added.\n"
+" If you don't specify any entries, they are determined\n"
+" from information in the Info file itself.\n"
+" When removing, TEXT specifies the entry to remove.\n"
+" TEXT is only removed as a last resort, if the\n"
+" entry as determined from the Info file is not "
+"present,\n"
+" and the basename of the Info file isn't found either."
+msgstr ""
+
+#: install-info/install-info.c:537
+msgid ""
+" --help display this help and exit.\n"
+" --info-dir=DIR same as --dir-file=DIR/dir.\n"
+" --info-file=FILE specify Info file to install in the directory;\n"
+" equivalent to using the INFO-FILE argument.\n"
+" --item=TEXT same as --entry=TEXT.\n"
+" --keep-old do not replace entries, or remove empty sections.\n"
+" --menuentry=TEXT same as --name=TEXT.\n"
+" --name=TEXT the name of the entry is TEXT; used with --description\n"
+" to become synonymous with the --entry option.\n"
+" --no-indent do not format new entries in the DIR file.\n"
+" --quiet suppress warnings."
+msgstr ""
+
+#: install-info/install-info.c:550
+msgid ""
+" --regex=R put this file's entries in all sections that match the\n"
+" regular expression R (ignoring case).\n"
+" --remove same as --delete.\n"
+" --remove-exactly only remove if the info file name matches exactly;\n"
+" suffixes such as .info and .gz are not ignored.\n"
+" --section=SEC put entries in section SEC of the directory.\n"
+" If you specify more than one section, all the entries\n"
+" are added in each of the sections.\n"
+" If you don't specify any sections, they are "
+"determined\n"
+" from information in the Info file itself.\n"
+" --section R SEC equivalent to --regex=R --section=SEC --add-once."
+msgstr ""
+
+#: install-info/install-info.c:563
+msgid ""
+" --silent suppress warnings.\n"
+" --test suppress updating of DIR-FILE.\n"
+" --version display version information and exit."
+msgstr ""
+
+#: install-info/install-info.c:570
+#, fuzzy
+msgid ""
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+" ,bug-texinfo@gnu.org-ì äì÷ú éçååéã çåìùì àð\n"
+" .help-texinfo@gnu.org-ì ïåéãì íéàùåðå úåéììë úåìàùå\n"
+" .http://www.gnu.org/software/texinfo/ :Texinfo ìù úéáä óã"
+
+#: install-info/install-info.c:597
+#, fuzzy, c-format
+msgid ""
+"This is the file .../info/dir, which contains the\n"
+"topmost node of the Info hierarchy, called (dir)Top.\n"
+"The first time you invoke Info you start off looking at this node.\n"
+"\n"
+"%s\tThis is the top of the INFO tree\n"
+"\n"
+" This (the Directory node) gives a menu of major topics.\n"
+" Typing \"q\" exits, \"?\" lists all Info commands, \"d\" returns here,\n"
+" \"h\" gives a primer for first-timers,\n"
+" \"mEmacs<Return>\" visits the Emacs manual, etc.\n"
+"\n"
+" In Emacs, you can click mouse button 2 on a menu item or cross reference\n"
+" to select it.\n"
+"\n"
+"%s\n"
+msgstr ""
+"This is the file .../info/dir, which contains the\n"
+"topmost node of the Info hierarchy, called (dir)Top.\n"
+"The first time you invoke Info you start off looking at this node.\n"
+"\n"
+"%s\tThis is the top of the INFO tree\n"
+"\n"
+" This (the Directory node) gives a menu of major topics.\n"
+" Typing \"q\" exits, \"?\" lists all Info commands, \"d\" returns here,\n"
+" \"h\" gives a primer for first-timers,\n"
+" \"mEmacs<Return>\" visits the Emacs manual, etc.\n"
+"\n"
+" In Emacs, you can click mouse button 2 on a menu item or cross reference\n"
+" to select it.\n"
+"\n"
+"* Menu:\n"
+
+#: install-info/install-info.c:622
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr "%s õáå÷ ìù (%s) äàéø÷á ïäå (%s) äøéöéá ïä äì÷ú\n"
+
+#: install-info/install-info.c:715
+#, c-format
+msgid "%s: empty file"
+msgstr "÷éø åðéä %s õáå÷"
+
+#: install-info/install-info.c:1046 install-info/install-info.c:1086
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "íàåú END-INFO-DIR-ENTRY àìì START-INFO-DIR-ENTRY"
+
+#: install-info/install-info.c:1081
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "íàåú START-INFO-DIR-ENTRY àìì END-INFO-DIR-ENTRY"
+
+#: install-info/install-info.c:1946 install-info/install-info.c:1956
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr ""
+
+#: install-info/install-info.c:2036
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr ".ãáìá úçà íòô %s-ì Info õáå÷ ïééöì ïúéð\n"
+
+#: install-info/install-info.c:2069
+#, c-format
+msgid "Extra regular expression specified, ignoring `%s'"
+msgstr ""
+
+#: install-info/install-info.c:2081
+#, c-format
+msgid "Error in regular expression `%s': %s"
+msgstr ""
+
+#: install-info/install-info.c:2139
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "`%s' øúåéî èðîåâøà"
+
+#: install-info/install-info.c:2143
+msgid "No input file specified; try --help for more information."
+msgstr ".äøæò úìá÷ì --help äñð ;èì÷ õáå÷ ïåéö ïéà"
+
+#: install-info/install-info.c:2146
+msgid "No dir file specified; try --help for more information."
+msgstr ".äøæò úìá÷ì --help äñð ;dir õáå÷ ïåéö ïéà"
+
+#: install-info/install-info.c:2288
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "`%s'-á éùàø èéøôú éôéòñ ïéà"
+
+#: install-info/install-info.c:2536
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "÷çîð àì íåìë ;`%s' øåáò èéøôú éôéòñ åàöîð àì"
+
+#: lib/xexit.c:54
+msgid "ferror on stdout\n"
+msgstr ""
+
+#: lib/xexit.c:59
+msgid "fflush error on stdout\n"
+msgstr ""
+
+#: makeinfo/cmds.c:582 makeinfo/cmds.c:604
+#, fuzzy, c-format
+msgid "arguments to @%s ignored"
+msgstr "%c%s-ì éåâù èðîåâøà"
+
+#: makeinfo/cmds.c:779
+msgid "January"
+msgstr "øàåðé"
+
+#: makeinfo/cmds.c:779
+msgid "February"
+msgstr "øàåøáô"
+
+#: makeinfo/cmds.c:779
+msgid "March"
+msgstr "õøî"
+
+#: makeinfo/cmds.c:779
+msgid "April"
+msgstr "ìéøôà"
+
+#: makeinfo/cmds.c:779
+msgid "May"
+msgstr "éàî"
+
+#: makeinfo/cmds.c:780
+msgid "June"
+msgstr "éðåé"
+
+#: makeinfo/cmds.c:780
+msgid "July"
+msgstr "éìåé"
+
+#: makeinfo/cmds.c:780
+msgid "August"
+msgstr "èñåâåà"
+
+#: makeinfo/cmds.c:780
+msgid "September"
+msgstr "øáîèôñ"
+
+#: makeinfo/cmds.c:780
+msgid "October"
+msgstr "øáåè÷åà"
+
+#: makeinfo/cmds.c:781
+msgid "November"
+msgstr "øáîáåð"
+
+#: makeinfo/cmds.c:781
+msgid "December"
+msgstr "øáîöã"
+
+#: makeinfo/cmds.c:1131
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "@var êåúá %c øéáñ-éúìá åú"
+
+#: makeinfo/cmds.c:1174
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "è÷ôà ìë @sc-ì ïéà ïëì ,úåìåãâ úåéúåàá åìåë @sc ìù èðîåâøà"
+
+#: makeinfo/cmds.c:1229
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "%c àöîð êà ,`{' ì\"ö"
+
+#: makeinfo/cmds.c:1269
+msgid "end of file inside verb block"
+msgstr "verb êåúá õáå÷ óåñ"
+
+#: makeinfo/cmds.c:1277
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "%c àöîð êà ,`}' ì\"ö"
+
+#: makeinfo/cmds.c:1308
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+
+#: makeinfo/cmds.c:1504
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "ïùåéî åðéä %c%s"
+
+#: makeinfo/cmds.c:1612
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "`%s' àì ,éáåéç øôñî àåäù èðîåâøà ùøåã @sp"
+
+#: makeinfo/cmds.c:2023 makeinfo/footnote.c:81
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "%c%s-ì éåâù èðîåâøà"
+
+#: makeinfo/cmds.c:2033 makeinfo/makeinfo.c:4317
+msgid "asis"
+msgstr "àåäù åîë"
+
+#: makeinfo/cmds.c:2035 makeinfo/cmds.c:2065 makeinfo/makeinfo.c:4319
+msgid "none"
+msgstr "ïéà"
+
+#: makeinfo/cmds.c:2049
+#, fuzzy, c-format
+msgid "Bad argument to @%s"
+msgstr "%c%s-ì éåâù èðîåâøà"
+
+#: makeinfo/cmds.c:2063
+msgid "insert"
+msgstr ""
+
+#: makeinfo/cmds.c:2079
+#, fuzzy, c-format
+msgid "Bad argument to @%s: %s"
+msgstr "%c%s-ì éåâù èðîåâøà"
+
+#: makeinfo/cmds.c:2162
+#, c-format
+msgid "Expected @%s on or off, not `%s'"
+msgstr ""
+
+#: makeinfo/cmds.c:2182
+#, c-format
+msgid "Only @%s 10 or 11 is supported, not `%s'"
+msgstr ""
+
+#: makeinfo/defun.c:83
+msgid "Missing `}' in @def arg"
+msgstr "@def ìù èðîåâøàá `}' øñç"
+
+#: makeinfo/defun.c:711
+#, fuzzy, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr "`%s' êåúá ÷øå êà ùåîéùá øúåî `%sx'"
+
+#: makeinfo/files.c:434
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s úéðëúá %s-å %s øåáò äàéâù ìò çååéã getwd/getcwd\n"
+
+#: makeinfo/files.c:637
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr ""
+
+#: makeinfo/files.c:645
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr ""
+
+#: makeinfo/files.c:693
+msgid "Output buffer not empty."
+msgstr ""
+
+#: makeinfo/float.c:181
+#, c-format
+msgid "Requested float type `%s' not previously used"
+msgstr ""
+
+#: makeinfo/float.c:376 makeinfo/float.c:382 makeinfo/index.c:959
+#: makeinfo/index.c:965
+msgid "See "
+msgstr "See "
+
+#: makeinfo/footnote.c:149
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "`{...}' êåúá úåéäì áééçù ,%c%s ìù èðîåâøà úåéäì íéàúî åðéà `%s'"
+
+#: makeinfo/footnote.c:164
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "`}'-á úîééúñî äðéà `%s' íééìåù úøòä"
+
+#: makeinfo/footnote.c:197
+msgid "Footnote defined without parent node"
+msgstr "ä÷ñéôì õåçî íééìåù úøòä"
+
+#: makeinfo/footnote.c:209
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "íééìåù úåøòä êåúá íééìåù úåøòäá äëéîú ïéà"
+
+#: makeinfo/footnote.c:301 makeinfo/index.c:187
+msgid "Footnotes"
+msgstr "íééìåù úåøòä"
+
+#: makeinfo/html.c:91
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr ""
+
+#: makeinfo/html.c:180
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr ""
+
+#: makeinfo/html.c:426
+msgid "[unexpected] no html tag to pop"
+msgstr ""
+
+#: makeinfo/html.c:800
+#, fuzzy, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "`%s' :éåâù (node) ä÷ñéô íù"
+
+#: makeinfo/index.c:167
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "`%s' øëåî-éúìá ñ÷ãðéà"
+
+#: makeinfo/index.c:232
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr "`%s' ñ÷ãðéà èéøôá `:' ììâá ìùëéé Info"
+
+#: makeinfo/index.c:410
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "øãâåî øáë `%s' ñ÷ãðéà"
+
+#: makeinfo/index.c:453
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "øëåî-éúìá ñ÷ãðéà åðéä @synindex-á `%s' åà `%s'"
+
+#: makeinfo/index.c:676
+msgid "(line )"
+msgstr ""
+
+#: makeinfo/index.c:684
+#, c-format
+msgid "(line %*d)"
+msgstr ""
+
+#: makeinfo/index.c:765
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "@printindex-á `%s' øëåî-éúìá ñ÷ãðéà"
+
+#: makeinfo/index.c:834
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "ä÷ñéô ìëì õåçî øãâåî `%s' ñ÷ãðéà èéøô"
+
+#: makeinfo/index.c:837 makeinfo/index.c:873
+msgid "(outside of any node)"
+msgstr "(ä÷ñéô ìëì õåçî)"
+
+#: makeinfo/insertion.c:161
+msgid "@item not allowed in argument to @itemize"
+msgstr ""
+
+#: makeinfo/insertion.c:242
+msgid "Broken-Type in insertion_type_pname"
+msgstr "insertion_type_pname-á éåâù type"
+
+#: makeinfo/insertion.c:338
+msgid "Enumeration stack overflow"
+msgstr "@enumerate-á úéðñçî úùéìâ"
+
+#: makeinfo/insertion.c:370
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "%c-á ùãçî ìéçúî ,åìöåð úåéúåàä ìë"
+
+#: makeinfo/insertion.c:639
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s úàøåäá %citem øåáò áåöéò úèéù :èðîåâøà ùøãð"
+
+#: makeinfo/insertion.c:727
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr ""
+
+#: makeinfo/insertion.c:981
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "`%s' àöîð íìåà ,`%s' ì\"ö `@end' éøçà"
+
+#: makeinfo/insertion.c:1349
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "íàåú `%cend %s' øñç"
+
+#: makeinfo/insertion.c:1618
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "äøôñ åà úåà ùøåã %s"
+
+#: makeinfo/insertion.c:1718
+msgid "end of file inside verbatim block"
+msgstr "verbatim êåúá õáå÷ óåñ"
+
+#: makeinfo/insertion.c:1942
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "`@%s' êåúá @%s-ì úåòîùî ïéà"
+
+#: makeinfo/insertion.c:1978
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "`Top' ú÷ñéô øöåé ,äðåùàøä ä÷ñéôä éðôì àöîð @menu"
+
+#: makeinfo/insertion.c:1979
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr "?@ifinfo íå÷îá @ifnottex-á úô÷åî úåéäì äúéä äëéøö @top ú÷ñéô éë ïëúééä"
+
+#: makeinfo/insertion.c:1991
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "`Top' ú÷ñéô øöåé ,äðåùàøä ä÷ñéôä éðôì àöîð @detailmenu"
+
+#: makeinfo/insertion.c:2047
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr ""
+
+#: makeinfo/insertion.c:2061
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "`@%s' êåúá @%s-ì úåòîùî ïéà"
+
+#: makeinfo/insertion.c:2092
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "âåæ-ïá åì ïéàù `%c%s'"
+
+#: makeinfo/insertion.c:2097
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "åéøçà àåáéù åäùî êéøö `%c%s'"
+
+#: makeinfo/insertion.c:2103
+#, fuzzy, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "`%s'-ì èðîåâøàë íéàúî åðéà `%s'-ù íåùî `%s'-á éúùîúùä"
+
+#: makeinfo/insertion.c:2200
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "`@%s' êåúá @%s-ì úåòîùî ïéà"
+
+#: makeinfo/insertion.c:2209
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "`%s' êåúá @itemx-ì úåòîùî ïéà"
+
+#: makeinfo/insertion.c:2383
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "äñðëä ÷åìá ìëì õåçî %c%s àöîð"
+
+#: makeinfo/lang.c:1218
+#, c-format
+msgid "no default territory known for language `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:1281
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr "ISO 639 é\"ò íéøëåîä ïåùìä éðîéñî ãçà åðéà %s"
+
+#: makeinfo/lang.c:1399
+#, fuzzy, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "`%s' øëåî-éúìá ãåãé÷ íù"
+
+#: makeinfo/lang.c:1407
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "êîúð åðéà `%s' ãåãé÷ ,íéøòèöî"
+
+#: makeinfo/lang.c:1492
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "`%s' éåâù ããå÷î åú"
+
+#: makeinfo/lang.c:1800
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr "`j' åà `i' úåéäì áééç øùà ,%c%s ìù èðîåâøà úåéäì íéàúî åðéà `%c'"
+
+#: makeinfo/lang.c:1804
+#, c-format
+msgid "%c%s expects a single character `i' or `j' as argument"
+msgstr "èðîåâøàë `j' åà `i' ãéçé åú ìá÷î %c%s"
+
+#: makeinfo/macro.c:128
+#, c-format
+msgid "macro `%s' previously defined"
+msgstr "íãï÷ øãâåä øáë `%s' åø÷àî"
+
+#: makeinfo/macro.c:132
+#, c-format
+msgid "here is the previous definition of `%s'"
+msgstr "äðåùàøì øãâåä `%s' ïàë"
+
+#: makeinfo/macro.c:359
+#, fuzzy, c-format
+msgid "\\ in macro expansion followed by `%s' instead of parameter name"
+msgstr "øèîøô íù åà \\ íå÷îá ,åø÷àî úáçøäá \\ úåá÷òá `%s'"
+
+#: makeinfo/macro.c:401
+#, c-format
+msgid "Macro `%s' called on line %d with too many args"
+msgstr "éãî íéáø íéèðîåâøà úììåë `%s' åø÷àîì %d äøåùá äúìéçúù äàéø÷"
+
+#: makeinfo/macro.c:580
+#, c-format
+msgid "%cend macro not found"
+msgstr "àöîð àì %cend macro"
+
+#: makeinfo/macro.c:591
+msgid "@allow-recursion is deprecated; please use @rmacro instead"
+msgstr ""
+
+#: makeinfo/macro.c:606
+msgid "@quote-arg is deprecated; arguments are quoted by default"
+msgstr ""
+
+#: makeinfo/macro.c:649
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "@end %s úà íàåú åðéà @%s"
+
+#: makeinfo/makeinfo.c:188
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr ".íééãé éúîøä !úàéâù éãî øúåé\n"
+
+# Not translated because Emacs recognizes warningsby this template.
+#: makeinfo/makeinfo.c:306
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: warning: "
+
+#: makeinfo/makeinfo.c:325 makeinfo/makeinfo.c:2340
+#, c-format
+msgid "Misplaced %c"
+msgstr "åîå÷îá åðéàù %c"
+
+#: makeinfo/makeinfo.c:344
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr ".`%s --help' äñð øúé èåøôì\n"
+
+#: makeinfo/makeinfo.c:347
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "%s [íéðééôàî]... TEXINFO-õáå÷... :ùåîéùä ïôåà\n"
+
+#: makeinfo/makeinfo.c:350
+msgid ""
+"Translate Texinfo source documentation to various other formats, by default\n"
+"Info files suitable for reading online with Emacs or standalone GNU Info.\n"
+msgstr ""
+" ìãçî úøéøáë ,íéøçà íéðåù íéèîøåôì Texinfo øå÷î úôùá ãåòéú íâøú\n"
+".GNU Info úéðëú åà Emacs úøæòá äàéø÷ì íéîéàúîä Info éöá÷ øöééî \n"
+
+#: makeinfo/makeinfo.c:354
+#, fuzzy, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\n"
+" --document-language=STR locale to use in translating Texinfo keywords\n"
+" for the output document (default C).\n"
+" --force preserve output even if errors.\n"
+" --help display this help and exit.\n"
+" --no-validate suppress node cross-reference validation.\n"
+" --no-warn suppress warnings (but not errors).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+" :íééììë íéðééôàî\n"
+" .(%d ç\"îøá) úåàéâù NUM éøçà øåöò --error-limit=NUM\n"
+" .úåàéâù åéä íà íâ èìô õáå÷ ÷çîú ìà --force\n"
+" .úéðëúäî àöå äæ äøæò êñî âöä --help\n"
+" .úåà÷ñéô ïéá úåéðôää úåðé÷ú ÷åãáú ìà --no-validate\n"
+" .(äðâöåú úåàéâù úåòãåä) äøäæà úåòãåä âéöú ìà --no-warn\n"
+" .(%d ç\"îøá) úåéðôä éáâì úåøäæà NUM-î øúåé àì --reference-limit=NUM\n"
+" .úéðëúä úìåòô ìò èåøô âöä -v, --verbose\n"
+" .àöå äðëúä úñøéâ éáâì òãéî âöä --version\n"
+
+#: makeinfo/makeinfo.c:369
+#, fuzzy, no-wrap
+msgid ""
+"Output format selection (default is to produce Info):\n"
+" --docbook output Docbook XML rather than Info.\n"
+" --html output HTML rather than Info.\n"
+" --xml output Texinfo XML rather than Info.\n"
+" --plaintext output plain text rather than Info.\n"
+msgstr ""
+" :èìôä èîøåô úøéçá\n"
+" .Info íå÷îá DocBook èîøåôá èìô ïëä --docbook\n"
+" .Info íå÷îá HTML èîøåôá èìô ïëä --html\n"
+" .Info íå÷îá XML èîøåôá èìô ïëä --xml\n"
+
+#: makeinfo/makeinfo.c:377
+#, fuzzy
+msgid ""
+"General output options:\n"
+" -E, --macro-expand=FILE output macro-expanded source to FILE,\n"
+" ignoring any @setfilename.\n"
+" --no-headers suppress node separators, Node: lines, and "
+"menus\n"
+" from Info output (thus producing plain "
+"text)\n"
+" or from HTML (thus producing shorter "
+"output);\n"
+" also, write to standard output by default.\n"
+" --no-split suppress the splitting of Info or HTML "
+"output,\n"
+" generate only one output file.\n"
+" --number-sections output chapter and sectioning numbers.\n"
+" -o, --output=FILE output to FILE (or directory if split HTML).\n"
+msgstr ""
+" :íééììë èìô éðééôàî\n"
+" ,FILE õáå÷ì åø÷àî úáçøä øçàì øå÷î áåúë -E, --macro-expand FILE\n"
+" .@setfilename-î úåîìòúä êåú\n"
+"úåà÷ñéô éãéøôîå íéèéøôú ,Node: úåøúåë àìì èìô --no-headers\n"
+" èñëè õáå÷ ïéëî Info èîøåôá\n"
+" .øúåé øö÷ èìô - HTML èîøåôáå\n"
+".éð÷ú èìô õåøòì áåúë ,--output øãòéäá ,ïë-åîë\n"
+" .ãáìá ãçà èìô õáå÷ áåúë --no-split\n"
+" .èìô õáå÷á úåà÷ñéôå íé÷øô øøôñ --number-sections\n"
+" .(HTML èìô íà äé÷éú) FILE õáå÷ì èìô áåúë -o, --output=FILE\n"
+
+#: makeinfo/makeinfo.c:391
+#, fuzzy, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --disable-encoding do not output accented and special characters\n"
+" in Info output based on @documentencoding.\n"
+" --enable-encoding override --disable-encoding (default).\n"
+" --fill-column=NUM break Info lines at NUM characters (default %"
+"d).\n"
+" --footnote-style=STYLE output footnotes in Info according to STYLE:\n"
+" `separate' to put them in their own node;\n"
+" `end' to put them at the end of the node, "
+"in\n"
+" which they are defined (this is the "
+"default).\n"
+" --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %"
+"d).\n"
+" If VAL is `none', do not indent; if VAL is\n"
+" `asis', preserve existing indentation.\n"
+" --split-size=NUM split Info files at size NUM (default %d).\n"
+msgstr ""
+" :èñëè åà Info èîøåôá èìô éðééôàî\n"
+" øãâåîä é\"ôò èìôá úåøæ úåôùá úåéúåà áåúë --enable-encoding\n"
+" .@documentencoding úàøåäá\n"
+" .(%d ç\"îøá) íéååú NUM-ì Info úøåù êøåà ìáâä --fill-column=NUM\n"
+" :STYLE ïåðâñá Info èîøåôá íééìåù úåøòä êåøò --footnote-style=STYLE\n"
+" ;úåãøôð úåà÷ñéôá úåøòä æëøì - `separate'\n"
+" ä÷ñéôä íåéñá ïúåà íéùì - `end'\n"
+" .(ç\"îøá) úåøãâåî ïä äá\n"
+".(%d ç\"îøá) íéçååø VAL äîéðô Info úåà÷ñéô ææä --paragraph-indent=VAL\n"
+"àåä VAL íà ;ììë ñéðëú ìà ,`none' àåä VAL íà\n"
+" .øå÷îá äúéäù éôë äææä ìò øåîù ,`asis'\n"
+" .(%d ç\"îøá) NUM ìãåâá íéöá÷-úúì Info ÷ìç --split-size=NUM\n"
+
+#: makeinfo/makeinfo.c:409
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+" --css-ref=URL generate reference to a CSS file.\n"
+" --internal-links=FILE produce list of internal links in FILE.\n"
+" --transliterate-file-names\n"
+" produce file names in ASCII transliteration.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:419
+#, c-format
+msgid ""
+"Options for XML and Docbook:\n"
+" --output-indent=VAL indent XML elements by VAL spaces (default %"
+"d).\n"
+" If VAL is 0, ignorable whitespace is "
+"dropped.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:426
+#, fuzzy
+msgid ""
+"Input file options:\n"
+" --commands-in-node-names allow @ commands in node names.\n"
+" -D VAR define the variable VAR, as with @set.\n"
+" -I DIR append DIR to the @include search path.\n"
+" -P DIR prepend DIR to the @include search path.\n"
+" -U VAR undefine the variable VAR, as with @clear.\n"
+msgstr ""
+" :èì÷ éöá÷ ìù íéðééôàî\n"
+" .úåà÷ñéôä úåîùá @ úãå÷ôá ùåîéù äùøä --commands-in-node-names\n"
+" .@set äãå÷ôá åîë VAR äðôùî øãâä -D VAR\n"
+" .@include ìù ùåôéç úîéùø óåñá DIR óñåä -I DIR\n"
+" .@include ìù ùåôéç úîéùø ùàøá DIR óñåä -P DIR\n"
+" .@clear úãå÷ôá åîë ,VAR äðúùî úøãâä ìèá -U VAR\n"
+
+#: makeinfo/makeinfo.c:435
+#, fuzzy
+msgid ""
+"Conditional processing in input:\n"
+" --ifdocbook process @ifdocbook and @docbook even if\n"
+" not generating Docbook.\n"
+" --ifhtml process @ifhtml and @html even if not generating HTML.\n"
+" --ifinfo process @ifinfo even if not generating Info.\n"
+" --ifplaintext process @ifplaintext even if not generating plain text.\n"
+" --iftex process @iftex and @tex; implies --no-split.\n"
+" --ifxml process @ifxml and @xml.\n"
+" --no-ifdocbook do not process @ifdocbook and @docbook text.\n"
+" --no-ifhtml do not process @ifhtml and @html text.\n"
+" --no-ifinfo do not process @ifinfo text.\n"
+" --no-ifplaintext do not process @ifplaintext text.\n"
+" --no-iftex do not process @iftex and @tex text.\n"
+" --no-ifxml do not process @ifxml and @xml text.\n"
+"\n"
+" Also, for the --no-ifFORMAT options, do process @ifnotFORMAT text.\n"
+msgstr ""
+" :èì÷á äðúåî ãåáéò\n"
+" .HTML åðéà èìôä íà åìéôà @html-å @ifhtml ãáò --ifhtml\n"
+" .Info åðéà èìôä íà åìéôà @ifinfo-á èñëè ãáò --ifinfo\n"
+".é÷ð èñëè åðéà èìôä íà åìéôà @ifplaintext ãáò --ifplaintext\n"
+" .--no-split òîúùîá ;@tex-å @iftex-á èñëè ãáò --iftex\n"
+" .@html-å @ifhtml-á èñëè ãáòú ìà --no-ifhtml\n"
+" .@ifinfo-á èñëè ãáòú ìà --no-ifinfo\n"
+" .@ifplaintext-á èñëè ãáòú ìà --no-ifplaintext\n"
+" .@tex-å @iftex-á èñëè ãáòú ìà --no-iftex\n"
+
+#: makeinfo/makeinfo.c:454
+#, fuzzy
+msgid ""
+" The defaults for the @if... conditionals depend on the output format:\n"
+" if generating HTML, --ifhtml is on and the others are off;\n"
+" if generating Info, --ifinfo is on and the others are off;\n"
+" if generating plain text, --ifplaintext is on and the others are off;\n"
+" if generating XML, --ifxml is on and the others are off.\n"
+msgstr ""
+" :èìôä èîøåôá äéåìú @if... úåéðúä øåáò ìãçîä úøéøá\n"
+" ;íéìòôåî íðéà øúéä ìëå ìòôåî --ifhtml ,HTML àåä èìôä íà\n"
+" .íéìòôåî íðéà øúéä ìëå ìòôåî --ifinfo ,èñëè åà Info àåä èìôä íà\n"
+" .íéìòôåî íðéà øúéä ìëå ìòôåî --ifplaintext ,èñëè àåä èìôä íà\n"
+
+#: makeinfo/makeinfo.c:462
+#, fuzzy
+msgid ""
+"Examples:\n"
+" makeinfo foo.texi write Info to foo's @setfilename\n"
+" makeinfo --html foo.texi write HTML to @setfilename\n"
+" makeinfo --xml foo.texi write Texinfo XML to @setfilename\n"
+" makeinfo --docbook foo.texi write DocBook XML to @setfilename\n"
+" makeinfo --no-headers foo.texi write plain text to standard "
+"output\n"
+"\n"
+" makeinfo --html --no-headers foo.texi write html without node lines, "
+"menus\n"
+" makeinfo --number-sections foo.texi write Info with numbered sections\n"
+" makeinfo --no-split foo.texi write one Info file however big\n"
+msgstr ""
+" :úåàîâåã\n"
+"@setfilename é\"ò ïåúðä õáå÷ì Info èìô makeinfo foo.texi\n"
+"@setfilename é\"ò ïåúðä õáå÷ì HTML èìô makeinfo --html foo.texi\n"
+" @setfilename é\"ò ïåúðä õáå÷ì XML èìô makeinfo --xml foo.texi\n"
+" @setfilename-ì DocBook XML èìô makeinfo --docbook foo.texi\n"
+" éð÷ú èìô õåøòì èñëè èìô makeinfo --no-headers foo.texi\n"
+" íéèéøôú àììå úåøúåë àìì HTML èìô makeinfo --html --no-headers foo."
+"texi\n"
+" úåà÷ñéô øåøôñ íò Info èìô makeinfo --number-sections foo.texi\n"
+" äéäéù ìëë ìåãâ ,ãéçé õáå÷á Info èìô makeinfo --no-split foo.texi\n"
+
+#: makeinfo/makeinfo.c:622
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:670 makeinfo/makeinfo.c:696 makeinfo/makeinfo.c:720
+#: makeinfo/makeinfo.c:780
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr ".%s ïééôàî øåáò %s é\"ò ùøãðë ,éøîåð èðîåâøà åðéà `%s'\n"
+
+#: makeinfo/makeinfo.c:683
+#, fuzzy, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "`%s' åø÷àî úåáçøä èìô úçéúôá äì÷ú"
+
+#: makeinfo/makeinfo.c:688
+#, fuzzy, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "`%s' åø÷àî úåáçøä èìô úçéúôá äì÷ú"
+
+#: makeinfo/makeinfo.c:733
+#, fuzzy, c-format
+msgid "%s: could not open internal links output `%s'"
+msgstr "`%s' åø÷àî úåáçøä èìô úçéúôá äì÷ú"
+
+#: makeinfo/makeinfo.c:738
+#, fuzzy, c-format
+msgid "%s: ignoring second internal links output `%s'.\n"
+msgstr "`%s' åø÷àî úåáçøä èìô úçéúôá äì÷ú"
+
+#: makeinfo/makeinfo.c:751
+#, c-format
+msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
+msgstr ""
+"%s: `%s' àì ,`asis'/`none'/éøîåð úåéäì --paragraph-indent ìù èðîåâøà ìò\n"
+
+#: makeinfo/makeinfo.c:769
+#, c-format
+msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
+msgstr ""
+"%s: `%s' àì ,`end' åà `separate' úåéäì --footnote-style ìù èðîåâøà ìò\n"
+
+#: makeinfo/makeinfo.c:844
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr ".õáå÷ íù øñç %s úéðëúì\n"
+
+#: makeinfo/makeinfo.c:1041 makeinfo/makeinfo.c:4166
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1044
+#, c-format
+msgid "Expected `%s'"
+msgstr "`%s' éåôö äéä ïàë"
+
+#: makeinfo/makeinfo.c:1521
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "`%s' äé÷éú úøéöéá (%s) äì÷ú"
+
+#: makeinfo/makeinfo.c:1567
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "`%s' àöîð àì `%s' õáå÷á"
+
+#: makeinfo/makeinfo.c:1647
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr "%s: .íùì ïååëî èìôù íåùî åèîùåé éð÷ú èìô õåøòì åø÷àî úåáçøä\n"
+
+#: makeinfo/makeinfo.c:1677
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr ".%s èîøåôá `%s'-ì `%s' õáå÷ ãáòî\n"
+
+#: makeinfo/makeinfo.c:1744
+#, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr "%s: .åøîùì --force-á ùîúùä ;úåì÷ú á÷ò ÷çîéé `%s' åø÷àî úåáçøä õáå÷\n"
+
+#: makeinfo/makeinfo.c:1799
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr "%s: .åøîùì --force-á ùîúùä ;úåì÷ú á÷ò ÷çîéé `%s' èìô õáå÷\n"
+
+#: makeinfo/makeinfo.c:1818
+#, fuzzy, c-format
+msgid ""
+"%s: Removing internal links output file `%s' due to errors; use --force to "
+"preserve.\n"
+msgstr "%s: .åøîùì --force-á ùîúùä ;úåì÷ú á÷ò ÷çîéé `%s' èìô õáå÷\n"
+
+#: makeinfo/makeinfo.c:2113
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "`%s' úøëåî-éúìá äàøåä"
+
+#: makeinfo/makeinfo.c:2135
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr "íéìñìåñî íééøâåñá êøåö ùé ,@%s-ì èðîåâøà äéäú äàøåäù éãë"
+
+#: makeinfo/makeinfo.c:2394
+#, fuzzy, c-format
+msgid "%c%s expected braces"
+msgstr "`{...}'-ì äôéö %c%s"
+
+#: makeinfo/makeinfo.c:2407
+msgid "Unmatched }"
+msgstr "âåæ-ïá åì ïéàù }"
+
+#: makeinfo/makeinfo.c:2455
+msgid "NO_NAME!"
+msgstr "NO_NAME!"
+
+#: makeinfo/makeinfo.c:2476
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s-ì øñç éðîé øâåñ"
+
+#: makeinfo/makeinfo.c:3482
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "(HTML øåáò ùøãð) @image øåáò `%s' õáå÷ úàéø÷á (%s) äì÷ú"
+
+#: makeinfo/makeinfo.c:3488
+#, fuzzy, c-format
+msgid "No such file `%s'"
+msgstr "`%s' àöîð àì `%s' õáå÷á"
+
+#: makeinfo/makeinfo.c:3624
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "(èñëè øåáò ùøãð) @image øåáò `%s' õáå÷ úàéø÷á (%s) äì÷ú"
+
+#: makeinfo/makeinfo.c:3633
+msgid "@image missing filename argument"
+msgstr "@image úàøåäá øñç õáå÷ íù"
+
+#: makeinfo/makeinfo.c:3851
+#, c-format
+msgid "undefined flag: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3852
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{No value for `%s'}"
+
+#: makeinfo/makeinfo.c:3904
+#, c-format
+msgid "%c%s requires a name"
+msgstr "íù ùøåã %c%s"
+
+#: makeinfo/makeinfo.c:4010
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "íàåú @end %s éðôì øîâð èì÷ õáå÷"
+
+#: makeinfo/makeinfo.c:4258
+#, c-format
+msgid "`%.40s...' is too long for expansion; not expanded"
+msgstr "áçøåé àì ;åáéçøäì éãëî êåøà `%.40s...'"
+
+#: makeinfo/multi.c:116
+msgid "Missing } in @multitable template"
+msgstr "} øñç @multitable ìù úéðáúá"
+
+#: makeinfo/multi.c:260
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "@multiline éøçà `%s' øúåéî èñëèî éúîìòúä"
+
+#: makeinfo/multi.c:400
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "(%d ãò øúåî) multitable ìù @item-á úåãåîò éãî øúåé"
+
+#: makeinfo/multi.c:563
+#, fuzzy, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "multitable-á %d 'ñî äãåîò úøéçáá äì÷ú"
+
+#: makeinfo/multi.c:592
+msgid "ignoring @tab outside of multitable"
+msgstr "multitable-ì õåçî @tab-î éúîìòúä"
+
+# The following two look like debugging output, and aren't compiled.
+#: makeinfo/multi.c:640
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** Multicolumn output from last row:\n"
+
+#: makeinfo/multi.c:643
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* column #%d: output = %s\n"
+
+#: makeinfo/node.c:279
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "`%s' ä÷ñéô úøãâä øáë %d äøåùá"
+
+#: makeinfo/node.c:647
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "...%s ä÷ñéô ãáòî úòë\n"
+
+#: makeinfo/node.c:714
+#, fuzzy, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr "`%s' ä÷ñéôá (%c%s ïåâë) ÷åñéô úàøåäá êøåö ùé"
+
+#: makeinfo/node.c:878
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "ä÷ñéô íù àìì `%c%s' äàøåä"
+
+#: makeinfo/node.c:919 makeinfo/node.c:1163
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr "õáå÷ íù åúåàì úåîâøåúî `%s' øåùé÷ úéåúå `%s' ä÷ñéô"
+
+#: makeinfo/node.c:922
+msgid "This @anchor command ignored; references to it will not work"
+msgstr "åìòôé àì åæ úéåú ìà íéøåùé÷ ;òöåáú àì åæ @anchor úàøåä"
+
+#: makeinfo/node.c:924 makeinfo/node.c:1166
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr "`--no-split' ïééôàîá ùîúùä åà úéåúä íù äðù"
+
+#: makeinfo/node.c:954
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr "`%s' ÷ìåçî HTML õáå÷ íåéñá äéåôö-éúìá úæåøçî"
+
+#: makeinfo/node.c:1160
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr "õáå÷ íù åúåàì úåîâøåúî `%s-å `%s' øåùé÷ úåéåú"
+
+#: makeinfo/node.c:1165
+msgid "@anchor command ignored; references to it will not work"
+msgstr "åìòôé àì åæ úéåú ìà íéøåùé÷ ;òöåáú àì @anchor úàøåä"
+
+#: makeinfo/node.c:1362
+#, fuzzy, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr "%sá `%s' úîéé÷ äððéàù ä÷ñéôì äééðôä"
+
+#: makeinfo/node.c:1462
+#, fuzzy, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr "äøæç äòéáöî äðéà `%s' ä÷ñéô ìù Next äãùá ä÷ñéôä"
+
+#: makeinfo/node.c:1465
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "éåâù Prev äãù úìòá àéä (%s) åæ ä÷ñéô"
+
+#: makeinfo/node.c:1520
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "äøæç äòéáöî äðéà `%s' ä÷ñéô ìù Prev äãùá ä÷ñéôä"
+
+#: makeinfo/node.c:1524
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "éåâù Next äãù úìòá àéä (%s) åæ ä÷ñéô"
+
+#: makeinfo/node.c:1536
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1605
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr "äøæçá òéáöîù èéøôú óéòñ ïéà ìáà ,`%s' ìò òéáöî `%s' ä÷ñéô ìù Up äãù"
+
+#: makeinfo/node.c:1637
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "øåùé÷ óà ïéà `%s' ä÷ñéôì"
+
+#: makeinfo/node.c:1727
+#, c-format
+msgid "Removing %s\n"
+msgstr ""
+
+#: makeinfo/node.c:1731
+#, fuzzy, c-format
+msgid "Can't remove file `%s': %s"
+msgstr "`%s' äé÷éú úøéöéá (%s) äì÷ú"
+
+#: makeinfo/sectioning.c:122
+#, fuzzy, c-format
+msgid "Appendix %c"
+msgstr "Appendix %c "
+
+#: makeinfo/sectioning.c:467
+#, fuzzy, c-format
+msgid "Internal error (search_sectioning) `%s'!"
+msgstr "!\"%s\" (search_sectioning) úéîéðô äðëåú úì÷ú"
+
+#: makeinfo/sectioning.c:563
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "!\"%s\" (search_sectioning) úéîéðô äðëåú úì÷ú"
+
+#: makeinfo/sectioning.c:624
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "%c%s-á ùîúùäì óéãò ;úðùåéî äðéä %c%s äàøåä"
+
+#: makeinfo/sectioning.c:640
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "íãå÷ äøãâåä øáë %ctop íò ä÷ñéô"
+
+#: makeinfo/sectioning.c:648
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "%ctop ú÷ñéô ìù íå÷îä åäæ"
+
+#: makeinfo/sectioning.c:664
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "éîöòá @node éúôñåä ,%cnode éðôì %ctop-á äùîúùä %s ä÷ñéô"
+
+#: makeinfo/xml.c:1669
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "@image øåáò `%s' õáå÷ úàéø÷á (%s) äì÷ú"
+
+#: makeinfo/xml.c:2014
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+
+#: makeinfo/xml.c:2150
+msgid "of"
+msgstr "of"
+
+#: makeinfo/xml.c:2155
+msgid "on"
+msgstr "on"
+
+#: makeinfo/xref.c:127
+msgid "First argument to cross-reference may not be empty"
+msgstr "÷éø úåéäì ìåëé åðéà øåùé÷ ìù ïåùàø èðîåâøà"
+
+#: makeinfo/xref.c:252
+#, c-format
+msgid "Empty file name for HTML cross reference in `%s'"
+msgstr ""
+
+#: makeinfo/xref.c:387
+msgid "End of file reached while looking for `.' or `,'"
+msgstr ""
+
+#: makeinfo/xref.c:390
+#, fuzzy, c-format
+msgid "`.' or `,' must follow @%s, not `%c'"
+msgstr "%c àìå `,' åà `.' àåáì êéøö øåùé÷ éøçà"
+
+#: makeinfo/xref.c:392
+#, fuzzy
+msgid "for cross-references in parentheses, use @pxref"
+msgstr ".íéøåùé÷ ïéà åæ ä÷ñéôá"
+
+#: makeinfo/xref.c:435
+msgid "First argument to @inforef may not be empty"
+msgstr "÷éø úåéäì ìåëé åðéà @inforef ìù ïåùàø èðîåâøà"
+
+#: util/texindex.c:223
+msgid "display this help and exit"
+msgstr "úéðëúäî àöå äæ äøæò êñî âöä"
+
+#: util/texindex.c:225
+msgid "send output to FILE"
+msgstr "FILE õáå÷ì èìô äðôä"
+
+#: util/texindex.c:227
+msgid "display version information and exit"
+msgstr "àöå úéðëúä úñøéâ ìò òãéî âöä"
+
+#: util/texindex.c:237
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "%s [OPTION]... FILE... :ùåîéùä ïôåà\n"
+
+#: util/texindex.c:238
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr ".TeX é\"ò áúëðù FILE õáå÷ ìëì ïééåîî ñ÷ãðéà ïëä\n"
+
+#: util/texindex.c:241
+#, c-format
+msgid "Usually FILE... is specified as `foo.%c%c' for a document `foo.texi'.\n"
+msgstr ".`foo.%c%c' íùá íéàø÷ð `foo.texi' êîñî øåáò FILE éöá÷ ììë êøãá\n"
+
+#: util/texindex.c:243
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+" :íéðééôàî\n"
+
+#: util/texindex.c:743
+#, c-format
+msgid "failure reopening %s"
+msgstr "%s ìù úùãåçî äçéúôá äì÷ú"
+
+#: util/texindex.c:758 util/texindex.c:786
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "texinfo ìù ñ÷ãðéà õáå÷ åðéà `%s'"
+
+#: util/texindex.c:993
+#, c-format
+msgid "No page number in %s"
+msgstr "ãåîò øôñî ïéà %s-á"
+
+#: util/texindex.c:1066
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr "éðùî íù ìòá èéøô úåá÷òá àá %s èéøô"
+
+#~ msgid ""
+#~ "\\%-10[search] Search forward for a specified string\n"
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr ""
+#~ "\\%-10[search] äæ Info õå÷á êìéàå ïàëî úæåøçî ùôç\n"
+#~ " .úæåøçîä äàöîð äá ä÷ñéôì øåáòå\n"
+
+#~ msgid ""
+#~ "\\%-10[goto-node] Move to node specified by name.\n"
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ msgstr ""
+#~ "\\%-10[goto-node] äîù é\"ôò ä÷ñéôì øåáò\n"
+#~ " .(FILENAME)NODENAME-á åîë ä÷ñéôä íùî ÷ìçë õáå÷ íù ïééöì "
+#~ "ïúéð\n"
+
+#, fuzzy
+#~ msgid "\\%-10[next-node] Move to the next node of current section.\n"
+#~ msgstr "\\%-10[next-node] úéçëåð ä÷ñéô éøçà äàáä ä÷ñéôì øåáò\n"
+
+#~ msgid ""
+#~ "\\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+#~ "node] (DIR)'.\n"
+#~ msgstr ""
+#~ "\\%-10[dir-node] `\\[goto-node] (DIR)'-ì êøò-äååù ;DIR ä÷ñéôì øåáò\n"
+
+#~ msgid ""
+#~ "\\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] "
+#~ "Top'.\n"
+#~ msgstr "\\%-10[top-node] `\\[goto-node] Top'-ì êøò-äååù ;Top ä÷ñéôì øåáò\n"
+
+#, fuzzy
+#~ msgid "\\%-10[scroll-forward-page-only] Scroll forward within this node.\n"
+#~ msgstr "\\%-10[scroll-forward] äîéã÷ úçà äøåù ïîñ ææä\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "\\%-10[scroll-backward-page-only] Scroll backward within this node.\n"
+#~ msgstr "\\%-10[scroll-backward] äøåçà ãçà óã ìåìâ\n"
+
+#~ msgid ""
+#~ "\\%-10[search-backward] Search backward for a specified string\n"
+#~ " and select the node in which the previous occurrence is "
+#~ "found.\n"
+#~ msgstr ""
+#~ "\\%-10[search-backward] äæ Info õå÷á äøåçàå ïàëî úæåøçî ùôç\n"
+#~ " .úæåøçîä äàöîð äá ä÷ñéôì øåáòå\n"
+
+#~ msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+#~ msgstr "--- `\\[kill-node]' åà `\\[history-node]' ù÷ä äàéöéì ---\n"
+
+#, fuzzy
+#~ msgid "\\%-10[move-to-prev-xref] Skip to previous hypertext link [*].\n"
+#~ msgstr "\\%-10[move-to-prev-xref] úéçëåð ä÷ñéôá íãå÷ä øåùé÷ì ïîñ ææä\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]... [MENU-ITEM...]\n"
+#~ "\n"
+#~ "Read documentation in Info format.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --apropos=STRING look up STRING in all indices of all "
+#~ "manuals.\n"
+#~ " -d, --directory=DIR add DIR to INFOPATH.\n"
+#~ " --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+#~ " -f, --file=FILENAME specify Info file to visit.\n"
+#~ " -h, --help display this help and exit.\n"
+#~ " --index-search=STRING go to node pointed by index entry STRING.\n"
+#~ " -n, --node=NODENAME specify nodes in first visited Info file.\n"
+#~ " -o, --output=FILENAME output selected nodes to FILENAME.\n"
+#~ " -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+#~ " --no-raw-escapes output escapes as literal text.\n"
+#~ " --restore=FILENAME read initial keystrokes from FILENAME.\n"
+#~ " -O, --show-options, --usage go to command-line options node.\n"
+#~ "%s --subnodes recursively output menu items.\n"
+#~ " -w, --where, --location print physical location of Info file.\n"
+#~ " --vi-keys use vi-like and less-like key bindings.\n"
+#~ " --version display version information and exit.\n"
+#~ "\n"
+#~ "The first non-option argument, if present, is the menu entry to start "
+#~ "from;\n"
+#~ "it is searched for in all `dir' files along INFOPATH.\n"
+#~ "If it is not present, info merges all `dir' files and shows the result.\n"
+#~ "Any remaining arguments are treated as the names of menu\n"
+#~ "items relative to the initial node visited.\n"
+#~ "\n"
+#~ "Examples:\n"
+#~ " info show top-level dir menu\n"
+#~ " info emacs start at emacs node from top-level dir\n"
+#~ " info emacs buffers start at buffers node within emacs manual\n"
+#~ " info --show-options emacs start at node with emacs' command line "
+#~ "options\n"
+#~ " info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+#~ " info -f ./foo.info show file ./foo.info, not searching dir\n"
+#~ msgstr ""
+#~ " %s [íéðééôàî]... [...èéøôúî íéôéòñ] :ùåîéù ïôåà\n"
+#~ "\n"
+#~ " .Info èîøåôá íéëåøòä ãåòéú éöá÷á ïééò\n"
+#~ "\n"
+#~ " :"
+#~ "íéðééôàî\n"
+#~ " .ùîúùîì êéøãî ìë ìù íéñ÷ãðéàä ìëá SUBJECT ùôç --"
+#~ "apropos=SUBJECT\n"
+#~ " .INFOPATH-á äîéùøì DIR äé÷éú óñåä -d, --directory=DIR\n"
+#~ " .FILENAME õáå÷á íéù÷îä úåöéçì ìë úà íåùø --"
+#~ "dribble=FILENAME\n"
+#~ " .FILENAME õáå÷á øùà ùîúùî êéøãî âöä -f, --file=FILENAME\n"
+#~ " .úéðëúäî àöå äæ äøæò êñî âöä -h, --help\n"
+#~ ".äéìà ìéáåî ñ÷ãðéàäù ä÷ñéô âöäå ñ÷ãðéàá úæåøçî ùôç --index-"
+#~ "search=STRING\n"
+#~ " .ïåùàø Info õáå÷ êåúî NODENAME ä÷ñéô âöä -n, --node=NODENAME\n"
+#~ " .FILENAME õáå÷ êåúì åøçáðù úåà÷ñéô áåúë -o, --"
+#~ "output=FILENAME\n"
+#~ " .man éôãî ANSI ìù äø÷áä éååú ÷ìñú ìà -R, --raw-escapes\n"
+#~ " .FILENAME õáå÷î íéù÷î úåöéçì øæçù --"
+#~ "restore=FILENAME\n"
+#~ " .äãå÷ôä úøåù ìù íéðééôàî úèøôîä ä÷ñéô âöä -O, --show-options, --"
+#~ "usage\n"
+#~ "%s .èìôì ïìåë áåúëå éáéñøå÷ø øãñá úåà÷ñéô ïéá øåáò --subnodes\n"
+#~ " .Less åà vi-ì äîåãá úåãå÷ôì íéù÷î øåù÷ --vi-keys\n"
+#~ " .àöå úéðëåúä úñøéâ ìò òãéî âöä --version\n"
+#~ "\n"
+#~ ";ìéçúäì ùé åðîîù èéøôúî óéòñ ïééöî ,íéé÷ àåä íà ,ïééôàî åðéàù ïåùàø "
+#~ "èðîåâøà\n"
+#~ " .INFOPATH úîéùø êøåàì `dir' éöá÷ ìëá äæ óéòñ ùôçú "
+#~ "úéðëåúä\n"
+#~ " .`dir' éöá÷ ìëî áëøåîä èéøôú âéöú info ,ïééôàî åðéàù èðîåâøà óà ïéà "
+#~ "íà\n"
+#~ " èéøôúäî ìçä ,èéøôú éôéòñ úåîùë åùøåôé ïåùàøì øáòî "
+#~ "íéèðîåâøà\n"
+#~ " .äâöåäù äðåùàøä "
+#~ "ä÷ñéôá\n"
+#~ "\n"
+#~ " :"
+#~ "úåàîâåã\n"
+#~ " dir õáå÷î áà-èéøôú âöä info\n"
+#~ " emacs èéøô òéáöî äéìà ä÷ñéôì êì áà-èéøôúî info emacs\n"
+#~ "buffers èéøôì êùîä íùîå emacs óéòñì êì áà-èéøôúî info emacs buffers\n"
+#~ " emacs ìù äãå÷ôä úøåù éðééôàî úøàúîä ä÷ñéô âöä info --show-options "
+#~ "emacs\n"
+#~ " dir èéøôú êøã øåáòì éìáî ./foo.info õáå÷ âöä info -f ./foo.info\n"
+#~ "\n"
+#~ " ,bug-texinfo@gnu.org-ì äì÷ú éçååéã çåìùì àð\n"
+#~ " .help-texinfo@gnu.org-ì ïåéãì íéàùåðå úåéììë úåìàùå\n"
+
+#~ msgid ""
+#~ " Picking a menu item causes another node to be selected.\n"
+#~ msgstr " .úøçà ä÷ñéôì øáòîì úîøåâ èéøôúî äøéçá\n"
+
+#~ msgid ""
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ msgstr ""
+#~ " .(FILENAME)NODENAME-á åîë ä÷ñéôä íùî ÷ìçë õáå÷ íù ïééöì "
+#~ "ïúéð\n"
+
+#~ msgid " %-10s Search backward for a specified string\n"
+#~ msgstr " %-10s äæ Info õáå÷á äøåçàå ïàëî úæåøçî ùôç\n"
+
+#~ msgid ""
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr " .úæåøçîä äàöîð äá ä÷ñéôì øåáòå\n"
+
+#~ msgid "Following Next node..."
+#~ msgstr "...äàáä ä÷ñéôì øáåò"
+
+#~ msgid "Selecting first menu item..."
+#~ msgstr "...èéøôúäî ïåùàø óéòñ øçåá"
+
+#~ msgid "Selecting Next node..."
+#~ msgstr "...äàáä ä÷ñéôá øçåá"
+
+#~ msgid "Moving Up %d time(s), then Next."
+#~ msgstr ".äàáä ä÷ñéôä øçåá æàå ,úåà÷ñéôä õòá úå/äîø %d äìåò"
+
+#~ msgid "Moving Prev in this window."
+#~ msgstr ".äæ ïåìçá úîãå÷ ä÷ñéôì øáåò"
+
+#~ msgid "Moving Up in this window."
+#~ msgstr ".äæ ïåìçá íàä ú÷ñôì øáåò"
+
+#~ msgid "Moving to `Prev's last menu item."
+#~ msgstr ".úîãå÷ ä÷ñéô ìù èéøôúá ïåøçà óéòñì øáåò"
+
+#~ msgid " "
+#~ msgstr " "
+
+# It would be hilarious to translate those...
+#~ msgid "Function"
+#~ msgstr "Function"
+
+#~ msgid "Macro"
+#~ msgstr "Macro"
+
+#~ msgid "Special Form"
+#~ msgstr "Special Form"
+
+#~ msgid "Variable"
+#~ msgstr "Variable"
+
+#~ msgid "User Option"
+#~ msgstr "User Option"
+
+#~ msgid "Instance Variable"
+#~ msgstr "Instance Variable"
+
+#~ msgid "Method"
+#~ msgstr "Method"
+
+#~ msgid "Untitled"
+#~ msgstr "úøúåë àìì"
+
+#~ msgid "This is %s, produced by makeinfo version %s from %s.\n"
+#~ msgstr "This is %s, produced by makeinfo version %s from %s.\n"
+
+#~ msgid "Next:"
+#~ msgstr "Next:"
+
+#~ msgid "Previous:"
+#~ msgstr "Previous:"
+
+#~ msgid "Up:"
+#~ msgstr "Up:"
+
+#~ msgid "Menu"
+#~ msgstr "èéøôú"
+
+#~ msgid "Cross"
+#~ msgstr "øåùé÷"
+
+#~ msgid "Prev"
+#~ msgstr "Prev äãù"
+
+#~ msgid "Up"
+#~ msgstr "Up äãù"
+
+#~ msgid "see "
+#~ msgstr "see "
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+#~ "\n"
+#~ "Add or remove entries in INFO-FILE from the Info directory DIR-FILE.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --debug report what is being done.\n"
+#~ " --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+#~ " don't insert any new entries.\n"
+#~ " --dir-file=NAME specify file name of Info directory file.\n"
+#~ " This is equivalent to using the DIR-FILE argument.\n"
+#~ " --entry=TEXT insert TEXT as an Info directory entry.\n"
+#~ " TEXT should have the form of an Info menu item line\n"
+#~ " plus zero or more extra lines starting with "
+#~ "whitespace.\n"
+#~ " If you specify more than one entry, they are all "
+#~ "added.\n"
+#~ " If you don't specify any entries, they are "
+#~ "determined\n"
+#~ " from information in the Info file itself.\n"
+#~ " --help display this help and exit.\n"
+#~ " --info-file=FILE specify Info file to install in the directory.\n"
+#~ " This is equivalent to using the INFO-FILE argument.\n"
+#~ " --info-dir=DIR same as --dir-file=DIR/dir.\n"
+#~ " --item=TEXT same as --entry TEXT.\n"
+#~ " An Info directory entry is actually a menu item.\n"
+#~ " --quiet suppress warnings.\n"
+#~ " --remove same as --delete.\n"
+#~ " --remove-exactly only remove if the info file name matches exactly;\n"
+#~ " .info and/or .gz suffixes are not ignored.\n"
+#~ " --section=SEC put this file's entries in section SEC of the "
+#~ "directory.\n"
+#~ " If you specify more than one section, all the "
+#~ "entries\n"
+#~ " are added in each of the sections.\n"
+#~ " If you don't specify any sections, they are "
+#~ "determined\n"
+#~ " from information in the Info file itself.\n"
+#~ " --section-regex=R if an entry is added to a section that does not "
+#~ "exist,\n"
+#~ " look for a section matching basic regular expression "
+#~ "R\n"
+#~ " (and ignoring case) before starting a new section.\n"
+#~ " --test suppress updating of DIR-FILE.\n"
+#~ " --silent suppress warnings.\n"
+#~ " --version display version information and exit.\n"
+#~ msgstr ""
+#~ " %s [OPTION]... [INFO-FILE [DIR-FILE]] :ùåîéùä ïôåà\n"
+#~ "\n"
+#~ " :"
+#~ "íéðééôàî\n"
+#~ " ;INFO-FILE øåáò íéîéé÷ èéøôú éôéòñ DIR-FILE-î ÷çî --delete\n"
+#~ " .íéùãç èéøôú éôéòñ óéñåú ìà\n"
+#~ " .éùàø Info èéøôú ìù õáå÷ íù ïééö --dir-file=NAME\n"
+#~ " .DIR-FILE èðîåâøàá ùåîéùì êøò-äååù äæ\n"
+#~ " .Info ìù èéøôú óéòñë TEXT-á ùîúùä --entry=TEXT\n"
+#~ " Info èéøôú óéòñ úøåù ìù äøåöá úåéäì êéøö TEXT\n"
+#~ " .íéçååøá úåìéçúîä úåøåù äîë úôñåúì úåøùôà íò\n"
+#~ " íéôéòñä ìë ,úçà íòôî øúåé --entry-á ùîúùú íà\n"
+#~ " .åôñåúé åììä\n"
+#~ " êåúî åáùåçé èéøôú éôéòñ ,--entry-á ùåîéù ïéàá\n"
+#~ " .åîöò Info õáå÷ ìù ïëåúä\n"
+#~ " .úéðëúäî àöå àæ äøæò êñî âöä --help\n"
+#~ " .éùàøä èéøôúá äð÷úäì õáå÷ íù ïééö --info-file=FILE\n"
+#~ " .INFO-FILE èðîåâøàá ùåîéùì êøò-äååù äæ\n"
+#~ " .\"--dir-file=DIR/dir\"-ì êøò-äååù --info-dir=DIR\n"
+#~ " .\"--entry=TEXT\"-ì êøò-äååù --item=TEXT\n"
+#~ " .èéøôú ìù óéòñ äùòîì àåä Info êéøãîá óéòñ\n"
+#~ " .äøäæà úåàãåä âéöú ìà --quiet\n"
+#~ " .\"--delete\"-ì êøò-äååù --remove\n"
+#~ " .éùàøä èéøôúä ìù SEC ÷ìçá äæ õáå÷ êåúî íéôéòñ í÷î --section=SEC\n"
+#~ " èéøôúä éôéòñ ,úçà íòôî øúåé --section-á ùîúùú íà\n"
+#~ " .úðééöù éùàøä èéøôúä é÷ìçî ãçà ìëì åôñåúé\n"
+#~ " òá÷éé èéøôúá ÷ìçä ,--section-á ùåîéù ïéàá\n"
+#~ " .åîöò Info õáå÷ ìù ïëåúä êåúî\n"
+#~ " .àöå úéðëúä úñøéâ ìò òãéî âöä --version\n"
+#~ "\n"
+
+#~ msgid "menu item `%s' already exists, for file `%s'"
+#~ msgstr "`%s' óéòñ éùàøä èéøôúá íéé÷ øáë `%s' õáå÷ì"
+
+#~ msgid "\\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+#~ msgstr "\\%-10[menu-digit] úéçëåðä ä÷ñéôä èéøôúá éòéùú ãò ïåùàø óéòñ øçá\n"
+
+#~ msgid "node `%s' has been referenced %d times"
+#~ msgstr "`%s' ä÷ñéôì íéøåùé÷ %d éúøôñ"
+
+#, fuzzy
+#~ msgid ""
+#~ "Copyright (C) %s Free Software Foundation, Inc.\n"
+#~ "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n"
+#~ "PARTICULAR PURPOSE. You may redistribute copies of GNU %s\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the file named COPYING.\n"
+#~ msgstr ""
+#~ " Copyright (C) %s Free Software Foundation, Inc.\n"
+#~ "åæ äðëåú õéôäì íëúåëæ .úåéøçà áúëá äååìî äðéà åæ úéðëåú\n"
+#~ " .GNU General Public License ïåéùøä éàðúì íàúäá\n"
+#~ " .COPYING õáå÷á åðééò ,åìà íéðéðòá èåøéô øúéì\n"
+
+#~ msgid "@quote-arg only useful for single-argument macros"
+#~ msgstr "ãéçé èðîåâøà ìòá åø÷àî êåúá ÷ø éùåîéù @quote-arg"
+
+#~ msgid "Table of Contents"
+#~ msgstr "Table of Contents"
+
+#~ msgid "Short Contents"
+#~ msgstr "Short Contents"
+
+#~ msgid "keep temporary files around after processing"
+#~ msgstr "ãåáéòä êìäîá íéøöåðä íééðîæ íéöá÷ ÷çîú ìà"
+
+#~ msgid "do not keep temporary files around after processing (default)"
+#~ msgstr "(ç\"îøá) ãåáéòä êìäîá íéøöåðä íééðîæ íéöá÷ ÷çî"
+
+#~ msgid ""
+#~ " file, and select the node referenced by the first entry "
+#~ "found.\n"
+#~ msgstr " íàåú àöîðù ïåùàø ñ÷ãðéà èéøô äòéáöî äéìà ä÷ñéôì\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "There is NO warranty. You may redistribute this software\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the files named COPYING.\n"
+#~ msgstr ""
+#~ " Copyright (C) %s Free Software Foundation, Inc.\n"
+#~ "åæ äðëåú õéôäì íëúåëæ .úåéøçà áúëá äååìî äðéà åæ úéðëåú\n"
+#~ " .GNU General Public License ïåéùøä éàðúì íàúäá\n"
+#~ " .COPYING õáå÷á åðééò ,åìà íéðéðòá èåøéô øúéì\n"
+
+#~ msgid "%s: Specify the Info directory only once.\n"
+#~ msgstr ".ãáìá úçà íòô %s-ì Info úéé÷éú ïééöì ïúéð\n"
+
+#~ msgid "\"\" is invalid"
+#~ msgstr "\"\" äéåâù äãå÷ô"
+
+#~ msgid "%s is an invalid ISO code, using %c"
+#~ msgstr "éåâù ISO ãå÷ åðéä %s éë %c-á ùîúùî"
+
+#~ msgid "Cannot specify more than one macro expansion output"
+#~ msgstr "åø÷àîä úåáçøä èìôì ãçà õáå÷ ÷ø ïééöì ïúéð"
+
+#~ msgid "File exists, but is not a directory"
+#~ msgstr "äöéçî åððéàù íéé÷ õáå÷ àöîð"
+
+#~ msgid "Node:"
+#~ msgstr "Node:"
+
+#~ msgid "%s: TOC should be here, but it was not found"
+#~ msgstr "àöîð àì êà ,%s õáå÷á úåéäì äéä øåîà íéðééðò ïëåú"
+
+#~ msgid "No `%s.png' or `.jpg', and no extension supplied"
+#~ msgstr "úøçà úîåéñ äðéåö àìå åàöîð àì .jpg-å `%s.png'"
+
+#~ msgid "%s; for file `%s'.\n"
+#~ msgstr ".%s äì÷ú äúø÷ `%s' õáå÷á\n"
+
+#~ msgid "`%s' has no Up field"
+#~ msgstr "Up äãù ïéà `%s'-ì"
diff --git a/po/hr.gmo b/po/hr.gmo
new file mode 100644
index 0000000..62d0a39
--- /dev/null
+++ b/po/hr.gmo
Binary files differ
diff --git a/po/hr.po b/po/hr.po
new file mode 100644
index 0000000..1dc77b0
--- /dev/null
+++ b/po/hr.po
@@ -0,0 +1,3406 @@
+# Texinfo project .po file for hr_HR localization
+# Copyright (C) 2002 Free Software Foundation, Inc.
+# Mirsad Todorovac <mtodorov_69@yahoo.com>, 2002.
+# ... wishes to thank to everybody who helped in good faith.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo 4.2\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2008-09-18 20:38+0200\n"
+"PO-Revision-Date: 2002-04-26 13:49-MET+DST (UTC+2)\n"
+"Last-Translator: Mirsad Todorovac <mtodorov_69@yahoo.com>\n"
+"Language-Team: Croatian <lokalizacija@linux.hr>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: gnulib/lib/error.c:125
+msgid "Unknown system error"
+msgstr ""
+
+#: gnulib/lib/getopt.c:526 gnulib/lib/getopt.c:542
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: opcija `%s' nije jednoznaèna\n"
+
+#: gnulib/lib/getopt.c:575 gnulib/lib/getopt.c:579
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: opcija `--%s' ne dopu¹ta argument\n"
+
+#: gnulib/lib/getopt.c:588 gnulib/lib/getopt.c:593
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: opcija `%c%s' ne dopu¹ta argument\n"
+
+#: gnulib/lib/getopt.c:636 gnulib/lib/getopt.c:655 gnulib/lib/getopt.c:971
+#: gnulib/lib/getopt.c:990
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: opcija `%s' tra¾i neophodan argument\n"
+
+#: gnulib/lib/getopt.c:693 gnulib/lib/getopt.c:696
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: nepoznata opcija `--%s'\n"
+
+#: gnulib/lib/getopt.c:704 gnulib/lib/getopt.c:707
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: nepoznata opcija `%c%s'\n"
+
+#: gnulib/lib/getopt.c:759 gnulib/lib/getopt.c:762
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: nedozvoljena opcija -- %c\n"
+
+#: gnulib/lib/getopt.c:768 gnulib/lib/getopt.c:771
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: pogre¹na opcija -- %c\n"
+
+#: gnulib/lib/getopt.c:823 gnulib/lib/getopt.c:839 gnulib/lib/getopt.c:1043
+#: gnulib/lib/getopt.c:1061
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: opcija zahtijeva argument -- %c\n"
+
+#: gnulib/lib/getopt.c:892 gnulib/lib/getopt.c:908
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: opcija `-W %s' nije jednoznaèna\n"
+
+#: gnulib/lib/getopt.c:932 gnulib/lib/getopt.c:950
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: opcija `-W %s' ne dopu¹ta argument\n"
+
+#: gnulib/lib/xalloc-die.c:34 gnulib/lib/xsetenv.c:37
+#, c-format
+msgid "memory exhausted"
+msgstr ""
+
+#: info/echo-area.c:283 info/session.c:966
+msgid "Move forward a character"
+msgstr "Pomakni se znak unaprijed"
+
+#: info/echo-area.c:295 info/session.c:993
+msgid "Move backward a character"
+msgstr "Pomakni se znak unazad"
+
+#: info/echo-area.c:307
+msgid "Move to the start of this line"
+msgstr "Pomakni se na poèetak tekuæe linije"
+
+#: info/echo-area.c:312
+msgid "Move to the end of this line"
+msgstr "Pomakni se na kraj tekuæe linije"
+
+#: info/echo-area.c:320 info/session.c:1025
+msgid "Move forward a word"
+msgstr "Pomakni se rijeè unaprijed"
+
+#: info/echo-area.c:360 info/session.c:1049
+msgid "Move backward a word"
+msgstr "Pomakni se rijeè unazad"
+
+#: info/echo-area.c:400
+msgid "Delete the character under the cursor"
+msgstr "Obri¹i znak ispod kursora"
+
+#: info/echo-area.c:430
+msgid "Delete the character behind the cursor"
+msgstr "Obri¹i znak iza kursora"
+
+#: info/echo-area.c:451
+msgid "Cancel or quit operation"
+msgstr "Poni¹ti ili prekini operaciju"
+
+#: info/echo-area.c:466
+msgid "Accept (or force completion of) this line"
+msgstr "Prihvaæanje (ili tra¾enje kompletiranja) linije"
+
+#: info/echo-area.c:471
+msgid "Insert next character verbatim"
+msgstr "Umetni slijedeæi znak doslovno"
+
+#: info/echo-area.c:479
+msgid "Insert this character"
+msgstr "Umetni tekuæi znak"
+
+#: info/echo-area.c:498
+msgid "Insert a TAB character"
+msgstr "Umetni znak TAB"
+
+#: info/echo-area.c:505
+msgid "Transpose characters at point"
+msgstr "Zamijeni mjesta znakovima pod kurzorom"
+
+#: info/echo-area.c:556
+msgid "Yank back the contents of the last kill"
+msgstr "Povrati zadnji obrisani sadr¾aj"
+
+#: info/echo-area.c:563
+msgid "Kill ring is empty"
+msgstr "Spremnik za obrisani sadr¾aj je prazan"
+
+#: info/echo-area.c:576
+msgid "Yank back a previous kill"
+msgstr "Povrati prije obrisani sadr¾aj"
+
+#: info/echo-area.c:609
+msgid "Kill to the end of the line"
+msgstr "Obri¹i tekst do kraja retka"
+
+#: info/echo-area.c:622
+msgid "Kill to the beginning of the line"
+msgstr "Obri¹i tekst do poèetka retka"
+
+#: info/echo-area.c:634
+msgid "Kill the word following the cursor"
+msgstr "Obri¹i rijeè iza kurzora"
+
+#: info/echo-area.c:654
+msgid "Kill the word preceding the cursor"
+msgstr "Obri¹i rijeè ispred kurzora"
+
+#: info/echo-area.c:870 info/echo-area.c:926
+msgid "No completions"
+msgstr "Ne mogu kompletirati"
+
+#: info/echo-area.c:872
+msgid "Not complete"
+msgstr "Nije dovr¹eno"
+
+#: info/echo-area.c:913
+msgid "List possible completions"
+msgstr "Izlistaj moguæe varijante kompletiranja"
+
+#: info/echo-area.c:930
+msgid "Sole completion"
+msgstr "Jedino moguæe kompletiranje"
+
+#: info/echo-area.c:939
+msgid "One completion:\n"
+msgstr "Jedno kompletiranje:\n"
+
+#: info/echo-area.c:940
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d kompletiranja:\n"
+
+#: info/echo-area.c:1087
+msgid "Insert completion"
+msgstr "Umetni kompletiranje"
+
+#: info/echo-area.c:1222
+msgid "Building completions..."
+msgstr "Izgraðujem varijante kompletiranja..."
+
+#: info/echo-area.c:1342
+msgid "Scroll the completions window"
+msgstr "'Skrolaj' prozor za varijante kompletiranja"
+
+#: info/footnotes.c:212
+msgid "Footnotes could not be displayed"
+msgstr "Ne mogu prikazati fusnote"
+
+#: info/footnotes.c:238
+msgid "Show the footnotes associated with this node in another window"
+msgstr "Prika¾i fusnote povezane s ovim èvorom u drugom prozoru"
+
+#: info/footnotes.h:26
+msgid "---------- Footnotes ----------"
+msgstr "----------- Fusnote -----------"
+
+#: info/indices.c:171
+msgid "Look up a string in the index for this file"
+msgstr "Potra¾i niz u indeksu ove datoteke"
+
+#: info/indices.c:198
+msgid "Finding index entries..."
+msgstr "Tra¾im stavke indeksa..."
+
+#: info/indices.c:206
+msgid "No indices found."
+msgstr "Nije pronaðen indeks."
+
+#: info/indices.c:216
+msgid "Index entry: "
+msgstr "Stavka indeksa: "
+
+#: info/indices.c:324
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr ""
+"Idi na slijedeæu podudarajuæu stavki indeksa zadnje `\\[index-search]' "
+"naredbe"
+
+#: info/indices.c:334
+msgid "No previous index search string."
+msgstr "Nema prethodnog zadanog niza za pretra¾ivanje indeksa."
+
+#: info/indices.c:341
+msgid "No index entries."
+msgstr "Nema stavaka indeksa."
+
+#: info/indices.c:374
+#, fuzzy, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "Nema stavaka %sindeksa koje sadr¾e \"%s\"."
+
+#: info/indices.c:375
+msgid "more "
+msgstr "jo¹ "
+
+#: info/indices.c:385
+msgid "CAN'T SEE THIS"
+msgstr "NE MOGU VIDJETI OVO"
+
+#: info/indices.c:421
+#, fuzzy, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr ""
+"Prona¹ao \"%s\" u %s. (`\\[next-index-match]' poku¹ava naæi slijedeæi.)"
+
+#: info/indices.c:549
+#, fuzzy, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "Skeniram indekse od \"%s\"..."
+
+#: info/indices.c:604
+#, fuzzy, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr "Niti jedna raspolo¾iva info datoteka ne sadr¾i \"%s\" u svom indeksu."
+
+#: info/indices.c:630
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr "Propu¾i kroz sve poznate indekse u potrazi za nizom i slo¾i meni"
+
+#: info/indices.c:634
+msgid "Index apropos: "
+msgstr "Indeks apropos: "
+
+#: info/indices.c:662
+#, fuzzy, c-format
+msgid ""
+"\n"
+"* Menu: Nodes whose indices contain `%s':\n"
+msgstr ""
+"\n"
+"* Meni: Èvorovi èiji indeksi sadr¾e \"%s\":\n"
+
+#: info/info.c:275 info/infokey.c:899
+#, c-format
+msgid "Try --help for more information.\n"
+msgstr "Poku¹ajte --help za vi¹e informacija.\n"
+
+#: info/info.c:294 info/infokey.c:145 install-info/install-info.c:2101
+#: makeinfo/makeinfo.c:802 util/texindex.c:295
+#, c-format
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+
+#: info/info.c:506
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "nijedna stavka indeksa nije naðena za `%s'\n"
+
+#: info/info.c:600
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [MENU-ITEM...]\n"
+"\n"
+"Read documentation in Info format.\n"
+msgstr ""
+
+#: info/info.c:606
+msgid ""
+"Options:\n"
+" -k, --apropos=STRING look up STRING in all indices of all "
+"manuals.\n"
+" -d, --directory=DIR add DIR to INFOPATH.\n"
+" --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+" -f, --file=FILENAME specify Info file to visit."
+msgstr ""
+
+#: info/info.c:613
+msgid ""
+" -h, --help display this help and exit.\n"
+" --index-search=STRING go to node pointed by index entry STRING.\n"
+" -n, --node=NODENAME specify nodes in first visited Info file.\n"
+" -o, --output=FILENAME output selected nodes to FILENAME."
+msgstr ""
+
+#: info/info.c:619
+msgid ""
+" -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+" --no-raw-escapes output escapes as literal text.\n"
+" --restore=FILENAME read initial keystrokes from FILENAME.\n"
+" -O, --show-options, --usage go to command-line options node."
+msgstr ""
+
+#: info/info.c:626
+#, fuzzy
+msgid " -b, --speech-friendly be friendly to speech synthesizers."
+msgstr ""
+" -b, --speech-friendly budi vi¹e prijateljski prema sintetizatorima "
+"govora.\n"
+
+#: info/info.c:630
+msgid ""
+" --subnodes recursively output menu items.\n"
+" --vi-keys use vi-like and less-like key bindings.\n"
+" --version display version information and exit.\n"
+" -w, --where, --location print physical location of Info file."
+msgstr ""
+
+#: info/info.c:636
+msgid ""
+"\n"
+"The first non-option argument, if present, is the menu entry to start from;\n"
+"it is searched for in all `dir' files along INFOPATH.\n"
+"If it is not present, info merges all `dir' files and shows the result.\n"
+"Any remaining arguments are treated as the names of menu\n"
+"items relative to the initial node visited."
+msgstr ""
+
+#: info/info.c:643
+msgid ""
+"\n"
+"For a summary of key bindings, type h within Info."
+msgstr ""
+
+#: info/info.c:646
+msgid ""
+"\n"
+"Examples:\n"
+" info show top-level dir menu\n"
+" info info show the general manual for Info readers\n"
+" info info-stnd show the manual specific to this Info program\n"
+" info emacs start at emacs node from top-level dir\n"
+" info emacs buffers start at buffers node within emacs manual\n"
+" info --show-options emacs start at node with emacs' command line options\n"
+" info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+" info -f ./foo.info show file ./foo.info, not searching dir"
+msgstr ""
+
+#: info/info.c:657 info/infokey.c:918 makeinfo/makeinfo.c:475
+#: util/texindex.c:259
+msgid ""
+"\n"
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+"Izvje¹taje o bugovima molimo slati emailom na bug-texinfo@gnu.org\n"
+"(na engleskom), generalna pitanja i diskusije na help-texinfo@gnu.org.\n"
+"Texinfo matièna stranica: http://www.gnu.org/software/texinfo/\n"
+"Pitanja i kritike glede translacije slati na adresu lokalizacija@linux.hr."
+
+#: info/info.c:691
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "Ne mogu naæi èvor `%s'."
+
+#: info/info.c:692
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "Ne mogu naæi èvor `(%s)%s'."
+
+#: info/info.c:693
+msgid "Cannot find a window!"
+msgstr "Ne mogu naæi prozor!"
+
+#: info/info.c:694
+msgid "Point doesn't appear within this window's node!"
+msgstr "Toèka se ne nalazi unutar èvora ovog prozora!"
+
+#: info/info.c:695
+msgid "Cannot delete the last window."
+msgstr "Ne mogu dokinuti zadnji prozor."
+
+#: info/info.c:696
+msgid "No menu in this node."
+msgstr "Nema menija u ovom èvoru."
+
+#: info/info.c:697
+msgid "No footnotes in this node."
+msgstr "Nema fusnota u ovom èvoru."
+
+#: info/info.c:698
+msgid "No cross references in this node."
+msgstr "Nema unakrsnih referenci u ovom èvoru."
+
+#: info/info.c:699
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Nema `%s' pokazivaèa za ovaj èvor."
+
+#: info/info.c:700
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "Nepoznata Info naredba `%c'; poku¹ajte `?' za pomoæ."
+
+#: info/info.c:701
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr "Terminal tipa `%s' nema dovoljno sposobnosti da izvodi Info."
+
+#: info/info.c:702
+msgid "You are already at the last page of this node."
+msgstr "Veæ se nalazite na zadnjoj stranici ovog èvora."
+
+#: info/info.c:703
+msgid "You are already at the first page of this node."
+msgstr "Veæ se nalazite na prvoj stranici ovog èvora."
+
+#: info/info.c:704
+msgid "Only one window."
+msgstr "Samo jedan prozor."
+
+#: info/info.c:705
+msgid "Resulting window would be too small."
+msgstr "Nastali prozor bi bio premalen."
+
+#: info/info.c:706
+msgid "Not enough room for a help window, please delete a window."
+msgstr "Nema dovoljno mjesta za prozor za pomoæ, molimo dokinite jedan prozor."
+
+#: info/infodoc.c:45
+msgid "Basic Info command keys\n"
+msgstr ""
+
+#: info/infodoc.c:47
+#, fuzzy
+msgid "\\%-10[quit-help] Close this help window.\n"
+msgstr "\\%-10[quit-help] Napusti ovu pomoæ.\n"
+
+#: info/infodoc.c:48
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] Potpuno zavr¹i s radom (Quit).\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr "\\%-10[get-info-help-node] Pozovi Info priruènik.\n"
+
+#: info/infodoc.c:51
+#, fuzzy
+msgid "\\%-10[prev-line] Move up one line.\n"
+msgstr " %-10s 'Skrolaj' unazad 1 redak.\n"
+
+#: info/infodoc.c:52
+#, fuzzy
+msgid "\\%-10[next-line] Move down one line.\n"
+msgstr " %-10s 'Skrolaj' naprijed 1 redak.\n"
+
+#: info/infodoc.c:53
+#, fuzzy
+msgid "\\%-10[scroll-backward] Scroll backward one screenful.\n"
+msgstr "\\%-10[scroll-backward] 'Skrolaj' stranicu unazad.\n"
+
+#: info/infodoc.c:54
+#, fuzzy
+msgid "\\%-10[scroll-forward] Scroll forward one screenful.\n"
+msgstr "\\%-10[scroll-forward] 'Skrolaj stranicu naprijed.\n"
+
+#: info/infodoc.c:55
+#, fuzzy
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr "\\%-10[beginning-of-node] Idi na poèetak ovog èvora.\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr "\\%-10[end-of-node] Idi na kraj ovog èvora.\n"
+
+#: info/infodoc.c:58
+#, fuzzy
+msgid "\\%-10[move-to-next-xref] Skip to the next hypertext link.\n"
+msgstr ""
+"\\%-10[move-to-next-xref] Preskoèi do slijedeæeg hipertekst linka unutar "
+"ovog èvora.\n"
+
+#: info/infodoc.c:59
+#, fuzzy
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under the "
+"cursor.\n"
+msgstr ""
+"\\%-10[select-reference-this-line] Slijedi hipertekst link ispod kursora.\n"
+
+#: info/infodoc.c:60
+#, fuzzy
+msgid "\\%-10[history-node] Go back to the last node seen in this window.\n"
+msgstr ""
+"\\%-10[history-node] Pomakni se do posljednjeg vidljivog èvora u ovom "
+"prozoru.\n"
+
+#: info/infodoc.c:62
+#, fuzzy
+msgid "\\%-10[global-prev-node] Go to the previous node in the document.\n"
+msgstr ""
+"\\%-10[prev-node] Idi na prethodni (`previous') èvor u odnosu na ovaj.\n"
+
+#: info/infodoc.c:63
+#, fuzzy
+msgid "\\%-10[global-next-node] Go to the next node in the document.\n"
+msgstr "\\%-10[next-node] Idi na slijedeæi (`next') èvor u odnosu na ovaj.\n"
+
+#: info/infodoc.c:64
+#, fuzzy
+msgid "\\%-10[prev-node] Go to the previous node on this level.\n"
+msgstr ""
+"\\%-10[prev-node] Idi na prethodni (`previous') èvor u odnosu na ovaj.\n"
+
+#: info/infodoc.c:65
+#, fuzzy
+msgid "\\%-10[next-node] Go to the next node on this level.\n"
+msgstr "\\%-10[next-node] Idi na slijedeæi (`next') èvor u odnosu na ovaj.\n"
+
+#: info/infodoc.c:66
+#, fuzzy
+msgid "\\%-10[up-node] Go up one level.\n"
+msgstr "\\%-10[up-node] Idi navi¹e (`up') od ovog èvora.\n"
+
+#: info/infodoc.c:67
+#, fuzzy
+msgid "\\%-10[top-node] Go to the top node of this document.\n"
+msgstr "\\%-10[end-of-node] Idi na kraj ovog èvora.\n"
+
+#: info/infodoc.c:68
+#, fuzzy
+msgid "\\%-10[dir-node] Go to the main `directory' node.\n"
+msgstr "\\%-10[end-of-node] Idi na kraj ovog èvora.\n"
+
+#: info/infodoc.c:70
+#, fuzzy
+msgid "1...9 Pick the first...ninth item in this node's menu.\n"
+msgstr " %-10s Odaberi prvu ... devetu stavku u èvorovom meniju.\n"
+
+#: info/infodoc.c:71
+#, fuzzy
+msgid "\\%-10[last-menu-item] Pick the last item in this node's menu.\n"
+msgstr "\\%-10[last-menu-item] Odaberi zadnju stavku u meniju èvora.\n"
+
+#: info/infodoc.c:72
+#, fuzzy
+msgid "\\%-10[menu-item] Pick a menu item specified by name.\n"
+msgstr " %-10s Odaberi stavku menija specificirane imenom.\n"
+
+#: info/infodoc.c:73
+#, fuzzy
+msgid "\\%-10[xref-item] Follow a cross reference specified by name.\n"
+msgstr "\\%-10[xref-item] Slijedi unakrsnu referencu. Èita ime reference.\n"
+
+#: info/infodoc.c:74
+#, fuzzy
+msgid "\\%-10[goto-node] Go to a node specified by name.\n"
+msgstr " %-10s Idi na èvor zadan imenom.\n"
+
+#: info/infodoc.c:76
+#, fuzzy
+msgid "\\%-10[search] Search forward for a specified string.\n"
+msgstr " %-10s Tra¾i prema naprijed zadani niz,\n"
+
+#: info/infodoc.c:77
+#, fuzzy
+msgid "\\%-10[search-previous] Search for previous occurrence.\n"
+msgstr ""
+"\\%-10[prev-node] Idi na prethodni (`previous') èvor u odnosu na ovaj.\n"
+
+#: info/infodoc.c:78
+#, fuzzy
+msgid "\\%-10[search-next] Search for next occurrence.\n"
+msgstr " %-10s Tra¾i zadani niz u indeks stavkama ove Info\n"
+
+#: info/infodoc.c:79
+#, fuzzy
+msgid ""
+"\\%-10[index-search] Search for a specified string in the index, and\n"
+" select the node referenced by the first entry found.\n"
+msgstr ""
+"\\%-10[index-search] Tra¾i zadani niz u indeksnim stavkama ove Info "
+"datoteke\n"
+" i selektiraj èvor referenciran prvom naðenom stavkom.\n"
+
+#: info/infodoc.c:81
+#, fuzzy
+msgid "\\%-10[abort-key] Cancel the current operation.\n"
+msgstr "Poni¹ti trenutnu operaciju"
+
+#: info/infodoc.c:89
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"Osnovne naredbe u Info prozorima\n"
+"********************************\n"
+
+#: info/infodoc.c:92
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s Napusti ovu pomoæ.\n"
+
+#: info/infodoc.c:93
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Potpuno zavr¹i s radom (Quit).\n"
+
+#: info/infodoc.c:94
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Pozovi Info priruènik.\n"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr " %-10s Idi na slijedeæi (`next') èvor u odnosu na ovaj.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr " %-10s Idi na prethodni (`previous') èvor u odnosu na ovaj.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s Idi navi¹e (`up') od ovog èvora.\n"
+
+#: info/infodoc.c:101
+#, fuzzy, c-format
+msgid ""
+" %-10s Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+"\\%-10[menu-item] Izaberi stavku menija zadanu imenom.\n"
+" Izabiranje stavke menija selektira drugi èvor.\n"
+
+#: info/infodoc.c:103
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr " %-10s Slijedi unakrsnu referencu. Èita ime reference.\n"
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr " %-10s Pomakni se do posljednjeg vidljivog èvora u ovom prozoru.\n"
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr " %-10s Preskoèi do slijedeæeg hipertekst linka unutar ovog èvora.\n"
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s Slijedi hipertekst link ispod kursora.\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr " %-10s Pomakni se na `directory' èvor. Ekvivalentno `g (DIR)'.\n"
+
+#: info/infodoc.c:108
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr " %-10s Idi na Top (vr¹ni) èvor. Ekvivalentno s `g Top'.\n"
+
+#: info/infodoc.c:110
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"Pomicanje unutar èvora:\n"
+"-----------------------\n"
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s 'Skrolaj' stranicu naprijed.\n"
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s 'Skrolaj' stranicu unazad.\n"
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s Idi na poèetak ovog èvora.\n"
+
+#: info/infodoc.c:115
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s Idi na kraj ovog èvora.\n"
+
+#: info/infodoc.c:116
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s 'Skrolaj' naprijed 1 redak.\n"
+
+#: info/infodoc.c:117
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s 'Skrolaj' unazad 1 redak.\n"
+
+#: info/infodoc.c:119
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"Druge naredbe:\n"
+"--------------\n"
+
+#: info/infodoc.c:121
+#, fuzzy, c-format
+msgid " %-10s Pick first...ninth item in node's menu.\n"
+msgstr " %-10s Odaberi prvu ... devetu stavku u èvorovom meniju.\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s Odaberi zadnju stavku u èvorovom meniju.\n"
+
+#: info/infodoc.c:125
+#, fuzzy, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr ""
+"\\%-10[index-search] Tra¾i zadani niz u indeksnim stavkama ove Info "
+"datoteke\n"
+" i selektiraj èvor referenciran prvom naðenom stavkom.\n"
+
+#: info/infodoc.c:127
+#, fuzzy, c-format
+msgid ""
+" %-10s Move to node specified by name.\n"
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+"\\%-10[goto-node] Pomakni se na èvor zadan imenom.\n"
+" Mo¾ete takoðer ukljuèiti ime datoteke, kao u (DATOTEKA)"
+"IME_ÈVORA.\n"
+
+#: info/infodoc.c:129
+#, fuzzy, c-format
+msgid ""
+" %-10s Search forward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+"\\%-10[search] Tra¾i unaprijed za zadanim nizom\n"
+" i selektiraj èvor u kojem je slijedeæa pojava niza naðena.\n"
+
+#: info/infodoc.c:131
+#, fuzzy, c-format
+msgid ""
+" %-10s Search backward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+"\\%-10[search] Tra¾i unaprijed za zadanim nizom\n"
+" i selektiraj èvor u kojem je slijedeæa pojava niza naðena.\n"
+
+#: info/infodoc.c:312
+msgid "The current search path is:\n"
+msgstr "Trenutni put pretra¾ivanja je:\n"
+
+#: info/infodoc.c:316
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"Naredbe raspolo¾ive u Info prozorima:\n"
+"\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"Naredbe raspolo¾ive u echo podruèju:\n"
+"\n"
+
+#: info/infodoc.c:343
+#, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+"Slijedeæe naredbe mogu biti pozvane pomoæu %s:\n"
+"\n"
+
+#: info/infodoc.c:347
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+"Slijedeæe naredbe ne mogu uopæe biti pozvane:\n"
+"\n"
+
+#: info/infodoc.c:477
+msgid "Display help message"
+msgstr "Ispi¹i poruku za pomoæ"
+
+#: info/infodoc.c:495
+msgid "Visit Info node `(info)Help'"
+msgstr "Posjeti Info èvor `(info)Help'"
+
+#: info/infodoc.c:633
+msgid "Print documentation for KEY"
+msgstr "Ispi¹i dokumentaciju za TIPKU"
+
+#: info/infodoc.c:645
+#, c-format
+msgid "Describe key: %s"
+msgstr "Opi¹i tipku: %s"
+
+#: info/infodoc.c:656
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s nije definiran."
+
+#: info/infodoc.c:672 info/infodoc.c:701
+#, c-format
+msgid "%s is undefined."
+msgstr "%s nije definiran."
+
+#: info/infodoc.c:722
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s je definiran kao %s."
+
+#: info/infodoc.c:1146
+msgid "Show what to type to execute a given command"
+msgstr "Poka¾i ¹to otipkati da se izvr¹i data naredba"
+
+#: info/infodoc.c:1150
+msgid "Where is command: "
+msgstr "Gdje je naredba: "
+
+#: info/infodoc.c:1172
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "`%s' nije niti na jednoj tipki"
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s mo¾e biti pozvan samo putem %s."
+
+#: info/infodoc.c:1183
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s mo¾e biti pozvan putem %s."
+
+#: info/infodoc.c:1188
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "Ne postoji funkcija `%s'"
+
+#: info/infodoc.c:96
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"Izabir drugih èvorova:\n"
+"----------------------\n"
+
+#: info/infokey.c:170
+msgid "incorrect number of arguments"
+msgstr "pogre¹an broj argumenata"
+
+#: info/infokey.c:201
+#, c-format
+msgid "cannot open input file `%s'"
+msgstr "ne mogu otvoriti ulaznu datoteku `%s'"
+
+#: info/infokey.c:215
+#, c-format
+msgid "cannot create output file `%s'"
+msgstr "ne mogu kreirati izlaznu datoteku `%s'"
+
+#: info/infokey.c:226
+#, c-format
+msgid "error writing to `%s'"
+msgstr "gre¹ka pri pisanju u `%s'"
+
+#: info/infokey.c:232
+#, c-format
+msgid "error closing output file `%s'"
+msgstr "gre¹ka pri zatvaranju izlazne datoteke `%s'"
+
+#: info/infokey.c:450
+msgid "key sequence too long"
+msgstr "niz tipaka predugaèak"
+
+#: info/infokey.c:529
+msgid "missing key sequence"
+msgstr "nedostaje niz tipaka"
+
+#: info/infokey.c:610
+msgid "NUL character (\\000) not permitted"
+msgstr "NUL znak (\\000) nije dozvoljen"
+
+#: info/infokey.c:641
+#, c-format
+msgid "NUL character (^%c) not permitted"
+msgstr "NUL znak (^%c) nije dozvoljen"
+
+#: info/infokey.c:665
+msgid "missing action name"
+msgstr "nedostaje ime akcije"
+
+# this needs to be clarified and verified against info program, since
+# I'm not sure what kind of section they're talking about
+#: info/infokey.c:681 info/infokey.c:756
+msgid "section too long"
+msgstr "predugaèki odlomak"
+
+#: info/infokey.c:688
+#, c-format
+msgid "unknown action `%s'"
+msgstr "nepoznata akcija `%s'"
+
+#: info/infokey.c:698
+msgid "action name too long"
+msgstr "predugaèko ime akcije"
+
+#: info/infokey.c:712
+#, c-format
+msgid "extra characters following action `%s'"
+msgstr "suvi¹ni znaci slijede akciju `%s'"
+
+#: info/infokey.c:723
+msgid "missing variable name"
+msgstr "nedostaje ime varijable"
+
+#: info/infokey.c:733
+msgid "missing `=' immediately after variable name"
+msgstr "nedostaje `=' odmah iza imena varijable"
+
+#: info/infokey.c:741
+msgid "variable name too long"
+msgstr "ime varijable predugaèko"
+
+#: info/infokey.c:765
+msgid "value too long"
+msgstr "predugaèka vrijednost"
+
+#: info/infokey.c:890
+#, c-format
+msgid "\"%s\", line %u: "
+msgstr "\"%s\", redak %u: "
+
+#: info/infokey.c:906
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [INPUT-FILE]\n"
+"\n"
+"Compile infokey source file to infokey file. Reads INPUT-FILE (default\n"
+"$HOME/.infokey) and writes compiled key file to (by default) $HOME/.info.\n"
+"\n"
+"Options:\n"
+" --output FILE output to FILE instead of $HOME/.info\n"
+" --help display this help and exit.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"Kori¹tenje: %s [OPCIJA]... [ULAZNA-DATOTEKA]\n"
+"\n"
+"Kompiliraj infokey izvornu datoteku u infokey datoteku. Èita ULAZNA-"
+"DATOTEKA\n"
+"(default $HOME/.infokey) i pi¹e kompiliranu key datoteku u (default)\n"
+"$HOME/.info.\n"
+"\n"
+"Opcije:\n"
+" --output DATOTEKA izlaz u DATOTEKA umjesto u $HOME/.info\n"
+" --help ispi¹i ovu pomoæ i zavr¹i s radom.\n"
+" --version ispi¹i ovu informaciju o verziji i zavr¹i s radom.\n"
+
+#: info/infomap.c:955
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "Ignoriram neispravnu infokey datoteku `%s' - premalena"
+
+#: info/infomap.c:958
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "Ignoriram neispravnu infokey datoteku `%s' - prevelika"
+
+#: info/infomap.c:971
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "Pogre¹ka pri èitanju infokey datoteke `%s' - prekratki read"
+
+#: info/infomap.c:990
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+"Neispravna infokey datoteka `%s' (pogre¹ni magic number) -- pokreni infokey "
+"da se obnovi"
+
+#: info/infomap.c:999
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr ""
+"Va¹a infokey datoteka `%s' je istekla -- pokrenite infokey da se obnovi"
+
+#: info/infomap.c:1015
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+"Neispravna infokey datoteka `%s' (bad section length) -- pokrenite infokey "
+"da se obnovi"
+
+#: info/infomap.c:1036
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr ""
+"Neispravna infokey datoteka `%s' (bad section code) -- pokrenite infokey da "
+"se obnovi"
+
+#: info/infomap.c:1171
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr ""
+"Pogre¹ni podaci u infokey datoteci -- neka povezivanja tipki zanemarena"
+
+#: info/infomap.c:1221
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr "Pogre¹ni podaci u infokey datoteci -- neke var postavke ignorirane"
+
+#: info/m-x.c:68
+msgid "Read the name of an Info command and describe it"
+msgstr "Proèitaj ime Info naredbe i opi¹i je"
+
+#: info/m-x.c:72
+msgid "Describe command: "
+msgstr "Opi¹i naredbu: "
+
+#: info/m-x.c:95
+msgid "Read a command name in the echo area and execute it"
+msgstr "Proèitaj ime naredbe u echo podruèju i izvr¹i je"
+
+#: info/m-x.c:139
+msgid "Cannot execute an `echo-area' command here."
+msgstr "Ne mogu izvr¹iti komandu za echo podruèje ovdje."
+
+#: info/m-x.c:153
+#, fuzzy, c-format
+msgid "Undefined command: %s"
+msgstr "Nepoznata naredba (%s)."
+
+#: info/m-x.c:159
+msgid "Set the height of the displayed window"
+msgstr "Postavi visinu prikazanog prozora"
+
+#: info/m-x.c:172
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Postavi velièinu screena na (%d): "
+
+#: info/makedoc.c:166 info/makedoc.c:174
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+" Izvorne datoteke prepuzane da se ukljuèi ova datoteka:\n"
+"\n"
+
+#: info/makedoc.c:556
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "Neuspjelo rukovanje datotekom %s.\n"
+
+#: info/nodemenu.c:30
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+"\n"
+"* Meni:\n"
+" (Datoteka)Èvor Redaka Vel. Sadr¾i datoteku\n"
+" -------------- ------ ---- ---------------"
+
+#: info/nodemenu.c:201
+msgid ""
+"Here is the menu of nodes you have recently visited.\n"
+"Select one from this menu, or use `\\[history-node]' in another window.\n"
+msgstr ""
+"Ovdje je popis èvorova koje ste nedavno posjetili.\n"
+"Odaberite jedan s menija, ili koristite `\\[history-node]' u drugom prozoru\n"
+
+#: info/nodemenu.c:223
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr "Naèini prozor sadr¾avajuæi meni svih dosad posjeæenih èvorova"
+
+#: info/nodemenu.c:303
+msgid "Select a node which has been previously visited in a visible window"
+msgstr "Izaberi èvor koji je prethodno bio posjeæen u vidljivi prozor"
+
+#: info/nodemenu.c:316
+msgid "Select visited node: "
+msgstr "Izaberi posjeæeni èvor: "
+
+#: info/nodemenu.c:336 info/session.c:2578
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "Referenca je nestala! (%s)."
+
+#: info/search.c:166
+#, c-format
+msgid "regexp error: %s"
+msgstr ""
+
+#: info/session.c:164
+#, c-format
+msgid ""
+"Welcome to Info version %s. Type \\[get-help-window] for help, \\[menu-item] "
+"for menu item."
+msgstr ""
+"Dobrodo¹li u Info verzija %s. Otipkajte \\[get-help-window] za pomoæ, "
+"\\[menu-item] za stavku menija."
+
+#: info/session.c:625
+msgid "Move down to the next line"
+msgstr "Pomakni se dolje to slijedeæeg retka"
+
+#: info/session.c:661
+msgid "Move up to the previous line"
+msgstr "Pomakni se gore do prethodnog retka"
+
+#: info/session.c:931
+msgid "Move to the end of the line"
+msgstr "Pomakni se do kraja retka"
+
+#: info/session.c:942
+msgid "Move to the start of the line"
+msgstr "Pomakni se na poèetak retka"
+
+#: info/session.c:1142
+msgid "Next"
+msgstr "Next"
+
+#: info/session.c:1158 info/session.c:1283
+msgid "No more nodes within this document."
+msgstr "Nema vi¹e èvorova u ovom dokumentu."
+
+#: info/session.c:1309
+msgid "No `Prev' for this node."
+msgstr "Nema `Prev' (prethodni) za ovaj èvor."
+
+#: info/session.c:1329
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr "Nema `Prev' ni `Up' za ovaj èvor unutar dokumenta."
+
+#: info/session.c:1391
+msgid "Move forwards or down through node structure"
+msgstr "Idi naprijed ili nani¾e kruz strukturu èvorova"
+
+#: info/session.c:1407
+msgid "Move backwards or up through node structure"
+msgstr "Idi unatrag ili gore kroz strukturu èvorova"
+
+#: info/session.c:1508
+msgid "Scroll forward in this window"
+msgstr "'Skrolaj' prema gore u ovom prozoru"
+
+#: info/session.c:1516
+msgid "Scroll forward in this window and set default window size"
+msgstr ""
+"'Skrolaj' prema dolje u ovom prozoru i postavi inicijalnu velièinu prozora"
+
+#: info/session.c:1524
+msgid "Scroll forward in this window staying within node"
+msgstr "'Skrolaj' prema dolje u ovom prozoru ostajuæi unutar èvora"
+
+#: info/session.c:1532
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr ""
+"'Skrolaj' prema dolje u ovom prozoru ostajuæi unutar èvora i postavi "
+"inicijalnu velièinu prozora"
+
+#: info/session.c:1540
+msgid "Scroll backward in this window"
+msgstr "'Skrolaj' prema gore u ovom prozoru"
+
+#: info/session.c:1548
+msgid "Scroll backward in this window and set default window size"
+msgstr ""
+"'Skrolaj' prema gore u ovom prozoru i postavi inicijalnu velièinu prozora"
+
+#: info/session.c:1557
+msgid "Scroll backward in this window staying within node"
+msgstr "'Skrolaj' prema gore u ovom prozoru ostajuæi unutar èvora"
+
+#: info/session.c:1565
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr ""
+"'Skrolaj' prema gore u ovom prozoru ostajuæi unutar èvora i postavi "
+"inicijalnu velièinu prozora"
+
+#: info/session.c:1573
+msgid "Move to the start of this node"
+msgstr "Pomakni se na poèetak trenutnog èvora"
+
+#: info/session.c:1580
+msgid "Move to the end of this node"
+msgstr "Pomakni se na kraj trenutnog èvora"
+
+#: info/session.c:1587
+msgid "Scroll down by lines"
+msgstr "'Skrolaj' dolje za redaka"
+
+#: info/session.c:1604
+msgid "Scroll up by lines"
+msgstr "'Skrolaj' gore za redaka"
+
+#: info/session.c:1622
+msgid "Scroll down by half screen size"
+msgstr "'Skrolaj' dolje za polovinu velièine ekrana"
+
+#: info/session.c:1648
+msgid "Scroll up by half screen size"
+msgstr "'Skrolaj' gore za polovinu velièine ekrana"
+
+#: info/session.c:1677
+msgid "Select the next window"
+msgstr "Selektiraj slijedeæi prozor"
+
+#: info/session.c:1716
+msgid "Select the previous window"
+msgstr "Selektiraj prethodni prozor"
+
+#: info/session.c:1767
+msgid "Split the current window"
+msgstr "Raspolovi trenutni prozor"
+
+#: info/session.c:1848
+msgid "Delete the current window"
+msgstr "Obri¹i trenutni prozor"
+
+#: info/session.c:1856
+msgid "Cannot delete a permanent window"
+msgstr "Ne mogu obrisati permanentni prozor"
+
+#: info/session.c:1888
+msgid "Delete all other windows"
+msgstr "Obri¹i sve ostale prozore"
+
+#: info/session.c:1934
+msgid "Scroll the other window"
+msgstr "'Skrolaj' drugi prozor"
+
+#: info/session.c:1955
+msgid "Scroll the other window backward"
+msgstr "'Skrolaj' drugi prozor unazad"
+
+#: info/session.c:1961
+msgid "Grow (or shrink) this window"
+msgstr "Poveæaj (ili smanji) ovaj prozor"
+
+#: info/session.c:1972
+msgid "Divide the available screen space among the visible windows"
+msgstr "Podijeli vidljivu povr¹inu ekrana izmeðu vidljivih prozora"
+
+#: info/session.c:1979
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "Promijeni stanje prelamanja linija u trenutnom prozoru"
+
+#: info/session.c:1986
+msgid "Toggle the usage of regular expressions in searches"
+msgstr ""
+
+#: info/session.c:1990
+msgid "Using regular expressions for searches."
+msgstr ""
+
+#: info/session.c:1991
+msgid "Using literal strings for searches."
+msgstr ""
+
+#: info/session.c:2162
+msgid "Select the Next node"
+msgstr "Prika¾i Next (slijedeæi) èvor"
+
+#: info/session.c:2170
+msgid "Select the Prev node"
+msgstr "Prika¾i Prev (prethodni) èvor"
+
+#: info/session.c:2178
+msgid "Select the Up node"
+msgstr "Prika¾i Up (gornji) èvor"
+
+#: info/session.c:2185
+msgid "Select the last node in this file"
+msgstr "Prika¾i posljednji èvor u ovoj datoteci"
+
+#: info/session.c:2212 info/session.c:2245
+msgid "This window has no additional nodes"
+msgstr "Ovaj prozor nema dodatnih èvorova"
+
+#: info/session.c:2218
+msgid "Select the first node in this file"
+msgstr "Prika¾i prvi èvor u ovoj datoteci"
+
+#: info/session.c:2252
+msgid "Select the last item in this node's menu"
+msgstr "Prika¾i zadnji èvor u ovoj datoteci"
+
+#: info/session.c:2258
+msgid "Select this menu item"
+msgstr "Selektiraj ovu stavku menija"
+
+#: info/session.c:2291
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "Nema %d stavaka u ovom meniju."
+
+#: info/session.c:2485 info/session.c:2486
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Stavka menija (%s): "
+
+#: info/session.c:2489
+msgid "Menu item: "
+msgstr "Stavka menija: "
+
+#: info/session.c:2496 info/session.c:2497
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Slijedi xref (%s): "
+
+#: info/session.c:2500
+msgid "Follow xref: "
+msgstr "Slijedi xref: "
+
+#: info/session.c:2629
+msgid "Read a menu item and select its node"
+msgstr "Èitaj stavku menija i selektiraj njen èvor"
+
+#: info/session.c:2637
+msgid "Read a footnote or cross reference and select its node"
+msgstr "Èitaj fusnotu ili referencu i selektiraj njezin èvor"
+
+#: info/session.c:2643
+msgid "Move to the start of this node's menu"
+msgstr "Idi na poèetak menija ovog èvora"
+
+#: info/session.c:2667
+msgid "Visit as many menu items at once as possible"
+msgstr "Posjeti ¹to je vi¹e moguæe stavki odjednom"
+
+#: info/session.c:2695
+msgid "Read a node name and select it"
+msgstr "Èitaj ime èvora i selektiraj ga"
+
+#: info/session.c:2750 info/session.c:2755
+msgid "Goto node: "
+msgstr "Idi na èvor: "
+
+#: info/session.c:2819
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "Nema menija u èvoru `%s'."
+
+#: info/session.c:2865
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "Nema stavke menija `%s' u èvoru `%s'."
+
+#: info/session.c:2895
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr "Ne mogu naæi èvor referenciran od `%s' u `%s'."
+
+#: info/session.c:2945
+msgid "Read a list of menus starting from dir and follow them"
+msgstr "Èitaj listu menija poèev¹i od dir i slijedi ih"
+
+#: info/session.c:2947
+msgid "Follow menus: "
+msgstr "Slijedi menije: "
+
+#: info/session.c:3140
+msgid "Find the node describing program invocation"
+msgstr "Pronaði èvor koji opisuje pozivanje programa"
+
+#: info/session.c:3142
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "Naði èvor pozivanja (Invocation) od [%s]: "
+
+#: info/session.c:3180
+msgid "Read a manpage reference and select it"
+msgstr "Proèitaj referentnu man stranicu i selektiraj je"
+
+#: info/session.c:3184
+msgid "Get Manpage: "
+msgstr "Dobavi man stranicu: "
+
+#: info/session.c:3214
+msgid "Select the node `Top' in this file"
+msgstr "Selektiraj èvor `Top' u ovoj datoteci"
+
+#: info/session.c:3220
+msgid "Select the node `(dir)'"
+msgstr "Selektiraj èvor `(dir)'"
+
+#: info/session.c:3237 info/session.c:3239
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Poni¹ti èvor (%s): "
+
+#: info/session.c:3291
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "Ne mogu poni¹titi èvor `%s'"
+
+#: info/session.c:3301
+msgid "Cannot kill the last node"
+msgstr "Ne mogu poni¹titi zadnji èvor"
+
+#: info/session.c:3387
+msgid "Select the most recently selected node"
+msgstr "Selektiraj najzadnji odabrani èvor"
+
+#: info/session.c:3393
+msgid "Kill this node"
+msgstr "Poni¹ti ovaj èvor"
+
+#: info/session.c:3401
+msgid "Read the name of a file and select it"
+msgstr "Proèitaj ime datoteke i selektiraj ga"
+
+#: info/session.c:3405
+msgid "Find file: "
+msgstr "Naði datoteku: "
+
+#: info/session.c:3422
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "Ne mogu naæi `%s'."
+
+#: info/session.c:3465 info/session.c:3583
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "Ne mogu kreirati izlaznu datoteku `%s'."
+
+#: info/session.c:3479 info/session.c:3601 info/session.c:3661
+msgid "Done."
+msgstr "Gotovo."
+
+#: info/session.c:3534
+#, c-format
+msgid "Writing node %s..."
+msgstr "Ispisujem èvor %s..."
+
+#: info/session.c:3610
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr ""
+"Propusti sadr¾aj ovog èvora kroz cjevovod (pipe) prema INFO_PRINT_COMMAND"
+
+#: info/session.c:3645
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "Ne mogu otvoriti cjevovod (pipe) prema `%s'."
+
+#: info/session.c:3651
+#, c-format
+msgid "Printing node %s..."
+msgstr "Ispisujem èvor %s..."
+
+#: info/session.c:3900
+msgid "Search continued from the end of the document."
+msgstr ""
+
+#: info/session.c:3905
+#, fuzzy
+msgid "Search continued from the beginning of the document."
+msgstr "Obri¹i tekst do poèetka retka"
+
+#: info/session.c:3922
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "Tra¾im poddatoteku %s ..."
+
+#: info/session.c:3979
+msgid "Read a string and search for it case-sensitively"
+msgstr "Èitaj niz znakova i kreni u potragu za njim (case-sensitive)"
+
+#: info/session.c:3986
+msgid "Read a string and search for it"
+msgstr "Èitaj niz znakova i potra¾i ga"
+
+#: info/session.c:3994
+msgid "Read a string and search backward for it"
+msgstr "Èitaj niz znakova i potra¾i ga unatrag"
+
+#: info/session.c:4030 info/session.c:4036
+#, fuzzy, c-format
+msgid "%s%s%s [%s]: "
+msgstr "%s%sza niz znakova [%s]: "
+
+#: info/session.c:4031 info/session.c:4037
+msgid "Regexp search"
+msgstr ""
+
+#: info/session.c:4032 info/session.c:4038
+#, fuzzy
+msgid " case-sensitively"
+msgstr " (case-sensitive) "
+
+#: info/session.c:4033 info/session.c:4039
+#, fuzzy
+msgid " backward"
+msgstr "Tra¾i unazad"
+
+#: info/session.c:4037
+msgid "Search"
+msgstr "Tra¾i"
+
+#: info/session.c:4079
+msgid "Search failed."
+msgstr "Pretra¾ivanje neuspjelo."
+
+#: info/session.c:4097
+msgid "Repeat last search in the same direction"
+msgstr "Ponovi zadnje pretra¾ivanje u istom pravcu"
+
+#: info/session.c:4100 info/session.c:4110
+msgid "No previous search string"
+msgstr "Nema prethodnog tra¾enog niza"
+
+#: info/session.c:4107
+msgid "Repeat last search in the reverse direction"
+msgstr "Ponovi zadnje pretra¾ivanje u suprotnom pravcu"
+
+#: info/session.c:4126 info/session.c:4132
+msgid "Search interactively for a string as you type it"
+msgstr "Tra¾i niz interaktivno kako ga tipkate"
+
+#: info/session.c:4212
+#, fuzzy
+msgid "Regexp I-search backward: "
+msgstr "I-pretraga unazad: "
+
+#: info/session.c:4213
+msgid "I-search backward: "
+msgstr "I-pretraga unazad: "
+
+#: info/session.c:4215
+#, fuzzy
+msgid "Regexp I-search: "
+msgstr "I-pretraga: "
+
+#: info/session.c:4216
+msgid "I-search: "
+msgstr "I-pretraga: "
+
+#: info/session.c:4241 info/session.c:4243
+msgid "Failing "
+msgstr "Neuspjela "
+
+#: info/session.c:4734
+msgid "Move to the previous cross reference"
+msgstr "Idi na prethodnu referencu"
+
+#: info/session.c:4752
+msgid "Move to the next cross reference"
+msgstr "Idi na slijedeæu referencu"
+
+#: info/session.c:4774
+msgid "Select reference or menu item appearing on this line"
+msgstr "Selektiraj referencu ili stavku menija koja se pojavljuje u retku"
+
+#: info/session.c:4797
+msgid "Cancel current operation"
+msgstr "Poni¹ti trenutnu operaciju"
+
+#: info/session.c:4804
+msgid "Quit"
+msgstr "Zavr¹i (Quit)"
+
+#: info/session.c:4813
+msgid "Move the cursor to a specific line of the window"
+msgstr "Pomakni kurzor na specificirani redak prozora"
+
+#: info/session.c:4845
+msgid "Redraw the display"
+msgstr "Osvje¾i prikaz"
+
+#: info/session.c:4882
+msgid "Quit using Info"
+msgstr "Zavr¹i kori¹tenje Info-a"
+
+#: info/session.c:4895
+msgid "Run command bound to this key's lowercase variant"
+msgstr "Izvr¹i naredbu povezanu s malim slovom varijantom ove tipke"
+
+#: info/session.c:4906
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "Nepoznata naredba (%s)."
+
+#: info/session.c:4909
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "\"%s\" je neispravno"
+
+#: info/session.c:4910
+#, fuzzy, c-format
+msgid "`%s' is invalid"
+msgstr "\"%s\" je neispravno"
+
+#: info/session.c:5125
+msgid "Add this digit to the current numeric argument"
+msgstr "Dodaj ovu znamenku trenutnom numerièkom argumentu"
+
+#: info/session.c:5134
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "Zapoèni (ili pomno¾i s 4) trenutni numerièki argument"
+
+#: info/session.c:5149
+msgid "Internally used by \\[universal-argument]"
+msgstr "Interno kori¹ten od \\[universal-argument]"
+
+#: info/tilde.c:336
+#, c-format
+msgid "readline: Out of virtual memory!\n"
+msgstr "readline: Premalo virtualne memorije!\n"
+
+#: info/variables.c:37
+msgid "When \"On\", footnotes appear and disappear automatically"
+msgstr "Kada je \"On\", fusnote se pojavljuju i nestaju automatski"
+
+#: info/variables.c:41
+msgid "When \"On\", creating or deleting a window resizes other windows"
+msgstr ""
+"Kada je \"On\", kreiranje ili zatvaranje prozora mijenja velièinu drugih "
+"prozora"
+
+#: info/variables.c:45
+msgid "When \"On\", flash the screen instead of ringing the bell"
+msgstr "Kada je \"On\", bljesni ekranom umjesto zvonjenja zvona"
+
+#: info/variables.c:49
+msgid "When \"On\", errors cause the bell to ring"
+msgstr "Kada je \"On\", gre¹ke pruzroèuju zvon zvona"
+
+#: info/variables.c:53
+msgid "When \"On\", Info garbage collects files which had to be uncompressed"
+msgstr ""
+"Kada je \"On\", Info radi 'garbage collection' s datotekama koje je trebalo "
+"odkompresirati"
+
+#: info/variables.c:56
+msgid "When \"On\", the portion of the matched search string is highlighted"
+msgstr "Kada je \"On\", dio znakovnog niza koji se podudara je osvijetljen"
+
+#: info/variables.c:60
+msgid "Controls what happens when scrolling is requested at the end of a node"
+msgstr "Kontrolira ¹to se dogaða kad se skrolanje tra¾i na kraju èvora"
+
+#: info/variables.c:65
+msgid "Same as scroll-behaviour"
+msgstr ""
+
+#: info/variables.c:69
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr "Broj redaka koliko treba skrolati kad se kurzor pomakne izvan prozora"
+
+#: info/variables.c:73
+msgid "Controls whether scroll-behavior affects cursor movement commands"
+msgstr ""
+
+#: info/variables.c:77
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr "Kada je \"On\", Info prihvaæa i prikazuje ISO Latin znakove"
+
+#: info/variables.c:81
+#, fuzzy
+msgid ""
+"What to do when a scrolling command is issued at the end of the last node"
+msgstr "Kontrolira ¹to se dogaða kad se skrolanje tra¾i na kraju èvora"
+
+#: info/variables.c:88
+msgid "Explain the use of a variable"
+msgstr "Obja¹njava kori¹tenje varijable"
+
+#: info/variables.c:94
+msgid "Describe variable: "
+msgstr "Opi¹i varijablu: "
+
+#: info/variables.c:113
+msgid "Set the value of an Info variable"
+msgstr "Postavi vrijednost info varijable"
+
+#: info/variables.c:119
+msgid "Set variable: "
+msgstr "Postavi varijablu: "
+
+#: info/variables.c:137
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "Postavi %s na vrijednost (%d): "
+
+#: info/variables.c:178
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "Postavi %s na vrijednost (%s): "
+
+#: info/window.c:1026
+msgid "--*** Tags out of Date ***"
+msgstr "--*** Tagovima istekao rok trajanja ***"
+
+#: info/window.c:1037
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), redaka ----,"
+
+#: info/window.c:1044
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d redaka --%s--"
+
+#: info/window.c:1048
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d redaka --%s--"
+
+#: info/window.c:1055
+#, c-format
+msgid " Subfile: %s"
+msgstr " Poddatoteka: %s"
+
+#: install-info/install-info.c:221
+#, c-format
+msgid "%s: warning: "
+msgstr ""
+
+#: install-info/install-info.c:270
+#, c-format
+msgid " for %s"
+msgstr ""
+
+#: install-info/install-info.c:500
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr ""
+
+#: install-info/install-info.c:508
+#, c-format
+msgid "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+msgstr ""
+
+#: install-info/install-info.c:510
+msgid "Add or remove entries in INFO-FILE from the Info directory DIR-FILE."
+msgstr ""
+
+#: install-info/install-info.c:513
+msgid ""
+"Options:\n"
+" --debug report what is being done.\n"
+" --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+" don't insert any new entries.\n"
+" --description=TEXT the description of the entry is TEXT; used with\n"
+" the --name option to become synonymous with the\n"
+" --entry option.\n"
+" --dir-file=NAME specify file name of Info directory file;\n"
+" equivalent to using the DIR-FILE argument.\n"
+" --dry-run same as --test."
+msgstr ""
+
+#: install-info/install-info.c:525
+msgid ""
+" --entry=TEXT insert TEXT as an Info directory entry.\n"
+" TEXT is written as an Info menu item line followed\n"
+" by zero or more extra lines starting with "
+"whitespace.\n"
+" If you specify more than one entry, all are added.\n"
+" If you don't specify any entries, they are determined\n"
+" from information in the Info file itself.\n"
+" When removing, TEXT specifies the entry to remove.\n"
+" TEXT is only removed as a last resort, if the\n"
+" entry as determined from the Info file is not "
+"present,\n"
+" and the basename of the Info file isn't found either."
+msgstr ""
+
+#: install-info/install-info.c:537
+msgid ""
+" --help display this help and exit.\n"
+" --info-dir=DIR same as --dir-file=DIR/dir.\n"
+" --info-file=FILE specify Info file to install in the directory;\n"
+" equivalent to using the INFO-FILE argument.\n"
+" --item=TEXT same as --entry=TEXT.\n"
+" --keep-old do not replace entries, or remove empty sections.\n"
+" --menuentry=TEXT same as --name=TEXT.\n"
+" --name=TEXT the name of the entry is TEXT; used with --description\n"
+" to become synonymous with the --entry option.\n"
+" --no-indent do not format new entries in the DIR file.\n"
+" --quiet suppress warnings."
+msgstr ""
+
+#: install-info/install-info.c:550
+msgid ""
+" --regex=R put this file's entries in all sections that match the\n"
+" regular expression R (ignoring case).\n"
+" --remove same as --delete.\n"
+" --remove-exactly only remove if the info file name matches exactly;\n"
+" suffixes such as .info and .gz are not ignored.\n"
+" --section=SEC put entries in section SEC of the directory.\n"
+" If you specify more than one section, all the entries\n"
+" are added in each of the sections.\n"
+" If you don't specify any sections, they are "
+"determined\n"
+" from information in the Info file itself.\n"
+" --section R SEC equivalent to --regex=R --section=SEC --add-once."
+msgstr ""
+
+#: install-info/install-info.c:563
+msgid ""
+" --silent suppress warnings.\n"
+" --test suppress updating of DIR-FILE.\n"
+" --version display version information and exit."
+msgstr ""
+
+#: install-info/install-info.c:570
+#, fuzzy
+msgid ""
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+"Izvje¹taje o bugovima molimo slati emailom na bug-texinfo@gnu.org\n"
+"(na engleskom), generalna pitanja i diskusije na help-texinfo@gnu.org.\n"
+"Texinfo matièna stranica: http://www.gnu.org/software/texinfo/\n"
+"Pitanja i kritike glede translacije slati na adresu lokalizacija@linux.hr."
+
+#: install-info/install-info.c:597
+#, c-format
+msgid ""
+"This is the file .../info/dir, which contains the\n"
+"topmost node of the Info hierarchy, called (dir)Top.\n"
+"The first time you invoke Info you start off looking at this node.\n"
+"\n"
+"%s\tThis is the top of the INFO tree\n"
+"\n"
+" This (the Directory node) gives a menu of major topics.\n"
+" Typing \"q\" exits, \"?\" lists all Info commands, \"d\" returns here,\n"
+" \"h\" gives a primer for first-timers,\n"
+" \"mEmacs<Return>\" visits the Emacs manual, etc.\n"
+"\n"
+" In Emacs, you can click mouse button 2 on a menu item or cross reference\n"
+" to select it.\n"
+"\n"
+"%s\n"
+msgstr ""
+
+#: install-info/install-info.c:622
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr ""
+
+#: install-info/install-info.c:715
+#, c-format
+msgid "%s: empty file"
+msgstr ""
+
+#: install-info/install-info.c:1046 install-info/install-info.c:1086
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr ""
+
+#: install-info/install-info.c:1081
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr ""
+
+#: install-info/install-info.c:1946 install-info/install-info.c:1956
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr ""
+
+#: install-info/install-info.c:2036
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr ""
+
+#: install-info/install-info.c:2069
+#, c-format
+msgid "Extra regular expression specified, ignoring `%s'"
+msgstr ""
+
+#: install-info/install-info.c:2081
+#, c-format
+msgid "Error in regular expression `%s': %s"
+msgstr ""
+
+#: install-info/install-info.c:2139
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr ""
+
+#: install-info/install-info.c:2143
+msgid "No input file specified; try --help for more information."
+msgstr ""
+
+#: install-info/install-info.c:2146
+msgid "No dir file specified; try --help for more information."
+msgstr ""
+
+#: install-info/install-info.c:2288
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr ""
+
+#: install-info/install-info.c:2536
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr ""
+
+#: lib/xexit.c:54
+msgid "ferror on stdout\n"
+msgstr ""
+
+#: lib/xexit.c:59
+msgid "fflush error on stdout\n"
+msgstr ""
+
+#: makeinfo/cmds.c:582 makeinfo/cmds.c:604
+#, c-format
+msgid "arguments to @%s ignored"
+msgstr ""
+
+#: makeinfo/cmds.c:779
+msgid "January"
+msgstr ""
+
+#: makeinfo/cmds.c:779
+msgid "February"
+msgstr ""
+
+#: makeinfo/cmds.c:779
+msgid "March"
+msgstr ""
+
+#: makeinfo/cmds.c:779
+msgid "April"
+msgstr ""
+
+#: makeinfo/cmds.c:779
+msgid "May"
+msgstr ""
+
+#: makeinfo/cmds.c:780
+msgid "June"
+msgstr ""
+
+#: makeinfo/cmds.c:780
+msgid "July"
+msgstr ""
+
+#: makeinfo/cmds.c:780
+msgid "August"
+msgstr ""
+
+#: makeinfo/cmds.c:780
+msgid "September"
+msgstr ""
+
+#: makeinfo/cmds.c:780
+msgid "October"
+msgstr ""
+
+#: makeinfo/cmds.c:781
+msgid "November"
+msgstr ""
+
+#: makeinfo/cmds.c:781
+msgid "December"
+msgstr ""
+
+#: makeinfo/cmds.c:1131
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr ""
+
+#: makeinfo/cmds.c:1174
+msgid "@sc argument all uppercase, thus no effect"
+msgstr ""
+
+#: makeinfo/cmds.c:1229
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr ""
+
+#: makeinfo/cmds.c:1269
+msgid "end of file inside verb block"
+msgstr ""
+
+#: makeinfo/cmds.c:1277
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr ""
+
+#: makeinfo/cmds.c:1308
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+
+#: makeinfo/cmds.c:1504
+#, c-format
+msgid "%c%s is obsolete"
+msgstr ""
+
+#: makeinfo/cmds.c:1612
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr ""
+
+#: makeinfo/cmds.c:2023 makeinfo/footnote.c:81
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr ""
+
+#: makeinfo/cmds.c:2033 makeinfo/makeinfo.c:4317
+msgid "asis"
+msgstr ""
+
+#: makeinfo/cmds.c:2035 makeinfo/cmds.c:2065 makeinfo/makeinfo.c:4319
+msgid "none"
+msgstr ""
+
+#: makeinfo/cmds.c:2049
+#, c-format
+msgid "Bad argument to @%s"
+msgstr ""
+
+#: makeinfo/cmds.c:2063
+msgid "insert"
+msgstr ""
+
+#: makeinfo/cmds.c:2079
+#, c-format
+msgid "Bad argument to @%s: %s"
+msgstr ""
+
+#: makeinfo/cmds.c:2162
+#, c-format
+msgid "Expected @%s on or off, not `%s'"
+msgstr ""
+
+#: makeinfo/cmds.c:2182
+#, c-format
+msgid "Only @%s 10 or 11 is supported, not `%s'"
+msgstr ""
+
+#: makeinfo/defun.c:83
+msgid "Missing `}' in @def arg"
+msgstr ""
+
+#: makeinfo/defun.c:711
+#, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr ""
+
+#: makeinfo/files.c:434
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr ""
+
+#: makeinfo/files.c:637
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr ""
+
+#: makeinfo/files.c:645
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr ""
+
+#: makeinfo/files.c:693
+msgid "Output buffer not empty."
+msgstr ""
+
+#: makeinfo/float.c:181
+#, c-format
+msgid "Requested float type `%s' not previously used"
+msgstr ""
+
+#: makeinfo/float.c:376 makeinfo/float.c:382 makeinfo/index.c:959
+#: makeinfo/index.c:965
+msgid "See "
+msgstr ""
+
+#: makeinfo/footnote.c:149
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr ""
+
+#: makeinfo/footnote.c:164
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr ""
+
+#: makeinfo/footnote.c:197
+msgid "Footnote defined without parent node"
+msgstr ""
+
+#: makeinfo/footnote.c:209
+msgid "Footnotes inside footnotes are not allowed"
+msgstr ""
+
+#: makeinfo/footnote.c:301 makeinfo/index.c:187
+msgid "Footnotes"
+msgstr ""
+
+#: makeinfo/html.c:91
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr ""
+
+#: makeinfo/html.c:180
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr ""
+
+#: makeinfo/html.c:426
+msgid "[unexpected] no html tag to pop"
+msgstr ""
+
+#: makeinfo/html.c:800
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr ""
+
+#: makeinfo/index.c:167
+#, c-format
+msgid "Unknown index `%s'"
+msgstr ""
+
+#: makeinfo/index.c:232
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr ""
+
+#: makeinfo/index.c:410
+#, c-format
+msgid "Index `%s' already exists"
+msgstr ""
+
+#: makeinfo/index.c:453
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr ""
+
+#: makeinfo/index.c:676
+msgid "(line )"
+msgstr ""
+
+#: makeinfo/index.c:684
+#, c-format
+msgid "(line %*d)"
+msgstr ""
+
+#: makeinfo/index.c:765
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr ""
+
+#: makeinfo/index.c:834
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr ""
+
+#: makeinfo/index.c:837 makeinfo/index.c:873
+msgid "(outside of any node)"
+msgstr ""
+
+#: makeinfo/insertion.c:161
+msgid "@item not allowed in argument to @itemize"
+msgstr ""
+
+#: makeinfo/insertion.c:242
+msgid "Broken-Type in insertion_type_pname"
+msgstr ""
+
+#: makeinfo/insertion.c:338
+msgid "Enumeration stack overflow"
+msgstr ""
+
+#: makeinfo/insertion.c:370
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr ""
+
+#: makeinfo/insertion.c:639
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr ""
+
+#: makeinfo/insertion.c:727
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr ""
+
+#: makeinfo/insertion.c:981
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr ""
+
+#: makeinfo/insertion.c:1349
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr ""
+
+#: makeinfo/insertion.c:1618
+#, c-format
+msgid "%s requires letter or digit"
+msgstr ""
+
+#: makeinfo/insertion.c:1718
+msgid "end of file inside verbatim block"
+msgstr ""
+
+#: makeinfo/insertion.c:1942
+#, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr ""
+
+#: makeinfo/insertion.c:1978
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr ""
+
+#: makeinfo/insertion.c:1979
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr ""
+
+#: makeinfo/insertion.c:1991
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr ""
+
+#: makeinfo/insertion.c:2047
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr ""
+
+#: makeinfo/insertion.c:2061
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr ""
+
+#: makeinfo/insertion.c:2092
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr ""
+
+#: makeinfo/insertion.c:2097
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr ""
+
+#: makeinfo/insertion.c:2103
+#, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr ""
+
+#: makeinfo/insertion.c:2200
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr ""
+
+#: makeinfo/insertion.c:2209
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr ""
+
+#: makeinfo/insertion.c:2383
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr ""
+
+#: makeinfo/lang.c:1218
+#, c-format
+msgid "no default territory known for language `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:1281
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr ""
+
+#: makeinfo/lang.c:1399
+#, fuzzy, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "%s: nepoznata opcija `%c%s'\n"
+
+#: makeinfo/lang.c:1407
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr ""
+
+#: makeinfo/lang.c:1492
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:1800
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr ""
+
+#: makeinfo/lang.c:1804
+#, c-format
+msgid "%c%s expects a single character `i' or `j' as argument"
+msgstr ""
+
+#: makeinfo/macro.c:128
+#, c-format
+msgid "macro `%s' previously defined"
+msgstr ""
+
+#: makeinfo/macro.c:132
+#, c-format
+msgid "here is the previous definition of `%s'"
+msgstr ""
+
+#: makeinfo/macro.c:359
+#, c-format
+msgid "\\ in macro expansion followed by `%s' instead of parameter name"
+msgstr ""
+
+#: makeinfo/macro.c:401
+#, c-format
+msgid "Macro `%s' called on line %d with too many args"
+msgstr ""
+
+#: makeinfo/macro.c:580
+#, c-format
+msgid "%cend macro not found"
+msgstr ""
+
+#: makeinfo/macro.c:591
+msgid "@allow-recursion is deprecated; please use @rmacro instead"
+msgstr ""
+
+#: makeinfo/macro.c:606
+msgid "@quote-arg is deprecated; arguments are quoted by default"
+msgstr ""
+
+#: makeinfo/macro.c:649
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:188
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:306
+#, c-format
+msgid "%s:%d: warning: "
+msgstr ""
+
+#: makeinfo/makeinfo.c:325 makeinfo/makeinfo.c:2340
+#, c-format
+msgid "Misplaced %c"
+msgstr ""
+
+#: makeinfo/makeinfo.c:344
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:347
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:350
+msgid ""
+"Translate Texinfo source documentation to various other formats, by default\n"
+"Info files suitable for reading online with Emacs or standalone GNU Info.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:354
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\n"
+" --document-language=STR locale to use in translating Texinfo keywords\n"
+" for the output document (default C).\n"
+" --force preserve output even if errors.\n"
+" --help display this help and exit.\n"
+" --no-validate suppress node cross-reference validation.\n"
+" --no-warn suppress warnings (but not errors).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:369
+#, no-wrap
+msgid ""
+"Output format selection (default is to produce Info):\n"
+" --docbook output Docbook XML rather than Info.\n"
+" --html output HTML rather than Info.\n"
+" --xml output Texinfo XML rather than Info.\n"
+" --plaintext output plain text rather than Info.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:377
+msgid ""
+"General output options:\n"
+" -E, --macro-expand=FILE output macro-expanded source to FILE,\n"
+" ignoring any @setfilename.\n"
+" --no-headers suppress node separators, Node: lines, and "
+"menus\n"
+" from Info output (thus producing plain "
+"text)\n"
+" or from HTML (thus producing shorter "
+"output);\n"
+" also, write to standard output by default.\n"
+" --no-split suppress the splitting of Info or HTML "
+"output,\n"
+" generate only one output file.\n"
+" --number-sections output chapter and sectioning numbers.\n"
+" -o, --output=FILE output to FILE (or directory if split HTML).\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:391
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --disable-encoding do not output accented and special characters\n"
+" in Info output based on @documentencoding.\n"
+" --enable-encoding override --disable-encoding (default).\n"
+" --fill-column=NUM break Info lines at NUM characters (default %"
+"d).\n"
+" --footnote-style=STYLE output footnotes in Info according to STYLE:\n"
+" `separate' to put them in their own node;\n"
+" `end' to put them at the end of the node, "
+"in\n"
+" which they are defined (this is the "
+"default).\n"
+" --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %"
+"d).\n"
+" If VAL is `none', do not indent; if VAL is\n"
+" `asis', preserve existing indentation.\n"
+" --split-size=NUM split Info files at size NUM (default %d).\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:409
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+" --css-ref=URL generate reference to a CSS file.\n"
+" --internal-links=FILE produce list of internal links in FILE.\n"
+" --transliterate-file-names\n"
+" produce file names in ASCII transliteration.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:419
+#, c-format
+msgid ""
+"Options for XML and Docbook:\n"
+" --output-indent=VAL indent XML elements by VAL spaces (default %"
+"d).\n"
+" If VAL is 0, ignorable whitespace is "
+"dropped.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:426
+msgid ""
+"Input file options:\n"
+" --commands-in-node-names allow @ commands in node names.\n"
+" -D VAR define the variable VAR, as with @set.\n"
+" -I DIR append DIR to the @include search path.\n"
+" -P DIR prepend DIR to the @include search path.\n"
+" -U VAR undefine the variable VAR, as with @clear.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:435
+msgid ""
+"Conditional processing in input:\n"
+" --ifdocbook process @ifdocbook and @docbook even if\n"
+" not generating Docbook.\n"
+" --ifhtml process @ifhtml and @html even if not generating HTML.\n"
+" --ifinfo process @ifinfo even if not generating Info.\n"
+" --ifplaintext process @ifplaintext even if not generating plain text.\n"
+" --iftex process @iftex and @tex; implies --no-split.\n"
+" --ifxml process @ifxml and @xml.\n"
+" --no-ifdocbook do not process @ifdocbook and @docbook text.\n"
+" --no-ifhtml do not process @ifhtml and @html text.\n"
+" --no-ifinfo do not process @ifinfo text.\n"
+" --no-ifplaintext do not process @ifplaintext text.\n"
+" --no-iftex do not process @iftex and @tex text.\n"
+" --no-ifxml do not process @ifxml and @xml text.\n"
+"\n"
+" Also, for the --no-ifFORMAT options, do process @ifnotFORMAT text.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:454
+msgid ""
+" The defaults for the @if... conditionals depend on the output format:\n"
+" if generating HTML, --ifhtml is on and the others are off;\n"
+" if generating Info, --ifinfo is on and the others are off;\n"
+" if generating plain text, --ifplaintext is on and the others are off;\n"
+" if generating XML, --ifxml is on and the others are off.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:462
+msgid ""
+"Examples:\n"
+" makeinfo foo.texi write Info to foo's @setfilename\n"
+" makeinfo --html foo.texi write HTML to @setfilename\n"
+" makeinfo --xml foo.texi write Texinfo XML to @setfilename\n"
+" makeinfo --docbook foo.texi write DocBook XML to @setfilename\n"
+" makeinfo --no-headers foo.texi write plain text to standard "
+"output\n"
+"\n"
+" makeinfo --html --no-headers foo.texi write html without node lines, "
+"menus\n"
+" makeinfo --number-sections foo.texi write Info with numbered sections\n"
+" makeinfo --no-split foo.texi write one Info file however big\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:622
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:670 makeinfo/makeinfo.c:696 makeinfo/makeinfo.c:720
+#: makeinfo/makeinfo.c:780
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:683
+#, fuzzy, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "Ne mogu kreirati izlaznu datoteku `%s'."
+
+#: makeinfo/makeinfo.c:688
+#, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:733
+#, fuzzy, c-format
+msgid "%s: could not open internal links output `%s'"
+msgstr "Ne mogu kreirati izlaznu datoteku `%s'."
+
+#: makeinfo/makeinfo.c:738
+#, c-format
+msgid "%s: ignoring second internal links output `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:751
+#, c-format
+msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:769
+#, c-format
+msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:844
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1041 makeinfo/makeinfo.c:4166
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1044
+#, c-format
+msgid "Expected `%s'"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1521
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1567
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1647
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1677
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1744
+#, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1799
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1818
+#, c-format
+msgid ""
+"%s: Removing internal links output file `%s' due to errors; use --force to "
+"preserve.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2113
+#, c-format
+msgid "Unknown command `%s'"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2135
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2394
+#, c-format
+msgid "%c%s expected braces"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2407
+msgid "Unmatched }"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2455
+msgid "NO_NAME!"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2476
+#, c-format
+msgid "%c%s missing close brace"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3482
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3488
+#, fuzzy, c-format
+msgid "No such file `%s'"
+msgstr "Nema menija u èvoru `%s'."
+
+#: makeinfo/makeinfo.c:3624
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3633
+msgid "@image missing filename argument"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3851
+#, c-format
+msgid "undefined flag: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3852
+#, c-format
+msgid "{No value for `%s'}"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3904
+#, c-format
+msgid "%c%s requires a name"
+msgstr ""
+
+#: makeinfo/makeinfo.c:4010
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:4258
+#, c-format
+msgid "`%.40s...' is too long for expansion; not expanded"
+msgstr ""
+
+#: makeinfo/multi.c:116
+msgid "Missing } in @multitable template"
+msgstr ""
+
+#: makeinfo/multi.c:260
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr ""
+
+#: makeinfo/multi.c:400
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr ""
+
+#: makeinfo/multi.c:563
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr ""
+
+#: makeinfo/multi.c:592
+msgid "ignoring @tab outside of multitable"
+msgstr ""
+
+#: makeinfo/multi.c:640
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr ""
+
+#: makeinfo/multi.c:643
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr ""
+
+#: makeinfo/node.c:279
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr ""
+
+#: makeinfo/node.c:647
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr ""
+
+#: makeinfo/node.c:714
+#, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr ""
+
+#: makeinfo/node.c:878
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr ""
+
+#: makeinfo/node.c:919 makeinfo/node.c:1163
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr ""
+
+#: makeinfo/node.c:922
+msgid "This @anchor command ignored; references to it will not work"
+msgstr ""
+
+#: makeinfo/node.c:924 makeinfo/node.c:1166
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr ""
+
+#: makeinfo/node.c:954
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr ""
+
+#: makeinfo/node.c:1160
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr ""
+
+#: makeinfo/node.c:1165
+msgid "@anchor command ignored; references to it will not work"
+msgstr ""
+
+#: makeinfo/node.c:1362
+#, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1462
+#, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1465
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr ""
+
+#: makeinfo/node.c:1520
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr ""
+
+#: makeinfo/node.c:1524
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr ""
+
+#: makeinfo/node.c:1536
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1605
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr ""
+
+#: makeinfo/node.c:1637
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr ""
+
+#: makeinfo/node.c:1727
+#, c-format
+msgid "Removing %s\n"
+msgstr ""
+
+#: makeinfo/node.c:1731
+#, fuzzy, c-format
+msgid "Can't remove file `%s': %s"
+msgstr "ne mogu kreirati izlaznu datoteku `%s'"
+
+#: makeinfo/sectioning.c:122
+#, c-format
+msgid "Appendix %c"
+msgstr ""
+
+#: makeinfo/sectioning.c:467
+#, c-format
+msgid "Internal error (search_sectioning) `%s'!"
+msgstr ""
+
+#: makeinfo/sectioning.c:563
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr ""
+
+#: makeinfo/sectioning.c:624
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr ""
+
+#: makeinfo/sectioning.c:640
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr ""
+
+#: makeinfo/sectioning.c:648
+#, c-format
+msgid "Here is the %ctop node"
+msgstr ""
+
+#: makeinfo/sectioning.c:664
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr ""
+
+#: makeinfo/xml.c:1669
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr ""
+
+#: makeinfo/xml.c:2014
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+
+#: makeinfo/xml.c:2150
+msgid "of"
+msgstr ""
+
+#: makeinfo/xml.c:2155
+msgid "on"
+msgstr ""
+
+#: makeinfo/xref.c:127
+msgid "First argument to cross-reference may not be empty"
+msgstr ""
+
+#: makeinfo/xref.c:252
+#, c-format
+msgid "Empty file name for HTML cross reference in `%s'"
+msgstr ""
+
+#: makeinfo/xref.c:387
+msgid "End of file reached while looking for `.' or `,'"
+msgstr ""
+
+#: makeinfo/xref.c:390
+#, c-format
+msgid "`.' or `,' must follow @%s, not `%c'"
+msgstr ""
+
+#: makeinfo/xref.c:392
+#, fuzzy
+msgid "for cross-references in parentheses, use @pxref"
+msgstr "Nema unakrsnih referenci u ovom èvoru."
+
+#: makeinfo/xref.c:435
+msgid "First argument to @inforef may not be empty"
+msgstr ""
+
+#: util/texindex.c:223
+msgid "display this help and exit"
+msgstr ""
+
+#: util/texindex.c:225
+msgid "send output to FILE"
+msgstr ""
+
+#: util/texindex.c:227
+msgid "display version information and exit"
+msgstr ""
+
+#: util/texindex.c:237
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr ""
+
+#: util/texindex.c:238
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr ""
+
+#: util/texindex.c:241
+#, c-format
+msgid "Usually FILE... is specified as `foo.%c%c' for a document `foo.texi'.\n"
+msgstr ""
+
+#: util/texindex.c:243
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+
+#: util/texindex.c:743
+#, c-format
+msgid "failure reopening %s"
+msgstr ""
+
+#: util/texindex.c:758 util/texindex.c:786
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr ""
+
+#: util/texindex.c:993
+#, c-format
+msgid "No page number in %s"
+msgstr ""
+
+#: util/texindex.c:1066
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr ""
+
+#~ msgid ""
+#~ "\\%-10[search] Search forward for a specified string\n"
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr ""
+#~ "\\%-10[search] Tra¾i unaprijed za zadanim nizom\n"
+#~ " i selektiraj èvor u kojem je slijedeæa pojava niza naðena.\n"
+
+#~ msgid ""
+#~ "\\%-10[goto-node] Move to node specified by name.\n"
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ msgstr ""
+#~ "\\%-10[goto-node] Pomakni se na èvor zadan imenom.\n"
+#~ " Mo¾ete takoðer ukljuèiti ime datoteke, kao u (DATOTEKA)"
+#~ "IME_ÈVORA.\n"
+
+#, fuzzy
+#~ msgid "\\%-10[next-node] Move to the next node of current section.\n"
+#~ msgstr ""
+#~ "\\%-10[next-node] Idi na slijedeæi (`next') èvor u odnosu na ovaj.\n"
+
+#~ msgid ""
+#~ "\\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+#~ "node] (DIR)'.\n"
+#~ msgstr ""
+#~ "\\%-10[dir-node] Pomakni se na `directory' èvor. Ekvivalentno `\\[goto-"
+#~ "node] (DIR)'.\n"
+
+#~ msgid ""
+#~ "\\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] "
+#~ "Top'.\n"
+#~ msgstr ""
+#~ "\\%-10[top-node] Idi na Top (vr¹ni) èvor. Ekvivalentno `\\[goto-node] "
+#~ "Top'.\n"
+
+#, fuzzy
+#~ msgid "\\%-10[scroll-forward-page-only] Scroll forward within this node.\n"
+#~ msgstr "\\%-10[scroll-forward] 'Skrolaj' naprijed 1 redak.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "\\%-10[scroll-backward-page-only] Scroll backward within this node.\n"
+#~ msgstr "\\%-10[scroll-backward] 'Skrolaj' unazad 1 redak.\n"
+
+#~ msgid ""
+#~ "\\%-10[search-backward] Search backward for a specified string\n"
+#~ " and select the node in which the previous occurrence is "
+#~ "found.\n"
+#~ msgstr ""
+#~ "\\%-10[search-backward] Tra¾i unazad zadani niz\n"
+#~ " i selektiraj èvor u kojem je slijedeæa pojava niza naðena.\n"
+
+#~ msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+#~ msgstr ""
+#~ "--- Upotrijebi `\\[history-node]' ili `\\[kill-node]' za izlaz ---\n"
+
+#, fuzzy
+#~ msgid "\\%-10[move-to-prev-xref] Skip to previous hypertext link [*].\n"
+#~ msgstr ""
+#~ "\\%-10[move-to-prev-xref] Preskoèi do slijedeæeg hipertekst linka unutar "
+#~ "ovog èvora.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]... [MENU-ITEM...]\n"
+#~ "\n"
+#~ "Read documentation in Info format.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --apropos=STRING look up STRING in all indices of all "
+#~ "manuals.\n"
+#~ " -d, --directory=DIR add DIR to INFOPATH.\n"
+#~ " --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+#~ " -f, --file=FILENAME specify Info file to visit.\n"
+#~ " -h, --help display this help and exit.\n"
+#~ " --index-search=STRING go to node pointed by index entry STRING.\n"
+#~ " -n, --node=NODENAME specify nodes in first visited Info file.\n"
+#~ " -o, --output=FILENAME output selected nodes to FILENAME.\n"
+#~ " -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+#~ " --no-raw-escapes output escapes as literal text.\n"
+#~ " --restore=FILENAME read initial keystrokes from FILENAME.\n"
+#~ " -O, --show-options, --usage go to command-line options node.\n"
+#~ "%s --subnodes recursively output menu items.\n"
+#~ " -w, --where, --location print physical location of Info file.\n"
+#~ " --vi-keys use vi-like and less-like key bindings.\n"
+#~ " --version display version information and exit.\n"
+#~ "\n"
+#~ "The first non-option argument, if present, is the menu entry to start "
+#~ "from;\n"
+#~ "it is searched for in all `dir' files along INFOPATH.\n"
+#~ "If it is not present, info merges all `dir' files and shows the result.\n"
+#~ "Any remaining arguments are treated as the names of menu\n"
+#~ "items relative to the initial node visited.\n"
+#~ "\n"
+#~ "Examples:\n"
+#~ " info show top-level dir menu\n"
+#~ " info emacs start at emacs node from top-level dir\n"
+#~ " info emacs buffers start at buffers node within emacs manual\n"
+#~ " info --show-options emacs start at node with emacs' command line "
+#~ "options\n"
+#~ " info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+#~ " info -f ./foo.info show file ./foo.info, not searching dir\n"
+#~ msgstr ""
+#~ "Kori¹tenje: %s [OPCIJA]... [STAVKA-MENIJA...]\n"
+#~ "\n"
+#~ "Èitanje dokumentacije u Info formatu.\n"
+#~ "\n"
+#~ "Opcije:\n"
+#~ " --apropos=SUBJEKT potra¾i SUBJEKT u svim indeksima svih "
+#~ "priruènika.\n"
+#~ " -d, --directory=DIR dodaj DIR u INFOPATH.\n"
+#~ " --dribble=IMEDAT zapamti korisnikovo tipkanje u IMEDAT.\n"
+#~ " -f, --file=IMEDATOTEKE zadaje ime Info datoteke koju se "
+#~ "posjeæuje.\n"
+#~ " -h, --help ispi¹i ovu pomoæ i zavr¹i s radom.\n"
+#~ " --index-search=NIZ idi na èvor na koji pokazuje stavka indeksa "
+#~ "NIZ.\n"
+#~ " -n, --node=IMEÈVORA zadaje èvorove u prvoj posjeæenoj info "
+#~ "datoteci.\n"
+#~ " -o, --output=IMEDATOTEKE ispi¹i izabrane èvorove u IMEDATOTEKE.\n"
+#~ " -R, --raw-escapes ne uklanjaj ANSI escape sekvence iz man "
+#~ "stranica.\n"
+#~ " --restore=IMEDATOTEKE èitaj inicijalne tipke iz IMEDATOTEKE.\n"
+#~ " -O, --show-options, --usage idi na èvor sa opcijama komandne linije.\n"
+#~ "%s --subnodes rekurzivno ispi¹i stavke menija.\n"
+#~ " --vi-keys koristi tipke kao ¹to su u vi-u i less-u.\n"
+#~ " --version ispi¹i informaciju o verziji i zavr¹i s "
+#~ "radom.\n"
+#~ "\n"
+#~ "Prvi argument koji nije opcija, ako je prisutan, je stavka menija od "
+#~ "koje\n"
+#~ "se poèinje; nju se tra¾i u svim `dir' datotekama kroz INFOPATH.\n"
+#~ "Ako nije prisutan, info spaja (merge) sve `dir' datoteke i prikazuje\n"
+#~ "rezultat. Eventualni preostali argumenti se tretiraju kao imena stavki\n"
+#~ "menija relativno od inicijalno posjeæenog èvora.\n"
+#~ "\n"
+#~ "Primjeri:\n"
+#~ " info prika¾i vr¹ni dir meni\n"
+#~ " info emacs zapoèni od emacs èvora iz vr¹nog dir-a\n"
+#~ " info emacs buffers zapoèni u buffers èvoru unutar emacs "
+#~ "priruènika\n"
+#~ " info --show-options emacs zapoèni u èvoru s emacsovim komandnim "
+#~ "opcijama\n"
+#~ " info -f ./foo.info prika¾i datoteku ./foo.info, zaobilazeæi "
+#~ "dir\n"
+
+#~ msgid ""
+#~ " Picking a menu item causes another node to be selected.\n"
+#~ msgstr " Odabiranje stavke menija selektira drugi èvor.\n"
+
+#~ msgid ""
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ msgstr ""
+#~ " Mo¾ete takoðer ukljuèiti ime datoteke, kao u (DATOTEKA)"
+#~ "IME_ÈVORA.\n"
+
+#~ msgid " %-10s Search backward for a specified string\n"
+#~ msgstr " %-10s Tra¾i unazad zadani niz,\n"
+
+#~ msgid ""
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr ""
+#~ " i selektiraj èvor u kojem je slijedeæa pojava niza naðena.\n"
+
+#~ msgid "Following Next node..."
+#~ msgstr "Slijedim Next (slijedeæi) èvor..."
+
+#~ msgid "Selecting first menu item..."
+#~ msgstr "Izabirem prvu stavku menija..."
+
+#~ msgid "Selecting Next node..."
+#~ msgstr "Selektiram Next (slijedeæi) èvor..."
+
+#~ msgid "Moving Up %d time(s), then Next."
+#~ msgstr "Pomièem se gore (Up) %d put(a), onda Next."
+
+#~ msgid "Moving Prev in this window."
+#~ msgstr "Idemo na Prev (prethodni) u ovom prozoru."
+
+#~ msgid "Moving Up in this window."
+#~ msgstr "Idem gore (Up) u ovom prozoru."
+
+#~ msgid "Moving to `Prev's last menu item."
+#~ msgstr "Idem na zadnju stavku `Prev'-ovog menija."
+
+#~ msgid " "
+#~ msgstr " "
+
+#, fuzzy
+#~ msgid "Variable"
+#~ msgstr "Postavi varijablu: "
+
+#, fuzzy
+#~ msgid "User Option"
+#~ msgstr "Umetni kompletiranje"
+
+#, fuzzy
+#~ msgid "Instance Variable"
+#~ msgstr "Opi¹i varijablu: "
+
+#, fuzzy
+#~ msgid "Next:"
+#~ msgstr "Next"
+
+#~ msgid "\\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+#~ msgstr ""
+#~ "\\%-10[menu-digit] Odaberi prvu ... devetu stavku u èvorovom meniju.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Copyright (C) %s Free Software Foundation, Inc.\n"
+#~ "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n"
+#~ "PARTICULAR PURPOSE. You may redistribute copies of GNU %s\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the file named COPYING.\n"
+#~ msgstr ""
+#~ "Copyright (C) %s Free Software Foundation, Inc.\n"
+#~ "S ovim programom NE DOLAZE GARANCIJE. Mo¾ete redistribuirati ovaj "
+#~ "software\n"
+#~ "pod uvjetima GNU General Public License.\n"
+#~ "Za vi¹e informacija o ovim stvarima, pogledajte datoteke imena COPYING.\n"
+
+#~ msgid ""
+#~ " file, and select the node referenced by the first entry "
+#~ "found.\n"
+#~ msgstr ""
+#~ " datoteke, i selektiraj èvor referenciran prvom naðenom "
+#~ "stavkom.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "There is NO warranty. You may redistribute this software\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the files named COPYING.\n"
+#~ msgstr ""
+#~ "Copyright (C) %s Free Software Foundation, Inc.\n"
+#~ "S ovim programom NE DOLAZE GARANCIJE. Mo¾ete redistribuirati ovaj "
+#~ "software\n"
+#~ "pod uvjetima GNU General Public License.\n"
+#~ "Za vi¹e informacija o ovim stvarima, pogledajte datoteke imena COPYING.\n"
+
+#~ msgid "\"\" is invalid"
+#~ msgstr "\"\" je neispravno"
+
+#~ msgid ""
+#~ "Basic Commands in Info Windows\n"
+#~ "******************************\n"
+#~ "\n"
+#~ " \\%-10[quit-help] Quit this help.\n"
+#~ " \\%-10[quit] Quit Info altogether.\n"
+#~ " \\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+#~ "\n"
+#~ "Selecting other nodes:\n"
+#~ "----------------------\n"
+#~ " \\%-10[next-node] Move to the \"next\" node of this node.\n"
+#~ " \\%-10[prev-node] Move to the \"previous\" node of this node.\n"
+#~ " \\%-10[up-node] Move \"up\" from this node.\n"
+#~ " \\%-10[menu-item] Pick menu item specified by name.\n"
+#~ " Picking a menu item causes another node to be selected.\n"
+#~ " \\%-10[xref-item] Follow a cross reference. Reads name of reference.\n"
+#~ " \\%-10[history-node] Move to the last node seen in this window.\n"
+#~ " \\%-10[move-to-next-xref] Skip to next hypertext link within this "
+#~ "node.\n"
+#~ " \\%-10[move-to-prev-xref] Skip to previous hypertext link within this "
+#~ "node.\n"
+#~ " \\%-10[select-reference-this-line] Follow the hypertext link under "
+#~ "cursor.\n"
+#~ " \\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+#~ "node] (DIR)'.\n"
+#~ " \\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] "
+#~ "Top'.\n"
+#~ "\n"
+#~ "Moving within a node:\n"
+#~ "---------------------\n"
+#~ " \\%-10[scroll-forward] Scroll forward a page.\n"
+#~ " \\%-10[scroll-backward] Scroll backward a page.\n"
+#~ " \\%-10[beginning-of-node] Go to the beginning of this node.\n"
+#~ " \\%-10[end-of-node] Go to the end of this node.\n"
+#~ " \\%-10[1scroll-forward] Scroll forward 1 line.\n"
+#~ " \\%-10[1scroll-backward] Scroll backward 1 line.\n"
+#~ "\n"
+#~ "Other commands:\n"
+#~ "---------------\n"
+#~ " \\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+#~ " \\%-10[last-menu-item] Pick last item in node's menu.\n"
+#~ " \\%-10[index-search] Search for a specified string in the index "
+#~ "entries of this Info\n"
+#~ " file, and select the node referenced by the first entry "
+#~ "found.\n"
+#~ " \\%-10[goto-node] Move to node specified by name.\n"
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ " \\%-10[search] Search forward through this Info file for a specified "
+#~ "string,\n"
+#~ " and select the node in which the next occurrence is found.\n"
+#~ " \\%-10[search-backward] Search backward in this Info file for a "
+#~ "specified string,\n"
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr ""
+#~ "Osnovne naredbe u Info Prozorima\n"
+#~ "********************************\n"
+#~ "\n"
+#~ " \\%-10[quit-help] Zavr¹i ovu pomoæ.\n"
+#~ " \\%-10[quit] Iziði iz Info programa.\n"
+#~ " \\%-10[get-info-help-node] Pozovi Info priruènik.\n"
+#~ "\n"
+#~ "Selektiranje drugih èvorova:\n"
+#~ "----------------------------\n"
+#~ " \\%-10[next-node] Idi na slijedeæi (\"next\") èvor od ovog èvora.\n"
+#~ " \\%-10[prev-node] Idi na prethodni (\"previous\") èvor od ovog èvora.\n"
+#~ " \\%-10[up-node] Idi gore (\"up\") od ovog èvora.\n"
+#~ " \\%-10[menu-item] Izaberi stavku menija zadanu imenom.\n"
+#~ " Odabiranjeim stavke menija se selektira drugi èvor.\n"
+#~ " \\%-10[xref-item] Slijedi unakrsnu referencu. Èita ime reference.\n"
+#~ " \\%-10[history-node] Idi na zadnji vidljiv èvor u ovom prozoru.\n"
+#~ " \\%-10[move-to-next-xref] Idi na slijedeæi hipertekst link u ovom "
+#~ "èvoru.\n"
+#~ " \\%-10[move-to-prev-xref] Idi na prethodni hipertekst link u ovom "
+#~ "èvoru.\n"
+#~ " \\%-10[select-reference-this-line] Slijedi hipertekst link pod "
+#~ "kursorom.\n"
+#~ " \\%-10[dir-node] Idi na èvor `directory'. Ekvivalentno `\\[goto-node] "
+#~ "(DIR)'.\n"
+#~ " \\%-10[top-node] Idi na vr¹ni (Top) èvor. Ekvivaletno `\\[goto-node] "
+#~ "Top'.\n"
+#~ "\n"
+#~ "Pomicanje unutar èvora:\n"
+#~ "-----------------------\n"
+#~ " \\%-10[scroll-forward] Skrolaj stranicu naprijed.\n"
+#~ " \\%-10[scroll-backward] Skrolaj stranicu unazad.\n"
+#~ " \\%-10[beginning-of-node] Idi na poèetak ovog èvora.\n"
+#~ " \\%-10[end-of-node] Idi na kraj ovog èvora.\n"
+#~ " \\%-10[1scroll-forward] Skrolaj naprijed 1 redak.\n"
+#~ " \\%-10[1scroll-backward] Skrolaj unazad 1 redak.\n"
+#~ "\n"
+#~ "Druge naredbe:\n"
+#~ "--------------\n"
+#~ " \\%-10[menu-digit] Odaberi prvu ... devetu stavku u èvorovom meniju.\n"
+#~ " \\%-10[last-menu-item] Odaberi zadnju stavku u èvorovom meniju.\n"
+#~ " \\%-10[index-search] Tra¾i zadani niz u indeks stavkama ove Info\n"
+#~ " datoteke, i selektiraj èvor referenciran prvom naðenom "
+#~ "stavkom.\n"
+#~ " \\%-10[goto-node] Idi na èvor zadan imenom.\n"
+#~ " Mo¾ete takoðer ukljuèiti ime datoteke, kao u (DATOTEKA)"
+#~ "IME_ÈVORA.\n"
+#~ " \\%-10[search] Tra¾i zadani niz prema naprijed kroz ovu Info "
+#~ "datoteku,\n"
+#~ " i selektiraj èvor u kojem je slijedeæa pojava niza naðena.\n"
+#~ " \\%-10[search-backward] Tra¾i zadani niz prema nazad kroz ovu Info "
+#~ "datoteku,\n"
+#~ " i selektiraj èvor u kojem je slijedeæa pojava niza naðena.\n"
+
+#~ msgid "Basic Commands in Info Windows\n"
+#~ msgstr "Osnovne naredbe u Info Prozorima\n"
+
+#~ msgid "Moving within a node:\n"
+#~ msgstr "Pomicanje unutar èvora:\n"
+
+#~ msgid "Selecting other nodes:\n"
+#~ msgstr "Selektiranje drugih èvorova:\n"
+
+#~ msgid "Other commands:\n"
+#~ msgstr "Druge naredbe:\n"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]... [INPUT-FILE]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --output FILENAME output to FILENAME instead of $HOME/.info\n"
+#~ " --help display this help and exit.\n"
+#~ " --version display version information and exit.\n"
+#~ "\n"
+#~ "Compile infokey source file to infokey file. Reads INPUT-FILE (default\n"
+#~ "$HOME/.infokey) and writes compiled key file to $HOME/.info.\n"
+#~ "\n"
+#~ "Email bug reports to bug-texinfo@gnu.org,\n"
+#~ "general questions and discussion to help-texinfo@gnu.org.\n"
+#~ msgstr ""
+#~ "Kori¹tenje: %s [OPCIJA]... [ULAZNA-DATOTEKA]\n"
+#~ "\n"
+#~ "Opcije:\n"
+#~ " --output DATOTEKA izlaz u DATOTEKA umjesto u $HOME/.info\n"
+#~ " --help ispi¹i ovu pomoæ i zavr¹i.\n"
+#~ " --version ispi¹i informaciju o verziji i zavr¹i.\n"
+#~ "\n"
+#~ "Prevedi infokey izvornu datoteku u infokey datoteku. Èita ULAZNA-"
+#~ "DATOTEKA\n"
+#~ "(podrazumno $HOME/.infokey) i ispisuje prevedenu key datoteku u $HOME/."
+#~ "info.\n"
+#~ "\n"
+#~ "©aljite izvje¹zaje u bugovima na email bug-texinfo@gnu.org,\n"
+#~ "opæa pitanja i diskusije na help-texinfo@gnu.org.\n"
diff --git a/po/hu.gmo b/po/hu.gmo
new file mode 100644
index 0000000..c9af3b0
--- /dev/null
+++ b/po/hu.gmo
Binary files differ
diff --git a/po/hu.po b/po/hu.po
new file mode 100644
index 0000000..bcc7d24
--- /dev/null
+++ b/po/hu.po
@@ -0,0 +1,3325 @@
+# translation of info.po to hungarian
+# Hungarian messages for GNU Texinfo
+# Copyright © 2004, 2006 Free Software Foundation, Inc.
+#
+# Máté LABÃDI <labadimate@freemail.hu>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: info\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2008-09-18 20:38+0200\n"
+"PO-Revision-Date: 2006-02-18 16:00+0100\n"
+"Last-Translator: Mate LABADI <labadimate@freemail.hu>\n"
+"Language-Team: hungarian <hu@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11\n"
+
+#: gnulib/lib/error.c:125
+msgid "Unknown system error"
+msgstr ""
+
+#: gnulib/lib/getopt.c:526 gnulib/lib/getopt.c:542
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: „%s“ opció félreérthető\n"
+
+#: gnulib/lib/getopt.c:575 gnulib/lib/getopt.c:579
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: Opció „--%s“ nem fogad argumentumot\n"
+
+#: gnulib/lib/getopt.c:588 gnulib/lib/getopt.c:593
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: Opció „%c%s“ nem fogad argumentumot\n"
+
+#: gnulib/lib/getopt.c:636 gnulib/lib/getopt.c:655 gnulib/lib/getopt.c:971
+#: gnulib/lib/getopt.c:990
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: Option „%s“ argumentumot vár\n"
+
+#: gnulib/lib/getopt.c:693 gnulib/lib/getopt.c:696
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: ismeretlen opció „--%s“\n"
+
+#: gnulib/lib/getopt.c:704 gnulib/lib/getopt.c:707
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: ismeretlen opció „%c%s“\n"
+
+#: gnulib/lib/getopt.c:759 gnulib/lib/getopt.c:762
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: érvénytelen opció -- %c\n"
+
+#: gnulib/lib/getopt.c:768 gnulib/lib/getopt.c:771
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: érvénytelen opció -- %c\n"
+
+#: gnulib/lib/getopt.c:823 gnulib/lib/getopt.c:839 gnulib/lib/getopt.c:1043
+#: gnulib/lib/getopt.c:1061
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: Az opció egy argumentumot vár -- %c\n"
+
+#: gnulib/lib/getopt.c:892 gnulib/lib/getopt.c:908
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: Option „-W %s“ nem érthető\n"
+
+#: gnulib/lib/getopt.c:932 gnulib/lib/getopt.c:950
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: A „-W %s“ opció nem vár argumentumot\n"
+
+#: gnulib/lib/xalloc-die.c:34 gnulib/lib/xsetenv.c:37
+#, c-format
+msgid "memory exhausted"
+msgstr ""
+
+#: info/echo-area.c:283 info/session.c:966
+msgid "Move forward a character"
+msgstr "1 karakterrel előre"
+
+#: info/echo-area.c:295 info/session.c:993
+msgid "Move backward a character"
+msgstr "1 karakterrel hátra"
+
+#: info/echo-area.c:307
+msgid "Move to the start of this line"
+msgstr "Ugrás a sor elejére"
+
+#: info/echo-area.c:312
+msgid "Move to the end of this line"
+msgstr "Ugrás a sor végére"
+
+#: info/echo-area.c:320 info/session.c:1025
+msgid "Move forward a word"
+msgstr "1 szóval előre"
+
+#: info/echo-area.c:360 info/session.c:1049
+msgid "Move backward a word"
+msgstr "1 szóval hátra"
+
+#: info/echo-area.c:400
+msgid "Delete the character under the cursor"
+msgstr "A kurzor alatti karakter törlése"
+
+#: info/echo-area.c:430
+msgid "Delete the character behind the cursor"
+msgstr "A kurzor előtti karakter törlése"
+
+#: info/echo-area.c:451
+msgid "Cancel or quit operation"
+msgstr "Művelet törlése vagy kilépés"
+
+#: info/echo-area.c:466
+msgid "Accept (or force completion of) this line"
+msgstr "E sor elfogadása (vagy kiegészítése)"
+
+#: info/echo-area.c:471
+msgid "Insert next character verbatim"
+msgstr "A következő karakter beszúrása"
+
+#: info/echo-area.c:479
+msgid "Insert this character"
+msgstr "E karakter beszúrása"
+
+#: info/echo-area.c:498
+msgid "Insert a TAB character"
+msgstr "Egy TAB karakter beszúrása"
+
+#: info/echo-area.c:505
+msgid "Transpose characters at point"
+msgstr "Itteni karakterek felcserélése "
+
+#: info/echo-area.c:556
+msgid "Yank back the contents of the last kill"
+msgstr "Utolsó törlés tartalmának visszaállítása"
+
+# IMO muss "kill" auch im Folgenden wörtlich üs werden -ke-
+#: info/echo-area.c:563
+msgid "Kill ring is empty"
+msgstr "A törlésnapló üres"
+
+#: info/echo-area.c:576
+msgid "Yank back a previous kill"
+msgstr "Egy korábbi törlés visszaállítása"
+
+#: info/echo-area.c:609
+msgid "Kill to the end of the line"
+msgstr "Törlés a sor végéig"
+
+#: info/echo-area.c:622
+msgid "Kill to the beginning of the line"
+msgstr "Törlés a sor elejéig"
+
+#: info/echo-area.c:634
+msgid "Kill the word following the cursor"
+msgstr "A kurzort követő szó törlése"
+
+#: info/echo-area.c:654
+msgid "Kill the word preceding the cursor"
+msgstr "A kurzort megelőző szó törlése"
+
+#: info/echo-area.c:870 info/echo-area.c:926
+msgid "No completions"
+msgstr "Nincs kiegészítés"
+
+#: info/echo-area.c:872
+msgid "Not complete"
+msgstr "Nem teljes"
+
+#: info/echo-area.c:913
+msgid "List possible completions"
+msgstr "Lehetséges kiegészítések listája"
+
+#: info/echo-area.c:930
+msgid "Sole completion"
+msgstr "Egyszerű kiegészítés"
+
+#: info/echo-area.c:939
+msgid "One completion:\n"
+msgstr "1 kiegészítés:\n"
+
+#: info/echo-area.c:940
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d kiegészítés:\n"
+
+#: info/echo-area.c:1087
+msgid "Insert completion"
+msgstr "Kiegészítés beszúrása"
+
+#: info/echo-area.c:1222
+msgid "Building completions..."
+msgstr "Kiegészítések felépítése ..."
+
+#: info/echo-area.c:1342
+msgid "Scroll the completions window"
+msgstr "A kiegészítések ablak görgetése "
+
+#: info/footnotes.c:212
+msgid "Footnotes could not be displayed"
+msgstr "A lábjegyzetek nem jeleníthetők meg"
+
+#: info/footnotes.c:238
+msgid "Show the footnotes associated with this node in another window"
+msgstr "E ponthoz tartozó lábjegyzetek megjelenítése egy másik ablakban"
+
+#: info/footnotes.h:26
+msgid "---------- Footnotes ----------"
+msgstr "---------- Lábjegyzetek ----------"
+
+#: info/indices.c:171
+msgid "Look up a string in the index for this file"
+msgstr "Szöveg keresése a fájl tárgymutatójában"
+
+#: info/indices.c:198
+msgid "Finding index entries..."
+msgstr "Tárgymutatóbejegyzések keresése..."
+
+#: info/indices.c:206
+msgid "No indices found."
+msgstr "Nincs tárgymutató."
+
+#: info/indices.c:216
+msgid "Index entry: "
+msgstr "Tárgymutatóbejegyzés: "
+
+#: info/indices.c:324
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr ""
+"Ugrás az előbbi „\\[index-search]“ paranccsal talált tárgymutató bejegyzéshez"
+
+#: info/indices.c:334
+msgid "No previous index search string."
+msgstr "Nincs korábbi keresési feltétel"
+
+#: info/indices.c:341
+msgid "No index entries."
+msgstr "Nincs tárgymutató."
+
+#: info/indices.c:374
+#, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "Nincs %stárgymutató-bejegyzés, ami „%s!H-t tartalmazná."
+
+#: info/indices.c:375
+msgid "more "
+msgstr "tovább"
+
+#: info/indices.c:385
+msgid "CAN'T SEE THIS"
+msgstr "EZ NEM LÃTHATÓ"
+
+#: info/indices.c:421
+#, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr ""
+"„%s“ szerepel ebben: %s . (következő keresés „\\[next-index-match]“ alapján.)"
+
+#: info/indices.c:549
+#, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "„%s“ tárgymutatóinak átnézése..."
+
+#: info/indices.c:604
+#, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr "Nincs elérhető fájl, amely tárgymutatója tartalmazná „%s“-t."
+
+#: info/indices.c:630
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr ""
+"Adott sztring keresése minden ismert info fájl tárgymutatójában és menü "
+"építése"
+
+#: info/indices.c:634
+msgid "Index apropos: "
+msgstr "Tárgymutató apropók:"
+
+#: info/indices.c:662
+#, c-format
+msgid ""
+"\n"
+"* Menu: Nodes whose indices contain `%s':\n"
+msgstr ""
+"\n"
+"* Menü: Oldalak, amelyek tárgymutatói tartalmazzák „%s“-t:\n"
+
+#: info/info.c:275 info/infokey.c:899
+#, c-format
+msgid "Try --help for more information.\n"
+msgstr "A --help több információt ad.\n"
+
+#: info/info.c:294 info/infokey.c:145 install-info/install-info.c:2101
+#: makeinfo/makeinfo.c:802 util/texindex.c:295
+#, c-format
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+
+#: info/info.c:506
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "Nincs tárgymutató ehhez: %s\n"
+
+#: info/info.c:600
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [MENU-ITEM...]\n"
+"\n"
+"Read documentation in Info format.\n"
+msgstr ""
+
+#: info/info.c:606
+msgid ""
+"Options:\n"
+" -k, --apropos=STRING look up STRING in all indices of all "
+"manuals.\n"
+" -d, --directory=DIR add DIR to INFOPATH.\n"
+" --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+" -f, --file=FILENAME specify Info file to visit."
+msgstr ""
+
+#: info/info.c:613
+msgid ""
+" -h, --help display this help and exit.\n"
+" --index-search=STRING go to node pointed by index entry STRING.\n"
+" -n, --node=NODENAME specify nodes in first visited Info file.\n"
+" -o, --output=FILENAME output selected nodes to FILENAME."
+msgstr ""
+
+#: info/info.c:619
+msgid ""
+" -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+" --no-raw-escapes output escapes as literal text.\n"
+" --restore=FILENAME read initial keystrokes from FILENAME.\n"
+" -O, --show-options, --usage go to command-line options node."
+msgstr ""
+
+#: info/info.c:626
+msgid " -b, --speech-friendly be friendly to speech synthesizers."
+msgstr ""
+
+#: info/info.c:630
+msgid ""
+" --subnodes recursively output menu items.\n"
+" --vi-keys use vi-like and less-like key bindings.\n"
+" --version display version information and exit.\n"
+" -w, --where, --location print physical location of Info file."
+msgstr ""
+
+#: info/info.c:636
+msgid ""
+"\n"
+"The first non-option argument, if present, is the menu entry to start from;\n"
+"it is searched for in all `dir' files along INFOPATH.\n"
+"If it is not present, info merges all `dir' files and shows the result.\n"
+"Any remaining arguments are treated as the names of menu\n"
+"items relative to the initial node visited."
+msgstr ""
+
+#: info/info.c:643
+msgid ""
+"\n"
+"For a summary of key bindings, type h within Info."
+msgstr ""
+
+#: info/info.c:646
+msgid ""
+"\n"
+"Examples:\n"
+" info show top-level dir menu\n"
+" info info show the general manual for Info readers\n"
+" info info-stnd show the manual specific to this Info program\n"
+" info emacs start at emacs node from top-level dir\n"
+" info emacs buffers start at buffers node within emacs manual\n"
+" info --show-options emacs start at node with emacs' command line options\n"
+" info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+" info -f ./foo.info show file ./foo.info, not searching dir"
+msgstr ""
+
+#: info/info.c:657 info/infokey.c:918 makeinfo/makeinfo.c:475
+#: util/texindex.c:259
+msgid ""
+"\n"
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+"Hibajegyek a bug-texinfo@gnu.org,\n"
+"általános kérdések és ötletek a help-texinfo@gnu.org\n"
+"címre küldhetők.\n"
+"Texinfo honlap: http://www.gnu.org/software/texinfo/"
+
+#: info/info.c:691
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "A(z) „%s“ oldal nem található."
+
+#: info/info.c:692
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "A(z) „(%s)%s“ oldal nem található."
+
+#: info/info.c:693
+msgid "Cannot find a window!"
+msgstr "Nem található ablak!"
+
+# ATNEZNI LM
+#: info/info.c:694
+msgid "Point doesn't appear within this window's node!"
+msgstr "A pont nem jelenik meg az ablakon látható oldalon!"
+
+#: info/info.c:695
+msgid "Cannot delete the last window."
+msgstr "Az utolsó ablak nem törölhető!"
+
+# node = csomópont? LM
+# vagy csak pont? sas
+#: info/info.c:696
+msgid "No menu in this node."
+msgstr "Nincs menü ezen az oldalon."
+
+# node = csomópont? LM
+# vagy csak pont? sas
+#: info/info.c:697
+msgid "No footnotes in this node."
+msgstr "Nincs lábjegyezet ezen az oldalon."
+
+# node = csomópont? LM
+# vagy csak pont? sas
+#: info/info.c:698
+msgid "No cross references in this node."
+msgstr "Ez az oldal nem tartalmaz kereszthivatkozást."
+
+#: info/info.c:699
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Nincs „%s“ utalás ezen az oldalon."
+
+#: info/info.c:700
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "Ismeretlen Info parancs: „%c“. A „?“ súg."
+
+# smart = okos vagy smart = modern vagy smart = fejlett ? LM
+# sztem fejlett: sas
+#: info/info.c:701
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr "A „%s“ termináltípus nem elég fejlett az Info futtatásához."
+
+# tegez/magáz? LM
+# talán egy kicsit jobb a magázás itt, de ahogy tetszik, de 1séges legyen - sas
+#: info/info.c:702
+msgid "You are already at the last page of this node."
+msgstr "Ön már az oldal utolsó lapját látja."
+
+# tegez/magáz? LM
+# talán egy kicsit jobb a magázás itt, de ahogy tetszik, de 1séges legyen - sas
+#: info/info.c:703
+msgid "You are already at the first page of this node."
+msgstr "Ön már az oldal legelső lapját látja."
+
+#: info/info.c:704
+msgid "Only one window."
+msgstr "Csak egy ablak."
+
+# resulting window = eredményablak
+# vagy
+# resulting window = létrejövő/keletkező ablak
+# LM
+#: info/info.c:705
+msgid "Resulting window would be too small."
+msgstr "Az eredményablak túl kicsi lenne."
+
+# tegez/magáz LM
+# ha lehet, legjobb elkerülni, például be kell zárni egy ablakot, amúgy itt: talán egy kicsit jobb a magázás, de ahogy tetszik, de 1séges legyen - sas
+#: info/info.c:706
+msgid "Not enough room for a help window, please delete a window."
+msgstr "Nincs elég hely súgóablakhoz, kérem zárjon be egy ablakot!."
+
+#: info/infodoc.c:45
+msgid "Basic Info command keys\n"
+msgstr ""
+
+#: info/infodoc.c:47
+#, fuzzy
+msgid "\\%-10[quit-help] Close this help window.\n"
+msgstr "\\%-10[quit-help] Kilépés e súgóból. \n"
+
+# valahogy hangsúlyozni, hogy quit ALTOGETHER? LM
+# úgy érzem nem, de vajh mire utal ez? Arra, hogy: is? - sas
+#: info/infodoc.c:48
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] Kilépés az Info-ból.\n"
+
+# tutorial = bevezető ? LM
+# lehet - sas
+#: info/infodoc.c:49
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr "\\%-10[get-info-help-node] Az Info bevezető indítása\n"
+
+# hátra / felfele ? LM
+#: info/infodoc.c:51
+#, fuzzy
+msgid "\\%-10[prev-line] Move up one line.\n"
+msgstr "\\%-10[prev-line] Görgetés 1 sorral hátra.\n"
+
+# előre / lefele ? LM
+# előre - sas
+#: info/infodoc.c:52
+#, fuzzy
+msgid "\\%-10[next-line] Move down one line.\n"
+msgstr "\\%-10[next-line] Görgetés 1 sorral előre.\n"
+
+# hátra / felfele ? LM
+#: info/infodoc.c:53
+#, fuzzy
+msgid "\\%-10[scroll-backward] Scroll backward one screenful.\n"
+msgstr "\\%-10[scroll-backward] Görgetés egy oldalt hátra.\n"
+
+# előre / lefele ? LM
+#: info/infodoc.c:54
+#, fuzzy
+msgid "\\%-10[scroll-forward] Scroll forward one screenful.\n"
+msgstr "\\%-10[scroll-forward] Görgetés egy oldalt előre.\n"
+
+#: info/infodoc.c:55
+#, fuzzy
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr "\\%-10[beginning-of-node] Ugrás az oldal elejéhez.\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr "\\%-10[end-of-node] Ugrás az oldal végéhez.\n"
+
+# Hypertext ? LM
+#: info/infodoc.c:58
+#, fuzzy
+msgid "\\%-10[move-to-next-xref] Skip to the next hypertext link.\n"
+msgstr ""
+"\\%-10[move-to-next-xref] Ugrás az oldalon található következő hypertext "
+"bejegyzésre.\n"
+
+#: info/infodoc.c:59
+#, fuzzy
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under the "
+"cursor.\n"
+msgstr ""
+"\\%-10[select-reference-this-line] A kurzor alatti hypertext link "
+"követése.\n"
+
+#: info/infodoc.c:60
+#, fuzzy
+msgid "\\%-10[history-node] Go back to the last node seen in this window.\n"
+msgstr ""
+"\\%-10[history-node] Ugrás az ebben az ablakban utoljára látott oldalra.\n"
+
+# ATNEZNI LM
+#: info/infodoc.c:62
+#, fuzzy
+msgid "\\%-10[global-prev-node] Go to the previous node in the document.\n"
+msgstr "\\%-10[prev-node] Ugrás az előző oldalra.\n"
+
+# ATNEZNI LM
+#: info/infodoc.c:63
+#, fuzzy
+msgid "\\%-10[global-next-node] Go to the next node in the document.\n"
+msgstr "\\%-10[next-node] Ugrás a következő oldalra.\n"
+
+# ATNEZNI LM
+#: info/infodoc.c:64
+#, fuzzy
+msgid "\\%-10[prev-node] Go to the previous node on this level.\n"
+msgstr "\\%-10[prev-node] Ugrás az előző oldalra.\n"
+
+# ATNEZNI LM
+#: info/infodoc.c:65
+#, fuzzy
+msgid "\\%-10[next-node] Go to the next node on this level.\n"
+msgstr "\\%-10[next-node] Ugrás a következő oldalra.\n"
+
+# ATNEZNI LM
+#: info/infodoc.c:66
+#, fuzzy
+msgid "\\%-10[up-node] Go up one level.\n"
+msgstr "\\%-10[up-node] Ugrás a szülőoldalra.\n"
+
+#: info/infodoc.c:67
+#, fuzzy
+msgid "\\%-10[top-node] Go to the top node of this document.\n"
+msgstr "\\%-10[end-of-node] Ugrás az oldal végéhez.\n"
+
+#: info/infodoc.c:68
+#, fuzzy
+msgid "\\%-10[dir-node] Go to the main `directory' node.\n"
+msgstr "\\%-10[end-of-node] Ugrás az oldal végéhez.\n"
+
+#: info/infodoc.c:70
+#, fuzzy
+msgid "1...9 Pick the first...ninth item in this node's menu.\n"
+msgstr ""
+" %-10s Az oldalon található menü első ... kilencedik elemének "
+"kiválasztása.\n"
+
+#: info/infodoc.c:71
+#, fuzzy
+msgid "\\%-10[last-menu-item] Pick the last item in this node's menu.\n"
+msgstr ""
+"\\%-10[last-menu-item] Az oldalhoz tartozó menü utolsó elemének "
+"kiválasztása.\n"
+
+#: info/infodoc.c:72
+#, fuzzy
+msgid "\\%-10[menu-item] Pick a menu item specified by name.\n"
+msgstr " %-10s Menüelem kiválasztása névvel.\n"
+
+#: info/infodoc.c:73
+#, fuzzy
+msgid "\\%-10[xref-item] Follow a cross reference specified by name.\n"
+msgstr ""
+"\\%-10[xref-item] Kereszthivatkozás követése. A hivatkozás nevének "
+"beolvasása.\n"
+
+#: info/infodoc.c:74
+#, fuzzy
+msgid "\\%-10[goto-node] Go to a node specified by name.\n"
+msgstr " %-10s Ugrás egy névvel megadott oldalra\n"
+
+#: info/infodoc.c:76
+#, fuzzy
+msgid "\\%-10[search] Search forward for a specified string.\n"
+msgstr " %-10s Adott szöveg keresése visszafele\n"
+
+# ATNEZNI LM
+#: info/infodoc.c:77
+#, fuzzy
+msgid "\\%-10[search-previous] Search for previous occurrence.\n"
+msgstr "\\%-10[prev-node] Ugrás az előző oldalra.\n"
+
+#: info/infodoc.c:78
+#, fuzzy
+msgid "\\%-10[search-next] Search for next occurrence.\n"
+msgstr " %-10s Adott szöveg keresése visszafele\n"
+
+#: info/infodoc.c:79
+#, fuzzy
+msgid ""
+"\\%-10[index-search] Search for a specified string in the index, and\n"
+" select the node referenced by the first entry found.\n"
+msgstr ""
+"\\%-10[index-search] Megadott szöveg keresése a mostani Info fájlban\n"
+" és az első találat által mutatott oldal kiválasztása.\n"
+
+#: info/infodoc.c:81
+#, fuzzy
+msgid "\\%-10[abort-key] Cancel the current operation.\n"
+msgstr "Jelen művelet törlése"
+
+#: info/infodoc.c:89
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"Alapparancsok az Info ablakban\n"
+"******************************\n"
+
+#: info/infodoc.c:92
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s Kilépés a súgóból.\n"
+
+# az altogether le legyen forditva ?
+#: info/infodoc.c:93
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Kilépés az Info-ból.\n"
+
+# tutorial = bemutató?
+#: info/infodoc.c:94
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Az Info bemutató indítása.\n"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr " %-10s Ugrás a következő oldalra.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr " %-10s Ugrás az előző oldalra.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s Ugrás a szülőoldalra.\n"
+
+# ATNEZNI LM
+# Egy másik oldalt meghívó menüelem kiválasztása? - sas
+#: info/infodoc.c:101
+#, fuzzy, c-format
+msgid ""
+" %-10s Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+" A menüelem kiválasztása miatt egy másik oldal lesz meghívva.\n"
+
+#: info/infodoc.c:103
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr ""
+" %-10s Kereszthivatkozás követése. A hivatkozás nevének beolvasása.\n"
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr " %-10s Ugrás az ablakban látható utolsó oldalra.\n"
+
+# hypertext link = ? LM
+# link = lánc, hivatkozás - sas
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr " %-10s Ugrás az oldalon található következő hypertext linkre.\n"
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s A kurzor alatti hypertext link követése.\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr " %-10s Ugrás a „directory“-oldalra. Egyenértékű ezzel: „g (DIR)“.\n"
+
+# top node = legfelső szintű oldal ? LM
+# szint nem kell - sas
+#: info/infodoc.c:108
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr " %-10s Ugrás a legfelső oldalra. Egyenértékű ezzel: „g Top“.\n"
+
+#: info/infodoc.c:110
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"Navigáció egy oldalon belül:\n"
+"----------------------------\n"
+
+# előre / felfele / lefele ? LM
+# előre - sas
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s Görgetés egy oldalt előre.\n"
+
+# hátra / vissza / felfele / lefele ? LM
+# hátra - sas
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s Görgetés egy oldalt hátra.\n"
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s Ugrás az oldal elejére.\n"
+
+#: info/infodoc.c:115
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s Ugrás az oldal végére.\n"
+
+# előre / felfele / lefele ? LM
+# előre - sas
+#: info/infodoc.c:116
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s Görgetés 1 sorral előre.\n"
+
+# hátra / vissza / felfele / lefele ? LM
+# hátra - sas
+#: info/infodoc.c:117
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s Görgetés 1 sorral hátra.\n"
+
+#: info/infodoc.c:119
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"Egyéb parancsok:\n"
+"----------------\n"
+
+#: info/infodoc.c:121
+#, fuzzy, c-format
+msgid " %-10s Pick first...ninth item in node's menu.\n"
+msgstr ""
+" %-10s Az oldalon található menü első ... kilencedik elemének "
+"kiválasztása.\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s Az oldal utolsó menüelemének kiválasztása.\n"
+
+#: info/infodoc.c:125
+#, fuzzy, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr ""
+"\\%-10[index-search] Megadott szöveg keresése a mostani Info fájlban\n"
+" és az első találat által mutatott oldal kiválasztása.\n"
+
+#: info/infodoc.c:127
+#, fuzzy, c-format
+msgid ""
+" %-10s Move to node specified by name.\n"
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+"\\%-10[goto-node] Ugrás egy névvel megadott oldalra.\n"
+" A névben akár egy fájl is szerepelhet, például (FÃJL)"
+"OLDALNEVE.\n"
+
+#: info/infodoc.c:129
+#, fuzzy, c-format
+msgid ""
+" %-10s Search forward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+"\\%-10[index-search] Megadott szöveg keresése a mostani Info fájlban\n"
+" és az első találat által mutatott oldal kiválasztása.\n"
+
+#: info/infodoc.c:131
+#, fuzzy, c-format
+msgid ""
+" %-10s Search backward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+"\\%-10[index-search] Megadott szöveg keresése a mostani Info fájlban\n"
+" és az első találat által mutatott oldal kiválasztása.\n"
+
+#: info/infodoc.c:312
+msgid "The current search path is:\n"
+msgstr "Az aktuális keresési útvonal::\n"
+
+#: info/infodoc.c:316
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"Az Info ablakban elérhető parancsok:\n"
+"\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+
+#: info/infodoc.c:343
+#, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+"A következő parancsok csak %s -n keresztül hívhatók meg:\n"
+"\n"
+
+#: info/infodoc.c:347
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+"A következő parancsokat egyáltalán nem lehet meghívni:\n"
+"\n"
+
+# súgó szöveg legyen vagy inkább segítő szöveg ? LM
+# súgó - sas
+#: info/infodoc.c:477
+msgid "Display help message"
+msgstr "Súgó szöveg megjelenítése"
+
+# node = oldal ? LM
+#: info/infodoc.c:495
+msgid "Visit Info node `(info)Help'"
+msgstr "Info oldal „(info)Help“ meglátogatása"
+
+# KEY ? LM
+# utána kell nézni, mire vonatkozik, talán dokumentáció kiírása a kulcsszóhoz - sas
+#: info/infodoc.c:633
+msgid "Print documentation for KEY"
+msgstr "Dokumentáció nyomtatása KEY-hez"
+
+# key = kulcs ?
+# key = billentyű / karakter ? LM
+#: info/infodoc.c:645
+#, c-format
+msgid "Describe key: %s"
+msgstr "Leíró billentyű: %s"
+
+#: info/infodoc.c:656
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s nincs definiálva."
+
+#: info/infodoc.c:672 info/infodoc.c:701
+#, c-format
+msgid "%s is undefined."
+msgstr "%s nincs definiálva."
+
+#: info/infodoc.c:722
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s %s-ként van definiálva."
+
+# esetleg egy jobb forditas ide ? LM
+#: info/infodoc.c:1146
+msgid "Show what to type to execute a given command"
+msgstr "Egy adott parancs futtatásához szükséges utasítás megjelenítése"
+
+#: info/infodoc.c:1150
+msgid "Where is command: "
+msgstr "Hol van a parancs: "
+
+# key = kulcs
+# key = billentyű ? LM
+# sztem itt billentyű - sas
+#: info/infodoc.c:1172
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "„%s“ egy billyentyűn sincs"
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s csak %s-n át hívható meg."
+
+#: info/infodoc.c:1183
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s meghívható %s-n keresztül."
+
+#: info/infodoc.c:1188
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "Nincs „%s“ nevű függvény"
+
+# node = csomópont? LM
+# vagy csak pont? sas
+#: info/infodoc.c:96
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"További oldalak kiválasztása:\n"
+"-----------------------------\n"
+
+# argument = argumentum
+# argument = paraméter ? LM
+#: info/infokey.c:170
+msgid "incorrect number of arguments"
+msgstr "érvénytelen számú argumentum"
+
+#: info/infokey.c:201
+#, c-format
+msgid "cannot open input file `%s'"
+msgstr "a(z) „%s“ input fájl nem nyitható meg."
+
+#: info/infokey.c:215
+#, c-format
+msgid "cannot create output file `%s'"
+msgstr "a(z) „%s“ output fájl nem hozható létre."
+
+#: info/infokey.c:226
+#, c-format
+msgid "error writing to `%s'"
+msgstr "hiba „%s“ írásakor."
+
+#: info/infokey.c:232
+#, c-format
+msgid "error closing output file `%s'"
+msgstr "hiba a(z) „%s“ output fájl bezárásakor"
+
+# key sequence = billentyűkombináció ? LM
+# valsz inkább egymás után leütendő billentyűsorozoat - sas
+#: info/infokey.c:450
+msgid "key sequence too long"
+msgstr "a billentyűkombináció túl hosszú"
+
+# key sequence = billentyűkombináció ? LM
+# lehet, hogy inkább egymás után leütendő billentyűsorozoat - sas
+#: info/infokey.c:529
+msgid "missing key sequence"
+msgstr "hiányzó billentyűkombináció "
+
+#: info/infokey.c:610
+msgid "NUL character (\\000) not permitted"
+msgstr "A NUL karakter (\\000) tilos"
+
+#: info/infokey.c:641
+#, c-format
+msgid "NUL character (^%c) not permitted"
+msgstr "A NUL karakter (^%c) tilos"
+
+# action=művelet ? LM
+# általában az - sas
+#: info/infokey.c:665
+msgid "missing action name"
+msgstr "hiányzó műveletnév"
+
+# section=szakasz?
+# A mondat eleje nagybetu vagy kisbetu? LM
+# túl hosszú szakad - ez a biztos - sas
+#: info/infokey.c:681 info/infokey.c:756
+msgid "section too long"
+msgstr "túl hosszú szakasz"
+
+# action=művelet ? LM
+# általában az - sas
+#: info/infokey.c:688
+#, c-format
+msgid "unknown action `%s'"
+msgstr "ismeretlen művelet: „%s“."
+
+#: info/infokey.c:698
+msgid "action name too long"
+msgstr "túl hosszú műveletnév"
+
+# action=muvelet? LM
+# általában az - sas
+#: info/infokey.c:712
+#, c-format
+msgid "extra characters following action `%s'"
+msgstr "`%s' művelet utáni extra karakterek"
+
+#: info/infokey.c:723
+msgid "missing variable name"
+msgstr "hiányzó változónév"
+
+#: info/infokey.c:733
+msgid "missing `=' immediately after variable name"
+msgstr "hiányzó „=“ jel közvetlen egy változónév után"
+
+#: info/infokey.c:741
+msgid "variable name too long"
+msgstr "túl hosszú változónév"
+
+# long = hosszú vagy
+# long = nagy ? LM
+# nagy - kiváló fordítási stílus! - sas
+#: info/infokey.c:765
+msgid "value too long"
+msgstr "túl nagy érték"
+
+#: info/infokey.c:890
+#, c-format
+msgid "\"%s\", line %u: "
+msgstr "„%s“, %u. sor: "
+
+#: info/infokey.c:906
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [INPUT-FILE]\n"
+"\n"
+"Compile infokey source file to infokey file. Reads INPUT-FILE (default\n"
+"$HOME/.infokey) and writes compiled key file to (by default) $HOME/.info.\n"
+"\n"
+"Options:\n"
+" --output FILE output to FILE instead of $HOME/.info\n"
+" --help display this help and exit.\n"
+" --version display version information and exit.\n"
+msgstr ""
+
+#: info/infomap.c:955
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr ""
+
+#: info/infomap.c:958
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr ""
+
+#: info/infomap.c:971
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr ""
+
+#: info/infomap.c:990
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:999
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1015
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1036
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1171
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr ""
+
+#: info/infomap.c:1221
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr ""
+
+#: info/m-x.c:68
+msgid "Read the name of an Info command and describe it"
+msgstr ""
+
+#: info/m-x.c:72
+msgid "Describe command: "
+msgstr "Parancs leírása: "
+
+# FORDITANI
+#: info/m-x.c:95
+msgid "Read a command name in the echo area and execute it"
+msgstr ""
+
+# FORDITANI
+#: info/m-x.c:139
+msgid "Cannot execute an `echo-area' command here."
+msgstr ""
+
+#: info/m-x.c:153
+#, c-format
+msgid "Undefined command: %s"
+msgstr "Definiálatlan parancs: %s"
+
+#: info/m-x.c:159
+msgid "Set the height of the displayed window"
+msgstr "A megjelnített ablak magasságának beállítása"
+
+#: info/m-x.c:172
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "A képernyő magasságának beállítása (%d): "
+
+# FORDITANI
+#: info/makedoc.c:166 info/makedoc.c:174
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+
+#: info/makedoc.c:556
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "A(z) „%s“ fájl nem módosítható.\n"
+
+# node = oldal ? LM
+# containing file ? LM
+# szerintem itt arról a fájlról van szó, amely tartalmazza ezt. (mondjuk: gazdafájl?) - sas
+#: info/nodemenu.c:30
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+"\n"
+"* Menü:\n"
+" (Fájl)Oldal Sorok Méret Fájlt tartalmaz\n"
+" ----------- ----- ----- ---------------"
+
+# FORDITANI
+#: info/nodemenu.c:201
+msgid ""
+"Here is the menu of nodes you have recently visited.\n"
+"Select one from this menu, or use `\\[history-node]' in another window.\n"
+msgstr ""
+
+# FORDITANI
+#: info/nodemenu.c:223
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr ""
+
+# FORDITANI
+#: info/nodemenu.c:303
+msgid "Select a node which has been previously visited in a visible window"
+msgstr ""
+
+#: info/nodemenu.c:316
+msgid "Select visited node: "
+msgstr "Meglátogatott oldal kiválasztása: "
+
+#: info/nodemenu.c:336 info/session.c:2578
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "A hivatkozás eltünt! (%s)."
+
+#: info/search.c:166
+#, c-format
+msgid "regexp error: %s"
+msgstr ""
+
+#: info/session.c:164
+#, c-format
+msgid ""
+"Welcome to Info version %s. Type \\[get-help-window] for help, \\[menu-item] "
+"for menu item."
+msgstr ""
+"Üdvözöljük az Info %s verziójában. Segítség kéréséhez a(z) „\\[get-help-"
+"window]“-t, a menühöz ugráshoz a(z) „\\[menu-item]“-t kell begépelni"
+
+#: info/session.c:625
+msgid "Move down to the next line"
+msgstr "Ugrás a következő sorra"
+
+#: info/session.c:661
+msgid "Move up to the previous line"
+msgstr "Ugrás az előző sorra"
+
+#: info/session.c:931
+msgid "Move to the end of the line"
+msgstr "Ugrás a sor végére"
+
+#: info/session.c:942
+msgid "Move to the start of the line"
+msgstr "Ugrás a sor elejére"
+
+#: info/session.c:1142
+msgid "Next"
+msgstr "Következő"
+
+# node=oldal ? LM
+#: info/session.c:1158 info/session.c:1283
+msgid "No more nodes within this document."
+msgstr "Nincs több oldal e dokumentumban."
+
+#: info/session.c:1309
+msgid "No `Prev' for this node."
+msgstr "Nincs „Előző“ oldala e pontnak."
+
+# ATNEZNI LM
+#: info/session.c:1329
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr "Nincs Előző vagy Fel lehetőség e ponthoz e dokumentumban."
+
+#: info/session.c:1391
+msgid "Move forwards or down through node structure"
+msgstr "Mozgás előre vagy le az oldal szerkeztében"
+
+#: info/session.c:1407
+msgid "Move backwards or up through node structure"
+msgstr "Mozgás hátra vagy fel az oldal szerkezetében"
+
+#: info/session.c:1508
+msgid "Scroll forward in this window"
+msgstr "Görgetés előre az ablakban"
+
+#: info/session.c:1516
+msgid "Scroll forward in this window and set default window size"
+msgstr "Görgetés előre az ablakban és beállítása alapértelmezett méretre"
+
+# aktuális ? LM
+# Nem. [semmi], e, jelen, stb. - sas
+#: info/session.c:1524
+msgid "Scroll forward in this window staying within node"
+msgstr "Görgetés előre az ablakban ezen oldalon maradva"
+
+#: info/session.c:1532
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr ""
+"Görgetés előre az ablakban ezen oldalon maradva, és az alap ablakméret "
+"beállítása"
+
+#: info/session.c:1540
+msgid "Scroll backward in this window"
+msgstr "Görgetés hátra az ablakban"
+
+#: info/session.c:1548
+msgid "Scroll backward in this window and set default window size"
+msgstr "Görgetés hátra az ablakban és beállítása alapértelmezett méretre"
+
+# aktuális ? LM
+# Nem. [semmi], e, jelen, stb. - sas
+#: info/session.c:1557
+msgid "Scroll backward in this window staying within node"
+msgstr "Görgetés hátra az ablakban ezen oldalon maradva"
+
+#: info/session.c:1565
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr ""
+"Görgetés hátra az ablakban ezen oldalon maradva, és az alap ablakméret "
+"beállítása"
+
+#: info/session.c:1573
+msgid "Move to the start of this node"
+msgstr "Ugrás az oldal elejére"
+
+#: info/session.c:1580
+msgid "Move to the end of this node"
+msgstr "Ugrás az oldal végére"
+
+#: info/session.c:1587
+msgid "Scroll down by lines"
+msgstr "Görgetés soronként le"
+
+#: info/session.c:1604
+msgid "Scroll up by lines"
+msgstr "Görgetés soronként fel"
+
+#: info/session.c:1622
+msgid "Scroll down by half screen size"
+msgstr "Görgetés egy fél képernyőnyit le"
+
+#: info/session.c:1648
+msgid "Scroll up by half screen size"
+msgstr "Görgetés egy fél képernyőnyit fel"
+
+#: info/session.c:1677
+msgid "Select the next window"
+msgstr "Következő ablak kiválasztása"
+
+#: info/session.c:1716
+msgid "Select the previous window"
+msgstr "Előző ablak kiválasztása"
+
+#: info/session.c:1767
+msgid "Split the current window"
+msgstr "Jelen ablak felosztása"
+
+#: info/session.c:1848
+msgid "Delete the current window"
+msgstr "Jelen ablak törlése"
+
+#: info/session.c:1856
+msgid "Cannot delete a permanent window"
+msgstr "Egy állandó ablakot nem lehet törölni"
+
+#: info/session.c:1888
+msgid "Delete all other windows"
+msgstr "Többi ablak bezárása"
+
+#: info/session.c:1934
+msgid "Scroll the other window"
+msgstr "Másik ablak görgetése"
+
+#: info/session.c:1955
+msgid "Scroll the other window backward"
+msgstr "A másik ablak görgetése hátra"
+
+# aktuális ? LM
+# Nem. [semmi], e, jelen, stb. - sas
+#: info/session.c:1961
+msgid "Grow (or shrink) this window"
+msgstr "Jelen ablak növelése (csökkentése)"
+
+#: info/session.c:1972
+msgid "Divide the available screen space among the visible windows"
+msgstr "Elérhető képernyőhely felosztása a látható ablakok közt"
+
+# FORDITANI
+#: info/session.c:1979
+msgid "Toggle the state of line wrapping in the current window"
+msgstr ""
+
+#: info/session.c:1986
+msgid "Toggle the usage of regular expressions in searches"
+msgstr ""
+
+#: info/session.c:1990
+msgid "Using regular expressions for searches."
+msgstr ""
+
+#: info/session.c:1991
+msgid "Using literal strings for searches."
+msgstr ""
+
+#: info/session.c:2162
+msgid "Select the Next node"
+msgstr "Következő oldal kiválasztása"
+
+#: info/session.c:2170
+msgid "Select the Prev node"
+msgstr "Előző oldal kiválasztása"
+
+#: info/session.c:2178
+msgid "Select the Up node"
+msgstr "Szülő oldal kiválasztása"
+
+#: info/session.c:2185
+msgid "Select the last node in this file"
+msgstr "A fájl utolsó oldala kiválasztása"
+
+#: info/session.c:2212 info/session.c:2245
+msgid "This window has no additional nodes"
+msgstr "Jelen ablaknak nincsenek további oldalai"
+
+#: info/session.c:2218
+msgid "Select the first node in this file"
+msgstr "A fájl első oldala kiválasztása"
+
+#: info/session.c:2252
+msgid "Select the last item in this node's menu"
+msgstr "Az oldal menüjében található utolsó elem kiválasztása"
+
+#: info/session.c:2258
+msgid "Select this menu item"
+msgstr "A menüelem kiválasztása"
+
+#: info/session.c:2291
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "Nincs %d elem e menüben."
+
+#: info/session.c:2485 info/session.c:2486
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Menüelem (%s): "
+
+#: info/session.c:2489
+msgid "Menu item: "
+msgstr "Menüelem: "
+
+# miért nem Krhiv? :))) - sas
+#: info/session.c:2496 info/session.c:2497
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Kereszthiv (%s) követése: "
+
+# miért nem Krhiv? :))) - sas
+#: info/session.c:2500
+msgid "Follow xref: "
+msgstr "Kereszthiv követése: "
+
+#: info/session.c:2629
+msgid "Read a menu item and select its node"
+msgstr "Egy menüelem elolvasása és oldalának kiválasztása"
+
+#: info/session.c:2637
+msgid "Read a footnote or cross reference and select its node"
+msgstr ""
+"Egy lábjegyzet vagy kereszthivatkozás elolvasása és oldalának kiválasztása"
+
+#: info/session.c:2643
+msgid "Move to the start of this node's menu"
+msgstr "Ugrás az oldalhoz tartozó menü elejére"
+
+#: info/session.c:2667
+msgid "Visit as many menu items at once as possible"
+msgstr "A lehető legtöbb menüelem meglátogatása egyszerre"
+
+#: info/session.c:2695
+msgid "Read a node name and select it"
+msgstr "Egy oldalnév elolvasása és kiválasztása"
+
+#: info/session.c:2750 info/session.c:2755
+msgid "Goto node: "
+msgstr "Ugrás az oldalra: "
+
+#: info/session.c:2819
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "Nincs menü a(z) „%s“ oldalon."
+
+#: info/session.c:2865
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "Nincs „%s“ menüelem a(z) „%s“ oldalon."
+
+# található / találom ? LM
+# lelem, találom, nincs - sas
+#: info/session.c:2895
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr "Nincs a(z) „%s“ által hivatkozott oldal ebben: „%s“."
+
+# FORDITANI
+#: info/session.c:2945
+msgid "Read a list of menus starting from dir and follow them"
+msgstr ""
+
+#: info/session.c:2947
+msgid "Follow menus: "
+msgstr "Menük követése: "
+
+# FORDITANI
+#: info/session.c:3140
+msgid "Find the node describing program invocation"
+msgstr ""
+
+# FORDITANI
+#: info/session.c:3142
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr ""
+
+#: info/session.c:3180
+msgid "Read a manpage reference and select it"
+msgstr "Egy kéziköny oldal hivatkozás olvasása és kiválasztása"
+
+# Kézikönyv ? LM
+# Manpage = kézikönyv oldal. Adott esetben egyszerűen manlapként vagy manoldalként is hivatkozhatunk rájuk, mivel kissé elavultak. A GNU rendszer alapértelemzett dokumentációformátuma az Info. Ezért is olyan fontos a fordítás, amit készítesz :-) (és amibe ey icipicit besegítek ...) - sas
+#: info/session.c:3184
+msgid "Get Manpage: "
+msgstr "Kézikönyv oldal: "
+
+#: info/session.c:3214
+msgid "Select the node `Top' in this file"
+msgstr "Legfelső oldal kiválasztása e fájban"
+
+#: info/session.c:3220
+msgid "Select the node `(dir)'"
+msgstr "A „(dir)“ oldal kiválasztása"
+
+#: info/session.c:3237 info/session.c:3239
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Oldal törlése (%s): "
+
+#: info/session.c:3291
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "A(z) „%s“ oldal nem törölhető"
+
+#: info/session.c:3301
+msgid "Cannot kill the last node"
+msgstr "Az utolsó oldal nem törölhető"
+
+#: info/session.c:3387
+msgid "Select the most recently selected node"
+msgstr "A legutóbb választott oldal kiválasztása"
+
+#: info/session.c:3393
+msgid "Kill this node"
+msgstr "Ezen oldal törlése"
+
+#: info/session.c:3401
+msgid "Read the name of a file and select it"
+msgstr "Fájlnév beolvasása és kiválasztása"
+
+#: info/session.c:3405
+msgid "Find file: "
+msgstr "Fájl keresése: "
+
+# található / találom
+# a mondatszerkezet miatt itt jó a nem található - sas
+#: info/session.c:3422
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "„%s“ nem található."
+
+#: info/session.c:3465 info/session.c:3583
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "A kimeneti fájl („%s“) nem hozható létre."
+
+#: info/session.c:3479 info/session.c:3601 info/session.c:3661
+msgid "Done."
+msgstr "Kész."
+
+# írás / mentés ? LM
+# írás - sas
+#: info/session.c:3534
+#, c-format
+msgid "Writing node %s..."
+msgstr "„%s“ oldal írása..."
+
+# pipe/cső ? LM
+# elolvasva, nekem a cső tetszik - sas
+#: info/session.c:3610
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr "Ezen oldal tartalmának csőbe irányítása INFO_PRINT_COMMAND -al"
+
+# pipe / cső ? LM
+# semmiképen nem pipe - sas
+#: info/session.c:3645
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "Nem hozható létre cső ehhez: „%s“."
+
+#: info/session.c:3651
+#, c-format
+msgid "Printing node %s..."
+msgstr "%s oldal nyomtatása..."
+
+#: info/session.c:3900
+msgid "Search continued from the end of the document."
+msgstr ""
+
+#: info/session.c:3905
+#, fuzzy
+msgid "Search continued from the beginning of the document."
+msgstr "Törlés a sor elejéig"
+
+# alállomány ? LM
+# passz - sas
+#: info/session.c:3922
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "„%s“ alállomány keresése..."
+
+#: info/session.c:3979
+msgid "Read a string and search for it case-sensitively"
+msgstr "Szöveg beolvasása és keresése kis/nagybetű érzékenyen"
+
+#: info/session.c:3986
+msgid "Read a string and search for it"
+msgstr "Szöveg beolvasása és keresése "
+
+#: info/session.c:3994
+msgid "Read a string and search backward for it"
+msgstr "Szöveg beolvasása és keresése fel"
+
+# FORDITANI
+#: info/session.c:4030 info/session.c:4036
+#, fuzzy, c-format
+msgid "%s%s%s [%s]: "
+msgstr "%s%sa sztringhez [%s]: "
+
+#: info/session.c:4031 info/session.c:4037
+msgid "Regexp search"
+msgstr ""
+
+# érzékenyen / érzékenység
+#: info/session.c:4032 info/session.c:4038
+#, fuzzy
+msgid " case-sensitively"
+msgstr "kis/nagybetű érzékenyen"
+
+#: info/session.c:4033 info/session.c:4039
+#, fuzzy
+msgid " backward"
+msgstr "Keresés felfelé"
+
+#: info/session.c:4037
+msgid "Search"
+msgstr "Keresés"
+
+#: info/session.c:4079
+msgid "Search failed."
+msgstr "A keresés sikertelen volt."
+
+#: info/session.c:4097
+msgid "Repeat last search in the same direction"
+msgstr "Utolsó keresés ismétlése azonos irányba"
+
+# keresési feltétel / keresési szöveg / keresett szöveg ? LM
+#: info/session.c:4100 info/session.c:4110
+msgid "No previous search string"
+msgstr "Nincs korábbi keresési feltétel"
+
+#: info/session.c:4107
+msgid "Repeat last search in the reverse direction"
+msgstr "Utolsó keresés ismétlése ellenirányban"
+
+# JAVITANI ?
+#: info/session.c:4126 info/session.c:4132
+msgid "Search interactively for a string as you type it"
+msgstr "Egy szöveg interaktív keresése gépeléskor"
+
+#: info/session.c:4212
+#, fuzzy
+msgid "Regexp I-search backward: "
+msgstr "I.-keresés fel: "
+
+#: info/session.c:4213
+msgid "I-search backward: "
+msgstr "I.-keresés fel: "
+
+#: info/session.c:4215
+#, fuzzy
+msgid "Regexp I-search: "
+msgstr "I.-keresés: "
+
+#: info/session.c:4216
+msgid "I-search: "
+msgstr "I.-keresés: "
+
+# checkit
+# FORDITANI
+#: info/session.c:4241 info/session.c:4243
+msgid "Failing "
+msgstr "Sikertelen"
+
+#: info/session.c:4734
+msgid "Move to the previous cross reference"
+msgstr "Ugrás az előző kereszthivatkozásra"
+
+#: info/session.c:4752
+msgid "Move to the next cross reference"
+msgstr "Ugrás a következő kereszthivatkozásra"
+
+#: info/session.c:4774
+msgid "Select reference or menu item appearing on this line"
+msgstr "A sorban megjelenő hivatkozás vagy menüelem kiválasztása"
+
+#: info/session.c:4797
+msgid "Cancel current operation"
+msgstr "Jelen művelet törlése"
+
+#: info/session.c:4804
+msgid "Quit"
+msgstr "Kilépés"
+
+#: info/session.c:4813
+msgid "Move the cursor to a specific line of the window"
+msgstr "A kurzor mogatása az ablak egy adott sorára "
+
+#: info/session.c:4845
+msgid "Redraw the display"
+msgstr "Képernyő frissítése"
+
+# rövidebb forma? Kilépés az Info-ból ? LM
+# általában NAON.! fontos a RÖV.SÉG, de itt kivételesen szerintem maradhat ez - sas
+#: info/session.c:4882
+msgid "Quit using Info"
+msgstr "Az Info használatának befejezése"
+
+#: info/session.c:4895
+msgid "Run command bound to this key's lowercase variant"
+msgstr "E karakter kisbetűs változatához rendelt parancs futtatása"
+
+#: info/session.c:4906
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "Ismeretlen parancs (%s)."
+
+#: info/session.c:4909
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "\"%s\" érvénytelen"
+
+#: info/session.c:4910
+#, c-format
+msgid "`%s' is invalid"
+msgstr "„%s“ érvénytelen"
+
+#: info/session.c:5125
+msgid "Add this digit to the current numeric argument"
+msgstr "Add hozzá ezt a számjegyet az aktuális numerikus argumentumhoz"
+
+#: info/session.c:5134
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "Start (vagy szorozd be 4-gyel) az aktuális numerikus argumentumot"
+
+#: info/session.c:5149
+msgid "Internally used by \\[universal-argument]"
+msgstr "Belső használatra a \\[universal-argument]-nek"
+
+#: info/tilde.c:336
+#, c-format
+msgid "readline: Out of virtual memory!\n"
+msgstr "readline: Nincs több virtuális memória!\n"
+
+# on = be ? LM
+#: info/variables.c:37
+msgid "When \"On\", footnotes appear and disappear automatically"
+msgstr "„Be“ állapotban a lábjegyzetek automatikusan jelennek meg és tűnnek el"
+
+#: info/variables.c:41
+msgid "When \"On\", creating or deleting a window resizes other windows"
+msgstr ""
+"„Be“ állapotban egy ablak létrehozása vagy törlése a többi is átméretezi"
+
+#: info/variables.c:45
+msgid "When \"On\", flash the screen instead of ringing the bell"
+msgstr "„Be“ állapotban a képernyő villog csengő helyett"
+
+#: info/variables.c:49
+msgid "When \"On\", errors cause the bell to ring"
+msgstr "„Be“ állapotban, hibánál csngetés"
+
+#: info/variables.c:53
+msgid "When \"On\", Info garbage collects files which had to be uncompressed"
+msgstr "„Be“ állapotban az Info összegyűjti a tömörítendő fájlokat"
+
+#: info/variables.c:56
+msgid "When \"On\", the portion of the matched search string is highlighted"
+msgstr "„Be“ állapotban a megtalált szövegrészlet ki lesz emelve"
+
+#: info/variables.c:60
+msgid "Controls what happens when scrolling is requested at the end of a node"
+msgstr "Vezérli, hogy mi történjen, ha a görgetés a lap alján történik"
+
+#: info/variables.c:65
+msgid "Same as scroll-behaviour"
+msgstr ""
+
+#: info/variables.c:69
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr "A görgetendő sorok száma, ha akurzor az ablakon kívülre mozog"
+
+#: info/variables.c:73
+msgid "Controls whether scroll-behavior affects cursor movement commands"
+msgstr ""
+
+#: info/variables.c:77
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr "„Be“ állapotban az Info elfogadja és kiírja az ISO Latin karaktereket"
+
+#: info/variables.c:81
+#, fuzzy
+msgid ""
+"What to do when a scrolling command is issued at the end of the last node"
+msgstr "Vezérli, hogy mi történjen, ha a görgetés a lap alján történik"
+
+#: info/variables.c:88
+msgid "Explain the use of a variable"
+msgstr "A változó használatának elmagyarázása"
+
+#: info/variables.c:94
+msgid "Describe variable: "
+msgstr "Változó leírása: "
+
+#: info/variables.c:113
+msgid "Set the value of an Info variable"
+msgstr "Egy Info változó beállítása"
+
+#: info/variables.c:119
+msgid "Set variable: "
+msgstr "Változó beállítása:"
+
+#: info/variables.c:137
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "%s beállítása (%d): "
+
+#: info/variables.c:178
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "%s beállítása (%s): "
+
+#: info/window.c:1026
+msgid "--*** Tags out of Date ***"
+msgstr "--*** lejárt dátumú Tagek ***"
+
+#: info/window.c:1037
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), sor ----, "
+
+#: info/window.c:1044
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d sor --%s--"
+
+#: info/window.c:1048
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d sor --%s--"
+
+# subfile ? LM
+# Passz - sas
+#: info/window.c:1055
+#, c-format
+msgid " Subfile: %s"
+msgstr "Alfájl: %s"
+
+#: install-info/install-info.c:221
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: figyelem: "
+
+#: install-info/install-info.c:270
+#, c-format
+msgid " for %s"
+msgstr " ehhez: %s"
+
+#: install-info/install-info.c:500
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr "\tAz opciók teljes listájához próbálja meg a „%s --help“ parancsot!\n"
+
+#: install-info/install-info.c:508
+#, fuzzy, c-format
+msgid "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+msgstr "Használat: %s [OPCIÓK] ... TEXINFO-FÃJL...\n"
+
+#: install-info/install-info.c:510
+msgid "Add or remove entries in INFO-FILE from the Info directory DIR-FILE."
+msgstr ""
+
+#: install-info/install-info.c:513
+msgid ""
+"Options:\n"
+" --debug report what is being done.\n"
+" --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+" don't insert any new entries.\n"
+" --description=TEXT the description of the entry is TEXT; used with\n"
+" the --name option to become synonymous with the\n"
+" --entry option.\n"
+" --dir-file=NAME specify file name of Info directory file;\n"
+" equivalent to using the DIR-FILE argument.\n"
+" --dry-run same as --test."
+msgstr ""
+
+#: install-info/install-info.c:525
+msgid ""
+" --entry=TEXT insert TEXT as an Info directory entry.\n"
+" TEXT is written as an Info menu item line followed\n"
+" by zero or more extra lines starting with "
+"whitespace.\n"
+" If you specify more than one entry, all are added.\n"
+" If you don't specify any entries, they are determined\n"
+" from information in the Info file itself.\n"
+" When removing, TEXT specifies the entry to remove.\n"
+" TEXT is only removed as a last resort, if the\n"
+" entry as determined from the Info file is not "
+"present,\n"
+" and the basename of the Info file isn't found either."
+msgstr ""
+
+#: install-info/install-info.c:537
+msgid ""
+" --help display this help and exit.\n"
+" --info-dir=DIR same as --dir-file=DIR/dir.\n"
+" --info-file=FILE specify Info file to install in the directory;\n"
+" equivalent to using the INFO-FILE argument.\n"
+" --item=TEXT same as --entry=TEXT.\n"
+" --keep-old do not replace entries, or remove empty sections.\n"
+" --menuentry=TEXT same as --name=TEXT.\n"
+" --name=TEXT the name of the entry is TEXT; used with --description\n"
+" to become synonymous with the --entry option.\n"
+" --no-indent do not format new entries in the DIR file.\n"
+" --quiet suppress warnings."
+msgstr ""
+
+#: install-info/install-info.c:550
+msgid ""
+" --regex=R put this file's entries in all sections that match the\n"
+" regular expression R (ignoring case).\n"
+" --remove same as --delete.\n"
+" --remove-exactly only remove if the info file name matches exactly;\n"
+" suffixes such as .info and .gz are not ignored.\n"
+" --section=SEC put entries in section SEC of the directory.\n"
+" If you specify more than one section, all the entries\n"
+" are added in each of the sections.\n"
+" If you don't specify any sections, they are "
+"determined\n"
+" from information in the Info file itself.\n"
+" --section R SEC equivalent to --regex=R --section=SEC --add-once."
+msgstr ""
+
+#: install-info/install-info.c:563
+msgid ""
+" --silent suppress warnings.\n"
+" --test suppress updating of DIR-FILE.\n"
+" --version display version information and exit."
+msgstr ""
+
+#: install-info/install-info.c:570
+#, fuzzy
+msgid ""
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+"Hibajegyek a bug-texinfo@gnu.org,\n"
+"általános kérdések és ötletek a help-texinfo@gnu.org\n"
+"címre küldhetők.\n"
+"Texinfo honlap: http://www.gnu.org/software/texinfo/"
+
+#: install-info/install-info.c:597
+#, c-format
+msgid ""
+"This is the file .../info/dir, which contains the\n"
+"topmost node of the Info hierarchy, called (dir)Top.\n"
+"The first time you invoke Info you start off looking at this node.\n"
+"\n"
+"%s\tThis is the top of the INFO tree\n"
+"\n"
+" This (the Directory node) gives a menu of major topics.\n"
+" Typing \"q\" exits, \"?\" lists all Info commands, \"d\" returns here,\n"
+" \"h\" gives a primer for first-timers,\n"
+" \"mEmacs<Return>\" visits the Emacs manual, etc.\n"
+"\n"
+" In Emacs, you can click mouse button 2 on a menu item or cross reference\n"
+" to select it.\n"
+"\n"
+"%s\n"
+msgstr ""
+
+#: install-info/install-info.c:622
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr "%s:nem lehet beolvasni (%s) és nem lehet létrehozni (%s)\n"
+
+#: install-info/install-info.c:715
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: üres fájl"
+
+#: install-info/install-info.c:1046 install-info/install-info.c:1086
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "START-INFO-DIR-ENTRY-nek nincs END-INFO-DIR-ENTRY párja"
+
+#: install-info/install-info.c:1081
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "END-INFO-DIR-ENTRY-nek nincsSTART-INFO-DIR-ENTRY párja"
+
+#: install-info/install-info.c:1946 install-info/install-info.c:1956
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr "%s: már van dir fájl: %s\n"
+
+#: install-info/install-info.c:2036
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: Az Info fájlt csak egyszer kell megadni!\n"
+
+#: install-info/install-info.c:2069
+#, c-format
+msgid "Extra regular expression specified, ignoring `%s'"
+msgstr ""
+
+#: install-info/install-info.c:2081
+#, c-format
+msgid "Error in regular expression `%s': %s"
+msgstr ""
+
+#: install-info/install-info.c:2139
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "felesleges parancssori argumentum: „%s“"
+
+#: install-info/install-info.c:2143
+msgid "No input file specified; try --help for more information."
+msgstr ""
+"Nem lett input fájl megadva; további információért próbálja meg a --help-t!"
+
+# dir ? LM
+#: install-info/install-info.c:2146
+msgid "No dir file specified; try --help for more information."
+msgstr ""
+"Nem lett dir fájl megadva; további információért próbálja meg a --help-t!"
+
+# dir ? LM
+#: install-info/install-info.c:2288
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "nincs info dir bejegyzés „%s“-ben"
+
+#: install-info/install-info.c:2536
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "„%s“-hez nem találtam bejegyzést; nincs mit törölni"
+
+#: lib/xexit.c:54
+msgid "ferror on stdout\n"
+msgstr ""
+
+#: lib/xexit.c:59
+msgid "fflush error on stdout\n"
+msgstr ""
+
+#: makeinfo/cmds.c:582 makeinfo/cmds.c:604
+#, c-format
+msgid "arguments to @%s ignored"
+msgstr "@%s argumentuma(i) figyelmen kívül lett(ek) hagyva"
+
+#: makeinfo/cmds.c:779
+msgid "January"
+msgstr "Január"
+
+#: makeinfo/cmds.c:779
+msgid "February"
+msgstr "Február"
+
+#: makeinfo/cmds.c:779
+msgid "March"
+msgstr "Március"
+
+#: makeinfo/cmds.c:779
+msgid "April"
+msgstr "Ãprilis"
+
+#: makeinfo/cmds.c:779
+msgid "May"
+msgstr "Május"
+
+#: makeinfo/cmds.c:780
+msgid "June"
+msgstr "Június"
+
+#: makeinfo/cmds.c:780
+msgid "July"
+msgstr "Július"
+
+#: makeinfo/cmds.c:780
+msgid "August"
+msgstr "Augusztus"
+
+#: makeinfo/cmds.c:780
+msgid "September"
+msgstr "Szeptember"
+
+#: makeinfo/cmds.c:780
+msgid "October"
+msgstr "Október"
+
+#: makeinfo/cmds.c:781
+msgid "November"
+msgstr "November"
+
+#: makeinfo/cmds.c:781
+msgid "December"
+msgstr "December"
+
+#: makeinfo/cmds.c:1131
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "nem kedvelt karakter %c a @var-ban"
+
+#: makeinfo/cmds.c:1174
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "@sc argumentuma végig nagybetűs, így nincs hatása"
+
+#: makeinfo/cmds.c:1229
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "„{“-t vártam, de „%c“-t láttam"
+
+#: makeinfo/cmds.c:1269
+msgid "end of file inside verb block"
+msgstr ""
+
+#: makeinfo/cmds.c:1277
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "„}“-t vártam, de „%c“-t láttam"
+
+#: makeinfo/cmds.c:1308
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+
+#: makeinfo/cmds.c:1504
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s elavult"
+
+#: makeinfo/cmds.c:1612
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "@sp egy pozitív szám argumentumot vár, nem „%s“-t"
+
+#: makeinfo/cmds.c:2023 makeinfo/footnote.c:81
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "Rossz argumentum ide: %c%s"
+
+# elég / ahogy van ? LM
+#: makeinfo/cmds.c:2033 makeinfo/makeinfo.c:4317
+msgid "asis"
+msgstr ""
+
+#: makeinfo/cmds.c:2035 makeinfo/cmds.c:2065 makeinfo/makeinfo.c:4319
+msgid "none"
+msgstr "nincs"
+
+#: makeinfo/cmds.c:2049
+#, c-format
+msgid "Bad argument to @%s"
+msgstr "Rossz argumentum ide: @%s"
+
+#: makeinfo/cmds.c:2063
+msgid "insert"
+msgstr "beszúr"
+
+#: makeinfo/cmds.c:2079
+#, c-format
+msgid "Bad argument to @%s: %s"
+msgstr "Rossz argumentum ide: %s: %s"
+
+#: makeinfo/cmds.c:2162
+#, c-format
+msgid "Expected @%s on or off, not `%s'"
+msgstr "@%s on vagy off-t vártam, „%s“ helyett"
+
+#: makeinfo/cmds.c:2182
+#, c-format
+msgid "Only @%s 10 or 11 is supported, not `%s'"
+msgstr ""
+
+#: makeinfo/defun.c:83
+msgid "Missing `}' in @def arg"
+msgstr "Hiányzó „}“ a(z) @def arg.-ban"
+
+#: makeinfo/defun.c:711
+#, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr "Csak a(z) „@%s“ környezetben használható a(z) „@%s“"
+
+#: makeinfo/files.c:434
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:637
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr "„%s“ mellőzve lett a kimeneti fájlnév előtt"
+
+#: makeinfo/files.c:645
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr "„%s“ mellőzve lett, mivel a stdout-ra írok"
+
+#: makeinfo/files.c:693
+msgid "Output buffer not empty."
+msgstr "A kimeneti puffer nem üres."
+
+#: makeinfo/float.c:181
+#, c-format
+msgid "Requested float type `%s' not previously used"
+msgstr ""
+
+#: makeinfo/float.c:376 makeinfo/float.c:382 makeinfo/index.c:959
+#: makeinfo/index.c:965
+msgid "See "
+msgstr "Lásd "
+
+#: makeinfo/footnote.c:149
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "„%c%s“ argumentumot vár „{...}“, nem csak „%s“-t"
+
+#: makeinfo/footnote.c:164
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "A(z) „%s“ lábjegyzet záró kapcsoszárójele hiányzik "
+
+#: makeinfo/footnote.c:197
+msgid "Footnote defined without parent node"
+msgstr "Szülő nélkül definiált lábjegyzet"
+
+#: makeinfo/footnote.c:209
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "Lábjegyzetben nem lehet lábjegyzet"
+
+# HTML
+#: makeinfo/footnote.c:301 makeinfo/index.c:187
+msgid "Footnotes"
+msgstr "Lábjegyzetek"
+
+#: makeinfo/html.c:91
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr "%s: A CSS fájl nem nyitható meg: %s"
+
+#: makeinfo/html.c:180
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr "%s:%d: --css-file kommenttel végződik"
+
+#: makeinfo/html.c:426
+msgid "[unexpected] no html tag to pop"
+msgstr "[váratlan] nincs html tag, amit ki lehetne venni"
+
+#: makeinfo/html.c:800
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "[váratlan] érvénytelen oldalnév: „%s“"
+
+#: makeinfo/index.c:167
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "Ismeretlen tárgymutató „%s“"
+
+#: makeinfo/index.c:232
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr "Az Info nem tudja a „:“-t kezelni a „%s“ tárgymutatóbejegyzésben"
+
+#: makeinfo/index.c:410
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "„%s“ tárgymutató már létezik"
+
+#: makeinfo/index.c:453
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "Ismeretlen tárgymutató „%s“ és/vagy „%s“ itt: @synindex"
+
+#: makeinfo/index.c:676
+msgid "(line )"
+msgstr "(sor )"
+
+#: makeinfo/index.c:684
+#, c-format
+msgid "(line %*d)"
+msgstr "(%*d sor)"
+
+#: makeinfo/index.c:765
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "Ismeretlen tárgymutató „%s“ itt: @printindex"
+
+#: makeinfo/index.c:834
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "A(z) „%s“ tárgymutató bejegyzése az oldalakon kívülre esik"
+
+#: makeinfo/index.c:837 makeinfo/index.c:873
+msgid "(outside of any node)"
+msgstr "(az oldalakon kívül)"
+
+#: makeinfo/insertion.c:161
+msgid "@item not allowed in argument to @itemize"
+msgstr "@item nem szerepelhet az @itemize argumentumaként"
+
+# checkit
+# What does this mean? -ke-
+#: makeinfo/insertion.c:242
+msgid "Broken-Type in insertion_type_pname"
+msgstr ""
+
+#: makeinfo/insertion.c:338
+msgid "Enumeration stack overflow"
+msgstr ""
+
+#: makeinfo/insertion.c:370
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr ""
+
+# %citem ist ein Texinfo-Befehl
+#: makeinfo/insertion.c:639
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s egy argumentumot igényel: %citem formázását"
+
+# %cfloat ist ein Texinfo-Befehl
+#: makeinfo/insertion.c:727
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr "A %cfloat környezetet nem lehet beágyazni"
+
+#: makeinfo/insertion.c:981
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "„@end“-t vártam „%s“, de „%s“-t találtam"
+
+#: makeinfo/insertion.c:1349
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "Nincs egyező „%cend %s“"
+
+#: makeinfo/insertion.c:1618
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s betűt vagy számjegyet tartalmazhat"
+
+#: makeinfo/insertion.c:1718
+msgid "end of file inside verbatim block"
+msgstr "fájlvégét találtam egy nyitott blokkban"
+
+#: makeinfo/insertion.c:1942
+#, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "A(z) @%s -nek nincs értelme a „@float“ környezeten kívül"
+
+#: makeinfo/insertion.c:1978
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr ""
+"@menu-t találtam az első @node előtt. Létrehozom a „Szülő“ (Top) oldalt"
+
+#: makeinfo/insertion.c:1979
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr "esetleg a @top oldalt @ifnottex-be kellene tenni, @ifinfo helyett"
+
+#: makeinfo/insertion.c:1991
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr ""
+"@detailmenu-t találtam az első @node előtt. Létrehozom a „Szülő“ (Top) oldalt"
+
+#: makeinfo/insertion.c:2047
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr ""
+"A(z) @%s -nek nincs értelme a „@titlepage“ és a „@quotation“ környezeten "
+"kívül"
+
+#: makeinfo/insertion.c:2061
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "A(z) @%s -nek nincs értelme a „@titlepage“ környezeten kívül"
+
+#: makeinfo/insertion.c:2092
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "Nem egyező „%c%s“"
+
+#: makeinfo/insertion.c:2097
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "„%c%s“ után még írni kell valamit"
+
+#: makeinfo/insertion.c:2103
+#, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "„%s“ rossz argument ehhez:: „@%s“, „%s“-t használom"
+
+#: makeinfo/insertion.c:2200
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "@%s -nek nincs jelentése a(z) „@%s“ blokkon belül"
+
+#: makeinfo/insertion.c:2209
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "@itemx -nek nincs jelentése a(z) „%s“ blokkon belül"
+
+# checkit
+#: makeinfo/insertion.c:2383
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "%c%s egy beszúrási blokkon kívül található "
+
+#: makeinfo/lang.c:1218
+#, c-format
+msgid "no default territory known for language `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:1281
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr "%s nem egy ISO 639 szabvány szerinti nyelvkód"
+
+#: makeinfo/lang.c:1399
+#, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "ismeretlen kódolási név: „%s“"
+
+#: makeinfo/lang.c:1407
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "bocsánat, de a(z) „%s“ kódolás nem támogatott"
+
+#: makeinfo/lang.c:1492
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "érvénytelen kódolt karakter: „%s“"
+
+#: makeinfo/lang.c:1800
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr "%c%s „i“-t vagy „j“-t vár argumentumként, nem „%c“-t"
+
+#: makeinfo/lang.c:1804
+#, c-format
+msgid "%c%s expects a single character `i' or `j' as argument"
+msgstr "%c%s egy „i“ vagy „j“ karakter vár argumentumként"
+
+#: makeinfo/macro.c:128
+#, c-format
+msgid "macro `%s' previously defined"
+msgstr "a(z) „%s“ makró már korábban definiált lett"
+
+#: makeinfo/macro.c:132
+#, c-format
+msgid "here is the previous definition of `%s'"
+msgstr "„%s“ korábbi definíciója"
+
+#: makeinfo/macro.c:359
+#, c-format
+msgid "\\ in macro expansion followed by `%s' instead of parameter name"
+msgstr ""
+
+#: makeinfo/macro.c:401
+#, c-format
+msgid "Macro `%s' called on line %d with too many args"
+msgstr "A(z) „%s“ makró túl sok argumentummal lett meghívva a %d sorban"
+
+#: makeinfo/macro.c:580
+#, c-format
+msgid "%cend macro not found"
+msgstr "%cend makró nem található"
+
+#: makeinfo/macro.c:591
+msgid "@allow-recursion is deprecated; please use @rmacro instead"
+msgstr ""
+
+#: makeinfo/macro.c:606
+msgid "@quote-arg is deprecated; arguments are quoted by default"
+msgstr ""
+
+#: makeinfo/macro.c:649
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:188
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "Túl sok hiba! Feladom.\n"
+
+#: makeinfo/makeinfo.c:306
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: figyelem: "
+
+#: makeinfo/makeinfo.c:325 makeinfo/makeinfo.c:2340
+#, c-format
+msgid "Misplaced %c"
+msgstr "Rossz helyen levő %c"
+
+#: makeinfo/makeinfo.c:344
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "További információért próbálja meg a „%s --help“-t.\n"
+
+#: makeinfo/makeinfo.c:347
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "Használat: %s [OPCIÓK] ... TEXINFO-FÃJL...\n"
+
+#: makeinfo/makeinfo.c:350
+msgid ""
+"Translate Texinfo source documentation to various other formats, by default\n"
+"Info files suitable for reading online with Emacs or standalone GNU Info.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:354
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\n"
+" --document-language=STR locale to use in translating Texinfo keywords\n"
+" for the output document (default C).\n"
+" --force preserve output even if errors.\n"
+" --help display this help and exit.\n"
+" --no-validate suppress node cross-reference validation.\n"
+" --no-warn suppress warnings (but not errors).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:369
+#, no-wrap
+msgid ""
+"Output format selection (default is to produce Info):\n"
+" --docbook output Docbook XML rather than Info.\n"
+" --html output HTML rather than Info.\n"
+" --xml output Texinfo XML rather than Info.\n"
+" --plaintext output plain text rather than Info.\n"
+msgstr ""
+"Kimeneti formátum választás (az alap az Info):\n"
+" --docbook DocBook XML kimenet INfo helyett.\n"
+" --html HTML kimenet Info helyett\n"
+" --xml Texinfo XML kimenet Info helyett\n"
+" --plaintext sima szöveg kimenet Info helyett\n"
+
+#: makeinfo/makeinfo.c:377
+msgid ""
+"General output options:\n"
+" -E, --macro-expand=FILE output macro-expanded source to FILE,\n"
+" ignoring any @setfilename.\n"
+" --no-headers suppress node separators, Node: lines, and "
+"menus\n"
+" from Info output (thus producing plain "
+"text)\n"
+" or from HTML (thus producing shorter "
+"output);\n"
+" also, write to standard output by default.\n"
+" --no-split suppress the splitting of Info or HTML "
+"output,\n"
+" generate only one output file.\n"
+" --number-sections output chapter and sectioning numbers.\n"
+" -o, --output=FILE output to FILE (or directory if split HTML).\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:391
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --disable-encoding do not output accented and special characters\n"
+" in Info output based on @documentencoding.\n"
+" --enable-encoding override --disable-encoding (default).\n"
+" --fill-column=NUM break Info lines at NUM characters (default %"
+"d).\n"
+" --footnote-style=STYLE output footnotes in Info according to STYLE:\n"
+" `separate' to put them in their own node;\n"
+" `end' to put them at the end of the node, "
+"in\n"
+" which they are defined (this is the "
+"default).\n"
+" --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %"
+"d).\n"
+" If VAL is `none', do not indent; if VAL is\n"
+" `asis', preserve existing indentation.\n"
+" --split-size=NUM split Info files at size NUM (default %d).\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:409
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+" --css-ref=URL generate reference to a CSS file.\n"
+" --internal-links=FILE produce list of internal links in FILE.\n"
+" --transliterate-file-names\n"
+" produce file names in ASCII transliteration.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:419
+#, c-format
+msgid ""
+"Options for XML and Docbook:\n"
+" --output-indent=VAL indent XML elements by VAL spaces (default %"
+"d).\n"
+" If VAL is 0, ignorable whitespace is "
+"dropped.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:426
+msgid ""
+"Input file options:\n"
+" --commands-in-node-names allow @ commands in node names.\n"
+" -D VAR define the variable VAR, as with @set.\n"
+" -I DIR append DIR to the @include search path.\n"
+" -P DIR prepend DIR to the @include search path.\n"
+" -U VAR undefine the variable VAR, as with @clear.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:435
+msgid ""
+"Conditional processing in input:\n"
+" --ifdocbook process @ifdocbook and @docbook even if\n"
+" not generating Docbook.\n"
+" --ifhtml process @ifhtml and @html even if not generating HTML.\n"
+" --ifinfo process @ifinfo even if not generating Info.\n"
+" --ifplaintext process @ifplaintext even if not generating plain text.\n"
+" --iftex process @iftex and @tex; implies --no-split.\n"
+" --ifxml process @ifxml and @xml.\n"
+" --no-ifdocbook do not process @ifdocbook and @docbook text.\n"
+" --no-ifhtml do not process @ifhtml and @html text.\n"
+" --no-ifinfo do not process @ifinfo text.\n"
+" --no-ifplaintext do not process @ifplaintext text.\n"
+" --no-iftex do not process @iftex and @tex text.\n"
+" --no-ifxml do not process @ifxml and @xml text.\n"
+"\n"
+" Also, for the --no-ifFORMAT options, do process @ifnotFORMAT text.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:454
+msgid ""
+" The defaults for the @if... conditionals depend on the output format:\n"
+" if generating HTML, --ifhtml is on and the others are off;\n"
+" if generating Info, --ifinfo is on and the others are off;\n"
+" if generating plain text, --ifplaintext is on and the others are off;\n"
+" if generating XML, --ifxml is on and the others are off.\n"
+msgstr ""
+
+# Die "." am Zeilenende habe ich entfernt. -ke-
+#: makeinfo/makeinfo.c:462
+msgid ""
+"Examples:\n"
+" makeinfo foo.texi write Info to foo's @setfilename\n"
+" makeinfo --html foo.texi write HTML to @setfilename\n"
+" makeinfo --xml foo.texi write Texinfo XML to @setfilename\n"
+" makeinfo --docbook foo.texi write DocBook XML to @setfilename\n"
+" makeinfo --no-headers foo.texi write plain text to standard "
+"output\n"
+"\n"
+" makeinfo --html --no-headers foo.texi write html without node lines, "
+"menus\n"
+" makeinfo --number-sections foo.texi write Info with numbered sections\n"
+" makeinfo --no-split foo.texi write one Info file however big\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:622
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr ""
+"%s: Figyelmen kívül hagyom a fel nem ismert TEXINFO_OUTPUT_FORMAT értéket („%"
+"s“).\n"
+
+#: makeinfo/makeinfo.c:670 makeinfo/makeinfo.c:696 makeinfo/makeinfo.c:720
+#: makeinfo/makeinfo.c:780
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr "%s: a(z) %s argumentumának numerikusnak kell lennie, „%s“ helyett.\n"
+
+#: makeinfo/makeinfo.c:683
+#, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "%s: nem tudom a makrókiterjesztés „%s“ kimenetét megnyitni"
+
+#: makeinfo/makeinfo.c:688
+#, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr ""
+"%s: a második makrókiterjesztés „%s“ kimenetét figyelmen kívül hagyom.\n"
+
+#: makeinfo/makeinfo.c:733
+#, fuzzy, c-format
+msgid "%s: could not open internal links output `%s'"
+msgstr "%s: nem tudom a makrókiterjesztés „%s“ kimenetét megnyitni"
+
+#: makeinfo/makeinfo.c:738
+#, fuzzy, c-format
+msgid "%s: ignoring second internal links output `%s'.\n"
+msgstr ""
+"%s: a második makrókiterjesztés „%s“ kimenetét figyelmen kívül hagyom.\n"
+
+#: makeinfo/makeinfo.c:751
+#, c-format
+msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
+msgstr ""
+"%s: a --paragraph-indent argumentumának numerikusnak, „none“-nak vagy "
+"„asis“-nek kell lennie, „%s“ helyett.\n"
+
+#: makeinfo/makeinfo.c:769
+#, c-format
+msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
+msgstr ""
+"%s: a --footnote-style argumentumának „separate“-nek vagy „end“-nek kell "
+"lennie, „%s“ helyett.\n"
+
+#: makeinfo/makeinfo.c:844
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: hiányzó fájl argumentum.\n"
+
+#: makeinfo/makeinfo.c:1041 makeinfo/makeinfo.c:4166
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr "A többsoros %c%s parancs helytelenül van használva"
+
+#: makeinfo/makeinfo.c:1044
+#, c-format
+msgid "Expected `%s'"
+msgstr "„%s“-t várok"
+
+#: makeinfo/makeinfo.c:1521
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "A(z) „%s“ könyvtár nem hozható létre: %s"
+
+#: makeinfo/makeinfo.c:1567
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "Nem található „%s“ ebben: „%s“"
+
+#: makeinfo/makeinfo.c:1647
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr ""
+"%s: A makrókiterjesztést átirányítom a stdout-ra, mivel az Info kimete oda "
+"megy.\n"
+
+#: makeinfo/makeinfo.c:1677
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "%s fájl („%s“) készítése „%s“-ból.\n"
+
+#: makeinfo/makeinfo.c:1744
+#, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: A fellépett hibák miatt eltávolítom a(z) „%s“ makró kimeneti állományt; "
+"a megtartásához használja --force opciót.\n"
+
+#: makeinfo/makeinfo.c:1799
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: A fellépett hibák miatt eltávolítom a(z) „%s“ kimeneti állományt; a "
+"megtartásához használja --force opciót.\n"
+
+#: makeinfo/makeinfo.c:1818
+#, fuzzy, c-format
+msgid ""
+"%s: Removing internal links output file `%s' due to errors; use --force to "
+"preserve.\n"
+msgstr ""
+"%s: A fellépett hibák miatt eltávolítom a(z) „%s“ kimeneti állományt; a "
+"megtartásához használja --force opciót.\n"
+
+#: makeinfo/makeinfo.c:2113
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "Ismeretlen parancs: „%s“"
+
+#: makeinfo/makeinfo.c:2135
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr "Kapcsos zárójelekkel egy parancsot is megadhat @%s argumentumaként"
+
+#: makeinfo/makeinfo.c:2394
+#, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s kapcsos zárójelpárt vár"
+
+#: makeinfo/makeinfo.c:2407
+msgid "Unmatched }"
+msgstr "Pár nélküli }"
+
+#: makeinfo/makeinfo.c:2455
+msgid "NO_NAME!"
+msgstr "NINCS_NÉV!"
+
+#: makeinfo/makeinfo.c:2476
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s hiányzó kapcsos bezárójel"
+
+#: makeinfo/makeinfo.c:3482
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "@image a(z) „%s“ fájl (HTML) nem olvasható: %s"
+
+#: makeinfo/makeinfo.c:3488
+#, c-format
+msgid "No such file `%s'"
+msgstr "Nincs ilyen fájl: „%s“"
+
+#: makeinfo/makeinfo.c:3624
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "@image a(z) „%s“ fájl (szöveges) nem olvasható: %s"
+
+#: makeinfo/makeinfo.c:3633
+msgid "@image missing filename argument"
+msgstr "@image hiányzó fájlnév argumentum"
+
+# flag ? LM
+#: makeinfo/makeinfo.c:3851
+#, c-format
+msgid "undefined flag: %s"
+msgstr "ismeretlen flag: %s"
+
+# checkit
+#: makeinfo/makeinfo.c:3852
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{„%s“-hoz nincs érték}"
+
+#: makeinfo/makeinfo.c:3904
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s egy nevet igényel"
+
+# AATNEZNI ? LM
+#: makeinfo/makeinfo.c:4010
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "Korábban találtam fájl vége jelet, mint @end-t %s "
+
+#: makeinfo/makeinfo.c:4258
+#, c-format
+msgid "`%.40s...' is too long for expansion; not expanded"
+msgstr ""
+
+#: makeinfo/multi.c:116
+msgid "Missing } in @multitable template"
+msgstr "Hiányzó } a @multitable sablonban"
+
+#: makeinfo/multi.c:260
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr ""
+"figyelmen kívül hagyom a @multitable után álló felesleges „%s“ szöveget"
+
+#: makeinfo/multi.c:400
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "Túl sok oszlop szerepel a multitable elemben (max %d)"
+
+#: makeinfo/multi.c:563
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "[váratlan] nem lehet a(z) %d. oszlopot a multitable-ben kiválasztani"
+
+#: makeinfo/multi.c:592
+msgid "ignoring @tab outside of multitable"
+msgstr "figyelmen kívül hagyom a multitable-n kívül eső @tab-ot"
+
+# ATNEZNI ? LM
+#: makeinfo/multi.c:640
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** Multicolumn kimenet az utolsó sortól:\n"
+
+#: makeinfo/multi.c:643
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* %d. oszlop: kimenet = %s\n"
+
+#: makeinfo/node.c:279
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "A(z) „%s“ oldal korábban már definiálva lett a(z) %d. sorban"
+
+#: makeinfo/node.c:647
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "A(z) %s oldal formázása...\n"
+
+#: makeinfo/node.c:714
+#, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr ""
+"A(z) „%s“ oldalon szerepelnie kell szekcionálás (sectioning) parancsnak (pl. "
+"%c%s)"
+
+#: makeinfo/node.c:878
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "A(z) „%c%s“ parancshoz nem lett oldalnév rendelve"
+
+#: makeinfo/node.c:919 makeinfo/node.c:1163
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr "A(z) „%s“ horgony és a(z) „%s“ oldal ugyanarra a fájlnévre mutatnak"
+
+#: makeinfo/node.c:922
+msgid "This @anchor command ignored; references to it will not work"
+msgstr ""
+"Ez az @anchor parancs figyelmen kívül lett hagyva; bármely rá való "
+"hivatkozás nem fog működni"
+
+#: makeinfo/node.c:924 makeinfo/node.c:1166
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr "Nevezze át ezt a horgonyt vagy használja a „--no-split“ opciót"
+
+# split-HTML ? LM
+#: makeinfo/node.c:954
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr "Nem várt szöveg a(z) „%s“ split-HTML fájl végén"
+
+#: makeinfo/node.c:1160
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr "A(z) „%s“ és „%s“ horgonyok ugyanarra a fájlnévre mutatnak"
+
+#: makeinfo/node.c:1165
+msgid "@anchor command ignored; references to it will not work"
+msgstr ""
+"az @anchor parancs figyelmen kívül lett hagyva; bármely rá való hivatkozás "
+"nem fog működni"
+
+#: makeinfo/node.c:1362
+#, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr ""
+"%s egy nem létező oldalra („%s“) hivatkozik (esetleg hibás szekcionálás?)"
+
+# ATNEZNI ? LM
+#: makeinfo/node.c:1462
+#, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr ""
+"A(z) „%s“ oldalnak a Következő (Next) mezője nem mutat sehova (esetleg hibás "
+"szekcionálás?)"
+
+#: makeinfo/node.c:1465
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "Ennek az oldalnak (%s) hibás az Előző (Prev) mezője"
+
+# ATNEZNI ? LM
+#: makeinfo/node.c:1520
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "A(z) „%s“ oldalnak az Előző (Prev) mezője nem mutat sehova"
+
+#: makeinfo/node.c:1524
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "Ennek az oldalnak (%s) hibás a Következő (Next) mezője"
+
+#: makeinfo/node.c:1536
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr "„%s“-nek nincs Szülő (Up) mezője (esetleg hibás szekcionálás?)"
+
+#: makeinfo/node.c:1605
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr ""
+"A(z) „%s“ oldal nem tartalmaz menüelemet „%s“-hez, bár ez uóbbi a szülője"
+
+#: makeinfo/node.c:1637
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "nem hivatkozott oldal „%s“"
+
+#: makeinfo/node.c:1727
+#, c-format
+msgid "Removing %s\n"
+msgstr "Törlés: %s\n"
+
+#: makeinfo/node.c:1731
+#, c-format
+msgid "Can't remove file `%s': %s"
+msgstr "Nem törölhető fájl: `%s': %s"
+
+#: makeinfo/sectioning.c:122
+#, c-format
+msgid "Appendix %c"
+msgstr "Függelék: %c"
+
+#: makeinfo/sectioning.c:467
+#, c-format
+msgid "Internal error (search_sectioning) `%s'!"
+msgstr "Belső hiba (search_sectioning) „%s“!"
+
+#: makeinfo/sectioning.c:563
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "Belső hiba (search_sectioning) „%s“!"
+
+#: makeinfo/sectioning.c:624
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "%c%s már elavult; használja %c%s-t helyette"
+
+#: makeinfo/sectioning.c:640
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "Olyan oldal már létezik, amelynek szekciója %ctop"
+
+#: makeinfo/sectioning.c:648
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "Ãme a %ctop oldal"
+
+#: makeinfo/sectioning.c:664
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr ""
+"%ctop korábban szerepel, mint %cnode, az alapértelmezett %s-t használom"
+
+#: makeinfo/xml.c:1669
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "@image a(z) „%s“ fájl nem olvasható: %s"
+
+#: makeinfo/xml.c:2014
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+"ha a @headitem a @multitable utolsó elemeként szerepel, akkor a Docbook "
+"kimenet hibás lesz"
+
+# of ? LM
+# Na, ezt nem tudjuk. Vagy elírás és on-off (be-ki), vagy valamiből valamire alkalmazva: of, on: innen: ide: . MI EZ??? TESZTELNI KELL!
+#: makeinfo/xml.c:2150
+msgid "of"
+msgstr ""
+
+#: makeinfo/xml.c:2155
+msgid "on"
+msgstr ""
+
+#: makeinfo/xref.c:127
+msgid "First argument to cross-reference may not be empty"
+msgstr ""
+
+#: makeinfo/xref.c:252
+#, c-format
+msgid "Empty file name for HTML cross reference in `%s'"
+msgstr ""
+
+#: makeinfo/xref.c:387
+msgid "End of file reached while looking for `.' or `,'"
+msgstr ""
+
+#: makeinfo/xref.c:390
+#, c-format
+msgid "`.' or `,' must follow @%s, not `%c'"
+msgstr ""
+
+# node = csomópont? LM
+# vagy csak pont? sas
+#: makeinfo/xref.c:392
+#, fuzzy
+msgid "for cross-references in parentheses, use @pxref"
+msgstr "Ez az oldal nem tartalmaz kereszthivatkozást."
+
+#: makeinfo/xref.c:435
+msgid "First argument to @inforef may not be empty"
+msgstr ""
+
+#: util/texindex.c:223
+msgid "display this help and exit"
+msgstr "kiírja e súgót és kilép"
+
+#: util/texindex.c:225
+msgid "send output to FILE"
+msgstr "kimenet átirányítása FILE-ba"
+
+#: util/texindex.c:227
+msgid "display version information and exit"
+msgstr "kiírja a verzióinformációt és kilép"
+
+#: util/texindex.c:237
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "Használat: %s [OPCIÓK]... FÃJL...\n"
+
+#: util/texindex.c:238
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr "Rendezett tárgymutató generálása minden TeX kimeneti fájlhoz.\n"
+
+#: util/texindex.c:241
+#, c-format
+msgid "Usually FILE... is specified as `foo.%c%c' for a document `foo.texi'.\n"
+msgstr "FÃJL... általában „foo.%c%c“ alakú egy „foo.texi“ dokumentum esetén.\n"
+
+#: util/texindex.c:243
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Opciók:\n"
+
+#: util/texindex.c:743
+#, c-format
+msgid "failure reopening %s"
+msgstr "Hiba történt „%s“ újbóli megnyitásakor"
+
+#: util/texindex.c:758 util/texindex.c:786
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: nem Texinfo tárgymutatófájl"
+
+#: util/texindex.c:993
+#, c-format
+msgid "No page number in %s"
+msgstr "Nem található oldalszám ebben: %s"
+
+#: util/texindex.c:1066
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr "a(z) %s bejegyzés egy másodlagos névvel rendelkező bejegyzést követ"
+
+#~ msgid ""
+#~ "\\%-10[goto-node] Move to node specified by name.\n"
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ msgstr ""
+#~ "\\%-10[goto-node] Ugrás egy névvel megadott oldalra.\n"
+#~ " A névben akár egy fájl is szerepelhet, például (FÃJL)"
+#~ "OLDALNEVE.\n"
+
+# ATNEZNI LM
+#, fuzzy
+#~ msgid "\\%-10[next-node] Move to the next node of current section.\n"
+#~ msgstr "\\%-10[next-node] Ugrás a következő oldalra.\n"
+
+# tegez/magaz ? LM
+#~ msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+#~ msgstr ""
+#~ "--- A kilépéshez használja a(z) „\\[history-node]“-t vagy a(z) „\\[kill-"
+#~ "node]“-t ---\n"
+
+#, fuzzy
+#~ msgid "\\%-10[move-to-prev-xref] Skip to previous hypertext link [*].\n"
+#~ msgstr ""
+#~ "\\%-10[move-to-next-xref] Ugrás az oldalon található előző hypertext "
+#~ "bejegyzésre.\n"
+
+#~ msgid ""
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ msgstr ""
+#~ " Az állománynevet is meg lehet adni: (FÃJL)OLDALNEVE.\n"
+
+# követése / betöltése ?
+#~ msgid "Following Next node..."
+#~ msgstr "Következő oldal betöltése..."
+
+#~ msgid "Selecting first menu item..."
+#~ msgstr "1. menüelem kiválasztása..."
+
+#~ msgid "Selecting Next node..."
+#~ msgstr "Következő oldal kiválasztása..."
+
+#~ msgid "Moving Up %d time(s), then Next."
+#~ msgstr "Mozgás %d alkalommal felfele, majd a „Következő“ kiválasztása."
+
+# ATNEZNI LM
+#~ msgid "Moving Prev in this window."
+#~ msgstr "Ugrás az Előzőre ebben az ablakban."
+
+#~ msgid "Moving Up in this window."
+#~ msgstr "Mozgás Fel ebben az ablakban."
+
+# oldal ? LM
+#~ msgid "Moving to `Prev's last menu item."
+#~ msgstr "Ugrás az Előző utolsó menüelemére."
+
+#~ msgid " "
+#~ msgstr " "
+
+# Funkció ? LM
+#~ msgid "Function"
+#~ msgstr "Függvény"
+
+#~ msgid "Macro"
+#~ msgstr "Makró"
+
+# checkit
+# Form ? LM
+#~ msgid "Special Form"
+#~ msgstr "Kivételes forma"
+
+#~ msgid "Variable"
+#~ msgstr "Változó"
+
+#~ msgid "User Option"
+#~ msgstr "Felhasználói opció"
+
+# Instance ? LM
+# Példány? - sas
+#~ msgid "Instance Variable"
+#~ msgstr "Példány változó"
+
+#~ msgid "Method"
+#~ msgstr "Metódus"
+
+#~ msgid "Untitled"
+#~ msgstr "Névtelen"
+
+#~ msgid "This is %s, produced by makeinfo version %s from %s.\n"
+#~ msgstr "Ez itt %s, ami a makeinfo %s verziójával (%s) lett generálva.\n"
+
+# HTML
+#~ msgid "Next:"
+#~ msgstr "Következő:"
+
+#~ msgid "Previous:"
+#~ msgstr "Előző:"
+
+# HTML
+#~ msgid "Up:"
+#~ msgstr "Fel:"
+
+#~ msgid "Menu"
+#~ msgstr "Menü"
+
+# ATNEZNI ? LM
+#~ msgid "Cross"
+#~ msgstr "Kereszt"
+
+#~ msgid "Prev"
+#~ msgstr "Előző"
+
+#~ msgid "Up"
+#~ msgstr "Fel"
+
+#, fuzzy
+#~ msgid "see "
+#~ msgstr "Lásd "
+
+#~ msgid "menu item `%s' already exists, for file `%s'"
+#~ msgstr "A(z) „%s“ menüelem már létezik a „%s“ fájlhoz"
+
+# tegez/magaz ? LM
+#~ msgid "\\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+#~ msgstr ""
+#~ "\\%-10[menu-digit] Válassza ki az oldalhoz tartozó menü első ... "
+#~ "kilencedik elemét.\n"
+
+#~ msgid "node `%s' has been referenced %d times"
+#~ msgstr "a(z) „%s“ oldalra %d hivatkozás mutat"
+
+#~ msgid "@quote-arg only useful for single-argument macros"
+#~ msgstr "A @quote-arg csak az egyargumentumos makróknál használatos"
+
+#~ msgid "Table of Contents"
+#~ msgstr "Tartalom"
+
+#~ msgid "Short Contents"
+#~ msgstr "Rövid tartalom"
+
+#~ msgid "keep temporary files around after processing"
+#~ msgstr "az ideiglenes állományok megtartása a feldolgozás után"
+
+#~ msgid "do not keep temporary files around after processing (default)"
+#~ msgstr ""
+#~ "a feldolgozás után ne legyenek az ideiglenes állományok megtartva "
+#~ "(alapértelmezett)"
diff --git a/po/insert-header.sin b/po/insert-header.sin
new file mode 100644
index 0000000..b26de01
--- /dev/null
+++ b/po/insert-header.sin
@@ -0,0 +1,23 @@
+# Sed script that inserts the file called HEADER before the header entry.
+#
+# At each occurrence of a line starting with "msgid ", we execute the following
+# commands. At the first occurrence, insert the file. At the following
+# occurrences, do nothing. The distinction between the first and the following
+# occurrences is achieved by looking at the hold space.
+/^msgid /{
+x
+# Test if the hold space is empty.
+s/m/m/
+ta
+# Yes it was empty. First occurrence. Read the file.
+r HEADER
+# Output the file's contents by reading the next line. But don't lose the
+# current line while doing this.
+g
+N
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/po/ja.gmo b/po/ja.gmo
new file mode 100644
index 0000000..91bbc57
--- /dev/null
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
new file mode 100644
index 0000000..26a2c00
--- /dev/null
+++ b/po/ja.po
@@ -0,0 +1,3737 @@
+# Japanese message for texinfo 4.0f
+# Copyright (C) 2002 Free Software Foundation, Inc.
+# Daisuke Yamashita <yamad@mb.infoweb.ne.jp>, 1999-2002
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU texinfo 4.0f\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2008-09-18 20:38+0200\n"
+"PO-Revision-Date: 2002-01-23 20:46+0900\n"
+"Last-Translator: Daisuke Yamashita <yamad@mb.infoweb.ne.jp>\n"
+"Language-Team: Japanese <ja@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=EUC-JP\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: gnulib/lib/error.c:125
+msgid "Unknown system error"
+msgstr ""
+
+#: gnulib/lib/getopt.c:526 gnulib/lib/getopt.c:542
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó `%s' ¤ÏÛ£Ëæ¤Ç¤¹\n"
+
+#: gnulib/lib/getopt.c:575 gnulib/lib/getopt.c:579
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó `--%s' ¤Ï°ú¿ô¤¬ÉÔÍפǤ¹\n"
+
+#: gnulib/lib/getopt.c:588 gnulib/lib/getopt.c:593
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó `%c%s' ¤Ï°ú¿ô¤¬ÉÔÍפǤ¹\n"
+
+#: gnulib/lib/getopt.c:636 gnulib/lib/getopt.c:655 gnulib/lib/getopt.c:971
+#: gnulib/lib/getopt.c:990
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó `%s' ¤Ë¤Ï¡¢°ú¿ô¤¬É¬ÍפǤ¹\n"
+
+#: gnulib/lib/getopt.c:693 gnulib/lib/getopt.c:696
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: `--%s' ¤Ïǧ¼±¤Ç¤­¤Ê¤¤¥ª¥×¥·¥ç¥ó¤Ç¤¹\n"
+
+#: gnulib/lib/getopt.c:704 gnulib/lib/getopt.c:707
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: `%c%s' ¤Ïǧ¼±¤Ç¤­¤Ê¤¤¥ª¥×¥·¥ç¥ó¤Ç¤¹\n"
+
+#: gnulib/lib/getopt.c:759 gnulib/lib/getopt.c:762
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: ÉÔÀµ¤Ê¥ª¥×¥·¥ç¥ó -- %c\n"
+
+#: gnulib/lib/getopt.c:768 gnulib/lib/getopt.c:771
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ̵¸ú¤Ê¥ª¥×¥·¥ç¥ó -- %c\n"
+
+#: gnulib/lib/getopt.c:823 gnulib/lib/getopt.c:839 gnulib/lib/getopt.c:1043
+#: gnulib/lib/getopt.c:1061
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó¤Ï°ú¿ô¤òÍ׵ᤷ¤Þ¤¹ -- %c\n"
+
+#: gnulib/lib/getopt.c:892 gnulib/lib/getopt.c:908
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: `-W %s' ¥ª¥×¥·¥ç¥ó¤¬Û£Ëæ¤Ç¤¹\n"
+
+#: gnulib/lib/getopt.c:932 gnulib/lib/getopt.c:950
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: `-W %s' ¥ª¥×¥·¥ç¥ó¤Ë¤Ï°ú¿ô¤¬ÉÔÍפǤ¹\n"
+
+#: gnulib/lib/xalloc-die.c:34 gnulib/lib/xsetenv.c:37
+#, fuzzy, c-format
+msgid "memory exhausted"
+msgstr "²¾ÁÛ¥á¥â¥ê¤ò»È¤¤²Ì¤¿¤·¤Þ¤·¤¿"
+
+#: info/echo-area.c:283 info/session.c:966
+msgid "Move forward a character"
+msgstr "°ìʸ»úʬ¿Ê¤á¤ë"
+
+#: info/echo-area.c:295 info/session.c:993
+msgid "Move backward a character"
+msgstr "°ìʸ»úʬÌ᤹"
+
+#: info/echo-area.c:307
+msgid "Move to the start of this line"
+msgstr "¹ÔƬ¤Ë°ÜÆ°"
+
+#: info/echo-area.c:312
+msgid "Move to the end of this line"
+msgstr "¹ÔËö¤Ë°ÜÆ°"
+
+#: info/echo-area.c:320 info/session.c:1025
+msgid "Move forward a word"
+msgstr "ñ¸ì°ì¤Äʬ¿Ê¤á¤ë"
+
+#: info/echo-area.c:360 info/session.c:1049
+msgid "Move backward a word"
+msgstr "ñ¸ì°ì¤ÄʬÌ᤹"
+
+#: info/echo-area.c:400
+msgid "Delete the character under the cursor"
+msgstr "¥«¡¼¥½¥ë°ÌÃÖ¤Îʸ»ú¤òºï½ü"
+
+#: info/echo-area.c:430
+msgid "Delete the character behind the cursor"
+msgstr "¥«¡¼¥½¥ë¤Î¸å¤í¤Îʸ»ú¤òºï½ü"
+
+#: info/echo-area.c:451
+msgid "Cancel or quit operation"
+msgstr "¥­¥ã¥ó¥»¥ë¡¢Áàºî¤Î¼è¤ê»ß¤á"
+
+#: info/echo-area.c:466
+msgid "Accept (or force completion of) this line"
+msgstr "¤³¤Î¹Ô¤ò¼õ¤±Æþ¤ì¤ë(Ëô¤ÏÊä´°¤µ¤»¤ë)"
+
+#: info/echo-area.c:471
+msgid "Insert next character verbatim"
+msgstr "¼¡¤Îʸ»ú¤ò¤½¤Î¤Þ¤ÞÁÞÆþ¤¹¤ë"
+
+#: info/echo-area.c:479
+msgid "Insert this character"
+msgstr "¤³¤Îʸ»ú¤òÁÞÆþ¤¹¤ë"
+
+#: info/echo-area.c:498
+msgid "Insert a TAB character"
+msgstr "¥¿¥Öʸ»ú¤òÁÞÆþ¤¹¤ë"
+
+#: info/echo-area.c:505
+msgid "Transpose characters at point"
+msgstr "ʸ»ú¤Î¸ò´¹"
+
+#: info/echo-area.c:556
+msgid "Yank back the contents of the last kill"
+msgstr "¥­¥ë¥ê¥ó¥°¤ÎÆâÍƤòŽ¤ê¤Ä¤±¤ë"
+
+#: info/echo-area.c:563
+msgid "Kill ring is empty"
+msgstr "¥­¥ë¥ê¥ó¥°¤¬¶õ¤Ç¤¹"
+
+#: info/echo-area.c:576
+msgid "Yank back a previous kill"
+msgstr "°ÊÁ°¤Î¥­¥ë¥ê¥ó¥°ÆâÍƤòÁÞÆþ¤¹¤ë"
+
+#: info/echo-area.c:609
+msgid "Kill to the end of the line"
+msgstr "¹ÔËö¤Þ¤Ç¤òÀÚ¤ê¼è¤ë"
+
+#: info/echo-area.c:622
+msgid "Kill to the beginning of the line"
+msgstr "¹ÔƬ¤Þ¤Ç¤òÀÚ¤ê¼è¤ë"
+
+#: info/echo-area.c:634
+msgid "Kill the word following the cursor"
+msgstr "ñ¸ì¤Î¥«¡¼¥½¥ë¤è¤ê¤â¸å¤òÀÚ¤ê¼è¤ë"
+
+#: info/echo-area.c:654
+msgid "Kill the word preceding the cursor"
+msgstr "ñ¸ì¤Î¥«¡¼¥½¥ë¤è¤êÁ°¤òÀÚ¤ê¼è¤ë"
+
+#: info/echo-area.c:870 info/echo-area.c:926
+msgid "No completions"
+msgstr "Êä´°¸õÊ䤬¤¢¤ê¤Þ¤»¤ó"
+
+#: info/echo-area.c:872
+msgid "Not complete"
+msgstr "Êä´°¤Ç¤­¤Þ¤»¤ó"
+
+#: info/echo-area.c:913
+msgid "List possible completions"
+msgstr "Êä´°¥ê¥¹¥È"
+
+#: info/echo-area.c:930
+msgid "Sole completion"
+msgstr "Êä´°¤ò¹Ê¤ê¹þ¤ß¤Þ¤·¤¿"
+
+#: info/echo-area.c:939
+msgid "One completion:\n"
+msgstr "1 ¤Ä¤ÎÊä´°:\n"
+
+#: info/echo-area.c:940
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d ¸Ä¤ÎÊä´°\n"
+
+#: info/echo-area.c:1087
+msgid "Insert completion"
+msgstr "Êä´°¤òÁÞÆþ"
+
+#: info/echo-area.c:1222
+msgid "Building completions..."
+msgstr "Êä´°¥ê¥¹¥È¤òºîÀ®Ãæ..."
+
+#: info/echo-area.c:1342
+msgid "Scroll the completions window"
+msgstr "Êä´°¥¦¥£¥ó¥É¥¦¤ò¥¹¥¯¥í¡¼¥ë"
+
+#: info/footnotes.c:212
+msgid "Footnotes could not be displayed"
+msgstr "µÓÃí¤òɽ¼¨¤Ç¤­¤Þ¤»¤ó"
+
+#: info/footnotes.c:238
+msgid "Show the footnotes associated with this node in another window"
+msgstr "¾¤Î¥¦¥£¥ó¥É¥¦Æâ¤Ë¤³¤Î¥Î¡¼¥É¤È´ØÏ¢¤·¤¿µÓÃí¤òɽ¼¨"
+
+#: info/footnotes.h:26
+msgid "---------- Footnotes ----------"
+msgstr "------------ µÓÃí ------------"
+
+#: info/indices.c:171
+msgid "Look up a string in the index for this file"
+msgstr "¤³¤Î¥Õ¥¡¥¤¥ë¤Î¸«½Ð¤·¤«¤éʸ»úÎó¤ò¸¡º÷¤¹¤ë"
+
+#: info/indices.c:198
+msgid "Finding index entries..."
+msgstr "¸«½Ð¤·¹àÌܤò¸«¤Ä¤±¤Æ¤¤¤Þ¤¹"
+
+#: info/indices.c:206
+msgid "No indices found."
+msgstr "¹àÌܤ¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#: info/indices.c:216
+msgid "Index entry: "
+msgstr "¸«½Ð¤·¹àÌÜ: "
+
+#: info/indices.c:324
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr "ľÁ°¤Î `\\[index-search]' ¥³¥Þ¥ó¥É¤È°ìÃפ·¤¿¸«½Ð¤·¥¢¥¤¥Æ¥à¤òé¤ë"
+
+#: info/indices.c:334
+msgid "No previous index search string."
+msgstr "Á°¤Î¸«½Ð¤·¸¡º÷ʸ»úÎ󤬤¢¤ê¤Þ¤»¤ó"
+
+#: info/indices.c:341
+msgid "No index entries."
+msgstr "¸«½Ð¤·¹àÌܤ¬¤¢¤ê¤Þ¤»¤ó"
+
+#: info/indices.c:374
+#, fuzzy, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "\"%2$s\" ¤ò´Þ¤à%1$s¸«½Ð¤·¹àÌܤ¬¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: info/indices.c:375
+msgid "more "
+msgstr "¤³¤ì°Ê¾å¤Î"
+
+#: info/indices.c:385
+msgid "CAN'T SEE THIS"
+msgstr "*¤³¤ì¤ò¸«¤é¤ì¤Þ¤»¤ó*"
+
+#: info/indices.c:421
+#, fuzzy, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr ""
+"%1$s ¤«¤é \"%2$s\" ¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿¡£(`\\[next-index-match]' ¤Ç¼¡¤òõ¤·¤Þ¤¹)"
+
+#: info/indices.c:549
+#, fuzzy, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "\"%s\" ¤Î¸«½Ð¤·¤òÄ´¤Ù¤Æ¤¤¤Þ¤¹..."
+
+#: info/indices.c:604
+#, fuzzy, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr "¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ë \"%s\" ¤ò»ý¤Ã¤Æ¤¤¤ë info ¥Õ¥¡¥¤¥ë¤¬ÍÑ°Õ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£"
+
+#: info/indices.c:630
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr "Á´¤Æ¤Î info ¥Õ¥¡¥¤¥ëʸ»úÎ󤫤鸫½Ð¤·¤òÁöºº¤·¡¢¥á¥Ë¥å¡¼¤òºîÀ®"
+
+#: info/indices.c:634
+msgid "Index apropos: "
+msgstr "¸ì¶ç¤ò´Þ¤à¹àÌܤò¸¡º÷: "
+
+#: info/indices.c:662
+#, fuzzy, c-format
+msgid ""
+"\n"
+"* Menu: Nodes whose indices contain `%s':\n"
+msgstr ""
+"\n"
+"* ¥á¥Ë¥å¡¼: \"%s\" ¤ò´Þ¤à¸«½Ð¤·¹àÌÜ\n"
+
+#: info/info.c:275 info/infokey.c:899
+#, c-format
+msgid "Try --help for more information.\n"
+msgstr "¾Ü¤·¤¯¤Ï --help ¥ª¥×¥·¥ç¥ó¤ò»î¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£\n"
+
+#: info/info.c:294 info/infokey.c:145 install-info/install-info.c:2101
+#: makeinfo/makeinfo.c:802 util/texindex.c:295
+#, c-format
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+
+#: info/info.c:506
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "`%s' ¤ËÂФ¹¤ë¹àÌܤ¬¸«¤Ä¤«¤ê¤Þ¤»¤ó\n"
+
+#: info/info.c:600
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [MENU-ITEM...]\n"
+"\n"
+"Read documentation in Info format.\n"
+msgstr ""
+
+#: info/info.c:606
+msgid ""
+"Options:\n"
+" -k, --apropos=STRING look up STRING in all indices of all "
+"manuals.\n"
+" -d, --directory=DIR add DIR to INFOPATH.\n"
+" --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+" -f, --file=FILENAME specify Info file to visit."
+msgstr ""
+
+#: info/info.c:613
+msgid ""
+" -h, --help display this help and exit.\n"
+" --index-search=STRING go to node pointed by index entry STRING.\n"
+" -n, --node=NODENAME specify nodes in first visited Info file.\n"
+" -o, --output=FILENAME output selected nodes to FILENAME."
+msgstr ""
+
+#: info/info.c:619
+msgid ""
+" -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+" --no-raw-escapes output escapes as literal text.\n"
+" --restore=FILENAME read initial keystrokes from FILENAME.\n"
+" -O, --show-options, --usage go to command-line options node."
+msgstr ""
+
+#: info/info.c:626
+#, fuzzy
+msgid " -b, --speech-friendly be friendly to speech synthesizers."
+msgstr " --speech-friendly ²»À¼¹çÀ®´ï¤ËÂФ¹¤ë¿ÆÏÂÀ­¤ò¹â¤á¤ë\n"
+
+#: info/info.c:630
+msgid ""
+" --subnodes recursively output menu items.\n"
+" --vi-keys use vi-like and less-like key bindings.\n"
+" --version display version information and exit.\n"
+" -w, --where, --location print physical location of Info file."
+msgstr ""
+
+#: info/info.c:636
+msgid ""
+"\n"
+"The first non-option argument, if present, is the menu entry to start from;\n"
+"it is searched for in all `dir' files along INFOPATH.\n"
+"If it is not present, info merges all `dir' files and shows the result.\n"
+"Any remaining arguments are treated as the names of menu\n"
+"items relative to the initial node visited."
+msgstr ""
+
+#: info/info.c:643
+msgid ""
+"\n"
+"For a summary of key bindings, type h within Info."
+msgstr ""
+
+#: info/info.c:646
+msgid ""
+"\n"
+"Examples:\n"
+" info show top-level dir menu\n"
+" info info show the general manual for Info readers\n"
+" info info-stnd show the manual specific to this Info program\n"
+" info emacs start at emacs node from top-level dir\n"
+" info emacs buffers start at buffers node within emacs manual\n"
+" info --show-options emacs start at node with emacs' command line options\n"
+" info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+" info -f ./foo.info show file ./foo.info, not searching dir"
+msgstr ""
+
+#: info/info.c:657 info/infokey.c:918 makeinfo/makeinfo.c:475
+#: util/texindex.c:259
+#, fuzzy
+msgid ""
+"\n"
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+"Email ¤Ë¤è¤ë¥Ð¥°¥ì¥Ý¡¼¥È¤Ï bug-texinfo@gnu.org¡¢\n"
+"°ìÈÌŪ¤Ê¼ÁÌä¤äµÄÏÀ¤Ï help-texinfo@gnu.org ¤Þ¤Ç¡£\n"
+
+#: info/info.c:691
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "`%s' ¥Î¡¼¥É¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£"
+
+#: info/info.c:692
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "`(%s)%s' ¥Î¡¼¥É¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#: info/info.c:693
+msgid "Cannot find a window!"
+msgstr "¥¦¥£¥ó¥É¥¦¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#: info/info.c:694
+msgid "Point doesn't appear within this window's node!"
+msgstr "¤³¤Î¥¦¥£¥ó¥É¥¦¥Î¡¼¥ÉÆâ¤Ë¥Ý¥¤¥ó¥È¤¬¸½¤ì¤Þ¤»¤ó¡ª"
+
+#: info/info.c:695
+msgid "Cannot delete the last window."
+msgstr "ºÇ¸å¤Î¥¦¥£¥ó¥É¥¦¤Ïºï½ü¤Ç¤­¤Þ¤»¤ó"
+
+#: info/info.c:696
+msgid "No menu in this node."
+msgstr "¤³¤Î¥Î¡¼¥É¤Ë¥á¥Ë¥å¡¼¤Ï¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: info/info.c:697
+msgid "No footnotes in this node."
+msgstr "¤³¤Î¥Î¡¼¥É¤ËµÓÃí¤Ï¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: info/info.c:698
+msgid "No cross references in this node."
+msgstr "¤³¤Î¥Î¡¼¥É¤ËÁê¸ß»²¾È¤Ï¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: info/info.c:699
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "¤³¤Î¥Î¡¼¥É¤Î `%s' ¥Ý¥¤¥ó¥¿¤¬¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: info/info.c:700
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "̤ÃΤΠInfo ¥³¥Þ¥ó¥É `%c' -- `?' ¤Ç¥Ø¥ë¥×¤ò¸«¤Æ¤¯¤À¤µ¤¤¡£"
+
+#: info/info.c:701
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr "üËö¥¿¥¤¥× `%s' ¤Ï Info ¤òÆ°¤«¤»¤ë¤Û¤ÉÍø¸ý¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#: info/info.c:702
+msgid "You are already at the last page of this node."
+msgstr "¤³¤³¤Ï¤â¤¦¡¢¤³¤Î¥Î¡¼¥É¤ÎºÇ½ª¥Ú¡¼¥¸¤Ç¤¹¡£"
+
+#: info/info.c:703
+msgid "You are already at the first page of this node."
+msgstr "¤³¤³¤Ï¤â¤¦¡¢¤³¤Î¥Î¡¼¥É¤ÎºÇ½é¤Î¥Ú¡¼¥¸¤Ç¤¹¡£"
+
+#: info/info.c:704
+msgid "Only one window."
+msgstr "Í£°ì¤Î¥¦¥£¥ó¥É¥¦¡£"
+
+#: info/info.c:705
+msgid "Resulting window would be too small."
+msgstr "·ë²Ì¥¦¥£¥ó¥É¥¦¤¬¾®¤µ¤¹¤®¤ëÍͤǤ¹"
+
+#: info/info.c:706
+msgid "Not enough room for a help window, please delete a window."
+msgstr ""
+"¥Ø¥ë¥×¥¦¥£¥ó¥É¥¦ÍѤξì½ê¤¬Â­¤ê¤Þ¤»¤ó¡¢¥¦¥£¥ó¥É¥¦¤ò°ì¤Äºï½ü¤·¤Æ¤¯¤À¤µ¤¤¡£"
+
+#: info/infodoc.c:45
+msgid "Basic Info command keys\n"
+msgstr ""
+
+#: info/infodoc.c:47
+#, fuzzy
+msgid "\\%-10[quit-help] Close this help window.\n"
+msgstr " %-10s ¤³¤Î¥Ø¥ë¥×¤ò½ªÎ»¤¹¤ë¡£\n"
+
+#: info/infodoc.c:48
+#, fuzzy
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr " %-10s Info ¤â°ì½ï¤Ë½ªÎ»¤¹¤ë¡£\n"
+
+#: info/infodoc.c:49
+#, fuzzy
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr " %-10s Info ¥Á¥å¡¼¥È¥ê¥¢¥ë¤òµ¯Æ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:51
+#, fuzzy
+msgid "\\%-10[prev-line] Move up one line.\n"
+msgstr " %-10s 1 ¹Ôʬ¸åÊý¤ØÌ᤹¡£\n"
+
+#: info/infodoc.c:52
+#, fuzzy
+msgid "\\%-10[next-line] Move down one line.\n"
+msgstr " %-10s 1 ¹ÔʬÁ°Êý¤Ø¤¹¤¹¤á¤ë¡£\n"
+
+#: info/infodoc.c:53
+#, fuzzy
+msgid "\\%-10[scroll-backward] Scroll backward one screenful.\n"
+msgstr " %-10s 1 ¥Ú¡¼¥¸Ê¬¸åÊý¤ØÌ᤹¡£\n"
+
+#: info/infodoc.c:54
+#, fuzzy
+msgid "\\%-10[scroll-forward] Scroll forward one screenful.\n"
+msgstr " %-10s 1 ¥Ú¡¼¥¸Ê¬Á°Êý¤Ø¿Ê¤á¤ë¡£\n"
+
+#: info/infodoc.c:55
+#, fuzzy
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr " %-10s ¸½ºß¤Î¥Î¡¼¥É¤ÎÀèƬ¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:56
+#, fuzzy
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr " %-10s ¸½ºß¤Î¥Î¡¼¥É¤ÎÀèƬ¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:58
+#, fuzzy
+msgid "\\%-10[move-to-next-xref] Skip to the next hypertext link.\n"
+msgstr " %-10s ¤³¤Î¥Î¡¼¥ÉÆâ¤Î¼¡¤Î¥Ï¥¤¥Ñ¡¼¥ê¥ó¥¯¤Ø¥¹¥­¥Ã¥×¤¹¤ë¡£\n"
+
+#: info/infodoc.c:59
+#, fuzzy
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under the "
+"cursor.\n"
+msgstr " %-10s ¥«¡¼¥½¥ë°ÌÃ֤Υϥ¤¥Ñ¡¼¥ê¥ó¥¯¤òé¤ë¡£\n"
+
+#: info/infodoc.c:60
+#, fuzzy
+msgid "\\%-10[history-node] Go back to the last node seen in this window.\n"
+msgstr " %-10s ¤³¤Î¥¦¥£¥ó¥É¥¦¤ÇºÇ¸å¤Ë¸«¤¿¥Î¡¼¥É¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:62
+#, fuzzy
+msgid "\\%-10[global-prev-node] Go to the previous node in the document.\n"
+msgstr " %-10s ¤³¤Î¥Î¡¼¥É¤Î `Á°' ¤Î¥Î¡¼¥É¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:63
+#, fuzzy
+msgid "\\%-10[global-next-node] Go to the next node in the document.\n"
+msgstr " %-10s ¤³¤Î¥Î¡¼¥É¤Î `¼¡' ¤Î¥Î¡¼¥É¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:64
+#, fuzzy
+msgid "\\%-10[prev-node] Go to the previous node on this level.\n"
+msgstr " %-10s ¤³¤Î¥Î¡¼¥É¤Î `Á°' ¤Î¥Î¡¼¥É¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:65
+#, fuzzy
+msgid "\\%-10[next-node] Go to the next node on this level.\n"
+msgstr " %-10s ¤³¤Î¥Î¡¼¥É¤Î `¼¡' ¤Î¥Î¡¼¥É¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:66
+#, fuzzy
+msgid "\\%-10[up-node] Go up one level.\n"
+msgstr " %-10s ¤³¤Î¥Î¡¼¥É¤«¤é `¾å' ¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:67
+#, fuzzy
+msgid "\\%-10[top-node] Go to the top node of this document.\n"
+msgstr " %-10s ¸½ºß¤Î¥Î¡¼¥É¤ÎÀèƬ¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:68
+#, fuzzy
+msgid "\\%-10[dir-node] Go to the main `directory' node.\n"
+msgstr " %-10s ¸½ºß¤Î¥Î¡¼¥É¤ÎÀèƬ¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:70
+#, fuzzy
+msgid "1...9 Pick the first...ninth item in this node's menu.\n"
+msgstr " %-10s ¥Î¡¼¥É¥á¥Ë¥å¡¼¤ÎºÇ½é¤«¤é 9 ÈÖÌÜËø¤Î¥¢¥¤¥Æ¥à¤òÁªÂò¤¹¤ë¡£\n"
+
+#: info/infodoc.c:71
+#, fuzzy
+msgid "\\%-10[last-menu-item] Pick the last item in this node's menu.\n"
+msgstr " %-10s ¥Î¡¼¥É¥á¥Ë¥å¡¼¤ÎºÇ¸å¤Î¥¢¥¤¥Æ¥à¤òÁªÂò¤¹¤ë¡£\n"
+
+#: info/infodoc.c:72
+#, fuzzy
+msgid "\\%-10[menu-item] Pick a menu item specified by name.\n"
+msgstr " %-10s ̾Á°¤Ç»ØÄꤷ¤¿¥á¥Ë¥å¡¼¥¢¥¤¥Æ¥à¤òÁªÂò¤¹¤ë¡£\n"
+
+#: info/infodoc.c:73
+#, fuzzy
+msgid "\\%-10[xref-item] Follow a cross reference specified by name.\n"
+msgstr " %-10s Áê¸ß»²¾È¤òé¤ë¡£»²¾È̾¤òÆɤ߼è¤ë¡£\n"
+
+#: info/infodoc.c:74
+#, fuzzy
+msgid "\\%-10[goto-node] Go to a node specified by name.\n"
+msgstr " %-10s ̾Á°¤Ç»ØÄꤵ¤ì¤¿¥Î¡¼¥É¤Ë°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:76
+#, fuzzy
+msgid "\\%-10[search] Search forward for a specified string.\n"
+msgstr " %-10s ¸½ºß¤Î Info ¥Õ¥¡¥¤¥ëÁ´ÂΤò¡¢»ØÄꤵ¤ì¤¿Ê¸»úÎó¤ÇÁ°Êý¸¡º÷¤·¡¢\n"
+
+#: info/infodoc.c:77
+#, fuzzy
+msgid "\\%-10[search-previous] Search for previous occurrence.\n"
+msgstr " %-10s ¤³¤Î¥Î¡¼¥É¤Î `Á°' ¤Î¥Î¡¼¥É¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:78
+#, fuzzy
+msgid "\\%-10[search-next] Search for next occurrence.\n"
+msgstr ""
+" %-10s ¸½ºß¤Î Info ¥Õ¥¡¥¤¥ë¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹¹àÌܤǡ¢Ê¸»úÎó¤ò»ØÄꤷ¤Æ¸¡º÷¤·¡¢\n"
+
+#: info/infodoc.c:79
+#, fuzzy
+msgid ""
+"\\%-10[index-search] Search for a specified string in the index, and\n"
+" select the node referenced by the first entry found.\n"
+msgstr " ºÇ½é¤Ë¸«¤Ä¤«¤Ã¤¿¹àÌܤ¬»²¾È¤·¤Æ¤¤¤ë¥Î¡¼¥É¤òÁªÂò¤¹¤ë¡£\n"
+
+#: info/infodoc.c:81
+#, fuzzy
+msgid "\\%-10[abort-key] Cancel the current operation.\n"
+msgstr "¸½ºß¤ÎÁàºî¤òÃæ»ß"
+
+#: info/infodoc.c:89
+#, fuzzy
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr "Info ¥¦¥£¥ó¥É¥¦Æâ¤Î´ðËÜ¥³¥Þ¥ó¥É\n"
+
+#: info/infodoc.c:92
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s ¤³¤Î¥Ø¥ë¥×¤ò½ªÎ»¤¹¤ë¡£\n"
+
+#: info/infodoc.c:93
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Info ¤â°ì½ï¤Ë½ªÎ»¤¹¤ë¡£\n"
+
+#: info/infodoc.c:94
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Info ¥Á¥å¡¼¥È¥ê¥¢¥ë¤òµ¯Æ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr " %-10s ¤³¤Î¥Î¡¼¥É¤Î `¼¡' ¤Î¥Î¡¼¥É¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr " %-10s ¤³¤Î¥Î¡¼¥É¤Î `Á°' ¤Î¥Î¡¼¥É¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s ¤³¤Î¥Î¡¼¥É¤«¤é `¾å' ¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:101
+#, fuzzy, c-format
+msgid ""
+" %-10s Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+" ¥á¥Ë¥å¡¼¥¢¥¤¥Æ¥à¤ÎÁªÂò¤Ç¡¢Â¾¤Î¥Î¡¼¥É¤¬ÁªÂò¤µ¤ì¤ë»ö¤Ë¤Ê¤ë¡£\n"
+
+#: info/infodoc.c:103
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr " %-10s Áê¸ß»²¾È¤òé¤ë¡£»²¾È̾¤òÆɤ߼è¤ë¡£\n"
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr " %-10s ¤³¤Î¥¦¥£¥ó¥É¥¦¤ÇºÇ¸å¤Ë¸«¤¿¥Î¡¼¥É¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr " %-10s ¤³¤Î¥Î¡¼¥ÉÆâ¤Î¼¡¤Î¥Ï¥¤¥Ñ¡¼¥ê¥ó¥¯¤Ø¥¹¥­¥Ã¥×¤¹¤ë¡£\n"
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s ¥«¡¼¥½¥ë°ÌÃ֤Υϥ¤¥Ñ¡¼¥ê¥ó¥¯¤òé¤ë¡£\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr " %-10s `¥Ç¥£¥ì¥¯¥È¥ê' ¥Î¡¼¥É¤Ø°ÜÆ°¡£`g (DIR)' ¤ÈƱ¤¸¡£\n"
+
+#: info/infodoc.c:108
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr " %-10s Top ¥Î¡¼¥É¤Ø°ÜÆ°¡£`g Top' ¤ÈƱ¤¸¡£\n"
+
+#: info/infodoc.c:110
+#, fuzzy
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr "¥Î¡¼¥ÉÆâ¤Ç¤Î°ÜÆ°:\n"
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s 1 ¥Ú¡¼¥¸Ê¬Á°Êý¤Ø¿Ê¤á¤ë¡£\n"
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s 1 ¥Ú¡¼¥¸Ê¬¸åÊý¤ØÌ᤹¡£\n"
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s ¸½ºß¤Î¥Î¡¼¥É¤ÎÀèƬ¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:115
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s ¸½ºß¤Î¥Î¡¼¥É¤ÎÀèƬ¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:116
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s 1 ¹ÔʬÁ°Êý¤Ø¤¹¤¹¤á¤ë¡£\n"
+
+#: info/infodoc.c:117
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s 1 ¹Ôʬ¸åÊý¤ØÌ᤹¡£\n"
+
+#: info/infodoc.c:119
+#, fuzzy
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr "¤½¤Î¾¤Î¥³¥Þ¥ó¥É:\n"
+
+#: info/infodoc.c:121
+#, fuzzy, c-format
+msgid " %-10s Pick first...ninth item in node's menu.\n"
+msgstr " %-10s ¥Î¡¼¥É¥á¥Ë¥å¡¼¤ÎºÇ½é¤«¤é 9 ÈÖÌÜËø¤Î¥¢¥¤¥Æ¥à¤òÁªÂò¤¹¤ë¡£\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s ¥Î¡¼¥É¥á¥Ë¥å¡¼¤ÎºÇ¸å¤Î¥¢¥¤¥Æ¥à¤òÁªÂò¤¹¤ë¡£\n"
+
+#: info/infodoc.c:125
+#, fuzzy, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr " ºÇ½é¤Ë¸«¤Ä¤«¤Ã¤¿¹àÌܤ¬»²¾È¤·¤Æ¤¤¤ë¥Î¡¼¥É¤òÁªÂò¤¹¤ë¡£\n"
+
+#: info/infodoc.c:127
+#, fuzzy, c-format
+msgid ""
+" %-10s Move to node specified by name.\n"
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+" (¥Õ¥¡¥¤¥ë̾)¥Î¡¼¥É̾ ¤ÎÍͤˡ¢¥Õ¥¡¥¤¥ë̾¤ò´Þ¤á¤ë¤³¤È¤¬¤Ç¤­¤Þ"
+"¤¹¡£\n"
+
+#: info/infodoc.c:129
+#, fuzzy, c-format
+msgid ""
+" %-10s Search forward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr " ¸«¤Ä¤«¤Ã¤¿¤â¤Î¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë¥Î¡¼¥É¤òÁªÂò¤¹¤ë¡£\n"
+
+#: info/infodoc.c:131
+#, fuzzy, c-format
+msgid ""
+" %-10s Search backward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr " ¸«¤Ä¤«¤Ã¤¿¤â¤Î¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë¥Î¡¼¥É¤òÁªÂò¤¹¤ë¡£\n"
+
+#: info/infodoc.c:312
+msgid "The current search path is:\n"
+msgstr "¸½ºß¤Î¸¡º÷¥Ñ¥¹:\n"
+
+#: info/infodoc.c:316
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr "Info ¥¦¥£¥ó¥É¥¦¤ÇÍøÍѲÄǽ¤Ê¥³¥Þ¥ó¥É:\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr "¥¨¥³¡¼Îΰè¤ÇÍøÍѲÄǽ¤Ê¥³¥Þ¥ó¥É:\n"
+
+#: info/infodoc.c:343
+#, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+"°Ê²¼¤Î¥³¥Þ¥ó¥É¤Ï¡¢%s ¤òÄ̤¸¤Æ¤Î¤ßµ¯Æ°¤Ç¤­¤Þ¤¹:\n"
+"\n"
+
+#: info/infodoc.c:347
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+"°Ê²¼¤Î¥³¥Þ¥ó¥É¤Ï¡¢Á´¤¯µ¯Æ°¤¹¤ë»ö¤¬¤Ç¤­¤Þ¤»¤ó:\n"
+"\n"
+
+#: info/infodoc.c:477
+msgid "Display help message"
+msgstr "»È¤¤Êý¤òɽ¼¨¤¹¤ë"
+
+#: info/infodoc.c:495
+msgid "Visit Info node `(info)Help'"
+msgstr "`(info)Help' ¥Î¡¼¥É¤Ë°ÜÆ°¤¹¤ë"
+
+#: info/infodoc.c:633
+msgid "Print documentation for KEY"
+msgstr "¥­¡¼Áàºî¤òɽ¼¨¤¹¤ë"
+
+#: info/infodoc.c:645
+#, c-format
+msgid "Describe key: %s"
+msgstr "¥­¡¼¤ÎÀâÌÀ: %s"
+
+#: info/infodoc.c:656
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s ¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£"
+
+#: info/infodoc.c:672 info/infodoc.c:701
+#, c-format
+msgid "%s is undefined."
+msgstr "%s ¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#: info/infodoc.c:722
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s ¤Ï %s ¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£"
+
+#: info/infodoc.c:1146
+msgid "Show what to type to execute a given command"
+msgstr "Í¿¤¨¤é¤ì¤¿¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤¹¤ë¤Î¤Ë¡¢²¿¤ò¥¿¥¤¥×¤¹¤ë¤«¤òɽ¼¨¤¹¤ë"
+
+#: info/infodoc.c:1150
+msgid "Where is command: "
+msgstr "¤É¤Î¥³¥Þ¥ó¥É: "
+
+#: info/infodoc.c:1172
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "`%s' ¤Ï¥­¡¼³ä¤êÅö¤Æ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s ¤Ï %s ¤òÄ̤¸¤Æ¤Î¤ß¸Æ¤Ó½Ð¤»¤Þ¤¹¡£"
+
+#: info/infodoc.c:1183
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s ¤Ï %s ¤òÄ̤¸¤Æ¸Æ¤Ó½Ð¤»¤Þ¤¹"
+
+#: info/infodoc.c:1188
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "`%s' ¤È¤¤¤¦µ¡Ç½¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#: info/infodoc.c:96
+#, fuzzy
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr "¾¤Î¥Î¡¼¥É¤òÁªÂò¤¹¤ë:\n"
+
+#: info/infokey.c:170
+msgid "incorrect number of arguments"
+msgstr "°ú¿ô¤Î¿ô»ú¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹"
+
+#: info/infokey.c:201
+#, c-format
+msgid "cannot open input file `%s'"
+msgstr "ÆþÎÏ¥Õ¥¡¥¤¥ë `%s' ¤ò³«¤±¤Þ¤»¤ó"
+
+#: info/infokey.c:215
+#, c-format
+msgid "cannot create output file `%s'"
+msgstr "½ÐÎÏ¥Õ¥¡¥¤¥ë `%s' ¤òºîÀ®¤Ç¤­¤Þ¤»¤ó"
+
+#: info/infokey.c:226
+#, c-format
+msgid "error writing to `%s'"
+msgstr "`%s' ¤Ø¤Î½ñ¤­¹þ¤ßÃæ¤Î¥¨¥é¡¼"
+
+#: info/infokey.c:232
+#, c-format
+msgid "error closing output file `%s'"
+msgstr "½ÐÎÏ¥Õ¥¡¥¤¥ë `%s' ¤òÊĤ¸¤ëºÝ¤Î¥¨¥é¡¼"
+
+#: info/infokey.c:450
+msgid "key sequence too long"
+msgstr "¥­¡¼ÆþÎÏÎó¤¬Ä¹¤¹¤®¤Þ¤¹"
+
+#: info/infokey.c:529
+msgid "missing key sequence"
+msgstr "¥­¡¼ÆþÎÏÎó¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#: info/infokey.c:610
+msgid "NUL character (\\000) not permitted"
+msgstr "NUL ʸ»ú (\\000) ¤Ï»È¤¨¤Þ¤»¤ó"
+
+#: info/infokey.c:641
+#, c-format
+msgid "NUL character (^%c) not permitted"
+msgstr "NUL ʸ»ú (^%c) ¤Ï»È¤¨¤Þ¤»¤ó"
+
+#: info/infokey.c:665
+msgid "missing action name"
+msgstr "¥¢¥¯¥·¥ç¥ó̾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#: info/infokey.c:681 info/infokey.c:756
+msgid "section too long"
+msgstr "¥»¥¯¥·¥ç¥ó¤¬Ä¹¤¹¤®¤Þ¤¹"
+
+#: info/infokey.c:688
+#, c-format
+msgid "unknown action `%s'"
+msgstr "ÉÔÌÀ¤Ê¥¢¥¯¥·¥ç¥ó `%s'"
+
+#: info/infokey.c:698
+msgid "action name too long"
+msgstr "¥¢¥¯¥·¥ç¥ó̾¤¬Ä¹¤¹¤®¤Þ¤¹"
+
+#: info/infokey.c:712
+#, c-format
+msgid "extra characters following action `%s'"
+msgstr "¥¢¥¯¥·¥ç¥ó `%s' ¤Ë;ʬ¤Êʸ»ú¤¬Â³¤¤¤Æ¤¤¤Þ¤¹"
+
+#: info/infokey.c:723
+msgid "missing variable name"
+msgstr "ÊÑ¿ô̾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#: info/infokey.c:733
+msgid "missing `=' immediately after variable name"
+msgstr "ÊÑ¿ô̾¤Îľ¸å¤Î `=' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#: info/infokey.c:741
+msgid "variable name too long"
+msgstr "ÊÑ¿ô̾¤¬Ä¹¤¹¤®¤Þ¤¹"
+
+#: info/infokey.c:765
+msgid "value too long"
+msgstr "Ãͤ¬Ä¹¤¹¤®¤Þ¤¹"
+
+#: info/infokey.c:890
+#, c-format
+msgid "\"%s\", line %u: "
+msgstr "\"%s\", %u ¹ÔÌÜ: "
+
+#: info/infokey.c:906
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [OPTION]... [INPUT-FILE]\n"
+"\n"
+"Compile infokey source file to infokey file. Reads INPUT-FILE (default\n"
+"$HOME/.infokey) and writes compiled key file to (by default) $HOME/.info.\n"
+"\n"
+"Options:\n"
+" --output FILE output to FILE instead of $HOME/.info\n"
+" --help display this help and exit.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"»È¤¤Êý: %s [¥ª¥×¥·¥ç¥ó]... [ÆþÎÏ¥Õ¥¡¥¤¥ë]\n"
+"\n"
+"¥ª¥×¥·¥ç¥ó:\n"
+" --output FILENAME ½ÐÎÏÀè¤ò $HOME/.info ¤ÎÂå¤ê¤Ë FILENAME ¤È¤¹"
+"¤ë\n"
+" --help ¤³¤Î¥Ø¥ë¥×¤òɽ¼¨¤·¤Æ½ªÎ»¤¹¤ë\n"
+" --version ¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨¤·¤Æ½ªÎ»¤¹¤ë\n"
+"\n"
+"infokey ¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤ò¥³¥ó¥Ñ¥¤¥ë¤·¤Æ infokey ¥Õ¥¡¥¤¥ë¤ò½ÐÎϤ¹¤ë¡£\n"
+"ÆþÎÏ¥Õ¥¡¥¤¥ë(¥Ç¥Õ¥©¥ë¥È: $HOME/.infokey) ¤òÆɤ߼è¤Ã¤Æ¡¢\n"
+"¥³¥ó¥Ñ¥¤¥ëºÑ¥­¡¼¥Õ¥¡¥¤¥ë $HOME/.info ¤Ë½ñ¤­¹þ¤à¡£\n"
+"\n"
+"¥Ð¥°¥ì¥Ý¡¼¥È¤Ï bug-texinfo@gnu.org ¤Ø¡¢\n"
+"°ìÈÌŪ¤Ê¼ÁÌä¤äµÄÏÀ¤Ï help-texinfo@gnu.org ¤Ø¡£\n"
+
+#: info/infomap.c:955
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "ÉÔŬÀÚ¤Ê infokey ¥Õ¥¡¥¤¥ë `%s' ¤ò̵»ë¤·¤Þ¤¹ - ¾®¤µ¤¹¤®¤Þ¤¹"
+
+#: info/infomap.c:958
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "ÉÔŬÀÚ¤Ê infokey ¥Õ¥¡¥¤¥ë `%s' ¤ò̵»ë¤·¤Þ¤¹ - Â礭¤¹¤®¤Þ¤¹"
+
+#: info/infomap.c:971
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "infokey ¥Õ¥¡¥¤¥ë `%s' Æɹþ¤ßÃæ¤Î¥¨¥é¡¼ -- Á´¤ÆÆɹþ¤á¤Þ¤»¤ó¤Ç¤·¤¿"
+
+#: info/infomap.c:990
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+"infokey ¥Õ¥¡¥¤¥ë `%s' ¤¬ÉÔŬÀÚ (¥Þ¥¸¥Ã¥¯Èֹ椬°ã¤¦) ¤Ç¤¹ -- infokey ¤ò¼Â¹Ô¤·"
+"¤Æ¹¹¿·¤·¤Þ¤·¤ç¤¦"
+
+#: info/infomap.c:999
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr ""
+"¤¢¤Ê¤¿¤Î infokey ¥Õ¥¡¥¤¥ë `%s' ¤Ï¸Å¤¤¤Ç¤¹ -- infokey ¤ò¼Â¹Ô¤·¤Æ¹¹¿·¤·¤Þ¤·¤ç¤¦"
+
+#: info/infomap.c:1015
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+"infokey ¥Õ¥¡¥¤¥ë `%s' ¤¬ÉÔŬÀڤǤ¹ (¥»¥¯¥·¥ç¥óŤ¬ÉÔÀµ¤Ç¤¹) -- infokey ¤ò¼Â¹Ô"
+"¤·¤Æ¹¹¿·¤·¤Þ¤·¤ç¤¦"
+
+#: info/infomap.c:1036
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr ""
+"infokey ¥Õ¥¡¥¤¥ë `%s' ¤¬ÉÔŬÀڤǤ¹ (¥»¥¯¥·¥ç¥ó¥³¡¼¥É¤¬ÉÔÀµ¤Ç¤¹) -- infokey ¤ò"
+"¼Â¹Ô¤·¤Æ¹¹¿·¤·¤Þ¤·¤ç¤¦"
+
+#: info/infomap.c:1171
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr ""
+"infokey ¥Õ¥¡¥¤¥ë¤ËÉÔÀµ¤Ê¥Ç¡¼¥¿¤¬¤¢¤ê¤Þ¤¹ -- ´ö¤Ä¤«¤Î¥­¡¼¥Ð¥¤¥ó¥É¤¬Ìµ»ë¤µ¤ì¤Þ"
+"¤·¤¿"
+
+#: info/infomap.c:1221
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr ""
+"infokey ¥Õ¥¡¥¤¥ë¤ËÉÔÀµ¤Ê¥Ç¡¼¥¿¤¬¤¢¤ê¤Þ¤¹ -- ´ö¤Ä¤«¤ÎÊÑ¿ôÀßÄ̵꤬»ë¤µ¤ì¤Þ¤·¤¿"
+
+#: info/m-x.c:68
+msgid "Read the name of an Info command and describe it"
+msgstr "Info ¥³¥Þ¥ó¥É̾¤È¤½¤ÎÀâÌÀ¤òÆɤà"
+
+#: info/m-x.c:72
+msgid "Describe command: "
+msgstr "ÀâÌÀ¤¹¤ë¥³¥Þ¥ó¥É: "
+
+#: info/m-x.c:95
+msgid "Read a command name in the echo area and execute it"
+msgstr "¥¨¥³¡¼Îΰè¤Ç¥³¥Þ¥ó¥É̾¤òÆɤߡ¢¼Â¹Ô¤¹¤ë"
+
+#: info/m-x.c:139
+msgid "Cannot execute an `echo-area' command here."
+msgstr "¤³¤³¤Ç¤Ï `echo-area' ¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: info/m-x.c:153
+#, fuzzy, c-format
+msgid "Undefined command: %s"
+msgstr "ÃΤé¤Ê¤¤¥³¥Þ¥ó¥É `%s'"
+
+#: info/m-x.c:159
+msgid "Set the height of the displayed window"
+msgstr "ɽ¼¨¤µ¤ì¤ë¥¦¥£¥ó¥É¥¦¤Î¹â¤µ¤òÀßÄê"
+
+#: info/m-x.c:172
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "¥¹¥¯¥ê¡¼¥ó¤Î¹â¤µ¤ò¥»¥Ã¥È (%d): "
+
+#: info/makedoc.c:166 info/makedoc.c:174
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+" ¤³¤Î¥Õ¥¡¥¤¥ë¤òºî¤ë¸µ¤Ë¤Ê¤Ã¤¿¥Õ¥¡¥¤¥ë:\n"
+"\n"
+
+#: info/makedoc.c:556
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "¥Õ¥¡¥¤¥ë %s ¤ò¾å¼ê¤¯½èÍý¤Ç¤­¤Þ¤»¤ó¡£\n"
+
+#: info/nodemenu.c:30
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+"\n"
+"* ¥á¥Ë¥å¡¼:\n"
+" (¥Õ¥¡¥¤¥ë)¥Î¡¼¥É ¹Ô¿ô ¥µ¥¤¥º ´Þ¤Þ¤ì¤ë¥Õ¥¡¥¤¥ë\n"
+" ---------------- ----- ---- ----------------"
+
+#: info/nodemenu.c:201
+msgid ""
+"Here is the menu of nodes you have recently visited.\n"
+"Select one from this menu, or use `\\[history-node]' in another window.\n"
+msgstr ""
+"¤³¤³¤Ï¡¢¤¢¤Ê¤¿¤¬ºÇ¶áˬ¤ì¤¿¥Î¡¼¥É¤Î¥á¥Ë¥å¡¼¤Ç¤¹¡£\n"
+"¥á¥Ë¥å¡¼¤«¤é°ì¤ÄÁª¤Ö¤«¡¢Â¾¤Î¥¦¥£¥ó¥É¥¦¤Ç `\\[history-node]' ¤ò»È¤Ã¤Æ¤¯¤À¤µ"
+"¤¤¡£\n"
+"\n"
+
+#: info/nodemenu.c:223
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr "ºÇ¶áˬ¤ì¤¿¥Î¡¼¥ÉÁ´¤Æ¤Î¥á¥Ë¥å¡¼¤ò´Þ¤ó¤Ç¤¤¤ë¥¦¥£¥ó¥É¥¦¤òºîÀ®"
+
+#: info/nodemenu.c:303
+msgid "Select a node which has been previously visited in a visible window"
+msgstr "ɽ¼¨¤µ¤ì¤Æ¤¤¤ë¥¦¥£¥ó¥É¥¦Æâ¤Î¡¢°ÊÁ°Ë¬¤ì¤¿»ö¤Î¤¢¤ë¥Î¡¼¥É¤òÁªÂò"
+
+#: info/nodemenu.c:316
+msgid "Select visited node: "
+msgstr "ˬ¤ì¤¿¥Î¡¼¥É¤òÁªÂò: "
+
+#: info/nodemenu.c:336 info/session.c:2578
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "¤½¤Î»²¾È¤Ï¾Ã¤¨¤Þ¤·¤¿! (%s)¡£"
+
+#: info/search.c:166
+#, c-format
+msgid "regexp error: %s"
+msgstr ""
+
+#: info/session.c:164
+#, c-format
+msgid ""
+"Welcome to Info version %s. Type \\[get-help-window] for help, \\[menu-item] "
+"for menu item."
+msgstr ""
+"Info ¥Ð¡¼¥¸¥ç¥ó %s ¤Ë¤è¤¦¤³¤½¡£\\[get-help-window] ¤Ç»È¤¤Êý¡¢\\[menu-item] ¤Ç"
+"¥á¥Ë¥å¡¼¹àÌܤò¸Æ¤Ó½Ð¤»¤Þ¤¹¡£"
+
+#: info/session.c:625
+msgid "Move down to the next line"
+msgstr "¼¡¤Î¹Ô¤Ë°ÜÆ°"
+
+#: info/session.c:661
+msgid "Move up to the previous line"
+msgstr "Á°¤Î¹Ô¤Ë°ÜÆ°"
+
+#: info/session.c:931
+msgid "Move to the end of the line"
+msgstr "¹ÔËö¤Ë°ÜÆ°"
+
+#: info/session.c:942
+msgid "Move to the start of the line"
+msgstr "¹ÔƬ¤Ë°ÜÆ°"
+
+#: info/session.c:1142
+msgid "Next"
+msgstr "¼¡"
+
+#: info/session.c:1158 info/session.c:1283
+msgid "No more nodes within this document."
+msgstr "¤³¤Î¥É¥­¥å¥á¥ó¥È¤Ë¤Ï¡¢¤³¤ì°Ê¾å¤Î¥Î¡¼¥É¤Ï¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: info/session.c:1309
+msgid "No `Prev' for this node."
+msgstr "¤³¤Î¥Î¡¼¥É¤Î `Á°' ¤Ï¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: info/session.c:1329
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr "¤³¤Î¥É¥­¥å¥á¥ó¥È¤Ç¤Ï¡¢¤³¤Î¥Î¡¼¥É¤Î `Á°' ¤ä `¾å' ¤Ï¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: info/session.c:1391
+msgid "Move forwards or down through node structure"
+msgstr "¥Î¡¼¥É¹½Â¤¤òÄ̤¸¤Æ¿Ê¤á¤¿¤ê²¼¤¬¤Ã¤¿¤ê¤¹¤ë"
+
+#: info/session.c:1407
+msgid "Move backwards or up through node structure"
+msgstr "¥Î¡¼¥É¹½Â¤¤òÄ̤¸¤ÆÌá¤Ã¤¿¤ê¾å¤¬¤Ã¤¿¤ê¤¹¤ë"
+
+#: info/session.c:1508
+msgid "Scroll forward in this window"
+msgstr "¤³¤Î¥¦¥£¥ó¥É¥¦¤ò¥¹¥¯¥í¡¼¥ë¥À¥¦¥ó"
+
+#: info/session.c:1516
+msgid "Scroll forward in this window and set default window size"
+msgstr "¤³¤Î¥¦¥£¥ó¥É¥¦¤ò¥¹¥¯¥í¡¼¥ë¤·¡¢¥Ç¥Õ¥©¥ë¥È¥¦¥£¥ó¥É¥¦¥µ¥¤¥º¤òÀßÄê"
+
+#: info/session.c:1524
+msgid "Scroll forward in this window staying within node"
+msgstr "¤³¤Î¥¦¥£¥ó¥É¥¦¤ò¥Î¡¼¥ÉÈÏ°ÏÆâ¤ÇÁ°Êý¥¹¥¯¥í¡¼¥ë"
+
+#: info/session.c:1532
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr ""
+"¤³¤Î¥¦¥£¥ó¥É¥¦¤ò¥Î¡¼¥ÉÈÏ°ÏÆâ¤ÇÁ°Êý¥¹¥¯¥í¡¼¥ë¤·¡¢¥Ç¥Õ¥©¥ë¥È¥¦¥£¥ó¥É¥¦¥µ¥¤¥º¤ò"
+"ÀßÄê"
+
+#: info/session.c:1540
+msgid "Scroll backward in this window"
+msgstr "¤³¤Î¥¦¥£¥ó¥É¥¦¤òµÕ¥¹¥¯¥í¡¼¥ë"
+
+#: info/session.c:1548
+msgid "Scroll backward in this window and set default window size"
+msgstr "¤³¤Î¥¦¥£¥ó¥É¥¦¤òµÕ¥¹¥¯¥í¡¼¥ë¤·¡¢¥Ç¥Õ¥©¥ë¥È¥¦¥£¥ó¥É¥¦¥µ¥¤¥º¤òÀßÄê"
+
+#: info/session.c:1557
+msgid "Scroll backward in this window staying within node"
+msgstr "¤³¤Î¥¦¥£¥ó¥É¥¦¤ò¥Î¡¼¥ÉÈÏ°ÏÆâ¤Ç¸åÊý¥¹¥¯¥í¡¼¥ë"
+
+#: info/session.c:1565
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr ""
+"¤³¤Î¥¦¥£¥ó¥É¥¦¤ò¥Î¡¼¥ÉÈÏ°ÏÆâ¤Ç¸åÊý¥¹¥¯¥í¡¼¥ë¤·¡¢¥Ç¥Õ¥©¥ë¥È¥¦¥£¥ó¥É¥¦¥µ¥¤¥º¤ò"
+"ÀßÄê"
+
+#: info/session.c:1573
+msgid "Move to the start of this node"
+msgstr "¤³¤Î¥Î¡¼¥É¤ÎºÇ½é¤Ë°ÜÆ°"
+
+#: info/session.c:1580
+msgid "Move to the end of this node"
+msgstr "¤³¤Î¥Î¡¼¥É¤ÎºÇ¸å¤Ë°ÜÆ°"
+
+#: info/session.c:1587
+msgid "Scroll down by lines"
+msgstr "¹Ô¿ô¤Ë¤è¤ë¥¹¥¯¥í¡¼¥ë"
+
+#: info/session.c:1604
+msgid "Scroll up by lines"
+msgstr "¹Ô¿ô¤Ë¤è¤ëµÕ¥¹¥¯¥í¡¼¥ë"
+
+#: info/session.c:1622
+msgid "Scroll down by half screen size"
+msgstr "²èÌÌ¥µ¥¤¥º¤ÎȾʬ¥¹¥¯¥í¡¼¥ë"
+
+#: info/session.c:1648
+msgid "Scroll up by half screen size"
+msgstr "²èÌÌ¥µ¥¤¥º¤ÎȾʬµÕ¥¹¥¯¥í¡¼¥ë"
+
+#: info/session.c:1677
+msgid "Select the next window"
+msgstr "¼¡¤Î¥¦¥£¥ó¥É¥¦¤òÁªÂò"
+
+#: info/session.c:1716
+msgid "Select the previous window"
+msgstr "Á°¤Î¥¦¥£¥ó¥É¥¦¤òÁªÂò"
+
+#: info/session.c:1767
+msgid "Split the current window"
+msgstr "¸½ºß¤Î¥¦¥£¥ó¥É¥¦¤òʬ³ä"
+
+#: info/session.c:1848
+msgid "Delete the current window"
+msgstr "¸½ºß¤Î¥¦¥£¥ó¥É¥¦¤òºï½ü"
+
+#: info/session.c:1856
+msgid "Cannot delete a permanent window"
+msgstr "±Êµ×¥¦¥£¥ó¥É¥¦¤Ïºï½ü¤Ç¤­¤Þ¤»¤ó"
+
+#: info/session.c:1888
+msgid "Delete all other windows"
+msgstr "¾¤Î¥¦¥£¥ó¥É¥¦¤òºï½ü"
+
+#: info/session.c:1934
+msgid "Scroll the other window"
+msgstr "¾¤Î¥¦¥£¥ó¥É¥¦¤ò¥¹¥¯¥í¡¼¥ë"
+
+#: info/session.c:1955
+msgid "Scroll the other window backward"
+msgstr "¾¤Î¥¦¥£¥ó¥É¥¦¤òµÕ¥¹¥¯¥í¡¼¥ë"
+
+#: info/session.c:1961
+msgid "Grow (or shrink) this window"
+msgstr "¤³¤Î¥¦¥£¥ó¥É¥¦¤òÂ礭¤¯¤¹¤ë(¤Þ¤¿¤Ï¾®¤µ¤¯¤¹¤ë)"
+
+#: info/session.c:1972
+msgid "Divide the available screen space among the visible windows"
+msgstr "²Ä»ë¥¦¥£¥ó¥É¥¦¤ÎÍøÍѲÄǽ¥¹¥¯¥ê¡¼¥ó¶õ´Ö¤òʬ³ä¤¹¤ë"
+
+#: info/session.c:1979
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "¸½ºß¤Î¥¦¥£¥ó¥É¥¦¤Ë¶Ø§½èÍý¤ò»Ü¤¹"
+
+#: info/session.c:1986
+msgid "Toggle the usage of regular expressions in searches"
+msgstr ""
+
+#: info/session.c:1990
+msgid "Using regular expressions for searches."
+msgstr ""
+
+#: info/session.c:1991
+msgid "Using literal strings for searches."
+msgstr ""
+
+#: info/session.c:2162
+msgid "Select the Next node"
+msgstr "¼¡ ¥Î¡¼¥É¤òÁªÂò"
+
+#: info/session.c:2170
+msgid "Select the Prev node"
+msgstr "Á° ¥Î¡¼¥É¤òÁªÂò"
+
+#: info/session.c:2178
+msgid "Select the Up node"
+msgstr "¾å ¥Î¡¼¥É¤òÁªÂò"
+
+#: info/session.c:2185
+msgid "Select the last node in this file"
+msgstr "¤³¤Î¥Õ¥¡¥¤¥ë¤ÎºÇ¸å¤Î¥Î¡¼¥É¤òÁªÂò"
+
+#: info/session.c:2212 info/session.c:2245
+msgid "This window has no additional nodes"
+msgstr "¤³¤Î¥¦¥£¥ó¥É¥¦¤Ë¤Ï¥Î¡¼¥É¤¬ÉÕ¤¤¤Æ¤¤¤Þ¤»¤ó"
+
+#: info/session.c:2218
+msgid "Select the first node in this file"
+msgstr "¤³¤Î¥Õ¥¡¥¤¥ë¤ÎºÇ½é¤Î¥Î¡¼¥É¤òÁªÂò"
+
+#: info/session.c:2252
+msgid "Select the last item in this node's menu"
+msgstr "¤³¤Î¥Î¡¼¥É¤Î¥á¥Ë¥å¡¼Æâ¤Ç¤ÎºÇ¸å¤Î¹àÌܤòÁªÂò"
+
+#: info/session.c:2258
+msgid "Select this menu item"
+msgstr "¤³¤Î¥á¥Ë¥å¡¼¹àÌܤòÁªÂò"
+
+#: info/session.c:2291
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "¤³¤Î¥á¥Ë¥å¡¼¤Ë %d ¸Ä¤Î¹àÌܤ¬¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: info/session.c:2485 info/session.c:2486
+#, c-format
+msgid "Menu item (%s): "
+msgstr "¥á¥Ë¥å¡¼¹àÌÜ (%s): "
+
+#: info/session.c:2489
+msgid "Menu item: "
+msgstr "¥á¥Ë¥å¡¼¹àÌÜ: "
+
+#: info/session.c:2496 info/session.c:2497
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "»²¾ÈÀè (%s): "
+
+#: info/session.c:2500
+msgid "Follow xref: "
+msgstr "»²¾ÈÀè: "
+
+#: info/session.c:2629
+msgid "Read a menu item and select its node"
+msgstr "¥á¥Ë¥å¡¼¤òÆɤó¤Ç¡¢¤½¤Î¥Î¡¼¥É¤òÁªÂò¤¹¤ë"
+
+#: info/session.c:2637
+msgid "Read a footnote or cross reference and select its node"
+msgstr "µÓÃí¤äÁê¸ß»²¾È¤òÆɤó¤Ç¡¢¤½¤Î¥Î¡¼¥É¤òÁªÂò¤¹¤ë"
+
+#: info/session.c:2643
+msgid "Move to the start of this node's menu"
+msgstr "¤³¤Î¥Î¡¼¥É¥á¥Ë¥å¡¼¤ÎÀèƬ¤Ë°ÜÆ°¤¹¤ë"
+
+#: info/session.c:2667
+msgid "Visit as many menu items at once as possible"
+msgstr "²Äǽ¤Ê¸Â¤ê¿¤¯¤Î¥á¥Ë¥å¡¼¹àÌܤذìÅÙ¤Ëˬ¤ì¤ë"
+
+#: info/session.c:2695
+msgid "Read a node name and select it"
+msgstr "¥Î¡¼¥É̾¤òÆɤó¤Ç¡¢ÁªÂò¤¹¤ë"
+
+#: info/session.c:2750 info/session.c:2755
+msgid "Goto node: "
+msgstr "¥Î¡¼¥É¤Ø°ÜÆ°: "
+
+#: info/session.c:2819
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "¥Î¡¼¥É `%s' ¤Ë¥á¥Ë¥å¡¼¤¬¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: info/session.c:2865
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "¥á¥Ë¥å¡¼¥¢¥¤¥Æ¥à `%s' ¤Ï¥Î¡¼¥É `%s' Ãæ¤Ë¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#: info/session.c:2895
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr "`%s' ¤«¤é»²¾È¤µ¤ì¤Æ¤¤¤ë¥Î¡¼¥É¤ò¸«¤Ä¤±¤é¤ì¤Þ¤»¤ó(`%s' Ãæ)"
+
+#: info/session.c:2945
+msgid "Read a list of menus starting from dir and follow them"
+msgstr "dir ¤«¤é¥á¥Ë¥å¡¼³«»Ï¥ê¥¹¥È¤òÆɤߡ¢¤½¤ì¤òé¤ë"
+
+#: info/session.c:2947
+msgid "Follow menus: "
+msgstr "¥á¥Ë¥å¡¼¤Ë³¤¯: "
+
+#: info/session.c:3140
+msgid "Find the node describing program invocation"
+msgstr "¥×¥í¥°¥é¥àµ¯Æ°¤Ë´Ø¤¹¤ëÀâÌÀ¤Î¥Î¡¼¥É¤ò¸«¤Ä¤±¤ë"
+
+#: info/session.c:3142
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "[%s] ¤Îµ¯Æ°¥Î¡¼¥É¤ò¸«¤Ä¤±¤ë: "
+
+#: info/session.c:3180
+msgid "Read a manpage reference and select it"
+msgstr "man ¥Ú¡¼¥¸¤Ø¤Î»²¾È¤òÆɤó¤Ç¡¢ÁªÂò¤¹¤ë"
+
+#: info/session.c:3184
+msgid "Get Manpage: "
+msgstr "Man ¥Ú¡¼¥¸¤òɽ¼¨: "
+
+#: info/session.c:3214
+msgid "Select the node `Top' in this file"
+msgstr "¤³¤Î¥Õ¥¡¥¤¥ë¤Î `ÀèƬ' ¥Î¡¼¥É¤òÁªÂò"
+
+#: info/session.c:3220
+msgid "Select the node `(dir)'"
+msgstr "`(dir)'¥Î¡¼¥É¤òÁªÂò¤¹¤ë"
+
+#: info/session.c:3237 info/session.c:3239
+#, c-format
+msgid "Kill node (%s): "
+msgstr "¥Î¡¼¥É¤ÎÀÚ¤ê¼è¤ê (%s): "
+
+#: info/session.c:3291
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "`%s' ¥Î¡¼¥É¤òÀÚ¤ê¼è¤ì¤Þ¤»¤ó"
+
+#: info/session.c:3301
+msgid "Cannot kill the last node"
+msgstr "ºÇ¸å¤Î¥Î¡¼¥É¤ÏÀÚ¤ê¼è¤ì¤Þ¤»¤ó"
+
+#: info/session.c:3387
+msgid "Select the most recently selected node"
+msgstr "ºÇ¸å¤ËÁªÂò¤µ¤ì¤¿¥Î¡¼¥É¤òÁªÂò¤¹¤ë"
+
+#: info/session.c:3393
+msgid "Kill this node"
+msgstr "¤³¤Î¥Î¡¼¥É¤òÀÚ¤ê¼è¤ë"
+
+#: info/session.c:3401
+msgid "Read the name of a file and select it"
+msgstr "¥Õ¥¡¥¤¥ë̾¤òÆɤó¤ÇÁªÂò¤¹¤ë"
+
+#: info/session.c:3405
+msgid "Find file: "
+msgstr "¥Õ¥¡¥¤¥ë¤ò¸«¤Ä¤±¤ë: "
+
+#: info/session.c:3422
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "`%s' ¤ò¸«¤Ä¤±¤é¤ì¤Þ¤»¤ó¡£"
+
+#: info/session.c:3465 info/session.c:3583
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "½ÐÎÏ¥Õ¥¡¥¤¥ë `%s' ¤òºîÀ®¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: info/session.c:3479 info/session.c:3601 info/session.c:3661
+msgid "Done."
+msgstr "´°Î»¡£"
+
+#: info/session.c:3534
+#, c-format
+msgid "Writing node %s..."
+msgstr "¥Î¡¼¥É %s ¤Î½ñ¤­¹þ¤ß..."
+
+#: info/session.c:3610
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr "INFO_PRINT_COMMAND ¤Ë¤è¤Ã¤Æ¤³¤Î¥Î¡¼¥É¤ÎÆâÍƤò¥Ñ¥¤¥×¤¹¤ë"
+
+#: info/session.c:3645
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "`%s' ¤Ø¤Î¥Ñ¥¤¥×¤ò³«¤±¤Þ¤»¤ó¡£"
+
+#: info/session.c:3651
+#, c-format
+msgid "Printing node %s..."
+msgstr "¥Î¡¼¥É `%s' ¤ò°õºþ..."
+
+#: info/session.c:3900
+msgid "Search continued from the end of the document."
+msgstr ""
+
+#: info/session.c:3905
+#, fuzzy
+msgid "Search continued from the beginning of the document."
+msgstr "¹ÔƬ¤Þ¤Ç¤òÀÚ¤ê¼è¤ë"
+
+#: info/session.c:3922
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "Éû¥Õ¥¡¥¤¥ë %s ¤òõ¤·¤Æ¤¤¤Þ¤¹ ..."
+
+#: info/session.c:3979
+msgid "Read a string and search for it case-sensitively"
+msgstr "ʸ»úÎó¤òÆɤߡ¢Âçʸ»ú¾®Ê¸»ú¤Î¶èÊ̤ò¤Ä¤±¤Æ¸¡º÷¤¹¤ë"
+
+#: info/session.c:3986
+msgid "Read a string and search for it"
+msgstr "ʸ»úÎó¤òÆɤó¤Ç¸¡º÷¤¹¤ë"
+
+#: info/session.c:3994
+msgid "Read a string and search backward for it"
+msgstr "ʸ»úÎó¤òÆɤó¤Ç¸åÊý¸¡º÷¤¹¤ë"
+
+#: info/session.c:4030 info/session.c:4036
+#, fuzzy, c-format
+msgid "%s%s%s [%s]: "
+msgstr "ʸ»úÎó¤Ø¤Î%s%s [%s]: "
+
+#: info/session.c:4031 info/session.c:4037
+msgid "Regexp search"
+msgstr ""
+
+#: info/session.c:4032 info/session.c:4038
+#, fuzzy
+msgid " case-sensitively"
+msgstr "(Âçʸ»ú¾®Ê¸»ú¤Î¶èÊ̤ò¤Ä¤±¤Æ) "
+
+#: info/session.c:4033 info/session.c:4039
+#, fuzzy
+msgid " backward"
+msgstr "¸åÊý¸¡º÷"
+
+#: info/session.c:4037
+msgid "Search"
+msgstr "¸¡º÷"
+
+#: info/session.c:4079
+msgid "Search failed."
+msgstr "¸¡º÷¤Ë¼ºÇÔ¡£"
+
+#: info/session.c:4097
+msgid "Repeat last search in the same direction"
+msgstr "Ʊ°ìÊý¸þ¤ÇºÇ¸å¤Î¸¡º÷¤ò·«¤êÊÖ¤¹"
+
+#: info/session.c:4100 info/session.c:4110
+msgid "No previous search string"
+msgstr "Á°¤Î¸¡º÷ʸ»úÎ󤬤¢¤ê¤Þ¤»¤ó"
+
+#: info/session.c:4107
+msgid "Repeat last search in the reverse direction"
+msgstr "µÕÊý¸þ¤ÇºÇ¸å¤Î¸¡º÷¤ò·«¤êÊÖ¤¹"
+
+#: info/session.c:4126 info/session.c:4132
+msgid "Search interactively for a string as you type it"
+msgstr "ÆþÎϤ·¤¿Ê¸»úÎó¤ÎÂÐÏÃŪ¤Ê¸¡º÷"
+
+#: info/session.c:4212
+#, fuzzy
+msgid "Regexp I-search backward: "
+msgstr "Ã༡¸åÊý¸¡º÷: "
+
+#: info/session.c:4213
+msgid "I-search backward: "
+msgstr "Ã༡¸åÊý¸¡º÷: "
+
+#: info/session.c:4215
+#, fuzzy
+msgid "Regexp I-search: "
+msgstr "Ã༡¸¡º÷: "
+
+#: info/session.c:4216
+msgid "I-search: "
+msgstr "Ã༡¸¡º÷: "
+
+#: info/session.c:4241 info/session.c:4243
+msgid "Failing "
+msgstr "¼ºÇÔ "
+
+#: info/session.c:4734
+msgid "Move to the previous cross reference"
+msgstr "Á°¤ÎÁê¸ß»²¾È¤Ë°ÜÆ°"
+
+#: info/session.c:4752
+msgid "Move to the next cross reference"
+msgstr "¼¡¤ÎÁê¸ß»²¾È¤Ë°ÜÆ°"
+
+#: info/session.c:4774
+msgid "Select reference or menu item appearing on this line"
+msgstr "»²¾È¤Þ¤¿¤Ï¡¢¤³¤Î¹Ô¤Ë¸½¤ì¤¿¥á¥Ë¥å¡¼¹àÌܤòÁªÂò"
+
+#: info/session.c:4797
+msgid "Cancel current operation"
+msgstr "¸½ºß¤ÎÁàºî¤òÃæ»ß"
+
+#: info/session.c:4804
+msgid "Quit"
+msgstr "»ß¤á¤Þ¤·¤¿"
+
+#: info/session.c:4813
+msgid "Move the cursor to a specific line of the window"
+msgstr "¥¦¥£¥ó¥É¥¦¤Î»ØÄê¹Ô¤Ë¥«¡¼¥½¥ë¤ò°ÜÆ°"
+
+#: info/session.c:4845
+msgid "Redraw the display"
+msgstr "²èÌ̤κÆÉÁ²è"
+
+#: info/session.c:4882
+msgid "Quit using Info"
+msgstr "Info ¤Î»ÈÍѤò½ªÎ»"
+
+#: info/session.c:4895
+msgid "Run command bound to this key's lowercase variant"
+msgstr "¤³¤Î¥­¡¼¤Î¾®Ê¸»ú¤Ë¥Ð¥¤¥ó¥É¤µ¤ì¤¿¥³¥Þ¥ó¥É¤ò¼Â¹Ô"
+
+#: info/session.c:4906
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "ÉÔÌÀ¤Ê¥³¥Þ¥ó¥É (%s) ¤Ç¤¹¡£"
+
+#: info/session.c:4909
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "\"%s\" ¤Ï̵¸ú¤Ç¤¹"
+
+#: info/session.c:4910
+#, fuzzy, c-format
+msgid "`%s' is invalid"
+msgstr "\"%s\" ¤Ï̵¸ú¤Ç¤¹"
+
+#: info/session.c:5125
+msgid "Add this digit to the current numeric argument"
+msgstr "¸½ºß¤Î¿ôÃÍ°ú¿ô¤Ë¤³¤Î¿ôÃͤò²Ã¤¨¤ë"
+
+#: info/session.c:5134
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "¸½ºß¤Î¿ôÃÍ°ú¿ô¤ò³«»Ï(Ëô¤Ï 4 Çܤ¹¤ë)"
+
+#: info/session.c:5149
+msgid "Internally used by \\[universal-argument]"
+msgstr "ÆâÉôŪ¤Ë \\[universal-argument] ¤Ë¤è¤Ã¤ÆÍøÍѤµ¤ì¤Þ¤¹"
+
+#: info/tilde.c:336
+#, c-format
+msgid "readline: Out of virtual memory!\n"
+msgstr "readline: ²¾ÁÛ¥á¥â¥ê¤ò»È¤¤²Ì¤¿¤·¤Þ¤·¤¿!\n"
+
+#: info/variables.c:37
+msgid "When \"On\", footnotes appear and disappear automatically"
+msgstr "\"On\" ¤Î»þ¡¢µÓÃí¤ò¼«Æ°Åª¤Ëɽ¼¨¤·¡¢¾Ãµî¤¹¤ë"
+
+#: info/variables.c:41
+msgid "When \"On\", creating or deleting a window resizes other windows"
+msgstr "\"On\" ¤Î»þ¡¢¥¦¥£¥ó¥É¥¦¤ÎºîÀ®¡¦ºï½ü¤Ç¡¢Â¾¤Î¥¦¥£¥ó¥É¥¦¤Î¥µ¥¤¥º¤òÊѹ¹"
+
+#: info/variables.c:45
+msgid "When \"On\", flash the screen instead of ringing the bell"
+msgstr "\"On\" ¤Î»þ¡¢¥Ù¥ë¤ò¤Ê¤é¤¹Âå¤ï¤ê¤Ë¡¢²èÌ̤ò¥Õ¥é¥Ã¥·¥å¤µ¤»¤ë"
+
+#: info/variables.c:49
+msgid "When \"On\", errors cause the bell to ring"
+msgstr "\"On\" ¤Î¤È¤­¡¢¥¨¥é¡¼¤¬È¯À¸¤·¤¿¤é¥Ù¥ë¤òÌĤ餹"
+
+#: info/variables.c:53
+msgid "When \"On\", Info garbage collects files which had to be uncompressed"
+msgstr "\"On\" ¤Î¤È¤­¡¢È󰵽̥ե¡¥¤¥ë¤ò¥¬¡¼¥Ù¥¸¥³¥ì¥¯¥È¤¹¤ë"
+
+#: info/variables.c:56
+msgid "When \"On\", the portion of the matched search string is highlighted"
+msgstr "\"On\" ¤Î»þ¡¢¸¡º÷ʸ»úÎó¤È°ìÃפ·¤¿¾ì½ê¤òȿžɽ¼¨¤µ¤»¤ë"
+
+#: info/variables.c:60
+msgid "Controls what happens when scrolling is requested at the end of a node"
+msgstr "ºÇ¸å¤Î¥Î¡¼¥É¤Ë¤ª¤¤¤Æ¡¢¥¹¥¯¥í¡¼¥ë¤ò¹Ô¤Ê¤Ã¤¿¤È¤­¤ËÆ°ºî¤òÄ´Àá"
+
+#: info/variables.c:65
+msgid "Same as scroll-behaviour"
+msgstr ""
+
+#: info/variables.c:69
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr "¥«¡¼¥½¥ë¤ò¥¦¥£¥ó¥É¥¦¤Î³°¤ËÆ°¤«¤½¤¦¤È¤·¤¿»þ¤Î¥¹¥¯¥í¡¼¥ë¹Ô¿ô"
+
+#: info/variables.c:73
+msgid "Controls whether scroll-behavior affects cursor movement commands"
+msgstr ""
+
+#: info/variables.c:77
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr "\"On\" ¤Î»þ¡¢Info ¤Ï ISO Latin ʸ»ú¤Îɽ¼¨¤¬²Äǽ¤Ë¤Ê¤ë"
+
+#: info/variables.c:81
+#, fuzzy
+msgid ""
+"What to do when a scrolling command is issued at the end of the last node"
+msgstr "ºÇ¸å¤Î¥Î¡¼¥É¤Ë¤ª¤¤¤Æ¡¢¥¹¥¯¥í¡¼¥ë¤ò¹Ô¤Ê¤Ã¤¿¤È¤­¤ËÆ°ºî¤òÄ´Àá"
+
+#: info/variables.c:88
+msgid "Explain the use of a variable"
+msgstr "ÊÑ¿ô¤Î»È¤¤Êý¤ò²òÀ⤹¤ë"
+
+#: info/variables.c:94
+msgid "Describe variable: "
+msgstr "ÊÑ¿ô¤ÎÀâÌÀ: "
+
+#: info/variables.c:113
+msgid "Set the value of an Info variable"
+msgstr "Info ÊÑ¿ô¤ÎÃͤòÀßÄê"
+
+#: info/variables.c:119
+msgid "Set variable: "
+msgstr "ÊÑ¿ô¤òÀßÄê: "
+
+#: info/variables.c:137
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "%s ¤ËÃͤòÀßÄê (%d): "
+
+#: info/variables.c:178
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "%s ¤ËÃͤòÀßÄê (%s): "
+
+#: info/window.c:1026
+msgid "--*** Tags out of Date ***"
+msgstr "--*** µì¼°¤Î¥¿¥° ***"
+
+#: info/window.c:1037
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), ¹Ô¿ô ----, "
+
+#: info/window.c:1044
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d ¹Ô --%s--"
+
+#: info/window.c:1048
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d ¹Ô --%s--"
+
+#: info/window.c:1055
+#, c-format
+msgid " Subfile: %s"
+msgstr " Éû¥Õ¥¡¥¤¥ë: %s"
+
+#: install-info/install-info.c:221
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: ·Ù¹ð: "
+
+#: install-info/install-info.c:270
+#, c-format
+msgid " for %s"
+msgstr " %s"
+
+#: install-info/install-info.c:500
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr "\t´°Á´¤Ê ¥ª¥×¥·¥ç¥ó¥ê¥¹¥È¤òÆÀ¤ë¤Ë¤Ï `%s --help' ¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£\n"
+
+#: install-info/install-info.c:508
+#, fuzzy, c-format
+msgid "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+msgstr "»È¤¤Êý: %s [¥ª¥×¥·¥ç¥ó]... TEXINFO¥Õ¥¡¥¤¥ë...\n"
+
+#: install-info/install-info.c:510
+msgid "Add or remove entries in INFO-FILE from the Info directory DIR-FILE."
+msgstr ""
+
+#: install-info/install-info.c:513
+msgid ""
+"Options:\n"
+" --debug report what is being done.\n"
+" --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+" don't insert any new entries.\n"
+" --description=TEXT the description of the entry is TEXT; used with\n"
+" the --name option to become synonymous with the\n"
+" --entry option.\n"
+" --dir-file=NAME specify file name of Info directory file;\n"
+" equivalent to using the DIR-FILE argument.\n"
+" --dry-run same as --test."
+msgstr ""
+
+#: install-info/install-info.c:525
+msgid ""
+" --entry=TEXT insert TEXT as an Info directory entry.\n"
+" TEXT is written as an Info menu item line followed\n"
+" by zero or more extra lines starting with "
+"whitespace.\n"
+" If you specify more than one entry, all are added.\n"
+" If you don't specify any entries, they are determined\n"
+" from information in the Info file itself.\n"
+" When removing, TEXT specifies the entry to remove.\n"
+" TEXT is only removed as a last resort, if the\n"
+" entry as determined from the Info file is not "
+"present,\n"
+" and the basename of the Info file isn't found either."
+msgstr ""
+
+#: install-info/install-info.c:537
+msgid ""
+" --help display this help and exit.\n"
+" --info-dir=DIR same as --dir-file=DIR/dir.\n"
+" --info-file=FILE specify Info file to install in the directory;\n"
+" equivalent to using the INFO-FILE argument.\n"
+" --item=TEXT same as --entry=TEXT.\n"
+" --keep-old do not replace entries, or remove empty sections.\n"
+" --menuentry=TEXT same as --name=TEXT.\n"
+" --name=TEXT the name of the entry is TEXT; used with --description\n"
+" to become synonymous with the --entry option.\n"
+" --no-indent do not format new entries in the DIR file.\n"
+" --quiet suppress warnings."
+msgstr ""
+
+#: install-info/install-info.c:550
+msgid ""
+" --regex=R put this file's entries in all sections that match the\n"
+" regular expression R (ignoring case).\n"
+" --remove same as --delete.\n"
+" --remove-exactly only remove if the info file name matches exactly;\n"
+" suffixes such as .info and .gz are not ignored.\n"
+" --section=SEC put entries in section SEC of the directory.\n"
+" If you specify more than one section, all the entries\n"
+" are added in each of the sections.\n"
+" If you don't specify any sections, they are "
+"determined\n"
+" from information in the Info file itself.\n"
+" --section R SEC equivalent to --regex=R --section=SEC --add-once."
+msgstr ""
+
+#: install-info/install-info.c:563
+msgid ""
+" --silent suppress warnings.\n"
+" --test suppress updating of DIR-FILE.\n"
+" --version display version information and exit."
+msgstr ""
+
+#: install-info/install-info.c:570
+#, fuzzy
+msgid ""
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+"Email ¤Ë¤è¤ë¥Ð¥°¥ì¥Ý¡¼¥È¤Ï bug-texinfo@gnu.org¡¢\n"
+"°ìÈÌŪ¤Ê¼ÁÌä¤äµÄÏÀ¤Ï help-texinfo@gnu.org ¤Þ¤Ç¡£\n"
+
+#: install-info/install-info.c:597
+#, fuzzy, c-format
+msgid ""
+"This is the file .../info/dir, which contains the\n"
+"topmost node of the Info hierarchy, called (dir)Top.\n"
+"The first time you invoke Info you start off looking at this node.\n"
+"\n"
+"%s\tThis is the top of the INFO tree\n"
+"\n"
+" This (the Directory node) gives a menu of major topics.\n"
+" Typing \"q\" exits, \"?\" lists all Info commands, \"d\" returns here,\n"
+" \"h\" gives a primer for first-timers,\n"
+" \"mEmacs<Return>\" visits the Emacs manual, etc.\n"
+"\n"
+" In Emacs, you can click mouse button 2 on a menu item or cross reference\n"
+" to select it.\n"
+"\n"
+"%s\n"
+msgstr ""
+"¤³¤ì¤¬¡¢(dir)Top ¤È¸Æ¤Ð¤ì¤ë Info ³¬ÁؤκǾå°Ì¥Î¡¼¥É¤Î´Þ¤á¤é¤ì¤Æ¤¤¤ë\n"
+".../info/dir ¥Õ¥¡¥¤¥ë¤Ç¤¹¡£\n"
+"¤¢¤Ê¤¿¤¬¡¢»Ï¤á¤Æ Info ¤òµ¯Æ°¤·¤¿¤Î¤Ê¤é¡¢¤Þ¤º¤³¤Î¥Î¡¼¥É¤ò¸«¤Æ¤¯¤À¤µ¤¤¡£\n"
+"\n"
+"%s\t¤³¤ì¤¬¡¢INFO ¥Ä¥ê¡¼¤ÎĺÅÀ¤Ç¤¹\n"
+"\n"
+" ¤³¤³(the Directory ¥Î¡¼¥É)¤Ç¤Ï¡¢¼ç¤À¤Ã¤¿¼çÂê¤ò°·¤Ã¤Æ¤¤¤Þ¤¹¡£\n"
+" ¥­¡¼ \"q\" ¤Ç½ªÎ»¤·¡¢\"?\" ¤Ç Info ¤Î¥³¥Þ¥ó¥É¤ò¥ê¥¹¥È¥¢¥Ã¥×¤·¡¢\"d\" ¤Ç¤³¤³"
+"¤Ë\n"
+" Ìá¤ê¤Þ¤¹¡£\n"
+" \"h\" ¤ÇƳÆþʸ»ú¤òÆþÎϤ·¤Þ¤¹¡£¤¿¤È¤¨¤Ð¡¢\n"
+" \"mEmacs<Return>\" ¤Ç Emacs ¥Þ¥Ë¥å¥¢¥ë¤òˬ¤ì¤ë¡¢¤Ê¤É¤Ç¤¹¡£\n"
+"\n"
+" Emacs ¤ÎÆâ¤Ê¤é¤Ð¡¢¥á¥Ë¥å¡¼¹àÌܤäÁê¸ß»²¾È¤ò¡¢¥Þ¥¦¥¹¤Î¥Ü¥¿¥ó 2 ¤ò¥¯¥ê¥Ã¥¯¤·"
+"¤Æ\n"
+" ÁªÂò¤Ç¤­¤Þ¤¹¡£\n"
+"\n"
+"* ¥á¥Ë¥å¡¼:\n"
+
+#: install-info/install-info.c:622
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr "%s: (%s) ¤òÆɤ᤺¡¢(%s) ¤òºîÀ®¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿\n"
+
+#: install-info/install-info.c:715
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: ¶õ¤Î¥Õ¥¡¥¤¥ë"
+
+#: install-info/install-info.c:1046 install-info/install-info.c:1086
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "START-INFO-DIR-ENTRY ¤ËÂбþ¤¹¤ë END-INFO-DIR-ENTRY ¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: install-info/install-info.c:1081
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "END-INFO-DIR-ENTRY ¤ËÂбþ¤¹¤ë START-INFO-DIR-ENTRY ¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: install-info/install-info.c:1946 install-info/install-info.c:1956
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr ""
+
+#: install-info/install-info.c:2036
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: Info ¥Õ¥¡¥¤¥ë¤Ï°ìÅÙ¤À¤±»ØÄꤷ¤Æ¤¯¤À¤µ¤¤¡£\n"
+
+#: install-info/install-info.c:2069
+#, c-format
+msgid "Extra regular expression specified, ignoring `%s'"
+msgstr ""
+
+#: install-info/install-info.c:2081
+#, c-format
+msgid "Error in regular expression `%s': %s"
+msgstr ""
+
+#: install-info/install-info.c:2139
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "¥³¥Þ¥ó¥É¥é¥¤¥ó°ú¿ô¤¬Â¿¤¹¤®¤Þ¤¹ `%s'"
+
+#: install-info/install-info.c:2143
+msgid "No input file specified; try --help for more information."
+msgstr ""
+"ÆþÎÏ¥Õ¥¡¥¤¥ë¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó -- ¾Ü¤·¤¯¤Ï --help ÉդǼ¹Ԥ·¤Æ¤¯¤À¤µ¤¤¡£"
+
+#: install-info/install-info.c:2146
+msgid "No dir file specified; try --help for more information."
+msgstr ""
+"dir ¥Õ¥¡¥¤¥ë¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó -- ¾Ü¤·¤¯¤Ï --help ÉդǼ¹Ԥ·¤Æ²¼¤µ¤¤¡£"
+
+#: install-info/install-info.c:2288
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "`%s' ¤Ë Info dir ÍѤιàÌܤ¬¤¢¤ê¤Þ¤»¤ó"
+
+#: install-info/install-info.c:2536
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "`%s' ¹àÌܤ¬¸«¤Ä¤«¤ê¤Þ¤»¤ó -- ²¿¤âºï½ü¤·¤Þ¤»¤ó¤Ç¤·¤¿"
+
+#: lib/xexit.c:54
+msgid "ferror on stdout\n"
+msgstr ""
+
+#: lib/xexit.c:59
+msgid "fflush error on stdout\n"
+msgstr ""
+
+#: makeinfo/cmds.c:582 makeinfo/cmds.c:604
+#, fuzzy, c-format
+msgid "arguments to @%s ignored"
+msgstr "%c%s ¤ËÂФ¹¤ëÉÔÀµ¤Ê°ú¿ô"
+
+#: makeinfo/cmds.c:779
+msgid "January"
+msgstr "°ì·î"
+
+#: makeinfo/cmds.c:779
+msgid "February"
+msgstr "Æó·î"
+
+#: makeinfo/cmds.c:779
+msgid "March"
+msgstr "»°·î"
+
+#: makeinfo/cmds.c:779
+msgid "April"
+msgstr "»Í·î"
+
+#: makeinfo/cmds.c:779
+msgid "May"
+msgstr "¸Þ·î"
+
+#: makeinfo/cmds.c:780
+msgid "June"
+msgstr "Ï»·î"
+
+#: makeinfo/cmds.c:780
+msgid "July"
+msgstr "¼··î"
+
+#: makeinfo/cmds.c:780
+msgid "August"
+msgstr "Ȭ·î"
+
+#: makeinfo/cmds.c:780
+msgid "September"
+msgstr "¶å·î"
+
+#: makeinfo/cmds.c:780
+msgid "October"
+msgstr "½½·î"
+
+#: makeinfo/cmds.c:781
+msgid "November"
+msgstr "½½°ì·î"
+
+#: makeinfo/cmds.c:781
+msgid "December"
+msgstr "½½Æó·î"
+
+#: makeinfo/cmds.c:1131
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "@var ¤Ç»È¤¨¤½¤¦¤Ë¤Ê¤¤Ê¸»ú %c"
+
+#: makeinfo/cmds.c:1174
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "Á´¤ÆÂçʸ»ú¤Î @sc °ú¿ô¡¢½¾¤Ã¤Æ¸ú²Ì¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: makeinfo/cmds.c:1229
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "`{' ¤¬¤¢¤ë¤Ï¤º¤Ç¤¹¤¬¡¢`%c' ¤Ç¤·¤¿"
+
+#: makeinfo/cmds.c:1269
+msgid "end of file inside verb block"
+msgstr "verb ¥Ö¥í¥Ã¥¯Æâ¤Ç¥Õ¥¡¥¤¥ëËöÈø¤È¤Ê¤ê¤Þ¤·¤¿"
+
+#: makeinfo/cmds.c:1277
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "`}' ¤¬¤¢¤ë¤Ï¤º¤Ç¤¹¤¬¡¢`%c' ¤Ç¤·¤¿"
+
+#: makeinfo/cmds.c:1308
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+
+#: makeinfo/cmds.c:1504
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s ¤ÏÇѤ줿̿Îá¤Ç¤¹"
+
+#: makeinfo/cmds.c:1612
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "@sp ¤Ë¤Ï `%s' ¤Ç¤Ï¤Ê¤¯¡¢Àµ¤Î¿ôÃͤòÍ¿¤¨¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#: makeinfo/cmds.c:2023 makeinfo/footnote.c:81
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "%c%s ¤ËÂФ¹¤ëÉÔÀµ¤Ê°ú¿ô"
+
+#: makeinfo/cmds.c:2033 makeinfo/makeinfo.c:4317
+msgid "asis"
+msgstr "¤½¤Î¤Þ¤Þ"
+
+#: makeinfo/cmds.c:2035 makeinfo/cmds.c:2065 makeinfo/makeinfo.c:4319
+msgid "none"
+msgstr "¤Ê¤·"
+
+#: makeinfo/cmds.c:2049
+#, fuzzy, c-format
+msgid "Bad argument to @%s"
+msgstr "%c%s ¤ËÂФ¹¤ëÉÔÀµ¤Ê°ú¿ô"
+
+#: makeinfo/cmds.c:2063
+msgid "insert"
+msgstr ""
+
+#: makeinfo/cmds.c:2079
+#, fuzzy, c-format
+msgid "Bad argument to @%s: %s"
+msgstr "%c%s ¤ËÂФ¹¤ëÉÔÀµ¤Ê°ú¿ô"
+
+#: makeinfo/cmds.c:2162
+#, c-format
+msgid "Expected @%s on or off, not `%s'"
+msgstr ""
+
+#: makeinfo/cmds.c:2182
+#, c-format
+msgid "Only @%s 10 or 11 is supported, not `%s'"
+msgstr ""
+
+#: makeinfo/defun.c:83
+msgid "Missing `}' in @def arg"
+msgstr "@def °ú¿ô¤Ë `}' ¤ò˺¤ì¤Æ¤¤¤Þ¤¹"
+
+#: makeinfo/defun.c:711
+#, fuzzy, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr "`%2$sx' ¤ò»È¤¦¤¿¤á¤Ë¤Ï `%1$s' ÁÞÆþ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#: makeinfo/files.c:434
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:637
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr ""
+
+#: makeinfo/files.c:645
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr ""
+
+#: makeinfo/files.c:693
+msgid "Output buffer not empty."
+msgstr ""
+
+#: makeinfo/float.c:181
+#, c-format
+msgid "Requested float type `%s' not previously used"
+msgstr ""
+
+#: makeinfo/float.c:376 makeinfo/float.c:382 makeinfo/index.c:959
+#: makeinfo/index.c:965
+msgid "See "
+msgstr "See "
+
+#: makeinfo/footnote.c:149
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "`%c%s' ¤Ë¤Ï `%s' ¤À¤±¤Ç¤Ê¤¯¡¢`{...}' ·Á¼°¤Î°ú¿ô¤¬É¬ÍפǤ¹"
+
+#: makeinfo/footnote.c:164
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "µÓÃí `%s' ¤ÎÊĤ¸¥Ö¥ì¡¼¥¹¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: makeinfo/footnote.c:197
+msgid "Footnote defined without parent node"
+msgstr "µÓÃí¤Ë¿Æ¥Î¡¼¥É¤ÎÄêµÁ¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: makeinfo/footnote.c:209
+#, fuzzy
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "µÓÃí¤Ë¿Æ¥Î¡¼¥É¤ÎÄêµÁ¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: makeinfo/footnote.c:301 makeinfo/index.c:187
+msgid "Footnotes"
+msgstr "µÓÃí"
+
+#: makeinfo/html.c:91
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr ""
+
+#: makeinfo/html.c:180
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr ""
+
+#: makeinfo/html.c:426
+msgid "[unexpected] no html tag to pop"
+msgstr ""
+
+#: makeinfo/html.c:800
+#, fuzzy, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "ÉÔŬÀڤʥΡ¼¥É̾¤Ç¤¹: `%s'"
+
+#: makeinfo/index.c:167
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "ÉÔÌÀ¤Ê¥¤¥ó¥Ç¥Ã¥¯¥¹ `%s'"
+
+#: makeinfo/index.c:232
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr ""
+
+#: makeinfo/index.c:410
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "¸«½Ð¤· `%s' ¤Ï´û¤Ë¸ºß¤·¤Þ¤¹"
+
+#: makeinfo/index.c:453
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "@synindex ¤Ë¡¢ÃΤé¤Ê¤¤¸«½Ð¤· `%s' ¤ä `%s' ¤¬¤¢¤ê¤Þ¤¹"
+
+#: makeinfo/index.c:676
+msgid "(line )"
+msgstr ""
+
+#: makeinfo/index.c:684
+#, c-format
+msgid "(line %*d)"
+msgstr ""
+
+#: makeinfo/index.c:765
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "@printindex ¤Ë¡¢ÃΤé¤Ê¤¤¸«½Ð¤· `%s' ¤¬¤¢¤ê¤Þ¤¹"
+
+#: makeinfo/index.c:834
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "¸«½Ð¤· `%s' ¤Î¥¨¥ó¥È¥ê¤Ï¤¢¤é¤æ¤ë¥Î¡¼¥É¤Î³°Â¦¤Ç¤¹"
+
+#: makeinfo/index.c:837 makeinfo/index.c:873
+msgid "(outside of any node)"
+msgstr "(¤¢¤é¤æ¤ë¥Î¡¼¥É¤Î³°Â¦)"
+
+#: makeinfo/insertion.c:161
+msgid "@item not allowed in argument to @itemize"
+msgstr ""
+
+#: makeinfo/insertion.c:242
+msgid "Broken-Type in insertion_type_pname"
+msgstr "insertion_type_pname Ãæ¤Ë²õ¤ì¤¿·¿¤¬¤¢¤ê¤Þ¤¹"
+
+#: makeinfo/insertion.c:338
+msgid "Enumeration stack overflow"
+msgstr "ÎóµóÍÑ¥¹¥¿¥Ã¥¯¤¬¥ª¡¼¥Ð¥Õ¥í¡¼¤·¤Þ¤·¤¿"
+
+#: makeinfo/insertion.c:370
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "¥é¥Ù¥ëʸ»ú¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¡¢%c ¤ËÌᤷ¤Þ¤¹"
+
+#: makeinfo/insertion.c:639
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s ¤Ë¤Ï°ú¿ô¤¬É¬ÍפǤ¹: %citem ¤òÀ°·Á¤¹¤ë¤¿¤á"
+
+#: makeinfo/insertion.c:727
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr ""
+
+#: makeinfo/insertion.c:981
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "`@end' ¤Ë¤Ï `%s' ¤¬É¬ÍפǤ¹¤¬¡¢`%s' ¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿"
+
+#: makeinfo/insertion.c:1349
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "`%cend %s' ¤È¤ÎÂбþ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#: makeinfo/insertion.c:1618
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s ¤Ë¤Ï±Ñ¿ôʸ»ú¤¬É¬ÍפǤ¹"
+
+#: makeinfo/insertion.c:1718
+msgid "end of file inside verbatim block"
+msgstr "verbatim ¥Ö¥í¥Ã¥¯Ãæ¤Ç¥Õ¥¡¥¤¥ë¤ÎËöÈø¤È¤Ê¤ê¤Þ¤·¤¿"
+
+#: makeinfo/insertion.c:1942
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "`@%2$s' ¥Ö¥í¥Ã¥¯Æ⦤ǤΠ@%1$s ¤Ï¡¢¤¢¤Þ¤ê°ÕÌ£¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: makeinfo/insertion.c:1978
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "@menu ¤¬ºÇ½é¤Î @node °ÊÁ°¤Ë¸½¤ì¤Þ¤·¤¿¡£`Top' ¥Î¡¼¥É¤ò¤Ä¤¯¤ê¤Þ¤¹"
+
+#: makeinfo/insertion.c:1979
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr "¿ʬ @top ¥Î¡¼¥É¤Ï @ifinfo ¤è¤ê¤Ï @ifnottex ¤Ëʤ¤ï¤ì¤ë¤Ù¤­¤Ç¤Ï¡©"
+
+#: makeinfo/insertion.c:1991
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "@detailmenu ¤¬ºÇ½é¤Î¥Î¡¼¥É°ÊÁ°¤Ë¸½¤ì¤Þ¤·¤¿¡£`ĺÅÀ' ¥Î¡¼¥É¤òºî¤ê¤Þ¤¹"
+
+#: makeinfo/insertion.c:2047
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr ""
+
+#: makeinfo/insertion.c:2061
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "`@%2$s' ¥Ö¥í¥Ã¥¯Æ⦤ǤΠ@%1$s ¤Ï¡¢¤¢¤Þ¤ê°ÕÌ£¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: makeinfo/insertion.c:2092
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "`%c%s' ¤È¤ÎÂбþ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#: makeinfo/insertion.c:2097
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "`%c%s' ¤Î¸å¤í¤Ë¤Ï²¿¤«¤¬É¬ÍפǤ¹"
+
+#: makeinfo/insertion.c:2103
+#, fuzzy, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "`%s' ¤ËÂФ¹¤ëÉÔÀµ¤Ê°ú¿ô `%s'¡£`%s' ¤ò»È¤¤¤Þ¤¹"
+
+#: makeinfo/insertion.c:2200
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "`@%2$s' ¥Ö¥í¥Ã¥¯Æ⦤ǤΠ@%1$s ¤Ï¡¢¤¢¤Þ¤ê°ÕÌ£¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: makeinfo/insertion.c:2209
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "`%s' ¥Ö¥í¥Ã¥¯Æ⦤ǤΠ@itemx ¤Ï¡¢¤¢¤Þ¤ê°ÕÌ£¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: makeinfo/insertion.c:2383
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "ÁÞÆþ¥Ö¥í¥Ã¥¯³°¤Ç¡¢%c%s ¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿"
+
+#: makeinfo/lang.c:1218
+#, c-format
+msgid "no default territory known for language `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:1281
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr "%s ¤ÏÍ­¸ú¤Ê ISO 639 ¸À¸ì¥³¡¼¥É¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#: makeinfo/lang.c:1399
+#, fuzzy, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°Ì¾ `%s' ¤òǧ¼±¤Ç¤­¤Þ¤»¤ó"
+
+#: makeinfo/lang.c:1407
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "»ÄÇ°¤Ê¤¬¤é¡¢¥¨¥ó¥³¡¼¥É `%s' ¤Ï¼õ¤±ÉÕ¤±¤é¤ì¤Þ¤»¤ó"
+
+#: makeinfo/lang.c:1492
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "¥¨¥ó¥³¡¼¥Éʸ»ú `%s' ¤¬Ìµ¸ú¤Ç¤¹"
+
+#: makeinfo/lang.c:1800
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr "%c%s ¤Ï `%c' ¤Ç¤Ï¤Ê¤¯¡¢`i' ¤« `j' ¤ò°ú¿ô¤È¤·¤ÆɬÍפȤ·¤Þ¤¹"
+
+#: makeinfo/lang.c:1804
+#, c-format
+msgid "%c%s expects a single character `i' or `j' as argument"
+msgstr "%c%s ¤Ï°ú¿ô¤È¤·¤Æ `i' ¤« `j' ¤Î¤¤¤º¤ì¤«°ìʸ»ú¤¬É¬ÍפǤ¹"
+
+#: makeinfo/macro.c:128
+#, c-format
+msgid "macro `%s' previously defined"
+msgstr "¥Þ¥¯¥í `%s' ¤Ï°ÊÁ°¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#: makeinfo/macro.c:132
+#, c-format
+msgid "here is the previous definition of `%s'"
+msgstr "¤³¤³¤Ï¡¢`%s' ¤ÎÁ°¤ÎÄêµÁ¤Ç¤¹"
+
+#: makeinfo/macro.c:359
+#, fuzzy, c-format
+msgid "\\ in macro expansion followed by `%s' instead of parameter name"
+msgstr "¥Þ¥¯¥íŸ³«Æâ¤Î \\ ¤Î¸å¤í¤Ë \\ ¤ä¥Ñ¥é¥á¥¿Ì¾¤Ç¤Ï¤Ê¤¯ `%s' ¤¬Â³¤¤¤Æ¤¤¤Þ¤¹"
+
+#: makeinfo/macro.c:401
+#, c-format
+msgid "Macro `%s' called on line %d with too many args"
+msgstr "¥Þ¥¯¥í `%s' ¸Æ¤Ó½Ð¤·(%d¹ÔÌÜ)¤Î°ú¿ô¤¬Â¿¤¹¤®¤Þ¤¹"
+
+#: makeinfo/macro.c:580
+#, c-format
+msgid "%cend macro not found"
+msgstr "%cend ¥Þ¥¯¥í¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#: makeinfo/macro.c:591
+msgid "@allow-recursion is deprecated; please use @rmacro instead"
+msgstr ""
+
+#: makeinfo/macro.c:606
+msgid "@quote-arg is deprecated; arguments are quoted by default"
+msgstr ""
+
+#: makeinfo/macro.c:649
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "@%2$s ¤È°ìÃפ·¤Ê¤¤ @end %1$s"
+
+#: makeinfo/makeinfo.c:188
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "¥¨¥é¡¼¤¬Â¿¤¹¤®¤Þ¤¹! Äü¤á¤Þ¤·¤¿¡£\n"
+
+#: makeinfo/makeinfo.c:306
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: ·Ù¹ð: "
+
+#: makeinfo/makeinfo.c:325 makeinfo/makeinfo.c:2340
+#, c-format
+msgid "Misplaced %c"
+msgstr "´Ö°ã¤Ã¤¿°ÌÃÖ¤Ë %c"
+
+#: makeinfo/makeinfo.c:344
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "¾Ü¤·¤¯¤Ï `%s --help' ¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£\n"
+
+#: makeinfo/makeinfo.c:347
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "»È¤¤Êý: %s [¥ª¥×¥·¥ç¥ó]... TEXINFO¥Õ¥¡¥¤¥ë...\n"
+
+#: makeinfo/makeinfo.c:350
+msgid ""
+"Translate Texinfo source documentation to various other formats, by default\n"
+"Info files suitable for reading online with Emacs or standalone GNU Info.\n"
+msgstr ""
+"Texinfo ¥½¡¼¥¹Ê¸½ñ¤òÍÍ¡¹¤Ê·Á¼°¤ÇÆɤá¤ë¤è¤¦¤ËÊÑ´¹¤·¤Þ¤¹¡£¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï\n"
+"¥ª¥ó¥é¥¤¥ó¤Ç Emacs ¤äñÆȤΠGNU Info ¤ÇÆɤà¤Î¤ËŬ¤·¤¿ Info ¥Õ¥¡¥¤¥ë¤Ç¤¹¡£\n"
+
+#: makeinfo/makeinfo.c:354
+#, fuzzy, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\n"
+" --document-language=STR locale to use in translating Texinfo keywords\n"
+" for the output document (default C).\n"
+" --force preserve output even if errors.\n"
+" --help display this help and exit.\n"
+" --no-validate suppress node cross-reference validation.\n"
+" --no-warn suppress warnings (but not errors).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"°ìÈÌŪ¤Ê¥ª¥×¥·¥ç¥ó:\n"
+" --error-limit=NUM ¥¨¥é¡¼¤¬ NUM ¸ÄȯÀ¸¤·¤¿¤éÃæ»ß¤¹¤ë (default %"
+"d)¡£\n"
+" --force ¥¨¥é¡¼¤¬È¯À¸¤·¤Æ¤â½ÐÎϤòÊݸ¤¹¤ë¡£\n"
+" --help ¤³¤Î»È¤¤Êý¤òɽ¼¨¤·¤Æ½ªÎ»¤¹¤ë¡£\n"
+" --no-validate ¥Î¡¼¥É´ÖÁê¸ß»²¾È¤Î¸¡¾Ú¤òÍÞÀ©¤¹¤ë¡£\n"
+" --no-warn ·Ù¹ð¤òÍÞÀ©¤¹¤ë (¤¬¡¢¥¨¥é¡¼¤Ïɽ¼¨¤¹¤ë)¡£\n"
+" --reference-limit=NUM ºÇÂ绲¾È¿ô NUM ¤Ë»ê¤ì¤Ð·Ù¹ð¤¹¤ë (default %"
+"d)¡£\n"
+" -v, --verbose ¹Ô¤Ê¤ï¤ì¤ë»ö¤òÀâÌÀ¤¹¤ë¡£\n"
+" --version ¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨¤·¤Æ½ªÎ»¤¹¤ë¡£\n"
+
+#: makeinfo/makeinfo.c:369
+#, fuzzy, no-wrap
+msgid ""
+"Output format selection (default is to produce Info):\n"
+" --docbook output Docbook XML rather than Info.\n"
+" --html output HTML rather than Info.\n"
+" --xml output Texinfo XML rather than Info.\n"
+" --plaintext output plain text rather than Info.\n"
+msgstr ""
+"½ÐÎÏ·Á¼°¥»¥¯¥·¥ç¥ó (¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï Info ¤òÀ¸À®¤·¤Þ¤¹):\n"
+" --docbook Info ¤Ç¤Ï¤Ê¤¯ DocBook ¤ò½ÐÎϤ¹¤ë¡£\n"
+" --html Info ¤Ç¤Ï¤ó¤¯ HTML ¤ò½ÐÎϤ¹¤ë¡£\n"
+" --no-headers ¥×¥ì¥¤¥ó¥Æ¥¯¥¹¥È¤ò½ÐÎϤ¹¤ë¡£Info ¥Î¡¼¥É¶èÀÚ¤ê»Ò\n"
+" ¤ä Node: ¹Ô¤òÍÞÀ©¡£--output ¥ª¥×¥·¥ç¥ó¤ò\n"
+" ¤Ä¤±¤Ê¤¤¤Èɸ½à½ÐÎϤ˽ñ¤­¹þ¤à\n"
+" --xml Info ¤Ç¤Ï¤Ê¤¯ XML (TexinfoML) ·Á¼°¤Ç½ÐÎϤ¹¤ë¡£\n"
+
+#: makeinfo/makeinfo.c:377
+#, fuzzy
+msgid ""
+"General output options:\n"
+" -E, --macro-expand=FILE output macro-expanded source to FILE,\n"
+" ignoring any @setfilename.\n"
+" --no-headers suppress node separators, Node: lines, and "
+"menus\n"
+" from Info output (thus producing plain "
+"text)\n"
+" or from HTML (thus producing shorter "
+"output);\n"
+" also, write to standard output by default.\n"
+" --no-split suppress the splitting of Info or HTML "
+"output,\n"
+" generate only one output file.\n"
+" --number-sections output chapter and sectioning numbers.\n"
+" -o, --output=FILE output to FILE (or directory if split HTML).\n"
+msgstr ""
+"°ìÈ̽ÐÎÏ¥ª¥×¥·¥ç¥ó:\n"
+" -E, --macro-expand FILE ¥Þ¥¯¥íŸ³«¤µ¤ì¤¿¥½¡¼¥¹¤ò FILE ¤Ë½ÐÎϤ¹¤ë¡£\n"
+" @setfilename ¤Ï̵»ë¤µ¤ì¤ë¡£\n"
+" --no-split Info ¤ä HTML ¤Îʬ³ä½ÐÎϤòÍÞÀ©¤¹¤ë¡£\n"
+" ¤¿¤À°ì¤Ä¤Î½ÐÎÏ¥Õ¥¡¥¤¥ë¤òÀ¸À®¤¹¤ë¡£\n"
+" --number-sections ¾Ï¤äÀá¤ÎÈÖ¹æ¤ò½ÐÎϤ¹¤ë¡£\n"
+" -o, --output=FILE FILE ¤Ø½ÐÎϤ¹¤ë (ʬ³ä HTML ¤Î¾ì¹ç¥Ç¥£¥ì¥¯¥È"
+"¥ê)¡£\n"
+
+#: makeinfo/makeinfo.c:391
+#, fuzzy, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --disable-encoding do not output accented and special characters\n"
+" in Info output based on @documentencoding.\n"
+" --enable-encoding override --disable-encoding (default).\n"
+" --fill-column=NUM break Info lines at NUM characters (default %"
+"d).\n"
+" --footnote-style=STYLE output footnotes in Info according to STYLE:\n"
+" `separate' to put them in their own node;\n"
+" `end' to put them at the end of the node, "
+"in\n"
+" which they are defined (this is the "
+"default).\n"
+" --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %"
+"d).\n"
+" If VAL is `none', do not indent; if VAL is\n"
+" `asis', preserve existing indentation.\n"
+" --split-size=NUM split Info files at size NUM (default %d).\n"
+msgstr ""
+"Info ¤ä¥×¥ì¥¤¥ó¥Æ¥¯¥¹¥ÈÍÑ¥ª¥×¥·¥ç¥ó:\n"
+" --enable-encoding @documentencoding ¤Ë´ð¤­¡¢Info ½ÐÎϤË\n"
+" ¥¢¥¯¥»¥ó¥È¤äÆüìʸ»ú¤ò½ÐÎϤ¹¤ë¡£\n"
+" --fill-column=NUM NUM ʸ»ú¤Ç Info ¹Ô¤ò²þ¹Ô¤¹¤ë (default %d)¡£\n"
+" --footnote-style=STYLE STYLE ¤Ë´ð¤Å¤¤¤Æ Info ¤ÎµÓÃí¤ò½ÐÎϤ¹¤ë¡£\n"
+" `separate' ¤½¤Î¥Î¡¼¥ÉÃæ¤ËµÓÃí¤òÃÖ¤¯\n"
+" `end' ÄêµÁ¤µ¤ì¤¿¥Î¡¼¥É¤ÎËöÈø¤ËÃÖ¤¯ "
+"(default)\n"
+" --paragraph-indent=VAL Info ÃÊÍî¤ò VAL ¸Ä¤Î¶õÇò¤Ç»ú²¼¤² (default %"
+"d)¡£\n"
+" VAL ¤¬ `none' ¤À¤È»ú²¼¤²¤»¤º¡¢VAL ¤¬ `asis'\n"
+" ¤À¤È¡¢´û¸¤Î»ú²¼¤²¤ò¤½¤Î¤Þ¤Þ»È¤¦¡£\n"
+" --split-size=NUM Info ¥Õ¥¡¥¤¥ë¥µ¥¤¥º¤ò NUM ¤Çʬ³ä (default %d)\n"
+
+#: makeinfo/makeinfo.c:409
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+" --css-ref=URL generate reference to a CSS file.\n"
+" --internal-links=FILE produce list of internal links in FILE.\n"
+" --transliterate-file-names\n"
+" produce file names in ASCII transliteration.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:419
+#, c-format
+msgid ""
+"Options for XML and Docbook:\n"
+" --output-indent=VAL indent XML elements by VAL spaces (default %"
+"d).\n"
+" If VAL is 0, ignorable whitespace is "
+"dropped.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:426
+#, fuzzy
+msgid ""
+"Input file options:\n"
+" --commands-in-node-names allow @ commands in node names.\n"
+" -D VAR define the variable VAR, as with @set.\n"
+" -I DIR append DIR to the @include search path.\n"
+" -P DIR prepend DIR to the @include search path.\n"
+" -U VAR undefine the variable VAR, as with @clear.\n"
+msgstr ""
+"ÆþÎÏ¥Õ¥¡¥¤¥ë¥ª¥×¥·¥ç¥ó:\n"
+" --commands-in-node-names ¥Î¡¼¥É̾Ãæ¤Î @ ¥³¥Þ¥ó¥É¤òµö²Ä¤¹¤ë¡£\n"
+" -D VAR ÊÑ¿ô VAR ¤òÄêµÁ¤¹¤ë¡£@set ¤ÈƱ¤¸¡£\n"
+" -I DIR @include õº÷¥Ñ¥¹¤Ë DIR ¤òÄɲ乤롣\n"
+" -P DIR @include õº÷¥Ñ¥¹¤ÎÀèƬ¤Ë DIR ¤òÁÞÆþ¤¹¤ë¡£\n"
+" -U VAR ÊÑ¿ô VAR ¤ò̤ÄêµÁ¤Ë¤¹¤ë¡£@clear ¤ÈƱ¤¸¡£\n"
+
+#: makeinfo/makeinfo.c:435
+#, fuzzy
+msgid ""
+"Conditional processing in input:\n"
+" --ifdocbook process @ifdocbook and @docbook even if\n"
+" not generating Docbook.\n"
+" --ifhtml process @ifhtml and @html even if not generating HTML.\n"
+" --ifinfo process @ifinfo even if not generating Info.\n"
+" --ifplaintext process @ifplaintext even if not generating plain text.\n"
+" --iftex process @iftex and @tex; implies --no-split.\n"
+" --ifxml process @ifxml and @xml.\n"
+" --no-ifdocbook do not process @ifdocbook and @docbook text.\n"
+" --no-ifhtml do not process @ifhtml and @html text.\n"
+" --no-ifinfo do not process @ifinfo text.\n"
+" --no-ifplaintext do not process @ifplaintext text.\n"
+" --no-iftex do not process @iftex and @tex text.\n"
+" --no-ifxml do not process @ifxml and @xml text.\n"
+"\n"
+" Also, for the --no-ifFORMAT options, do process @ifnotFORMAT text.\n"
+msgstr ""
+"ÆþÎϤξò·ïŪ½èÍý:\n"
+" --ifhtml HTML À¸À®¤Ç¤Ê¤¯¤Æ¤â¡¢@ifhtml ¤ä @html ¤ò½èÍý¤¹¤ë¡£\n"
+" --ifinfo HTML À¸À®¤¹¤ë¤È¤­¤Ç¤â¡¢@ifinfo ¥Æ¥¯¥¹¥È¤ò½èÍý¤¹¤ë¡£\n"
+" --iftex @iftex ¤ä @tex ¥Æ¥¯¥¹¥È¤ò½èÍý¤¹¤ë -- °ÅÌÛ¤Ë --no-split¡£\n"
+" --no-ifhtml @ifhtml ¤ä @html ¥Æ¥¯¥¹¥È¤ò½èÍý¤·¤Ê¤¤¡£\n"
+" --no-ifinfo @ifinfo ¥Æ¥¯¥¹¥È¤ò½èÍý¤·¤Ê¤¤¡£\n"
+" --no-iftex @iftex ¤ä @tex ¥Æ¥¯¥¹¥È¤ò½èÍý¤·¤Ê¤¤¡£\n"
+
+#: makeinfo/makeinfo.c:454
+#, fuzzy
+msgid ""
+" The defaults for the @if... conditionals depend on the output format:\n"
+" if generating HTML, --ifhtml is on and the others are off;\n"
+" if generating Info, --ifinfo is on and the others are off;\n"
+" if generating plain text, --ifplaintext is on and the others are off;\n"
+" if generating XML, --ifxml is on and the others are off.\n"
+msgstr ""
+" Æä˻ØÄ꤬¤Ê¤±¤ì¤Ð¡¢@if... ¾ò·ï¤Ï½ÐÎÏ·Á¼°¼¡Âè¤È¤Ê¤ê¤Þ¤¹:\n"
+" HTML ¤òÀ¸À®¤¹¤ë¤Ê¤é --ifhtml ¤¬Í­¸ú¤Ç¾¤Ï̵¸ú¤Ç¤¹¡£\n"
+" Info ¤ä¥×¥ì¥¤¥ó¥Æ¥¯¥¹¥È¤òÀ¸À®¤¹¤ë¤Ê¤é --ifinfo ¤¬Í­¸ú¤Ç¾¤Ï̵¸ú¤Ç¤¹¡£\n"
+
+#: makeinfo/makeinfo.c:462
+#, fuzzy
+msgid ""
+"Examples:\n"
+" makeinfo foo.texi write Info to foo's @setfilename\n"
+" makeinfo --html foo.texi write HTML to @setfilename\n"
+" makeinfo --xml foo.texi write Texinfo XML to @setfilename\n"
+" makeinfo --docbook foo.texi write DocBook XML to @setfilename\n"
+" makeinfo --no-headers foo.texi write plain text to standard "
+"output\n"
+"\n"
+" makeinfo --html --no-headers foo.texi write html without node lines, "
+"menus\n"
+" makeinfo --number-sections foo.texi write Info with numbered sections\n"
+" makeinfo --no-split foo.texi write one Info file however big\n"
+msgstr ""
+"Îã:\n"
+" makeinfo foo.texi foo ¤Î @setfilename ¤Ë Info ¤ò½ñ¹þ¤à\n"
+" makeinfo --html foo.texi foo ¤Î @setfilename ¤Ë HTML ¤ò½ñ¹þ¤à\n"
+" makeinfo --no-headers -o - foo.texi ɸ½à½ÐÎϤ˥ץ쥤¥ó¥Æ¥¯¥¹¥È¤ò½ñ¹þ¤à\n"
+" makeinfo --number-sections foo.texi Àá¤ËÈÖ¹æ¤òÉÕ¤±¤¿ Info ¤ò½ÐÎÏ\n"
+" makeinfo --no-split foo.texi Â礭¤µ¤Ë´Ø¤ï¤é¤º°ì¤Ä¤Î Info ¤ò½ÐÎÏ\n"
+
+#: makeinfo/makeinfo.c:622
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:670 makeinfo/makeinfo.c:696 makeinfo/makeinfo.c:720
+#: makeinfo/makeinfo.c:780
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr "%s: %s °ú¿ô¤Ï `%s' ¤Ç¤Ï¤Ê¤¯¤Æ¡¢¿ôÃͤǤʤ±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£\n"
+
+#: makeinfo/makeinfo.c:683
+#, fuzzy, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "¥Þ¥¯¥í³ÈÄ¥½ÐÎÏ `%s' ¤ò³«¤±¤Þ¤»¤ó"
+
+#: makeinfo/makeinfo.c:688
+#, fuzzy, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "¥Þ¥¯¥í³ÈÄ¥½ÐÎÏ `%s' ¤ò³«¤±¤Þ¤»¤ó"
+
+#: makeinfo/makeinfo.c:733
+#, fuzzy, c-format
+msgid "%s: could not open internal links output `%s'"
+msgstr "¥Þ¥¯¥í³ÈÄ¥½ÐÎÏ `%s' ¤ò³«¤±¤Þ¤»¤ó"
+
+#: makeinfo/makeinfo.c:738
+#, fuzzy, c-format
+msgid "%s: ignoring second internal links output `%s'.\n"
+msgstr "¥Þ¥¯¥í³ÈÄ¥½ÐÎÏ `%s' ¤ò³«¤±¤Þ¤»¤ó"
+
+#: makeinfo/makeinfo.c:751
+#, c-format
+msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
+msgstr ""
+"%s: --paragraph-indent °ú¿ô¤Ï `%s' ¤Ç¤Ï¤Ê¤¯¡¢¿ôÃÍ/`none'/`asis' ¤Ç¤Ê¤±¤ì¤Ð\n"
+" ¤Ê¤ê¤Þ¤»¤ó¡£\n"
+
+#: makeinfo/makeinfo.c:769
+#, c-format
+msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
+msgstr ""
+"%s: --footnote-style °ú¿ô¤Ï `%s' ¤Ç¤Ï¤Ê¤¯¡¢`separate' Ëô¤Ï `end' ¤Ç¤Ê¤±¤ì¤Ð\n"
+" ¤Ê¤ê¤Þ¤»¤ó¡£\n"
+
+#: makeinfo/makeinfo.c:844
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: ¥Õ¥¡¥¤¥ë°ú¿ô¤ò˺¤ì¤Æ¤¤¤Þ¤¹¤è\n"
+
+#: makeinfo/makeinfo.c:1041 makeinfo/makeinfo.c:4166
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1044
+#, c-format
+msgid "Expected `%s'"
+msgstr "¤³¤³¤Ç¤Ï `%s' ¤¬Í׵ᤵ¤ì¤Þ¤¹"
+
+#: makeinfo/makeinfo.c:1521
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "¥Ç¥£¥ì¥¯¥È¥ê `%s' ¤òºîÀ®¤Ç¤­¤Þ¤»¤ó: %s"
+
+#: makeinfo/makeinfo.c:1567
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "`%2$s' ¤Ë `%1$s' ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#: makeinfo/makeinfo.c:1647
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr "%s: Info ¤Î½ÐÎϤò¹Ô¤Ê¤¦¤Î¤Ç¡¢¥Þ¥¯¥í³ÈÄ¥¤òɸ½à½ÐÎϤ˽ÐÎϤ·¤Þ¤»¤ó¡£\n"
+
+#: makeinfo/makeinfo.c:1677
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "`%3$s' ¤«¤é %1$s ¥Õ¥¡¥¤¥ë `%2$s' ¤òºîÀ®¤·¤Þ¤¹¡£\n"
+
+#: makeinfo/makeinfo.c:1744
+#, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: ¥¨¥é¡¼¤Ë¤è¤ê¡¢¥Þ¥¯¥í½ÐÎÏ¥Õ¥¡¥¤¥ë `%s' ¤òºï½ü¤·¤Þ¤¹¡£\n"
+" -- »Ä¤·¤¿¤¤¾ì¹ç¤Ë¤Ï `--force' ¥ª¥×¥·¥ç¥ó¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£\n"
+
+#: makeinfo/makeinfo.c:1799
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: ¥¨¥é¡¼¤Ë¤è¤ê¡¢½ÐÎÏ¥Õ¥¡¥¤¥ë `%s' ¤òºï½ü¤·¤Þ¤¹¡£\n"
+" -- »Ä¤·¤¿¤¤¾ì¹ç¤Ë¤Ï `--force' ¥ª¥×¥·¥ç¥ó¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£\n"
+
+#: makeinfo/makeinfo.c:1818
+#, fuzzy, c-format
+msgid ""
+"%s: Removing internal links output file `%s' due to errors; use --force to "
+"preserve.\n"
+msgstr ""
+"%s: ¥¨¥é¡¼¤Ë¤è¤ê¡¢½ÐÎÏ¥Õ¥¡¥¤¥ë `%s' ¤òºï½ü¤·¤Þ¤¹¡£\n"
+" -- »Ä¤·¤¿¤¤¾ì¹ç¤Ë¤Ï `--force' ¥ª¥×¥·¥ç¥ó¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£\n"
+
+#: makeinfo/makeinfo.c:2113
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "ÃΤé¤Ê¤¤¥³¥Þ¥ó¥É `%s'"
+
+#: makeinfo/makeinfo.c:2135
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr "@%s ¤Ø¤Î°ú¿ô¤È¤·¤Æ¥³¥Þ¥ó¥É¤òÍ¿¤¨¤ë¤Ë¤Ï¡¢¥Ö¥ì¡¼¥¹¤ò»È¤¤¤Þ¤·¤ç¤¦"
+
+#: makeinfo/makeinfo.c:2394
+#, fuzzy, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s ¤Ë¤Ï `{...}' ¤¬É¬ÍפǤ¹"
+
+#: makeinfo/makeinfo.c:2407
+msgid "Unmatched }"
+msgstr "Âбþ¤Î¤Ê¤¤ }"
+
+#: makeinfo/makeinfo.c:2455
+msgid "NO_NAME!"
+msgstr "̾Á°¤¬Ìµ¤¤¡ª"
+
+#: makeinfo/makeinfo.c:2476
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "ÊĤ¸¤ë¥Ö¥ì¡¼¥¹¤Î¤Ê¤¤ %c%s"
+
+#: makeinfo/makeinfo.c:3482
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "@image ¥Õ¥¡¥¤¥ë `%s' (HTML ÍÑ) ¤¬Æɤá¤Þ¤»¤ó: %s"
+
+#: makeinfo/makeinfo.c:3488
+#, fuzzy, c-format
+msgid "No such file `%s'"
+msgstr "`%2$s' ¤Ë `%1$s' ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#: makeinfo/makeinfo.c:3624
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "@image ¥Õ¥¡¥¤¥ë `%s' (text ÍÑ) ¤¬Æɤá¤Þ¤»¤ó: %s"
+
+#: makeinfo/makeinfo.c:3633
+msgid "@image missing filename argument"
+msgstr "@image ¤Ë¥Õ¥¡¥¤¥ë̾¤¬Í¿¤¨¤é¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#: makeinfo/makeinfo.c:3851
+#, c-format
+msgid "undefined flag: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3852
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{`%s' ¤ÎÃͤ¬¤Ê¤¤}"
+
+#: makeinfo/makeinfo.c:3904
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s ¤Ë¤Ï̾Á°¤¬É¬ÍפǤ¹"
+
+#: makeinfo/makeinfo.c:4010
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "@end %s ¤ÎÂбþ¤ÎÁ°¤Ë¥Õ¥¡¥¤¥ë¤Î½ª¤ê¤Ë½Ð¤¯¤ï¤·¤Þ¤·¤¿"
+
+#: makeinfo/makeinfo.c:4258
+#, c-format
+msgid "`%.40s...' is too long for expansion; not expanded"
+msgstr ""
+
+#: makeinfo/multi.c:116
+msgid "Missing } in @multitable template"
+msgstr "@multitable ¥Æ¥ó¥×¥ì¡¼¥È¤Ë } ¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: makeinfo/multi.c:260
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "@multitable ¤Î¸å¤í¤Î¥Æ¥¯¥¹¥È `%s' ¤ò̵»ë¤·¤Þ¤¹"
+
+#: makeinfo/multi.c:400
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "¥Þ¥ë¥Á¥Æ¡¼¥Ö¥ë¹àÌÜÆâ¤Î¥«¥é¥à¿ô¤¬Â¿¤¹¤®¤Þ¤¹(ºÇÂç %d)"
+
+#: makeinfo/multi.c:563
+#, fuzzy, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "¥Þ¥ë¥Á¥Æ¡¼¥Ö¥ëÆâ¤Ç¤Ï¡¢Âè %d ¹Ô¤òÁªÂò¤Ç¤­¤Þ¤»¤ó"
+
+#: makeinfo/multi.c:592
+msgid "ignoring @tab outside of multitable"
+msgstr "¥Þ¥ë¥Á¥Æ¡¼¥Ö¥ë¤Î³°Â¦¤Î @tab ¤ò̵»ë¤·¤Þ¤¹"
+
+#: makeinfo/multi.c:640
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** ¥Þ¥ë¥Á¥«¥é¥à¤ÎºÇ¸å¤ÎÎ󤫤é½ÐÎÏ\n"
+
+#: makeinfo/multi.c:643
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* Âè %d ¥«¥é¥à: ½ÐÎÏ = %s\n"
+
+#: makeinfo/node.c:279
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "¥Î¡¼¥É `%s' Á°(%d ¹ÔÌÜ)¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#: makeinfo/node.c:647
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "¥Î¡¼¥É %s ¤òÀ°·ÁÃæ...\n"
+
+#: makeinfo/node.c:714
+#, fuzzy, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr "¥Î¡¼¥É `%s' ¤Ë¤Ï¥»¥¯¥·¥ç¥óÍÑ¥³¥Þ¥ó¥É¤¬É¬ÍפǤ¹(Îã: %c%s)"
+
+#: makeinfo/node.c:878
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "`%c%s' ¥³¥Þ¥ó¥É¤Ë»ØÄꤵ¤ì¤¿¥Î¡¼¥É̾¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: makeinfo/node.c:919 makeinfo/node.c:1163
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr "¥¢¥ó¥«¡¼ `%s' ¤È¥Î¡¼¥É `%s' ¤¬Æ±¤¸¥Õ¥¡¥¤¥ë¤ò¥Þ¥Ã¥×¤·¤Æ¤¤¤Þ¤¹"
+
+#: makeinfo/node.c:922
+msgid "This @anchor command ignored; references to it will not work"
+msgstr "¤³¤Î @anchor ¥³¥Þ¥ó¥É¤Ï̵»ë¤µ¤ì¤Þ¤¹ -- ¤½¤³¤Ø¤Î»²¾È¤ÏÆ°ºî¤·¤Þ¤»¤ó"
+
+#: makeinfo/node.c:924 makeinfo/node.c:1166
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr "¤³¤Î¥¢¥ó¥«¡¼Ì¾¤òÊѹ¹¤¹¤ë¤« `--no-split' ¥ª¥×¥·¥ç¥ó¤ò»È¤¤¤Þ¤·¤ç¤¦"
+
+#: makeinfo/node.c:954
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr "split-HTML ¥Õ¥¡¥¤¥ë `%s' ¤Î½ª¤ê¤Ë¡¢¤¢¤ë¤Ï¤º¤Î¤Ê¤¤Ê¸»úÎ󤬤¢¤ê¤Þ¤¹"
+
+#: makeinfo/node.c:1160
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr "¥¢¥ó¥«¡¼ `%s' ¤È `%s' ¤¬Æ±¤¸¥Õ¥¡¥¤¥ë̾¤Ë¥Þ¥Ã¥×¤·¤Æ¤¤¤Þ¤¹"
+
+#: makeinfo/node.c:1165
+msgid "@anchor command ignored; references to it will not work"
+msgstr "@anchor ¥³¥Þ¥ó¥É¤Ï̵»ë¤µ¤ì¤Þ¤¹ -- ¤½¤³¤Ø¤Î»²¾È¤ÏÆ°ºî¤·¤Þ¤»¤ó"
+
+#: makeinfo/node.c:1362
+#, fuzzy, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr "%s ¤Ï¸ºß¤·¤Ê¤¤¥Î¡¼¥É `%s' ¤ò»²¾È¤·¤Æ¤¤¤Þ¤¹"
+
+#: makeinfo/node.c:1462
+#, fuzzy, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr "¥Î¡¼¥É `%s' ¤Î¼¡¤Î¥Õ¥£¡¼¥ë¥É¤¬¥Î¡¼¥É¤ò»Ø¤·¤Æ¤¤¤Þ¤»¤ó -- "
+
+#: makeinfo/node.c:1465
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "¤³¤Î¥Î¡¼¥É (%s) ¤Ï¤­¤Á¤ó¤È Á° ¤ò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó"
+
+#: makeinfo/node.c:1520
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "¥Î¡¼¥É `%s' ¤ÎÁ°¤Î¥Õ¥£¡¼¥ë¥É¤¬¥Î¡¼¥É¤ò»Ø¤·¤Æ¤¤¤Þ¤»¤ó -- "
+
+#: makeinfo/node.c:1524
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "¤³¤Î¥Î¡¼¥É (%s) ¤Ï¤­¤Á¤ó¤È ¼¡ ¤ò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó"
+
+#: makeinfo/node.c:1536
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1605
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr ""
+"¥Î¡¼¥É `%s' ¤Ë¤Ï ¾å°Ì¹àÌܤ¬¤¢¤ë¤Î¤Ë¡¢`%s' ¤Ø¤Î¥á¥Ë¥å¡¼¥¢¥¤¥Æ¥à¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#: makeinfo/node.c:1637
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "»²¾È¤µ¤ì¤Æ¤¤¤Ê¤¤¥Î¡¼¥É `%s'"
+
+#: makeinfo/node.c:1727
+#, c-format
+msgid "Removing %s\n"
+msgstr ""
+
+#: makeinfo/node.c:1731
+#, fuzzy, c-format
+msgid "Can't remove file `%s': %s"
+msgstr "¥Ç¥£¥ì¥¯¥È¥ê `%s' ¤òºîÀ®¤Ç¤­¤Þ¤»¤ó: %s"
+
+#: makeinfo/sectioning.c:122
+#, fuzzy, c-format
+msgid "Appendix %c"
+msgstr "ÉÕÏ¿ %c "
+
+#: makeinfo/sectioning.c:467
+#, fuzzy, c-format
+msgid "Internal error (search_sectioning) `%s'!"
+msgstr "ÆâÉô¥¨¥é¡¼ (Àáõº÷Ãæ) \"%s\"!"
+
+#: makeinfo/sectioning.c:563
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "ÆâÉô¥¨¥é¡¼ (Àáõº÷Ãæ) \"%s\"!"
+
+#: makeinfo/sectioning.c:624
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "%c%s ¤ÏÇѻߤ·¤Þ¤·¤¿¡£ -- Âå¤ï¤ê¤Ë %c%s ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤"
+
+#: makeinfo/sectioning.c:640
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "%ctop ¤Î¥Î¡¼¥É¤Ï¡¢¥»¥¯¥·¥ç¥ó¤È¤·¤Æ´û¤Ë¸ºß¤·¤Þ¤¹"
+
+#: makeinfo/sectioning.c:648
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "¤³¤³¤Ï %ctop ¥Î¡¼¥É¤Ç¤¹"
+
+#: makeinfo/sectioning.c:664
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "%ctop ¤¬ %cnode ¤ÎÁ°¤Ë»È¤ï¤ì¤Þ¤·¤¿¡¢%s ¤Ë·è¤á¤¦¤Á¤·¤Þ¤¹"
+
+#: makeinfo/xml.c:1669
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "@image ¥Õ¥¡¥¤¥ë `%s' ¤¬Æɤá¤Þ¤»¤ó: %s"
+
+#: makeinfo/xml.c:2014
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+
+#: makeinfo/xml.c:2150
+msgid "of"
+msgstr "of"
+
+#: makeinfo/xml.c:2155
+msgid "on"
+msgstr "on"
+
+#: makeinfo/xref.c:127
+msgid "First argument to cross-reference may not be empty"
+msgstr "Áê¸ß»²¾È¤Ø¤ÎÂè°ì°ú¿ô¤¬¶õ¤Ç¤¢¤Ã¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó"
+
+#: makeinfo/xref.c:252
+#, c-format
+msgid "Empty file name for HTML cross reference in `%s'"
+msgstr ""
+
+#: makeinfo/xref.c:387
+msgid "End of file reached while looking for `.' or `,'"
+msgstr ""
+
+#: makeinfo/xref.c:390
+#, fuzzy, c-format
+msgid "`.' or `,' must follow @%s, not `%c'"
+msgstr "`.' ¤ä ',' ¤Ï %c ¤Ç¤Ï¤Ê¤¯¡¢Áê¸ß»²¾È¤Ë³¤±¤é¤ì¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#: makeinfo/xref.c:392
+#, fuzzy
+msgid "for cross-references in parentheses, use @pxref"
+msgstr "¤³¤Î¥Î¡¼¥É¤ËÁê¸ß»²¾È¤Ï¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: makeinfo/xref.c:435
+msgid "First argument to @inforef may not be empty"
+msgstr "@inforef ¤Ø¤ÎÂè°ì°ú¿ô¤Ï¶õ¤Ç¤¢¤Ã¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó"
+
+#: util/texindex.c:223
+msgid "display this help and exit"
+msgstr "»È¤¤Êý¤òɽ¼¨¤·¤Æ½ªÎ»¤·¤Þ¤¹"
+
+#: util/texindex.c:225
+msgid "send output to FILE"
+msgstr "½ÐÎϤò FILE ¤ËÁ÷¤ê¤Þ¤¹"
+
+#: util/texindex.c:227
+msgid "display version information and exit"
+msgstr "¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨¤·¤Æ½ªÎ»¤·¤Þ¤¹"
+
+#: util/texindex.c:237
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "»È¤¤Êý: %s [¥ª¥×¥·¥ç¥ó]... ¥Õ¥¡¥¤¥ë...\n"
+
+#: util/texindex.c:238
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr "TeX ¤Î°Ù¤Î¥½¡¼¥ÈºÑ¥¤¥ó¥Ç¥Ã¥¯¥¹¥Õ¥¡¥¤¥ë¤òÀ¸À®¤·¤Þ¤¹\n"
+
+#: util/texindex.c:241
+#, c-format
+msgid "Usually FILE... is specified as `foo.%c%c' for a document `foo.texi'.\n"
+msgstr ""
+"`foo.texi' ʸ½ñ¤ËÂФ·¤Æ¤Ï¡¢Ä̾ï¤Ï¥Õ¥¡¥¤¥ë¤È¤·¤Æ `foo.%c%c' ¤ò»ØÄꤷ¤Þ¤¹¡£\n"
+
+#: util/texindex.c:243
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"¥ª¥×¥·¥ç¥ó:\n"
+
+#: util/texindex.c:743
+#, c-format
+msgid "failure reopening %s"
+msgstr "%s ¤ÎºÆ¥ª¡¼¥×¥ó¤Ë¼ºÇÔ"
+
+#: util/texindex.c:758 util/texindex.c:786
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: texinfo ¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹¥Õ¥¡¥¤¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#: util/texindex.c:993
+#, c-format
+msgid "No page number in %s"
+msgstr "%s ¤Ë¥Ú¡¼¥¸Èֹ椬¤¢¤ê¤Þ¤»¤ó"
+
+#: util/texindex.c:1066
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr "%s ¹àÌܤËÆó¤ÄÌܤιàÌÜ̾¤¬Â³¤¤¤Æ¤¤¤Þ¤¹"
+
+#, fuzzy
+#~ msgid ""
+#~ "\\%-10[search] Search forward for a specified string\n"
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr " ¸«¤Ä¤«¤Ã¤¿¤â¤Î¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë¥Î¡¼¥É¤òÁªÂò¤¹¤ë¡£\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "\\%-10[goto-node] Move to node specified by name.\n"
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ msgstr ""
+#~ " (¥Õ¥¡¥¤¥ë̾)¥Î¡¼¥É̾ ¤ÎÍͤˡ¢¥Õ¥¡¥¤¥ë̾¤ò´Þ¤á¤ë¤³¤È¤¬¤Ç¤­¤Þ"
+#~ "¤¹¡£\n"
+
+#, fuzzy
+#~ msgid "\\%-10[next-node] Move to the next node of current section.\n"
+#~ msgstr " %-10s ¤³¤Î¥Î¡¼¥É¤Î `¼¡' ¤Î¥Î¡¼¥É¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "\\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+#~ "node] (DIR)'.\n"
+#~ msgstr " %-10s `¥Ç¥£¥ì¥¯¥È¥ê' ¥Î¡¼¥É¤Ø°ÜÆ°¡£`g (DIR)' ¤ÈƱ¤¸¡£\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "\\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] "
+#~ "Top'.\n"
+#~ msgstr " %-10s Top ¥Î¡¼¥É¤Ø°ÜÆ°¡£`g Top' ¤ÈƱ¤¸¡£\n"
+
+#, fuzzy
+#~ msgid "\\%-10[scroll-forward-page-only] Scroll forward within this node.\n"
+#~ msgstr " %-10s 1 ¹ÔʬÁ°Êý¤Ø¤¹¤¹¤á¤ë¡£\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "\\%-10[scroll-backward-page-only] Scroll backward within this node.\n"
+#~ msgstr " %-10s 1 ¹Ôʬ¸åÊý¤ØÌ᤹¡£\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "\\%-10[search-backward] Search backward for a specified string\n"
+#~ " and select the node in which the previous occurrence is "
+#~ "found.\n"
+#~ msgstr " ¸«¤Ä¤«¤Ã¤¿¤â¤Î¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë¥Î¡¼¥É¤òÁªÂò¤¹¤ë¡£\n"
+
+#~ msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+#~ msgstr ""
+#~ "--- ½ªÎ»¤¹¤ë¤Ë¤Ï `\\[history-node]' ¤« `\\[kill-node]' ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤ "
+#~ "---\n"
+
+#, fuzzy
+#~ msgid "\\%-10[move-to-prev-xref] Skip to previous hypertext link [*].\n"
+#~ msgstr " %-10s ¤³¤Î¥Î¡¼¥ÉÆâ¤Î¼¡¤Î¥Ï¥¤¥Ñ¡¼¥ê¥ó¥¯¤Ø¥¹¥­¥Ã¥×¤¹¤ë¡£\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]... [MENU-ITEM...]\n"
+#~ "\n"
+#~ "Read documentation in Info format.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --apropos=STRING look up STRING in all indices of all "
+#~ "manuals.\n"
+#~ " -d, --directory=DIR add DIR to INFOPATH.\n"
+#~ " --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+#~ " -f, --file=FILENAME specify Info file to visit.\n"
+#~ " -h, --help display this help and exit.\n"
+#~ " --index-search=STRING go to node pointed by index entry STRING.\n"
+#~ " -n, --node=NODENAME specify nodes in first visited Info file.\n"
+#~ " -o, --output=FILENAME output selected nodes to FILENAME.\n"
+#~ " -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+#~ " --no-raw-escapes output escapes as literal text.\n"
+#~ " --restore=FILENAME read initial keystrokes from FILENAME.\n"
+#~ " -O, --show-options, --usage go to command-line options node.\n"
+#~ "%s --subnodes recursively output menu items.\n"
+#~ " -w, --where, --location print physical location of Info file.\n"
+#~ " --vi-keys use vi-like and less-like key bindings.\n"
+#~ " --version display version information and exit.\n"
+#~ "\n"
+#~ "The first non-option argument, if present, is the menu entry to start "
+#~ "from;\n"
+#~ "it is searched for in all `dir' files along INFOPATH.\n"
+#~ "If it is not present, info merges all `dir' files and shows the result.\n"
+#~ "Any remaining arguments are treated as the names of menu\n"
+#~ "items relative to the initial node visited.\n"
+#~ "\n"
+#~ "Examples:\n"
+#~ " info show top-level dir menu\n"
+#~ " info emacs start at emacs node from top-level dir\n"
+#~ " info emacs buffers start at buffers node within emacs manual\n"
+#~ " info --show-options emacs start at node with emacs' command line "
+#~ "options\n"
+#~ " info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+#~ " info -f ./foo.info show file ./foo.info, not searching dir\n"
+#~ msgstr ""
+#~ "»È¤¤Êý: %s [¥ª¥×¥·¥ç¥ó]... [¥á¥Ë¥å¡¼¹àÌÜ...]\n"
+#~ "\n"
+#~ "Info ¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥É¥­¥å¥á¥ó¥È¤òÆɤࡣ\n"
+#~ "\n"
+#~ "¥ª¥×¥·¥ç¥ó:\n"
+#~ " --apropos=SUBJECT Á´¥Þ¥Ë¥å¥¢¥ë¤Î¹àÌܤ«¤é¼çÂê¤ò¸«¤Ä¤±¤ë\n"
+#~ " --directory=DIR DIR ¤ò INFOPATH ¤ËÄɲ乤ë\n"
+#~ " --dribble=FILENAME FILENAME ¤Ë¥æ¡¼¥¶¤Î¥­¡¼¥¹¥È¥í¡¼¥¯¤ò³Ð¤¨¤Æ¤ª¤¯\n"
+#~ " --file=FILENAME ˬÌäÀè¥Õ¥¡¥¤¥ë¤ò FIENAME ¤È»ØÄꤹ¤ë\n"
+#~ " --help ¤³¤Î¥Ø¥ë¥×¤òɽ¼¨¤·¤Æ½ªÎ»¤¹¤ë\n"
+#~ " --index-search=STRING ¹àÌÜ¥¨¥ó¥È¥ê STRING ¤Ç»Ø¼¨¤µ¤ì¤¿¥Î¡¼¥É¤Ë¹Ô¤¯\n"
+#~ " --node=NODENAME ºÇ½é¤Ëˬ¤ì¤ë Info ¥Õ¥¡¥¤¥ë¤Î¥Î¡¼¥É»ØÄꤹ¤ë\n"
+#~ " --output=FILENAME ÁªÂò¤µ¤ì¤¿¥Î¡¼¥É¤ò FILENAME ¤Ë½ÐÎϤ¹¤ë\n"
+#~ " --restore=FILENAME ºÇ½é¤Î¥­¡¼¥¹¥È¥í¡¼¥¯¤ò FILENAME ¤«¤éÆɹþ¤à\n"
+#~ " --show-options, --usage ¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¥Î¡¼¥É¤Ë¹Ô¤¯\n"
+#~ " --subnodes ½ÐÎÏ¥á¥Ë¥å¡¼¥¢¥¤¥Æ¥à¤òºÆµ¢Åª¤Ë½ÐÎϤ¹¤ë\n"
+#~ "%s --subnodes ¥á¥Ë¥å¡¼¹àÌܤòºÆµ¢Åª¤Ë½ÐÎϤ¹¤ë\n"
+#~ " --vi-keys vi ¤ä less ¤Î¤è¤¦¤Ê¥­¡¼¥Ð¥¤¥ó¥É¤ò»È¤¦\n"
+#~ " --version ¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨¤·¤Æ½ªÎ»¤¹¤ë\n"
+#~ "\n"
+#~ "ºÇ½é¤Ë¥ª¥×¥·¥ç¥ó°Ê³°¤Î°ú¿ô¤¬¤¢¤Ã¤¿¾ì¹ç¡¢¤½¤ì¤Ïµ¯ÅÀ¥á¥Ë¥å¡¼¥¨¥ó¥È¥ê¤È¤Ê¤ê¤Þ"
+#~ "¤¹\n"
+#~ " -- INFOPATH ¤Ë±è¤Ã¤¿Á´¤Æ¤Î `dir' ¥Õ¥¡¥¤¥ë¤«¤é¤¯¤Þ¤Ê¤¯Ãµ¤·¤Þ¤¹\n"
+#~ "¤³¤ì¤¬»ØÄꤵ¤ì¤Ê¤¤¾ì¹ç¡¢¤¹¤Ù¤Æ¤Î `dir' ¥Õ¥¡¥¤¥ë¤ò·Ò¤®¹ç¤ï¤»¤Æɽ¼¨¤·¤Þ"
+#~ "¤¹¡£\n"
+#~ "»Ä¤ê¤Î°ú¿ô¤ÏºÇ½é¤ËˬÌ䤵¤ì¤ë¥Î¡¼¥É¤Ë´ØÏ¢¤¹¤ë¥á¥Ë¥å¡¼¥¢¥¤¥Æ¥à¤Î̾Á°¤È¤·¤Æ\n"
+#~ "°·¤ï¤ì¤Þ¤¹¡£\n"
+#~ "\n"
+#~ "Îã:\n"
+#~ " info ºÇ¾å°Ì¤Î dir ¥á¥Ë¥å¡¼¤òɽ¼¨\n"
+#~ " info emacs ºÇ¾å°Ì dir ¤Î emacs ¥Î¡¼¥É¤«¤é³«»Ï\n"
+#~ " info emacs buffers emacs ¥Þ¥Ë¥å¥¢¥ëÆâ¤Î buffers ¥Î¡¼¥É¤«¤é³«»Ï\n"
+#~ " info --show-options emacs emacs ¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¥Î¡¼¥É¤«¤é³«"
+#~ "»Ï\n"
+#~ " info -f ./foo.info ./foo.info ¤òɽ¼¨¤·¡¢dir ¤Ïõº÷¤·¤Ê¤¤\n"
+#~ "\n"
+#~ "Email ¤Ë¤è¤ë¥Ð¥°¥ì¥Ý¡¼¥È¤Ï bug-texinfo@gnu.org¡¢\n"
+#~ "°ìÈÌŪ¤Ê¼ÁÌä¤äµÄÏÀ¤Ï help-texinfo@gnu.org ¤Þ¤Ç¡£\n"
+
+#~ msgid ""
+#~ " Picking a menu item causes another node to be selected.\n"
+#~ msgstr ""
+#~ " ¥á¥Ë¥å¡¼¥¢¥¤¥Æ¥à¤ÎÁªÂò¤Ç¡¢Â¾¤Î¥Î¡¼¥É¤¬ÁªÂò¤µ¤ì¤ë»ö¤Ë¤Ê¤ë¡£\n"
+
+#~ msgid ""
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ msgstr ""
+#~ " (¥Õ¥¡¥¤¥ë̾)¥Î¡¼¥É̾ ¤ÎÍͤˡ¢¥Õ¥¡¥¤¥ë̾¤ò´Þ¤á¤ë¤³¤È¤¬¤Ç¤­¤Þ"
+#~ "¤¹¡£\n"
+
+#, fuzzy
+#~ msgid " %-10s Search backward for a specified string\n"
+#~ msgstr ""
+#~ "\\\\ %-10s ¸½ºß¤Î Info ¥Õ¥¡¥¤¥ë¤ò¡¢»ØÄꤵ¤ì¤¿Ê¸»úÎó¤Ç¸åÊý¸¡º÷¤·¡¢\n"
+
+#~ msgid ""
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr " ¸«¤Ä¤«¤Ã¤¿¤â¤Î¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë¥Î¡¼¥É¤òÁªÂò¤¹¤ë¡£\n"
+
+#~ msgid "Following Next node..."
+#~ msgstr "¼¡ ¤Î¥Î¡¼¥É¤òé¤Ã¤Æ¤¤¤Þ¤¹..."
+
+#~ msgid "Selecting first menu item..."
+#~ msgstr "ºÇ½é¤Î¥á¥Ë¥å¡¼¹àÌܤòÁªÂò..."
+
+#~ msgid "Selecting Next node..."
+#~ msgstr "¼¡ ¤Î¥Î¡¼¥É¤òÁªÂò..."
+
+#~ msgid "Moving Up %d time(s), then Next."
+#~ msgstr "%d ²ó ¾å ¤Ë°ÜÆ°¤·¡¢¤½¤³¤Ç ¼¡ ¤Ø¡£"
+
+#~ msgid "Moving Prev in this window."
+#~ msgstr "¤³¤Î¥¦¥£¥ó¥É¥¦¤Î Á° ¤Ë°ÜÆ°¤·¤Þ¤¹¡£"
+
+#~ msgid "Moving Up in this window."
+#~ msgstr "¤³¤Î¥¦¥£¥ó¥É¥¦¤Î ¾å ¤Ë°ÜÆ°¤·¤Þ¤¹¡£"
+
+#~ msgid "Moving to `Prev's last menu item."
+#~ msgstr "`Á°' ¤ÎºÇ¸å¤Î¥á¥Ë¥å¡¼¹àÌܤ˰ÜÆ°¤·¤Þ¤¹¡£"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "Function"
+#~ msgstr "µ¡Ç½"
+
+#~ msgid "Macro"
+#~ msgstr "¥Þ¥¯¥í"
+
+#~ msgid "Special Form"
+#~ msgstr "Æü췿"
+
+#~ msgid "Variable"
+#~ msgstr "ÊÑ¿ô"
+
+#~ msgid "User Option"
+#~ msgstr "¥æ¡¼¥¶¥ª¥×¥·¥ç¥ó"
+
+#~ msgid "Instance Variable"
+#~ msgstr "¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô"
+
+#~ msgid "Method"
+#~ msgstr "¥á¥½¥Ã¥É"
+
+#~ msgid "Untitled"
+#~ msgstr "̵Âê"
+
+#~ msgid "This is %s, produced by makeinfo version %s from %s.\n"
+#~ msgstr ""
+#~ "¤³¤ì¤Ï %1$s¡¢%3$s ¤è¤ê makeinfo ¥Ð¡¼¥¸¥ç¥ó %2$s ¤Ë¤è¤Ã¤ÆºîÀ®¤µ¤ì¤Þ¤·¤¿¡£\n"
+
+#~ msgid "Next:"
+#~ msgstr "¼¡:"
+
+#~ msgid "Previous:"
+#~ msgstr "Á°:"
+
+#~ msgid "Up:"
+#~ msgstr "¾å:"
+
+#~ msgid "Menu"
+#~ msgstr "¥á¥Ë¥å¡¼"
+
+#~ msgid "Cross"
+#~ msgstr "Áê¸ß"
+
+#~ msgid "Prev"
+#~ msgstr "Á°"
+
+#~ msgid "Up"
+#~ msgstr "¾å"
+
+#~ msgid "see "
+#~ msgstr "see "
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+#~ "\n"
+#~ "Add or remove entries in INFO-FILE from the Info directory DIR-FILE.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --debug report what is being done.\n"
+#~ " --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+#~ " don't insert any new entries.\n"
+#~ " --dir-file=NAME specify file name of Info directory file.\n"
+#~ " This is equivalent to using the DIR-FILE argument.\n"
+#~ " --entry=TEXT insert TEXT as an Info directory entry.\n"
+#~ " TEXT should have the form of an Info menu item line\n"
+#~ " plus zero or more extra lines starting with "
+#~ "whitespace.\n"
+#~ " If you specify more than one entry, they are all "
+#~ "added.\n"
+#~ " If you don't specify any entries, they are "
+#~ "determined\n"
+#~ " from information in the Info file itself.\n"
+#~ " --help display this help and exit.\n"
+#~ " --info-file=FILE specify Info file to install in the directory.\n"
+#~ " This is equivalent to using the INFO-FILE argument.\n"
+#~ " --info-dir=DIR same as --dir-file=DIR/dir.\n"
+#~ " --item=TEXT same as --entry TEXT.\n"
+#~ " An Info directory entry is actually a menu item.\n"
+#~ " --quiet suppress warnings.\n"
+#~ " --remove same as --delete.\n"
+#~ " --remove-exactly only remove if the info file name matches exactly;\n"
+#~ " .info and/or .gz suffixes are not ignored.\n"
+#~ " --section=SEC put this file's entries in section SEC of the "
+#~ "directory.\n"
+#~ " If you specify more than one section, all the "
+#~ "entries\n"
+#~ " are added in each of the sections.\n"
+#~ " If you don't specify any sections, they are "
+#~ "determined\n"
+#~ " from information in the Info file itself.\n"
+#~ " --section-regex=R if an entry is added to a section that does not "
+#~ "exist,\n"
+#~ " look for a section matching basic regular expression "
+#~ "R\n"
+#~ " (and ignoring case) before starting a new section.\n"
+#~ " --test suppress updating of DIR-FILE.\n"
+#~ " --silent suppress warnings.\n"
+#~ " --version display version information and exit.\n"
+#~ msgstr ""
+#~ "»È¤¤Êý: %s [¥ª¥×¥·¥ç¥ó]... [INFO¥Õ¥¡¥¤¥ë [DIR¥Õ¥¡¥¤¥ë]]\n"
+#~ "\n"
+#~ "Info ¥Ç¥£¥ì¥¯¥È¥ê¥Õ¥¡¥¤¥ë `DIR¥Õ¥¡¥¤¥ë' Æâ¤Î `INFO¥Õ¥¡¥¤¥ë' ¤«¤é\n"
+#~ "dir ¥¨¥ó¥È¥ê¤ò¥¤¥ó¥¹¥È¡¼¥ë¤Þ¤¿¤Ïºï½ü¤·¤Þ¤¹¡£\n"
+#~ "\n"
+#~ "¥ª¥×¥·¥ç¥ó:\n"
+#~ " --delete ¸½Â¸¤¹¤ë INFO¥Õ¥¡¥¤¥ë ¤Î¹àÌܤò DIR¥Õ¥¡¥¤¥ë ¤«¤éºï½ü¤¹"
+#~ "¤ë\n"
+#~ " -- ¿·¤¿¤Ê¹àÌܤòÁÞÆþ¤·¤Ê¤¤\n"
+#~ " --dir-file=NAME Info ¥Ç¥£¥ì¥¯¥È¥ê¥Õ¥¡¥¤¥ë¤Î¥Õ¥¡¥¤¥ë̾¤ò»ØÄꤹ¤ë\n"
+#~ " DIR-FILE °ú¿ô¤òÍøÍѤ¹¤ë¤Î¤ÈƱ¤¸\n"
+#~ " --entry=TEXT Info ¥Ç¥£¥ì¥¯¥È¥ê¹àÌܤȤ·¤Æ TEXT ¤òÁÞÆþ¤¹¤ë\n"
+#~ " TEXT ¤Ï¡¢Info ¤Î¥á¥Ë¥å¡¼¥¢¥¤¥Æ¥à¤Î¹Ô¤Î·Á¼°¤Ç¤Ê¤±¤ì¤Ð"
+#~ "¤Ê¤é¤º\n"
+#~ " ¤³¤ì¤Ë¡¢¶õÇò¤Ç»Ï¤Þ¤ë¤¤¤¯¤Ä¤«¤Î¹Ô¤òÄɲäǤ­¤ë\n"
+#~ " Ê£¿ô¹Ô¤Î¹àÌܤò»ØÄꤷ¤¿¾ì¹ç¡¢Á´¤Æ¤¬²Ã¤¨¤é¤ì¤ë\n"
+#~ " ¹àÌܤò»ØÄꤷ¤Ê¤±¤ì¤Ð¡¢Info ¥Õ¥¡¥¤¥ë¼«¿È¤Î¾ðÊó¤Ë¤è¤Ã"
+#~ "¤Æ\n"
+#~ " ·èÄꤹ¤ë\n"
+#~ " --help »È¤¤Êý¤òɽ¼¨¤·¤Æ½ªÎ»¤¹¤ë¡£\n"
+#~ " --info-file=FILE ¥Ç¥£¥ì¥¯¥È¥ê¤Ë¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë Info ¥Õ¥¡¥¤¥ë¤ò»ØÄꤹ"
+#~ "¤ë\n"
+#~ " INFO-FILE °ú¿ô¤òÍøÍѤ¹¤ë¤Î¤ÈƱ¤¸\n"
+#~ " --info-dir=DIR --dir-file=DIR/dir ¥ª¥×¥·¥ç¥ó¤ÈƱ¤¸\n"
+#~ " --item=TEXT --entry TEXT ¥ª¥×¥·¥ç¥ó¤ÈƱ¤¸\n"
+#~ " Info ¥Ç¥£¥ì¥¯¥È¥ê¹àÌܤϼºݤ˥á¥Ë¥å¡¼¹àÌܤˤʤë\n"
+#~ " --quiet ·Ù¹ð¥á¥Ã¥»¡¼¥¸¤òÍÞÀ©¤¹¤ë\n"
+#~ " --remove --delete ¥ª¥×¥·¥ç¥ó¤ÈƱ¤¸\n"
+#~ " --section=SEC ¥Ç¥£¥ì¥¯¥È¥ê¤Î SEC ¥»¥¯¥·¥ç¥ó¤Ë¤³¤Î¥Õ¥¡¥¤¥ë¤Î¹àÌܤòÃÖ"
+#~ "¤¯\n"
+#~ " Ê£¿ô¤Î¥»¥¯¥·¥ç¥ó¤ò»ØÄꤷ¤¿¾ì¹ç¡¢¥»¥¯¥·¥ç¥óËè¤ËÁ´¤Æ¤Î"
+#~ "¹àÌÜ\n"
+#~ " ¤¬Äɲ䵤ì¤ë\n"
+#~ " ¥»¥¯¥·¥ç¥ó¤ò»ØÄꤷ¤Ê¤±¤ì¤Ð¡¢Info ¥Õ¥¡¥¤¥ë¼«¿È¤Î¾ðÊó"
+#~ "¤Ë\n"
+#~ " ¤è¤Ã¤Æ·èÄꤹ¤ë\n"
+#~ " --version ¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨¤·¤Æ½ªÎ»¤¹¤ë¡£\n"
+#~ "\n"
+#~ "Email ¤Ë¤è¤ë¥Ð¥°¥ì¥Ý¡¼¥È¤Ï bug-texinfo@gnu.org¡¢\n"
+#~ "°ìÈÌŪ¤Ê¼ÁÌä¤äµÄÏÀ¤Ï help-texinfo@gnu.org ¤Þ¤Ç¡£\n"
+
+#~ msgid "menu item `%s' already exists, for file `%s'"
+#~ msgstr "¥á¥Ë¥å¡¼¹àÌÜ `%s' ¤Ï¡¢`%s' ¤Ë´û¤Ë¸ºß¤·¤Þ¤¹"
+
+#, fuzzy
+#~ msgid "\\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+#~ msgstr " %-10s ¥Î¡¼¥É¥á¥Ë¥å¡¼¤ÎºÇ½é¤«¤é 9 ÈÖÌÜËø¤Î¥¢¥¤¥Æ¥à¤òÁªÂò¤¹¤ë¡£\n"
+
+#~ msgid "node `%s' has been referenced %d times"
+#~ msgstr "¥Î¡¼¥É `%s' ¤Ï´û¤Ë %d ²ó»²¾È¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#, fuzzy
+#~ msgid ""
+#~ "Copyright (C) %s Free Software Foundation, Inc.\n"
+#~ "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n"
+#~ "PARTICULAR PURPOSE. You may redistribute copies of GNU %s\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the file named COPYING.\n"
+#~ msgstr ""
+#~ "Copyright (C) %s Free Software Foundation, Inc.\n"
+#~ "There is NO warranty. You may redistribute this software\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the files named COPYING.\n"
+#~ "\n"
+#~ "ÌõÃí: Èó¾ï¤Ë½ÅÍפÊʸ¾Ï¤Î¤¿¤á¡¢¸¶Ê¸¤ò»Ä¤·¤Æ¤¤¤Þ¤¹¡£\n"
+#~ " -- »²¹ÍÌõ\n"
+#~ "°ìÀÚ¤ÎÊݾڤϤ¢¤ê¤Þ¤»¤ó¡£¤¢¤Ê¤¿¤Ï¡¢GNU General Public Licence ¤Îʸ¸À¤Î²¼"
+#~ "¤Ç¡¢\n"
+#~ "¤³¤Î¥½¥Õ¥È¥¦¥§¥¢¤òºÆÇÛÉۤǤ­¤Þ¤¹¡£¤³¤ì¤é¤Ë¤Ä¤¤¤Æ¤Î¤è¤ê¾Ü¤·¤¤ÀâÌÀ¤Ï¡¢"
+#~ "COPYING\n"
+#~ "¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤ò¸«¤Æ¤¯¤À¤µ¤¤¡£\n"
+
+#~ msgid "@quote-arg only useful for single-argument macros"
+#~ msgstr "@quote-arg ¤Ï¡¢°ú¿ô¤ò°ì¤ÄÍ¿¤¨¤¿¤È¤­¤Î¤ßÍ­¸ú¤Ç¤¹"
+
+#~ msgid "Table of Contents"
+#~ msgstr "Ìܼ¡"
+
+#~ msgid "Short Contents"
+#~ msgstr "´Ê°×Ìܼ¡"
+
+#~ msgid "keep temporary files around after processing"
+#~ msgstr "½èÍý¤Î¸å¤Ë¥Æ¥ó¥Ý¥é¥ê¥Õ¥¡¥¤¥ë¤ò»Ä¤·¤Æ¤ª¤­¤Þ¤¹"
+
+#~ msgid "do not keep temporary files around after processing (default)"
+#~ msgstr "½èÍý¤Î¤¢¤È¤Ë¥Æ¥ó¥Ý¥é¥ê¥Õ¥¡¥¤¥ë¤òºï½ü¤·¤Þ¤¹ (default)"
+
+#~ msgid ""
+#~ " file, and select the node referenced by the first entry "
+#~ "found.\n"
+#~ msgstr " ºÇ½é¤Ë¸«¤Ä¤«¤Ã¤¿¹àÌܤ¬»²¾È¤·¤Æ¤¤¤ë¥Î¡¼¥É¤òÁªÂò¤¹¤ë¡£\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "There is NO warranty. You may redistribute this software\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the files named COPYING.\n"
+#~ msgstr ""
+#~ "Copyright (C) %s Free Software Foundation, Inc.\n"
+#~ "There is NO warranty. You may redistribute this software\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the files named COPYING.\n"
+#~ "\n"
+#~ "ÌõÃí: Èó¾ï¤Ë½ÅÍפÊʸ¾Ï¤Î¤¿¤á¡¢¸¶Ê¸¤ò»Ä¤·¤Æ¤¤¤Þ¤¹¡£\n"
+#~ " -- »²¹ÍÌõ\n"
+#~ "°ìÀÚ¤ÎÊݾڤϤ¢¤ê¤Þ¤»¤ó¡£¤¢¤Ê¤¿¤Ï¡¢GNU General Public Licence ¤Îʸ¸À¤Î²¼"
+#~ "¤Ç¡¢\n"
+#~ "¤³¤Î¥½¥Õ¥È¥¦¥§¥¢¤òºÆÇÛÉۤǤ­¤Þ¤¹¡£¤³¤ì¤é¤Ë¤Ä¤¤¤Æ¤Î¤è¤ê¾Ü¤·¤¤ÀâÌÀ¤Ï¡¢"
+#~ "COPYING\n"
+#~ "¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤ò¸«¤Æ¤¯¤À¤µ¤¤¡£\n"
+
+#~ msgid "%s: Specify the Info directory only once.\n"
+#~ msgstr "%s: Info ¥Ç¥£¥ì¥¯¥È¥ê¤Ï°ìÅÙ¤À¤±»ØÄꤷ¤Æ¤¯¤À¤µ¤¤¡£\n"
+
+#~ msgid "\"\" is invalid"
+#~ msgstr "\"\" ¤Ï̵¸ú¤Ç¤¹"
+
+#~ msgid "%s is an invalid ISO code, using %c"
+#~ msgstr "%s ¤ÏÉÔŬÀÚ¤Ê ISO ¥³¡¼¥É¤Ç¤¹¡£%c ¤ò»È¤¤¤Þ¤¹"
+
+#~ msgid "Cannot specify more than one macro expansion output"
+#~ msgstr "Ê£¿ô¤Î¥Þ¥¯¥í³ÈÄ¥½ÐÎϤò»ØÄê¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "Node:"
+#~ msgstr "¥Î¡¼¥É:"
+
+#~ msgid "%s: TOC should be here, but it was not found"
+#~ msgstr "%s: TOC ¤¬¤³¤³¤Ë¤¢¤ë¤Ï¤º¤Ê¤Î¤Ë¡¢¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#~ msgid "No `%s.png' or `.jpg', and no extension supplied"
+#~ msgstr "`%s.png' ¤ä `.jpg' ¤¬¤Ê¤¯¡¢³ÈÄ¥»Ò¤¬¤Ä¤±¤é¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "%s; for file `%s'.\n"
+#~ msgstr "%s -- ¥Õ¥¡¥¤¥ë `%s'¡£\n"
+
+#~ msgid "`%s' has no Up field"
+#~ msgstr "`%s' ¤Ë ¾å ¥Õ¥£¡¼¥ë¥É¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid ""
+#~ "Email bug reports to bug-texinfo@gnu.org,\n"
+#~ "general questions and discussion to help-texinfo@gnu.org."
+#~ msgstr ""
+#~ "Email ¤Ë¤è¤ë¥Ð¥°¥ì¥Ý¡¼¥È¤Ï bug-texinfo@gnu.org¡¢\n"
+#~ "°ìÈÌŪ¤Ê¼ÁÌä¤äµÄÏÀ¤Ï help-texinfo@gnu.org ¤Þ¤Ç¡£"
+
+#~ msgid ""
+#~ "Basic Commands in Info Windows\n"
+#~ "******************************\n"
+#~ "\n"
+#~ " \\%-10[quit-help] Quit this help.\n"
+#~ " \\%-10[quit] Quit Info altogether.\n"
+#~ " \\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+#~ "\n"
+#~ "Selecting other nodes:\n"
+#~ "----------------------\n"
+#~ " \\%-10[next-node] Move to the \"next\" node of this node.\n"
+#~ " \\%-10[prev-node] Move to the \"previous\" node of this node.\n"
+#~ " \\%-10[up-node] Move \"up\" from this node.\n"
+#~ " \\%-10[menu-item] Pick menu item specified by name.\n"
+#~ " Picking a menu item causes another node to be selected.\n"
+#~ " \\%-10[xref-item] Follow a cross reference. Reads name of reference.\n"
+#~ " \\%-10[history-node] Move to the last node seen in this window.\n"
+#~ " \\%-10[move-to-next-xref] Skip to next hypertext link within this "
+#~ "node.\n"
+#~ " \\%-10[move-to-prev-xref] Skip to previous hypertext link within this "
+#~ "node.\n"
+#~ " \\%-10[select-reference-this-line] Follow the hypertext link under "
+#~ "cursor.\n"
+#~ " \\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+#~ "node] (DIR)'.\n"
+#~ " \\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] "
+#~ "Top'.\n"
+#~ "\n"
+#~ "Moving within a node:\n"
+#~ "---------------------\n"
+#~ " \\%-10[scroll-forward] Scroll forward a page.\n"
+#~ " \\%-10[scroll-backward] Scroll backward a page.\n"
+#~ " \\%-10[beginning-of-node] Go to the beginning of this node.\n"
+#~ " \\%-10[end-of-node] Go to the end of this node.\n"
+#~ " \\%-10[1scroll-forward] Scroll forward 1 line.\n"
+#~ " \\%-10[1scroll-backward] Scroll backward 1 line.\n"
+#~ "\n"
+#~ "Other commands:\n"
+#~ "---------------\n"
+#~ " \\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+#~ " \\%-10[last-menu-item] Pick last item in node's menu.\n"
+#~ " \\%-10[index-search] Search for a specified string in the index "
+#~ "entries of this Info\n"
+#~ " file, and select the node referenced by the first entry "
+#~ "found.\n"
+#~ " \\%-10[goto-node] Move to node specified by name.\n"
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ " \\%-10[search] Search forward through this Info file for a specified "
+#~ "string,\n"
+#~ " and select the node in which the next occurrence is found.\n"
+#~ " \\%-10[search-backward] Search backward in this Info file for a "
+#~ "specified string,\n"
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr ""
+#~ "Info ¥¦¥£¥ó¥É¥¦Æâ¤Î´ðËÜ¥³¥Þ¥ó¥É\n"
+#~ "*******************************\n"
+#~ "\n"
+#~ " \\%-10[quit-help] ¤³¤Î¥Ø¥ë¥×¤ò½ªÎ»¤¹¤ë¡£\n"
+#~ " \\%-10[quit] Info ¤â°ì½ï¤Ë½ªÎ»¤¹¤ë¡£\n"
+#~ " \\%-10[get-info-help-node] Info ¥Á¥å¡¼¥È¥ê¥¢¥ë¤òµ¯Æ°¤¹¤ë¡£\n"
+#~ "\n"
+#~ "¾¤Î¥Î¡¼¥É¤òÁªÂò¤¹¤ë:\n"
+#~ "---------------------\n"
+#~ " \\%-10[next-node] ¤³¤Î¥Î¡¼¥É¤Î \"¼¡\" ¤Î¥Î¡¼¥É¤Ø°ÜÆ°¤¹¤ë¡£\n"
+#~ " \\%-10[prev-node] ¤³¤Î¥Î¡¼¥É¤Î \"Á°\" ¤Î¥Î¡¼¥É¤Ø°ÜÆ°¤¹¤ë¡£\n"
+#~ " \\%-10[up-node] ¤³¤Î¥Î¡¼¥É¤«¤é \"¾å\" ¤Ø°ÜÆ°¤¹¤ë¡£\n"
+#~ " \\%-10[menu-item] ̾Á°¤Ç»ØÄꤷ¤¿¥á¥Ë¥å¡¼¥¢¥¤¥Æ¥à¤òÁªÂò¤¹¤ë¡£\n"
+#~ " ¥á¥Ë¥å¡¼¥¢¥¤¥Æ¥à¤ÎÁªÂò¤Ç¾¤Î¥Î¡¼¥É¤¬ÁªÂò¤µ¤ì¤ë»ö¤Ë¤Ê¤ë¡£\n"
+#~ " \\%-10[xref-item] Áê¸ß»²¾È¤òé¤ë¡£»²¾È̾¤òÆɤ߼è¤ë¡£\n"
+#~ " \\%-10[history-node] ¤³¤Î¥¦¥£¥ó¥É¥¦¤ÇºÇ¸å¤Ë¸«¤¿¥Î¡¼¥É¤Ø°ÜÆ°¤¹¤ë¡£\n"
+#~ " \\%-10[move-to-next-xref] ¤³¤Î¥Î¡¼¥ÉÆâ¤Î¼¡¤Î¥ê¥ó¥¯¤Ø¥¹¥­¥Ã¥×¤¹¤ë¡£\n"
+#~ " \\%-10[move-to-prev-xref] ¤³¤Î¥Î¡¼¥ÉÆâ¤ÎÁ°¤Î¥ê¥ó¥¯¤Ø¥¹¥­¥Ã¥×¤¹¤ë¡£\n"
+#~ " \\%-10[select-reference-this-line] ¥«¡¼¥½¥ë°ÌÃ֤Υê¥ó¥¯¤òé¤ë\n"
+#~ " \\%-10[dir-node] `¥Ç¥£¥ì¥¯¥È¥ê' ¥Î¡¼¥É¤Ø°ÜÆ°¤¹¤ë¡£`\\[goto-node] "
+#~ "(DIR)' ¤ÈƱ¤¸¡£\n"
+#~ " \\%-10[top-node] Top ¥Î¡¼¥É¤Ø°ÜÆ°¤¹¤ë¡£`\\[goto-node] Top' ¤ÈƱ¤¸¡£\n"
+#~ "\n"
+#~ "¥Î¡¼¥ÉÆâ¤Ç¤Î°ÜÆ°:\n"
+#~ "-----------------\n"
+#~ " \\%-10[scroll-forward] 1 ¥Ú¡¼¥¸Ê¬Á°Êý¤Ø¤¹¤¹¤á¤ë¡£\n"
+#~ " \\%-10[scroll-backward] 1 ¥Ú¡¼¥¸Ê¬¸åÊý¤ØÌ᤹¡£\n"
+#~ " \\%-10[beginning-of-node] ¸½ºß¤Î¥Î¡¼¥É¤ÎÀèƬ¤Ø°ÜÆ°¤¹¤ë¡£\n"
+#~ " \\%-10[end-of-node] ¸½ºß¤Î¥Î¡¼¥É¤ÎËöÈø¤Ø°ÜÆ°¤¹¤ë¡£\n"
+#~ " \\%-10[1scroll-forward] 1 ¹ÔʬÁ°Êý¤Ø¤¹¤¹¤á¤ë¡£\n"
+#~ " \\%-10[1scroll-backward] 1 ¹Ôʬ¸åÊý¤ØÌ᤹¡£\n"
+#~ "\n"
+#~ "¤½¤Î¾¤Î¥³¥Þ¥ó¥É:\n"
+#~ "-----------------\n"
+#~ " \\%-10[menu-digit] ¥Î¡¼¥É¥á¥Ë¥å¡¼¤ÎºÇ½é¤«¤é 9 ÈÖÌÜËø¤Î¥¢¥¤¥Æ¥à¤òÁªÂò¤¹"
+#~ "¤ë¡£\n"
+#~ " \\%-10[last-menu-item] ¥Î¡¼¥É¥á¥Ë¥å¡¼¤ÎºÇ¸å¤Î¥¢¥¤¥Æ¥à¤òÁªÂò¤¹¤ë¡£\n"
+#~ " \\%-10[index-search] ¸½ºß¤Î Info ¥Õ¥¡¥¤¥ë¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹¹àÌܤÇʸ»úÎó¤ò»Ø"
+#~ "Äꤷ¤Æ¸¡º÷¤·¡¢\n"
+#~ " ºÇ½é¤Ë¸«¤Ä¤«¤Ã¤¿¹àÌܤ¬»²¾È¤·¤Æ¤¤¤ë¥Î¡¼¥É¤òÁªÂò¤¹¤ë¡£\n"
+#~ " \\%-10[goto-node] ̾Á°¤Ç»ØÄꤵ¤ì¤¿¥Î¡¼¥É¤Ø°ÜÆ°¤¹¤ë¡£\n"
+#~ " (¥Õ¥¡¥¤¥ë̾)¥Î¡¼¥É̾¤ÎÍͤˡ¢¥Õ¥¡¥¤¥ë̾¤ò´Þ¤á¤ë¤³¤È¤¬¤Ç¤­"
+#~ "¤ë¡£\n"
+#~ " \\%-10[search] ¸½ºß¤Î Info ¥Õ¥¡¥¤¥ëÁ´ÂΤò¡¢»ØÄꤵ¤ì¤¿Ê¸»úÎó¤ÇÁ°Êý¸¡º÷"
+#~ "¤·¡¢\n"
+#~ " ¸«¤Ä¤«¤Ã¤¿¤â¤Î¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë¥Î¡¼¥É¤òÁªÂò¤¹¤ë¡£\n"
+#~ " \\%-10[search-backward] ¸½ºß¤Î Info ¥Õ¥¡¥¤¥ë¤ò¡¢»ØÄꤵ¤ì¤¿Ê¸»úÎó¤Ç¸åÊý"
+#~ "¸¡º÷¤·¡¢\n"
+#~ " ¸«¤Ä¤«¤Ã¤¿¤â¤Î¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë¥Î¡¼¥É¤òÁªÂò¤¹¤ë¡£\n"
+
+#~ msgid "******************************\n"
+#~ msgstr "*******************************\n"
+
+#~ msgid "---------------------\n"
+#~ msgstr "-----------------\n"
+
+#~ msgid "----------------------\n"
+#~ msgstr "---------------------\n"
+
+#~ msgid "---------------\n"
+#~ msgstr "-----------------\n"
+
+#~ msgid "%s' argument to @image command not found"
+#~ msgstr "@image ¥³¥Þ¥ó¥É¤Ø¤Î %s ¤Î°ú¿ô¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+#~ "\n"
+#~ "Translate Texinfo source documentation to various other formats:\n"
+#~ "Info files suitable for reading online with Emacs or standalone GNU Info\n"
+#~ "(by default); plain text (with --no-headers); or HTML (with --html).\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --commands-in-node-names allow @ commands in node names.\n"
+#~ " -D VAR define a variable, as with @set.\n"
+#~ " -E, --macro-expand FILE output macro-expanded source to FILE.\n"
+#~ " --error-limit=NUM quit after NUM errors (default %d).\n"
+#~ " --fill-column=NUM break Info lines at NUM characters (default %"
+#~ "d).\n"
+#~ " --footnote-style=STYLE output footnotes according to STYLE:\n"
+#~ " `separate' to place footnotes in their own "
+#~ "node,\n"
+#~ " `end' to place the footnotes at the end of "
+#~ "the\n"
+#~ " node in which they are defined (the "
+#~ "default).\n"
+#~ " --force preserve output even if errors.\n"
+#~ " --help display this help and exit.\n"
+#~ " --html output HTML rather than Info format;\n"
+#~ " -I DIR append DIR to the @include search path.\n"
+#~ " --ifhtml process @ifhtml and @html text even when not\n"
+#~ " generating HTML.\n"
+#~ " --ifinfo process @ifinfo text even when generating "
+#~ "HTML.\n"
+#~ " --iftex process @iftex and @tex text.\n"
+#~ " implies --no-split.\n"
+#~ msgstr ""
+#~ "»È¤¤Êý: %s [¥ª¥×¥·¥ç¥ó]... TEXINFO¥Õ¥¡¥¤¥ë...\n"
+#~ "\n"
+#~ "Texinfo ʸ½ñ¤Î¥½¡¼¥¹¤ò¤¤¤í¤¤¤í¤Ê·Á¼°¤ÇÆɤá¤ë¤è¤¦¤ËÊÑ´¹¤¹¤ë¡£\n"
+#~ "Info ¥Õ¥¡¥¤¥ë¤Ï Emacs ¤ä GNU Info ¤Ç¥ª¥ó¥é¥¤¥ó¾å¤ÇÆɤà¤Î¤ËŬ¤·¤Þ¤¹\n"
+#~ "(¥Ç¥Õ¥©¥ë¥È)¡£¥×¥ì¥¤¥ó¥Æ¥­¥¹¥È¤Ï(--no-headers)¡¢HTML ¤Ï(--html)¡£\n"
+#~ "\n"
+#~ "¥ª¥×¥·¥ç¥ó:\n"
+#~ " --commands-in-node-names ¥Î¡¼¥É̾¤Ë @ ¥³¥Þ¥ó¥É¤òÃÖ¤±¤ë¤è¤¦¤Ë¤¹¤ë\n"
+#~ " -D VAR ÊÑ¿ô¤òÀßÄꤹ¤ë¡£@set ¤ÈƱ¤¸\n"
+#~ " -E, --macro-expand FILE ¥Þ¥¯¥í³ÈÄ¥¤µ¤ì¤¿¥½¡¼¥¹¤ò FILE ¤Ë½ÐÎÏ\n"
+#~ " --error-limit=NUM ¥¨¥é¡¼¤¬ NUM ¸ÄȯÀ¸¤·¤¿¤é½èÍý¤òÃæ»ß¤¹¤ë "
+#~ "(default %d)\n"
+#~ " --fill-column=NUM NUM ¤³¤Îʸ»ú¿ô¤Ç²þ¹Ô¤òÆþ¤ì¤ë (default %d)\n"
+#~ " --footnote-style STYLE µÓÃí¤ò °Ê²¼¤Î¤è¤¦¤Ê STYLE ¤Ç½ÐÎϤ¹¤ë:\n"
+#~ " `separate' ¤½¤Î¥Î¡¼¥É¤ËµÓÃí¤òÃÖ¤¯\n"
+#~ " `end' µÓÃí¤¬ÄêµÁ¤µ¤ì¤¿¥Î¡¼¥É¤ÎºÇ¸å¤ËÃÖ¤¯"
+#~ "(default)\n"
+#~ " --force ¥¨¥é¡¼¤¬¤¤¤¯¤ÄȯÀ¸¤·¤Æ¤â¡¢½ÐÎϤòÊݸ¤¹¤ë¡£\n"
+#~ " --help »È¤¤Êý¤òɽ¼¨¤¹¤ë¡£\n"
+#~ " --ifhtml HTML ¤òÀ¸À®¤·¤Ê¤¤¤È¤­¤Ë¤â¡¢@ifhtml ¤È @html ¤Î\n"
+#~ " ¥Æ¥­¥¹¥È¤ò½èÍý¤¹¤ë\n"
+#~ " --ifinfo HTML ¤òÀ¸À®¤¹¤ë¤È¤­¤Ë¤â @ifinfo ¤Î¥Æ¥­¥¹¥È¤ò½èÍý"
+#~ "¤¹¤ë\n"
+#~ " --iftex @iftex ¤È @tex ¤Î¥Æ¥­¥¹¥È¤ò½èÍý¤¹¤ë\n"
+#~ " --no-split ¤ò»ØÄꤷ¤¿¤³¤È¤Ë¤Ê¤ë\n"
+
+#~ msgid ""
+#~ " --no-headers suppress Info node separators and Node: lines "
+#~ "and\n"
+#~ " write to standard output without --output.\n"
+#~ " --no-ifhtml do not process @ifhtml and @html text.\n"
+#~ " --no-ifinfo do not process @ifinfo text.\n"
+#~ " --no-iftex do not process @iftex and @tex text.\n"
+#~ " --no-split suppress splitting of large Info output files "
+#~ "or\n"
+#~ " generation of one HTML file per node.\n"
+#~ " --no-validate suppress node cross-reference validation.\n"
+#~ " --no-warn suppress warnings (but not errors).\n"
+#~ " --number-sections include chapter, section, etc. numbers in "
+#~ "output.\n"
+#~ " -o, --output=FILE output to FILE, ignoring any @setfilename.\n"
+#~ " -P DIR prepend DIR to the @include search path.\n"
+#~ " --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %"
+#~ "d).\n"
+#~ " if VAL is `none', do not indent;\n"
+#~ " if VAL is `asis', preserve existing "
+#~ "indentation.\n"
+#~ " --reference-limit=NUM warn about at most NUM references (default %"
+#~ "d).\n"
+#~ " -U VAR undefine a variable, as with @clear.\n"
+#~ " -v, --verbose explain what is being done.\n"
+#~ " --version display version information and exit.\n"
+#~ msgstr ""
+#~ " --no-headers ¥Î¡¼¥Éʬ³äµ­¹æ¤È Node: ¹Ô¤òÍÞÀ©¤·¤Æ¡¢\n"
+#~ " --output ¤Ê¤·¤Ç¤âɸ½à½ÐÎϤ˽ñ¹þ¤à\n"
+#~ " --no-ifhtml @ifhtml ¤ä @html ¤Î¥Æ¥­¥¹¥È¤ò½èÍý¤·¤Ê¤¤\n"
+#~ " --no-ifinfo @ifinfo ¤Î¥Æ¥­¥¹¥È¤ò½èÍý¤·¤Ê¤¤\n"
+#~ " --no-iftex @iftex ¤ä @tex ¤Î¥Æ¥­¥¹¥È¤ò½èÍý¤·¤Ê¤¤\n"
+#~ " --no-split Â礭¤Ê Info ½ÐÎÏ¥Õ¥¡¥¤¥ë¤Îʬ³ä¤ä¥Î¡¼¥ÉËè¤Î "
+#~ "HTML\n"
+#~ " ¥Õ¥¡¥¤¥ëÀ¸À®¤òÍÞÀ©¤¹¤ë\n"
+#~ " --no-validate ¥Î¡¼¥ÉÁê¸ß»²¾È¤Î³Îǧ¤òÍÞÀ©¤¹¤ë\n"
+#~ " --no-warn ·Ù¹ð¤òÍÞÀ©¤¹¤ë (¥¨¥é¡¼¤Ïɽ¼¨¤µ¤ì¤ë)\n"
+#~ " --number-sections ¾Ï¤äÀá¤ËÄ̤·ÈÖ¹æ¤òÉÕ¤±¤Æ½ÐÎϤ¹¤ë\n"
+#~ " -o, --output=FILE @setfilename ¤ò̵»ë¤·¤Æ¡¢FILE ¤Ø½ÐÎϤ¹¤ë\n"
+#~ " -P DIR @include ¸¡º÷¥Ñ¥¹¤Ë DIR ¤òÄɲ乤ë\n"
+#~ " --paragraph-indent=VAL ÃÊÍî¤ò VAL ¸Ä¤Î¶õÇò¤Ç¥¤¥ó¥Ç¥ó¥È¤¹¤ë (default %"
+#~ "d)\n"
+#~ " VAL ¤¬ `none' ¤Ê¤é¥¤¥ó¥Ç¥ó¥È¤·¤Ê¤¤\n"
+#~ " VAL ¤¬ `asis' ¤Ê¤é¥¤¥ó¥Ç¥ó¥ÈÎ̤ò¤¢¤ë¤Þ¤Þ¤ËÊÝ"
+#~ "¤Ä\n"
+#~ " --reference-limit=NUM ºÇÂç NUM ¸Ä¤Î»²¾È¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ë (default %"
+#~ "d)\n"
+#~ " -U VAR @clear ¤ÎÍͤËÊÑ¿ô VAR ¤ò̤ÄêµÁ¤Ë¤¹¤ë\n"
+#~ " -v, --verbose ²¿¤¬¹Ô¤Ê¤ï¤ì¤Æ¤¤¤ë¤«¤òÊó¹ð¤¹¤ë\n"
+#~ " --version ¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨¤·¤Æ½ªÎ»¤¹¤ë\n"
diff --git a/po/nb.gmo b/po/nb.gmo
new file mode 100644
index 0000000..b9dd8bf
--- /dev/null
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
new file mode 100644
index 0000000..1488e1a
--- /dev/null
+++ b/po/nb.po
@@ -0,0 +1,3522 @@
+# Norwegian translation of messages for GNU Texinfo 4.6 (bokmål dialect).
+# Copyright (C) 1999 Free Software Foundation, Inc.
+# Trond Endrestøl <Trond.Endrestol@gtf.ol.no>, 1998.
+#
+# Send this file as an gzipped attachment to:
+# translation@iro.umontreal.ca
+# with the subject:
+# TP-Robot PACKAGE-VERSION.TEAM.po
+#
+# The subject for the Norwegian bokmål translation of GNU Texinfo 4.7.90
+# would then be:
+# TP-Robot texinfo-4.7.90.nb.po
+#
+# Here's the URL for the Norwegian translation team:
+# http://www2.iro.umontreal.ca/~pinard/po/registry.cgi?team=no
+#
+# Here's the URL for the current translations of GNU Texinfo:
+# http://www2.iro.umontreal.ca/~pinard/po/registry.cgi?domain=texinfo
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo 4.7.90\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2008-09-18 20:38+0200\n"
+"PO-Revision-Date: 2004-12-05 15:37+0100\n"
+"Last-Translator: Trond Endrestøl <Trond.Endrestol@gtf.ol.no>\n"
+"Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: gnulib/lib/error.c:125
+msgid "Unknown system error"
+msgstr ""
+
+#: gnulib/lib/getopt.c:526 gnulib/lib/getopt.c:542
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: valget «%s» er flertydig\n"
+
+#: gnulib/lib/getopt.c:575 gnulib/lib/getopt.c:579
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: valget «--%s» tillater ikke et argument\n"
+
+#: gnulib/lib/getopt.c:588 gnulib/lib/getopt.c:593
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: valget «%c%s» tillater ikke et argument\n"
+
+#: gnulib/lib/getopt.c:636 gnulib/lib/getopt.c:655 gnulib/lib/getopt.c:971
+#: gnulib/lib/getopt.c:990
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: valget «%s» krever et argument\n"
+
+#: gnulib/lib/getopt.c:693 gnulib/lib/getopt.c:696
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: ukjent valg «--%s»\n"
+
+#: gnulib/lib/getopt.c:704 gnulib/lib/getopt.c:707
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: ukjent valg «%c%s»\n"
+
+#: gnulib/lib/getopt.c:759 gnulib/lib/getopt.c:762
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: ulovlig valg -- %c\n"
+
+#: gnulib/lib/getopt.c:768 gnulib/lib/getopt.c:771
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ugyldig valg -- %c\n"
+
+#: gnulib/lib/getopt.c:823 gnulib/lib/getopt.c:839 gnulib/lib/getopt.c:1043
+#: gnulib/lib/getopt.c:1061
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: valget krever et argument -- %c\n"
+
+#: gnulib/lib/getopt.c:892 gnulib/lib/getopt.c:908
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: valget «-W %s» er flertydig\n"
+
+#: gnulib/lib/getopt.c:932 gnulib/lib/getopt.c:950
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: valget «-W %s» tillater ikke et argument\n"
+
+#: gnulib/lib/xalloc-die.c:34 gnulib/lib/xsetenv.c:37
+#, c-format
+msgid "memory exhausted"
+msgstr ""
+
+#: info/echo-area.c:283 info/session.c:966
+msgid "Move forward a character"
+msgstr "Flytte forover et tegn"
+
+#: info/echo-area.c:295 info/session.c:993
+msgid "Move backward a character"
+msgstr "Flytte bakover et tegn"
+
+#: info/echo-area.c:307
+msgid "Move to the start of this line"
+msgstr "Flytte til starten av denne linjen"
+
+#: info/echo-area.c:312
+msgid "Move to the end of this line"
+msgstr "Flytte til slutten av denne linjen"
+
+#: info/echo-area.c:320 info/session.c:1025
+msgid "Move forward a word"
+msgstr "Flytte forover et ord"
+
+#: info/echo-area.c:360 info/session.c:1049
+msgid "Move backward a word"
+msgstr "Flytte tilbake et ord"
+
+#: info/echo-area.c:400
+msgid "Delete the character under the cursor"
+msgstr "Slette tegnet under markøren"
+
+#: info/echo-area.c:430
+msgid "Delete the character behind the cursor"
+msgstr "Slette tegnet bak markøren"
+
+#: info/echo-area.c:451
+msgid "Cancel or quit operation"
+msgstr "Avbryte eller avslutte operasjon"
+
+#: info/echo-area.c:466
+msgid "Accept (or force completion of) this line"
+msgstr "Godta (eller tvinge fullføring av) denne linjen"
+
+#: info/echo-area.c:471
+msgid "Insert next character verbatim"
+msgstr "Sette inn neste tegn ordrett"
+
+#: info/echo-area.c:479
+msgid "Insert this character"
+msgstr "Sette inn dette tegnet"
+
+#: info/echo-area.c:498
+msgid "Insert a TAB character"
+msgstr "Sette inn en tabulator"
+
+#: info/echo-area.c:505
+msgid "Transpose characters at point"
+msgstr "Transponere tegnet ved punktet"
+
+#: info/echo-area.c:556
+msgid "Yank back the contents of the last kill"
+msgstr "Rykke tilbake innholdet fra forrige felling"
+
+#: info/echo-area.c:563
+msgid "Kill ring is empty"
+msgstr "Fellingsringen er tom"
+
+#: info/echo-area.c:576
+msgid "Yank back a previous kill"
+msgstr "Rykke tilbake en tidligere felling"
+
+#: info/echo-area.c:609
+msgid "Kill to the end of the line"
+msgstr "Slette til slutten av linjen"
+
+#: info/echo-area.c:622
+msgid "Kill to the beginning of the line"
+msgstr "Slette til begynnelsen av linjen"
+
+#: info/echo-area.c:634
+msgid "Kill the word following the cursor"
+msgstr "Slette ordet etter markøren"
+
+#: info/echo-area.c:654
+msgid "Kill the word preceding the cursor"
+msgstr "Slette ordet før markøren"
+
+#: info/echo-area.c:870 info/echo-area.c:926
+msgid "No completions"
+msgstr "Ingen fullføringer"
+
+#: info/echo-area.c:872
+msgid "Not complete"
+msgstr "Ikke fullstendig"
+
+#: info/echo-area.c:913
+msgid "List possible completions"
+msgstr "Liste mulige fullføringer"
+
+#: info/echo-area.c:930
+msgid "Sole completion"
+msgstr "Eneste fullføring"
+
+#: info/echo-area.c:939
+msgid "One completion:\n"
+msgstr "En fullføring:\n"
+
+#: info/echo-area.c:940
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d fullføringer:\n"
+
+#: info/echo-area.c:1087
+msgid "Insert completion"
+msgstr "Sett inn fullføring"
+
+#: info/echo-area.c:1222
+msgid "Building completions..."
+msgstr "Bygger fullføringer..."
+
+#: info/echo-area.c:1342
+msgid "Scroll the completions window"
+msgstr "Rulle fullføringsvinduet"
+
+#: info/footnotes.c:212
+msgid "Footnotes could not be displayed"
+msgstr "Fotnoter kunne ikke vises"
+
+#: info/footnotes.c:238
+msgid "Show the footnotes associated with this node in another window"
+msgstr "Vise fotnotene assosiert med denne noden i et annet vindu"
+
+#: info/footnotes.h:26
+msgid "---------- Footnotes ----------"
+msgstr "---------- Fotnoter -----------"
+
+#: info/indices.c:171
+msgid "Look up a string in the index for this file"
+msgstr "Lete opp en streng i indeksen til denne filen"
+
+#: info/indices.c:198
+msgid "Finding index entries..."
+msgstr "Finner indeksinnslag..."
+
+#: info/indices.c:206
+msgid "No indices found."
+msgstr "Ingen indekser funnet."
+
+#: info/indices.c:216
+msgid "Index entry: "
+msgstr "Indeksinnslag: "
+
+#: info/indices.c:324
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr ""
+"Gå til det neste passende indeksinnslaget fra forrige '\\[index-search]'-"
+"kommando"
+
+#: info/indices.c:334
+msgid "No previous index search string."
+msgstr "Ingen tidligere indekssøkestrenger."
+
+#: info/indices.c:341
+msgid "No index entries."
+msgstr "Ingen indeksinnslag."
+
+#: info/indices.c:374
+#, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "Ingen %sindeksinnslag inneholdende «%s»."
+
+#: info/indices.c:375
+msgid "more "
+msgstr "mer "
+
+#: info/indices.c:385
+msgid "CAN'T SEE THIS"
+msgstr "KAN IKKE SE DETTE"
+
+#: info/indices.c:421
+#, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr "Fant «%s» i %s. («\\[next-index-match]» prøver å finne den neste.)"
+
+#: info/indices.c:549
+#, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "Sjekker indekser i «%s»..."
+
+#: info/indices.c:604
+#, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr "Ingen av de tilgjengelig infofilene har «%s» i deres indekser."
+
+#: info/indices.c:630
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr ""
+"Kravle gjennom alle kjente infofilers indekser etter en streng\n"
+" og bygge opp en meny"
+
+#: info/indices.c:634
+msgid "Index apropos: "
+msgstr "Indeksapropos: "
+
+#: info/indices.c:662
+#, c-format
+msgid ""
+"\n"
+"* Menu: Nodes whose indices contain `%s':\n"
+msgstr ""
+"\n"
+"* Menu: Noder med indekser som inneholder «%s»:\n"
+
+#: info/info.c:275 info/infokey.c:899
+#, c-format
+msgid "Try --help for more information.\n"
+msgstr "Prøv --help for mer informasjon.\n"
+
+#: info/info.c:294 info/infokey.c:145 install-info/install-info.c:2101
+#: makeinfo/makeinfo.c:802 util/texindex.c:295
+#, c-format
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+
+#: info/info.c:506
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "ingen innslag funnet for «%s»\n"
+
+#: info/info.c:600
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [MENU-ITEM...]\n"
+"\n"
+"Read documentation in Info format.\n"
+msgstr ""
+
+#: info/info.c:606
+msgid ""
+"Options:\n"
+" -k, --apropos=STRING look up STRING in all indices of all "
+"manuals.\n"
+" -d, --directory=DIR add DIR to INFOPATH.\n"
+" --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+" -f, --file=FILENAME specify Info file to visit."
+msgstr ""
+
+#: info/info.c:613
+msgid ""
+" -h, --help display this help and exit.\n"
+" --index-search=STRING go to node pointed by index entry STRING.\n"
+" -n, --node=NODENAME specify nodes in first visited Info file.\n"
+" -o, --output=FILENAME output selected nodes to FILENAME."
+msgstr ""
+
+#: info/info.c:619
+msgid ""
+" -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+" --no-raw-escapes output escapes as literal text.\n"
+" --restore=FILENAME read initial keystrokes from FILENAME.\n"
+" -O, --show-options, --usage go to command-line options node."
+msgstr ""
+
+#: info/info.c:626
+#, fuzzy
+msgid " -b, --speech-friendly be friendly to speech synthesizers."
+msgstr ""
+" -b, --speech-friendly vær vennlig ovenfor talesyntetisatorer.\n"
+
+#: info/info.c:630
+msgid ""
+" --subnodes recursively output menu items.\n"
+" --vi-keys use vi-like and less-like key bindings.\n"
+" --version display version information and exit.\n"
+" -w, --where, --location print physical location of Info file."
+msgstr ""
+
+#: info/info.c:636
+msgid ""
+"\n"
+"The first non-option argument, if present, is the menu entry to start from;\n"
+"it is searched for in all `dir' files along INFOPATH.\n"
+"If it is not present, info merges all `dir' files and shows the result.\n"
+"Any remaining arguments are treated as the names of menu\n"
+"items relative to the initial node visited."
+msgstr ""
+
+#: info/info.c:643
+msgid ""
+"\n"
+"For a summary of key bindings, type h within Info."
+msgstr ""
+
+#: info/info.c:646
+msgid ""
+"\n"
+"Examples:\n"
+" info show top-level dir menu\n"
+" info info show the general manual for Info readers\n"
+" info info-stnd show the manual specific to this Info program\n"
+" info emacs start at emacs node from top-level dir\n"
+" info emacs buffers start at buffers node within emacs manual\n"
+" info --show-options emacs start at node with emacs' command line options\n"
+" info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+" info -f ./foo.info show file ./foo.info, not searching dir"
+msgstr ""
+
+#: info/info.c:657 info/infokey.c:918 makeinfo/makeinfo.c:475
+#: util/texindex.c:259
+msgid ""
+"\n"
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+"Send bugrapporter til bug-texinfo@gnu.org,\n"
+"generelle spørsmål og diskusjoner til help-texinfo@gnu.org.\n"
+"Websida for Texinfo: http://www.gnu.org/software/texinfo/"
+
+#: info/info.c:691
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "Kan ikke finne noden «%s»."
+
+#: info/info.c:692
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "Kan ikke finne noden «(%s)%s»."
+
+#: info/info.c:693
+msgid "Cannot find a window!"
+msgstr "Kan ikke finne et vindu!"
+
+#: info/info.c:694
+msgid "Point doesn't appear within this window's node!"
+msgstr "Markøren vises ikke innen dette vinduets node!"
+
+#: info/info.c:695
+msgid "Cannot delete the last window."
+msgstr "Kan ikke slette det siste vinduet."
+
+#: info/info.c:696
+msgid "No menu in this node."
+msgstr "Ingen meny i denne noden."
+
+#: info/info.c:697
+msgid "No footnotes in this node."
+msgstr "Ingen fotnoter i denne noden."
+
+#: info/info.c:698
+msgid "No cross references in this node."
+msgstr "Ingen kryssreferanser i denne noden."
+
+#: info/info.c:699
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Ingen «%s»-peker for denne noden."
+
+#: info/info.c:700
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "Ukjent Info-kommando «%c»; prøv «?» for hjelp."
+
+#: info/info.c:701
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr "Terminaltypen «%s» er ikke smart nok for å kjøre Info."
+
+#: info/info.c:702
+msgid "You are already at the last page of this node."
+msgstr "Du er allerede på den siste siden av denne noden."
+
+#: info/info.c:703
+msgid "You are already at the first page of this node."
+msgstr "Du er allerede på den første siden til denne noden."
+
+#: info/info.c:704
+msgid "Only one window."
+msgstr "Bare et vindu."
+
+#: info/info.c:705
+msgid "Resulting window would be too small."
+msgstr "Resulterende vindu ville blitt for lite."
+
+#: info/info.c:706
+msgid "Not enough room for a help window, please delete a window."
+msgstr "Ikke nok plass for et hjelpevindu, vennligst slett et vindu."
+
+#: info/infodoc.c:45
+msgid "Basic Info command keys\n"
+msgstr ""
+
+#: info/infodoc.c:47
+#, fuzzy
+msgid "\\%-10[quit-help] Close this help window.\n"
+msgstr "\\%-10[quit-help] Avslutte denne hjelpen.\n"
+
+#: info/infodoc.c:48
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] Avslutte Info fullstendig.\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr "\\%-10[get-info-help-node] Starte Infoopplæring.\n"
+
+#: info/infodoc.c:51
+#, fuzzy
+msgid "\\%-10[prev-line] Move up one line.\n"
+msgstr "\\%-10[prev-line] Rulle bakover 1 linje.\n"
+
+#: info/infodoc.c:52
+#, fuzzy
+msgid "\\%-10[next-line] Move down one line.\n"
+msgstr "\\%-10[next-line] Rulle forover 1 linje.\n"
+
+#: info/infodoc.c:53
+#, fuzzy
+msgid "\\%-10[scroll-backward] Scroll backward one screenful.\n"
+msgstr "\\%-10[scroll-backward] Rulle bakover en side.\n"
+
+#: info/infodoc.c:54
+#, fuzzy
+msgid "\\%-10[scroll-forward] Scroll forward one screenful.\n"
+msgstr "\\%-10[scroll-forward] Rulle forover en side.\n"
+
+#: info/infodoc.c:55
+#, fuzzy
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr "\\%-10[beginning-of-node] Gå til begynnelsen av denne noden.\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr "\\%-10[end-of-node] Gå til slutten av denne noden.\n"
+
+#: info/infodoc.c:58
+#, fuzzy
+msgid "\\%-10[move-to-next-xref] Skip to the next hypertext link.\n"
+msgstr ""
+"\\%-10[move-to-prev-xref] Flytte til neste hypertekstlenke innen denne "
+"noden.\n"
+
+#: info/infodoc.c:59
+#, fuzzy
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under the "
+"cursor.\n"
+msgstr "\\%-10[dir-node] Følge hypertekstlenken under markøren.\n"
+
+#: info/infodoc.c:60
+#, fuzzy
+msgid "\\%-10[history-node] Go back to the last node seen in this window.\n"
+msgstr ""
+"\\%-10[history-node] Flytte til den siste noden sett i dette vinduet.\n"
+
+#: info/infodoc.c:62
+#, fuzzy
+msgid "\\%-10[global-prev-node] Go to the previous node in the document.\n"
+msgstr "\\%-10[prev-node] Flytte til forrige node før denne noden.\n"
+
+#: info/infodoc.c:63
+#, fuzzy
+msgid "\\%-10[global-next-node] Go to the next node in the document.\n"
+msgstr "\\%-10[next-node] Flytte til neste node etter denne noden.\n"
+
+#: info/infodoc.c:64
+#, fuzzy
+msgid "\\%-10[prev-node] Go to the previous node on this level.\n"
+msgstr "\\%-10[prev-node] Flytte til forrige node før denne noden.\n"
+
+#: info/infodoc.c:65
+#, fuzzy
+msgid "\\%-10[next-node] Go to the next node on this level.\n"
+msgstr "\\%-10[next-node] Flytte til neste node etter denne noden.\n"
+
+#: info/infodoc.c:66
+#, fuzzy
+msgid "\\%-10[up-node] Go up one level.\n"
+msgstr "\\%-10[up-node] Flytte «opp» fra denne noden.\n"
+
+#: info/infodoc.c:67
+#, fuzzy
+msgid "\\%-10[top-node] Go to the top node of this document.\n"
+msgstr "\\%-10[end-of-node] Gå til slutten av denne noden.\n"
+
+#: info/infodoc.c:68
+#, fuzzy
+msgid "\\%-10[dir-node] Go to the main `directory' node.\n"
+msgstr "\\%-10[end-of-node] Gå til slutten av denne noden.\n"
+
+#: info/infodoc.c:70
+#, fuzzy
+msgid "1...9 Pick the first...ninth item in this node's menu.\n"
+msgstr " %-10s Velge første ... niende punkt i nodens meny.\n"
+
+#: info/infodoc.c:71
+#, fuzzy
+msgid "\\%-10[last-menu-item] Pick the last item in this node's menu.\n"
+msgstr "\\%-10[last-menu-item] Velge det siste punktet i nodens meny.\n"
+
+#: info/infodoc.c:72
+#, fuzzy
+msgid "\\%-10[menu-item] Pick a menu item specified by name.\n"
+msgstr " %-10s Velge menypunkt spesifisert ved navn.\n"
+
+#: info/infodoc.c:73
+#, fuzzy
+msgid "\\%-10[xref-item] Follow a cross reference specified by name.\n"
+msgstr ""
+"\\%-10[history-node] Følge en kryssreferanse. Leser navnet til "
+"referansen.\n"
+
+#: info/infodoc.c:74
+#, fuzzy
+msgid "\\%-10[goto-node] Go to a node specified by name.\n"
+msgstr " %-10s Flytte til noden spesifisert av navn.\n"
+
+#: info/infodoc.c:76
+#, fuzzy
+msgid "\\%-10[search] Search forward for a specified string.\n"
+msgstr ""
+" %-10s Søke forlengs gjennom denne Infofilen for en spesifikk streng,\n"
+
+#: info/infodoc.c:77
+#, fuzzy
+msgid "\\%-10[search-previous] Search for previous occurrence.\n"
+msgstr "\\%-10[prev-node] Flytte til forrige node før denne noden.\n"
+
+# This translation is connected to the next one
+#: info/infodoc.c:78
+#, fuzzy
+msgid "\\%-10[search-next] Search for next occurrence.\n"
+msgstr " %-10s Søke etter en spesifikk streng i indeksinnslagene i denne\n"
+
+#: info/infodoc.c:79
+#, fuzzy
+msgid ""
+"\\%-10[index-search] Search for a specified string in the index, and\n"
+" select the node referenced by the first entry found.\n"
+msgstr ""
+"\\%-10[index-search] Søke etter en angitt streng blant indeksinnslagene i "
+"denne\n"
+" infofilen og velge noden til det første innslaget som blir "
+"funnet.\n"
+
+#: info/infodoc.c:81
+#, fuzzy
+msgid "\\%-10[abort-key] Cancel the current operation.\n"
+msgstr "Avbryte gjeldende operasjon"
+
+# The next translation should match the length of this one
+#: info/infodoc.c:89
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"Grunnleggende kommandoer i infovinduer\n"
+"**************************************\n"
+
+#: info/infodoc.c:92
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s Avslutte denne hjelpen.\n"
+
+#: info/infodoc.c:93
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Avslutte Info fullstendig.\n"
+
+#: info/infodoc.c:94
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Starte Infoopplæring.\n"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr " %-10s Flytte til «neste»-noden etter denne noden.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr " %-10s Flytte til «forrige»-noden før denne noden.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s Flytte «opp» fra denne noden.\n"
+
+#: info/infodoc.c:101
+#, fuzzy, c-format
+msgid ""
+" %-10s Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+"\\%-10[menu-item] Velge et menypunkt angitt ved navn.\n"
+" Valg av et menypunkt fører til at en annen node blir valgt.\n"
+
+#: info/infodoc.c:103
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr " %-10s Følge en kryssreferanse. Leser navnet til referansen.\n"
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr " %-10s Flytte til den siste noden sett i dette vinduet.\n"
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr " %-10s Flytte til neste hypertekstlenke innen denne noden.\n"
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s Følge hypertekstlenken under markøren.\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr " %-10s Flytte til «katalog»-noden. Det samme som «g (DIR)».\n"
+
+#: info/infodoc.c:108
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr " %-10s Flytte til «Top»-noden. Det samme som «g Top».\n"
+
+# The next translation should match the length of this one
+#: info/infodoc.c:110
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"Flytte innen en node:\n"
+"---------------------\n"
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s Rulle forover en side.\n"
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s Rulle bakover en side.\n"
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s Gå til begynnelsen av denne noden.\n"
+
+#: info/infodoc.c:115
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s Gå til slutten av denne noden.\n"
+
+#: info/infodoc.c:116
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s Rulle forover 1 linje.\n"
+
+#: info/infodoc.c:117
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s Rulle bakover 1 linje.\n"
+
+# The next translation should match the length of this one
+#: info/infodoc.c:119
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"Andre kommandoer:\n"
+"-----------------\n"
+
+#: info/infodoc.c:121
+#, fuzzy, c-format
+msgid " %-10s Pick first...ninth item in node's menu.\n"
+msgstr " %-10s Velge første ... niende punkt i nodens meny.\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s Velge det siste punktet i nodens meny.\n"
+
+#: info/infodoc.c:125
+#, fuzzy, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr ""
+"\\%-10[index-search] Søke etter en angitt streng blant indeksinnslagene i "
+"denne\n"
+" infofilen og velge noden til det første innslaget som blir "
+"funnet.\n"
+
+#: info/infodoc.c:127
+#, fuzzy, c-format
+msgid ""
+" %-10s Move to node specified by name.\n"
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+"\\%-10[goto-node] Flytte til en node angitt ved navn.\n"
+" Du kan like godt inkludere et filnavn, som i (FILNAVN)"
+"NODENAVN.\n"
+
+#: info/infodoc.c:129
+#, fuzzy, c-format
+msgid ""
+" %-10s Search forward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+"\\%-10[search] Søke forover etter en angitt streng\n"
+" og velge den noden som den neste forekomsten blir funnet i.\n"
+
+#: info/infodoc.c:131
+#, fuzzy, c-format
+msgid ""
+" %-10s Search backward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+"\\%-10[search] Søke forover etter en angitt streng\n"
+" og velge den noden som den neste forekomsten blir funnet i.\n"
+
+#: info/infodoc.c:312
+msgid "The current search path is:\n"
+msgstr "Gjeldende søkesti er:\n"
+
+#: info/infodoc.c:316
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"Kommandoer tilgjengelig i Infovinduer:\n"
+"\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"Kommandoer tilgjengelig i ekkoområdet:\n"
+"\n"
+
+#: info/infodoc.c:343
+#, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+"Følgende kommandoer kan bare bli påkallet via %s:\n"
+"\n"
+
+#: info/infodoc.c:347
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+"Følgende kommandoer kan ikke bli påkallet i det hele tatt:\n"
+"\n"
+
+#: info/infodoc.c:477
+msgid "Display help message"
+msgstr "Vise hjelpemelding"
+
+#: info/infodoc.c:495
+msgid "Visit Info node `(info)Help'"
+msgstr "Vise infonoden «(info)Help»"
+
+#: info/infodoc.c:633
+msgid "Print documentation for KEY"
+msgstr "Skrive ut dokumentasjonen for KEY"
+
+#: info/infodoc.c:645
+#, c-format
+msgid "Describe key: %s"
+msgstr "Beskriv tast: %s"
+
+#: info/infodoc.c:656
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s er udefinert."
+
+#: info/infodoc.c:672 info/infodoc.c:701
+#, c-format
+msgid "%s is undefined."
+msgstr "%s er udefinert."
+
+#: info/infodoc.c:722
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s er definert som %s."
+
+#: info/infodoc.c:1146
+msgid "Show what to type to execute a given command"
+msgstr "Vise hva som må tastes for å utføre en gitt kommando"
+
+#: info/infodoc.c:1150
+msgid "Where is command: "
+msgstr "Hvor er kommandoen: "
+
+#: info/infodoc.c:1172
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "«%s» er ikke på noen taster"
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s kan bare bli påkallet via %s."
+
+#: info/infodoc.c:1183
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s kan bli påkallet via %s."
+
+#: info/infodoc.c:1188
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "Det finnes ingen funksjon ved navn «%s»"
+
+# The next translation should match the length of this one
+#: info/infodoc.c:96
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"Velger andre noder:\n"
+"-------------------\n"
+
+#: info/infokey.c:170
+msgid "incorrect number of arguments"
+msgstr "unøyaktig antall argumenter"
+
+#: info/infokey.c:201
+#, c-format
+msgid "cannot open input file `%s'"
+msgstr "Kan ikke åpne inputfilen «%s»"
+
+#: info/infokey.c:215
+#, c-format
+msgid "cannot create output file `%s'"
+msgstr "Kunne ikke opprette outputfila «%s»"
+
+#: info/infokey.c:226
+#, c-format
+msgid "error writing to `%s'"
+msgstr "feil ved skriving til «%s»"
+
+#: info/infokey.c:232
+#, c-format
+msgid "error closing output file `%s'"
+msgstr "Feil ved lukking av outputfila «%s»"
+
+#: info/infokey.c:450
+msgid "key sequence too long"
+msgstr "tastesekvensen er for lang"
+
+#: info/infokey.c:529
+msgid "missing key sequence"
+msgstr "manglende tastesekvens"
+
+#: info/infokey.c:610
+msgid "NUL character (\\000) not permitted"
+msgstr "NULL-tegn (\\000) er ikke tillatt"
+
+#: info/infokey.c:641
+#, c-format
+msgid "NUL character (^%c) not permitted"
+msgstr "NULL-tegn (^%c) er ikke tillatt"
+
+#: info/infokey.c:665
+msgid "missing action name"
+msgstr "manglende handlingsnavn"
+
+#: info/infokey.c:681 info/infokey.c:756
+msgid "section too long"
+msgstr "avdeling for lang"
+
+#: info/infokey.c:688
+#, c-format
+msgid "unknown action `%s'"
+msgstr "Ukjent handling «%s»"
+
+#: info/infokey.c:698
+msgid "action name too long"
+msgstr "handlingsnavn for langt"
+
+#: info/infokey.c:712
+#, c-format
+msgid "extra characters following action `%s'"
+msgstr "ekstra tegn følger handlingen «%s»"
+
+#: info/infokey.c:723
+msgid "missing variable name"
+msgstr "manglende variabelnavn"
+
+#: info/infokey.c:733
+msgid "missing `=' immediately after variable name"
+msgstr "manglende «=» umiddelbart etter variabelnavn"
+
+#: info/infokey.c:741
+msgid "variable name too long"
+msgstr "variabelnavn for langt"
+
+#: info/infokey.c:765
+msgid "value too long"
+msgstr "verdi for lang"
+
+#: info/infokey.c:890
+#, c-format
+msgid "\"%s\", line %u: "
+msgstr "«%s», linje %u: "
+
+#: info/infokey.c:906
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [INPUT-FILE]\n"
+"\n"
+"Compile infokey source file to infokey file. Reads INPUT-FILE (default\n"
+"$HOME/.infokey) and writes compiled key file to (by default) $HOME/.info.\n"
+"\n"
+"Options:\n"
+" --output FILE output to FILE instead of $HOME/.info\n"
+" --help display this help and exit.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"Bruksmåte: %s [VALG]... [INPUTFIL]\n"
+"\n"
+"Kompilere infokey-kildefil til infokeyfil. Leser INPUTFIL (standard\n"
+"$HOME/.infokey) og skriver kompilert keyfil til $HOME/.info.\n"
+"\n"
+"Valg:\n"
+" --output FIL skrive ut til FIL istedet for $HOME/.info.\n"
+" --help vise denne hjelpen og avslutte.\n"
+" --version vise programversjon og avslutte.\n"
+
+#: info/infomap.c:955
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "Ignorerer ugyldig infokeyfil «%s» - for liten"
+
+#: info/infomap.c:958
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "Ignorerer ugyldig infokeyfil «%s» - for stor"
+
+#: info/infomap.c:971
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "Feil ved lesing av infokeyfil «%s» - for kort"
+
+#: info/infomap.c:990
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+"Ugyldig infokeyfil «%s» (feil magiske tall) -- kjør infokey for å oppdatere "
+"den"
+
+#: info/infomap.c:999
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr "Din infokeyfil «%s» er utdatert -- kjør infokey for å oppdatere den"
+
+#: info/infomap.c:1015
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+"Ugyldig infokeyfil «%s» (feil avdelingslengde) -- kjør infokey for å "
+"oppdatere den"
+
+#: info/infomap.c:1036
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr ""
+"Ugyldig infokeyfil «%s» (feil avdelingskode) -- kjør infokey for å oppdatere "
+"den"
+
+#: info/infomap.c:1171
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr "Feil data i infokeyfil -- noen tastebindinger ble ignorert"
+
+#: info/infomap.c:1221
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr "Feil data i infokeyfil -- noen variabelinnstillinger ble ignorert"
+
+#: info/m-x.c:68
+msgid "Read the name of an Info command and describe it"
+msgstr "Lese inn navnet på en infokommando og beskrive den"
+
+#: info/m-x.c:72
+msgid "Describe command: "
+msgstr "Beskriv kommandoen: "
+
+#: info/m-x.c:95
+msgid "Read a command name in the echo area and execute it"
+msgstr "Lese et kommandonavn i ekkoområdet og utføre den"
+
+#: info/m-x.c:139
+msgid "Cannot execute an `echo-area' command here."
+msgstr "Kan ikke utføre en «echo-area»-kommando her."
+
+#: info/m-x.c:153
+#, c-format
+msgid "Undefined command: %s"
+msgstr "udefinert kommando: %s"
+
+#: info/m-x.c:159
+msgid "Set the height of the displayed window"
+msgstr "Sette høyden på det viste vinduet"
+
+#: info/m-x.c:172
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Sette skjermhøyde til (%d): "
+
+#: info/makedoc.c:166 info/makedoc.c:174
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+" Kildefiler søkt gjennom for å lage denne filen inkluderer:\n"
+"\n"
+
+#: info/makedoc.c:556
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "Kunne ikke manipulere filen %s.\n"
+
+#: info/nodemenu.c:30
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+"\n"
+"* Menu:\n"
+" (Fil)Node Linjer Str. Inneholdene fil\n"
+" --------- ------ ---- ---------------"
+
+#: info/nodemenu.c:201
+msgid ""
+"Here is the menu of nodes you have recently visited.\n"
+"Select one from this menu, or use `\\[history-node]' in another window.\n"
+msgstr ""
+"Her er menyen over nodene du har nylig besøkt.\n"
+"Velg en fra denne menyen, eller bruk «\\[history-node]» i et annet vindu.\n"
+
+#: info/nodemenu.c:223
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr "Lag et vindu inneholdene en meny over alle de nylig besøkte nodene"
+
+#: info/nodemenu.c:303
+msgid "Select a node which has been previously visited in a visible window"
+msgstr "Velge en node som har blitt tidligere besøkt i et synlig vindu"
+
+#: info/nodemenu.c:316
+msgid "Select visited node: "
+msgstr "Velg besøkt node: "
+
+#: info/nodemenu.c:336 info/session.c:2578
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "Referansen forsvant! (%s)."
+
+#: info/search.c:166
+#, c-format
+msgid "regexp error: %s"
+msgstr ""
+
+#: info/session.c:164
+#, c-format
+msgid ""
+"Welcome to Info version %s. Type \\[get-help-window] for help, \\[menu-item] "
+"for menu item."
+msgstr ""
+"Velkommen til Info versjon %s. Trykk «\\[get-help-window]» for hjelp,\n"
+"«\\[menu-item]» for menypunkt."
+
+#: info/session.c:625
+msgid "Move down to the next line"
+msgstr "Flytte ned til neste linje"
+
+#: info/session.c:661
+msgid "Move up to the previous line"
+msgstr "Flytte opp til den forrige linjen"
+
+#: info/session.c:931
+msgid "Move to the end of the line"
+msgstr "Flytte til slutten av linjen"
+
+#: info/session.c:942
+msgid "Move to the start of the line"
+msgstr "Flytte til starten av linjen"
+
+#: info/session.c:1142
+msgid "Next"
+msgstr "neste"
+
+#: info/session.c:1158 info/session.c:1283
+msgid "No more nodes within this document."
+msgstr "Ingen flere noder i dette dokumentet."
+
+#: info/session.c:1309
+msgid "No `Prev' for this node."
+msgstr "Ingen «forrige» for denne noden."
+
+#: info/session.c:1329
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr "Ingen «forrige» eller «opp» for denne noden i dette dokumentet."
+
+#: info/session.c:1391
+msgid "Move forwards or down through node structure"
+msgstr "Flytte forover eller ned gjennom nodestrukturen"
+
+#: info/session.c:1407
+msgid "Move backwards or up through node structure"
+msgstr "Flytte tilbake eller opp gjennom nodestrukturen"
+
+#: info/session.c:1508
+msgid "Scroll forward in this window"
+msgstr "Rulle forover i dette vinduet"
+
+#: info/session.c:1516
+msgid "Scroll forward in this window and set default window size"
+msgstr "Rulle forover i dette vinduet og sette standard vindustørrelse"
+
+#: info/session.c:1524
+msgid "Scroll forward in this window staying within node"
+msgstr "Rulle forover i dette vinduet, men forbli innenfor noden"
+
+#: info/session.c:1532
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr ""
+"Rulle forover i dette vinduet, forbli innenfor noden og sette standard "
+"vindustørrelse"
+
+#: info/session.c:1540
+msgid "Scroll backward in this window"
+msgstr "Rulle bakover i dette vinduet"
+
+#: info/session.c:1548
+msgid "Scroll backward in this window and set default window size"
+msgstr "Rulle bakover i dette vinduet og sette standard vindustørrelse"
+
+#: info/session.c:1557
+msgid "Scroll backward in this window staying within node"
+msgstr "Rulle bakover i dette vinduet, men forbli innenfor noden"
+
+#: info/session.c:1565
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr ""
+"Rulle bakover i dette vinduet, forbli innenfor noden og sette standard "
+"vindustørrelse"
+
+#: info/session.c:1573
+msgid "Move to the start of this node"
+msgstr "Flytte til starten av denne noden"
+
+#: info/session.c:1580
+msgid "Move to the end of this node"
+msgstr "Flytte til slutten av denne noden"
+
+#: info/session.c:1587
+msgid "Scroll down by lines"
+msgstr "Rulle ned pr. antall linjer"
+
+#: info/session.c:1604
+msgid "Scroll up by lines"
+msgstr "Rulle opp pr. antall linjer"
+
+#: info/session.c:1622
+msgid "Scroll down by half screen size"
+msgstr "Rulle ned en halv side"
+
+#: info/session.c:1648
+msgid "Scroll up by half screen size"
+msgstr "Rulle opp en halv side"
+
+#: info/session.c:1677
+msgid "Select the next window"
+msgstr "Velge neste vindu"
+
+#: info/session.c:1716
+msgid "Select the previous window"
+msgstr "Velge forrige vindu"
+
+#: info/session.c:1767
+msgid "Split the current window"
+msgstr "Dele gjeldende vindu"
+
+#: info/session.c:1848
+msgid "Delete the current window"
+msgstr "Slette den gjeldende vindu"
+
+#: info/session.c:1856
+msgid "Cannot delete a permanent window"
+msgstr "Kan ikke slette et permanent vindu"
+
+#: info/session.c:1888
+msgid "Delete all other windows"
+msgstr "Slette alle andre vinduer"
+
+#: info/session.c:1934
+msgid "Scroll the other window"
+msgstr "Rulle det andre vinduet"
+
+#: info/session.c:1955
+msgid "Scroll the other window backward"
+msgstr "Rulle det andre vinduet bakover"
+
+#: info/session.c:1961
+msgid "Grow (or shrink) this window"
+msgstr "Øke (eller minke) dette vinduet"
+
+#: info/session.c:1972
+msgid "Divide the available screen space among the visible windows"
+msgstr "Dele den tilgjengelige skjermplassen mellom de synlige vinduene"
+
+#: info/session.c:1979
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "Veksle tilstanden til linjebryting i gjeldende vindu"
+
+#: info/session.c:1986
+msgid "Toggle the usage of regular expressions in searches"
+msgstr ""
+
+#: info/session.c:1990
+msgid "Using regular expressions for searches."
+msgstr ""
+
+#: info/session.c:1991
+msgid "Using literal strings for searches."
+msgstr ""
+
+#: info/session.c:2162
+msgid "Select the Next node"
+msgstr "Velge neste node"
+
+#: info/session.c:2170
+msgid "Select the Prev node"
+msgstr "Velge forrige node"
+
+#: info/session.c:2178
+msgid "Select the Up node"
+msgstr "Velge oppnoden"
+
+#: info/session.c:2185
+msgid "Select the last node in this file"
+msgstr "Velge den siste noden i denne filen"
+
+#: info/session.c:2212 info/session.c:2245
+msgid "This window has no additional nodes"
+msgstr "Dette vinduet har ingen andre noder"
+
+#: info/session.c:2218
+msgid "Select the first node in this file"
+msgstr "Velge første node i denne filen"
+
+#: info/session.c:2252
+msgid "Select the last item in this node's menu"
+msgstr "Velge det siste punktet i nodens meny"
+
+#: info/session.c:2258
+msgid "Select this menu item"
+msgstr "Velge dette menypunktet"
+
+#: info/session.c:2291
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "Det er ikke %d punkter i denne menyen."
+
+#: info/session.c:2485 info/session.c:2486
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Menypunkt (%s): "
+
+#: info/session.c:2489
+msgid "Menu item: "
+msgstr "Menypunkt: "
+
+#: info/session.c:2496 info/session.c:2497
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Følge kryssreferanse (%s): "
+
+#: info/session.c:2500
+msgid "Follow xref: "
+msgstr "Følge kryssreferanse: "
+
+#: info/session.c:2629
+msgid "Read a menu item and select its node"
+msgstr "Lese et menyvalg og velge dens node"
+
+#: info/session.c:2637
+msgid "Read a footnote or cross reference and select its node"
+msgstr "Lese en fotnote eller kryssreferanse og velge dens node"
+
+#: info/session.c:2643
+msgid "Move to the start of this node's menu"
+msgstr "Flytte til starten av denne nodens meny"
+
+#: info/session.c:2667
+msgid "Visit as many menu items at once as possible"
+msgstr "Besøke så mange menypunkter som mulig samtidig"
+
+#: info/session.c:2695
+msgid "Read a node name and select it"
+msgstr "Lese et nodenavn og velge det"
+
+#: info/session.c:2750 info/session.c:2755
+msgid "Goto node: "
+msgstr "Gå til node: "
+
+#: info/session.c:2819
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "Ingen meny i noden «%s»."
+
+#: info/session.c:2865
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "Ingen menypunkt «%s» i noden «%s»."
+
+#: info/session.c:2895
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr "Klarte ikke å finne noden referert av «%s» i «%s»."
+
+#: info/session.c:2945
+msgid "Read a list of menus starting from dir and follow them"
+msgstr "Lese en liste over menyer fra dir og følge dem"
+
+#: info/session.c:2947
+msgid "Follow menus: "
+msgstr "Følge menyer: "
+
+#: info/session.c:3140
+msgid "Find the node describing program invocation"
+msgstr "Finne noden som beskriver bruksmåten for programmet"
+
+#: info/session.c:3142
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "Finne Invocation-noden til [%s]: "
+
+#: info/session.c:3180
+msgid "Read a manpage reference and select it"
+msgstr "Lese en manualside-referanse og velge den"
+
+#: info/session.c:3184
+msgid "Get Manpage: "
+msgstr "Hent manualsiden: "
+
+#: info/session.c:3214
+msgid "Select the node `Top' in this file"
+msgstr "Velge «Top»-noden i denne filen"
+
+#: info/session.c:3220
+msgid "Select the node `(dir)'"
+msgstr "Velge noden «(dir)»"
+
+#: info/session.c:3237 info/session.c:3239
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Slette noden (%s): "
+
+#: info/session.c:3291
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "Kan ikke slette noden «%s»"
+
+#: info/session.c:3301
+msgid "Cannot kill the last node"
+msgstr "Kan ikke slette den forrige noden"
+
+#: info/session.c:3387
+msgid "Select the most recently selected node"
+msgstr "Velge den sist valgte noden"
+
+#: info/session.c:3393
+msgid "Kill this node"
+msgstr "Slette denne noden"
+
+#: info/session.c:3401
+msgid "Read the name of a file and select it"
+msgstr "Lese inn navnet på en fil og velge den"
+
+#: info/session.c:3405
+msgid "Find file: "
+msgstr "Finne fil: "
+
+#: info/session.c:3422
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "Kan ikke finne «%s»."
+
+#: info/session.c:3465 info/session.c:3583
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "Kunne ikke opprette utskriftsfil «%s»."
+
+#: info/session.c:3479 info/session.c:3601 info/session.c:3661
+msgid "Done."
+msgstr "Ferdig."
+
+#: info/session.c:3534
+#, c-format
+msgid "Writing node %s..."
+msgstr "Skriver noden «%s»..."
+
+# I need a better substitute for the verb «to pipe».
+# «Å pipe» sounds no good to me.
+#: info/session.c:3610
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr "«Pipe» innholdet av denne noden gjennom INFO_PRINT_COMMAND"
+
+#: info/session.c:3645
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "Kan ikke åpne «pipe» til «%s»."
+
+#: info/session.c:3651
+#, c-format
+msgid "Printing node %s..."
+msgstr "Skriver ut noden «%s»..."
+
+#: info/session.c:3900
+msgid "Search continued from the end of the document."
+msgstr ""
+
+#: info/session.c:3905
+#, fuzzy
+msgid "Search continued from the beginning of the document."
+msgstr "Slette til begynnelsen av linjen"
+
+#: info/session.c:3922
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "Søker i delfil «%s»..."
+
+#: info/session.c:3979
+msgid "Read a string and search for it case-sensitively"
+msgstr ""
+"Lese inn en streng og søke etter den med skille på store og små bokstaver"
+
+#: info/session.c:3986
+msgid "Read a string and search for it"
+msgstr "Lese inn en streng og søke etter den"
+
+#: info/session.c:3994
+msgid "Read a string and search backward for it"
+msgstr "Lese inn en streng og søke bakover etter den"
+
+#: info/session.c:4030 info/session.c:4036
+#, fuzzy, c-format
+msgid "%s%s%s [%s]: "
+msgstr "%s%setter streng [%s]: "
+
+#: info/session.c:4031 info/session.c:4037
+msgid "Regexp search"
+msgstr ""
+
+#: info/session.c:4032 info/session.c:4038
+#, fuzzy
+msgid " case-sensitively"
+msgstr " med skille på store og små bokstaver "
+
+#: info/session.c:4033 info/session.c:4039
+#, fuzzy
+msgid " backward"
+msgstr "Søke bakover"
+
+#: info/session.c:4037
+msgid "Search"
+msgstr "Søke"
+
+#: info/session.c:4079
+msgid "Search failed."
+msgstr "Søk mislyktes"
+
+#: info/session.c:4097
+msgid "Repeat last search in the same direction"
+msgstr "Gjenta forrige søk i samme retning"
+
+#: info/session.c:4100 info/session.c:4110
+msgid "No previous search string"
+msgstr "Ingen tidligere søkestreng"
+
+#: info/session.c:4107
+msgid "Repeat last search in the reverse direction"
+msgstr "Gjenta forrige søk i motsatt retning"
+
+#: info/session.c:4126 info/session.c:4132
+msgid "Search interactively for a string as you type it"
+msgstr "Søke interaktivt for en streng mens du skriver"
+
+#: info/session.c:4212
+#, fuzzy
+msgid "Regexp I-search backward: "
+msgstr "I-søk bakover: "
+
+#: info/session.c:4213
+msgid "I-search backward: "
+msgstr "I-søk bakover: "
+
+#: info/session.c:4215
+#, fuzzy
+msgid "Regexp I-search: "
+msgstr "I-søk: "
+
+#: info/session.c:4216
+msgid "I-search: "
+msgstr "I-søk: "
+
+#: info/session.c:4241 info/session.c:4243
+msgid "Failing "
+msgstr "Mislyktes "
+
+#: info/session.c:4734
+msgid "Move to the previous cross reference"
+msgstr "Flytte til forrige kryssreferanse"
+
+#: info/session.c:4752
+msgid "Move to the next cross reference"
+msgstr "Flytte til neste kryssreferanse"
+
+#: info/session.c:4774
+msgid "Select reference or menu item appearing on this line"
+msgstr "Velge referanse eller menypunkt på denne linjen"
+
+#: info/session.c:4797
+msgid "Cancel current operation"
+msgstr "Avbryte gjeldende operasjon"
+
+#: info/session.c:4804
+msgid "Quit"
+msgstr "Avbrutt"
+
+#: info/session.c:4813
+msgid "Move the cursor to a specific line of the window"
+msgstr "Flytte markøren til en angitt linje i vinduet"
+
+#: info/session.c:4845
+msgid "Redraw the display"
+msgstr "Tegne skjermen på nytt"
+
+#: info/session.c:4882
+msgid "Quit using Info"
+msgstr "Avslutte Info"
+
+#: info/session.c:4895
+msgid "Run command bound to this key's lowercase variant"
+msgstr "Kjør kommandoen knyttet til denne tastens «liten-bokstav-variant»"
+
+#: info/session.c:4906
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "Ukjent kommando (%s)."
+
+#: info/session.c:4909
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "«%s» er ugyldig"
+
+#: info/session.c:4910
+#, c-format
+msgid "`%s' is invalid"
+msgstr "«%s» er ugyldig"
+
+#: info/session.c:5125
+msgid "Add this digit to the current numeric argument"
+msgstr "Legge til dette siffret til det gjeldende numeriske argumentet"
+
+#: info/session.c:5134
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "Starte (eller multiplisere med 4) den gjeldende numeriske argumentet"
+
+#: info/session.c:5149
+msgid "Internally used by \\[universal-argument]"
+msgstr "Brukt internt av \\[universal-argument]"
+
+#: info/tilde.c:336
+#, c-format
+msgid "readline: Out of virtual memory!\n"
+msgstr "readline: Tomt for virtuelt minne!\n"
+
+#: info/variables.c:37
+msgid "When \"On\", footnotes appear and disappear automatically"
+msgstr "Når «On», oppstår og forsvinner fotnoter automatisk"
+
+#: info/variables.c:41
+msgid "When \"On\", creating or deleting a window resizes other windows"
+msgstr ""
+"Når «On», laging eller fjerning av vinduer endrer størrelsen på andre vinduer"
+
+#: info/variables.c:45
+msgid "When \"On\", flash the screen instead of ringing the bell"
+msgstr "Når «On», blink skjermen istedet for å ringe i bjellen."
+
+#: info/variables.c:49
+msgid "When \"On\", errors cause the bell to ring"
+msgstr "Når «On», feil får bjellen til å ringe"
+
+#: info/variables.c:53
+msgid "When \"On\", Info garbage collects files which had to be uncompressed"
+msgstr "Når «On», Info søppelhenter filer som måtte dekomprimeres"
+
+#: info/variables.c:56
+msgid "When \"On\", the portion of the matched search string is highlighted"
+msgstr "Når «On», den delen av en matchende søkestreng blir uthevet"
+
+#: info/variables.c:60
+msgid "Controls what happens when scrolling is requested at the end of a node"
+msgstr ""
+"Kontrollerer hva som skjer når rulling er ønsket ved slutten av en node"
+
+#: info/variables.c:65
+msgid "Same as scroll-behaviour"
+msgstr ""
+
+#: info/variables.c:69
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr "Antall linjer som skal rulles når markøren flyttes utenfor vinduet"
+
+#: info/variables.c:73
+msgid "Controls whether scroll-behavior affects cursor movement commands"
+msgstr ""
+
+#: info/variables.c:77
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr "Når «On», aksepterer og viser Info ISO-Latin-tegn"
+
+#: info/variables.c:81
+#, fuzzy
+msgid ""
+"What to do when a scrolling command is issued at the end of the last node"
+msgstr ""
+"Kontrollerer hva som skjer når rulling er ønsket ved slutten av en node"
+
+#: info/variables.c:88
+msgid "Explain the use of a variable"
+msgstr "Forklar bruken av en variabel"
+
+#: info/variables.c:94
+msgid "Describe variable: "
+msgstr "Beskriv variabel: "
+
+#: info/variables.c:113
+msgid "Set the value of an Info variable"
+msgstr "Sette verdien til en Infovariabel"
+
+#: info/variables.c:119
+msgid "Set variable: "
+msgstr "Sett variabel: "
+
+#: info/variables.c:137
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "Sette %s til verdien (%d): "
+
+#: info/variables.c:178
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "Sette %s til verdien (%s): "
+
+#: info/window.c:1026
+msgid "--*** Tags out of Date ***"
+msgstr "--*** Tagger er ute av synk ***"
+
+#: info/window.c:1037
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), linjer ----, "
+
+#: info/window.c:1044
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d linjer --%s--"
+
+#: info/window.c:1048
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d linjer --%s--"
+
+#: info/window.c:1055
+#, c-format
+msgid " Subfile: %s"
+msgstr " Delfil: %s"
+
+#: install-info/install-info.c:221
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: advarsel: "
+
+#: install-info/install-info.c:270
+#, c-format
+msgid " for %s"
+msgstr " for %s"
+
+#: install-info/install-info.c:500
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr "\tPrøv «%s --help» for en komplett liste over valg.\n"
+
+#: install-info/install-info.c:508
+#, fuzzy, c-format
+msgid "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+msgstr "Bruksmåte: %s [VALG]... TEXINFOFIL...\n"
+
+#: install-info/install-info.c:510
+msgid "Add or remove entries in INFO-FILE from the Info directory DIR-FILE."
+msgstr ""
+
+#: install-info/install-info.c:513
+msgid ""
+"Options:\n"
+" --debug report what is being done.\n"
+" --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+" don't insert any new entries.\n"
+" --description=TEXT the description of the entry is TEXT; used with\n"
+" the --name option to become synonymous with the\n"
+" --entry option.\n"
+" --dir-file=NAME specify file name of Info directory file;\n"
+" equivalent to using the DIR-FILE argument.\n"
+" --dry-run same as --test."
+msgstr ""
+
+#: install-info/install-info.c:525
+msgid ""
+" --entry=TEXT insert TEXT as an Info directory entry.\n"
+" TEXT is written as an Info menu item line followed\n"
+" by zero or more extra lines starting with "
+"whitespace.\n"
+" If you specify more than one entry, all are added.\n"
+" If you don't specify any entries, they are determined\n"
+" from information in the Info file itself.\n"
+" When removing, TEXT specifies the entry to remove.\n"
+" TEXT is only removed as a last resort, if the\n"
+" entry as determined from the Info file is not "
+"present,\n"
+" and the basename of the Info file isn't found either."
+msgstr ""
+
+#: install-info/install-info.c:537
+msgid ""
+" --help display this help and exit.\n"
+" --info-dir=DIR same as --dir-file=DIR/dir.\n"
+" --info-file=FILE specify Info file to install in the directory;\n"
+" equivalent to using the INFO-FILE argument.\n"
+" --item=TEXT same as --entry=TEXT.\n"
+" --keep-old do not replace entries, or remove empty sections.\n"
+" --menuentry=TEXT same as --name=TEXT.\n"
+" --name=TEXT the name of the entry is TEXT; used with --description\n"
+" to become synonymous with the --entry option.\n"
+" --no-indent do not format new entries in the DIR file.\n"
+" --quiet suppress warnings."
+msgstr ""
+
+#: install-info/install-info.c:550
+msgid ""
+" --regex=R put this file's entries in all sections that match the\n"
+" regular expression R (ignoring case).\n"
+" --remove same as --delete.\n"
+" --remove-exactly only remove if the info file name matches exactly;\n"
+" suffixes such as .info and .gz are not ignored.\n"
+" --section=SEC put entries in section SEC of the directory.\n"
+" If you specify more than one section, all the entries\n"
+" are added in each of the sections.\n"
+" If you don't specify any sections, they are "
+"determined\n"
+" from information in the Info file itself.\n"
+" --section R SEC equivalent to --regex=R --section=SEC --add-once."
+msgstr ""
+
+#: install-info/install-info.c:563
+msgid ""
+" --silent suppress warnings.\n"
+" --test suppress updating of DIR-FILE.\n"
+" --version display version information and exit."
+msgstr ""
+
+#: install-info/install-info.c:570
+#, fuzzy
+msgid ""
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+"Send bugrapporter til bug-texinfo@gnu.org,\n"
+"generelle spørsmål og diskusjoner til help-texinfo@gnu.org.\n"
+"Websida for Texinfo: http://www.gnu.org/software/texinfo/"
+
+#: install-info/install-info.c:597
+#, c-format
+msgid ""
+"This is the file .../info/dir, which contains the\n"
+"topmost node of the Info hierarchy, called (dir)Top.\n"
+"The first time you invoke Info you start off looking at this node.\n"
+"\n"
+"%s\tThis is the top of the INFO tree\n"
+"\n"
+" This (the Directory node) gives a menu of major topics.\n"
+" Typing \"q\" exits, \"?\" lists all Info commands, \"d\" returns here,\n"
+" \"h\" gives a primer for first-timers,\n"
+" \"mEmacs<Return>\" visits the Emacs manual, etc.\n"
+"\n"
+" In Emacs, you can click mouse button 2 on a menu item or cross reference\n"
+" to select it.\n"
+"\n"
+"%s\n"
+msgstr ""
+"Dette er filen .../info/dir, som inneholder den øverste\n"
+"noden i Info-hierarkiet, kalt (dir)Top.\n"
+"Første gangen du starter Info begynner du i denne noden.\n"
+"\n"
+"%s\tDette er toppen av INFO-treet\n"
+"\n"
+" Denne katalognoden gir en meny over alle hovedemner.\n"
+" Inntasting av «q» avslutter, «?» lister alle Info-kommandoene, «d» returner "
+"hit,\n"
+" «h» gir en innføring for nybegynnere,\n"
+" «mEmacs<Return>» besøker Emacs-manualen, osv.\n"
+"\n"
+" I Emacs kan du klikke med musknapp 2 på et menypunkt eller kryssreferanse\n"
+" for å velge den.\n"
+"\n"
+"%s\n"
+
+#: install-info/install-info.c:622
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr "%s: kunne ikke lese (%s) og kunne ikke opprette (%s)\n"
+
+#: install-info/install-info.c:715
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: tom fil"
+
+#: install-info/install-info.c:1046 install-info/install-info.c:1086
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "START-INFO-DIR-ENTRY uten tilhørende END-INFO-DIR-ENTRY"
+
+#: install-info/install-info.c:1081
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "END-INFO-DIR-ENTRY uten tilhørende START-INFO-DIR-ENTRY"
+
+#: install-info/install-info.c:1946 install-info/install-info.c:1956
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr "%s: har allerede en dirfil: %s\n"
+
+#: install-info/install-info.c:2036
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: Spesifiser infofilen bare en gang.\n"
+
+#: install-info/install-info.c:2069
+#, c-format
+msgid "Extra regular expression specified, ignoring `%s'"
+msgstr ""
+
+#: install-info/install-info.c:2081
+#, c-format
+msgid "Error in regular expression `%s': %s"
+msgstr ""
+
+#: install-info/install-info.c:2139
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "overflødig argument på kommandolinjen «%s»"
+
+#: install-info/install-info.c:2143
+msgid "No input file specified; try --help for more information."
+msgstr "Ingen innfil angitt; prøv --help for mer informasjon."
+
+#: install-info/install-info.c:2146
+msgid "No dir file specified; try --help for more information."
+msgstr "Ingen dir-fil angitt; prøv --help for mer informasjon."
+
+#: install-info/install-info.c:2288
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "ingen info-dir-oppføring i «%s»"
+
+#: install-info/install-info.c:2536
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "fant ingen oppføringer for «%s»; ingenting slettet"
+
+#: lib/xexit.c:54
+msgid "ferror on stdout\n"
+msgstr ""
+
+#: lib/xexit.c:59
+msgid "fflush error on stdout\n"
+msgstr ""
+
+#: makeinfo/cmds.c:582 makeinfo/cmds.c:604
+#, c-format
+msgid "arguments to @%s ignored"
+msgstr "argumentene til @%s ble ignorert"
+
+#: makeinfo/cmds.c:779
+msgid "January"
+msgstr "januar"
+
+#: makeinfo/cmds.c:779
+msgid "February"
+msgstr "februar"
+
+#: makeinfo/cmds.c:779
+msgid "March"
+msgstr "mars"
+
+#: makeinfo/cmds.c:779
+msgid "April"
+msgstr "april"
+
+#: makeinfo/cmds.c:779
+msgid "May"
+msgstr "mai"
+
+#: makeinfo/cmds.c:780
+msgid "June"
+msgstr "juni"
+
+#: makeinfo/cmds.c:780
+msgid "July"
+msgstr "juli"
+
+#: makeinfo/cmds.c:780
+msgid "August"
+msgstr "august"
+
+#: makeinfo/cmds.c:780
+msgid "September"
+msgstr "september"
+
+#: makeinfo/cmds.c:780
+msgid "October"
+msgstr "oktober"
+
+#: makeinfo/cmds.c:781
+msgid "November"
+msgstr "november"
+
+#: makeinfo/cmds.c:781
+msgid "December"
+msgstr "desember"
+
+#: makeinfo/cmds.c:1131
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "usannsynlig tegn %c i @var"
+
+#: makeinfo/cmds.c:1174
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "@sc-argument med store bokstaver, dermed ingen effekt"
+
+#: makeinfo/cmds.c:1229
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "«{» forventet, men så «%c»"
+
+#: makeinfo/cmds.c:1269
+msgid "end of file inside verb block"
+msgstr "slutt-på-fila inne i verb-blokk"
+
+#: makeinfo/cmds.c:1277
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "«{» forventet, men så «%c»"
+
+#: makeinfo/cmds.c:1308
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+"@strong{Note...} lager en overflødig kryssreferanse i Info; skriv om for å "
+"unngå dette"
+
+#: makeinfo/cmds.c:1504
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s er utgått"
+
+#: makeinfo/cmds.c:1612
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "@sp krever et positivt numerisk argument, ikke `%s'"
+
+#: makeinfo/cmds.c:2023 makeinfo/footnote.c:81
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "Ugyldig argument til %c%s"
+
+#: makeinfo/cmds.c:2033 makeinfo/makeinfo.c:4317
+msgid "asis"
+msgstr "asis"
+
+#: makeinfo/cmds.c:2035 makeinfo/cmds.c:2065 makeinfo/makeinfo.c:4319
+msgid "none"
+msgstr "none"
+
+#: makeinfo/cmds.c:2049
+#, c-format
+msgid "Bad argument to @%s"
+msgstr "Ugyldig argument til @%s"
+
+#: makeinfo/cmds.c:2063
+msgid "insert"
+msgstr "insert"
+
+#: makeinfo/cmds.c:2079
+#, fuzzy, c-format
+msgid "Bad argument to @%s: %s"
+msgstr "Ugyldig argument til @%s"
+
+#: makeinfo/cmds.c:2162
+#, c-format
+msgid "Expected @%s on or off, not `%s'"
+msgstr ""
+
+#: makeinfo/cmds.c:2182
+#, c-format
+msgid "Only @%s 10 or 11 is supported, not `%s'"
+msgstr ""
+
+#: makeinfo/defun.c:83
+msgid "Missing `}' in @def arg"
+msgstr "Manglende «}» i @def-arg"
+
+#: makeinfo/defun.c:711
+#, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr "Må være i et «@%s»-miljø for å bruke «@%s»"
+
+#: makeinfo/files.c:434
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:637
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr "`%s' utelatt før outputfilnavn"
+
+#: makeinfo/files.c:645
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr "`%s' utelatt pga skriving til stdout"
+
+#: makeinfo/files.c:693
+msgid "Output buffer not empty."
+msgstr "Outputbuffer er ikke tomt."
+
+#: makeinfo/float.c:181
+#, c-format
+msgid "Requested float type `%s' not previously used"
+msgstr ""
+
+#: makeinfo/float.c:376 makeinfo/float.c:382 makeinfo/index.c:959
+#: makeinfo/index.c:965
+msgid "See "
+msgstr "Se "
+
+#: makeinfo/footnote.c:149
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "«%c%s» trenger et argument «{...}», ikke bare «%s»"
+
+#: makeinfo/footnote.c:164
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "Ingen avsluttende krøllparentes for fotnoten «%s»"
+
+#: makeinfo/footnote.c:197
+msgid "Footnote defined without parent node"
+msgstr "Fotnote definert uten foreldrenode"
+
+#: makeinfo/footnote.c:209
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "Fotnoter i fotnoter er ikke tillatt"
+
+#: makeinfo/footnote.c:301 makeinfo/index.c:187
+msgid "Footnotes"
+msgstr "Fotnoter"
+
+#: makeinfo/html.c:91
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr "%s: kunne ikke åpne --css-file: %s"
+
+#: makeinfo/html.c:180
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr "%s:%d: --css-file endte i en kommentar"
+
+#: makeinfo/html.c:426
+msgid "[unexpected] no html tag to pop"
+msgstr "[uforventet] kunne ikke poppe neste htmltagg"
+
+#: makeinfo/html.c:800
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "[uforventet] ugyldig nodenavn: «%s»"
+
+#: makeinfo/index.c:167
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "Ukjent indeks «%s»"
+
+#: makeinfo/index.c:232
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr "Info kan ikke håndtere `:' i indeksinnslaget `%s'"
+
+#: makeinfo/index.c:410
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "Indeksen «%s» eksisterer allerede"
+
+#: makeinfo/index.c:453
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "Ukjent indeks «%s» og/eller «%s» i @synindex"
+
+#: makeinfo/index.c:676
+msgid "(line )"
+msgstr "(linje )"
+
+#: makeinfo/index.c:684
+#, c-format
+msgid "(line %*d)"
+msgstr "(linje %*d)"
+
+#: makeinfo/index.c:765
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "Ukjent indeks «%s» i @printindex"
+
+#: makeinfo/index.c:834
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "Innslag for indeksen «%s» utenfor node"
+
+#: makeinfo/index.c:837 makeinfo/index.c:873
+msgid "(outside of any node)"
+msgstr "(utenfor noder)"
+
+#: makeinfo/insertion.c:161
+msgid "@item not allowed in argument to @itemize"
+msgstr "@item er ikke tillatt som argument til @itemize"
+
+#: makeinfo/insertion.c:242
+msgid "Broken-Type in insertion_type_pname"
+msgstr "Broken-Type i insertion_type_pname"
+
+#: makeinfo/insertion.c:338
+msgid "Enumeration stack overflow"
+msgstr "Stakkoverflyt ved oppramsing"
+
+#: makeinfo/insertion.c:370
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "bokstavoverflyt, starter på nytt ved %c"
+
+#: makeinfo/insertion.c:639
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s krever et argument: formattereren for %citem"
+
+#: makeinfo/insertion.c:727
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr "%cfloat-miljøer kan ikke nøstes"
+
+#: makeinfo/insertion.c:981
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "`@end' forventet «%s», men så «%s»"
+
+#: makeinfo/insertion.c:1349
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "Ingen tilsvarende «%cend %s»"
+
+#: makeinfo/insertion.c:1618
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s krever en bokstav eller et siffer"
+
+#: makeinfo/insertion.c:1718
+msgid "end of file inside verbatim block"
+msgstr "slutt-på-filen inne i verbatimblokk"
+
+#: makeinfo/insertion.c:1942
+#, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "@%s er meningsløs utenfor et «@float»-miljø"
+
+#: makeinfo/insertion.c:1978
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "@menu sett før første @node, oppretter «Top»-noden"
+
+#: makeinfo/insertion.c:1979
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr ""
+"kanskje burde din @top-node bli pakket inn i @ifnottex istedet for @ifinfo?"
+
+#: makeinfo/insertion.c:1991
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "@detailmenu sett før første node, oppretter «Top»-noden"
+
+#: makeinfo/insertion.c:2047
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr "@%s gir ikke mening utenfor «@titlepage»- og «@quotation»-miljøer"
+
+#: makeinfo/insertion.c:2061
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "@%s er meningsløs utenfor et «@titlepage»-miljø"
+
+#: makeinfo/insertion.c:2092
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "Umatchet «%c%s»"
+
+#: makeinfo/insertion.c:2097
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "«%c%s» trenger noe etter den"
+
+#: makeinfo/insertion.c:2103
+#, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "Ugyldig argument «%s» til «%s», bruker «%s»"
+
+#: makeinfo/insertion.c:2200
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "@%s er meningsløs innenfor en «@%s»-blokk"
+
+#: makeinfo/insertion.c:2209
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "@itemx er meningsløs innenfor en «@%s»-blokk"
+
+#: makeinfo/insertion.c:2383
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "%c%s funnet utenfor en innsettingsblokk"
+
+#: makeinfo/lang.c:1218
+#, c-format
+msgid "no default territory known for language `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:1281
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr "%s er ikke en gyldig ISO 639-språkkode"
+
+#: makeinfo/lang.c:1399
+#, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "ugjenkjennelig kodingsnavn «%s»"
+
+#: makeinfo/lang.c:1407
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "beklager, kodingen «%s» er ikke støttet"
+
+#: makeinfo/lang.c:1492
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "Ugyldig kodet tegn «%s»"
+
+#: makeinfo/lang.c:1800
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr "%c%s forventer «i» eller «j» som argument, ikke «%c»"
+
+#: makeinfo/lang.c:1804
+#, c-format
+msgid "%c%s expects a single character `i' or `j' as argument"
+msgstr "%c%s forventer et enkelt tegn, «i» eller «j» som argument"
+
+#: makeinfo/macro.c:128
+#, c-format
+msgid "macro `%s' previously defined"
+msgstr "makroen «%s» er tidligere definert"
+
+#: makeinfo/macro.c:132
+#, c-format
+msgid "here is the previous definition of `%s'"
+msgstr "her er den tidligere definisjonen av «%s»"
+
+#: makeinfo/macro.c:359
+#, c-format
+msgid "\\ in macro expansion followed by `%s' instead of parameter name"
+msgstr "\\ i makroekspansjon fulgt av «%s» istedet for parameternavn"
+
+#: makeinfo/macro.c:401
+#, c-format
+msgid "Macro `%s' called on line %d with too many args"
+msgstr "Makroen «%s» kalt på linje %d med for mange argumenter"
+
+#: makeinfo/macro.c:580
+#, c-format
+msgid "%cend macro not found"
+msgstr "%cend macro ikke funnet"
+
+#: makeinfo/macro.c:591
+msgid "@allow-recursion is deprecated; please use @rmacro instead"
+msgstr ""
+
+#: makeinfo/macro.c:606
+msgid "@quote-arg is deprecated; arguments are quoted by default"
+msgstr ""
+
+#: makeinfo/macro.c:649
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "umatchet @end %s med @%s"
+
+#: makeinfo/makeinfo.c:188
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "For mange feil! Ga opp.\n"
+
+#: makeinfo/makeinfo.c:306
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: advarsel: "
+
+#: makeinfo/makeinfo.c:325 makeinfo/makeinfo.c:2340
+#, c-format
+msgid "Misplaced %c"
+msgstr "Feilplassert %c"
+
+#: makeinfo/makeinfo.c:344
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Prøv «%s --help» for mer informasjon.\n"
+
+#: makeinfo/makeinfo.c:347
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "Bruksmåte: %s [VALG]... TEXINFOFIL...\n"
+
+#: makeinfo/makeinfo.c:350
+msgid ""
+"Translate Texinfo source documentation to various other formats, by default\n"
+"Info files suitable for reading online with Emacs or standalone GNU Info.\n"
+msgstr ""
+"Oversette Texinfodokumentasjon til forskjellige andre formater:\n"
+"Infofiler for lesing online med Emacs eller den frittstående GNU Info.\n"
+
+#: makeinfo/makeinfo.c:354
+#, fuzzy, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\n"
+" --document-language=STR locale to use in translating Texinfo keywords\n"
+" for the output document (default C).\n"
+" --force preserve output even if errors.\n"
+" --help display this help and exit.\n"
+" --no-validate suppress node cross-reference validation.\n"
+" --no-warn suppress warnings (but not errors).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"Generelle valg:\n"
+" --error-limit=ANT avbryte etter ANT feil (standard %d).\n"
+" --force bevare output selv med feil.\n"
+" --help vise denne hjelpen og avslutte.\n"
+" --no-validate undertrykke sjekking av kryssreferanser.\n"
+" --no-warn undertrykke advarsler (men ikke feil).\n"
+" --reference-limit=ANT advare om på det meste ANT referanser "
+"(standard %d).\n"
+" -v, --verbose forklare hva som blir gjort.\n"
+" --version vise programversjon og avslutte.\n"
+
+#: makeinfo/makeinfo.c:369
+#, fuzzy, no-wrap
+msgid ""
+"Output format selection (default is to produce Info):\n"
+" --docbook output Docbook XML rather than Info.\n"
+" --html output HTML rather than Info.\n"
+" --xml output Texinfo XML rather than Info.\n"
+" --plaintext output plain text rather than Info.\n"
+msgstr ""
+"Valg av outputformat (standard er å produsere Info):\n"
+" --docbook generere DocBook XML i stedet for Info.\n"
+" --html generere HTML i stedet for Info.\n"
+" --xml generere Texinfo XML i stedet for Info.\n"
+" --plaintext generere ren tekst i stedet for Info.\n"
+
+#: makeinfo/makeinfo.c:377
+#, fuzzy
+msgid ""
+"General output options:\n"
+" -E, --macro-expand=FILE output macro-expanded source to FILE,\n"
+" ignoring any @setfilename.\n"
+" --no-headers suppress node separators, Node: lines, and "
+"menus\n"
+" from Info output (thus producing plain "
+"text)\n"
+" or from HTML (thus producing shorter "
+"output);\n"
+" also, write to standard output by default.\n"
+" --no-split suppress the splitting of Info or HTML "
+"output,\n"
+" generate only one output file.\n"
+" --number-sections output chapter and sectioning numbers.\n"
+" -o, --output=FILE output to FILE (or directory if split HTML).\n"
+msgstr ""
+"Generelle outputvalg:\n"
+" -E, --macro-expand FIL sende makroekspandert kilde til FIL,\n"
+" ignorerer enhver @setfilename.\n"
+" --no-headers undertrykke nodeseparatorer, Node:-linjer og "
+"menyer\n"
+" fra Info-output (og dermed produsere ren "
+"tekst)\n"
+" eller fra HTML (og dermed produsere kortere "
+"output);\n"
+" standard er å skrive til standard ut.\n"
+" --no-split undertrykke splitting av Info- eller HTML-"
+"output,\n"
+" generere bare en outputfil.\n"
+" --number-sections nummerere kapitler og avdelinger (section).\n"
+" -o, --output=FIL sende output til FIL (eller katalog dersom "
+"splittet HTML),\n"
+
+#: makeinfo/makeinfo.c:391
+#, fuzzy, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --disable-encoding do not output accented and special characters\n"
+" in Info output based on @documentencoding.\n"
+" --enable-encoding override --disable-encoding (default).\n"
+" --fill-column=NUM break Info lines at NUM characters (default %"
+"d).\n"
+" --footnote-style=STYLE output footnotes in Info according to STYLE:\n"
+" `separate' to put them in their own node;\n"
+" `end' to put them at the end of the node, "
+"in\n"
+" which they are defined (this is the "
+"default).\n"
+" --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %"
+"d).\n"
+" If VAL is `none', do not indent; if VAL is\n"
+" `asis', preserve existing indentation.\n"
+" --split-size=NUM split Info files at size NUM (default %d).\n"
+msgstr ""
+"Valg for Infooutput og ren tekst:\n"
+" --enable-encoding skrive ut spesialtegn og tegn med aksenter i\n"
+" Infooutput basert på @documentencoding.\n"
+" --fill-column=ANT bryte Infolinjer ved ANT tegn (standard %d).\n"
+" --footnote-style=STIL generere fotnoter i Info i henhold til STIL:\n"
+" «separate» for å legge fotnotene i egne "
+"noder;\n"
+" «end» for å legge fotnotene i slutten av hver "
+"node\n"
+" der fotnotene er definert (standard).\n"
+" --paragraph-indent=ANT rykke inn Infoavsnitt med ANT mellomrom "
+"(standard %d).\n"
+" Dersom ANT er «none» rykkes ikke avsnittene "
+"inn;\n"
+" Dersom ANT er «asis» bevares eksisterende "
+"innrykk.\n"
+" --split-size=ANT splitte Infofilene ved lengde ANT (standard %"
+"d).\n"
+
+#: makeinfo/makeinfo.c:409
+#, fuzzy
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+" --css-ref=URL generate reference to a CSS file.\n"
+" --internal-links=FILE produce list of internal links in FILE.\n"
+" --transliterate-file-names\n"
+" produce file names in ASCII transliteration.\n"
+msgstr ""
+"Valg for HTML:\n"
+" --css-include=FIL inkluder FIL i HTML <style>-taggen;\n"
+" les stdin dersom FIL er -.\n"
+
+#: makeinfo/makeinfo.c:419
+#, fuzzy, c-format
+msgid ""
+"Options for XML and Docbook:\n"
+" --output-indent=VAL indent XML elements by VAL spaces (default %"
+"d).\n"
+" If VAL is 0, ignorable whitespace is "
+"dropped.\n"
+msgstr ""
+"Valg for XML og DocBook:\n"
+" --output-index=ANT innrykk XML-elementer med ANT mellomrom "
+"(standard %d).\n"
+" Dersom ANT er 0, blir ignorerbart tomrom "
+"ikke brukt.\n"
+
+#: makeinfo/makeinfo.c:426
+msgid ""
+"Input file options:\n"
+" --commands-in-node-names allow @ commands in node names.\n"
+" -D VAR define the variable VAR, as with @set.\n"
+" -I DIR append DIR to the @include search path.\n"
+" -P DIR prepend DIR to the @include search path.\n"
+" -U VAR undefine the variable VAR, as with @clear.\n"
+msgstr ""
+"Valg for inputfil:\n"
+" --commands-in-node-names tillate @-kommandoer i nodenavn.\n"
+" -D VAR definer variabelen VAR, som om @set "
+"brukes.\n"
+" -I KAT legg til KAT på slutten av @include-"
+"søkestien.\n"
+" -P KAT legg til KAT på starten av @include-"
+"søkestien.\n"
+" -U VAR udefiner variabelen VAR, som om @clear "
+"brukes.\n"
+
+#: makeinfo/makeinfo.c:435
+msgid ""
+"Conditional processing in input:\n"
+" --ifdocbook process @ifdocbook and @docbook even if\n"
+" not generating Docbook.\n"
+" --ifhtml process @ifhtml and @html even if not generating HTML.\n"
+" --ifinfo process @ifinfo even if not generating Info.\n"
+" --ifplaintext process @ifplaintext even if not generating plain text.\n"
+" --iftex process @iftex and @tex; implies --no-split.\n"
+" --ifxml process @ifxml and @xml.\n"
+" --no-ifdocbook do not process @ifdocbook and @docbook text.\n"
+" --no-ifhtml do not process @ifhtml and @html text.\n"
+" --no-ifinfo do not process @ifinfo text.\n"
+" --no-ifplaintext do not process @ifplaintext text.\n"
+" --no-iftex do not process @iftex and @tex text.\n"
+" --no-ifxml do not process @ifxml and @xml text.\n"
+"\n"
+" Also, for the --no-ifFORMAT options, do process @ifnotFORMAT text.\n"
+msgstr ""
+"Betinget behandling av input:\n"
+" --ifdocbook behandle @ifdocbook og @docbook selv om\n"
+" DocBook ikke skal genereres.\n"
+" --ifhtml behandle @ifhtml og @html selv om HTML ikke skal "
+"genereres.\n"
+" --ifinfo behandle @ifinfo selv når info ikke skal genereres.\n"
+" --ifplaintext behandle @ifplaintext selv om ren tekst ikke skal "
+"genereres.\n"
+" --iftex behandle @iftex og @tex; innebærer --no-split.\n"
+" --ifxml behandle @ifxml og @xml.\n"
+" --no-ifdocbook ikke behandle @ifdocbook og @docbook.\n"
+" --no-ifhtml ikke behandle @ifhtml og @html.\n"
+" --no-ifinfo ikke behandle @ifinfo.\n"
+" --no-ifplaintext ikke behandle @ifplaintext.\n"
+" --no-iftex ikke behandle @iftex og @tex.\n"
+" --no-ifxml ikke behandle @ifxml og @xml.\n"
+
+#: makeinfo/makeinfo.c:454
+msgid ""
+" The defaults for the @if... conditionals depend on the output format:\n"
+" if generating HTML, --ifhtml is on and the others are off;\n"
+" if generating Info, --ifinfo is on and the others are off;\n"
+" if generating plain text, --ifplaintext is on and the others are off;\n"
+" if generating XML, --ifxml is on and the others are off.\n"
+msgstr ""
+" Standardverdiene for @if...-betingelsene avhenger av outputformatet:\n"
+" dersom HTML genereres er --ifhtml påslått og de andre av;\n"
+" dersom Info genereres er --ifinfo påslått og de andre av;\n"
+" dersom ren tekst genereres er --ifplaintext påslått og de andre av;\n"
+" dersom XML genereres er --ifxml påslått og de andre av.\n"
+
+#: makeinfo/makeinfo.c:462
+#, fuzzy
+msgid ""
+"Examples:\n"
+" makeinfo foo.texi write Info to foo's @setfilename\n"
+" makeinfo --html foo.texi write HTML to @setfilename\n"
+" makeinfo --xml foo.texi write Texinfo XML to @setfilename\n"
+" makeinfo --docbook foo.texi write DocBook XML to @setfilename\n"
+" makeinfo --no-headers foo.texi write plain text to standard "
+"output\n"
+"\n"
+" makeinfo --html --no-headers foo.texi write html without node lines, "
+"menus\n"
+" makeinfo --number-sections foo.texi write Info with numbered sections\n"
+" makeinfo --no-split foo.texi write one Info file however big\n"
+msgstr ""
+"Eksempler:\n"
+" makeinfo foo.texi skrive Info til foos @setfilename\n"
+" makeinfo --html foo.texi skrive HTML til @setfilename\n"
+" makeinfo --xml foo.texi skrive Texinfo XML til @setfilename\n"
+" makeinfo --docbook foo.texi skrive Docbook XML til @setfilename\n"
+" makeinfo --no-headers foo.texi skrive ren tekst til standard ut\n"
+"\n"
+" makeinfo --html --no-headers foo.texi skrive HTML uten nodelinjer\n"
+" makeinfo --number-sections foo.texi skrive Info med nummererte avsnitt\n"
+" makeinfo --no-split foo.texi skrive en Infofil uansett størrelse\n"
+
+#: makeinfo/makeinfo.c:622
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr "%s: Ignorerer ugjenkjennelig TEXINFO_OUTPUT_FORMAT-verdi «%s».\n"
+
+#: makeinfo/makeinfo.c:670 makeinfo/makeinfo.c:696 makeinfo/makeinfo.c:720
+#: makeinfo/makeinfo.c:780
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr "%s: %s arg må være numerisk, ikke «%s».\n"
+
+#: makeinfo/makeinfo.c:683
+#, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "%s: kunne ikke åpne makroekspansjonoutput «%s»"
+
+#: makeinfo/makeinfo.c:688
+#, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "%s: ignorerer sekundær makroekspansjonoutpur «%s».\n"
+
+#: makeinfo/makeinfo.c:733
+#, fuzzy, c-format
+msgid "%s: could not open internal links output `%s'"
+msgstr "%s: kunne ikke åpne makroekspansjonoutput «%s»"
+
+#: makeinfo/makeinfo.c:738
+#, fuzzy, c-format
+msgid "%s: ignoring second internal links output `%s'.\n"
+msgstr "%s: ignorerer sekundær makroekspansjonoutpur «%s».\n"
+
+#: makeinfo/makeinfo.c:751
+#, c-format
+msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
+msgstr "%s: --paragraph-indent arg må være numerisk/«none»/«asis», ikke «%s».\n"
+
+#: makeinfo/makeinfo.c:769
+#, c-format
+msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
+msgstr "%s: --footnote-style arg må være «separate» eller «end», ikke «%s».\n"
+
+#: makeinfo/makeinfo.c:844
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: mangler filargument.\n"
+
+#: makeinfo/makeinfo.c:1041 makeinfo/makeinfo.c:4166
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr "Flerlinjekommandoen %c%s brukes ikke riktig"
+
+#: makeinfo/makeinfo.c:1044
+#, c-format
+msgid "Expected `%s'"
+msgstr "Forventet «%s»"
+
+#: makeinfo/makeinfo.c:1521
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "Kan ikke opprette katalogen «%s»: %s"
+
+#: makeinfo/makeinfo.c:1567
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "Ingen «%s» funnet i «%s»"
+
+#: makeinfo/makeinfo.c:1647
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr ""
+"%s: Hopper over makroekspansjon til stdout siden Info-output også sendes "
+"dit.\n"
+
+#: makeinfo/makeinfo.c:1677
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "Lager %s-filen «%s» fra «%s».\n"
+
+#: makeinfo/makeinfo.c:1744
+#, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: Fjerner makroutskriftsfilen «%s» på grunn av feil; bruk --force for å "
+"bevare.\n"
+
+#: makeinfo/makeinfo.c:1799
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: Fjerner utskriftsfilen «%s» på grunn av feil; bruk --force for å bevare.\n"
+
+#: makeinfo/makeinfo.c:1818
+#, fuzzy, c-format
+msgid ""
+"%s: Removing internal links output file `%s' due to errors; use --force to "
+"preserve.\n"
+msgstr ""
+"%s: Fjerner utskriftsfilen «%s» på grunn av feil; bruk --force for å bevare.\n"
+
+#: makeinfo/makeinfo.c:2113
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "Ukjent kommando «%s»"
+
+#: makeinfo/makeinfo.c:2135
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr "Bruk krøllparenteser for å gi en kommando som et argument til @%s"
+
+#: makeinfo/makeinfo.c:2394
+#, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s forventet krøllparanteser"
+
+#: makeinfo/makeinfo.c:2407
+msgid "Unmatched }"
+msgstr "Umatchet }"
+
+#: makeinfo/makeinfo.c:2455
+msgid "NO_NAME!"
+msgstr "INTET_NAVN!"
+
+#: makeinfo/makeinfo.c:2476
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s mangler avsluttende krøllparentes"
+
+#: makeinfo/makeinfo.c:3482
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "@image-fil «%s» (for HTML) er uleselig: %s"
+
+#: makeinfo/makeinfo.c:3488
+#, c-format
+msgid "No such file `%s'"
+msgstr "«%s» er ingen fil"
+
+#: makeinfo/makeinfo.c:3624
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "@image-fil «%s» (for tekstformat) er uleselig: %s"
+
+#: makeinfo/makeinfo.c:3633
+msgid "@image missing filename argument"
+msgstr "@image mangler filnavn"
+
+#: makeinfo/makeinfo.c:3851
+#, c-format
+msgid "undefined flag: %s"
+msgstr "udefinert flagg: %s"
+
+#: makeinfo/makeinfo.c:3852
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{Ingen verdi for «%s»}"
+
+#: makeinfo/makeinfo.c:3904
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s krever et navn"
+
+#: makeinfo/makeinfo.c:4010
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "Traff slutt-på-filen før matchende @end %s"
+
+#: makeinfo/makeinfo.c:4258
+#, c-format
+msgid "`%.40s...' is too long for expansion; not expanded"
+msgstr "`%.40s...' er for lang for ekspansjon; ikke ekspandert"
+
+#: makeinfo/multi.c:116
+msgid "Missing } in @multitable template"
+msgstr "Manglende «}» i @multitable-mal"
+
+#: makeinfo/multi.c:260
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "ignorerer løs tekst «%s» etter @multitable"
+
+#: makeinfo/multi.c:400
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "For mange kolonner i multitabellrad (maks %d)"
+
+#: makeinfo/multi.c:563
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "[uforventet] kan ikke velge kolonne #%d i multitabell"
+
+#: makeinfo/multi.c:592
+msgid "ignoring @tab outside of multitable"
+msgstr "ignorerer @tab utenfor multitabell"
+
+#: makeinfo/multi.c:640
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** Multikolonne-output fra siste rad:\n"
+
+#: makeinfo/multi.c:643
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* kolonne #%d output = %s\n"
+
+#: makeinfo/node.c:279
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "Noden «%s» er tidligere definert ved linje %d"
+
+#: makeinfo/node.c:647
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "Skriver noden %s...\n"
+
+#: makeinfo/node.c:714
+#, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr "Noden «%s» krever en inndelingskommando (f.eks. %c%s)"
+
+#: makeinfo/node.c:878
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "Ingen nodenavn spesifisert for «%c%s»-kommandoen"
+
+#: makeinfo/node.c:919 makeinfo/node.c:1163
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr "Ankeret «%s» og noden «%s» blir knyttet til det samme filnavnet"
+
+#: makeinfo/node.c:922
+msgid "This @anchor command ignored; references to it will not work"
+msgstr ""
+"Denne @anchor-kommandoen ble ignorert, referanser til den vil ikke virke"
+
+#: makeinfo/node.c:924 makeinfo/node.c:1166
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr "Omdøpe dette ankeret eller bruk «--no-split»-valget"
+
+#: makeinfo/node.c:954
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr "Uforventet streng ved slutten av splitt-HTML-fila «%s»"
+
+#: makeinfo/node.c:1160
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr "Ankrene «%s» og «%s» peker til det samme filnavnet"
+
+#: makeinfo/node.c:1165
+msgid "@anchor command ignored; references to it will not work"
+msgstr "@anchor-kommando ignorert; referanser til den vil ikke virke"
+
+#: makeinfo/node.c:1362
+#, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr ""
+"%s referanse til ikke-eksisterende node «%s» (kanskje ugyldig inndeling?)"
+
+#: makeinfo/node.c:1462
+#, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr "Nestefeltet til noden «%s» er ikke pekt på (kanskje ugyldig inndeling?)"
+
+#: makeinfo/node.c:1465
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "Denne noden (%s) har den dårlige forrigepekeren"
+
+#: makeinfo/node.c:1520
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "Forrigefeltet til noden «%s» er ikke pekt på"
+
+#: makeinfo/node.c:1524
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "Denne noden (%s) har den dårlige nestepekeren"
+
+#: makeinfo/node.c:1536
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr "`%s' har ingen Up-felt (kanskje feil inndeling?)"
+
+#: makeinfo/node.c:1605
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr "Noden «%s» mangler et menypunkt for «%s» selv om den er dens oppmål"
+
+#: makeinfo/node.c:1637
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "ureferert node «%s»"
+
+#: makeinfo/node.c:1727
+#, c-format
+msgid "Removing %s\n"
+msgstr "Fjerner %s\n"
+
+#: makeinfo/node.c:1731
+#, c-format
+msgid "Can't remove file `%s': %s"
+msgstr "Kan ikke slette filen «%s»: %s"
+
+#: makeinfo/sectioning.c:122
+#, c-format
+msgid "Appendix %c"
+msgstr "Vedlegg %c"
+
+#: makeinfo/sectioning.c:467
+#, c-format
+msgid "Internal error (search_sectioning) `%s'!"
+msgstr "Intern feil (search_sectioning) «%s»!"
+
+#: makeinfo/sectioning.c:563
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "Intern feil (search_sectioning) «%s»!"
+
+#: makeinfo/sectioning.c:624
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "%c%s er avlegs; bruk %c%s i stedet"
+
+#: makeinfo/sectioning.c:640
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "Node med %ctop som en seksjon eksisterer allerede"
+
+#: makeinfo/sectioning.c:648
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "Her er %ctop-noden"
+
+#: makeinfo/sectioning.c:664
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "%ctop brukt før %cnode, benytter %s"
+
+#: makeinfo/xml.c:1669
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "@image-fil «%s» er uleselig: %s"
+
+#: makeinfo/xml.c:2014
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+"@headitem som siste punkt i en @multitable fører til uyldige DocBook-"
+"dokumenter"
+
+#: makeinfo/xml.c:2150
+msgid "of"
+msgstr "av"
+
+#: makeinfo/xml.c:2155
+msgid "on"
+msgstr "på"
+
+#: makeinfo/xref.c:127
+msgid "First argument to cross-reference may not be empty"
+msgstr ""
+
+#: makeinfo/xref.c:252
+#, c-format
+msgid "Empty file name for HTML cross reference in `%s'"
+msgstr ""
+
+#: makeinfo/xref.c:387
+msgid "End of file reached while looking for `.' or `,'"
+msgstr ""
+
+#: makeinfo/xref.c:390
+#, c-format
+msgid "`.' or `,' must follow @%s, not `%c'"
+msgstr ""
+
+#: makeinfo/xref.c:392
+#, fuzzy
+msgid "for cross-references in parentheses, use @pxref"
+msgstr "Ingen kryssreferanser i denne noden."
+
+#: makeinfo/xref.c:435
+msgid "First argument to @inforef may not be empty"
+msgstr ""
+
+#: util/texindex.c:223
+msgid "display this help and exit"
+msgstr "vise denne hjelpen og avslutte"
+
+#: util/texindex.c:225
+msgid "send output to FILE"
+msgstr "sende utdata til FILE"
+
+#: util/texindex.c:227
+msgid "display version information and exit"
+msgstr "vise programversjon og avslutte"
+
+#: util/texindex.c:237
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "Bruksmåte: %s [VALG]... FIL...\n"
+
+#: util/texindex.c:238
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr "Generere en sortert indeks for hver TeX-outputfil.\n"
+
+#: util/texindex.c:241
+#, c-format
+msgid "Usually FILE... is specified as `foo.%c%c' for a document `foo.texi'.\n"
+msgstr "Vanligvis er FIL... angitt som «foo.%c%c» for et dokument «foo.texi».\n"
+
+#: util/texindex.c:243
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Valg:\n"
+
+#: util/texindex.c:743
+#, c-format
+msgid "failure reopening %s"
+msgstr "feil ved gjenåpning av %s"
+
+#: util/texindex.c:758 util/texindex.c:786
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: ikke en texinfo-indeksfil"
+
+#: util/texindex.c:993
+#, c-format
+msgid "No page number in %s"
+msgstr "Ingen sidenummer i %s"
+
+#: util/texindex.c:1066
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr "oppføring %s følger en oppføring med et annet navn"
+
+#~ msgid ""
+#~ "\\%-10[search] Search forward for a specified string\n"
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr ""
+#~ "\\%-10[search] Søke forover etter en angitt streng\n"
+#~ " og velge den noden som den neste forekomsten blir funnet "
+#~ "i.\n"
+
+#~ msgid ""
+#~ "\\%-10[goto-node] Move to node specified by name.\n"
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ msgstr ""
+#~ "\\%-10[goto-node] Flytte til en node angitt ved navn.\n"
+#~ " Du kan like godt inkludere et filnavn, som i (FILNAVN)"
+#~ "NODENAVN.\n"
+
+#, fuzzy
+#~ msgid "\\%-10[next-node] Move to the next node of current section.\n"
+#~ msgstr "\\%-10[next-node] Flytte til neste node etter denne noden.\n"
+
+#~ msgid ""
+#~ "\\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+#~ "node] (DIR)'.\n"
+#~ msgstr ""
+#~ "\\%-10[dir-node] Flytte til «katalog»-noden. Det samme som «\\[goto-node] "
+#~ "(DIR)».\n"
+
+#~ msgid ""
+#~ "\\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] "
+#~ "Top'.\n"
+#~ msgstr ""
+#~ "\\%-10[top-node] Flytte til «Top»-noden. Det samme som «\\[goto-node] "
+#~ "Top».\n"
+
+#~ msgid ""
+#~ "\\%-10[search-backward] Search backward for a specified string\n"
+#~ " and select the node in which the previous occurrence is "
+#~ "found.\n"
+#~ msgstr ""
+#~ "\\%-10[search-backward] Søke baklengs etter en angitt streng\n"
+#~ " og velge den noden som den neste forekomsten blir funnet "
+#~ "i.\n"
+
+#~ msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+#~ msgstr ""
+#~ "--- Bruk «\\[history-node]» eller «\\[kill-node]» for å avslutte ---\n"
+
+#, fuzzy
+#~ msgid "\\%-10[move-to-prev-xref] Skip to previous hypertext link [*].\n"
+#~ msgstr ""
+#~ "\\%-10[move-to-prev-xref] Flytte til neste hypertekstlenke innen denne "
+#~ "noden.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]... [MENU-ITEM...]\n"
+#~ "\n"
+#~ "Read documentation in Info format.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --apropos=STRING look up STRING in all indices of all "
+#~ "manuals.\n"
+#~ " -d, --directory=DIR add DIR to INFOPATH.\n"
+#~ " --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+#~ " -f, --file=FILENAME specify Info file to visit.\n"
+#~ " -h, --help display this help and exit.\n"
+#~ " --index-search=STRING go to node pointed by index entry STRING.\n"
+#~ " -n, --node=NODENAME specify nodes in first visited Info file.\n"
+#~ " -o, --output=FILENAME output selected nodes to FILENAME.\n"
+#~ " -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+#~ " --no-raw-escapes output escapes as literal text.\n"
+#~ " --restore=FILENAME read initial keystrokes from FILENAME.\n"
+#~ " -O, --show-options, --usage go to command-line options node.\n"
+#~ "%s --subnodes recursively output menu items.\n"
+#~ " -w, --where, --location print physical location of Info file.\n"
+#~ " --vi-keys use vi-like and less-like key bindings.\n"
+#~ " --version display version information and exit.\n"
+#~ "\n"
+#~ "The first non-option argument, if present, is the menu entry to start "
+#~ "from;\n"
+#~ "it is searched for in all `dir' files along INFOPATH.\n"
+#~ "If it is not present, info merges all `dir' files and shows the result.\n"
+#~ "Any remaining arguments are treated as the names of menu\n"
+#~ "items relative to the initial node visited.\n"
+#~ "\n"
+#~ "Examples:\n"
+#~ " info show top-level dir menu\n"
+#~ " info emacs start at emacs node from top-level dir\n"
+#~ " info emacs buffers start at buffers node within emacs manual\n"
+#~ " info --show-options emacs start at node with emacs' command line "
+#~ "options\n"
+#~ " info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+#~ " info -f ./foo.info show file ./foo.info, not searching dir\n"
+#~ msgstr ""
+#~ "Bruksmåte: %s [VALG]... [MENYPUNKT...]\n"
+#~ "\n"
+#~ "Lese dokumentasjon i Infoformat.\n"
+#~ "\n"
+#~ "Valg:\n"
+#~ " --apropos=EMNE søke etter EMNE i alle indeksene til alle "
+#~ "Infofilene.\n"
+#~ " -d, --directory=KAT legge til KAT til INFOPATH.\n"
+#~ " --dribble=FILNAVN huske brukerens tastetrykk i FILNAVN.\n"
+#~ " -f, --file=FILNAVN angi Infofilen som skal besøkes.\n"
+#~ " -h, --help vise denne hjelpen og avslutte.\n"
+#~ " --index-search=STRENG gå til noden pekt på av indeksoppslaget "
+#~ "STRENG.\n"
+#~ " -n, --node=NODENAVN angi noder i første besøkte Infofil.\n"
+#~ " -o, --output=FILNAVN skrive ut utvalgte noder til FILNAVN.\n"
+#~ " -R, --raw-escapes ikke fjern ANSI-escapes fra mansider.\n"
+#~ " --restore=FILNAVN lese innledende tastetrykk fra FILNAVN.\n"
+#~ " -O, --show-options, --usage gå til kommandolinje-valg-noden.\n"
+#~ "%s --subnodes rekursivt skrive ut menypunkter.\n"
+#~ " --vi-keys bruke vi-aktige og less-aktige "
+#~ "tastebindinger.\n"
+#~ " --version vise programversjon og avslutte.\n"
+#~ "\n"
+#~ "Det første ikke-valg-argumentet, dersom tilstede, er menypunktet som du\n"
+#~ "starter fra; det blir søkt etter i alle «dir»-filer langs med INFOPATH.\n"
+#~ "Dersom menypunktet ikke er tilstede, vil info flette sammen alle\n"
+#~ "«dir»-filene og vise resultatet. Øvrige gjenværende argumenter blir\n"
+#~ "behandlet som navnene til menypunktene relativ til den første besøkte\n"
+#~ "noden.\n"
+#~ "\n"
+#~ "Eksempler:\n"
+#~ " info vise toppnivå dirmeny\n"
+#~ " info emacs starte ved emacs-noden fra toppnivå dir\n"
+#~ " info emacs buffers starte ved buffers-noden i emacs-manualen\n"
+#~ " info --show-options emacs starte ved emacs kommandolinjevalg\n"
+#~ " info -f ./foo.info vise filen ./foo.info, ikke søke gjennom "
+#~ "dir\n"
+
+#~ msgid ""
+#~ " Picking a menu item causes another node to be selected.\n"
+#~ msgstr ""
+#~ " Valg av menypunkt fører til at en annen node blir valgt.\n"
+
+#~ msgid ""
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ msgstr ""
+#~ " Du kan like godt inkludere et filnavn, som i (FILNAVN)"
+#~ "NODENAVN.\n"
+
+#~ msgid " %-10s Search backward for a specified string\n"
+#~ msgstr ""
+#~ " %-10s Søke baklengs gjennom denne Infofilen for en spesifikk streng,\n"
+
+#~ msgid ""
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr ""
+#~ " og velge den noden som i det neste tilfellet blir funnet.\n"
+
+#~ msgid "Following Next node..."
+#~ msgstr "Følger nestenoden..."
+
+#~ msgid "Selecting first menu item..."
+#~ msgstr "Velger første menypunkt..."
+
+#~ msgid "Selecting Next node..."
+#~ msgstr "Velger nestenoden..."
+
+#~ msgid "Moving Up %d time(s), then Next."
+#~ msgstr "Flytter opp %d gang(er), deretter neste."
+
+#~ msgid "Moving Prev in this window."
+#~ msgstr "Flytter til forrige i dette vinduet."
+
+#~ msgid "Moving Up in this window."
+#~ msgstr "Flytter opp i dette vinduet."
+
+#~ msgid "Moving to `Prev's last menu item."
+#~ msgstr "Flytter til «forrige»s siste menypunkt."
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "Function"
+#~ msgstr "Funksjon"
+
+#~ msgid "Macro"
+#~ msgstr "Makro"
+
+#~ msgid "Special Form"
+#~ msgstr "Spesiell form"
+
+#~ msgid "Variable"
+#~ msgstr "Variabel"
+
+#~ msgid "User Option"
+#~ msgstr "Brukervalg"
+
+#~ msgid "Instance Variable"
+#~ msgstr "Forekomst"
+
+#~ msgid "Method"
+#~ msgstr "Metode"
+
+#~ msgid "Untitled"
+#~ msgstr "Uten navn"
+
+#~ msgid "This is %s, produced by makeinfo version %s from %s.\n"
+#~ msgstr "Dette er %s, produsert av makeinfo versjon %s fra %s.\n"
+
+#~ msgid "Next:"
+#~ msgstr "Neste:"
+
+#~ msgid "Previous:"
+#~ msgstr "Forrige:"
+
+#~ msgid "Up:"
+#~ msgstr "Opp:"
+
+#~ msgid "Menu"
+#~ msgstr "Meny"
+
+#~ msgid "Cross"
+#~ msgstr "Kryss"
+
+#~ msgid "Prev"
+#~ msgstr "forrige"
+
+#~ msgid "Up"
+#~ msgstr "opp"
+
+#, fuzzy
+#~ msgid "see "
+#~ msgstr "Se "
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+#~ "\n"
+#~ "Add or remove entries in INFO-FILE from the Info directory DIR-FILE.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --debug report what is being done.\n"
+#~ " --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+#~ " don't insert any new entries.\n"
+#~ " --dir-file=NAME specify file name of Info directory file.\n"
+#~ " This is equivalent to using the DIR-FILE argument.\n"
+#~ " --entry=TEXT insert TEXT as an Info directory entry.\n"
+#~ " TEXT should have the form of an Info menu item line\n"
+#~ " plus zero or more extra lines starting with "
+#~ "whitespace.\n"
+#~ " If you specify more than one entry, they are all "
+#~ "added.\n"
+#~ " If you don't specify any entries, they are "
+#~ "determined\n"
+#~ " from information in the Info file itself.\n"
+#~ " --help display this help and exit.\n"
+#~ " --info-file=FILE specify Info file to install in the directory.\n"
+#~ " This is equivalent to using the INFO-FILE argument.\n"
+#~ " --info-dir=DIR same as --dir-file=DIR/dir.\n"
+#~ " --item=TEXT same as --entry TEXT.\n"
+#~ " An Info directory entry is actually a menu item.\n"
+#~ " --quiet suppress warnings.\n"
+#~ " --remove same as --delete.\n"
+#~ " --remove-exactly only remove if the info file name matches exactly;\n"
+#~ " .info and/or .gz suffixes are not ignored.\n"
+#~ " --section=SEC put this file's entries in section SEC of the "
+#~ "directory.\n"
+#~ " If you specify more than one section, all the "
+#~ "entries\n"
+#~ " are added in each of the sections.\n"
+#~ " If you don't specify any sections, they are "
+#~ "determined\n"
+#~ " from information in the Info file itself.\n"
+#~ " --section-regex=R if an entry is added to a section that does not "
+#~ "exist,\n"
+#~ " look for a section matching basic regular expression "
+#~ "R\n"
+#~ " (and ignoring case) before starting a new section.\n"
+#~ " --test suppress updating of DIR-FILE.\n"
+#~ " --silent suppress warnings.\n"
+#~ " --version display version information and exit.\n"
+#~ msgstr ""
+#~ "Bruksmåte: %s [VALG]... [INFOFIL [DIRFIL]]\n"
+#~ "\n"
+#~ "Installere eller slette dir-innslag fra INFOFIL i Info-katalogfilen\n"
+#~ "DIRFIL.\n"
+#~ "\n"
+#~ "Valg:\n"
+#~ " --delete slette eksisterende innslag for INFOFIL fra DIRFIL;\n"
+#~ " ikke sett inn noe nye innslag.\n"
+#~ " --dir-file=NAVN angi filnavnet til Info-katalogfilen.\n"
+#~ " Dette er det samme som å bruke DIRFIL-argumentet.\n"
+#~ " --entry=TEKST sette inn TEKST som en Info-kataloginnslag.\n"
+#~ " TEKST bør ha form som et Info-menypunkt\n"
+#~ " pluss null eller flere linjer som starter med "
+#~ "whitespace.\n"
+#~ " Dersom du angir mer enn et innslag, blir alle lagt "
+#~ "til.\n"
+#~ " Dersom du ikke angir noen innslag, blir de bestemt\n"
+#~ " fra informasjon i selve Infofilen.\n"
+#~ " --help vise denne hjelpen og avslutte.\n"
+#~ " --info-file=FIL angi Infofilen som skal installeres i katalogen.\n"
+#~ " Dette er det samme som å bruke INFOFIL-argumentet.\n"
+#~ " --info-dir=DIR det samme som --dir-file=DIR/dir.\n"
+#~ " --item=TEKST det samme som --entry TEKST.\n"
+#~ " Et Info-kataloginnslag er egentlig et menypunkt.\n"
+#~ " --quiet undertrykke advarsler.\n"
+#~ " --remove det samme som --delete.\n"
+#~ " --section=AVS putte denne filens innslag i avsnittet AVS i "
+#~ "katalogen.\n"
+#~ " Dersom du angir mer enn et avsnitt, blir alle "
+#~ "innslagene\n"
+#~ " lagt til i hver av avsnittene.\n"
+#~ " Dersom du ikke angir noen avsnitt, blir de bestemt\n"
+#~ " fra informasjon i selve Infofilen.\n"
+#~ " --version vise programversjon og avslutte.\n"
+
+#~ msgid "menu item `%s' already exists, for file `%s'"
+#~ msgstr "menypunktet «%s» eksisterer allerede for filen «%s»"
+
+#~ msgid "\\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+#~ msgstr "\\%-10[menu-digit] Velge første ... niende punkt i nodens meny.\n"
+
+#~ msgid "node `%s' has been referenced %d times"
+#~ msgstr "noden «%s» har blitt referert %d ganger"
+
+#, fuzzy
+#~ msgid ""
+#~ "Copyright (C) %s Free Software Foundation, Inc.\n"
+#~ "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n"
+#~ "PARTICULAR PURPOSE. You may redistribute copies of GNU %s\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the file named COPYING.\n"
+#~ msgstr ""
+#~ "Copyright (C) %s Free Software Foundation, Inc.\n"
+#~ "Det finnes INGEN garanti. Du kan redistribuere denne programvaren\n"
+#~ "etter betingelsene i GNU General Public License. For mer informasjon\n"
+#~ "om dette, se filen COPYING.\n"
+
+#~ msgid "@quote-arg only useful for single-argument macros"
+#~ msgstr "@quote-arg bare brukbart når makroen bare tar et argument"
+
+#~ msgid "Table of Contents"
+#~ msgstr "Innholdsfortegnelse"
+
+#~ msgid "Short Contents"
+#~ msgstr "Kort innholdsfortegnelse"
+
+#~ msgid "keep temporary files around after processing"
+#~ msgstr "bevar midlertidige filer etter behandling"
+
+#~ msgid "do not keep temporary files around after processing (default)"
+#~ msgstr "ikke bevar midlertidige filer etter behandling (standard)"
+
+#~ msgid ""
+#~ " file, and select the node referenced by the first entry "
+#~ "found.\n"
+#~ msgstr ""
+#~ " infofil, og velge noden referert av det første oppslaget "
+#~ "funnet.\n"
+
+#~ msgid ""
+#~ "There is NO warranty. You may redistribute this software\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the files named COPYING.\n"
+#~ msgstr ""
+#~ "Det finnes INGEN garanti. Du kan redistribuere denne programvaren\n"
+#~ "etter betingelsene i GNU General Public License. For mer informasjon\n"
+#~ "om dette, se filen COPYING.\n"
diff --git a/po/nl.gmo b/po/nl.gmo
new file mode 100644
index 0000000..022a356
--- /dev/null
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
new file mode 100644
index 0000000..aefe539
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,3239 @@
+# Dutch translations for texinfo-4.12.94.
+# Copyright (C) 2008 Free Software Foundation, Inc.
+# This file is distributed under the same license as the texinfo package.
+#
+# Ivo Timmermans <zarq@iname.com>, 1998.
+# Freek de Kruijf <f.de.kruijf@hetnet.nl>, 2004, 2005, 2007.
+# Benno Schulenberg <benno@vertaalt.nl>, 2007, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo-4.12.94\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2008-09-18 20:38+0200\n"
+"PO-Revision-Date: 2008-08-17 23:34+0200\n"
+"Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n"
+"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: gnulib/lib/error.c:125
+msgid "Unknown system error"
+msgstr "Onbekende systeemfout"
+
+#: gnulib/lib/getopt.c:526 gnulib/lib/getopt.c:542
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: optie '%s' is niet eenduidig\n"
+
+#: gnulib/lib/getopt.c:575 gnulib/lib/getopt.c:579
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: optie '--%s' staat geen argument toe\n"
+
+#: gnulib/lib/getopt.c:588 gnulib/lib/getopt.c:593
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: optie '%c%s' staat geen argument toe\n"
+
+#: gnulib/lib/getopt.c:636 gnulib/lib/getopt.c:655 gnulib/lib/getopt.c:971
+#: gnulib/lib/getopt.c:990
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: optie '%s' vereist een argument\n"
+
+#: gnulib/lib/getopt.c:693 gnulib/lib/getopt.c:696
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: onbekende optie '--%s'\n"
+
+#: gnulib/lib/getopt.c:704 gnulib/lib/getopt.c:707
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: onbekende optie '%c%s'\n"
+
+#: gnulib/lib/getopt.c:759 gnulib/lib/getopt.c:762
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: ongeldige optie -- %c\n"
+
+#: gnulib/lib/getopt.c:768 gnulib/lib/getopt.c:771
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ongeldige optie -- %c\n"
+
+#: gnulib/lib/getopt.c:823 gnulib/lib/getopt.c:839 gnulib/lib/getopt.c:1043
+#: gnulib/lib/getopt.c:1061
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: optie vereist een argument -- %c\n"
+
+#: gnulib/lib/getopt.c:892 gnulib/lib/getopt.c:908
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: optie '-W %s' is niet eenduidig\n"
+
+#: gnulib/lib/getopt.c:932 gnulib/lib/getopt.c:950
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: optie '-W %s' staat geen argument toe\n"
+
+#: gnulib/lib/xalloc-die.c:34 gnulib/lib/xsetenv.c:37
+#, c-format
+msgid "memory exhausted"
+msgstr "onvoldoende geheugen beschikbaar"
+
+#: info/echo-area.c:283 info/session.c:966
+msgid "Move forward a character"
+msgstr "Eén teken verder"
+
+#: info/echo-area.c:295 info/session.c:993
+msgid "Move backward a character"
+msgstr "Eén teken terug"
+
+#: info/echo-area.c:307
+msgid "Move to the start of this line"
+msgstr "Naar het begin van de regel"
+
+#: info/echo-area.c:312
+msgid "Move to the end of this line"
+msgstr "Naar het einde van de regel"
+
+#: info/echo-area.c:320 info/session.c:1025
+msgid "Move forward a word"
+msgstr "Eén woord verder"
+
+#: info/echo-area.c:360 info/session.c:1049
+msgid "Move backward a word"
+msgstr "Eén woord terug"
+
+#: info/echo-area.c:400
+msgid "Delete the character under the cursor"
+msgstr "Het teken onder de cursor verwijderen"
+
+#: info/echo-area.c:430
+msgid "Delete the character behind the cursor"
+msgstr "Het teken na de cursor verwijderen"
+
+#: info/echo-area.c:451
+msgid "Cancel or quit operation"
+msgstr "Operatie annuleren of beëindigen"
+
+#: info/echo-area.c:466
+msgid "Accept (or force completion of) this line"
+msgstr "Deze regel accepteren (of de voltooiing ervan forceren)"
+
+#: info/echo-area.c:471
+msgid "Insert next character verbatim"
+msgstr "De volgende toets verbatim invoegen"
+
+#: info/echo-area.c:479
+msgid "Insert this character"
+msgstr "Dit teken invoegen"
+
+#: info/echo-area.c:498
+msgid "Insert a TAB character"
+msgstr "Een TAB-teken invoegen"
+
+#: info/echo-area.c:505
+msgid "Transpose characters at point"
+msgstr "De tekens op dit punt transponeren"
+
+#: info/echo-area.c:556
+msgid "Yank back the contents of the last kill"
+msgstr "Het laatst verwijderde terughalen"
+
+#: info/echo-area.c:563
+msgid "Kill ring is empty"
+msgstr "De verwijderingsbuffer is leeg."
+
+#: info/echo-area.c:576
+msgid "Yank back a previous kill"
+msgstr "Een eerdere verwijdering terughalen"
+
+#: info/echo-area.c:609
+msgid "Kill to the end of the line"
+msgstr "Tot aan het eind van de regel verwijderen"
+
+#: info/echo-area.c:622
+msgid "Kill to the beginning of the line"
+msgstr "Tot aan het begin van de regel verwijderen"
+
+#: info/echo-area.c:634
+msgid "Kill the word following the cursor"
+msgstr "Het woord na de cursor verwijderen"
+
+#: info/echo-area.c:654
+msgid "Kill the word preceding the cursor"
+msgstr "Het woord voor de cursor verwijderen"
+
+#: info/echo-area.c:870 info/echo-area.c:926
+msgid "No completions"
+msgstr "Geen voltooiingen"
+
+#: info/echo-area.c:872
+msgid "Not complete"
+msgstr "Niet compleet"
+
+#: info/echo-area.c:913
+msgid "List possible completions"
+msgstr "De mogelijke voltooiingen tonen"
+
+#: info/echo-area.c:930
+msgid "Sole completion"
+msgstr "Enige voltooiing"
+
+#: info/echo-area.c:939
+msgid "One completion:\n"
+msgstr "Eén mogelijkheid:\n"
+
+#: info/echo-area.c:940
+#, c-format
+msgid "%d completions:\n"
+msgstr "Er zijn %d mogelijkheden:\n"
+
+#: info/echo-area.c:1087
+msgid "Insert completion"
+msgstr "Een voltooiing invoegen"
+
+#: info/echo-area.c:1222
+msgid "Building completions..."
+msgstr "Opbouwen van voltooiingen..."
+
+#: info/echo-area.c:1342
+msgid "Scroll the completions window"
+msgstr "Het voltooiingsvenster scrollen"
+
+#: info/footnotes.c:212
+msgid "Footnotes could not be displayed"
+msgstr "De voetnoten kunnen niet weergegeven worden"
+
+#: info/footnotes.c:238
+msgid "Show the footnotes associated with this node in another window"
+msgstr ""
+"In een ander venster de voetnoten tonen die met deze pagina verbonden zijn"
+
+#: info/footnotes.h:26
+msgid "---------- Footnotes ----------"
+msgstr "---------- Voetnoten ----------"
+
+#: info/indices.c:171
+msgid "Look up a string in the index for this file"
+msgstr "Een tekenreeks opzoeken in de index van dit bestand"
+
+#: info/indices.c:198
+msgid "Finding index entries..."
+msgstr "Zoeken naar index-items..."
+
+#: info/indices.c:206
+msgid "No indices found."
+msgstr "Geen indexen gevonden."
+
+#: info/indices.c:216
+msgid "Index entry: "
+msgstr "Index-item: "
+
+#: info/indices.c:324
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr ""
+"Naar het volgende overeenkomende item van het laatste '\\[index-search]'-"
+"commando"
+
+#: info/indices.c:334
+msgid "No previous index search string."
+msgstr "Geen eerdere index-zoektekenreeks."
+
+#: info/indices.c:341
+msgid "No index entries."
+msgstr "Geen index-items."
+
+#: info/indices.c:374
+#, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "Er zijn geen index-items %s die '%s' bevatten."
+
+#: info/indices.c:375
+msgid "more "
+msgstr "meer "
+
+#: info/indices.c:385
+msgid "CAN'T SEE THIS"
+msgstr "KAN DIT NIET ZIEN"
+
+#: info/indices.c:421
+#, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr "'%s' gevonden in %s -- ('\\[next-index-match]' zoekt de volgende)"
+
+#: info/indices.c:549
+#, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "Zoeken in de indexen van '%s'..."
+
+#: info/indices.c:604
+#, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr "Geen van de beschikbare Info-bestanden heeft '%s' in z'n index."
+
+#: info/indices.c:630
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr ""
+"Alle Info-bestandsindexen doorzoeken naar een tekenreeks en een menu maken"
+
+#: info/indices.c:634
+msgid "Index apropos: "
+msgstr "Index-apropos: "
+
+#: info/indices.c:662
+#, c-format
+msgid ""
+"\n"
+"* Menu: Nodes whose indices contain `%s':\n"
+msgstr ""
+"\n"
+"* Menu: Pagina's waarvan de indexen '%s' bevatten:\n"
+
+#: info/info.c:275 info/infokey.c:899
+#, c-format
+msgid "Try --help for more information.\n"
+msgstr "Gebruik '--help' voor meer informatie.\n"
+
+#: info/info.c:294 info/infokey.c:145 install-info/install-info.c:2101
+#: makeinfo/makeinfo.c:802 util/texindex.c:295
+#, c-format
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"Dit is vrije software: u mag het vrijelijk wijzigen en verder verspreiden.\n"
+"De precieze licentie is GPLv3+: GNU GPL versie 3 of later;\n"
+"zie http://gnu.org/licenses/gpl.html voor de volledige tekst.\n"
+"Er is GEEN GARANTIE, voor zover de wet dit toestaat.\n"
+
+#: info/info.c:506
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "geen index-items gevonden voor '%s'\n"
+
+#: info/info.c:600
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [MENU-ITEM...]\n"
+"\n"
+"Read documentation in Info format.\n"
+msgstr ""
+"Gebruik: %s [OPTIE]... [MENU-ITEM...]\n"
+"\n"
+"Documentatie in Info-opmaak lezen.\n"
+
+#: info/info.c:606
+msgid ""
+"Options:\n"
+" -k, --apropos=STRING look up STRING in all indices of all "
+"manuals.\n"
+" -d, --directory=DIR add DIR to INFOPATH.\n"
+" --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+" -f, --file=FILENAME specify Info file to visit."
+msgstr ""
+"Opties:\n"
+" --apropos=TEKENREEKS in alle Info-indexen naar deze tekenreeks "
+"zoeken\n"
+" -d, --directory=MAP deze map toevoegen aan het zoekpad "
+"'INFOPATH'\n"
+" --dribble=BESTAND toetsaanslagen in dit bestand opslaan\n"
+" -f, --file=BESTAND het te bekijken Info-bestand"
+
+#: info/info.c:613
+msgid ""
+" -h, --help display this help and exit.\n"
+" --index-search=STRING go to node pointed by index entry STRING.\n"
+" -n, --node=NODENAME specify nodes in first visited Info file.\n"
+" -o, --output=FILENAME output selected nodes to FILENAME."
+msgstr ""
+" -h, --help deze hulptekst tonen en stoppen\n"
+" --index-search=NAAM de pagina tonen waarnaar dit index-item "
+"verwijst\n"
+" -n, --node=PAGINANAAM een te bezoeken pagina\n"
+" -o, --output=BESTAND de gekozen pagina's naar dit bestand schrijven"
+
+#: info/info.c:619
+msgid ""
+" -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+" --no-raw-escapes output escapes as literal text.\n"
+" --restore=FILENAME read initial keystrokes from FILENAME.\n"
+" -O, --show-options, --usage go to command-line options node."
+msgstr ""
+" -R, --raw-escapes \"ruwe\" ANSI-stuurcodes schrijven "
+"(standaard)\n"
+" --no-raw-escapes stuurcodes als tekst uitschrijven\n"
+" --restore=BESTAND de eerste toetsaanslagen uit dit bestand "
+"lezen\n"
+" -O, --show-options, --usage de pagina met de commandoregelopties tonen"
+
+#: info/info.c:626
+msgid " -b, --speech-friendly be friendly to speech synthesizers."
+msgstr ""
+" -b, --speech-friendly uitvoer toesnijden op spraaksynthesizers"
+
+#: info/info.c:630
+msgid ""
+" --subnodes recursively output menu items.\n"
+" --vi-keys use vi-like and less-like key bindings.\n"
+" --version display version information and exit.\n"
+" -w, --where, --location print physical location of Info file."
+msgstr ""
+" --subnodes recursief alle menu-items uitvoeren\n"
+" --vi-keys toetsbindingen als in 'vi' en 'less' "
+"gebruiken\n"
+" --version versie-informatie tonen en stoppen\n"
+" -w, --where, --location het volledige pad van het Info-bestand tonen"
+
+#: info/info.c:636
+msgid ""
+"\n"
+"The first non-option argument, if present, is the menu entry to start from;\n"
+"it is searched for in all `dir' files along INFOPATH.\n"
+"If it is not present, info merges all `dir' files and shows the result.\n"
+"Any remaining arguments are treated as the names of menu\n"
+"items relative to the initial node visited."
+msgstr ""
+"\n"
+"Als 'info' zonder argumenten gestart wordt, dan toont het een overzicht van\n"
+"alle beschikbare documenten. Als er argumenten gegeven worden, dan wordt "
+"het\n"
+"eerste argument begrepen als het te kiezen menu-item uit dat overzicht.\n"
+"Eventuele overige argumenten worden steeds begrepen als het te kiezen\n"
+"menu-item in de op dat moment bereikte pagina."
+
+#: info/info.c:643
+msgid ""
+"\n"
+"For a summary of key bindings, type h within Info."
+msgstr ""
+"\n"
+"Voor een overzicht van de commandotoetsen, typ 'h' in Info."
+
+#: info/info.c:646
+msgid ""
+"\n"
+"Examples:\n"
+" info show top-level dir menu\n"
+" info info show the general manual for Info readers\n"
+" info info-stnd show the manual specific to this Info program\n"
+" info emacs start at emacs node from top-level dir\n"
+" info emacs buffers start at buffers node within emacs manual\n"
+" info --show-options emacs start at node with emacs' command line options\n"
+" info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+" info -f ./foo.info show file ./foo.info, not searching dir"
+msgstr ""
+"\n"
+"Voorbeelden:\n"
+" info het inhoudsmenu tonen (een compleet "
+"overzicht)\n"
+" info info de algemene handleiding voor Info-lezers "
+"tonen\n"
+" info info-stnd de handleiding voor 'info' zelf tonen\n"
+" info emacs de eerste pagina van het Emacs-document "
+"tonen\n"
+" info emacs buffers de 'Buffers'-pagina van het Emacs-document "
+"tonen\n"
+" info --show-options emacs de pagina met de Emacs-commandoregelopties "
+"tonen\n"
+" info --subnodes -o em.txt emacs het gehele Emacs-document in 'em.txt' "
+"dumpen\n"
+" info -f ./foo.info het bestand './foo.info' tonen"
+
+#: info/info.c:657 info/infokey.c:918 makeinfo/makeinfo.c:475
+#: util/texindex.c:259
+msgid ""
+"\n"
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+"Stuur foutrapportages naar <bug-texinfo@gnu.org>,\n"
+"algemene vragen en commentaar naar <help-texinfo@gnu.org>,\n"
+"en opmerkingen over de vertaling naar <vertaling@vrijschrift.org>.\n"
+"Texinfo-homepagina: http://www.gnu.org/software/texinfo/"
+
+#: info/info.c:691
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "Kan pagina '%s' niet vinden."
+
+#: info/info.c:692
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "Kan pagina '(%s)%s' niet vinden."
+
+#: info/info.c:693
+msgid "Cannot find a window!"
+msgstr "Kan geen venster vinden!"
+
+#: info/info.c:694
+msgid "Point doesn't appear within this window's node!"
+msgstr "Het punt bevindt zich niet in de pagina van dit venster!"
+
+#: info/info.c:695
+msgid "Cannot delete the last window."
+msgstr "Het laatste venster kan niet gesloten worden."
+
+#: info/info.c:696
+msgid "No menu in this node."
+msgstr "Er is geen menu op deze pagina."
+
+#: info/info.c:697
+msgid "No footnotes in this node."
+msgstr "Er zijn geen voetnoten op deze pagina."
+
+#: info/info.c:698
+msgid "No cross references in this node."
+msgstr "Er zijn geen kruisverwijzingen op deze pagina."
+
+#: info/info.c:699
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Er is geen '%s'-koppeling op deze pagina."
+
+#: info/info.c:700
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "Onbekend Info-commando '%c'; typ '?' voor hulp."
+
+#: info/info.c:701
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr "Terminaltype '%s' is niet krachtig genoeg voor Info."
+
+#: info/info.c:702
+msgid "You are already at the last page of this node."
+msgstr "U bent al aan het eind van deze pagina."
+
+#: info/info.c:703
+msgid "You are already at the first page of this node."
+msgstr "U bent al aan het begin van deze pagina."
+
+#: info/info.c:704
+msgid "Only one window."
+msgstr "Slechts één venster."
+
+#: info/info.c:705
+msgid "Resulting window would be too small."
+msgstr "Het resulterende venster zou te klein zijn."
+
+#: info/info.c:706
+msgid "Not enough room for a help window, please delete a window."
+msgstr "Niet genoeg ruimte voor een hulp-venster; sluit een venster."
+
+#: info/infodoc.c:45
+msgid "Basic Info command keys\n"
+msgstr "===== Basiscommando's van 'info' =====\n"
+
+#: info/infodoc.c:47
+msgid "\\%-10[quit-help] Close this help window.\n"
+msgstr "\\%-10[quit-help] Dit hulpvenster sluiten.\n"
+
+#: info/infodoc.c:48
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] Info afsluiten.\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr "\\%-10[get-info-help-node] Een korte Info-cursus oproepen.\n"
+
+#: info/infodoc.c:51
+msgid "\\%-10[prev-line] Move up one line.\n"
+msgstr "\\%-10[prev-line] Eén regel omhoog.\n"
+
+#: info/infodoc.c:52
+msgid "\\%-10[next-line] Move down one line.\n"
+msgstr "\\%-10[next-line] Eén regel omlaag.\n"
+
+#: info/infodoc.c:53
+msgid "\\%-10[scroll-backward] Scroll backward one screenful.\n"
+msgstr "\\%-10[scroll-backward] Eén blad terug (<Backspace>).\n"
+
+#: info/infodoc.c:54
+msgid "\\%-10[scroll-forward] Scroll forward one screenful.\n"
+msgstr "\\%-10[scroll-forward] Eén blad verder (<Spatiebalk>).\n"
+
+#: info/infodoc.c:55
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr "\\%-10[beginning-of-node] Naar het begin van deze pagina.\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr "\\%-10[end-of-node] Naar het einde van deze pagina.\n"
+
+#: info/infodoc.c:58
+msgid "\\%-10[move-to-next-xref] Skip to the next hypertext link.\n"
+msgstr "\\%-10[move-to-next-xref] Naar de volgende koppeling springen.\n"
+
+#: info/infodoc.c:59
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under the "
+"cursor.\n"
+msgstr ""
+"\\%-10[select-reference-this-line] De koppeling onder de cursor volgen "
+"(<Enter>).\n"
+
+#: info/infodoc.c:60
+msgid "\\%-10[history-node] Go back to the last node seen in this window.\n"
+msgstr ""
+"\\%-10[history-node] Terug naar de laatst geziene pagina in dit venster.\n"
+
+#: info/infodoc.c:62
+msgid "\\%-10[global-prev-node] Go to the previous node in the document.\n"
+msgstr "\\%-10[global-prev-node] Naar de voorgaande pagina.\n"
+
+#: info/infodoc.c:63
+msgid "\\%-10[global-next-node] Go to the next node in the document.\n"
+msgstr "\\%-10[global-next-node] Naar de volgende pagina.\n"
+
+#: info/infodoc.c:64
+msgid "\\%-10[prev-node] Go to the previous node on this level.\n"
+msgstr "\\%-10[prev-node] Naar de voorgaande pagina op dit niveau.\n"
+
+#: info/infodoc.c:65
+msgid "\\%-10[next-node] Go to the next node on this level.\n"
+msgstr "\\%-10[next-node] Naar de volgende pagina op dit niveau.\n"
+
+#: info/infodoc.c:66
+msgid "\\%-10[up-node] Go up one level.\n"
+msgstr "\\%-10[up-node] Naar de bovenliggende pagina.\n"
+
+#: info/infodoc.c:67
+msgid "\\%-10[top-node] Go to the top node of this document.\n"
+msgstr "\\%-10[top-node] Naar de eerste pagina van dit document.\n"
+
+#: info/infodoc.c:68
+msgid "\\%-10[dir-node] Go to the main `directory' node.\n"
+msgstr "\\%-10[dir-node] Naar de hoofd-inhoudspagina.\n"
+
+#: info/infodoc.c:70
+msgid "1...9 Pick the first...ninth item in this node's menu.\n"
+msgstr ""
+"1...9 Het eerste...negende item uit het menu op deze pagina kiezen.\n"
+
+#: info/infodoc.c:71
+msgid "\\%-10[last-menu-item] Pick the last item in this node's menu.\n"
+msgstr ""
+"\\%-10[last-menu-item] Het laatste item uit het menu op deze pagina "
+"kiezen.\n"
+
+#: info/infodoc.c:72
+msgid "\\%-10[menu-item] Pick a menu item specified by name.\n"
+msgstr "\\%-10[menu-item] Een menu-item kiezen door diens naam op te geven.\n"
+
+#: info/infodoc.c:73
+msgid "\\%-10[xref-item] Follow a cross reference specified by name.\n"
+msgstr ""
+"\\%-10[xref-item] Een kruisverwijzing volgen door diens naam op te geven.\n"
+
+#: info/infodoc.c:74
+msgid "\\%-10[goto-node] Go to a node specified by name.\n"
+msgstr "\\%-10[goto-node] Naar een pagina gaan door diens naam op te geven.\n"
+
+#: info/infodoc.c:76
+msgid "\\%-10[search] Search forward for a specified string.\n"
+msgstr "\\%-10[search] Voorwaarts zoeken naar een tekenreeks.\n"
+
+#: info/infodoc.c:77
+msgid "\\%-10[search-previous] Search for previous occurrence.\n"
+msgstr "\\%-10[search-previous] Vorige zoeken.\n"
+
+#: info/infodoc.c:78
+msgid "\\%-10[search-next] Search for next occurrence.\n"
+msgstr "\\%-10[search-next] Volgende zoeken.\n"
+
+#: info/infodoc.c:79
+msgid ""
+"\\%-10[index-search] Search for a specified string in the index, and\n"
+" select the node referenced by the first entry found.\n"
+msgstr ""
+"\\%-10[index-search] Naar een tekenreeks zoeken in de index van dit Info-"
+"bestand,\n"
+" en de pagina behorend bij het eerste gevonden item "
+"selecteren.\n"
+
+#: info/infodoc.c:81
+msgid "\\%-10[abort-key] Cancel the current operation.\n"
+msgstr "\\%-10[abort-key] Huidige operatie annuleren of beëindigen.\n"
+
+#: info/infodoc.c:89
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"Basiscommando's van 'info'\n"
+"==========================\n"
+
+#: info/infodoc.c:92
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s Dit hulpvenster sluiten.\n"
+
+#: info/infodoc.c:93
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Info afsluiten.\n"
+
+#: info/infodoc.c:94
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Een korte Info-cursus oproepen.\n"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr " %-10s Naar de volgende pagina.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr " %-10s Naar de voorgaande pagina.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s Naar de bovenliggende pagina.\n"
+
+#: info/infodoc.c:101
+#, c-format
+msgid ""
+" %-10s Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+" %-10s Een menu-item kiezen door diens naam op te geven;\n"
+" dit selecteert een andere pagina.\n"
+
+#: info/infodoc.c:103
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr " %-10s Een kruisverwijzing volgen door diens naam op te geven.\n"
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr " %-10s Terug naar de laatst geziene pagina in dit venster.\n"
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr " %-10s Naar de volgende koppeling springen.\n"
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s De koppeling onder de cursor volgen.\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr " %-10s Naar de hoofd-inhoudspagina.\n"
+
+#: info/infodoc.c:108
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr " %-10s Naar de eerste pagina van dit document.\n"
+
+#: info/infodoc.c:110
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"Bewegen binnen een pagina:\n"
+"--------------------------\n"
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s Eén blad verder.\n"
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s Eén blad terug.\n"
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s Naar het begin van deze pagina.\n"
+
+#: info/infodoc.c:115
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s Naar het einde van deze pagina.\n"
+
+#: info/infodoc.c:116
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s Eén regel omlaag.\n"
+
+#: info/infodoc.c:117
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s Eén regel omhoog.\n"
+
+#: info/infodoc.c:119
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"Enkele andere commando's:\n"
+"-------------------------\n"
+
+#: info/infodoc.c:121
+#, c-format
+msgid " %-10s Pick first...ninth item in node's menu.\n"
+msgstr ""
+" %-10s Het eerste...negende item uit het menu op deze pagina kiezen.\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s Het laatste item uit het menu op deze pagina kiezen.\n"
+
+#: info/infodoc.c:125
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr ""
+" %-10s Naar een tekenreeks zoeken in de index van dit Info-bestand,\n"
+" en de pagina behorend bij het eerste gevonden item "
+"selecteren.\n"
+
+#: info/infodoc.c:127
+#, c-format
+msgid ""
+" %-10s Move to node specified by name.\n"
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+" %-10s Naar een pagina gaan door diens naam op te geven; er mag een\n"
+" bestandsnaam meegegeven worden via (BESTANDSNAAM)PAGINANAAM.\n"
+
+#: info/infodoc.c:129
+#, c-format
+msgid ""
+" %-10s Search forward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr " %-10s Voorwaarts zoeken naar een tekenreeks.\n"
+
+#: info/infodoc.c:131
+#, c-format
+msgid ""
+" %-10s Search backward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr " %-10s Achterwaarts zoeken naar een tekenreeks.\n"
+
+#: info/infodoc.c:312
+msgid "The current search path is:\n"
+msgstr "Het huidige zoekpad voor Info-bestanden is:\n"
+
+#: info/infodoc.c:316
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"Alle beschikbare commando's in Info-vensters:\n"
+"=============================================\n"
+"\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"Beschikbare commando's in de echoregel:\n"
+"=======================================\n"
+"\n"
+
+#: info/infodoc.c:343
+#, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+"De volgende commando's kunnen alleen aangeroepen worden via %s:\n"
+"================================================================\n"
+"\n"
+
+#: info/infodoc.c:347
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+"De volgende commando's kunnen helemaal niet aangeroepen worden:\n"
+"===============================================================\n"
+"\n"
+
+#: info/infodoc.c:477
+msgid "Display help message"
+msgstr "Deze hulptekst tonen"
+
+#: info/infodoc.c:495
+msgid "Visit Info node `(info)Help'"
+msgstr "Naar Info-pagina '(info)Help'"
+
+#: info/infodoc.c:633
+msgid "Print documentation for KEY"
+msgstr "Uitleg geven over een toets"
+
+#: info/infodoc.c:645
+#, c-format
+msgid "Describe key: %s"
+msgstr "Te beschrijven toets: %s"
+
+#: info/infodoc.c:656
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s is niet gedefinieerd."
+
+#: info/infodoc.c:672 info/infodoc.c:701
+#, c-format
+msgid "%s is undefined."
+msgstr "%s is niet gedefinieerd."
+
+#: info/infodoc.c:722
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s is gedefinieerd als %s."
+
+#: info/infodoc.c:1146
+msgid "Show what to type to execute a given command"
+msgstr "Tonen wat ingetypt moet worden om een gegeven commando uit te voeren"
+
+#: info/infodoc.c:1150
+msgid "Where is command: "
+msgstr "Waar is het commando: "
+
+#: info/infodoc.c:1172
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "'%s' is aan geen enkele toetscombinatie toegekend"
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s kan alleen aangeroepen worden via %s."
+
+#: info/infodoc.c:1183
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s kan aangeroepen worden via %s."
+
+#: info/infodoc.c:1188
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "Er is geen functie met de naam '%s'"
+
+#: info/infodoc.c:96
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"Selecteren van andere pagina's:\n"
+"-------------------------------\n"
+
+#: info/infokey.c:170
+msgid "incorrect number of arguments"
+msgstr "onjuist aantal argumenten"
+
+#: info/infokey.c:201
+#, c-format
+msgid "cannot open input file `%s'"
+msgstr "kan invoerbestand '%s' niet openen"
+
+#: info/infokey.c:215
+#, c-format
+msgid "cannot create output file `%s'"
+msgstr "kan uitvoerbestand '%s' niet aanmaken"
+
+#: info/infokey.c:226
+#, c-format
+msgid "error writing to `%s'"
+msgstr "fout bij het schrijven naar '%s'"
+
+#: info/infokey.c:232
+#, c-format
+msgid "error closing output file `%s'"
+msgstr "fout bij het sluiten van uitvoerbestand '%s'"
+
+#: info/infokey.c:450
+msgid "key sequence too long"
+msgstr "toetsenreeks is te lang"
+
+#: info/infokey.c:529
+msgid "missing key sequence"
+msgstr "ontbrekende toetsenreeks"
+
+#: info/infokey.c:610
+msgid "NUL character (\\000) not permitted"
+msgstr "NUL-teken (\\000) is niet toegestaan"
+
+#: info/infokey.c:641
+#, c-format
+msgid "NUL character (^%c) not permitted"
+msgstr "NUL-teken (^%c) is niet toegestaan"
+
+#: info/infokey.c:665
+msgid "missing action name"
+msgstr "ontbrekende actienaam"
+
+#: info/infokey.c:681 info/infokey.c:756
+msgid "section too long"
+msgstr "sectie is te lang"
+
+#: info/infokey.c:688
+#, c-format
+msgid "unknown action `%s'"
+msgstr "onbekende actie '%s'"
+
+#: info/infokey.c:698
+msgid "action name too long"
+msgstr "actienaam is te lang"
+
+#: info/infokey.c:712
+#, c-format
+msgid "extra characters following action `%s'"
+msgstr "extra tekens na actie '%s'"
+
+#: info/infokey.c:723
+msgid "missing variable name"
+msgstr "ontbrekende naam van variabele"
+
+#: info/infokey.c:733
+msgid "missing `=' immediately after variable name"
+msgstr "ontbrekende '=' na naam van variabele"
+
+#: info/infokey.c:741
+msgid "variable name too long"
+msgstr "naam van variabele is te lang"
+
+#: info/infokey.c:765
+msgid "value too long"
+msgstr "waarde is te lang"
+
+#: info/infokey.c:890
+#, c-format
+msgid "\"%s\", line %u: "
+msgstr "\"%s\", regel %u: "
+
+#: info/infokey.c:906
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [INPUT-FILE]\n"
+"\n"
+"Compile infokey source file to infokey file. Reads INPUT-FILE (default\n"
+"$HOME/.infokey) and writes compiled key file to (by default) $HOME/.info.\n"
+"\n"
+"Options:\n"
+" --output FILE output to FILE instead of $HOME/.info\n"
+" --help display this help and exit.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"Gebruik: %s [OPTIE]... [INVOERBESTAND]\n"
+"\n"
+"Een infokey-bronbestand naar een binair infokey-bestand compileren.\n"
+"Dit leest een INVOERBESTAND (standaard $HOME/.infokey) en schrijft\n"
+"het gecompileerde infokey-bestand (standaard) naar $HOME/.info.\n"
+"\n"
+"Opties:\n"
+" --output BESTAND uitvoer naar dit bestand schrijven\n"
+" --help deze hulptekst tonen en stoppen\n"
+" --version versie-informatie tonen en stoppen\n"
+
+#: info/infomap.c:955
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "Infokey-bestand '%s' is te klein -- wordt genegeerd"
+
+#: info/infomap.c:958
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "Infokey-bestand '%s' is te groot -- wordt genegeerd"
+
+#: info/infomap.c:971
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "Fout bij lezen van infokey-bestand '%s' -- te weinig gelezen"
+
+#: info/infomap.c:990
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+"Ongeldig infokey-bestand '%s' (onjuiste magische nummers) --\n"
+"voer 'infokey' uit om het op orde te brengen"
+
+#: info/infomap.c:999
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr ""
+"Uw infokey-bestand '%s' is verouderd --\n"
+"voer 'infokey' uit om het op orde te brengen"
+
+#: info/infomap.c:1015
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+"Ongeldig infokey-bestand '%s' (onjuiste sectielengte) --\n"
+"voer 'infokey' uit om het op orde te brengen"
+
+#: info/infomap.c:1036
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr ""
+"Ongeldig infokey-bestand '%s' (onjuiste sectiecode) --\n"
+"voer 'infokey' uit om het op orde te brengen"
+
+#: info/infomap.c:1171
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr ""
+"Foute gegevens in infokey-bestand -- enkele toetstoewijzingen zijn genegeerd"
+
+#: info/infomap.c:1221
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr "Foute gegevens in infokey-bestand -- sommige definities zijn genegeerd"
+
+#: info/m-x.c:68
+msgid "Read the name of an Info command and describe it"
+msgstr "De naam van een Info-commando lezen en een omschrijving ervan geven"
+
+#: info/m-x.c:72
+msgid "Describe command: "
+msgstr "Te omschrijven commando: "
+
+#: info/m-x.c:95
+msgid "Read a command name in the echo area and execute it"
+msgstr "De naam van een commando in de echoregel lezen en deze uitvoeren"
+
+#: info/m-x.c:139
+msgid "Cannot execute an `echo-area' command here."
+msgstr "Kan hier geen 'echoregel'-commando uitvoeren."
+
+#: info/m-x.c:153
+#, c-format
+msgid "Undefined command: %s"
+msgstr "Onbekend commando: %s"
+
+#: info/m-x.c:159
+msgid "Set the height of the displayed window"
+msgstr "De hoogte van het weergavevenster instellen"
+
+#: info/m-x.c:172
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Schermhoogte instellen op (%d): "
+
+#: info/makedoc.c:166 info/makedoc.c:174
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+" Doorzochte bronbestanden om dit bestand te maken omvatten:\n"
+"\n"
+
+#: info/makedoc.c:556
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "Kan het bestand %s niet manipuleren.\n"
+
+#: info/nodemenu.c:30
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+"\n"
+"* Menu:\n"
+" (Bestand)Pagina Regels Bytes Volledig pad\n"
+" --------------- ------ ----- ------------"
+
+#: info/nodemenu.c:201
+msgid ""
+"Here is the menu of nodes you have recently visited.\n"
+"Select one from this menu, or use `\\[history-node]' in another window.\n"
+msgstr ""
+"Hier is een menu van pagina's die u recent bezocht hebt.\n"
+"Selecteer er een, of gebruik `\\[history-node]' in een ander venster.\n"
+
+#: info/nodemenu.c:223
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr "Een venster openen met een menu van reeds bezochte pagina's"
+
+#: info/nodemenu.c:303
+msgid "Select a node which has been previously visited in a visible window"
+msgstr "Een pagina selecteren die recent bekeken werd in een zichtbaar venster"
+
+#: info/nodemenu.c:316
+msgid "Select visited node: "
+msgstr "Te selecteren bezochte pagina: "
+
+#: info/nodemenu.c:336 info/session.c:2578
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "De verwijzing is verdwenen! (%s)."
+
+#: info/search.c:166
+#, c-format
+msgid "regexp error: %s"
+msgstr "fout in reguliere expressie: %s"
+
+#: info/session.c:164
+#, c-format
+msgid ""
+"Welcome to Info version %s. Type \\[get-help-window] for help, \\[menu-item] "
+"for menu item."
+msgstr ""
+"Welkom bij Info versie %s. Typ <\\[get-help-window]> voor hulp, "
+"<Spatiebalk> om te bladeren."
+
+#: info/session.c:625
+msgid "Move down to the next line"
+msgstr "Naar de volgende regel"
+
+#: info/session.c:661
+msgid "Move up to the previous line"
+msgstr "Naar de vorige regel"
+
+#: info/session.c:931
+msgid "Move to the end of the line"
+msgstr "Naar het einde van de regel"
+
+#: info/session.c:942
+msgid "Move to the start of the line"
+msgstr "Naar het begin van de regel"
+
+#: info/session.c:1142
+msgid "Next"
+msgstr "Volgende"
+
+#: info/session.c:1158 info/session.c:1283
+msgid "No more nodes within this document."
+msgstr "Dit is de laatste pagina van dit document."
+
+#: info/session.c:1309
+msgid "No `Prev' for this node."
+msgstr "Er is geen voorgaande pagina op dit niveau."
+
+#: info/session.c:1329
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr "Dit is de eerste pagina van dit document."
+
+#: info/session.c:1391
+msgid "Move forwards or down through node structure"
+msgstr "Voorwaarts door alle pagina's van een document bladeren"
+
+#: info/session.c:1407
+msgid "Move backwards or up through node structure"
+msgstr "Achterwaarts door alle pagina's van een document bladeren"
+
+#: info/session.c:1508
+msgid "Scroll forward in this window"
+msgstr "Verderscrollen in dit venster"
+
+#: info/session.c:1516
+msgid "Scroll forward in this window and set default window size"
+msgstr "Verderscrollen in dit venster en de venstergrootte instellen"
+
+#: info/session.c:1524
+msgid "Scroll forward in this window staying within node"
+msgstr "Binnen de pagina verderscrollen in dit venster"
+
+#: info/session.c:1532
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr ""
+"Binnen de pagina verderscrollen in dit venster en de venstergrootte instellen"
+
+#: info/session.c:1540
+msgid "Scroll backward in this window"
+msgstr "Terugscrollen in dit venster"
+
+#: info/session.c:1548
+msgid "Scroll backward in this window and set default window size"
+msgstr "Terugscrollen in dit venster en de venstergrootte instellen"
+
+#: info/session.c:1557
+msgid "Scroll backward in this window staying within node"
+msgstr "Binnen de pagina terugscrollen in dit venster"
+
+#: info/session.c:1565
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr ""
+"Binnen de pagina terugscrollen in dit venster en de venstergrootte instellen"
+
+#: info/session.c:1573
+msgid "Move to the start of this node"
+msgstr "Naar het begin van deze pagina"
+
+#: info/session.c:1580
+msgid "Move to the end of this node"
+msgstr "Naar het einde van deze pagina"
+
+#: info/session.c:1587
+msgid "Scroll down by lines"
+msgstr "Een aantal regels omlaagscrollen"
+
+#: info/session.c:1604
+msgid "Scroll up by lines"
+msgstr "Een aantal regels omhoogscrollen"
+
+#: info/session.c:1622
+msgid "Scroll down by half screen size"
+msgstr "Een halve pagina omlaagscrollen"
+
+#: info/session.c:1648
+msgid "Scroll up by half screen size"
+msgstr "Een halve pagina omhoogscrollen"
+
+#: info/session.c:1677
+msgid "Select the next window"
+msgstr "Het volgende venster selecteren"
+
+#: info/session.c:1716
+msgid "Select the previous window"
+msgstr "Het vorige venster selecteren"
+
+#: info/session.c:1767
+msgid "Split the current window"
+msgstr "Het huidige venster splitsen"
+
+#: info/session.c:1848
+msgid "Delete the current window"
+msgstr "Het huidige venster sluiten"
+
+#: info/session.c:1856
+msgid "Cannot delete a permanent window"
+msgstr "Een permanent venster kan niet gesloten worden."
+
+#: info/session.c:1888
+msgid "Delete all other windows"
+msgstr "Alle andere vensters sluiten"
+
+#: info/session.c:1934
+msgid "Scroll the other window"
+msgstr "In het andere venster verderscrollen"
+
+#: info/session.c:1955
+msgid "Scroll the other window backward"
+msgstr "In het andere venster terugscrollen"
+
+#: info/session.c:1961
+msgid "Grow (or shrink) this window"
+msgstr "Dit venster vergroten of verkleinen"
+
+#: info/session.c:1972
+msgid "Divide the available screen space among the visible windows"
+msgstr "De beschikbare schermruimte verdelen tussen de zichtbare vensters"
+
+#: info/session.c:1979
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "Regelafbreking in het huidige venster omschakelen"
+
+#: info/session.c:1986
+msgid "Toggle the usage of regular expressions in searches"
+msgstr "Het gebruik van reguliere expressies bij zoekopdrachten aan-/uitzetten"
+
+#: info/session.c:1990
+msgid "Using regular expressions for searches."
+msgstr "Zoeken gebruikt reguliere expressies."
+
+#: info/session.c:1991
+msgid "Using literal strings for searches."
+msgstr "Zoeken gebruikt letterlijke tekst."
+
+#: info/session.c:2162
+msgid "Select the Next node"
+msgstr "Naar de volgende pagina op dit niveau"
+
+#: info/session.c:2170
+msgid "Select the Prev node"
+msgstr "Naar de voorgaande pagina op dit niveau"
+
+#: info/session.c:2178
+msgid "Select the Up node"
+msgstr "Naar de bovenliggende pagina"
+
+#: info/session.c:2185
+msgid "Select the last node in this file"
+msgstr "Naar de laatste pagina van dit document"
+
+#: info/session.c:2212 info/session.c:2245
+msgid "This window has no additional nodes"
+msgstr "Dit venster heeft geen extra pagina's."
+
+#: info/session.c:2218
+msgid "Select the first node in this file"
+msgstr "Naar de eerste pagina van dit document"
+
+#: info/session.c:2252
+msgid "Select the last item in this node's menu"
+msgstr "Het laatste menu-item op deze pagina selecteren"
+
+#: info/session.c:2258
+msgid "Select this menu item"
+msgstr "Het huidige menu-item selecteren"
+
+#: info/session.c:2291
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "Dit menu heeft minder dan %d items."
+
+#: info/session.c:2485 info/session.c:2486
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Te kiezen menu-item (%s): "
+
+#: info/session.c:2489
+msgid "Menu item: "
+msgstr "Te kiezen menu-item: "
+
+#: info/session.c:2496 info/session.c:2497
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Te volgen verwijzing (%s): "
+
+#: info/session.c:2500
+msgid "Follow xref: "
+msgstr "Te volgen kruisverwijzing: "
+
+#: info/session.c:2629
+msgid "Read a menu item and select its node"
+msgstr "De naam van een menu-item lezen en diens pagina selecteren"
+
+#: info/session.c:2637
+msgid "Read a footnote or cross reference and select its node"
+msgstr ""
+"De naam van een voetnoot of kruisverwijzing lezen en diens pagina selecteren"
+
+#: info/session.c:2643
+msgid "Move to the start of this node's menu"
+msgstr "Naar het begin van het menu op deze pagina"
+
+#: info/session.c:2667
+msgid "Visit as many menu items at once as possible"
+msgstr "Zo veel mogelijk menu-items tegelijk bezoeken"
+
+#: info/session.c:2695
+msgid "Read a node name and select it"
+msgstr "De naam van een pagina lezen en deze selecteren"
+
+#: info/session.c:2750 info/session.c:2755
+msgid "Goto node: "
+msgstr "Te bezoeken pagina: "
+
+#: info/session.c:2819
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "Er is geen menu in pagina '%s'."
+
+#: info/session.c:2865
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "Er is geen menu-item '%s' op pagina '%s'."
+
+#: info/session.c:2895
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr "Kan de pagina waarnaar verwezen werd door '%s' niet vinden in '%s'."
+
+#: info/session.c:2945
+msgid "Read a list of menus starting from dir and follow them"
+msgstr "Een reeks menu-items lezen en deze vanaf de inhoudspagina volgen"
+
+#: info/session.c:2947
+msgid "Follow menus: "
+msgstr "Te volgen reeks menu-items: "
+
+#: info/session.c:3140
+msgid "Find the node describing program invocation"
+msgstr "De pagina zoeken die de aanroepwijze van het programma beschrijft"
+
+#: info/session.c:3142
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "Aanroepbeschrijving bekijken van [%s]: "
+
+#: info/session.c:3180
+msgid "Read a manpage reference and select it"
+msgstr "Een man-paginaverwijzing lezen en deze selecteren"
+
+#: info/session.c:3184
+msgid "Get Manpage: "
+msgstr "Te bekijken man-pagina: "
+
+#: info/session.c:3214
+msgid "Select the node `Top' in this file"
+msgstr "Naar de eerste pagina van dit bestand"
+
+#: info/session.c:3220
+msgid "Select the node `(dir)'"
+msgstr "Naar de hoofd-inhoudspagina"
+
+#: info/session.c:3237 info/session.c:3239
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Te sluiten pagina (%s): "
+
+#: info/session.c:3291
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "Kan pagina '%s' niet sluiten"
+
+#: info/session.c:3301
+msgid "Cannot kill the last node"
+msgstr "Kan niet verder terug dan de eerste pagina."
+
+#: info/session.c:3387
+msgid "Select the most recently selected node"
+msgstr "Terug naar de laatst geziene pagina"
+
+#: info/session.c:3393
+msgid "Kill this node"
+msgstr "Deze pagina sluiten"
+
+#: info/session.c:3401
+msgid "Read the name of a file and select it"
+msgstr "De naam van een bestand lezen en deze selecteren"
+
+#: info/session.c:3405
+msgid "Find file: "
+msgstr "Te bezoeken bestand: "
+
+#: info/session.c:3422
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "Kan '%s' niet vinden."
+
+#: info/session.c:3465 info/session.c:3583
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "Kan uitvoerbestand '%s' niet aanmaken."
+
+#: info/session.c:3479 info/session.c:3601 info/session.c:3661
+msgid "Done."
+msgstr "Klaar."
+
+#: info/session.c:3534
+#, c-format
+msgid "Writing node %s..."
+msgstr "Schrijven van pagina %s..."
+
+#: info/session.c:3610
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr "De inhoud van deze pagina doorsluizen naar het INFO_PRINT_COMMAND"
+
+#: info/session.c:3645
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "Kan de pijp naar '%s' niet openen."
+
+#: info/session.c:3651
+#, c-format
+msgid "Printing node %s..."
+msgstr "Afdrukken van pagina %s..."
+
+#: info/session.c:3900
+msgid "Search continued from the end of the document."
+msgstr "Het zoeken is verdergegaan vanaf het einde."
+
+#: info/session.c:3905
+msgid "Search continued from the beginning of the document."
+msgstr "Het zoeken is verdergegaan vanaf het begin."
+
+#: info/session.c:3922
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "Zoeken naar subbestand %s..."
+
+#: info/session.c:3979
+msgid "Read a string and search for it case-sensitively"
+msgstr "Een tekenreeks lezen en daar hoofdlettergevoelig naar zoeken"
+
+#: info/session.c:3986
+msgid "Read a string and search for it"
+msgstr "Een tekenreeks lezen en daar naar zoeken"
+
+#: info/session.c:3994
+msgid "Read a string and search backward for it"
+msgstr "Een tekenreeks lezen en daar achterwaarts naar zoeken"
+
+#: info/session.c:4030 info/session.c:4036
+#, c-format
+msgid "%s%s%s [%s]: "
+msgstr "%s%s%s [\"%s\"]: "
+
+#: info/session.c:4031 info/session.c:4037
+msgid "Regexp search"
+msgstr "Zoeken naar expressie"
+
+#: info/session.c:4032 info/session.c:4038
+msgid " case-sensitively"
+msgstr " (hooflettergevoelig)"
+
+#: info/session.c:4033 info/session.c:4039
+msgid " backward"
+msgstr " (achterwaarts)"
+
+#: info/session.c:4037
+msgid "Search"
+msgstr "Zoeken"
+
+#: info/session.c:4079
+msgid "Search failed."
+msgstr "Niet gevonden."
+
+#: info/session.c:4097
+msgid "Repeat last search in the same direction"
+msgstr "De laatste zoekopdracht in dezelfde richting herhalen"
+
+#: info/session.c:4100 info/session.c:4110
+msgid "No previous search string"
+msgstr "Geen eerdere zoektekenreeks."
+
+#: info/session.c:4107
+msgid "Repeat last search in the reverse direction"
+msgstr "De laatste zoekopdracht in tegenovergestelde richting herhalen"
+
+#: info/session.c:4126 info/session.c:4132
+msgid "Search interactively for a string as you type it"
+msgstr "Naar een tekenreeks zoeken terwijl u deze intypt"
+
+#: info/session.c:4212
+msgid "Regexp I-search backward: "
+msgstr "Achterwaarts typend-zoeken naar expressie: "
+
+#: info/session.c:4213
+msgid "I-search backward: "
+msgstr "Achterwaarts typend-zoeken: "
+
+#: info/session.c:4215
+msgid "Regexp I-search: "
+msgstr "Typend-zoeken naar expressie: "
+
+#: info/session.c:4216
+msgid "I-search: "
+msgstr "Typend-zoeken: "
+
+#: info/session.c:4241 info/session.c:4243
+msgid "Failing "
+msgstr "*Ongevonden* "
+
+#: info/session.c:4734
+msgid "Move to the previous cross reference"
+msgstr "Naar de vorige kruisverwijzing springen"
+
+#: info/session.c:4752
+msgid "Move to the next cross reference"
+msgstr "Naar de volgende kruisverwijzing springen"
+
+#: info/session.c:4774
+msgid "Select reference or menu item appearing on this line"
+msgstr "De verwijzing of het menu-item in deze regel volgen"
+
+#: info/session.c:4797
+msgid "Cancel current operation"
+msgstr "Huidige operatie annuleren"
+
+# Dit is een reactie op bovenstaande 'Cancel current operation'.
+#: info/session.c:4804
+msgid "Quit"
+msgstr "Geannuleerd"
+
+#: info/session.c:4813
+msgid "Move the cursor to a specific line of the window"
+msgstr "De cursor op een bepaalde regel in het venster zetten"
+
+#: info/session.c:4845
+msgid "Redraw the display"
+msgstr "Het venster opnieuw schrijven"
+
+#: info/session.c:4882
+msgid "Quit using Info"
+msgstr "Info afsluiten"
+
+#: info/session.c:4895
+msgid "Run command bound to this key's lowercase variant"
+msgstr ""
+"Commando uitvoeren dat behoort bij de kleinelettervariant van deze toets"
+
+#: info/session.c:4906
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "Onbekend commando (%s)."
+
+#: info/session.c:4909
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "\"%s\" is ongeldig"
+
+#: info/session.c:4910
+#, c-format
+msgid "`%s' is invalid"
+msgstr "'%s' is ongeldig"
+
+#: info/session.c:5125
+msgid "Add this digit to the current numeric argument"
+msgstr "Dit cijfer toevoegen aan het huidige numerieke argument"
+
+#: info/session.c:5134
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr ""
+"Een nieuw numeriek argument beginnen (of het huidige met 4 vermenigvuldigen)"
+
+#: info/session.c:5149
+msgid "Internally used by \\[universal-argument]"
+msgstr "Intern gebruikt door \\[universal-argument]"
+
+#: info/tilde.c:336
+#, c-format
+msgid "readline: Out of virtual memory!\n"
+msgstr "readline: onvoldoende geheugen beschikbaar\n"
+
+#: info/variables.c:37
+msgid "When \"On\", footnotes appear and disappear automatically"
+msgstr "Bij 'On' worden voetnoten automatisch getoond"
+
+#: info/variables.c:41
+msgid "When \"On\", creating or deleting a window resizes other windows"
+msgstr "Bij 'On' worden venstergroottes automatisch aangepast"
+
+#: info/variables.c:45
+msgid "When \"On\", flash the screen instead of ringing the bell"
+msgstr "Bij 'On' flitst het scherm in plaats van een belsignaal"
+
+#: info/variables.c:49
+msgid "When \"On\", errors cause the bell to ring"
+msgstr "Bij 'On' geven fouten een belsignaal"
+
+#: info/variables.c:53
+msgid "When \"On\", Info garbage collects files which had to be uncompressed"
+msgstr "Bij 'On' worden gedecomprimeerde teksten vergeten"
+
+#: info/variables.c:56
+msgid "When \"On\", the portion of the matched search string is highlighted"
+msgstr "Bij 'On' staat het overeenkomende deel in hoofdletters"
+
+#: info/variables.c:60
+msgid "Controls what happens when scrolling is requested at the end of a node"
+msgstr "Hoe te scrollen aan het eind van een pagina"
+
+#: info/variables.c:65
+msgid "Same as scroll-behaviour"
+msgstr "Hoe te scrollen aan het eind van een pagina"
+
+#: info/variables.c:69
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr "Aantal te scrollen regels wanneer cursor buiten venster komt"
+
+#: info/variables.c:73
+msgid "Controls whether scroll-behavior affects cursor movement commands"
+msgstr "Bij 'On' werkt pijltjestoets ook op paginagrens"
+
+#: info/variables.c:77
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr "Bij 'On' accepteert en toont Info ISO-Latin-tekens"
+
+#: info/variables.c:81
+msgid ""
+"What to do when a scrolling command is issued at the end of the last node"
+msgstr "Hoe te scrollen aan het eind van de laatste pagina"
+
+#: info/variables.c:88
+msgid "Explain the use of a variable"
+msgstr "De betekenis van een variabele uitleggen"
+
+#: info/variables.c:94
+msgid "Describe variable: "
+msgstr "Te omschrijven variabele: "
+
+#: info/variables.c:113
+msgid "Set the value of an Info variable"
+msgstr "De waarde van een Info-variabele instellen"
+
+#: info/variables.c:119
+msgid "Set variable: "
+msgstr "In te stellen variabele: "
+
+#: info/variables.c:137
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "Variabele %s deze waarde geven (%d): "
+
+#: info/variables.c:178
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "Variabele %s deze waarde geven (%s): "
+
+#: info/window.c:1026
+msgid "--*** Tags out of Date ***"
+msgstr "--*** Tags zijn verouderd ***"
+
+#: info/window.c:1037
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), regels ----, "
+
+#: info/window.c:1044
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d regels --%s--"
+
+#: info/window.c:1048
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d regels --%s--"
+
+#: info/window.c:1055
+#, c-format
+msgid " Subfile: %s"
+msgstr " Subbestand: %s"
+
+#: install-info/install-info.c:221
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: waarschuwing: "
+
+#: install-info/install-info.c:270
+#, c-format
+msgid " for %s"
+msgstr " voor %s"
+
+#: install-info/install-info.c:500
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr "\tTyp '%s --help' voor een volledige lijst van opties.\n"
+
+#: install-info/install-info.c:508
+#, c-format
+msgid "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+msgstr "Gebruik: %s [OPTIE]... [INFO-BESTAND [INHOUDSBESTAND]]\n"
+
+#: install-info/install-info.c:510
+msgid "Add or remove entries in INFO-FILE from the Info directory DIR-FILE."
+msgstr ""
+"De items die voorkomen in INFO-BESTAND toevoegen aan of\n"
+"verwijderen uit het Info-inhoudsbestand INHOUDSBESTAND."
+
+#: install-info/install-info.c:513
+msgid ""
+"Options:\n"
+" --debug report what is being done.\n"
+" --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+" don't insert any new entries.\n"
+" --description=TEXT the description of the entry is TEXT; used with\n"
+" the --name option to become synonymous with the\n"
+" --entry option.\n"
+" --dir-file=NAME specify file name of Info directory file;\n"
+" equivalent to using the DIR-FILE argument.\n"
+" --dry-run same as --test."
+msgstr ""
+"Opties:\n"
+" --debug tonen wat er gedaan wordt\n"
+" --delete de items van INFO-BESTAND uit INHOUDSBESTAND "
+"verwijderen;\n"
+" geen nieuwe items toevoegen\n"
+" --description=TEKST de beschrijving van een item; wanneer samen gebruikt "
+"met\n"
+" '--name', is dit equivalent aan '--entry'\n"
+" --dir-file=NAAM de bestandsnaam van het Info-inhoudsbestand;\n"
+" equivalent aan het argument INHOUDSBESTAND\n"
+" --dry-run hetzelfde als '--test'"
+
+#: install-info/install-info.c:525
+msgid ""
+" --entry=TEXT insert TEXT as an Info directory entry.\n"
+" TEXT is written as an Info menu item line followed\n"
+" by zero or more extra lines starting with "
+"whitespace.\n"
+" If you specify more than one entry, all are added.\n"
+" If you don't specify any entries, they are determined\n"
+" from information in the Info file itself.\n"
+" When removing, TEXT specifies the entry to remove.\n"
+" TEXT is only removed as a last resort, if the\n"
+" entry as determined from the Info file is not "
+"present,\n"
+" and the basename of the Info file isn't found either."
+msgstr ""
+" --entry=TEKST deze tekst toevoegen als een Info-inhoudsitem;\n"
+" de TEKST moet de vorm van een Info-menu-item "
+"hebben,\n"
+" met nul of meer extra regels beginnend met "
+"witruimte;\n"
+" indien u meer dan één item opgeeft, worden ze "
+"allemaal\n"
+" toegevoegd; als u geen items opgeeft, worden deze "
+"uit\n"
+" het gegeven Info-bestand gehaald"
+
+#: install-info/install-info.c:537
+msgid ""
+" --help display this help and exit.\n"
+" --info-dir=DIR same as --dir-file=DIR/dir.\n"
+" --info-file=FILE specify Info file to install in the directory;\n"
+" equivalent to using the INFO-FILE argument.\n"
+" --item=TEXT same as --entry=TEXT.\n"
+" --keep-old do not replace entries, or remove empty sections.\n"
+" --menuentry=TEXT same as --name=TEXT.\n"
+" --name=TEXT the name of the entry is TEXT; used with --description\n"
+" to become synonymous with the --entry option.\n"
+" --no-indent do not format new entries in the DIR file.\n"
+" --quiet suppress warnings."
+msgstr ""
+" --help deze hulptekst tonen en stoppen\n"
+" --info-dir=MAP hetzelfde als '--dir-file=MAP/dir'\n"
+" --info-file=BESTAND een Info-bestand waarvan de items opgenomen moeten "
+"worden;\n"
+" equivalent aan het argument INFO-BESTAND\n"
+" --item=TEKST hetzelfde als '--entry=TEKST'\n"
+" --keep-old geen items vervangen, en lege secties niet "
+"verwijderen\n"
+" --menuentry=TEKST hetzelfde als '--name=TEKST'\n"
+" --no-indent nieuwe items in het inhoudsbestand niet opmaken\n"
+" --quiet waarschuwingen onderdrukken"
+
+#: install-info/install-info.c:550
+msgid ""
+" --regex=R put this file's entries in all sections that match the\n"
+" regular expression R (ignoring case).\n"
+" --remove same as --delete.\n"
+" --remove-exactly only remove if the info file name matches exactly;\n"
+" suffixes such as .info and .gz are not ignored.\n"
+" --section=SEC put entries in section SEC of the directory.\n"
+" If you specify more than one section, all the entries\n"
+" are added in each of the sections.\n"
+" If you don't specify any sections, they are "
+"determined\n"
+" from information in the Info file itself.\n"
+" --section R SEC equivalent to --regex=R --section=SEC --add-once."
+msgstr ""
+" --regex=EXPRESSIE de gevonden items toevoegen aan alle secties die aan "
+"deze\n"
+" reguliere expressie voldoen (daarbij verschil "
+"tussen\n"
+" hoofd- en kleine letters negeren)\n"
+" --remove hetzelfde als '--delete'\n"
+" --remove-exactly alleen verwijderen als de infobestandsnaam exact "
+"klopt;\n"
+" achtervoegsels als .info en .gz worden genegeerd\n"
+" --section=SECTIE de gevonden items aan deze sectie van de inhoud "
+"toevoegen;\n"
+" als u meer dan één sectie opgeeft, worden de items "
+"aan\n"
+" al die secties toegevoegd; als u geen secties "
+"opgeeft,\n"
+" wordt de informatie uit het Info-bestand zelf "
+"gehaald\n"
+" --section EXP SEC hetzelfde asl '--regex=EXP --section=SEC --add-once'"
+
+#: install-info/install-info.c:563
+msgid ""
+" --silent suppress warnings.\n"
+" --test suppress updating of DIR-FILE.\n"
+" --version display version information and exit."
+msgstr ""
+" --silent waarschuwingen onderdrukken\n"
+" --test het INHOUDSBESTAND niet bijwerken, slechts doen alsof\n"
+" --version versie-informatie tonen en stoppen"
+
+#: install-info/install-info.c:570
+msgid ""
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"Stuur foutrapportages naar <bug-texinfo@gnu.org>,\n"
+"algemene vragen en commentaar naar <help-texinfo@gnu.org>,\n"
+"en opmerkingen over de vertaling naar <vertaling@vrijschrift.org>.\n"
+"Texinfo-homepagina: http://www.gnu.org/software/texinfo/"
+
+#: install-info/install-info.c:597
+#, c-format
+msgid ""
+"This is the file .../info/dir, which contains the\n"
+"topmost node of the Info hierarchy, called (dir)Top.\n"
+"The first time you invoke Info you start off looking at this node.\n"
+"\n"
+"%s\tThis is the top of the INFO tree\n"
+"\n"
+" This (the Directory node) gives a menu of major topics.\n"
+" Typing \"q\" exits, \"?\" lists all Info commands, \"d\" returns here,\n"
+" \"h\" gives a primer for first-timers,\n"
+" \"mEmacs<Return>\" visits the Emacs manual, etc.\n"
+"\n"
+" In Emacs, you can click mouse button 2 on a menu item or cross reference\n"
+" to select it.\n"
+"\n"
+"%s\n"
+msgstr ""
+"Dit is het bestand .../info/dir, dat de bovenste pagina van\n"
+"de Info-documentenhiërarchie bevat, genaamd '(dir)Top'.\n"
+"Info gestart zonder argumenten begint op deze pagina.\n"
+"\n"
+"%s\tDit is de top van de INFO-boom\n"
+"\n"
+" Deze inhoudspagina toont een menu met hoofdonderwerpen.\n"
+" Een \"q\" sluit het programma af, een \"d\" brengt u hier terug,\n"
+" \"?\" toont een hulpvenster met alle Info-commando's,\n"
+" \"h\" gaat naar een handleiding voor nieuwe gebruikers,\n"
+" \"mls<Enter>\" toont u de pagina's van het 'ls'-commando, enzovoort.\n"
+"\n"
+"%s\n"
+
+#: install-info/install-info.c:622
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr "%s: kan deze niet lezen (%s) en niet aanmaken (%s)\n"
+
+#: install-info/install-info.c:715
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: is een leeg bestand"
+
+#: install-info/install-info.c:1046 install-info/install-info.c:1086
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "START-INFO-DIR-ENTRY zonder bijpassende END-INFO-DIR-ENTRY"
+
+#: install-info/install-info.c:1081
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "END-INFO-DIR-ENTRY zonder bijpassende START-INFO-DIR-ENTRY"
+
+#: install-info/install-info.c:1946 install-info/install-info.c:1956
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr "%s: hebben al een inhoudsbestand: %s\n"
+
+#: install-info/install-info.c:2036
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: Geef het Info-bestand slechts één keer op.\n"
+
+#: install-info/install-info.c:2069
+#, c-format
+msgid "Extra regular expression specified, ignoring `%s'"
+msgstr "Extra reguliere expressie opgegeven; '%s' wordt genegeerd"
+
+#: install-info/install-info.c:2081
+#, c-format
+msgid "Error in regular expression `%s': %s"
+msgstr "Fout in reguliere expressie '%s': %s"
+
+#: install-info/install-info.c:2139
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "commandoregel-argument '%s' is overbodig"
+
+#: install-info/install-info.c:2143
+msgid "No input file specified; try --help for more information."
+msgstr "Geen invoerbestand gegeven; gebruik '--help' voor meer informatie."
+
+#: install-info/install-info.c:2146
+msgid "No dir file specified; try --help for more information."
+msgstr "Geen inhoudsbestand gegeven; gebruik '--help' voor meer informatie."
+
+#: install-info/install-info.c:2288
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "geen Info-inhoudsitem in '%s'"
+
+#: install-info/install-info.c:2536
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "geen items voor '%s' gevonden; er is niets verwijderd"
+
+#: lib/xexit.c:54
+msgid "ferror on stdout\n"
+msgstr "ferror() op standaarduitvoer\n"
+
+#: lib/xexit.c:59
+msgid "fflush error on stdout\n"
+msgstr "fflush()-fout op standaarduitvoer\n"
+
+#: makeinfo/cmds.c:582 makeinfo/cmds.c:604
+#, c-format
+msgid "arguments to @%s ignored"
+msgstr "argumenten van @%s zijn genegeerd"
+
+#: makeinfo/cmds.c:779
+msgid "January"
+msgstr "januari"
+
+#: makeinfo/cmds.c:779
+msgid "February"
+msgstr "februari"
+
+#: makeinfo/cmds.c:779
+msgid "March"
+msgstr "maart"
+
+#: makeinfo/cmds.c:779
+msgid "April"
+msgstr "april"
+
+#: makeinfo/cmds.c:779
+msgid "May"
+msgstr "mei"
+
+#: makeinfo/cmds.c:780
+msgid "June"
+msgstr "juni"
+
+#: makeinfo/cmds.c:780
+msgid "July"
+msgstr "juli"
+
+#: makeinfo/cmds.c:780
+msgid "August"
+msgstr "augustus"
+
+#: makeinfo/cmds.c:780
+msgid "September"
+msgstr "september"
+
+#: makeinfo/cmds.c:780
+msgid "October"
+msgstr "oktober"
+
+#: makeinfo/cmds.c:781
+msgid "November"
+msgstr "november"
+
+#: makeinfo/cmds.c:781
+msgid "December"
+msgstr "december"
+
+#: makeinfo/cmds.c:1131
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "onwaarschijnlijk teken '%c' in @var"
+
+#: makeinfo/cmds.c:1174
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "argument van @sc is in hoofdletters, heeft dus geen effect"
+
+#: makeinfo/cmds.c:1229
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "'{' werd verwacht, maar '%c' gevonden"
+
+#: makeinfo/cmds.c:1269
+msgid "end of file inside verb block"
+msgstr "einde van bestand in een \"verb\"-blok"
+
+#: makeinfo/cmds.c:1277
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "'}' werd verwacht, maar '%c' gevonden"
+
+#: makeinfo/cmds.c:1308
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+"@strong{Noot...} produceert een loze kruisverwijzing in Info; kies een ander "
+"woord om dat te vermijden"
+
+#: makeinfo/cmds.c:1504
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s is verouderd"
+
+#: makeinfo/cmds.c:1612
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "@sp vereist een postief numeriek argument, niet '%s'"
+
+#: makeinfo/cmds.c:2023 makeinfo/footnote.c:81
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "Fout argument van %c%s"
+
+#: makeinfo/cmds.c:2033 makeinfo/makeinfo.c:4317
+msgid "asis"
+msgstr "asis"
+
+#: makeinfo/cmds.c:2035 makeinfo/cmds.c:2065 makeinfo/makeinfo.c:4319
+msgid "none"
+msgstr "none"
+
+#: makeinfo/cmds.c:2049
+#, c-format
+msgid "Bad argument to @%s"
+msgstr "Fout argument van @%s"
+
+#: makeinfo/cmds.c:2063
+msgid "insert"
+msgstr "invoegen"
+
+#: makeinfo/cmds.c:2079
+#, c-format
+msgid "Bad argument to @%s: %s"
+msgstr "Fout argument van @%s: %s"
+
+#: makeinfo/cmds.c:2162
+#, c-format
+msgid "Expected @%s on or off, not `%s'"
+msgstr "@%s 'on' of 'off' werd verwacht, niet '%s'"
+
+#: makeinfo/cmds.c:2182
+#, c-format
+msgid "Only @%s 10 or 11 is supported, not `%s'"
+msgstr "Bij @%s is alleen 10 of 11 mogelijk, niet '%s'"
+
+#: makeinfo/defun.c:83
+msgid "Missing `}' in @def arg"
+msgstr "Ontbrekende '}' in het argument van @def"
+
+#: makeinfo/defun.c:711
+#, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr "Moet in een '@%s'-omgeving zitten om '@%s' te kunnen gebruiken"
+
+#: makeinfo/files.c:434
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:637
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr "'%s' wordt weggelaten voor een uitvoerbestandsnaam"
+
+#: makeinfo/files.c:645
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr "'%s' wordt weggelaten vanwege het schrijven naar standaarduitvoer"
+
+#: makeinfo/files.c:693
+msgid "Output buffer not empty."
+msgstr "Uitvoerbuffer is niet leeg."
+
+#: makeinfo/float.c:181
+#, c-format
+msgid "Requested float type `%s' not previously used"
+msgstr "Het gevraagde drijvendekommatype '%s' werd niet eerder gebruikt"
+
+#: makeinfo/float.c:376 makeinfo/float.c:382 makeinfo/index.c:959
+#: makeinfo/index.c:965
+msgid "See "
+msgstr "Zie "
+
+#: makeinfo/footnote.c:149
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "'%c%s' vereist een argument '{...}', niet slechts '%s'"
+
+#: makeinfo/footnote.c:164
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "Ontbrekende sluitaccolade voor voetnoot '%s'"
+
+#: makeinfo/footnote.c:197
+msgid "Footnote defined without parent node"
+msgstr "Voetnoot gedefinieerd zonder referentiepagina"
+
+#: makeinfo/footnote.c:209
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "Voetnoten binnen een voetnoot zijn niet toegestaan"
+
+#: makeinfo/footnote.c:301 makeinfo/index.c:187
+msgid "Footnotes"
+msgstr "Voetnoten"
+
+#: makeinfo/html.c:91
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr "%s: kan '--css'-bestand '%s' niet openen"
+
+#: makeinfo/html.c:180
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr "%s:%d: '--css'-bestand eindigt in commentaar"
+
+#: makeinfo/html.c:426
+msgid "[unexpected] no html tag to pop"
+msgstr "[onverwacht] geen html-tag aanwezig"
+
+#: makeinfo/html.c:800
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "[onverwacht] ongeldige paginanaam: '%s'"
+
+#: makeinfo/index.c:167
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "Onbekende index '%s'"
+
+#: makeinfo/index.c:232
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr "Info kan ':' in indexitem '%s' niet aan"
+
+#: makeinfo/index.c:410
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "Index '%s' bestaat al"
+
+#: makeinfo/index.c:453
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "Onbekende index '%s' en/of '%s' in @synindex"
+
+#: makeinfo/index.c:676
+msgid "(line )"
+msgstr "(regel )"
+
+#: makeinfo/index.c:684
+#, c-format
+msgid "(line %*d)"
+msgstr "(regel %*d)"
+
+#: makeinfo/index.c:765
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "Onbekende index '%s' in @printindex"
+
+#: makeinfo/index.c:834
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "Item voor index '%s' valt buiten elke pagina"
+
+#: makeinfo/index.c:837 makeinfo/index.c:873
+msgid "(outside of any node)"
+msgstr "(buiten alle pagina's)"
+
+#: makeinfo/insertion.c:161
+msgid "@item not allowed in argument to @itemize"
+msgstr "@item niet toegestaan in argument van @itemize"
+
+#: makeinfo/insertion.c:242
+msgid "Broken-Type in insertion_type_pname"
+msgstr ""
+"**Interne fout**: niet-bestaande uitvoersoort in insertion_type_pname()"
+
+#: makeinfo/insertion.c:338
+msgid "Enumeration stack overflow"
+msgstr "Overloop van enumeratiestapel"
+
+#: makeinfo/insertion.c:370
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "de letters zijn op; herbegonnen bij %c"
+
+# FIXME: formatter?
+#: makeinfo/insertion.c:639
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s vereist een argument: de formatteerder voor %c-item"
+
+#: makeinfo/insertion.c:727
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr "%cfloat-omgevingen kunnen niet genest worden"
+
+#: makeinfo/insertion.c:981
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "'@end' verwachtte '%s', maar vond '%s'"
+
+#: makeinfo/insertion.c:1349
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "Geen overeenkomende '%cend %s'"
+
+#: makeinfo/insertion.c:1618
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s vereist een letter of cijfer"
+
+#: makeinfo/insertion.c:1718
+msgid "end of file inside verbatim block"
+msgstr "einde van bestand binnen een verbatim blok"
+
+#: makeinfo/insertion.c:1942
+#, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "@%s is niet zinvol buiten een '@float'-omgeving"
+
+#: makeinfo/insertion.c:1978
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "@menu gevonden vóór de eerste @node; aanmaken van Top-pagina"
+
+#: makeinfo/insertion.c:1979
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr ""
+"uw @top-pagina moet mogelijk ingepakt worden in @ifnottex in plaats van "
+"@ifinfo?"
+
+#: makeinfo/insertion.c:1991
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "@detailmenu gevonden voor de eerste pagina; aanmaken van Top-pagina"
+
+#: makeinfo/insertion.c:2047
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr "@%s is niet zinvol buiten '@titlepage'- en '@quotation'-omgevingen"
+
+#: makeinfo/insertion.c:2061
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "@%s is niet zinvol buiten '@titlepage'-omgeving"
+
+#: makeinfo/insertion.c:2092
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "Ongepaarde '%c%s'"
+
+#: makeinfo/insertion.c:2097
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "'%c%s' vereist een argument"
+
+#: makeinfo/insertion.c:2103
+#, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "Verkeerd argument '%s' van '@%s'; '%s' wordt gebruikt"
+
+#: makeinfo/insertion.c:2200
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "@%s is zinloos in een '@%s'-blok"
+
+#: makeinfo/insertion.c:2209
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "@itemx is zinloos in een '%s'-blok"
+
+#: makeinfo/insertion.c:2383
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "%c%s gevonden buiten een invoeg-blok"
+
+#: makeinfo/lang.c:1218
+#, c-format
+msgid "no default territory known for language `%s'"
+msgstr "geen standaardterritorium bekend voor taal '%s'"
+
+#: makeinfo/lang.c:1281
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr "%s is geen geldige ISO 639-taalcode"
+
+#: makeinfo/lang.c:1399
+#, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "onbekende coderingsnaam '%s'"
+
+#: makeinfo/lang.c:1407
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "sorry, codering '%s' wordt niet ondersteund"
+
+#: makeinfo/lang.c:1492
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "ongeldig gecodeerd teken '%s'"
+
+#: makeinfo/lang.c:1800
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr "%c%s verwacht 'i' of 'j' als argument, niet '%c'"
+
+#: makeinfo/lang.c:1804
+#, c-format
+msgid "%c%s expects a single character `i' or `j' as argument"
+msgstr "%c%s verwacht één enkele 'i' of 'j' als argument"
+
+#: makeinfo/macro.c:128
+#, c-format
+msgid "macro `%s' previously defined"
+msgstr "macro '%s' is al eerder gedefinieerd"
+
+#: makeinfo/macro.c:132
+#, c-format
+msgid "here is the previous definition of `%s'"
+msgstr "hier was de eerdere definitie van '%s'"
+
+#: makeinfo/macro.c:359
+#, c-format
+msgid "\\ in macro expansion followed by `%s' instead of parameter name"
+msgstr ""
+"'\\' in macro-expansie werd gevolgd door '%s' in plaats van een parameternaam"
+
+#: makeinfo/macro.c:401
+#, c-format
+msgid "Macro `%s' called on line %d with too many args"
+msgstr "Macro '%s' in regel %d wordt aangeroepen met te veel argumenten"
+
+#: makeinfo/macro.c:580
+#, c-format
+msgid "%cend macro not found"
+msgstr "%cend-macro niet gevonden"
+
+#: makeinfo/macro.c:591
+msgid "@allow-recursion is deprecated; please use @rmacro instead"
+msgstr "@allow-recursion is verouderd; gebruik @rmacro"
+
+#: makeinfo/macro.c:606
+msgid "@quote-arg is deprecated; arguments are quoted by default"
+msgstr "@quote-arg is verouderd; argumenten hebben standaard aanhalingstekens"
+
+#: makeinfo/macro.c:649
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "@end %s komt niet overeen met @%s"
+
+#: makeinfo/makeinfo.c:188
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "Te veel fouten! Gestopt.\n"
+
+#: makeinfo/makeinfo.c:306
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: waarschuwing: "
+
+#: makeinfo/makeinfo.c:325 makeinfo/makeinfo.c:2340
+#, c-format
+msgid "Misplaced %c"
+msgstr "Verkeerd geplaatste %c"
+
+#: makeinfo/makeinfo.c:344
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Typ '%s --help' voor meer informatie.\n"
+
+#: makeinfo/makeinfo.c:347
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "Gebruik: %s [OPTIE]... TEXINFO-BESTAND...\n"
+
+#: makeinfo/makeinfo.c:350
+msgid ""
+"Translate Texinfo source documentation to various other formats, by default\n"
+"Info files suitable for reading online with Emacs or standalone GNU Info.\n"
+msgstr ""
+"Texinfo-bestanden omzetten naar een bepaalde opmaak.\n"
+"Standaard worden 'Info'-bestanden aangemaakt. Deze kunnen\n"
+"gelezen worden met 'emacs' of met het zelfstandige 'info'.\n"
+
+#: makeinfo/makeinfo.c:354
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\n"
+" --document-language=STR locale to use in translating Texinfo keywords\n"
+" for the output document (default C).\n"
+" --force preserve output even if errors.\n"
+" --help display this help and exit.\n"
+" --no-validate suppress node cross-reference validation.\n"
+" --no-warn suppress warnings (but not errors).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"Algemene opties:\n"
+" --error-limit=AANTAL na dit aantal fouten stoppen (standaard %d)\n"
+" --document-language=TAALCODE te gebruiken taalregio (standaard C) "
+"bij\n"
+" het vertalen van Texinfo-"
+"sleutelwoorden\n"
+" --force uitvoerbestand behouden ook bij fouten\n"
+" --help deze hulptekst tonen en stoppen\n"
+" --no-validate controle van kruisverwijzingen onderdrukken\n"
+" --no-warn waarschuwingen onderdrukken (maar fouten "
+"niet)\n"
+" -v, --verbose tonen wat er gedaan wordt\n"
+" --version versie-informatie tonen en stoppen\n"
+
+#: makeinfo/makeinfo.c:369
+#, no-wrap
+msgid ""
+"Output format selection (default is to produce Info):\n"
+" --docbook output Docbook XML rather than Info.\n"
+" --html output HTML rather than Info.\n"
+" --xml output Texinfo XML rather than Info.\n"
+" --plaintext output plain text rather than Info.\n"
+msgstr ""
+"Opmaakselectie (standaard wordt Info-opmaak geproduceerd):\n"
+" --docbook Docbook-XML produceren\n"
+" --html HTML produceren\n"
+" --plaintext platte tekst produceren\n"
+" --xml Texinfo-XML produceren\n"
+
+#: makeinfo/makeinfo.c:377
+msgid ""
+"General output options:\n"
+" -E, --macro-expand=FILE output macro-expanded source to FILE,\n"
+" ignoring any @setfilename.\n"
+" --no-headers suppress node separators, Node: lines, and "
+"menus\n"
+" from Info output (thus producing plain "
+"text)\n"
+" or from HTML (thus producing shorter "
+"output);\n"
+" also, write to standard output by default.\n"
+" --no-split suppress the splitting of Info or HTML "
+"output,\n"
+" generate only one output file.\n"
+" --number-sections output chapter and sectioning numbers.\n"
+" -o, --output=FILE output to FILE (or directory if split HTML).\n"
+msgstr ""
+"Algemene uitvoeropties:\n"
+" -E, --macro-expand=BESTAND macro-geëxpandeerde brontekst naar dit "
+"bestand\n"
+" schrijven, eventuele @setfilename's negeren\n"
+" --no-headers kopregels en menu's weglaten, zodat Info-"
+"uitvoer\n"
+" platte tekst wordt en HTML-uitvoer korter;\n"
+" standaard naar standaarduitvoer schrijven\n"
+" --no-split splitsing van Info- of HTML-uitvoer "
+"onderdrukken,\n"
+" slechts één uitvoerbestand aanmaken\n"
+" --number-sections hoofdstuk- en sectienummers produceren\n"
+" -o, --output=BESTAND uitvoerbestand (of map indien gesplitste "
+"HTML)\n"
+
+#: makeinfo/makeinfo.c:391
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --disable-encoding do not output accented and special characters\n"
+" in Info output based on @documentencoding.\n"
+" --enable-encoding override --disable-encoding (default).\n"
+" --fill-column=NUM break Info lines at NUM characters (default %"
+"d).\n"
+" --footnote-style=STYLE output footnotes in Info according to STYLE:\n"
+" `separate' to put them in their own node;\n"
+" `end' to put them at the end of the node, "
+"in\n"
+" which they are defined (this is the "
+"default).\n"
+" --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %"
+"d).\n"
+" If VAL is `none', do not indent; if VAL is\n"
+" `asis', preserve existing indentation.\n"
+" --split-size=NUM split Info files at size NUM (default %d).\n"
+msgstr ""
+"Opties voor Info en platte tekst:\n"
+" --disable-encoding geen tekens met accenten in de uitvoer "
+"produceren\n"
+" --enable-encoding tekens met accenten toestaan (standaard)\n"
+" --fill-column=AANTAL regels afbreken op deze lengte (standaard %d)\n"
+" --footnote-style=STIJL voetnoten produceren volgens deze stijl; "
+"indien\n"
+" 'end', dan aan het einde van de pagina "
+"waarin\n"
+" ze zijn gedefinieerd (standaard); indien\n"
+" 'separate', dan in een aparte pagina\n"
+" --paragraph-indent=XX alinea's inspringen met XX spaties (standaard %"
+"d);\n"
+" indien 'none', dan niet inspringen; indien\n"
+" 'asis', dan bestaande inspringing behouden\n"
+" --split-size=GETAL bestanden opsplitsen vanaf deze grootte\n"
+" (standaard %d bytes)\n"
+
+#: makeinfo/makeinfo.c:409
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+" --css-ref=URL generate reference to a CSS file.\n"
+" --internal-links=FILE produce list of internal links in FILE.\n"
+" --transliterate-file-names\n"
+" produce file names in ASCII transliteration.\n"
+msgstr ""
+"Opties voor HTML:\n"
+" --css-include=BESTAND dit bestand in de uitvoer opnemen;\n"
+" als BESTAND '-' is, dan standaardinvoer "
+"lezen\n"
+" --css-ref=URL een referentie naar een CSS-bestand genereren\n"
+" --internal-links=BSTAND tabel met interne verwijzingen hierin opslaan\n"
+" --transliterate-file-names\n"
+" bestandsnamen met alleen ASCII-tekens "
+"produceren\n"
+
+#: makeinfo/makeinfo.c:419
+#, c-format
+msgid ""
+"Options for XML and Docbook:\n"
+" --output-indent=VAL indent XML elements by VAL spaces (default %"
+"d).\n"
+" If VAL is 0, ignorable whitespace is "
+"dropped.\n"
+msgstr ""
+"Opties voor XML en Docbook:\n"
+" --output-indent=GETAL XML-elementen met dit aantal spaties "
+"inspringen\n"
+" (standaard %d); indien 0, dan witruimte die\n"
+" weggelaten mag worden laten vervallen\n"
+
+#: makeinfo/makeinfo.c:426
+msgid ""
+"Input file options:\n"
+" --commands-in-node-names allow @ commands in node names.\n"
+" -D VAR define the variable VAR, as with @set.\n"
+" -I DIR append DIR to the @include search path.\n"
+" -P DIR prepend DIR to the @include search path.\n"
+" -U VAR undefine the variable VAR, as with @clear.\n"
+msgstr ""
+"Invoerbestandopties:\n"
+" --commands-in-node-names @-commando's in paginanamen toestaan\n"
+" -D VAR de variabele VAR definiëren (als met '@set')\n"
+" -I MAP MAP achteraantoevoegen aan @include-zoekpad\n"
+" -P MAP MAP vooraantoevoegen aan @include-zoekpad\n"
+" -U VAR variabele VAR wissen (als met '@clear')\n"
+
+#: makeinfo/makeinfo.c:435
+msgid ""
+"Conditional processing in input:\n"
+" --ifdocbook process @ifdocbook and @docbook even if\n"
+" not generating Docbook.\n"
+" --ifhtml process @ifhtml and @html even if not generating HTML.\n"
+" --ifinfo process @ifinfo even if not generating Info.\n"
+" --ifplaintext process @ifplaintext even if not generating plain text.\n"
+" --iftex process @iftex and @tex; implies --no-split.\n"
+" --ifxml process @ifxml and @xml.\n"
+" --no-ifdocbook do not process @ifdocbook and @docbook text.\n"
+" --no-ifhtml do not process @ifhtml and @html text.\n"
+" --no-ifinfo do not process @ifinfo text.\n"
+" --no-ifplaintext do not process @ifplaintext text.\n"
+" --no-iftex do not process @iftex and @tex text.\n"
+" --no-ifxml do not process @ifxml and @xml text.\n"
+"\n"
+" Also, for the --no-ifFORMAT options, do process @ifnotFORMAT text.\n"
+msgstr ""
+"Conditionele verwerking van de invoer:\n"
+" --ifdocbook '@ifdocbook' en '@docbook' altijd verwerken\n"
+" --ifhtml '@ifhtml' en '@html' altijd verwerken\n"
+" --ifinfo '@ifinfo' altijd verwerken\n"
+" --ifplaintext '@ifplaintext' altijd verwerken\n"
+" --iftex '@iftex' en '@tex' verwerken; impliceert '--no-split'\n"
+" --ifxml '@ifxml' en '@xml' verwerken\n"
+" --no-ifdocbook '@ifdocbook' en '@docbook' niet verwerken\n"
+" --no-ifhtml '@ifhtml' en '@html' niet verwerken\n"
+" --no-ifinfo '@ifinfo' niet verwerken\n"
+" --no-ifplaintext '@ifplaintext' niet verwerken\n"
+" --no-iftex '@iftex' en '@tex' niet verwerken\n"
+" --no-ifxml '@ifxml' en '@xml' niet verwerken\n"
+"\n"
+" Voor de '--no-ifOPMAAK'-opties geldt: '@ifnotOPMAAK' _wel_ verwerken.\n"
+
+#: makeinfo/makeinfo.c:454
+msgid ""
+" The defaults for the @if... conditionals depend on the output format:\n"
+" if generating HTML, --ifhtml is on and the others are off;\n"
+" if generating Info, --ifinfo is on and the others are off;\n"
+" if generating plain text, --ifplaintext is on and the others are off;\n"
+" if generating XML, --ifxml is on and the others are off.\n"
+msgstr ""
+" De standaarden voor de '@if...'-opdrachten hangen af van de "
+"uitvoeropmaak:\n"
+" als HTML gemaakt wordt, staat '--ifhtml' aan en de anderen niet;\n"
+" als Info gemaakt wordt, staat '--ifinfo' aan en de anderen niet;\n"
+" als platte tekst gemaakt wordt, staat '--ifplaintext' aan en de anderen "
+"niet;\n"
+" als XML gemaakt wordt, staat '--ifxml' aan en de anderen niet.\n"
+
+#: makeinfo/makeinfo.c:462
+msgid ""
+"Examples:\n"
+" makeinfo foo.texi write Info to foo's @setfilename\n"
+" makeinfo --html foo.texi write HTML to @setfilename\n"
+" makeinfo --xml foo.texi write Texinfo XML to @setfilename\n"
+" makeinfo --docbook foo.texi write DocBook XML to @setfilename\n"
+" makeinfo --no-headers foo.texi write plain text to standard "
+"output\n"
+"\n"
+" makeinfo --html --no-headers foo.texi write html without node lines, "
+"menus\n"
+" makeinfo --number-sections foo.texi write Info with numbered sections\n"
+" makeinfo --no-split foo.texi write one Info file however big\n"
+msgstr ""
+"Voorbeelden:\n"
+" makeinfo foo.texi Info schrijven (naar foo's "
+"@setfilename)\n"
+" makeinfo --html foo.texi HTML schrijven (naar foo's "
+"@setfilename)\n"
+" makeinfo --xml foo.texi Texinfo-XML schrijven (naar "
+"@setfilename)\n"
+" makeinfo --docbook foo.texi DocBook-XML schrijven (naar "
+"@setfilename)\n"
+" makeinfo --no-headers foo.texi platte tekst naar standaarduitvoer\n"
+"\n"
+" makeinfo --html --no-headers foo.texi HTML zonder kopregels en menu's\n"
+" makeinfo --number-sections foo.texi Info met genummerde secties\n"
+" makeinfo --no-split foo.texi één Info-bestand ongeacht de "
+"grootte\n"
+
+#: makeinfo/makeinfo.c:622
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr "%s: Onbekende waarde '%s' van TEXINFO_OUTPUT_FORMAT wordt genegeerd.\n"
+
+#: makeinfo/makeinfo.c:670 makeinfo/makeinfo.c:696 makeinfo/makeinfo.c:720
+#: makeinfo/makeinfo.c:780
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr "%s: Argument van %s moet numeriek zijn, niet '%s'.\n"
+
+#: makeinfo/makeinfo.c:683
+#, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "%s: Kan uitvoerbestand '%s' voor macro-expansies niet openen"
+
+#: makeinfo/makeinfo.c:688
+#, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "%s: Tweede uitvoerbestand '%s' voor macro-expansies wordt genegeerd.\n"
+
+#: makeinfo/makeinfo.c:733
+#, c-format
+msgid "%s: could not open internal links output `%s'"
+msgstr "%s: Kan uitvoerbestand '%s' voor interne verwijzingen niet openen"
+
+#: makeinfo/makeinfo.c:738
+#, c-format
+msgid "%s: ignoring second internal links output `%s'.\n"
+msgstr ""
+"%s: Tweede uitvoerbestand '%s' voor interne verwijzingen wordt genegeerd.\n"
+
+#: makeinfo/makeinfo.c:751
+#, c-format
+msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
+msgstr ""
+"%s: Argument van --paragraph-indent moet numeriek, 'none' of 'asis' zijn, "
+"niet '%s'.\n"
+
+#: makeinfo/makeinfo.c:769
+#, c-format
+msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
+msgstr ""
+"%s: Argument van --footnote-style moet 'separate' of 'end' zijn, niet '%s'.\n"
+
+#: makeinfo/makeinfo.c:844
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: Ontbrekend bestandsargument.\n"
+
+#: makeinfo/makeinfo.c:1041 makeinfo/makeinfo.c:4166
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr "Multi-regelcommando %c%s wordt onjuist gebruikt"
+
+#: makeinfo/makeinfo.c:1044
+#, c-format
+msgid "Expected `%s'"
+msgstr "Verwachtte '%s'"
+
+#: makeinfo/makeinfo.c:1521
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "Kan map '%s' niet aanmaken: %s"
+
+#: makeinfo/makeinfo.c:1567
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "Geen '%s' gevonden in '%s'"
+
+#: makeinfo/makeinfo.c:1647
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr ""
+"%s: Macro-expansie naar standaarduitvoer wordt overgeslagen,\n"
+"want de uitvoer van Info gaat daar al heen.\n"
+
+#: makeinfo/makeinfo.c:1677
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "Aanmaken van een %s-bestand '%s' uit '%s'.\n"
+
+#: makeinfo/makeinfo.c:1744
+#, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: Macro-uitvoerbestand '%s' wordt verwijderd wegens fouten;\n"
+"gebruik '--force' om het te behouden.\n"
+
+#: makeinfo/makeinfo.c:1799
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: Uitvoerbestand '%s' wordt verwijderd wegens fouten;\n"
+"gebruik '--force' om het te behouden.\n"
+
+#: makeinfo/makeinfo.c:1818
+#, c-format
+msgid ""
+"%s: Removing internal links output file `%s' due to errors; use --force to "
+"preserve.\n"
+msgstr ""
+"%s: Uitvoerbestand '%s' voor interne verwijzingen wordt\n"
+"verwijderd wegens fouten; gebruik '--force' om het te behouden.\n"
+
+#: makeinfo/makeinfo.c:2113
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "Onbekend commando '%s'"
+
+#: makeinfo/makeinfo.c:2135
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr "Gebruik '{...}' om een commando als argument mee te geven aan @%s"
+
+#: makeinfo/makeinfo.c:2394
+#, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s verwachtte '{...}'"
+
+#: makeinfo/makeinfo.c:2407
+msgid "Unmatched }"
+msgstr "Ongepaarde }"
+
+#: makeinfo/makeinfo.c:2455
+msgid "NO_NAME!"
+msgstr "GEEN_NAAM!"
+
+#: makeinfo/makeinfo.c:2476
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s ontbrekende sluitaccolade"
+
+#: makeinfo/makeinfo.c:3482
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "@image-bestand '%s' (voor HTML) is niet leesbaar: %s"
+
+#: makeinfo/makeinfo.c:3488
+#, c-format
+msgid "No such file `%s'"
+msgstr "Geen bestand '%s' gevonden"
+
+#: makeinfo/makeinfo.c:3624
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "@image-bestand '%s' (voor tekst) is niet leesbaar: %s"
+
+#: makeinfo/makeinfo.c:3633
+msgid "@image missing filename argument"
+msgstr "ontbrekend bestandsnaamargument van @image"
+
+#: makeinfo/makeinfo.c:3851
+#, c-format
+msgid "undefined flag: %s"
+msgstr "ongedefinieerde vlag: %s"
+
+#: makeinfo/makeinfo.c:3852
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{Geen waarde voor '%s'}"
+
+#: makeinfo/makeinfo.c:3904
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s vereist een naam"
+
+#: makeinfo/makeinfo.c:4010
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "Bestandseinde werd bereikt vóór een bijbehorende @end %s"
+
+#: makeinfo/makeinfo.c:4258
+#, c-format
+msgid "`%.40s...' is too long for expansion; not expanded"
+msgstr "'%.40s...' is te lang voor expansie; is niet geëxpandeerd"
+
+#: makeinfo/multi.c:116
+msgid "Missing } in @multitable template"
+msgstr "Ontbrekende } in @multitable-sjabloon"
+
+#: makeinfo/multi.c:260
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "loze tekst '%s' na @multitable wordt genegeerd"
+
+#: makeinfo/multi.c:400
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "Te veel kolommen in 'multitable'-item (maximaal %d)"
+
+#: makeinfo/multi.c:563
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "[onverwacht] kan kolom #%d niet selecteren in 'multitabel'"
+
+#: makeinfo/multi.c:592
+msgid "ignoring @tab outside of multitable"
+msgstr "@tab buiten een 'multitabel' wordt genegeerd"
+
+#: makeinfo/multi.c:640
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** 'Multikolom'-uitvoer van de laatste rij:\n"
+
+#: makeinfo/multi.c:643
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* kolom #%d: uitvoer = %s\n"
+
+#: makeinfo/node.c:279
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "macro '%s' is al eerder gedefinieerd op regel %d"
+
+#: makeinfo/node.c:647
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "Pagina %s wordt opgemaakt...\n"
+
+#: makeinfo/node.c:714
+#, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr "Pagina '%s' vereist een sectiemakend commando (bijvoorbeeld %c%s)"
+
+#: makeinfo/node.c:878
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "Er is geen paginanaam opgegeven voor commando '%c%s'"
+
+#: makeinfo/node.c:919 makeinfo/node.c:1163
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr "Het anker '%s' en pagina '%s' verwijzen naar dezelfde bestandsnaam"
+
+#: makeinfo/node.c:922
+msgid "This @anchor command ignored; references to it will not work"
+msgstr ""
+"Dit @anchor-commando wordt genegeerd; verwijzingen ernaar zullen niet werken"
+
+#: makeinfo/node.c:924 makeinfo/node.c:1166
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr "Geef dit anker een andere naam of gebruik de optie '--no-split'"
+
+#: makeinfo/node.c:954
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr "Onverwachte tekenreeks aan het eind van 'split-HTML'-bestand '%s'"
+
+#: makeinfo/node.c:1160
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr "Ankers '%s' en '%s' verwijzen naar dezelfde bestandsnaam"
+
+#: makeinfo/node.c:1165
+msgid "@anchor command ignored; references to it will not work"
+msgstr "@anchor-commando wordt genegeerd; verwijzing ernaar werkt niet"
+
+#: makeinfo/node.c:1362
+#, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr ""
+"%s verwijst naar niet-bestaande pagina '%s' (misschien een onjuiste "
+"sectieindeling?)"
+
+# In de volgende meldingen zijn Next, Prev en Up duidelijker indien onvertaald.
+#: makeinfo/node.c:1462
+#, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr ""
+"Het 'Next'-veld van pagina '%s' wijst nergens naar (misschien een onjuiste "
+"sectieindeling?)"
+
+#: makeinfo/node.c:1465
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "Deze pagina (%s) heeft het foute 'Prev'-veld"
+
+#: makeinfo/node.c:1520
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "Het 'Prev'-veld van pagina '%s' wijst nergens naar"
+
+#: makeinfo/node.c:1524
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "Deze pagina (%s) heeft het foute 'Next'-veld"
+
+#: makeinfo/node.c:1536
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr "'%s' heeft geen 'Up'-veld (misschien een onjuiste sectieindeling?)"
+
+#: makeinfo/node.c:1605
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr ""
+"Pagina '%s' bevat geen menu-item voor '%s'\n"
+"ondanks dat de eerste het 'Up'-doel van de laatste is"
+
+#: makeinfo/node.c:1637
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "naar pagina '%s' wordt niet verwezen"
+
+#: makeinfo/node.c:1727
+#, c-format
+msgid "Removing %s\n"
+msgstr "Verwijderen van %s\n"
+
+#: makeinfo/node.c:1731
+#, c-format
+msgid "Can't remove file `%s': %s"
+msgstr "Kan bestand '%s' niet verwijderen: %s"
+
+#: makeinfo/sectioning.c:122
+#, c-format
+msgid "Appendix %c"
+msgstr "Appendix %c"
+
+#: makeinfo/sectioning.c:467
+#, c-format
+msgid "Internal error (search_sectioning) `%s'!"
+msgstr "**Interne fout**: search_sectioning('%s')!"
+
+#: makeinfo/sectioning.c:563
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "**Interne fout**: search_sectioning('%s')!"
+
+#: makeinfo/sectioning.c:624
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "%c%s is verouderd; gebruik in plaats daarvan %c%s"
+
+#: makeinfo/sectioning.c:640
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "Pagina met %ctop als sectie bestaat al"
+
+#: makeinfo/sectioning.c:648
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "Hier is de %ctop-pagina"
+
+#: makeinfo/sectioning.c:664
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "%ctop wordt vóór %cnode gebruikt; de standaard %s wordt nu gebruikt"
+
+#: makeinfo/xml.c:1669
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "@image-bestand '%s' is onleesbaar: %s"
+
+#: makeinfo/xml.c:2014
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+"@headitem als laatste item in @multitable produceert foutieve Docbook-"
+"documenten"
+
+#: makeinfo/xml.c:2150
+msgid "of"
+msgstr "van"
+
+#: makeinfo/xml.c:2155
+msgid "on"
+msgstr "aan"
+
+#: makeinfo/xref.c:127
+msgid "First argument to cross-reference may not be empty"
+msgstr "Het eerste argument in een kruisverwijzing mag niet leeg zijn"
+
+#: makeinfo/xref.c:252
+#, c-format
+msgid "Empty file name for HTML cross reference in `%s'"
+msgstr "Lege bestandsnaam voor HTML-kruisverwijzing in '%s'"
+
+#: makeinfo/xref.c:387
+msgid "End of file reached while looking for `.' or `,'"
+msgstr "Einde van bestand werd bereikt tijdens zoeken naar '.' of ','"
+
+#: makeinfo/xref.c:390
+#, c-format
+msgid "`.' or `,' must follow @%s, not `%c'"
+msgstr "'.' of ',' moet volgen op @%s, niet '%c'"
+
+#: makeinfo/xref.c:392
+msgid "for cross-references in parentheses, use @pxref"
+msgstr "Gebruik @pxref voor kruisverwijzingen tussen haakjes"
+
+#: makeinfo/xref.c:435
+msgid "First argument to @inforef may not be empty"
+msgstr "Het eerste argument van @inforef mag niet leeg zijn"
+
+#: util/texindex.c:223
+msgid "display this help and exit"
+msgstr "deze hulptekst tonen en stoppen"
+
+#: util/texindex.c:225
+msgid "send output to FILE"
+msgstr "de uitvoer naar BESTAND sturen"
+
+#: util/texindex.c:227
+msgid "display version information and exit"
+msgstr "versie-informatie tonen en stoppen"
+
+#: util/texindex.c:237
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "Gebruik: %s [OPTIE]... BESTAND...\n"
+
+#: util/texindex.c:238
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr "Een gesorteerde index maken voor elk TeX-uitvoerbestand.\n"
+
+#: util/texindex.c:241
+#, c-format
+msgid "Usually FILE... is specified as `foo.%c%c' for a document `foo.texi'.\n"
+msgstr ""
+"Voor een document 'foo.texi' wordt het BESTAND gewoonlijk opgegeven als 'foo."
+"%c%c'.\n"
+
+#: util/texindex.c:243
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Opties:\n"
+
+#: util/texindex.c:743
+#, c-format
+msgid "failure reopening %s"
+msgstr "fout bij het heropenen van %s"
+
+#: util/texindex.c:758 util/texindex.c:786
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: is geen Texinfo-inhoudsbestand"
+
+#: util/texindex.c:993
+#, c-format
+msgid "No page number in %s"
+msgstr "Geen paginanummer in %s"
+
+#: util/texindex.c:1066
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr "item %s volgt op een item met een alternatieve naam"
diff --git a/po/pl.gmo b/po/pl.gmo
new file mode 100644
index 0000000..903b4c0
--- /dev/null
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
new file mode 100644
index 0000000..06825d8
--- /dev/null
+++ b/po/pl.po
@@ -0,0 +1,3229 @@
+# Polish translation for texinfo.
+# Copyright (C) 2003, 2004, 2007, 2008 Free Software Foundation, Inc.
+# This file is distributed under the same license as the texinfo package.
+# Jakub Bogusz <qboosh@pld-linux.org>, 2003-2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo 4.12.94\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2008-09-18 20:38+0200\n"
+"PO-Revision-Date: 2008-08-16 22:12+0200\n"
+"Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
+"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: gnulib/lib/error.c:125
+msgid "Unknown system error"
+msgstr "Nieznany b³±d systemowy"
+
+#: gnulib/lib/getopt.c:526 gnulib/lib/getopt.c:542
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: opcja `%s' jest niejednoznaczna\n"
+
+#: gnulib/lib/getopt.c:575 gnulib/lib/getopt.c:579
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: opcja `--%s' nie mo¿e mieæ argumentów\n"
+
+#: gnulib/lib/getopt.c:588 gnulib/lib/getopt.c:593
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: opcja `%c%s' nie mo¿e mieæ argumentów\n"
+
+#: gnulib/lib/getopt.c:636 gnulib/lib/getopt.c:655 gnulib/lib/getopt.c:971
+#: gnulib/lib/getopt.c:990
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: opcja `%s' musi mieæ argument\n"
+
+#: gnulib/lib/getopt.c:693 gnulib/lib/getopt.c:696
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: nieznana opcja `--%s'\n"
+
+#: gnulib/lib/getopt.c:704 gnulib/lib/getopt.c:707
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: nieznana opcja `%c%s'\n"
+
+#: gnulib/lib/getopt.c:759 gnulib/lib/getopt.c:762
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: niew³a¶ciwa opcja -- %c\n"
+
+#: gnulib/lib/getopt.c:768 gnulib/lib/getopt.c:771
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: b³êdna opcja -- %c\n"
+
+#: gnulib/lib/getopt.c:823 gnulib/lib/getopt.c:839 gnulib/lib/getopt.c:1043
+#: gnulib/lib/getopt.c:1061
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: opcja musi mieæ argument -- %c\n"
+
+#: gnulib/lib/getopt.c:892 gnulib/lib/getopt.c:908
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: opcja `-W %s' jest niejednoznaczna\n"
+
+#: gnulib/lib/getopt.c:932 gnulib/lib/getopt.c:950
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: opcja `-W %s' nie mo¿e mieæ argumentów\n"
+
+#: gnulib/lib/xalloc-die.c:34 gnulib/lib/xsetenv.c:37
+#, c-format
+msgid "memory exhausted"
+msgstr "pamiêæ wyczerpana"
+
+#: info/echo-area.c:283 info/session.c:966
+msgid "Move forward a character"
+msgstr "Przesuniêcie do przodu o znak"
+
+#: info/echo-area.c:295 info/session.c:993
+msgid "Move backward a character"
+msgstr "Przesuniêcie do ty³u o znak"
+
+#: info/echo-area.c:307
+msgid "Move to the start of this line"
+msgstr "Przej¶cie na pocz±tek tej linii"
+
+#: info/echo-area.c:312
+msgid "Move to the end of this line"
+msgstr "Przej¶cie na koniec tej linii"
+
+#: info/echo-area.c:320 info/session.c:1025
+msgid "Move forward a word"
+msgstr "Przesuniêcie do przodu o s³owo"
+
+#: info/echo-area.c:360 info/session.c:1049
+msgid "Move backward a word"
+msgstr "Przesuniêcie do ty³u o s³owo"
+
+#: info/echo-area.c:400
+msgid "Delete the character under the cursor"
+msgstr "Usuniêcie znaku pod kursorem"
+
+#: info/echo-area.c:430
+msgid "Delete the character behind the cursor"
+msgstr "Usuniêcie znaku za kursorem"
+
+#: info/echo-area.c:451
+msgid "Cancel or quit operation"
+msgstr "Anulowanie lub rezygnacja z operacji"
+
+#: info/echo-area.c:466
+msgid "Accept (or force completion of) this line"
+msgstr "Przyjêcie (lub wymuszenie dokoñczenia) tej linii"
+
+#: info/echo-area.c:471
+msgid "Insert next character verbatim"
+msgstr "Wstawienie nastêpnego znaku dos³ownie"
+
+#: info/echo-area.c:479
+msgid "Insert this character"
+msgstr "Wstawienie tego znaku"
+
+#: info/echo-area.c:498
+msgid "Insert a TAB character"
+msgstr "Wstawienie znaku TAB"
+
+#: info/echo-area.c:505
+msgid "Transpose characters at point"
+msgstr "Przestawienie znaków w miejscu"
+
+#: info/echo-area.c:556
+msgid "Yank back the contents of the last kill"
+msgstr "Wstawienie zawarto¶ci ostatniego wyciêcia"
+
+#: info/echo-area.c:563
+msgid "Kill ring is empty"
+msgstr "Zakres wyciêcia jest pusty"
+
+#: info/echo-area.c:576
+msgid "Yank back a previous kill"
+msgstr "Wstawienie poprzedniego wyciêcia"
+
+#: info/echo-area.c:609
+msgid "Kill to the end of the line"
+msgstr "Wyciêcie na koniec linii"
+
+#: info/echo-area.c:622
+msgid "Kill to the beginning of the line"
+msgstr "Wyciêcie na pocz±tek linii"
+
+#: info/echo-area.c:634
+msgid "Kill the word following the cursor"
+msgstr "Wyciêcie s³owa za kursorem"
+
+#: info/echo-area.c:654
+msgid "Kill the word preceding the cursor"
+msgstr "Wyciêcie s³owa przed kursorem"
+
+#: info/echo-area.c:870 info/echo-area.c:926
+msgid "No completions"
+msgstr "Brak uzupe³nieñ"
+
+#: info/echo-area.c:872
+msgid "Not complete"
+msgstr "Nie dokoñczono"
+
+#: info/echo-area.c:913
+msgid "List possible completions"
+msgstr "Wypisanie mo¿liwych uzupe³nieñ"
+
+#: info/echo-area.c:930
+msgid "Sole completion"
+msgstr "Jedyne uzupe³nienie"
+
+#: info/echo-area.c:939
+msgid "One completion:\n"
+msgstr "Jedno uzupe³nienie:\n"
+
+#: info/echo-area.c:940
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d uzupe³nieñ:\n"
+
+#: info/echo-area.c:1087
+msgid "Insert completion"
+msgstr "Wstawienie uzupe³nienia"
+
+#: info/echo-area.c:1222
+msgid "Building completions..."
+msgstr "Tworzenie uzupe³nieñ..."
+
+#: info/echo-area.c:1342
+msgid "Scroll the completions window"
+msgstr "Przewijanie okna uzupe³nieñ"
+
+#: info/footnotes.c:212
+msgid "Footnotes could not be displayed"
+msgstr "Przypisy nie mog± byæ wy¶wietlone"
+
+#: info/footnotes.c:238
+msgid "Show the footnotes associated with this node in another window"
+msgstr "Pokazanie przypisów zwi±zanych z tym wêz³em w innym oknie"
+
+#: info/footnotes.h:26
+msgid "---------- Footnotes ----------"
+msgstr "---------- Przypisy -----------"
+
+#: info/indices.c:171
+msgid "Look up a string in the index for this file"
+msgstr "Szukanie ³añcucha w indeksie tego pliku"
+
+#: info/indices.c:198
+msgid "Finding index entries..."
+msgstr "Szukanie wpisów w indeksie..."
+
+#: info/indices.c:206
+msgid "No indices found."
+msgstr "Nie znaleziono indeksów."
+
+#: info/indices.c:216
+msgid "Index entry: "
+msgstr "Wpis indeksu: "
+
+#: info/indices.c:324
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr ""
+"Przej¶cie do nastêpnego pasuj±cego elementu z ostatniego `\\[index-search]'"
+
+#: info/indices.c:334
+msgid "No previous index search string."
+msgstr "Brak poprzedniego ³añcucha szukanego w indeksie."
+
+#: info/indices.c:341
+msgid "No index entries."
+msgstr "Brak wpisów w indeksie."
+
+#: info/indices.c:374
+#, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "Nie ma %swpisów w indeksie zawieraj±cych `%s'."
+
+#: info/indices.c:375
+msgid "more "
+msgstr "wiêcej "
+
+#: info/indices.c:385
+msgid "CAN'T SEE THIS"
+msgstr "NIE MO¯NA TEGO ZOBACZYÆ"
+
+#: info/indices.c:421
+#, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr ""
+"Znaleziono `%s' w %s. (`\\[next-index-match]' próbuje znale¼æ nastêpne.)"
+
+#: info/indices.c:549
+#, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "Przeszukiwanie indeksów `%s'..."
+
+#: info/indices.c:604
+#, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr "¯aden z dostêpnych plików info nie zawiera `%s' w swoich indeksach."
+
+#: info/indices.c:630
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr "Szukanie ³añcucha w znanych indeksach plików info i zbudowanie menu"
+
+#: info/indices.c:634
+msgid "Index apropos: "
+msgstr "Indeks dla ³añcucha: "
+
+#: info/indices.c:662
+#, c-format
+msgid ""
+"\n"
+"* Menu: Nodes whose indices contain `%s':\n"
+msgstr ""
+"\n"
+"* Menu: Wêz³y, których indeksy zawieraj± `%s':\n"
+
+#: info/info.c:275 info/infokey.c:899
+#, c-format
+msgid "Try --help for more information.\n"
+msgstr "Wiêcej informacji mo¿na uzyskaæ przez --help.\n"
+
+#: info/info.c:294 info/infokey.c:145 install-info/install-info.c:2101
+#: makeinfo/makeinfo.c:802 util/texindex.c:295
+#, c-format
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"Licencja GPLv3+: GNU GPL wersja 3 lub pó¼niejsza <http://www.gnu.org/"
+"licenses/gpl.html>\n"
+"To jest oprogramowanie wolnodostêpne: mo¿na je modyfikowaæ i "
+"rozpowszechniaæ.\n"
+"Nie ma ¯ADNEJ GWARANCJI w zakresie dopuszczalnym przez prawo.\n"
+
+#: info/info.c:506
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "nie znaleziono wpisów w indeksie dla `%s'\n"
+
+#: info/info.c:600
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [MENU-ITEM...]\n"
+"\n"
+"Read documentation in Info format.\n"
+msgstr ""
+"Sk³adnia: %s [OPCJA]... [ELEMENT-MENU...]\n"
+"\n"
+"Przegl±danie dokumentacji w formacie Info.\n"
+
+#: info/info.c:606
+msgid ""
+"Options:\n"
+" -k, --apropos=STRING look up STRING in all indices of all "
+"manuals.\n"
+" -d, --directory=DIR add DIR to INFOPATH.\n"
+" --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+" -f, --file=FILENAME specify Info file to visit."
+msgstr ""
+"Opcje:\n"
+" --apropos=£AÑCUCH szukanie £AÑCUCHA we wszystkich indeksach\n"
+" wszystkich podrêczników.\n"
+" -d, --directory=KATALOG dodanie KATALOGU do INFOPATH.\n"
+" --dribble=PLIK zapamiêtanie sekwencji klawiszy w PLIKU.\n"
+" -f, --file=PLIK podanie pliku Info do odwiedzenia."
+
+#: info/info.c:613
+msgid ""
+" -h, --help display this help and exit.\n"
+" --index-search=STRING go to node pointed by index entry STRING.\n"
+" -n, --node=NODENAME specify nodes in first visited Info file.\n"
+" -o, --output=FILENAME output selected nodes to FILENAME."
+msgstr ""
+" -h, --help wy¶wietlenie tego opisu i zakoñczenie "
+"dzia³ania.\n"
+" --index-search=£AÑCUCH przej¶cie do wêz³a za £AÑCUCHEM w indeksie.\n"
+" -n, --node=WÊZE£ podanie wêz³a w pierwszym odwiedzanym pliku.\n"
+" -o, --output=PLIK zapis wybranych wêz³ów do PLIKU."
+
+#: info/info.c:619
+msgid ""
+" -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+" --no-raw-escapes output escapes as literal text.\n"
+" --restore=FILENAME read initial keystrokes from FILENAME.\n"
+" -O, --show-options, --usage go to command-line options node."
+msgstr ""
+" -R, --raw-escapes wypisywanie sekwencji ANSI (domy¶lne).\n"
+" --no-raw-escapes wypisywanie sekwencji jako dos³ownego "
+"tekstu.\n"
+" --restore=PLIK czytanie pocz±tkowej sekwencji klawiszy z "
+"PLIKU.\n"
+" -O, --show-options, --usage przej¶cie do wêz³a z opcjami linii poleceñ."
+
+#: info/info.c:626
+msgid " -b, --speech-friendly be friendly to speech synthesizers."
+msgstr " -b, --speech-friendly tryb przyjazny dla syntezatorów mowy."
+
+#: info/info.c:630
+msgid ""
+" --subnodes recursively output menu items.\n"
+" --vi-keys use vi-like and less-like key bindings.\n"
+" --version display version information and exit.\n"
+" -w, --where, --location print physical location of Info file."
+msgstr ""
+" --subnodes rekurencyjne wypisanie elementów menu.\n"
+" --vi-keys u¿ywanie klawiszy w stylu programów vi i "
+"less.\n"
+" --version wy¶wietlenie informacji o wersji i "
+"zakoñczenie.\n"
+" -w, --where, --location wy¶wietlenie fizycznego po³o¿enia pliku Info."
+
+#: info/info.c:636
+msgid ""
+"\n"
+"The first non-option argument, if present, is the menu entry to start from;\n"
+"it is searched for in all `dir' files along INFOPATH.\n"
+"If it is not present, info merges all `dir' files and shows the result.\n"
+"Any remaining arguments are treated as the names of menu\n"
+"items relative to the initial node visited."
+msgstr ""
+"\n"
+"Pierwszy argument nie bêd±cy opcj±, je¶li jest obecny, jest wpisem menu, od\n"
+"którego program ma zacz±æ pracê; jest poszukiwany we wszystkich plikach "
+"`dir'\n"
+"le¿±cych w INFOPATH.\n"
+"Je¶li nie jest obecny, info ³±czy wszystkie pliki `dir' i pokazuje wynik.\n"
+"Wszystkie pozosta³e argumenty s± traktowane jako nazwy elementów menu "
+"wzglêdem\n"
+"pocz±tkowo odwiedzonego wêz³a."
+
+#: info/info.c:643
+msgid ""
+"\n"
+"For a summary of key bindings, type h within Info."
+msgstr ""
+"\n"
+"Opis dzia³ania klawiszy jest dostêpny pod h w Info."
+
+#: info/info.c:646
+msgid ""
+"\n"
+"Examples:\n"
+" info show top-level dir menu\n"
+" info info show the general manual for Info readers\n"
+" info info-stnd show the manual specific to this Info program\n"
+" info emacs start at emacs node from top-level dir\n"
+" info emacs buffers start at buffers node within emacs manual\n"
+" info --show-options emacs start at node with emacs' command line options\n"
+" info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+" info -f ./foo.info show file ./foo.info, not searching dir"
+msgstr ""
+"\n"
+"Przyk³ady:\n"
+" info pokazanie menu katalogów g³ównego poziomu\n"
+" info info pokazanie ogólnego podrêcznika dla czytelników "
+"Info\n"
+" info info-stnd pokazanie podrêcznika dla tego programu Info\n"
+" info emacs rozpoczêcie od wêz³a emacs z g³ównego katalogu\n"
+" info emacs buffers rozpoczêcie od wêz³a buffers w podrêczniku "
+"emacsa\n"
+" info --show-options emacs rozpoczêcie od wêz³a z opisem linii poleceñ "
+"emacsa\n"
+" info --subnodes -o out.txt emacs zapisanie ca³ego podrêcznika do out.txt\n"
+" info -f ./foo.info pokazanie pliku ./foo.info bez szukania w "
+"katalogu"
+
+#: info/info.c:657 info/infokey.c:918 makeinfo/makeinfo.c:475
+#: util/texindex.c:259
+msgid ""
+"\n"
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+"Raporty o b³êdach prosimy wysy³aæ poczt± elektroniczn± na adres\n"
+"bug-texinfo@gnu.org, a ogólne pytania i dyskusjê na help-texinfo@gnu.org.\n"
+"Strona domowa texinfo: http://www.gnu.org/software/texinfo/"
+
+#: info/info.c:691
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "Nie mo¿na znale¼æ wêz³a `%s'."
+
+#: info/info.c:692
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "Nie mo¿na znale¼æ wêz³a `(%s)%s'."
+
+#: info/info.c:693
+msgid "Cannot find a window!"
+msgstr "Nie mo¿na znale¼æ okna!"
+
+#: info/info.c:694
+msgid "Point doesn't appear within this window's node!"
+msgstr "Kropka nie wystêpuje w wê¼le z tego okna!"
+
+#: info/info.c:695
+msgid "Cannot delete the last window."
+msgstr "Nie mo¿na usun±æ ostatniego okna."
+
+#: info/info.c:696
+msgid "No menu in this node."
+msgstr "Brak menu w tym wê¼le."
+
+#: info/info.c:697
+msgid "No footnotes in this node."
+msgstr "Brak przypisów w tym wê¼le."
+
+#: info/info.c:698
+msgid "No cross references in this node."
+msgstr "Brak odsy³aczy w tym wê¼le."
+
+#: info/info.c:699
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Brak wska¼nika `%s' dla tego wêz³a."
+
+#: info/info.c:700
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "Nieznane polecenie Info `%c'; `?' przywo³uje pomoc."
+
+#: info/info.c:701
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr "Typ terminala `%s' nie jest wystarczaj±cy do uruchomienia Info."
+
+#: info/info.c:702
+msgid "You are already at the last page of this node."
+msgstr "To ju¿ jest ostatnia strona tego wêz³a."
+
+#: info/info.c:703
+msgid "You are already at the first page of this node."
+msgstr "To ju¿ jest pierwsza strona tego wêz³a."
+
+#: info/info.c:704
+msgid "Only one window."
+msgstr "Tylko jedno okno."
+
+#: info/info.c:705
+msgid "Resulting window would be too small."
+msgstr "Wynikowe okno by³oby zbyt ma³e."
+
+#: info/info.c:706
+msgid "Not enough room for a help window, please delete a window."
+msgstr "Za ma³o miejsca na okno pomocy, proszê usun±æ okno."
+
+#: info/infodoc.c:45
+msgid "Basic Info command keys\n"
+msgstr "Podstawowe klawisze poleceñ Info\n"
+
+#: info/infodoc.c:47
+msgid "\\%-10[quit-help] Close this help window.\n"
+msgstr "\\%-10[quit-help] Opuszczenie tego okna pomocy.\n"
+
+#: info/infodoc.c:48
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] Opuszczenie ca³ego Info.\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr "\\%-10[get-info-help-node] Uruchomienie tutoriala Info.\n"
+
+#: info/infodoc.c:51
+msgid "\\%-10[prev-line] Move up one line.\n"
+msgstr "\\%-10[prev-line] Przej¶cie w górê o jedn± liniê.\n"
+
+#: info/infodoc.c:52
+msgid "\\%-10[next-line] Move down one line.\n"
+msgstr "\\%-10[next-line] Przewiniêcie w dó³ o jedn± liniê.\n"
+
+#: info/infodoc.c:53
+msgid "\\%-10[scroll-backward] Scroll backward one screenful.\n"
+msgstr "\\%-10[scroll-backward] Przewiniêcie do ty³u o stronê ekranu.\n"
+
+#: info/infodoc.c:54
+msgid "\\%-10[scroll-forward] Scroll forward one screenful.\n"
+msgstr "\\%-10[scroll-forward] Przewiniêcie do przodu o stronê ekranu.\n"
+
+#: info/infodoc.c:55
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr "\\%-10[beginning-of-node] Przej¶cie na pocz±tek tego wêz³a.\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr "\\%-10[end-of-node] Przej¶cie na koniec tego wêz³a.\n"
+
+#: info/infodoc.c:58
+msgid "\\%-10[move-to-next-xref] Skip to the next hypertext link.\n"
+msgstr ""
+"\\%-10[move-to-next-xref] Przej¶cie do nastêpnego odno¶nika "
+"hipertekstowego.\n"
+
+#: info/infodoc.c:59
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under the "
+"cursor.\n"
+msgstr ""
+"\\%-10[select-reference-this-line] Przej¶cie za odno¶nikiem hipertekstowym "
+"pod kursorem.\n"
+
+#: info/infodoc.c:60
+msgid "\\%-10[history-node] Go back to the last node seen in this window.\n"
+msgstr ""
+"\\%-10[history-node] Przej¶cie do ostatniego wêz³a widocznego w tym oknie.\n"
+
+#: info/infodoc.c:62
+msgid "\\%-10[global-prev-node] Go to the previous node in the document.\n"
+msgstr "\\%-10[global-prev-node] Przej¶cie do poprzeniego wêz³a dokumentu.\n"
+
+#: info/infodoc.c:63
+msgid "\\%-10[global-next-node] Go to the next node in the document.\n"
+msgstr "\\%-10[global-next-node] Przej¶cie do nastêpnego wêz³a dokumentu.\n"
+
+#: info/infodoc.c:64
+msgid "\\%-10[prev-node] Go to the previous node on this level.\n"
+msgstr "\\%-10[prev-node] Przej¶cie do poprzedniego wêz³a danego poziomu.\n"
+
+#: info/infodoc.c:65
+msgid "\\%-10[next-node] Go to the next node on this level.\n"
+msgstr "\\%-10[next-node] Przej¶cie do nastêpnego wêz³a danego poziomu.\n"
+
+#: info/infodoc.c:66
+msgid "\\%-10[up-node] Go up one level.\n"
+msgstr "\\%-10[up-node] Przej¶cie o jeden poziom w górê.\n"
+
+#: info/infodoc.c:67
+msgid "\\%-10[top-node] Go to the top node of this document.\n"
+msgstr "\\%-10[top-node] Przej¶cie do g³ównego wêz³a dokumentu.\n"
+
+#: info/infodoc.c:68
+msgid "\\%-10[dir-node] Go to the main `directory' node.\n"
+msgstr "\\%-10[dir-node] Przej¶cie do wêz³a g³ównego katalogu.\n"
+
+#: info/infodoc.c:70
+msgid "1...9 Pick the first...ninth item in this node's menu.\n"
+msgstr ""
+"1...9 Wybranie pierwszego ... dziewi±tego elementu z menu wêz³a.\n"
+
+#: info/infodoc.c:71
+msgid "\\%-10[last-menu-item] Pick the last item in this node's menu.\n"
+msgstr "\\%-10[last-menu-item] Wybranie ostatniego elementu z menu wêz³a.\n"
+
+#: info/infodoc.c:72
+msgid "\\%-10[menu-item] Pick a menu item specified by name.\n"
+msgstr "\\%-10[menu-item] Wybranie elementu menu zadanego nazw±.\n"
+
+#: info/infodoc.c:73
+msgid "\\%-10[xref-item] Follow a cross reference specified by name.\n"
+msgstr "\\%-10[xref-item] Przej¶cie za odsy³aczem zadanym nazw±.\n"
+
+#: info/infodoc.c:74
+msgid "\\%-10[goto-node] Go to a node specified by name.\n"
+msgstr "\\%-10[goto-node] Przej¶cie do wêz³a zadanego nazw±.\n"
+
+#: info/infodoc.c:76
+msgid "\\%-10[search] Search forward for a specified string.\n"
+msgstr "\\%-10[search] Szukanie podanego ³añcucha w przód\n"
+
+#: info/infodoc.c:77
+msgid "\\%-10[search-previous] Search for previous occurrence.\n"
+msgstr "\\%-10[search-previous] Szukanie poprzedniego wyst±pienia.\n"
+
+#: info/infodoc.c:78
+msgid "\\%-10[search-next] Search for next occurrence.\n"
+msgstr "\\%-10[search-next] Szukanie nastêpnego wyst±pienia.\n"
+
+#: info/infodoc.c:79
+msgid ""
+"\\%-10[index-search] Search for a specified string in the index, and\n"
+" select the node referenced by the first entry found.\n"
+msgstr ""
+"\\%-10[index-search] Szukanie podanego ³añcucha we wpisach indeksu tego "
+"pliku Info\n"
+" i wybranie wêz³a wskazywanego przez pierwszy znaleziony wpis.\n"
+
+#: info/infodoc.c:81
+msgid "\\%-10[abort-key] Cancel the current operation.\n"
+msgstr "\\%-10[abort-key] Anulowanie bie¿±cej operacji.\n"
+
+#: info/infodoc.c:89
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"Podstawowe polecenia w oknach Info\n"
+"**********************************\n"
+
+#: info/infodoc.c:92
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s Opuszczenie tej pomocy.\n"
+
+#: info/infodoc.c:93
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Opuszczenie ca³ego Info.\n"
+
+#: info/infodoc.c:94
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Uruchomienie tutoriala Info.\n"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr " %-10s Przej¶cie do wêz³a `nastêpny' tego wêz³a.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr " %-10s Przej¶cie do wêz³a `poprzedni' tego wêz³a.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s Przej¶cie do wêz³a `w górê' tego wêz³a.\n"
+
+#: info/infodoc.c:101
+#, c-format
+msgid ""
+" %-10s Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+" %-10s Wybranie elementu menu zadanego nazw±.\n"
+" Wybranie elementu menu powoduje wybranie innego wêz³a.\n"
+
+#: info/infodoc.c:103
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr " %-10s Przej¶cie za odsy³aczem. Odczytuje nazwê odsy³acza.\n"
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr " %-10s Przej¶cie do ostatniego wêz³a widocznego w tym oknie.\n"
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr ""
+" %-10s Przej¶cie do nastêpnego odno¶nika hipertekstowego w tym wê¼le.\n"
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s Przej¶cie za odno¶nikiem hipertekstowym pod kursorem.\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr ""
+" %-10s Przej¶cie do wêz³a `directory' (katalog). Równoznaczne `g (DIR)'.\n"
+
+#: info/infodoc.c:108
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr " %-10s Przej¶cie do wêz³a Szczytowy. Równoznaczne `g Top'.\n"
+
+#: info/infodoc.c:110
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"Poruszanie siê w ramach wêz³a:\n"
+"------------------------------\n"
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s Przewiniêcie do przodu o stronê.\n"
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s Przewiniêcie do ty³u o stronê.\n"
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s Przej¶cie na pocz±tek tego wêz³a.\n"
+
+#: info/infodoc.c:115
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s Przej¶cie na koniec tego wêz³a.\n"
+
+#: info/infodoc.c:116
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s Przewiniêcie do przodu o 1 liniê.\n"
+
+#: info/infodoc.c:117
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s Przewiniêcie do ty³u o 1 liniê.\n"
+
+#: info/infodoc.c:119
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"Inne polecenia:\n"
+"---------------\n"
+
+#: info/infodoc.c:121
+#, c-format
+msgid " %-10s Pick first...ninth item in node's menu.\n"
+msgstr " %-10s Wybranie pierwszego ... dziewi±tego elementu z menu wêz³a.\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s Wybranie ostatniego elementu z menu wêz³a.\n"
+
+#: info/infodoc.c:125
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr ""
+" %-10s Szukanie podanego ³añcucha we wpisach indeksu tego pliku Info\n"
+" i wybranie wêz³a wskazywanego przez pierwszy znaleziony wpis.\n"
+
+#: info/infodoc.c:127
+#, c-format
+msgid ""
+" %-10s Move to node specified by name.\n"
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+" %-10s Przej¶cie do wêz³a zadanego nazw±.\n"
+" Mo¿na do³±czyæ tak¿e nazwê pliku w postaci (PLIK)WÊZE£.\n"
+
+#: info/infodoc.c:129
+#, c-format
+msgid ""
+" %-10s Search forward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+" %-10s Szukanie podanego ³añcucha w przód\n"
+" i wybranie wêz³a, w którym znaleziono nastêpne wyst±pienie.\n"
+
+#: info/infodoc.c:131
+#, c-format
+msgid ""
+" %-10s Search backward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+" %-10s Szukanie podanego ³añcucha w ty³\n"
+" i wybranie wêz³a, w którym znaleziono nastêpne wyst±pienie.\n"
+
+#: info/infodoc.c:312
+msgid "The current search path is:\n"
+msgstr "Aktualna ¶cie¿ka poszukiwania to:\n"
+
+#: info/infodoc.c:316
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"Polecenia dostêpne w oknach Info:\n"
+"\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"Polecenia dostêpne w obszarze echo:\n"
+"\n"
+
+#: info/infodoc.c:343
+#, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+"Nastêpuj±ce polecenia mo¿na wywo³aæ tylko przez %s:\n"
+"\n"
+
+#: info/infodoc.c:347
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+"Nastêpuj±cych poleceñ nie mo¿na w ogóle wywo³aæ:\n"
+"\n"
+
+#: info/infodoc.c:477
+msgid "Display help message"
+msgstr "Wy¶wietlenie pomocy"
+
+#: info/infodoc.c:495
+msgid "Visit Info node `(info)Help'"
+msgstr "Odwiedzenie wêz³a Info `(info)Help'"
+
+#: info/infodoc.c:633
+msgid "Print documentation for KEY"
+msgstr "Wy¶wietlenie dokumentacji dla KLAWISZA"
+
+#: info/infodoc.c:645
+#, c-format
+msgid "Describe key: %s"
+msgstr "Opis klawisza: %s"
+
+#: info/infodoc.c:656
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s jest niezdefiniowany."
+
+#: info/infodoc.c:672 info/infodoc.c:701
+#, c-format
+msgid "%s is undefined."
+msgstr "%s jest niezdefiniowany."
+
+#: info/infodoc.c:722
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s jest zdefiniowany na %s."
+
+#: info/infodoc.c:1146
+msgid "Show what to type to execute a given command"
+msgstr "Pokazanie co nacisn±æ, aby wykonaæ zadane polecenie"
+
+#: info/infodoc.c:1150
+msgid "Where is command: "
+msgstr "Polecenie do znalezienia: "
+
+#: info/infodoc.c:1172
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "`%s' nie ma pod ¿adnym klawiszem"
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s mo¿na wywo³aæ tylko przez %s."
+
+#: info/infodoc.c:1183
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s mo¿na wywo³aæ przez %s."
+
+#: info/infodoc.c:1188
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "Nie ma funkcji o nazwie `%s'"
+
+#: info/infodoc.c:96
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"Wybór innych wêz³ów:\n"
+"--------------------\n"
+
+#: info/infokey.c:170
+msgid "incorrect number of arguments"
+msgstr "b³êdna liczba argumentów"
+
+#: info/infokey.c:201
+#, c-format
+msgid "cannot open input file `%s'"
+msgstr "nie mo¿na otworzyæ pliku wej¶ciowego `%s'"
+
+#: info/infokey.c:215
+#, c-format
+msgid "cannot create output file `%s'"
+msgstr "nie mo¿na utworzyæ pliku wyj¶ciowego `%s'"
+
+#: info/infokey.c:226
+#, c-format
+msgid "error writing to `%s'"
+msgstr "b³±d podczas zapisu do `%s'"
+
+#: info/infokey.c:232
+#, c-format
+msgid "error closing output file `%s'"
+msgstr "b³±d podczas zamykania pliku wyj¶ciowego `%s'"
+
+#: info/infokey.c:450
+msgid "key sequence too long"
+msgstr "sekwencja klawiszy zbyt d³uga"
+
+#: info/infokey.c:529
+msgid "missing key sequence"
+msgstr "brak sekwencji klawiszy"
+
+#: info/infokey.c:610
+msgid "NUL character (\\000) not permitted"
+msgstr "znak NUL (\\000) nie jest dozwolony"
+
+#: info/infokey.c:641
+#, c-format
+msgid "NUL character (^%c) not permitted"
+msgstr "znak NUL (^%c) nie jest dozwolony"
+
+#: info/infokey.c:665
+msgid "missing action name"
+msgstr "brakuj±ca nazwa akcji"
+
+#: info/infokey.c:681 info/infokey.c:756
+msgid "section too long"
+msgstr "sekcja zbyt d³uga"
+
+#: info/infokey.c:688
+#, c-format
+msgid "unknown action `%s'"
+msgstr "nieznana akcja `%s'"
+
+#: info/infokey.c:698
+msgid "action name too long"
+msgstr "nazwa akcji zbyt d³uga"
+
+#: info/infokey.c:712
+#, c-format
+msgid "extra characters following action `%s'"
+msgstr "nadmiarowe znaki po akcji `%s'"
+
+#: info/infokey.c:723
+msgid "missing variable name"
+msgstr "brakuj±ca nazwa zmiennej"
+
+#: info/infokey.c:733
+msgid "missing `=' immediately after variable name"
+msgstr "brakuj±cy `=' bezpo¶rednio po nazwie zmiennej"
+
+#: info/infokey.c:741
+msgid "variable name too long"
+msgstr "nazwa zmiennej zbyt d³uga"
+
+#: info/infokey.c:765
+msgid "value too long"
+msgstr "warto¶æ zbyt d³uga"
+
+#: info/infokey.c:890
+#, c-format
+msgid "\"%s\", line %u: "
+msgstr "\"%s\", linia %u: "
+
+#: info/infokey.c:906
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [INPUT-FILE]\n"
+"\n"
+"Compile infokey source file to infokey file. Reads INPUT-FILE (default\n"
+"$HOME/.infokey) and writes compiled key file to (by default) $HOME/.info.\n"
+"\n"
+"Options:\n"
+" --output FILE output to FILE instead of $HOME/.info\n"
+" --help display this help and exit.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"Sk³adnia: %s [OPCJA]... [PLIK-WEJ¦CIOWY]\n"
+"\n"
+"Kompilowanie pliku ¼ród³owego infokey do pliku infokey. Odczytywany jest\n"
+"PLIK-WEJ¦CIOWY (domy¶lnie $HOME/.infokey), a skompilowany plik klawiszy\n"
+"zapisywany jest (domy¶lnie) do $HOME/.info.\n"
+"\n"
+"Opcje:\n"
+" --output PLIK zapis do PLIKU zamiast do $HOME/.info\n"
+" --help wy¶wietlenie tej pomocy i zakoñczenie.\n"
+" --version wy¶wietlenie informacji o wersji i zakoñczenie.\n"
+
+#: info/infomap.c:955
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "Zignorowany b³êdny plik infokey `%s' - zbyt ma³y"
+
+#: info/infomap.c:958
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "Zignorowany b³êdny plik infokey `%s' - zbyt du¿y"
+
+#: info/infomap.c:971
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "B³±d podczas czytania pliku infokey `%s' - skrócony odczyt"
+
+#: info/infomap.c:990
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+"B³êdny plik infokey `%s' (z³e liczby magiczne) - mo¿na go uaktualniæ infokey"
+
+#: info/infomap.c:999
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr ""
+"Plik infokey `%s' jest przestarza³y - mo¿na go uaktualniæ poleceniem infokey"
+
+#: info/infomap.c:1015
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+"B³êdny plik infokey `%s' (z³a d³ugo¶æ sekcji) - mo¿na go uaktualniæ infokey"
+
+#: info/infomap.c:1036
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr ""
+"B³êdny plik infokey `%s' (z³y kod sekcji) - mo¿na go uaktualniæ przez infokey"
+
+#: info/infomap.c:1171
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr "B³êdne dane w pliku infokey - czê¶æ przypisañ klawiszy zignorowana"
+
+#: info/infomap.c:1221
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr "B³êdne dane w pliku infokey - czê¶æ ustawieñ zmiennych zignorowana"
+
+#: info/m-x.c:68
+msgid "Read the name of an Info command and describe it"
+msgstr "Odczytanie nazwy polecenia Info i opisanie go"
+
+#: info/m-x.c:72
+msgid "Describe command: "
+msgstr "Opis polecenia: "
+
+#: info/m-x.c:95
+msgid "Read a command name in the echo area and execute it"
+msgstr "Odczytanie nazwy polecenia w obszarze echo i wykonanie go"
+
+#: info/m-x.c:139
+msgid "Cannot execute an `echo-area' command here."
+msgstr "Nie mo¿na tutaj wykonaæ polecenia `echo-area'."
+
+#: info/m-x.c:153
+#, c-format
+msgid "Undefined command: %s"
+msgstr "Niezdefiniowane polecenie: %s"
+
+#: info/m-x.c:159
+msgid "Set the height of the displayed window"
+msgstr "Ustawienie wysoko¶ci wy¶wietlanego okna"
+
+#: info/m-x.c:172
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Ustawienie wysoko¶ci ekranu na (%d): "
+
+#: info/makedoc.c:166 info/makedoc.c:174
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+" Pliki ¼ród³owe przeszukane, aby ten plik zawiera³:\n"
+"\n"
+
+#: info/makedoc.c:556
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "Nie mo¿na obrabiaæ pliku %s.\n"
+
+#: info/nodemenu.c:30
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+"\n"
+"* Menu:\n"
+" (Plik)Wêze³ Linie Rozmiar Zawiera plik\n"
+" ----------- ----- ------- ------------"
+
+#: info/nodemenu.c:201
+msgid ""
+"Here is the menu of nodes you have recently visited.\n"
+"Select one from this menu, or use `\\[history-node]' in another window.\n"
+msgstr ""
+"Oto jest menu ostatnio odwiedzonych wêz³ów.\n"
+"Mo¿na wybraæ jeden z tego menu lub u¿yæ `\\[history-node]' w innym oknie.\n"
+
+#: info/nodemenu.c:223
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr ""
+"Utworzenie okna zawieraj±cego menu wszystkich aktualnie odwiedzanych wêz³ów"
+
+#: info/nodemenu.c:303
+msgid "Select a node which has been previously visited in a visible window"
+msgstr "Wybranie wêz³a, który by³ poprzednio odwiedzony w widocznym oknie"
+
+#: info/nodemenu.c:316
+msgid "Select visited node: "
+msgstr "Wybranie widocznego wêz³a: "
+
+#: info/nodemenu.c:336 info/session.c:2578
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "Odsy³acz znikn±³! (%s)."
+
+#: info/search.c:166
+#, c-format
+msgid "regexp error: %s"
+msgstr "b³±d wyra¿enia regularnego: %s"
+
+#: info/session.c:164
+#, c-format
+msgid ""
+"Welcome to Info version %s. Type \\[get-help-window] for help, \\[menu-item] "
+"for menu item."
+msgstr ""
+"Witamy w Info w wersji %s. \\[get-help-window] pokazuje pomoc, \\[menu-item] "
+"wybiera element menu."
+
+#: info/session.c:625
+msgid "Move down to the next line"
+msgstr "Przej¶cie w dó³ do nastêpnej linii"
+
+#: info/session.c:661
+msgid "Move up to the previous line"
+msgstr "Przej¶cie w górê do poprzedniej linii"
+
+#: info/session.c:931
+msgid "Move to the end of the line"
+msgstr "Przej¶cie na koniec linii"
+
+#: info/session.c:942
+msgid "Move to the start of the line"
+msgstr "Przej¶cie na pocz±tek linii"
+
+#: info/session.c:1142
+msgid "Next"
+msgstr "Nastêpny"
+
+#: info/session.c:1158 info/session.c:1283
+msgid "No more nodes within this document."
+msgstr "Nie ma wiêcej wêz³ów w tym dokumencie."
+
+#: info/session.c:1309
+msgid "No `Prev' for this node."
+msgstr "Nie ma wêz³a `Poprzedni' dla tego wêz³a."
+
+#: info/session.c:1329
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr ""
+"Nie ma wêz³ów `Poprzedni' ani `W górê' dla tego wêz³a w tym dokumencie."
+
+#: info/session.c:1391
+msgid "Move forwards or down through node structure"
+msgstr "Przej¶cie do przodu lub w dó³ struktury wêz³a"
+
+#: info/session.c:1407
+msgid "Move backwards or up through node structure"
+msgstr "Przej¶cie do ty³u lub w górê struktury wêz³a"
+
+#: info/session.c:1508
+msgid "Scroll forward in this window"
+msgstr "Przewijanie do przodu w tym oknie"
+
+#: info/session.c:1516
+msgid "Scroll forward in this window and set default window size"
+msgstr ""
+"Przewijanie do przodu w tym oknie i ustawienie domy¶lnego rozmiaru okna"
+
+#: info/session.c:1524
+msgid "Scroll forward in this window staying within node"
+msgstr "Przewijanie do przodu w tym oknie pozostaj±c wewn±trz wêz³a"
+
+#: info/session.c:1532
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr ""
+"Przewijanie do przodu w tym oknie wewn. wêz³a i ust. domy¶lnego rozmiaru okna"
+
+#: info/session.c:1540
+msgid "Scroll backward in this window"
+msgstr "Przewijanie do ty³u w tym oknie"
+
+#: info/session.c:1548
+msgid "Scroll backward in this window and set default window size"
+msgstr "Przewijanie do ty³u w tym oknie i ustawienie domy¶lnego rozmiaru okna"
+
+#: info/session.c:1557
+msgid "Scroll backward in this window staying within node"
+msgstr "Przewijanie do ty³u w tym oknie pozostaj±c wewn±trz wêz³a"
+
+#: info/session.c:1565
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr ""
+"Przewijanie do ty³u w tym oknie wewn. wêz³a i ust. domy¶lnego rozmiaru okna"
+
+#: info/session.c:1573
+msgid "Move to the start of this node"
+msgstr "Przej¶cie na pocz±tek tego wêz³a"
+
+#: info/session.c:1580
+msgid "Move to the end of this node"
+msgstr "Przej¶cie na koniec tego wêz³a"
+
+#: info/session.c:1587
+msgid "Scroll down by lines"
+msgstr "Przewijanie w dó³ po linii"
+
+#: info/session.c:1604
+msgid "Scroll up by lines"
+msgstr "Przewijanie w górê po linii"
+
+#: info/session.c:1622
+msgid "Scroll down by half screen size"
+msgstr "Przewijanie w dó³ po po³owie rozmiaru ekranu"
+
+#: info/session.c:1648
+msgid "Scroll up by half screen size"
+msgstr "Przewijanie w górê po po³owie rozmiaru ekranu"
+
+#: info/session.c:1677
+msgid "Select the next window"
+msgstr "Wybranie nastêpnego okna"
+
+#: info/session.c:1716
+msgid "Select the previous window"
+msgstr "Wybranie poprzedniego okna"
+
+#: info/session.c:1767
+msgid "Split the current window"
+msgstr "Podzielenie aktualnego okna"
+
+#: info/session.c:1848
+msgid "Delete the current window"
+msgstr "Usuniêcie aktualnego okna"
+
+#: info/session.c:1856
+msgid "Cannot delete a permanent window"
+msgstr "Nie mo¿na usun±æ sta³ego okna"
+
+#: info/session.c:1888
+msgid "Delete all other windows"
+msgstr "Usuniêcie wszystkich innych okien"
+
+#: info/session.c:1934
+msgid "Scroll the other window"
+msgstr "Przewijanie innego okna"
+
+#: info/session.c:1955
+msgid "Scroll the other window backward"
+msgstr "Przewijanie innego okna do ty³u"
+
+#: info/session.c:1961
+msgid "Grow (or shrink) this window"
+msgstr "Powiêkszenie (lub zmniejszenie) tego okna"
+
+#: info/session.c:1972
+msgid "Divide the available screen space among the visible windows"
+msgstr "Podzielenie dostêpnego miejsca na ekranie miêdzy widoczne okna"
+
+#: info/session.c:1979
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "Zmiana stanu zawijania linii w aktualnym oknie"
+
+#: info/session.c:1986
+msgid "Toggle the usage of regular expressions in searches"
+msgstr "Prze³±czenie u¿ywania wyra¿eñ regularnych przy wyszukiwaniu"
+
+#: info/session.c:1990
+msgid "Using regular expressions for searches."
+msgstr "U¿ywanie wyra¿eñ regularnych przy wyszukiwaniu."
+
+#: info/session.c:1991
+msgid "Using literal strings for searches."
+msgstr "U¿ywanie dos³ownego tekstu przy wyszukiwaniu."
+
+#: info/session.c:2162
+msgid "Select the Next node"
+msgstr "Wybranie wêz³a Nastêpny"
+
+#: info/session.c:2170
+msgid "Select the Prev node"
+msgstr "Wybranie wêz³a Poprzedni"
+
+#: info/session.c:2178
+msgid "Select the Up node"
+msgstr "Wybranie wêz³a W górê"
+
+#: info/session.c:2185
+msgid "Select the last node in this file"
+msgstr "Wybranie ostatniego wêz³a w tym pliku"
+
+#: info/session.c:2212 info/session.c:2245
+msgid "This window has no additional nodes"
+msgstr "To okno nie ma dodatkowych wêz³ów"
+
+#: info/session.c:2218
+msgid "Select the first node in this file"
+msgstr "Wybranie pierwszego wêz³a w tym pliku"
+
+#: info/session.c:2252
+msgid "Select the last item in this node's menu"
+msgstr "Wybranie ostatniego elementu w menu tego wêz³a"
+
+#: info/session.c:2258
+msgid "Select this menu item"
+msgstr "Wybranie tego elementu menu"
+
+#: info/session.c:2291
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "Nie ma %d elementów w tym menu."
+
+#: info/session.c:2485 info/session.c:2486
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Element menu (%s): "
+
+#: info/session.c:2489
+msgid "Menu item: "
+msgstr "Element menu: "
+
+#: info/session.c:2496 info/session.c:2497
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Przej¶cie za odno¶nikiem (%s): "
+
+#: info/session.c:2500
+msgid "Follow xref: "
+msgstr "Przej¶cie za odno¶nikiem: "
+
+#: info/session.c:2629
+msgid "Read a menu item and select its node"
+msgstr "Odczytanie elementu menu i wybranie jego wêz³a"
+
+#: info/session.c:2637
+msgid "Read a footnote or cross reference and select its node"
+msgstr "Odczytanie przypisu lub odsy³acza i wybranie jego wêz³a"
+
+#: info/session.c:2643
+msgid "Move to the start of this node's menu"
+msgstr "Przej¶cie na pocz±tek menu tego wêz³a"
+
+#: info/session.c:2667
+msgid "Visit as many menu items at once as possible"
+msgstr "Odwiedzenie jednocze¶nie jak najwiêkszej liczby elementów menu"
+
+#: info/session.c:2695
+msgid "Read a node name and select it"
+msgstr "Odczytanie nazwy wêz³a i wybranie go"
+
+#: info/session.c:2750 info/session.c:2755
+msgid "Goto node: "
+msgstr "Przej¶cie do wêz³a: "
+
+#: info/session.c:2819
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "Brak menu w wê¼le `%s'."
+
+#: info/session.c:2865
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "Brak elementu menu `%s' w wê¼le `%s'."
+
+#: info/session.c:2895
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr "Nie mo¿na znale¼æ wêz³a wskazywanego przez `%s' w `%s'."
+
+#: info/session.c:2945
+msgid "Read a list of menus starting from dir and follow them"
+msgstr "Odczytanie listy menu pocz±wszy od katalogu i pod±¿anie za ni±"
+
+#: info/session.c:2947
+msgid "Follow menus: "
+msgstr "Pod±¿anie za menu: "
+
+#: info/session.c:3140
+msgid "Find the node describing program invocation"
+msgstr "Szukanie wêz³a opisuj±cego wywo³anie programu"
+
+#: info/session.c:3142
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "Szukanie wêz³a Invocation dla [%s]: "
+
+#: info/session.c:3180
+msgid "Read a manpage reference and select it"
+msgstr "Odczytanie odno¶nika do strony podrêcznika i wybranie go"
+
+#: info/session.c:3184
+msgid "Get Manpage: "
+msgstr "Pobranie strony podrêcznika: "
+
+#: info/session.c:3214
+msgid "Select the node `Top' in this file"
+msgstr "Wybranie wêz³a `Szczytowy' w tym pliku"
+
+#: info/session.c:3220
+msgid "Select the node `(dir)'"
+msgstr "Wybranie wêz³a `(dir)'"
+
+#: info/session.c:3237 info/session.c:3239
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Zabicie wêz³a (%s): "
+
+#: info/session.c:3291
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "Nie mo¿na zabiæ wêz³a `%s'"
+
+#: info/session.c:3301
+msgid "Cannot kill the last node"
+msgstr "Nie mo¿na zabiæ ostatniego wêz³a"
+
+#: info/session.c:3387
+msgid "Select the most recently selected node"
+msgstr "Wybranie ostatnio wybranego wêz³a"
+
+#: info/session.c:3393
+msgid "Kill this node"
+msgstr "Zabicie tego wêz³a"
+
+#: info/session.c:3401
+msgid "Read the name of a file and select it"
+msgstr "Odczytanie nazwy pliku i wybranie go"
+
+#: info/session.c:3405
+msgid "Find file: "
+msgstr "Szukanie pliku: "
+
+#: info/session.c:3422
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "Nie mo¿na znale¼æ `%s'."
+
+#: info/session.c:3465 info/session.c:3583
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "Nie mo¿na utworzyæ pliku wyj¶ciowego `%s'."
+
+#: info/session.c:3479 info/session.c:3601 info/session.c:3661
+msgid "Done."
+msgstr "Gotowe."
+
+#: info/session.c:3534
+#, c-format
+msgid "Writing node %s..."
+msgstr "Zapisywanie wêz³a %s..."
+
+#: info/session.c:3610
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr "Przepuszczenie zawarto¶ci tego pliku przez INFO_PRINT_COMMAND"
+
+#: info/session.c:3645
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "Nie mo¿na otworzyæ potoku do `%s'."
+
+#: info/session.c:3651
+#, c-format
+msgid "Printing node %s..."
+msgstr "Drukowanie wêz³a %s..."
+
+#: info/session.c:3900
+msgid "Search continued from the end of the document."
+msgstr "Kontynuacja szukania od koñca dokumentu."
+
+#: info/session.c:3905
+msgid "Search continued from the beginning of the document."
+msgstr "Kontynuacja szukania od pocz±tku dokumentu."
+
+#: info/session.c:3922
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "Szukanie podpliku %s ..."
+
+#: info/session.c:3979
+msgid "Read a string and search for it case-sensitively"
+msgstr "Odczytanie ³añcucha i poszukiwanie go uwzglêdniaj±c wielko¶æ liter"
+
+#: info/session.c:3986
+msgid "Read a string and search for it"
+msgstr "Odczytanie ³añcucha i poszukiwanie go"
+
+#: info/session.c:3994
+msgid "Read a string and search backward for it"
+msgstr "Odczytanie ³añcucha i poszukiwanie go w ty³"
+
+#: info/session.c:4030 info/session.c:4036
+#, c-format
+msgid "%s%s%s [%s]: "
+msgstr "%s%s%s [%s]: "
+
+#: info/session.c:4031 info/session.c:4037
+msgid "Regexp search"
+msgstr "Szukanie wyr.reg."
+
+#: info/session.c:4032 info/session.c:4038
+msgid " case-sensitively"
+msgstr " uwzgl. wielko¶æ liter"
+
+#: info/session.c:4033 info/session.c:4039
+msgid " backward"
+msgstr " wstecz"
+
+#: info/session.c:4037
+msgid "Search"
+msgstr "Szukanie"
+
+#: info/session.c:4079
+msgid "Search failed."
+msgstr "Wyszukiwanie nie powiod³o siê."
+
+#: info/session.c:4097
+msgid "Repeat last search in the same direction"
+msgstr "Powtórzenie ostatniego poszukiwania w tym samym kierunku"
+
+#: info/session.c:4100 info/session.c:4110
+msgid "No previous search string"
+msgstr "Brak poprzedniego szukanego ³añcucha"
+
+#: info/session.c:4107
+msgid "Repeat last search in the reverse direction"
+msgstr "Powtórzenie ostatniego poszukiwania w odwrotnym kierunku"
+
+#: info/session.c:4126 info/session.c:4132
+msgid "Search interactively for a string as you type it"
+msgstr "Interaktywne poszukiwanie ³añcucha w trakcie wpisywania go"
+
+#: info/session.c:4212
+msgid "Regexp I-search backward: "
+msgstr "Interaktywne szukanie wyr.reg. wstecz: "
+
+#: info/session.c:4213
+msgid "I-search backward: "
+msgstr "Interaktywne szukanie wstecz: "
+
+#: info/session.c:4215
+msgid "Regexp I-search: "
+msgstr "Interaktywne szukanie wyr.reg.: "
+
+#: info/session.c:4216
+msgid "I-search: "
+msgstr "Interaktywne szukanie: "
+
+#: info/session.c:4241 info/session.c:4243
+msgid "Failing "
+msgstr "Bez powodzenia "
+
+#: info/session.c:4734
+msgid "Move to the previous cross reference"
+msgstr "Przej¶cie do poprzedniego odsy³acza"
+
+#: info/session.c:4752
+msgid "Move to the next cross reference"
+msgstr "Przej¶cie do nastêpnego odsy³acza"
+
+#: info/session.c:4774
+msgid "Select reference or menu item appearing on this line"
+msgstr "Wybranie odsy³acza lub elementu menu wystêpuj±cego w tej linii"
+
+#: info/session.c:4797
+msgid "Cancel current operation"
+msgstr "Anulowanie bie¿±cej operacji"
+
+#: info/session.c:4804
+msgid "Quit"
+msgstr "Wyj¶cie"
+
+#: info/session.c:4813
+msgid "Move the cursor to a specific line of the window"
+msgstr "Przesuniêcie kursora do podanej linii w oknie"
+
+#: info/session.c:4845
+msgid "Redraw the display"
+msgstr "Odrysowanie ekranu"
+
+#: info/session.c:4882
+msgid "Quit using Info"
+msgstr "Wyj¶cie z Info"
+
+#: info/session.c:4895
+msgid "Run command bound to this key's lowercase variant"
+msgstr "Uruchomienie polecenia przypisanego do wariantu klawisza z ma³± liter±"
+
+#: info/session.c:4906
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "Nieznane polecenie (%s)."
+
+#: info/session.c:4909
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "\"%s\" jest niepoprawne"
+
+#: info/session.c:4910
+#, c-format
+msgid "`%s' is invalid"
+msgstr "`%s' jest niepoprawne"
+
+#: info/session.c:5125
+msgid "Add this digit to the current numeric argument"
+msgstr "Dodanie tej cyfry do aktualnego argumentu liczbowego"
+
+#: info/session.c:5134
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "Rozpoczêcie (lub pomno¿enie przez 4) aktualnego argumentu liczbowego"
+
+#: info/session.c:5149
+msgid "Internally used by \\[universal-argument]"
+msgstr "Wewnêtrznie u¿ywane przez \\[universal-argument]"
+
+#: info/tilde.c:336
+#, c-format
+msgid "readline: Out of virtual memory!\n"
+msgstr "readline: Zabrak³o pamiêci wirtualnej!\n"
+
+#: info/variables.c:37
+msgid "When \"On\", footnotes appear and disappear automatically"
+msgstr "Je¶li \"On\", przypisy pojawiaj± siê i znikaj± automatycznie"
+
+#: info/variables.c:41
+msgid "When \"On\", creating or deleting a window resizes other windows"
+msgstr "Je¶li \"On\", tworzenie lub usuwanie okna zmienia rozmiar innych okien"
+
+#: info/variables.c:45
+msgid "When \"On\", flash the screen instead of ringing the bell"
+msgstr "Je¶li \"On\", migniêcie ekranu zamiast d¼wiêkowego dzwonka"
+
+#: info/variables.c:49
+msgid "When \"On\", errors cause the bell to ring"
+msgstr "Je¶li \"On\", b³êdy wywo³uj± sygna³ ostrzegawczy"
+
+#: info/variables.c:53
+msgid "When \"On\", Info garbage collects files which had to be uncompressed"
+msgstr "Je¶li \"On\", Info sprz±ta pliki, które musia³y zostaæ rozpakowane"
+
+#: info/variables.c:56
+msgid "When \"On\", the portion of the matched search string is highlighted"
+msgstr "Je¶li \"On\", dopasowana czê¶æ szukanego ³añcucha jest pod¶wietlana"
+
+#: info/variables.c:60
+msgid "Controls what happens when scrolling is requested at the end of a node"
+msgstr "Kontrola, co dzieje siê przy próbie przewijania na koñcu wêz³a"
+
+#: info/variables.c:65
+msgid "Same as scroll-behaviour"
+msgstr "To samo co scroll-behaviour"
+
+#: info/variables.c:69
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr "Liczba linii do przewiniêcia kiedy kursor wychodzi za okno"
+
+#: info/variables.c:73
+msgid "Controls whether scroll-behavior affects cursor movement commands"
+msgstr "Kontrola, czy scroll-behaviour dotyczy poleceñ przesuwaj±cych kursor"
+
+#: info/variables.c:77
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr "Je¶li \"On\", Info przyjmuje i wy¶wietla znaki ISO Latin"
+
+#: info/variables.c:81
+msgid ""
+"What to do when a scrolling command is issued at the end of the last node"
+msgstr "Co robiæ kiedy polecenie przewijania wydano na koñcu ostatniego wêz³a"
+
+#: info/variables.c:88
+msgid "Explain the use of a variable"
+msgstr "Wyja¶nienie u¿ycia zmiennej"
+
+#: info/variables.c:94
+msgid "Describe variable: "
+msgstr "Opisanie zmiennej: "
+
+#: info/variables.c:113
+msgid "Set the value of an Info variable"
+msgstr "Ustawienie warto¶ci zmiennej Info"
+
+#: info/variables.c:119
+msgid "Set variable: "
+msgstr "Ustawienie zmiennej: "
+
+#: info/variables.c:137
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "Ustawienie %s na warto¶æ (%d): "
+
+#: info/variables.c:178
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "Ustawienie %s na warto¶æ (%s): "
+
+#: info/window.c:1026
+msgid "--*** Tags out of Date ***"
+msgstr "--*** Znaczniki s± nieaktualne ***"
+
+#: info/window.c:1037
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), linii ----, "
+
+#: info/window.c:1044
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d linii --%s--"
+
+#: info/window.c:1048
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d linii --%s--"
+
+#: info/window.c:1055
+#, c-format
+msgid " Subfile: %s"
+msgstr " Podplik: %s"
+
+#: install-info/install-info.c:221
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: uwaga: "
+
+#: install-info/install-info.c:270
+#, c-format
+msgid " for %s"
+msgstr " dla %s"
+
+#: install-info/install-info.c:500
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr "\t`%s --help' poda pe³n± listê opcji.\n"
+
+#: install-info/install-info.c:508
+#, c-format
+msgid "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+msgstr "Sk³adnia: %s [OPCJA]... [PLIK-INFO [PLIK-DIR]]\n"
+
+#: install-info/install-info.c:510
+msgid "Add or remove entries in INFO-FILE from the Info directory DIR-FILE."
+msgstr ""
+"Dodanie lub usuniêcie wpisów dla PLIKU-INFO w pliku katalogu PLIK-KATALOGU."
+
+#: install-info/install-info.c:513
+msgid ""
+"Options:\n"
+" --debug report what is being done.\n"
+" --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+" don't insert any new entries.\n"
+" --description=TEXT the description of the entry is TEXT; used with\n"
+" the --name option to become synonymous with the\n"
+" --entry option.\n"
+" --dir-file=NAME specify file name of Info directory file;\n"
+" equivalent to using the DIR-FILE argument.\n"
+" --dry-run same as --test."
+msgstr ""
+" --debug informowanie o wykonywanych dzia³aniach.\n"
+" --delete usuniêcie istniej±cych wpisów dla PLIKU-INFO\n"
+" z PLIKU-KATALOGU; nie wstawianie nowych wpisów.\n"
+" --description=TEKST opis wpisu to TEKST; u¿ywane z opcj± --name jest\n"
+" odpowiednikiem opcji --entry.\n"
+" --dir-file=NAZWA podanie nazwy pliku z katalogiem Info;\n"
+" odpowiednik u¿ycia argumentu PLIK-KATALOGU.\n"
+" --dry-run to samo co --test."
+
+#: install-info/install-info.c:525
+msgid ""
+" --entry=TEXT insert TEXT as an Info directory entry.\n"
+" TEXT is written as an Info menu item line followed\n"
+" by zero or more extra lines starting with "
+"whitespace.\n"
+" If you specify more than one entry, all are added.\n"
+" If you don't specify any entries, they are determined\n"
+" from information in the Info file itself.\n"
+" When removing, TEXT specifies the entry to remove.\n"
+" TEXT is only removed as a last resort, if the\n"
+" entry as determined from the Info file is not "
+"present,\n"
+" and the basename of the Info file isn't found either."
+msgstr ""
+" --entry=TEKST wstawienie TEKSTU jako wpisu katalogu Info.\n"
+" TEKST powinien mieæ formê linii elementu menu Info\n"
+" z zerem lub wiêcej linii zaczynaj±cymi siê od "
+"spacji.\n"
+" Je¶li podano wiêcej ni¿ jeden wpis, wszystkie s± "
+"dodawane.\n"
+" Je¶li nie podano ¿adnego wpisu, s± okre¶lane na "
+"podstawie\n"
+" informacji w samym pliku Info.\n"
+" Przy usuwaniu TEKST okre¶la wpis do usuniêcia.\n"
+" TEKST jest usuwany tylko w ostateczno¶ci, je¶li nie "
+"ma\n"
+" wpisu okre¶lonego przez plik Info ani nazwy pliku "
+"Info."
+
+#: install-info/install-info.c:537
+msgid ""
+" --help display this help and exit.\n"
+" --info-dir=DIR same as --dir-file=DIR/dir.\n"
+" --info-file=FILE specify Info file to install in the directory;\n"
+" equivalent to using the INFO-FILE argument.\n"
+" --item=TEXT same as --entry=TEXT.\n"
+" --keep-old do not replace entries, or remove empty sections.\n"
+" --menuentry=TEXT same as --name=TEXT.\n"
+" --name=TEXT the name of the entry is TEXT; used with --description\n"
+" to become synonymous with the --entry option.\n"
+" --no-indent do not format new entries in the DIR file.\n"
+" --quiet suppress warnings."
+msgstr ""
+" --help wy¶wietlenie tego opisu i zakoñczenie.\n"
+" --info-dir=KATALOG to samo co --dir-file=KATALOG/dir.\n"
+" --info-file=PLIK podanie pliku Info do zainstalowania w katalogu;\n"
+" odpowiednik u¿ycia argumentu PLIK-INFO.\n"
+" --item=TEKST to samo co --entry=TEKST.\n"
+" --keep-old nie zastêpowanie wpisów, nie usuwanie pustych sekcji.\n"
+" --menuentry=TEKST to samo co --name=TEKST.\n"
+" --name=TEKST nazwa wpisu to TEKST; u¿ywane wraz z --description "
+"jest\n"
+" odpowiednikiem opcji --entry.\n"
+" --no-indent nie formatowanie nowych wpisów w pliku DIR.\n"
+" --quiet pominiêcie ostrze¿eñ."
+
+#: install-info/install-info.c:550
+msgid ""
+" --regex=R put this file's entries in all sections that match the\n"
+" regular expression R (ignoring case).\n"
+" --remove same as --delete.\n"
+" --remove-exactly only remove if the info file name matches exactly;\n"
+" suffixes such as .info and .gz are not ignored.\n"
+" --section=SEC put entries in section SEC of the directory.\n"
+" If you specify more than one section, all the entries\n"
+" are added in each of the sections.\n"
+" If you don't specify any sections, they are "
+"determined\n"
+" from information in the Info file itself.\n"
+" --section R SEC equivalent to --regex=R --section=SEC --add-once."
+msgstr ""
+" --regex=WYRA¯ENIE umieszczenie wpisów tego pliku we wszystkich sekcjach\n"
+" pasuj±cych do WYRA¯ENIA regularnego (bez "
+"uwzglêdnienia\n"
+" wielko¶ci liter).\n"
+" --remove to samo co --delete.\n"
+" --remove-exactly usuniêcie tylko je¶li nazwa pliku info pasuje "
+"dok³adnie;\n"
+" przyrostki takie jak .info i .gz nie s± ignorowane.\n"
+" --section=SEKCJA umieszczenie wpisów dla tego pliku w danej SEKCJI\n"
+" katalogu.\n"
+" Je¶li podano wiêcej ni¿ jedn± sekcjê, wszystkie wpisy "
+"s±\n"
+" dodawane do ka¿dej z sekcji.\n"
+" Je¶li nie podano ¿adnej sekcji, s± okre¶lane na "
+"podstawie\n"
+" informacji w samym pliku Info.\n"
+" --section WYR SEK odpowiednik --regex=WYR --section=SEK --add-once."
+
+#: install-info/install-info.c:563
+msgid ""
+" --silent suppress warnings.\n"
+" --test suppress updating of DIR-FILE.\n"
+" --version display version information and exit."
+msgstr ""
+" --silent pominiêcie ostrze¿eñ.\n"
+" --test pominiêcie uaktualniania PLIKU-KATALOGU.\n"
+" --version wy¶wietlenie informacji o wersji i zakoñczenie."
+
+#: install-info/install-info.c:570
+msgid ""
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"Raporty o b³êdach prosimy wysy³aæ poczt± elektroniczn± na adres\n"
+"bug-texinfo@gnu.org, a ogólne pytania i dyskusjê na help-texinfo@gnu.org.\n"
+"Strona domowa texinfo: http://www.gnu.org/software/texinfo/"
+
+#: install-info/install-info.c:597
+#, c-format
+msgid ""
+"This is the file .../info/dir, which contains the\n"
+"topmost node of the Info hierarchy, called (dir)Top.\n"
+"The first time you invoke Info you start off looking at this node.\n"
+"\n"
+"%s\tThis is the top of the INFO tree\n"
+"\n"
+" This (the Directory node) gives a menu of major topics.\n"
+" Typing \"q\" exits, \"?\" lists all Info commands, \"d\" returns here,\n"
+" \"h\" gives a primer for first-timers,\n"
+" \"mEmacs<Return>\" visits the Emacs manual, etc.\n"
+"\n"
+" In Emacs, you can click mouse button 2 on a menu item or cross reference\n"
+" to select it.\n"
+"\n"
+"%s\n"
+msgstr ""
+"To jest plik .../info/dir, zawieraj±cy najwy¿szy\n"
+"wêze³ hierarchii Info, o nazwie (dir)Top.\n"
+"Przy pierwszym uruchomieniu Info zaczyna siê od tego wêz³a.\n"
+"\n"
+"%s\tOto wierzcho³ek drzewa INFO\n"
+"\n"
+" To (wêze³ Katalog) zawiera menu dla g³ównych tematów.\n"
+" Naci¶niêcie \"q\" koñczy przegl±danie, \"?\" wy¶wietla wszystkie "
+"polecenia\n"
+" Info, \"d\" wraca tutaj, \"h\" pokazuje wprowadzenie dla nowicjuszy,\n"
+" \"mEmacs<Return>\" odwiedza podrêcznik Emacsa itd.\n"
+"\n"
+" W Emacsie mo¿na klikn±æ drugim przyciskiem myszy na elemencie menu lub\n"
+" odsy³aczu, aby go wybraæ.\n"
+"\n"
+"%s\n"
+
+#: install-info/install-info.c:622
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr "%s: nie mo¿na odczytaæ (%s) ani utworzyæ (%s)\n"
+
+#: install-info/install-info.c:715
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: pusty plik"
+
+#: install-info/install-info.c:1046 install-info/install-info.c:1086
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "START-INFO-DIR-ENTRY bez odpowiadaj±cego END-INFO-DIR-ENTRY"
+
+#: install-info/install-info.c:1081
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "END-INFO-DIR-ENTRY bez odpowiadaj±cego START-INFO-DIR-ENTRY"
+
+#: install-info/install-info.c:1946 install-info/install-info.c:1956
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr "%s: plik katalogu ju¿ istnieje: %s\n"
+
+#: install-info/install-info.c:2036
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: Nale¿y podaæ plik Info tylko raz.\n"
+
+#: install-info/install-info.c:2069
+#, c-format
+msgid "Extra regular expression specified, ignoring `%s'"
+msgstr "Podano dodatkowe wyra¿enie regularne, zignorowano `%s'"
+
+#: install-info/install-info.c:2081
+#, c-format
+msgid "Error in regular expression `%s': %s"
+msgstr "B³±d w wyra¿eniu regularnym `%s': %s"
+
+#: install-info/install-info.c:2139
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "nadmiarowy argument linii poleceñ `%s'"
+
+#: install-info/install-info.c:2143
+msgid "No input file specified; try --help for more information."
+msgstr "Nie podano pliku wej¶ciowego; --help mo¿e podaæ wiêcej informacji."
+
+#: install-info/install-info.c:2146
+msgid "No dir file specified; try --help for more information."
+msgstr "Nie podano pliku katalogu; --help mo¿e podaæ wiêcej informacji."
+
+#: install-info/install-info.c:2288
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "brak wpisu do katalogu info w `%s'"
+
+#: install-info/install-info.c:2536
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "nie znaleziono wpisów dla `%s'; nic nie usuniêto"
+
+#: lib/xexit.c:54
+msgid "ferror on stdout\n"
+msgstr "ferror dla standardowego wyj¶cia\n"
+
+#: lib/xexit.c:59
+msgid "fflush error on stdout\n"
+msgstr "b³±d fflush dla standardowego wyj¶cia\n"
+
+#: makeinfo/cmds.c:582 makeinfo/cmds.c:604
+#, c-format
+msgid "arguments to @%s ignored"
+msgstr "zignorowano argumenty dla @%s"
+
+#: makeinfo/cmds.c:779
+msgid "January"
+msgstr "stycznia"
+
+#: makeinfo/cmds.c:779
+msgid "February"
+msgstr "lutego"
+
+#: makeinfo/cmds.c:779
+msgid "March"
+msgstr "marca"
+
+#: makeinfo/cmds.c:779
+msgid "April"
+msgstr "kwietnia"
+
+#: makeinfo/cmds.c:779
+msgid "May"
+msgstr "maja"
+
+#: makeinfo/cmds.c:780
+msgid "June"
+msgstr "czerwca"
+
+#: makeinfo/cmds.c:780
+msgid "July"
+msgstr "lipca"
+
+#: makeinfo/cmds.c:780
+msgid "August"
+msgstr "sierpnia"
+
+#: makeinfo/cmds.c:780
+msgid "September"
+msgstr "wrze¶nia"
+
+#: makeinfo/cmds.c:780
+msgid "October"
+msgstr "pa¼dziernika"
+
+#: makeinfo/cmds.c:781
+msgid "November"
+msgstr "listopada"
+
+#: makeinfo/cmds.c:781
+msgid "December"
+msgstr "grudnia"
+
+#: makeinfo/cmds.c:1131
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "niechciany znak %c w @var"
+
+#: makeinfo/cmds.c:1174
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "argument @sc zawiera same wielkie litery, wiêc brak efektu"
+
+#: makeinfo/cmds.c:1229
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "oczekiwano `{', ale napotkano `%c'"
+
+#: makeinfo/cmds.c:1269
+msgid "end of file inside verb block"
+msgstr "koniec pliku wewn±trz bloku verb"
+
+#: makeinfo/cmds.c:1277
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "oczekiwano `}', ale napotkano `%c'"
+
+#: makeinfo/cmds.c:1308
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+"@string{Note...} tworzy nieprawdziwe odniesienia w Info; nale¿y "
+"przeredagowaæ aby zapobiec temu"
+
+#: makeinfo/cmds.c:1504
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s jest przestarza³e"
+
+#: makeinfo/cmds.c:1612
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "@sp wymaga argumentu bêd±cego liczb± dodatni±, a nie `%s'"
+
+#: makeinfo/cmds.c:2023 makeinfo/footnote.c:81
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "Z³y argument dla %c%s"
+
+#: makeinfo/cmds.c:2033 makeinfo/makeinfo.c:4317
+msgid "asis"
+msgstr "zachowaj"
+
+#: makeinfo/cmds.c:2035 makeinfo/cmds.c:2065 makeinfo/makeinfo.c:4319
+msgid "none"
+msgstr "brak"
+
+#: makeinfo/cmds.c:2049
+#, c-format
+msgid "Bad argument to @%s"
+msgstr "Z³y argument dla @%s"
+
+#: makeinfo/cmds.c:2063
+msgid "insert"
+msgstr "wstaw"
+
+#: makeinfo/cmds.c:2079
+#, c-format
+msgid "Bad argument to @%s: %s"
+msgstr "Z³y argument dla @%s: %s"
+
+#: makeinfo/cmds.c:2162
+#, c-format
+msgid "Expected @%s on or off, not `%s'"
+msgstr "Oczekiwano @%s on lub off, a nie `%s'"
+
+#: makeinfo/cmds.c:2182
+#, c-format
+msgid "Only @%s 10 or 11 is supported, not `%s'"
+msgstr "Obs³ugiwane s± tylko @%s 10 lub 11, a nie `%s'"
+
+#: makeinfo/defun.c:83
+msgid "Missing `}' in @def arg"
+msgstr "Brakuje `}' w argumencie @def"
+
+#: makeinfo/defun.c:711
+#, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr "Trzeba byæ w ¶rodowisku `@%s', aby u¿yæ `@%s'"
+
+#: makeinfo/files.c:434
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:637
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr "Pominiêto `%s' przed nazw± pliku wyj¶ciowego"
+
+#: makeinfo/files.c:645
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr "Pominiêto `%s' przy zapisie na standardowe wyj¶cie"
+
+#: makeinfo/files.c:693
+msgid "Output buffer not empty."
+msgstr "Bufor wyj¶ciowy niepusty."
+
+#: makeinfo/float.c:181
+#, c-format
+msgid "Requested float type `%s' not previously used"
+msgstr "¯±dany rodzaj ¶rodowiska float `%s' nie by³ wcze¶niej u¿yty"
+
+#: makeinfo/float.c:376 makeinfo/float.c:382 makeinfo/index.c:959
+#: makeinfo/index.c:965
+msgid "See "
+msgstr "Patrz "
+
+#: makeinfo/footnote.c:149
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "`%c%s' wymaga argumentu `{...}', a nie tylko `%s'"
+
+#: makeinfo/footnote.c:164
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "Nie zamkniêty nawias dla przypisu `%s'"
+
+#: makeinfo/footnote.c:197
+msgid "Footnote defined without parent node"
+msgstr "Zdefiniowano przypis bez wêz³a nadrzêdnego"
+
+#: makeinfo/footnote.c:209
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "Przypisy wewn±trz przypisów nie s± dozwolone"
+
+#: makeinfo/footnote.c:301 makeinfo/index.c:187
+msgid "Footnotes"
+msgstr "Przypisy"
+
+#: makeinfo/html.c:91
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr "%s: nie mo¿na otworzyæ pliku css: %s"
+
+#: makeinfo/html.c:180
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr "%s:%d: plik css zakoñczy³ siê wewn±trz komentarza"
+
+#: makeinfo/html.c:426
+msgid "[unexpected] no html tag to pop"
+msgstr "[nieoczekiwane] brak znacznika html do zdjêcia"
+
+#: makeinfo/html.c:800
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "[nieoczekiwane] b³êdna nazwa wêz³a: `%s'"
+
+#: makeinfo/index.c:167
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "Nieznany indeks `%s'"
+
+#: makeinfo/index.c:232
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr "Info nie mo¿e obs³u¿yæ `:' we wpisie indeksu `%s'"
+
+#: makeinfo/index.c:410
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "Indeks `%s' ju¿ istnieje"
+
+#: makeinfo/index.c:453
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "Nieznany indeks `%s' i/lub `%s' w @synindex"
+
+#: makeinfo/index.c:676
+msgid "(line )"
+msgstr "(linia )"
+
+#: makeinfo/index.c:684
+#, c-format
+msgid "(line %*d)"
+msgstr "(linia %*d)"
+
+#: makeinfo/index.c:765
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "Nieznany indeks `%s' w @printindex"
+
+#: makeinfo/index.c:834
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "Wpis dla indeksu `%s' poza jakimkolwiek wêz³em"
+
+#: makeinfo/index.c:837 makeinfo/index.c:873
+msgid "(outside of any node)"
+msgstr "(poza jakimkolwiek wêz³em)"
+
+#: makeinfo/insertion.c:161
+msgid "@item not allowed in argument to @itemize"
+msgstr "@item nie jest dozwolone w argumencie @itemize"
+
+#: makeinfo/insertion.c:242
+msgid "Broken-Type in insertion_type_pname"
+msgstr "Broken-Type w insertion_type_pname"
+
+#: makeinfo/insertion.c:338
+msgid "Enumeration stack overflow"
+msgstr "Przepe³nienie stosu numerowania"
+
+#: makeinfo/insertion.c:370
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "przepe³nienie, restart od %c"
+
+#: makeinfo/insertion.c:639
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s wymaga argumentu: formatowania dla %citem"
+
+#: makeinfo/insertion.c:727
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr "¦rodowiska %cfloat nie mog± byæ zagnie¿d¿one"
+
+#: makeinfo/insertion.c:981
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "`@end' oczekiwa³o `%s', ale napotkano `%s'"
+
+#: makeinfo/insertion.c:1349
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "Brak pasuj±cego `%cend %s'"
+
+#: makeinfo/insertion.c:1618
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s wymaga litery lub cyfry"
+
+#: makeinfo/insertion.c:1718
+msgid "end of file inside verbatim block"
+msgstr "koniec pliku wewn±trz bloku dos³ownego"
+
+#: makeinfo/insertion.c:1942
+#, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "@%s nic nie znaczy poza ¶rodowiskiem `@float'"
+
+#: makeinfo/insertion.c:1978
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "napotkano @menu przed pierwszym @node, tworzenie wêz³a `Top'"
+
+#: makeinfo/insertion.c:1979
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr "mo¿e wêze³ @top powinien byæ otoczony @ifnottex, a nie @ifinfo?"
+
+#: makeinfo/insertion.c:1991
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "napotkano @detailmenu przed pierwszym wêz³em, tworzenie wêz³a `Top'"
+
+#: makeinfo/insertion.c:2047
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr "@%s nic nie znaczy poza ¶rodowiskami `@titlepage' i `@quotation'"
+
+#: makeinfo/insertion.c:2061
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "@%s nic nie znaczy poza ¶rodowiskiem `@titlepage'"
+
+#: makeinfo/insertion.c:2092
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "Niedopasowane `%c%s'"
+
+#: makeinfo/insertion.c:2097
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "`%c%s' wymaga czego¶ po sobie"
+
+#: makeinfo/insertion.c:2103
+#, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "Z³y argument `%s' dla `@%s', u¿ycie `%s'"
+
+#: makeinfo/insertion.c:2200
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "@%s nic nie znaczy wewn±trz bloku `@%s'"
+
+#: makeinfo/insertion.c:2209
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "@itemx nic nie znaczy wewn±trz bloku `%s'"
+
+#: makeinfo/insertion.c:2383
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "znaleziono %c%s na zewn±trz bloku wstawki"
+
+#: makeinfo/lang.c:1218
+#, c-format
+msgid "no default territory known for language `%s'"
+msgstr "nieznane domy¶lne terytorium dla jêzyka `%s'"
+
+#: makeinfo/lang.c:1281
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr "%s nie jest poprawnym kodem jêzyka zgodnym z ISO 639"
+
+#: makeinfo/lang.c:1399
+#, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "nierozpoznana nazwa kodowania `%s'"
+
+#: makeinfo/lang.c:1407
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "niestety kodowanie `%s' nie jest obs³ugiwane"
+
+#: makeinfo/lang.c:1492
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "b³êdnie zakodowany znak `%s'"
+
+#: makeinfo/lang.c:1800
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr "%c%s oczekuje `i' lub `j' jako argumentu, a nie `%c'"
+
+#: makeinfo/lang.c:1804
+#, c-format
+msgid "%c%s expects a single character `i' or `j' as argument"
+msgstr "%c%s oczekuje pojedynczego znaku `i' lub `j' jako argumentu"
+
+#: makeinfo/macro.c:128
+#, c-format
+msgid "macro `%s' previously defined"
+msgstr "makro `%s' ju¿ zosta³o zdefiniowane"
+
+#: makeinfo/macro.c:132
+#, c-format
+msgid "here is the previous definition of `%s'"
+msgstr "oto poprzednia definicja `%s'"
+
+#: makeinfo/macro.c:359
+#, c-format
+msgid "\\ in macro expansion followed by `%s' instead of parameter name"
+msgstr "po \\ w rozwiniêciu makra wystêpuje `%s' zamiast nazwy parametru"
+
+#: makeinfo/macro.c:401
+#, c-format
+msgid "Macro `%s' called on line %d with too many args"
+msgstr "Makro `%s' wywo³ane w linii %d ze zbyt du¿± liczb± argumentów"
+
+#: makeinfo/macro.c:580
+#, c-format
+msgid "%cend macro not found"
+msgstr "nie znaleziono makra %cend"
+
+#: makeinfo/macro.c:591
+msgid "@allow-recursion is deprecated; please use @rmacro instead"
+msgstr "@allow-recursion jest przestarza³e; proszê u¿ywaæ zamiast tego @rmacro"
+
+#: makeinfo/macro.c:606
+msgid "@quote-arg is deprecated; arguments are quoted by default"
+msgstr "@quote-arg jest przestarza³e; argumenty s± domy¶lnie cytowane"
+
+#: makeinfo/macro.c:649
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "niedopasowane @end %s do @%s"
+
+#: makeinfo/makeinfo.c:188
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "Zbyt du¿o b³êdów! Poddajê siê.\n"
+
+#: makeinfo/makeinfo.c:306
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: uwaga: "
+
+#: makeinfo/makeinfo.c:325 makeinfo/makeinfo.c:2340
+#, c-format
+msgid "Misplaced %c"
+msgstr "¬le umieszczone %c"
+
+#: makeinfo/makeinfo.c:344
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Polecenie `%s --help' poda wiêcej informacji.\n"
+
+#: makeinfo/makeinfo.c:347
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "Sk³adnia: %s [OPCJA]... PLIK-TEXINFO...\n"
+
+#: makeinfo/makeinfo.c:350
+msgid ""
+"Translate Texinfo source documentation to various other formats, by default\n"
+"Info files suitable for reading online with Emacs or standalone GNU Info.\n"
+msgstr ""
+"T³umaczenie ¼ród³owej dokumentacji Texinfo do ró¿nych innych formatów,\n"
+"domy¶lnie plików Info nadaj±cych siê do czytania pod Emacsem lub "
+"samodzielnym\n"
+"GNU Info.\n"
+
+#: makeinfo/makeinfo.c:354
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\n"
+" --document-language=STR locale to use in translating Texinfo keywords\n"
+" for the output document (default C).\n"
+" --force preserve output even if errors.\n"
+" --help display this help and exit.\n"
+" --no-validate suppress node cross-reference validation.\n"
+" --no-warn suppress warnings (but not errors).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"Opcje ogólne:\n"
+" --error-limit=ILE zakoñczenie po ILU b³êdach (domy¶lnie %d).\n"
+" --document-language=£AÑC lokalizacja u¿ywana przy t³umaczeniu s³ów\n"
+" kluczowych Texinfo dla dokumentu "
+"wyj¶ciowego\n"
+" (domy¶lnie C).\n"
+" --force zachowanie wyj¶cia nawet w przypadku b³êdów.\n"
+" --help wy¶wietlenie tego opisu i zakoñczenie.\n"
+" --no-validate pominiêcie kontroli odsy³aczy miêdzy wêz³ami.\n"
+" --no-warn pominiêcie ostrze¿eñ (ale nie b³êdów).\n"
+" -v, --verbose wyja¶nianie co siê dzieje.\n"
+" --version wy¶wietlenie informacji o wersji i "
+"zakoñczenie.\n"
+
+#: makeinfo/makeinfo.c:369
+#, no-wrap
+msgid ""
+"Output format selection (default is to produce Info):\n"
+" --docbook output Docbook XML rather than Info.\n"
+" --html output HTML rather than Info.\n"
+" --xml output Texinfo XML rather than Info.\n"
+" --plaintext output plain text rather than Info.\n"
+msgstr ""
+"Wybór formatu wyj¶ciowego (domy¶lnym jest info):\n"
+" --docbook wyprodukowanie DocBook XML zamiast Info.\n"
+" --html wyprodukowanie HTML zamiast Info.\n"
+" --xml wyprodukowanie Texinfo XML zamiast Info.\n"
+" --plaintext wyprodukowanie czystego tekstu zamiast Info.\n"
+
+#: makeinfo/makeinfo.c:377
+msgid ""
+"General output options:\n"
+" -E, --macro-expand=FILE output macro-expanded source to FILE,\n"
+" ignoring any @setfilename.\n"
+" --no-headers suppress node separators, Node: lines, and "
+"menus\n"
+" from Info output (thus producing plain "
+"text)\n"
+" or from HTML (thus producing shorter "
+"output);\n"
+" also, write to standard output by default.\n"
+" --no-split suppress the splitting of Info or HTML "
+"output,\n"
+" generate only one output file.\n"
+" --number-sections output chapter and sectioning numbers.\n"
+" -o, --output=FILE output to FILE (or directory if split HTML).\n"
+msgstr ""
+"Ogólne opcje dotycz±ce wyj¶cia:\n"
+" -E, --macro-expand=PLIK zapis ¼róde³ z rozwiniêtymi makrami do PLIKU.\n"
+" --no-headers pominiêcie separatorów wêz³ów, linii Node "
+"oraz\n"
+" menu z wyj¶cia Info (zapisanie czystego "
+"tekstu)\n"
+" lub z HTML (zapisanie krótszego pliku);\n"
+" tak¿e pisanie domy¶lnie na standardowe "
+"wyj¶cie.\n"
+" --no-split pominiêcie dzielenia Info lub HTML, "
+"generowanie\n"
+" tylko jednego pliku wyj¶ciowego.\n"
+" --number-sections zapisywanie numerów rozdzia³ów i sekcji.\n"
+" -o, --output=PLIK zapisanie do PLIKU (lub katalogu w przypadku\n"
+" dzielonego HTML),\n"
+
+#: makeinfo/makeinfo.c:391
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --disable-encoding do not output accented and special characters\n"
+" in Info output based on @documentencoding.\n"
+" --enable-encoding override --disable-encoding (default).\n"
+" --fill-column=NUM break Info lines at NUM characters (default %"
+"d).\n"
+" --footnote-style=STYLE output footnotes in Info according to STYLE:\n"
+" `separate' to put them in their own node;\n"
+" `end' to put them at the end of the node, "
+"in\n"
+" which they are defined (this is the "
+"default).\n"
+" --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %"
+"d).\n"
+" If VAL is `none', do not indent; if VAL is\n"
+" `asis', preserve existing indentation.\n"
+" --split-size=NUM split Info files at size NUM (default %d).\n"
+msgstr ""
+"Opcje dla Info i czystego tekstu:\n"
+" --disable-encoding bez zapisu znaków z akcentami i specjalnych "
+"do\n"
+" pliku Info w zale¿no¶ci od "
+"@documentencoding.\n"
+" --fill-column=ILE ³amanie linii Info po ILU znakach (domy¶lnie %"
+"d).\n"
+" --footnote-style=STYL zapis stopek w Info zgodnie ze STYLEM:\n"
+" `separate' - umieszczenie ich we w³asnym "
+"wê¼le;\n"
+" `end' - umieszczenie na koñcu wêz³a, w "
+"którym\n"
+" zosta³y zdefiniowane (domy¶lne).\n"
+" --paragraph-indent=ILE wciêcia akapitów Info o ILE spacji (domy¶lnie %"
+"d).\n"
+" Je¶li ILE to `none' lub `brak', bez wciêæ;\n"
+" je¶li ILE to `asis' lub `zachowaj', "
+"zachowanie\n"
+" istniej±cych wciêæ.\n"
+" --split-size=ROZMIAR podzia³ Info na pliki o ROZMIARZE (domy¶lnie %"
+"d).\n"
+
+#: makeinfo/makeinfo.c:409
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+" --css-ref=URL generate reference to a CSS file.\n"
+" --internal-links=FILE produce list of internal links in FILE.\n"
+" --transliterate-file-names\n"
+" produce file names in ASCII transliteration.\n"
+msgstr ""
+"Opcje dla HTML:\n"
+" --css-include=PLIK do³±czenie PLIKU w wyj¶ciu HTML <style>;\n"
+" je¶li PLIK to -, czytane jest standardowe\n"
+" wej¶cie\n"
+" --css-ref=URL wygenerowanie odniesienia do pliku CSS.\n"
+" --internal-links=PLIK zapisanie listy wewnêtrznych odno¶ników do "
+"PLIKU.\n"
+" --transliterate-file-names\n"
+" tworzenie nazw plików w transliteracji ASCII.\n"
+
+#: makeinfo/makeinfo.c:419
+#, c-format
+msgid ""
+"Options for XML and Docbook:\n"
+" --output-indent=VAL indent XML elements by VAL spaces (default %"
+"d).\n"
+" If VAL is 0, ignorable whitespace is "
+"dropped.\n"
+msgstr ""
+"Opcje dla XML i Docbooka:\n"
+" --output-indent=ILE wciêcia elementów XML o ILE spacji (domy¶lnie\n"
+" %d). Je¶li ILE jest 0, pomijalne spacje s±\n"
+" usuwane.\n"
+
+#: makeinfo/makeinfo.c:426
+msgid ""
+"Input file options:\n"
+" --commands-in-node-names allow @ commands in node names.\n"
+" -D VAR define the variable VAR, as with @set.\n"
+" -I DIR append DIR to the @include search path.\n"
+" -P DIR prepend DIR to the @include search path.\n"
+" -U VAR undefine the variable VAR, as with @clear.\n"
+msgstr ""
+"Opcje dla pliku wej¶ciowego:\n"
+" --commands-in-node-names dopuszczenie poleceñ @ w nazwach wêz³ów.\n"
+" -D ZMIENNA zdefiniowanie ZMIENNEJ, tak jak przez @set.\n"
+" -I KATALOG do³±czenie KATALOGU na pocz±tku ¶cie¿ki\n"
+" poszukiwañ dla @include.\n"
+" -P KATALOG do³±czenie KATALOGU na koñcu ¶cie¿ki\n"
+" poszukiwañ dla @include.\n"
+" -U ZMIENNA usuniêcie definicji ZMIENNEJ, tak jak "
+"@clear.\n"
+
+#: makeinfo/makeinfo.c:435
+msgid ""
+"Conditional processing in input:\n"
+" --ifdocbook process @ifdocbook and @docbook even if\n"
+" not generating Docbook.\n"
+" --ifhtml process @ifhtml and @html even if not generating HTML.\n"
+" --ifinfo process @ifinfo even if not generating Info.\n"
+" --ifplaintext process @ifplaintext even if not generating plain text.\n"
+" --iftex process @iftex and @tex; implies --no-split.\n"
+" --ifxml process @ifxml and @xml.\n"
+" --no-ifdocbook do not process @ifdocbook and @docbook text.\n"
+" --no-ifhtml do not process @ifhtml and @html text.\n"
+" --no-ifinfo do not process @ifinfo text.\n"
+" --no-ifplaintext do not process @ifplaintext text.\n"
+" --no-iftex do not process @iftex and @tex text.\n"
+" --no-ifxml do not process @ifxml and @xml text.\n"
+"\n"
+" Also, for the --no-ifFORMAT options, do process @ifnotFORMAT text.\n"
+msgstr ""
+"Warunkowe przetwarzanie wej¶cia:\n"
+" --ifdocbook przetwarzanie @ifdocbook i @docbook nawet je¶li nie "
+"jest\n"
+" generowany Docbook.\n"
+" --ifhtml przetwarzanie @ifhtml i @html nawet je¶li nie jest\n"
+" generowany HTML.\n"
+" --ifinfo przetwarzanie @ifinfo nawet je¶li nie jest generowane "
+"Info.\n"
+" --ifplaintext przetwarzanie @ifplaintext nawet je¶li nie jest "
+"generowany\n"
+" czysty tekst.\n"
+" --iftex przetwarzanie @iftex i @tex; wymusza --no-split.\n"
+" --ifxml przetwarzanie @ifxml i @xml.\n"
+" --no-ifdocbook nie przetwarzanie tekstu @ifdocbook i @docbook.\n"
+" --no-ifhtml nie przetwarzanie tekstu @ifhtml i @html.\n"
+" --no-ifinfo nie przetwarzanie tekstu @ifinfo.\n"
+" --no-ifplaintext nie przetwarzanie tekstu @ifplaintext.\n"
+" --no-iftex nie przetwarzanie tekstu @iftex i @tex.\n"
+" --no-ifxml nie przetwarzanie tekstu @ifxml i @xml.\n"
+"\n"
+" Ponadto opcje --no-ifFORMAT powoduj± przetwarzanie tekstu @ifnotFORMAT.\n"
+
+#: makeinfo/makeinfo.c:454
+msgid ""
+" The defaults for the @if... conditionals depend on the output format:\n"
+" if generating HTML, --ifhtml is on and the others are off;\n"
+" if generating Info, --ifinfo is on and the others are off;\n"
+" if generating plain text, --ifplaintext is on and the others are off;\n"
+" if generating XML, --ifxml is on and the others are off.\n"
+msgstr ""
+" Domy¶lne opcje dla warunków @if... zale¿± od formatu wyj¶ciowego:\n"
+" je¶li generowany jest HTML, --ifhtml jest w³±czone, a reszta wy³±czona;\n"
+" je¶li generowane jest Info, --ifinfo jest w³±czone, a reszta wy³±czona;\n"
+" je¶li generowany jest tekst, --ifplaintext jest w³±czony, a inne "
+"wy³±czone;\n"
+" je¶li generowany jest XML, --ifxml jest w³±czone, a reszta wy³±czona.\n"
+
+#: makeinfo/makeinfo.c:462
+msgid ""
+"Examples:\n"
+" makeinfo foo.texi write Info to foo's @setfilename\n"
+" makeinfo --html foo.texi write HTML to @setfilename\n"
+" makeinfo --xml foo.texi write Texinfo XML to @setfilename\n"
+" makeinfo --docbook foo.texi write DocBook XML to @setfilename\n"
+" makeinfo --no-headers foo.texi write plain text to standard "
+"output\n"
+"\n"
+" makeinfo --html --no-headers foo.texi write html without node lines, "
+"menus\n"
+" makeinfo --number-sections foo.texi write Info with numbered sections\n"
+" makeinfo --no-split foo.texi write one Info file however big\n"
+msgstr ""
+"Przyk³ady:\n"
+" makeinfo foo.texi zapisanie Info do @setfilename z "
+"foo\n"
+" makeinfo --html foo.texi zapisanie HTML do @setfilename\n"
+" makeinfo --xml foo.texi zapisanie Texinfo XML do "
+"@setfilename\n"
+" makeinfo --docbook foo.texi zapisanie DocBook XML do "
+"@setfilename\n"
+" makeinfo --no-headers foo.texi zapisanie czystego tekstu na\n"
+" standardowe wyj¶cie\n"
+"\n"
+" makeinfo --html --no-headers foo.texi zapisanie HTML bez linii wêz³ów i "
+"menu\n"
+" makeinfo --number-sections foo.texi zapisanie Info z numerowanymi "
+"sekcjami\n"
+" makeinfo --no-split foo.texi zapisanie jednego wielkiego pliku "
+"Info\n"
+
+#: makeinfo/makeinfo.c:622
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr "%s: Zignorowano nierozpoznan± warto¶æ TEXINFO_OUTPUT_FORMAT `%s'.\n"
+
+#: makeinfo/makeinfo.c:670 makeinfo/makeinfo.c:696 makeinfo/makeinfo.c:720
+#: makeinfo/makeinfo.c:780
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr "%s: argument %s musi byæ liczb±, a nie `%s'.\n"
+
+#: makeinfo/makeinfo.c:683
+#, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "%s: nie mo¿na otworzyæ wyj¶cia `%s' do zapisu rozwiniêæ makr"
+
+#: makeinfo/makeinfo.c:688
+#, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "%s: zignorowano drugie wyj¶cie `%s' do zapisu rozwiniêæ makr.\n"
+
+#: makeinfo/makeinfo.c:733
+#, c-format
+msgid "%s: could not open internal links output `%s'"
+msgstr "%s: nie mo¿na otworzyæ wyj¶cia wewnêtrznych odno¶ników `%s'"
+
+#: makeinfo/makeinfo.c:738
+#, c-format
+msgid "%s: ignoring second internal links output `%s'.\n"
+msgstr "%s: zignorowano drugie wyj¶cie wewnêtrznych odno¶ników `%s'.\n"
+
+#: makeinfo/makeinfo.c:751
+#, c-format
+msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
+msgstr ""
+"%s: argument --paragraph-indent musi byæ liczb±/`none'/`asis', a nie `%s'.\n"
+
+#: makeinfo/makeinfo.c:769
+#, c-format
+msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
+msgstr ""
+"%s: argumentem --footnote-style musi byæ `separate' lub `end', a nie `%s'.\n"
+
+#: makeinfo/makeinfo.c:844
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: brakuj±cy argument plikowy.\n"
+
+#: makeinfo/makeinfo.c:1041 makeinfo/makeinfo.c:4166
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr "Niew³a¶ciwie u¿yte wieloliniowe polecenie %c%s"
+
+#: makeinfo/makeinfo.c:1044
+#, c-format
+msgid "Expected `%s'"
+msgstr "Oczekiwano `%s'"
+
+#: makeinfo/makeinfo.c:1521
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "Nie mo¿na utworzyæ katalogu `%s': %s"
+
+#: makeinfo/makeinfo.c:1567
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "Nie znaleziono `%s' w `%s'"
+
+#: makeinfo/makeinfo.c:1647
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr ""
+"%s: nie zapisywanie rozwiniêæ makr na stdout, bo tam zapisywane jest Info.\n"
+
+#: makeinfo/makeinfo.c:1677
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "Tworzenie pliku %s `%s' z `%s'.\n"
+
+#: makeinfo/makeinfo.c:1744
+#, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: Usuwanie pliku wyj¶cia makr `%s' z powodu b³êdów; --force pozwoli go "
+"zachowaæ.\n"
+
+#: makeinfo/makeinfo.c:1799
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: Usuwanie pliku wyj¶ciowego `%s' z powodu b³êdów; --force pozwoli go "
+"zachowaæ.\n"
+
+#: makeinfo/makeinfo.c:1818
+#, c-format
+msgid ""
+"%s: Removing internal links output file `%s' due to errors; use --force to "
+"preserve.\n"
+msgstr ""
+"%s: Usuwanie pliku wyj¶ciowego wewnêtrznych odno¶ników `%s' z powodu b³êdów; "
+"--force pozwoli go zachowaæ.\n"
+
+#: makeinfo/makeinfo.c:2113
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "Nieznane polecenie `%s'"
+
+#: makeinfo/makeinfo.c:2135
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr ""
+"Nale¿y u¿yæ nawiasów klamrowych, aby podaæ polecenie jako argument dla @%s"
+
+#: makeinfo/makeinfo.c:2394
+#, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s oczekiwa³o nawiasów klamrowych"
+
+#: makeinfo/makeinfo.c:2407
+msgid "Unmatched }"
+msgstr "Niedopasowany }"
+
+#: makeinfo/makeinfo.c:2455
+msgid "NO_NAME!"
+msgstr "BEZ_NAZWY!"
+
+#: makeinfo/makeinfo.c:2476
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "w %c%s brakuje klamry zamykaj±cej"
+
+#: makeinfo/makeinfo.c:3482
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "Plik @image `%s' (dla HTML) nieczytelny: %s"
+
+#: makeinfo/makeinfo.c:3488
+#, c-format
+msgid "No such file `%s'"
+msgstr "Nie ma pliku `%s'"
+
+#: makeinfo/makeinfo.c:3624
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "Plik @image `%s' (dla tekstu) nieczytelny: %s"
+
+#: makeinfo/makeinfo.c:3633
+msgid "@image missing filename argument"
+msgstr "Po @image brakuje argumentu plikowego"
+
+#: makeinfo/makeinfo.c:3851
+#, c-format
+msgid "undefined flag: %s"
+msgstr "niezdefiniowana flaga: %s"
+
+#: makeinfo/makeinfo.c:3852
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{Brak warto¶ci dla `%s'}"
+
+#: makeinfo/makeinfo.c:3904
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s wymaga nazwy"
+
+#: makeinfo/makeinfo.c:4010
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "Osi±gniêto koniec pliku przed znalezieniem @end %s"
+
+#: makeinfo/makeinfo.c:4258
+#, c-format
+msgid "`%.40s...' is too long for expansion; not expanded"
+msgstr "`%.40s...' jest zbyt d³ugie do rozwiniêcia; nie rozwiniêto"
+
+#: makeinfo/multi.c:116
+msgid "Missing } in @multitable template"
+msgstr "Brakuj±cy } we wzorcu @multitable"
+
+#: makeinfo/multi.c:260
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "zignorowano zab³±kany tekst `%s' po @multitable"
+
+#: makeinfo/multi.c:400
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "Zbyt du¿o kolumn w elemencie multitable (maksymalnie %d)"
+
+#: makeinfo/multi.c:563
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "[nieoczekiwane] nie mo¿na wybraæ kolumny #%d w multitable"
+
+#: makeinfo/multi.c:592
+msgid "ignoring @tab outside of multitable"
+msgstr "zignorowano @tab poza multitable"
+
+#: makeinfo/multi.c:640
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** Wielokolumnowe wyj¶cie z ostatniego wiersza:\n"
+
+#: makeinfo/multi.c:643
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* kolumna #%d: wyj¶cie = %s\n"
+
+#: makeinfo/node.c:279
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "Wêze³ `%s' poprzednio zdefiniowany w linii %d"
+
+#: makeinfo/node.c:647
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "Formatowanie wêz³a %s...\n"
+
+#: makeinfo/node.c:714
+#, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr "Wêze³ `%s' wymaga polecenia wybieraj±cego (np. %c%s)"
+
+#: makeinfo/node.c:878
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "Nie podano nazwy wêz³a dla polecenia `%c%s'"
+
+#: makeinfo/node.c:919 makeinfo/node.c:1163
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr "Znacznik `%s' i wêze³ `%s' odwzorowuj± siê na t± sam± nazwê pliku"
+
+#: makeinfo/node.c:922
+msgid "This @anchor command ignored; references to it will not work"
+msgstr "Zignorowano to polecenie @anchor; wskazania na nie nie bêd± dzia³a³y"
+
+#: makeinfo/node.c:924 makeinfo/node.c:1166
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr "Nale¿y zmieniæ ten znacznik lub u¿yæ opcji `--no-split'"
+
+#: makeinfo/node.c:954
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr "Nieoczekiwany ³añcuch na koñcu pliku dzielonego HTML `%s'"
+
+#: makeinfo/node.c:1160
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr "Znaczniki `%s' i `%s' odwzorowuj± siê na t± sam± nazwê pliku"
+
+#: makeinfo/node.c:1165
+msgid "@anchor command ignored; references to it will not work"
+msgstr "zignorowano polecenie @anchor; wskazania na nie nie bêd± dzia³a³y"
+
+#: makeinfo/node.c:1362
+#, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr ""
+"%s wskazuje na nieistniej±cy wêze³ `%s' (mo¿e b³êdny podzia³ na sekcje?)"
+
+#: makeinfo/node.c:1462
+#, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr ""
+"Pole Nastêpny wêz³a `%s' nie wskazywane (mo¿e b³êdny podzia³ na sekcje?)"
+
+#: makeinfo/node.c:1465
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "Ten wêze³ (%s) ma z³e pole Poprzedni"
+
+#: makeinfo/node.c:1520
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "Pole Poprzedni wêz³a `%s' nie wskazywane"
+
+#: makeinfo/node.c:1524
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "Ten wêze³ (%s) ma z³e pole Nastêpny"
+
+#: makeinfo/node.c:1536
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr "`%s' nie ma pola W górê (mo¿e b³êdny podzia³ na sekcje?)"
+
+#: makeinfo/node.c:1605
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr ""
+"Wêze³ `%s' nie ma elementu menu dla `%s' pomimo bycia jego celem W górê"
+
+#: makeinfo/node.c:1637
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "nie wskazywany wêze³ `%s'"
+
+#: makeinfo/node.c:1727
+#, c-format
+msgid "Removing %s\n"
+msgstr "Usuwanie %s\n"
+
+#: makeinfo/node.c:1731
+#, c-format
+msgid "Can't remove file `%s': %s"
+msgstr "Nie mo¿na usun±æ pliku `%s': %s"
+
+#: makeinfo/sectioning.c:122
+#, c-format
+msgid "Appendix %c"
+msgstr "Za³±cznik %c"
+
+#: makeinfo/sectioning.c:467
+#, c-format
+msgid "Internal error (search_sectioning) `%s'!"
+msgstr "B³±d wewnêtrzny (search_sectioning) `%s'!"
+
+#: makeinfo/sectioning.c:563
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "B³±d wewnêtrzny (search_sectioning) \"%s\"!"
+
+#: makeinfo/sectioning.c:624
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "%c%s jest przestarza³e; nale¿y u¿yæ %c%s"
+
+#: makeinfo/sectioning.c:640
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "Wêze³ z %ctop jako sekcj± ju¿ istnieje"
+
+#: makeinfo/sectioning.c:648
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "Tutaj jest wêze³ %ctop"
+
+#: makeinfo/sectioning.c:664
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "%ctop u¿yty przed %cnode, u¿ycie domy¶lnego %s"
+
+#: makeinfo/xml.c:1669
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "Plik @image `%s' nieczytelny: %s"
+
+#: makeinfo/xml.c:2014
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+"@headitem jako ostatni element @multitable tworzy niepoprawne dokumenty "
+"Docbook"
+
+#: makeinfo/xml.c:2150
+msgid "of"
+msgstr "typu"
+
+#: makeinfo/xml.c:2155
+msgid "on"
+msgstr "na"
+
+#: makeinfo/xref.c:127
+msgid "First argument to cross-reference may not be empty"
+msgstr "Pierwszy argument odsy³acza nie mo¿e byæ pusty"
+
+#: makeinfo/xref.c:252
+#, c-format
+msgid "Empty file name for HTML cross reference in `%s'"
+msgstr "Pusta nazwa pliku dla odsy³acza HTML w `%s'"
+
+#: makeinfo/xref.c:387
+msgid "End of file reached while looking for `.' or `,'"
+msgstr "Osi±gniêto koniec pliku podczas szukania `.' lub `,'"
+
+#: makeinfo/xref.c:390
+#, c-format
+msgid "`.' or `,' must follow @%s, not `%c'"
+msgstr "Po @%s musi wyst±piæ `.' lub `,', a nie `%c'"
+
+#: makeinfo/xref.c:392
+msgid "for cross-references in parentheses, use @pxref"
+msgstr "dla odsy³aczy w nawiasach nale¿y u¿yæ @pxref"
+
+#: makeinfo/xref.c:435
+msgid "First argument to @inforef may not be empty"
+msgstr "Pierwszy argument @inforef nie mo¿e byæ pusty"
+
+#: util/texindex.c:223
+msgid "display this help and exit"
+msgstr "wy¶wietlenie tego opisu i zakoñczenie"
+
+#: util/texindex.c:225
+msgid "send output to FILE"
+msgstr "zapisanie wyj¶cia do PLIKU"
+
+#: util/texindex.c:227
+msgid "display version information and exit"
+msgstr "wy¶wietlenie informacji o wersji i zakoñczenie"
+
+#: util/texindex.c:237
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "Sk³adnia: %s [OPCJA]... PLIK...\n"
+
+#: util/texindex.c:238
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr ""
+"Generowanie posortowanego indeksu dla ka¿dego PLIKU wyj¶ciowego w TeXu.\n"
+
+#: util/texindex.c:241
+#, c-format
+msgid "Usually FILE... is specified as `foo.%c%c' for a document `foo.texi'.\n"
+msgstr ""
+"Zazwyczaj PLIK... podaje siê jako `foo.%c%c' dla dokumentu `foo.texi'.\n"
+
+#: util/texindex.c:243
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Opcje:\n"
+
+#: util/texindex.c:743
+#, c-format
+msgid "failure reopening %s"
+msgstr "b³±d podczas ponownego otwierania %s"
+
+#: util/texindex.c:758 util/texindex.c:786
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: nie jest plikiem indeksu texinfo"
+
+#: util/texindex.c:993
+#, c-format
+msgid "No page number in %s"
+msgstr "Brak numeru strony w %s"
+
+#: util/texindex.c:1066
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr "wpis %s wyst±pi³ po wpisie z dodatkow± nazw±"
diff --git a/po/quot.sed b/po/quot.sed
new file mode 100644
index 0000000..0122c46
--- /dev/null
+++ b/po/quot.sed
@@ -0,0 +1,6 @@
+s/"\([^"]*\)"/“\1â€/g
+s/`\([^`']*\)'/‘\1’/g
+s/ '\([^`']*\)' / ‘\1’ /g
+s/ '\([^`']*\)'$/ ‘\1’/g
+s/^'\([^`']*\)' /‘\1’ /g
+s/“â€/""/g
diff --git a/po/remove-potcdate.sin b/po/remove-potcdate.sin
new file mode 100644
index 0000000..2436c49
--- /dev/null
+++ b/po/remove-potcdate.sin
@@ -0,0 +1,19 @@
+# Sed script that remove the POT-Creation-Date line in the header entry
+# from a POT file.
+#
+# The distinction between the first and the following occurrences of the
+# pattern is achieved by looking at the hold space.
+/^"POT-Creation-Date: .*"$/{
+x
+# Test if the hold space is empty.
+s/P/P/
+ta
+# Yes it was empty. First occurrence. Remove the line.
+g
+d
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/po/ro.gmo b/po/ro.gmo
new file mode 100644
index 0000000..ddffa14
--- /dev/null
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
new file mode 100644
index 0000000..fc7a390
--- /dev/null
+++ b/po/ro.po
@@ -0,0 +1,3546 @@
+# Mesajele în limba românã pentru texinfo.
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# Acest fiºier este distribuit sub aceeaºi licenþã ca ºi pachetul texinfo.
+# Laurentiu Buzdugan <lbuz@rolix.org>, 2003, 2004, 2005.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo 4.7.94\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2008-09-18 20:38+0200\n"
+"PO-Revision-Date: 2005-05-03 12:00+05\n"
+"Last-Translator: Laurentiu Buzdugan <lbuz@rolix.org>\n"
+"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: gnulib/lib/error.c:125
+msgid "Unknown system error"
+msgstr ""
+
+#: gnulib/lib/getopt.c:526 gnulib/lib/getopt.c:542
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: opþiunea `%s' este ambiguã\n"
+
+#: gnulib/lib/getopt.c:575 gnulib/lib/getopt.c:579
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: opþiunea `--%s' nu permite un argument\n"
+
+#: gnulib/lib/getopt.c:588 gnulib/lib/getopt.c:593
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: opþiunea `%c%s' nu permite un argument\n"
+
+#: gnulib/lib/getopt.c:636 gnulib/lib/getopt.c:655 gnulib/lib/getopt.c:971
+#: gnulib/lib/getopt.c:990
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: opþiunea `%s' necesitã un argument\n"
+
+#: gnulib/lib/getopt.c:693 gnulib/lib/getopt.c:696
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: opþiune nerecunoscutã `--%s'\n"
+
+#: gnulib/lib/getopt.c:704 gnulib/lib/getopt.c:707
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: opþiune nerecunoscutã `%c%s'\n"
+
+#: gnulib/lib/getopt.c:759 gnulib/lib/getopt.c:762
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: opþiune ilegalã -- %c\n"
+
+#: gnulib/lib/getopt.c:768 gnulib/lib/getopt.c:771
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: opþiune invalidã -- %c\n"
+
+#: gnulib/lib/getopt.c:823 gnulib/lib/getopt.c:839 gnulib/lib/getopt.c:1043
+#: gnulib/lib/getopt.c:1061
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: opþiunea necesitã un argument -- %c\n"
+
+#: gnulib/lib/getopt.c:892 gnulib/lib/getopt.c:908
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: opþiunea `-W %s' este ambiguã\n"
+
+#: gnulib/lib/getopt.c:932 gnulib/lib/getopt.c:950
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: opþiunea `-W %s' nu permite un argument\n"
+
+#: gnulib/lib/xalloc-die.c:34 gnulib/lib/xsetenv.c:37
+#, c-format
+msgid "memory exhausted"
+msgstr ""
+
+#: info/echo-area.c:283 info/session.c:966
+msgid "Move forward a character"
+msgstr "Mergi înainte un caracter"
+
+#: info/echo-area.c:295 info/session.c:993
+msgid "Move backward a character"
+msgstr "Mergi înapoi un caracter"
+
+#: info/echo-area.c:307
+msgid "Move to the start of this line"
+msgstr "Mergi la începutul acestei linii"
+
+#: info/echo-area.c:312
+msgid "Move to the end of this line"
+msgstr "Mergi la sfârºitul acestei linii"
+
+#: info/echo-area.c:320 info/session.c:1025
+msgid "Move forward a word"
+msgstr "Mergi înainte un cuvânt"
+
+#: info/echo-area.c:360 info/session.c:1049
+msgid "Move backward a word"
+msgstr "Mergi înapoi un cuvânt"
+
+#: info/echo-area.c:400
+msgid "Delete the character under the cursor"
+msgstr "ªterge caracterul de sub cursor"
+
+#: info/echo-area.c:430
+msgid "Delete the character behind the cursor"
+msgstr "ªterge caracterul din stânga cursorului"
+
+#: info/echo-area.c:451
+msgid "Cancel or quit operation"
+msgstr "Renunþã sau terminã operaþiunea"
+
+#: info/echo-area.c:466
+msgid "Accept (or force completion of) this line"
+msgstr "Acceptã (sau forþeazã completarea) acestei linii"
+
+#: info/echo-area.c:471
+msgid "Insert next character verbatim"
+msgstr "Insereazã urmãtorul caracter identic (verbatim)"
+
+#: info/echo-area.c:479
+msgid "Insert this character"
+msgstr "Insereazã acest caracter"
+
+#: info/echo-area.c:498
+msgid "Insert a TAB character"
+msgstr "Insereazã un caracter TAB"
+
+#: info/echo-area.c:505
+msgid "Transpose characters at point"
+msgstr "Transpune caracterele la acest punct"
+
+#: info/echo-area.c:556
+msgid "Yank back the contents of the last kill"
+msgstr "Extrage înapoi conþinutul ultimei ºtergeri (kill)"
+
+#: info/echo-area.c:563
+msgid "Kill ring is empty"
+msgstr "Inelul de ºtergeri (kill) e gol"
+
+#: info/echo-area.c:576
+msgid "Yank back a previous kill"
+msgstr "Extrage înapoi o ºtergere (kill) anterioarã"
+
+#: info/echo-area.c:609
+msgid "Kill to the end of the line"
+msgstr "ªterge (kill) pânã la sfârºitul liniei"
+
+#: info/echo-area.c:622
+msgid "Kill to the beginning of the line"
+msgstr "ªterge (kill) pânã la începutul liniei"
+
+#: info/echo-area.c:634
+msgid "Kill the word following the cursor"
+msgstr "ªterge (kill) cuvântul din dreapta cursorului"
+
+#: info/echo-area.c:654
+msgid "Kill the word preceding the cursor"
+msgstr "ªterge (kill) cuvãntul din stânga cursorului"
+
+#: info/echo-area.c:870 info/echo-area.c:926
+msgid "No completions"
+msgstr "Nici o completare"
+
+#: info/echo-area.c:872
+msgid "Not complete"
+msgstr "Nu e completat"
+
+#: info/echo-area.c:913
+msgid "List possible completions"
+msgstr "Enumerã completãrile posibile"
+
+#: info/echo-area.c:930
+msgid "Sole completion"
+msgstr "O singurã completare"
+
+#: info/echo-area.c:939
+msgid "One completion:\n"
+msgstr "O completare:\n"
+
+#: info/echo-area.c:940
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d completãri:\n"
+
+#: info/echo-area.c:1087
+msgid "Insert completion"
+msgstr "Insereazã completarea"
+
+#: info/echo-area.c:1222
+msgid "Building completions..."
+msgstr "Construim completãrile..."
+
+#: info/echo-area.c:1342
+msgid "Scroll the completions window"
+msgstr "Scroll fereastra de completãri"
+
+#: info/footnotes.c:212
+msgid "Footnotes could not be displayed"
+msgstr "Notele de subsol nu pot fi afiºate"
+
+#: info/footnotes.c:238
+msgid "Show the footnotes associated with this node in another window"
+msgstr "Aratã notele de subsol asociate cu acest nod în aceastã fereastrã"
+
+#: info/footnotes.h:26
+msgid "---------- Footnotes ----------"
+msgstr "------- Note de subsol -------"
+
+#: info/indices.c:171
+msgid "Look up a string in the index for this file"
+msgstr "Cautã un ºir în indexul acestui fiºier"
+
+#: info/indices.c:198
+msgid "Finding index entries..."
+msgstr "Cãutãm intrãri în index..."
+
+#: info/indices.c:206
+msgid "No indices found."
+msgstr "Nici am gãsit nici un index."
+
+#: info/indices.c:216
+msgid "Index entry: "
+msgstr "Intrare în index: "
+
+#: info/indices.c:324
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr ""
+"Mergi la urmãtorul articol de index ce se potriveºte ultimei comenzi `"
+"\\[index-search]'"
+
+#: info/indices.c:334
+msgid "No previous index search string."
+msgstr "Nu existã nici un ºir cãutat anterior."
+
+#: info/indices.c:341
+msgid "No index entries."
+msgstr "Nici o intrare în index."
+
+#: info/indices.c:374
+#, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "Nici o intrare în %sindex conþinând `%s'."
+
+#: info/indices.c:375
+msgid "more "
+msgstr "mai mult"
+
+#: info/indices.c:385
+msgid "CAN'T SEE THIS"
+msgstr "NU POT VEDEA ACEASTA"
+
+#: info/indices.c:421
+#, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr ""
+"Am gãsit `%s' în %s. (`\\[next-index-match]' încearcã sã gãseascã urmãtorul.)"
+
+#: info/indices.c:549
+#, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "Scanãm indexurile pentru `%s'..."
+
+#: info/indices.c:604
+#, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr "Nici un fiºier info nu are `%s' în indexurile lor."
+
+#: info/indices.c:630
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr ""
+"Cautã în toþi indexurile fiºierului pentru un ºir ºi contruieºte un meniu"
+
+#: info/indices.c:634
+msgid "Index apropos: "
+msgstr "Index apropos: "
+
+#: info/indices.c:662
+#, c-format
+msgid ""
+"\n"
+"* Menu: Nodes whose indices contain `%s':\n"
+msgstr ""
+"\n"
+"* Meniu: Noduri a cãror indexurile conþin `%s':\n"
+
+#: info/info.c:275 info/infokey.c:899
+#, c-format
+msgid "Try --help for more information.\n"
+msgstr "Încercaþi --help pentru informaþii suplimentare.\n"
+
+#: info/info.c:294 info/infokey.c:145 install-info/install-info.c:2101
+#: makeinfo/makeinfo.c:802 util/texindex.c:295
+#, c-format
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+
+#: info/info.c:506
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "nici o intrare de index a fost gãsitã pentru `%s'\n"
+
+#: info/info.c:600
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [MENU-ITEM...]\n"
+"\n"
+"Read documentation in Info format.\n"
+msgstr ""
+
+#: info/info.c:606
+msgid ""
+"Options:\n"
+" -k, --apropos=STRING look up STRING in all indices of all "
+"manuals.\n"
+" -d, --directory=DIR add DIR to INFOPATH.\n"
+" --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+" -f, --file=FILENAME specify Info file to visit."
+msgstr ""
+
+#: info/info.c:613
+msgid ""
+" -h, --help display this help and exit.\n"
+" --index-search=STRING go to node pointed by index entry STRING.\n"
+" -n, --node=NODENAME specify nodes in first visited Info file.\n"
+" -o, --output=FILENAME output selected nodes to FILENAME."
+msgstr ""
+
+#: info/info.c:619
+msgid ""
+" -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+" --no-raw-escapes output escapes as literal text.\n"
+" --restore=FILENAME read initial keystrokes from FILENAME.\n"
+" -O, --show-options, --usage go to command-line options node."
+msgstr ""
+
+#: info/info.c:626
+#, fuzzy
+msgid " -b, --speech-friendly be friendly to speech synthesizers."
+msgstr ""
+" -b, --speech-friendly fii prietenos cu sintetizatoarele de "
+"vorbire.\n"
+
+#: info/info.c:630
+msgid ""
+" --subnodes recursively output menu items.\n"
+" --vi-keys use vi-like and less-like key bindings.\n"
+" --version display version information and exit.\n"
+" -w, --where, --location print physical location of Info file."
+msgstr ""
+
+#: info/info.c:636
+msgid ""
+"\n"
+"The first non-option argument, if present, is the menu entry to start from;\n"
+"it is searched for in all `dir' files along INFOPATH.\n"
+"If it is not present, info merges all `dir' files and shows the result.\n"
+"Any remaining arguments are treated as the names of menu\n"
+"items relative to the initial node visited."
+msgstr ""
+
+#: info/info.c:643
+msgid ""
+"\n"
+"For a summary of key bindings, type h within Info."
+msgstr ""
+
+#: info/info.c:646
+msgid ""
+"\n"
+"Examples:\n"
+" info show top-level dir menu\n"
+" info info show the general manual for Info readers\n"
+" info info-stnd show the manual specific to this Info program\n"
+" info emacs start at emacs node from top-level dir\n"
+" info emacs buffers start at buffers node within emacs manual\n"
+" info --show-options emacs start at node with emacs' command line options\n"
+" info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+" info -f ./foo.info show file ./foo.info, not searching dir"
+msgstr ""
+
+#: info/info.c:657 info/infokey.c:918 makeinfo/makeinfo.c:475
+#: util/texindex.c:259
+msgid ""
+"\n"
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+"Trimiteþi emailuri raportând bug-uri la bug-texinfo@gnu.org,\n"
+"întrebãri generale ºi discuþii la help-texinfo@gnu.org.\n"
+"Texinfo homepage: http://www.gnu.org/software/texinfo/"
+
+#: info/info.c:691
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "Nu pot gãsi nodul `%s'."
+
+#: info/info.c:692
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "Nu pot gãsi nodul `(%s)%s'."
+
+#: info/info.c:693
+msgid "Cannot find a window!"
+msgstr "Nu pot gãsi o fereastrã!"
+
+#: info/info.c:694
+msgid "Point doesn't appear within this window's node!"
+msgstr "Punctul nu apare în interiorul nodului acestei ferestre!"
+
+#: info/info.c:695
+msgid "Cannot delete the last window."
+msgstr "Nu pot ºterge ultima fereastrã."
+
+#: info/info.c:696
+msgid "No menu in this node."
+msgstr "Nici un meniu în acest nod"
+
+#: info/info.c:697
+msgid "No footnotes in this node."
+msgstr "Nici o notã de subsol în acest nod."
+
+#: info/info.c:698
+msgid "No cross references in this node."
+msgstr "Nici o referinþã la acelaºi pasaj în acest nod."
+
+#: info/info.c:699
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Nici un pointer `%s' pentru acest nod."
+
+#: info/info.c:700
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "Comandã Info necunoscutã `%c';încercaþi `?' pentru ajutor."
+
+#: info/info.c:701
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr "Terminalul de tip `%s' nu e destul de deºtept sã ruleze Info."
+
+#: info/info.c:702
+msgid "You are already at the last page of this node."
+msgstr "Sunteþi deja la ultima paginã a acestui nod."
+
+#: info/info.c:703
+msgid "You are already at the first page of this node."
+msgstr "Sunteþi deja la prima paginã a acestui nod."
+
+#: info/info.c:704
+msgid "Only one window."
+msgstr "O singurã fereastrã."
+
+#: info/info.c:705
+msgid "Resulting window would be too small."
+msgstr "Fereastra rezultantã ar fi prea micã."
+
+#: info/info.c:706
+msgid "Not enough room for a help window, please delete a window."
+msgstr "Nu e destul spaþiu pentru o fereastrã de ajutor, ºtergeþi o fereastrã."
+
+#: info/infodoc.c:45
+msgid "Basic Info command keys\n"
+msgstr ""
+
+#: info/infodoc.c:47
+#, fuzzy
+msgid "\\%-10[quit-help] Close this help window.\n"
+msgstr "\\%-10[quit-help] Terminã acest ajutor.\n"
+
+#: info/infodoc.c:48
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] Terminã Info complet.\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr "\\%-10[get-info-help-node] Invocaþi tutorialul Info.\n"
+
+#: info/infodoc.c:51
+#, fuzzy
+msgid "\\%-10[prev-line] Move up one line.\n"
+msgstr "\\%-10[prev-line] Scroll înapoi 1 linie.\n"
+
+#: info/infodoc.c:52
+#, fuzzy
+msgid "\\%-10[next-line] Move down one line.\n"
+msgstr "\\%-10[next-line] Scroll înainte 1 linie.\n"
+
+#: info/infodoc.c:53
+#, fuzzy
+msgid "\\%-10[scroll-backward] Scroll backward one screenful.\n"
+msgstr "\\%-10[scroll-backward] Scroll înapoi o paginã.\n"
+
+#: info/infodoc.c:54
+#, fuzzy
+msgid "\\%-10[scroll-forward] Scroll forward one screenful.\n"
+msgstr "\\%-10[scroll-forward] Scroll înainte o paginã.\n"
+
+#: info/infodoc.c:55
+#, fuzzy
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr "\\%-10[beginning-of-node] Mergi la începutul acestui nod.\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr "\\%-10[end-of-node] Mergi la sfârºitul acestui nod.\n"
+
+#: info/infodoc.c:58
+#, fuzzy
+msgid "\\%-10[move-to-next-xref] Skip to the next hypertext link.\n"
+msgstr ""
+"\\%-10[move-to-next-xref] Sari la urmãtoarea legãturã hypertext din acest "
+"nod.\n"
+
+#: info/infodoc.c:59
+#, fuzzy
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under the "
+"cursor.\n"
+msgstr ""
+"\\%-10[select-reference-this-line] Urmeazã legãtura hypertext de sub "
+"cursor.\n"
+
+#: info/infodoc.c:60
+#, fuzzy
+msgid "\\%-10[history-node] Go back to the last node seen in this window.\n"
+msgstr ""
+"\\%-10[history-node] Mergi la ultimul nod vãzut în aceastã fereastrã.\n"
+
+#: info/infodoc.c:62
+#, fuzzy
+msgid "\\%-10[global-prev-node] Go to the previous node in the document.\n"
+msgstr "\\%-10[prev-node] Mergi la nodul \"precedent\" al acestui nod.\n"
+
+#: info/infodoc.c:63
+#, fuzzy
+msgid "\\%-10[global-next-node] Go to the next node in the document.\n"
+msgstr "\\%-10[next-node] Mergi la \"urmãtorul\" nod al acestui nod.\n"
+
+#: info/infodoc.c:64
+#, fuzzy
+msgid "\\%-10[prev-node] Go to the previous node on this level.\n"
+msgstr "\\%-10[prev-node] Mergi la nodul \"precedent\" al acestui nod.\n"
+
+#: info/infodoc.c:65
+#, fuzzy
+msgid "\\%-10[next-node] Go to the next node on this level.\n"
+msgstr "\\%-10[next-node] Mergi la \"urmãtorul\" nod al acestui nod.\n"
+
+#: info/infodoc.c:66
+#, fuzzy
+msgid "\\%-10[up-node] Go up one level.\n"
+msgstr "\\%-10[up-node] Mergi în \"sus\" de la acest nod.\n"
+
+#: info/infodoc.c:67
+#, fuzzy
+msgid "\\%-10[top-node] Go to the top node of this document.\n"
+msgstr "\\%-10[end-of-node] Mergi la sfârºitul acestui nod.\n"
+
+#: info/infodoc.c:68
+#, fuzzy
+msgid "\\%-10[dir-node] Go to the main `directory' node.\n"
+msgstr "\\%-10[end-of-node] Mergi la sfârºitul acestui nod.\n"
+
+#: info/infodoc.c:70
+#, fuzzy
+msgid "1...9 Pick the first...ninth item in this node's menu.\n"
+msgstr " %-10s Alege primul ... al nouãlea articol în meniul nodului.\n"
+
+#: info/infodoc.c:71
+#, fuzzy
+msgid "\\%-10[last-menu-item] Pick the last item in this node's menu.\n"
+msgstr "\\%-10[last-menu-item] Alege ultimul articol în meniul nodului.\n"
+
+#: info/infodoc.c:72
+#, fuzzy
+msgid "\\%-10[menu-item] Pick a menu item specified by name.\n"
+msgstr " %-10s Alege articolul de meniu specificat prin nume.\n"
+
+#: info/infodoc.c:73
+#, fuzzy
+msgid "\\%-10[xref-item] Follow a cross reference specified by name.\n"
+msgstr ""
+"\\%-10[xref-item] Urmeazã o referinþã încruciºatã. Citeºte numele "
+"referinþei.\n"
+
+#: info/infodoc.c:74
+#, fuzzy
+msgid "\\%-10[goto-node] Go to a node specified by name.\n"
+msgstr " %-10s Mergi la nodul specificat prin nume.\n"
+
+#: info/infodoc.c:76
+#, fuzzy
+msgid "\\%-10[search] Search forward for a specified string.\n"
+msgstr " %-10s Cautã înainte un ºir specificat,\n"
+
+#: info/infodoc.c:77
+#, fuzzy
+msgid "\\%-10[search-previous] Search for previous occurrence.\n"
+msgstr "\\%-10[prev-node] Mergi la nodul \"precedent\" al acestui nod.\n"
+
+#: info/infodoc.c:78
+#, fuzzy
+msgid "\\%-10[search-next] Search for next occurrence.\n"
+msgstr ""
+" %-10s Cautã ºirul specificat în intrãrile indexului acestui fiºier Info\n"
+
+#: info/infodoc.c:79
+#, fuzzy
+msgid ""
+"\\%-10[index-search] Search for a specified string in the index, and\n"
+" select the node referenced by the first entry found.\n"
+msgstr ""
+"\\%-10[index-search] Cautã ºirul specificat în intrãrile indexului acestui\n"
+" fiºier Info ºi selecteazã nodul referit de prima intrare "
+"gãsitã.\n"
+
+#: info/infodoc.c:81
+#, fuzzy
+msgid "\\%-10[abort-key] Cancel the current operation.\n"
+msgstr "Renunþã la operaþia curentã"
+
+#: info/infodoc.c:89
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"Comenzi de bazã în Fereastra Info\n"
+"*********************************\n"
+
+#: info/infodoc.c:92
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s Terminã acest ajutor.\n"
+
+#: info/infodoc.c:93
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Terminã Info complet.\n"
+
+#: info/infodoc.c:94
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Invocã tuturialul Info.\n"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr " %-10s Mergi la nodul `urmãtor' acestui nod.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr " %-10s Mergi la nodul `precedent' acestui nod.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s Mergi în `sus' de la acest nod.\n"
+
+#: info/infodoc.c:101
+#, fuzzy, c-format
+msgid ""
+" %-10s Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+"\\%-10[menu-item] Alege articol meniu specificat prin nume.\n"
+" Alegând un articol de meniu face ca alt nod sã fie selectat.\n"
+
+#: info/infodoc.c:103
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr ""
+" %-10s Urmeazã referinþã la acelaºi pasaj. Citeºte numele referinþei.\n"
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr " %-10s Mergi la ultimul nod vãzut în aceastã fereastrã.\n"
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr " %-10s Sari la urmãtoarea legãturã hypertext din acest nod.\n"
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s Sari la legãtura hypertext de sub cursor.\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr " %-10s Mergi la nodul `director'. Echivalent cu `g (DIR)'.\n"
+
+#: info/infodoc.c:108
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr " %-10s Mergi la nodul Vârf. Echivalent cu `g Top'.\n"
+
+#: info/infodoc.c:110
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"Mergi în interiorul nodului:\n"
+"----------------------------\n"
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s Scroll înainte o paginã.\n"
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s Scroll înapoi o paginã.\n"
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s Mergi la începutul acestui nod.\n"
+
+#: info/infodoc.c:115
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s Mergi la sfârºitul acestui nod.\n"
+
+#: info/infodoc.c:116
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s Scroll înainte 1 linie.\n"
+
+#: info/infodoc.c:117
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s Scroll înapoi 1 linie.\n"
+
+#: info/infodoc.c:119
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"Alte comenzi:\n"
+"-------------\n"
+
+#: info/infodoc.c:121
+#, fuzzy, c-format
+msgid " %-10s Pick first...ninth item in node's menu.\n"
+msgstr " %-10s Alege primul ... al nouãlea articol în meniul nodului.\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s Alege ultimul articol în meniul nodului.\n"
+
+#: info/infodoc.c:125
+#, fuzzy, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr ""
+"\\%-10[index-search] Cautã ºirul specificat în intrãrile indexului acestui\n"
+" fiºier Info ºi selecteazã nodul referit de prima intrare "
+"gãsitã.\n"
+
+#: info/infodoc.c:127
+#, fuzzy, c-format
+msgid ""
+" %-10s Move to node specified by name.\n"
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+"\\%-10[goto-node] Mergi la nodul specificat prin nume.\n"
+" Puteþi include ºi un nume de fiºier, ca în (NUMEFIªIER)"
+"NUMENOD.\n"
+
+#: info/infodoc.c:129
+#, fuzzy, c-format
+msgid ""
+" %-10s Search forward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+"\\%-10[search] Cautã înainte un ºir specificat\n"
+" ºi selecteazã nodul în care acesta este gãsit.\n"
+
+#: info/infodoc.c:131
+#, fuzzy, c-format
+msgid ""
+" %-10s Search backward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+"\\%-10[search] Cautã înainte un ºir specificat\n"
+" ºi selecteazã nodul în care acesta este gãsit.\n"
+
+#: info/infodoc.c:312
+msgid "The current search path is:\n"
+msgstr "Calea curentã de cãutare este:\n"
+
+#: info/infodoc.c:316
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"Comenzile disponibile în fereastra Info:\n"
+"\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"Comenzile disponibile în zona de ecou:\n"
+"\n"
+
+#: info/infodoc.c:343
+#, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+"Urmãtoarele comenzi pot fi invocate via %s\n"
+"\n"
+
+#: info/infodoc.c:347
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+"Urmãtoarele comenzi nu pot fi deloc invocate:\n"
+"\n"
+
+#: info/infodoc.c:477
+msgid "Display help message"
+msgstr "Afiºeazã mesaj de ajutor"
+
+#: info/infodoc.c:495
+msgid "Visit Info node `(info)Help'"
+msgstr "Viziteazã nodul Info `(info)Ajutor'"
+
+#: info/infodoc.c:633
+msgid "Print documentation for KEY"
+msgstr "Tipãreºte documentaþie pentru tastã (KEY)"
+
+#: info/infodoc.c:645
+#, c-format
+msgid "Describe key: %s"
+msgstr "Descrie tastã (key): %s"
+
+#: info/infodoc.c:656
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s nu este definit(ã)."
+
+#: info/infodoc.c:672 info/infodoc.c:701
+#, c-format
+msgid "%s is undefined."
+msgstr "%s nu este definit(ã)."
+
+#: info/infodoc.c:722
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s este definit(ã) ca %s."
+
+#: info/infodoc.c:1146
+msgid "Show what to type to execute a given command"
+msgstr "Aratã ce trebuie tasta pentru a executa o anumitã comandã"
+
+#: info/infodoc.c:1150
+msgid "Where is command: "
+msgstr "Unde este comanda: "
+
+#: info/infodoc.c:1172
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "`%s' nu este pe nici o tastã"
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s poate fi invocat doar via %s."
+
+#: info/infodoc.c:1183
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s poate fi invocat via %s."
+
+#: info/infodoc.c:1188
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "Nu existã nii o funcþie numitã `%s'"
+
+#: info/infodoc.c:96
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"Selectaþi alte noduri:\n"
+"----------------------\n"
+
+#: info/infokey.c:170
+msgid "incorrect number of arguments"
+msgstr "numãr incorect de argumente"
+
+#: info/infokey.c:201
+#, c-format
+msgid "cannot open input file `%s'"
+msgstr "nu pot deschide fiºierul de intrare `%s'"
+
+#: info/infokey.c:215
+#, c-format
+msgid "cannot create output file `%s'"
+msgstr "nu pot crea fiºierul de ieºire `%s'"
+
+#: info/infokey.c:226
+#, c-format
+msgid "error writing to `%s'"
+msgstr "eroare la scrierea în `%s'"
+
+#: info/infokey.c:232
+#, c-format
+msgid "error closing output file `%s'"
+msgstr "eroare la închiderea fiºierului de ieºire `%s'"
+
+#: info/infokey.c:450
+msgid "key sequence too long"
+msgstr "secvenþã de taste prea lungã"
+
+#: info/infokey.c:529
+msgid "missing key sequence"
+msgstr "secvenþã de taste inexistentã"
+
+#: info/infokey.c:610
+msgid "NUL character (\\000) not permitted"
+msgstr "caracterul NUL (\\000) nu este permis"
+
+#: info/infokey.c:641
+#, c-format
+msgid "NUL character (^%c) not permitted"
+msgstr "caracterul NUL (^%c) nu este permis"
+
+#: info/infokey.c:665
+msgid "missing action name"
+msgstr "nume de acþiune inexistent"
+
+#: info/infokey.c:681 info/infokey.c:756
+msgid "section too long"
+msgstr "secþiune prea lungã"
+
+#: info/infokey.c:688
+#, c-format
+msgid "unknown action `%s'"
+msgstr "acþiune necunoscutã `%s'"
+
+#: info/infokey.c:698
+msgid "action name too long"
+msgstr "nume de acþiune prea lung"
+
+#: info/infokey.c:712
+#, c-format
+msgid "extra characters following action `%s'"
+msgstr "extra caractere dupã acþiunea `%s'"
+
+#: info/infokey.c:723
+msgid "missing variable name"
+msgstr "nume de variabilã inexistent"
+
+#: info/infokey.c:733
+msgid "missing `=' immediately after variable name"
+msgstr "caracterul `=' lipseºte imediat dupã numele de variabilã"
+
+#: info/infokey.c:741
+msgid "variable name too long"
+msgstr "nume de variabilã prea lung"
+
+#: info/infokey.c:765
+msgid "value too long"
+msgstr "valoare prea lungã"
+
+#: info/infokey.c:890
+#, c-format
+msgid "\"%s\", line %u: "
+msgstr "\"%s\", linia %u: "
+
+#: info/infokey.c:906
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [INPUT-FILE]\n"
+"\n"
+"Compile infokey source file to infokey file. Reads INPUT-FILE (default\n"
+"$HOME/.infokey) and writes compiled key file to (by default) $HOME/.info.\n"
+"\n"
+"Options:\n"
+" --output FILE output to FILE instead of $HOME/.info\n"
+" --help display this help and exit.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"Folosire: %s [OPÞIUNE]... [FIªIER-INTRAre]\n"
+"\n"
+"Compileazã fiºierul sursã infokey în fiºier infokey. Citeºte FIªIER-INTRARE\n"
+"(implicit $HOME/.infokey) ºi scrie fiºierul cod compilat în (implicit)\n"
+"$HOME/.info.\n"
+"\n"
+"Opþiuni:\n"
+" --output FIªIER\tieºire în FIªIER în loc de $HOME/.info\n"
+" --help\t\tafiºeazã acest ajutor ºi terminã.\n"
+" --version\t\tafiºeazã informaþii versiune ºi terminã.\n"
+
+#: info/infomap.c:955
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "Ignorãm fiºier infokey incorect `%s' - prea mic"
+
+#: info/infomap.c:958
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "Ignorãm fiºier infokey incorect `%s' - prea mare"
+
+#: info/infomap.c:971
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "Eroare la citirea fiºierului infokey `%s' - citit scurt"
+
+#: info/infomap.c:990
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+"Fiºier infokey incorect `%s' (bad magic numbers) -- rulaþi infokey pentru a-"
+"l actualiza"
+
+#: info/infomap.c:999
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr ""
+"Fiºierul d-voastrã infokey `%s' este vechi - rulaþi infokey pentru a-l "
+"actualiza"
+
+#: info/infomap.c:1015
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+"Fiºier infokey incorect `%s' (bad section length) -- rulaþi infokey pentru a-"
+"l actualiza"
+
+#: info/infomap.c:1036
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr ""
+"Fiºier infokey incorect `%s' (bad section code) -- rulaþi infokey pentru a-l "
+"actualiza"
+
+#: info/infomap.c:1171
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr "Date incorecte în fiºierul infokey -- unele legãturi de taste ignorate"
+
+#: info/infomap.c:1221
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr ""
+"Date incorecte în fiºierul infokey -- unele setãri de variabile ignorate"
+
+#: info/m-x.c:68
+msgid "Read the name of an Info command and describe it"
+msgstr "citeºte numele unei comenzi Info ºi descrie-o"
+
+#: info/m-x.c:72
+msgid "Describe command: "
+msgstr "Descrie comanda: "
+
+#: info/m-x.c:95
+msgid "Read a command name in the echo area and execute it"
+msgstr "Citeºte un nume de comandã în zona ecou ºi executã-o"
+
+#: info/m-x.c:139
+msgid "Cannot execute an `echo-area' command here."
+msgstr "Nu pot executa o comandã `zonã ecou' aici."
+
+#: info/m-x.c:153
+#, c-format
+msgid "Undefined command: %s"
+msgstr "Comandã nedefinitã: %s"
+
+#: info/m-x.c:159
+msgid "Set the height of the displayed window"
+msgstr "Seteazã înãlþimea ferestrei de afiºare"
+
+#: info/m-x.c:172
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Seteazã înãlþimea ecranului ls (%d): "
+
+#: info/makedoc.c:166 info/makedoc.c:174
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+" Fiºierele sursã (groveled) pentru a include acest fiºier:\n"
+"\n"
+
+#: info/makedoc.c:556
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "Nu ap putut manipula fiºierul %s.\n"
+
+#: info/nodemenu.c:30
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+"\n"
+"* Meniu:\n"
+" (Fiºier)Nod Linii Mãrime Conþine fiºier\n"
+" ----------- ----- ------ --------------"
+
+#: info/nodemenu.c:201
+msgid ""
+"Here is the menu of nodes you have recently visited.\n"
+"Select one from this menu, or use `\\[history-node]' in another window.\n"
+msgstr ""
+"Aici este meniul cu nodurile pe care le-aþi vizitat recent.\n"
+"Selectaþi un nod din acest meniu, sau folosiþi `\\[history-node]' în altã "
+"fereastrã\n"
+
+#: info/nodemenu.c:223
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr ""
+"Creazã o fereastrã care conþine un meniu cu toate nodurile vizitate recent"
+
+#: info/nodemenu.c:303
+msgid "Select a node which has been previously visited in a visible window"
+msgstr ""
+"Selecteazã un nod care a fost vizitat anterior într-o fereastrã vizibilã"
+
+#: info/nodemenu.c:316
+msgid "Select visited node: "
+msgstr "Selecteazã nodul vizitat: "
+
+#: info/nodemenu.c:336 info/session.c:2578
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "Referinþa a dispãrut! (%s)."
+
+#: info/search.c:166
+#, c-format
+msgid "regexp error: %s"
+msgstr ""
+
+#: info/session.c:164
+#, c-format
+msgid ""
+"Welcome to Info version %s. Type \\[get-help-window] for help, \\[menu-item] "
+"for menu item."
+msgstr ""
+"Bine aþi venit la Info versiunea %s. Tastaþi \\[get-help-window] pentru "
+"ajutor, \\[menu-item] pentru un articol din meniu."
+
+#: info/session.c:625
+msgid "Move down to the next line"
+msgstr "Mergi la linia urmãtoare"
+
+#: info/session.c:661
+msgid "Move up to the previous line"
+msgstr "Mergi la linia precedentã"
+
+#: info/session.c:931
+msgid "Move to the end of the line"
+msgstr "Mergi la sfârºitul liniei"
+
+#: info/session.c:942
+msgid "Move to the start of the line"
+msgstr "Mergi la începutul liniei"
+
+#: info/session.c:1142
+msgid "Next"
+msgstr "Urmãtor"
+
+#: info/session.c:1158 info/session.c:1283
+msgid "No more nodes within this document."
+msgstr "Nu mai sunt alte noduri în acest document."
+
+#: info/session.c:1309
+msgid "No `Prev' for this node."
+msgstr "Nici un `Prec' pentru acest nod."
+
+#: info/session.c:1329
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr "Nici un `Prec' sau `Sus' pentru acest nod în acest document."
+
+#: info/session.c:1391
+msgid "Move forwards or down through node structure"
+msgstr "Mergi înainte sau jos prin structura de noduri"
+
+#: info/session.c:1407
+msgid "Move backwards or up through node structure"
+msgstr "Mergi înapoi sau sus prin structura de noduri"
+
+#: info/session.c:1508
+msgid "Scroll forward in this window"
+msgstr "Scroll înainte în aceastã fereastrã"
+
+#: info/session.c:1516
+msgid "Scroll forward in this window and set default window size"
+msgstr ""
+"Scroll înainte în aceastã fereastrã ºi seteazã dimensiunea implicitã a "
+"ferestrei"
+
+#: info/session.c:1524
+msgid "Scroll forward in this window staying within node"
+msgstr "Scroll înainte în aceastã fereastrã, rãmâi în nod"
+
+#: info/session.c:1532
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr ""
+"Scroll înainte în aceastã fereastrã, rãmâi în nod ºi seteazã dimensiunea "
+"implicitã a ferestrei"
+
+#: info/session.c:1540
+msgid "Scroll backward in this window"
+msgstr "Scroll înapoi în acestã fereastrã"
+
+#: info/session.c:1548
+msgid "Scroll backward in this window and set default window size"
+msgstr ""
+"Scroll înapoi în acestã fereastrã ºi seteazã dimensiunea implicitã a "
+"ferestrei"
+
+#: info/session.c:1557
+msgid "Scroll backward in this window staying within node"
+msgstr "Scroll înapoi în aceastã fereastrã, rãmâi în nod"
+
+#: info/session.c:1565
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr ""
+"Scroll înapoi în aceastã fereastrã, rãmâi în nod ºi seteazã dimensiunea "
+"implicitã a ferestrei"
+
+#: info/session.c:1573
+msgid "Move to the start of this node"
+msgstr "Mergi la începutul acestui nod"
+
+#: info/session.c:1580
+msgid "Move to the end of this node"
+msgstr "Mergi la sfârºitul acestui nod"
+
+#: info/session.c:1587
+msgid "Scroll down by lines"
+msgstr "Scroll jos pe linii"
+
+#: info/session.c:1604
+msgid "Scroll up by lines"
+msgstr "Scroll sus pe linii"
+
+#: info/session.c:1622
+msgid "Scroll down by half screen size"
+msgstr "Scroll jos jumãtate de ecran"
+
+#: info/session.c:1648
+msgid "Scroll up by half screen size"
+msgstr "Scroll sus jumãtate de ecran"
+
+#: info/session.c:1677
+msgid "Select the next window"
+msgstr "Selecteazã fereastra urmãtoare"
+
+#: info/session.c:1716
+msgid "Select the previous window"
+msgstr "Selecteazã fereastra precedentã"
+
+#: info/session.c:1767
+msgid "Split the current window"
+msgstr "Împarte fereastra curentã"
+
+#: info/session.c:1848
+msgid "Delete the current window"
+msgstr "ªterge fereastra curentã"
+
+#: info/session.c:1856
+msgid "Cannot delete a permanent window"
+msgstr "Nu pot ºterge o fereastrã permanentã"
+
+#: info/session.c:1888
+msgid "Delete all other windows"
+msgstr "ªterge toate celelalte ferestre"
+
+#: info/session.c:1934
+msgid "Scroll the other window"
+msgstr "Scroll-eazã cealaltã fereastrã"
+
+#: info/session.c:1955
+msgid "Scroll the other window backward"
+msgstr "Scroll-eazã cealaltã fereastrã înapoi"
+
+#: info/session.c:1961
+msgid "Grow (or shrink) this window"
+msgstr "Creºte sau micºoreazã aceastã fereastrã"
+
+#: info/session.c:1972
+msgid "Divide the available screen space among the visible windows"
+msgstr "Împarte spaþiul de ecran disponibil între ferestrele vizibile"
+
+#: info/session.c:1979
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "Comutã starea reformatãrii de linie (wrapping) în fereastra curentã"
+
+#: info/session.c:1986
+msgid "Toggle the usage of regular expressions in searches"
+msgstr ""
+
+#: info/session.c:1990
+msgid "Using regular expressions for searches."
+msgstr ""
+
+#: info/session.c:1991
+msgid "Using literal strings for searches."
+msgstr ""
+
+#: info/session.c:2162
+msgid "Select the Next node"
+msgstr "Selecteazã nodul Urmãtor"
+
+#: info/session.c:2170
+msgid "Select the Prev node"
+msgstr "Selectezã nodul Prec"
+
+#: info/session.c:2178
+msgid "Select the Up node"
+msgstr "Selecteazã nodul Sus"
+
+#: info/session.c:2185
+msgid "Select the last node in this file"
+msgstr "Selecteazã ultimul nod din acest fiºier"
+
+#: info/session.c:2212 info/session.c:2245
+msgid "This window has no additional nodes"
+msgstr "Acestã fereastrã nu mai are nici un nod"
+
+#: info/session.c:2218
+msgid "Select the first node in this file"
+msgstr "Selecteazã primul nod din acest fiºier"
+
+#: info/session.c:2252
+msgid "Select the last item in this node's menu"
+msgstr "Selecteazã ultimul articol din meniul acestui nod"
+
+#: info/session.c:2258
+msgid "Select this menu item"
+msgstr "Selecteazã acest articol de meniu"
+
+#: info/session.c:2291
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "Nu existã %d articole în acest meniu"
+
+#: info/session.c:2485 info/session.c:2486
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Articol meniu (%s): "
+
+#: info/session.c:2489
+msgid "Menu item: "
+msgstr "Articol meniu: "
+
+#: info/session.c:2496 info/session.c:2497
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Urmeazã ref (%s): "
+
+#: info/session.c:2500
+msgid "Follow xref: "
+msgstr "Urmeazã ref: "
+
+#: info/session.c:2629
+msgid "Read a menu item and select its node"
+msgstr "Citeºte un articol de meniu ºi selecteazã nodul sãu"
+
+#: info/session.c:2637
+msgid "Read a footnote or cross reference and select its node"
+msgstr "Citeºte o notã de subsol sau referinþã ºi selecteazã nodul sãu"
+
+#: info/session.c:2643
+msgid "Move to the start of this node's menu"
+msgstr "Mergi la începutul meniului acestui nod"
+
+#: info/session.c:2667
+msgid "Visit as many menu items at once as possible"
+msgstr "Viziteazã cât mai multe articole de meniu posibile deodatã"
+
+#: info/session.c:2695
+msgid "Read a node name and select it"
+msgstr "Citeºte numele unui nod ºi selecteazã-l"
+
+#: info/session.c:2750 info/session.c:2755
+msgid "Goto node: "
+msgstr "Du-te la nod: "
+
+#: info/session.c:2819
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "Nici un meniu în nod `%s'."
+
+#: info/session.c:2865
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "Nici un articol de meniu `%s' în nod `%s'."
+
+#: info/session.c:2895
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr "Nu pot gãsi nodul referit de `%s' în `%s'."
+
+#: info/session.c:2945
+msgid "Read a list of menus starting from dir and follow them"
+msgstr "Citeºte o listã de meniuri pornind din dir ºi urmãreºte-le"
+
+#: info/session.c:2947
+msgid "Follow menus: "
+msgstr "Urmeazã meniurile: "
+
+#: info/session.c:3140
+msgid "Find the node describing program invocation"
+msgstr "Gãseºte nodul ce descrie invocarea programului"
+
+#: info/session.c:3142
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "Gãseºte nodul Invocare pentru [%s]: "
+
+#: info/session.c:3180
+msgid "Read a manpage reference and select it"
+msgstr "Citeºte o referinþã de paginã de manul ºi selecteazã-o"
+
+#: info/session.c:3184
+msgid "Get Manpage: "
+msgstr "Obþine paginã manual (manpage): "
+
+#: info/session.c:3214
+msgid "Select the node `Top' in this file"
+msgstr "Selecteazã nodul `Vârf' în acest fiºier"
+
+#: info/session.c:3220
+msgid "Select the node `(dir)'"
+msgstr "Selecteazã nodul `(dir)'"
+
+#: info/session.c:3237 info/session.c:3239
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Distruge nodul (%s): "
+
+#: info/session.c:3291
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "Nu pot distruge nodul `%s'"
+
+#: info/session.c:3301
+msgid "Cannot kill the last node"
+msgstr "Nu pot distruge ultimul nod"
+
+#: info/session.c:3387
+msgid "Select the most recently selected node"
+msgstr "Selecteazã cel mai recent nod selectat"
+
+#: info/session.c:3393
+msgid "Kill this node"
+msgstr "Distruge acest nod"
+
+#: info/session.c:3401
+msgid "Read the name of a file and select it"
+msgstr "Citeºte numele unui fiºier ºi selecteazã-l"
+
+#: info/session.c:3405
+msgid "Find file: "
+msgstr "Gãseºte fiºier: "
+
+#: info/session.c:3422
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "Nu pot gãsi `%s'."
+
+#: info/session.c:3465 info/session.c:3583
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "Nu am putut crea fiºier ieºire `%s'."
+
+#: info/session.c:3479 info/session.c:3601 info/session.c:3661
+msgid "Done."
+msgstr "Terminat."
+
+#: info/session.c:3534
+#, c-format
+msgid "Writing node %s..."
+msgstr "Scriu nod %s..."
+
+#: info/session.c:3610
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr "Conectez (pipe) conþinutul acestui nod prin INFO_PRINT_COMMAND"
+
+#: info/session.c:3645
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "Nu pot deschide conexiune (pipe) cãtre `%s'."
+
+#: info/session.c:3651
+#, c-format
+msgid "Printing node %s..."
+msgstr "Tipãresc nod %s..."
+
+#: info/session.c:3900
+msgid "Search continued from the end of the document."
+msgstr ""
+
+#: info/session.c:3905
+#, fuzzy
+msgid "Search continued from the beginning of the document."
+msgstr "ªterge (kill) pânã la începutul liniei"
+
+#: info/session.c:3922
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "Caut subfiºier %s ..."
+
+#: info/session.c:3979
+msgid "Read a string and search for it case-sensitively"
+msgstr "Citeºte un ºir ºi cautã-l þinând cont de litere mari/mici"
+
+#: info/session.c:3986
+msgid "Read a string and search for it"
+msgstr "Citeºte un ºir ºi cautã-l"
+
+#: info/session.c:3994
+msgid "Read a string and search backward for it"
+msgstr "Citeºte un ºir ºi cautã-l înapoi"
+
+#: info/session.c:4030 info/session.c:4036
+#, fuzzy, c-format
+msgid "%s%s%s [%s]: "
+msgstr "%s%s pentru ºir [%s]: "
+
+#: info/session.c:4031 info/session.c:4037
+msgid "Regexp search"
+msgstr ""
+
+#: info/session.c:4032 info/session.c:4038
+#, fuzzy
+msgid " case-sensitively"
+msgstr " þinând cont de litere mari/mici"
+
+#: info/session.c:4033 info/session.c:4039
+#, fuzzy
+msgid " backward"
+msgstr "Cautã înapoi"
+
+#: info/session.c:4037
+msgid "Search"
+msgstr "Cautã"
+
+#: info/session.c:4079
+msgid "Search failed."
+msgstr "Cãutare eºuatã."
+
+#: info/session.c:4097
+msgid "Repeat last search in the same direction"
+msgstr "Repetã ultima cãutare în aceeaºi direcþie"
+
+#: info/session.c:4100 info/session.c:4110
+msgid "No previous search string"
+msgstr "Nici un ºir cãutat anterior"
+
+#: info/session.c:4107
+msgid "Repeat last search in the reverse direction"
+msgstr "Repetã ultima cãutare în direcþie opusã"
+
+#: info/session.c:4126 info/session.c:4132
+msgid "Search interactively for a string as you type it"
+msgstr "Cautã interactiv pentru un ºir pe mãsurã ce este introdus"
+
+#: info/session.c:4212
+#, fuzzy
+msgid "Regexp I-search backward: "
+msgstr "I-cautã înapoi: "
+
+#: info/session.c:4213
+msgid "I-search backward: "
+msgstr "I-cautã înapoi: "
+
+#: info/session.c:4215
+#, fuzzy
+msgid "Regexp I-search: "
+msgstr "I-cautã: "
+
+#: info/session.c:4216
+msgid "I-search: "
+msgstr "I-cautã: "
+
+#: info/session.c:4241 info/session.c:4243
+msgid "Failing "
+msgstr "Eºuez "
+
+#: info/session.c:4734
+msgid "Move to the previous cross reference"
+msgstr "Mergi la referinþa precedentã"
+
+#: info/session.c:4752
+msgid "Move to the next cross reference"
+msgstr "Mergi la referinþa urmãtoare"
+
+#: info/session.c:4774
+msgid "Select reference or menu item appearing on this line"
+msgstr "Selecteazã referinþa sau articolul de meniu ce apare pe acestã linie"
+
+#: info/session.c:4797
+msgid "Cancel current operation"
+msgstr "Renunþã la operaþia curentã"
+
+#: info/session.c:4804
+msgid "Quit"
+msgstr "Ieºi"
+
+#: info/session.c:4813
+msgid "Move the cursor to a specific line of the window"
+msgstr "Mutã cursorul la o anumitã linie din fereastrã"
+
+#: info/session.c:4845
+msgid "Redraw the display"
+msgstr "Redeseneazã ecranul"
+
+#: info/session.c:4882
+msgid "Quit using Info"
+msgstr "Ieºi din Info"
+
+#: info/session.c:4895
+msgid "Run command bound to this key's lowercase variant"
+msgstr "Ruleazã comanda legatã de litera micã de pe tastã"
+
+#: info/session.c:4906
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "Comandã necunoscutã (%s)."
+
+#: info/session.c:4909
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "\"%s\" este invalid"
+
+#: info/session.c:4910
+#, c-format
+msgid "`%s' is invalid"
+msgstr "`%s' este invalid"
+
+#: info/session.c:5125
+msgid "Add this digit to the current numeric argument"
+msgstr "Adaugã aceastã cifrã la argumentul numeric curent"
+
+#: info/session.c:5134
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "Începe (sau înmulþeºte cu 4) argumentul numeric curent"
+
+#: info/session.c:5149
+msgid "Internally used by \\[universal-argument]"
+msgstr "Folosit intern de \\[argument-universal]"
+
+#: info/tilde.c:336
+#, c-format
+msgid "readline: Out of virtual memory!\n"
+msgstr "readline: Nu mai am memorie virtualã!\n"
+
+#: info/variables.c:37
+msgid "When \"On\", footnotes appear and disappear automatically"
+msgstr "Când \"Activ\", notele de subsol apar ºi dispar automatic"
+
+#: info/variables.c:41
+msgid "When \"On\", creating or deleting a window resizes other windows"
+msgstr ""
+"Când \"Activ\", crearea ºi ºtergere unei ferestre redimensioneazã alte "
+"ferestre"
+
+#: info/variables.c:45
+msgid "When \"On\", flash the screen instead of ringing the bell"
+msgstr "Când \"Activ\", scânteiazã ecreanul în loc sã suni clopoþelul"
+
+#: info/variables.c:49
+msgid "When \"On\", errors cause the bell to ring"
+msgstr "Când \"Activ\", erorile face sã sune clopoþelul"
+
+#: info/variables.c:53
+msgid "When \"On\", Info garbage collects files which had to be uncompressed"
+msgstr ""
+"Când \"Activ\", Info colecteazã la gunoi fiºierele care au trebuit "
+"decompresate"
+
+#: info/variables.c:56
+msgid "When \"On\", the portion of the matched search string is highlighted"
+msgstr "Când \"Activ\", porþiunea din ºir care s-a potrivit este evidenþiatã"
+
+#: info/variables.c:60
+msgid "Controls what happens when scrolling is requested at the end of a node"
+msgstr ""
+"Controleazã ce se întâmplã când este cerut scroll la sfârºitul unui nod"
+
+#: info/variables.c:65
+msgid "Same as scroll-behaviour"
+msgstr ""
+
+#: info/variables.c:69
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr ""
+"Numãrul de linii pentru scroll când cursorul se mutã în afara ferestrei"
+
+#: info/variables.c:73
+msgid "Controls whether scroll-behavior affects cursor movement commands"
+msgstr ""
+
+#: info/variables.c:77
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr "Când \"Activ\", Info acceptã ºi afiºeazã caractere ISO Latin"
+
+#: info/variables.c:81
+#, fuzzy
+msgid ""
+"What to do when a scrolling command is issued at the end of the last node"
+msgstr ""
+"Controleazã ce se întâmplã când este cerut scroll la sfârºitul unui nod"
+
+#: info/variables.c:88
+msgid "Explain the use of a variable"
+msgstr "Explicã folosirea unei variabile"
+
+#: info/variables.c:94
+msgid "Describe variable: "
+msgstr "Descrie variabila: "
+
+#: info/variables.c:113
+msgid "Set the value of an Info variable"
+msgstr "Seteazã valoarea unei variabile Info"
+
+#: info/variables.c:119
+msgid "Set variable: "
+msgstr "Seteazã variabilã: "
+
+#: info/variables.c:137
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "Seteazã %s cu valoarea (%d): "
+
+#: info/variables.c:178
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "Seteazã %s cu valoarea (%s): "
+
+#: info/window.c:1026
+msgid "--*** Tags out of Date ***"
+msgstr "--*** Tag-uri Vechi ***"
+
+#: info/window.c:1037
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), linii ----, "
+
+#: info/window.c:1044
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d linii --%s--"
+
+#: info/window.c:1048
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d linii --%s--"
+
+#: info/window.c:1055
+#, c-format
+msgid " Subfile: %s"
+msgstr " Subfiºier: %s"
+
+#: install-info/install-info.c:221
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: avertisment: "
+
+#: install-info/install-info.c:270
+#, c-format
+msgid " for %s"
+msgstr " pentru %s"
+
+#: install-info/install-info.c:500
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr "\tÎncercaþi `%s --help' pentru o lipsã completã de opþiuni.\n"
+
+#: install-info/install-info.c:508
+#, fuzzy, c-format
+msgid "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+msgstr "Folosire: %s [OPÞIUNE]... FIªIER-TEXINFO...\n"
+
+#: install-info/install-info.c:510
+msgid "Add or remove entries in INFO-FILE from the Info directory DIR-FILE."
+msgstr ""
+
+#: install-info/install-info.c:513
+msgid ""
+"Options:\n"
+" --debug report what is being done.\n"
+" --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+" don't insert any new entries.\n"
+" --description=TEXT the description of the entry is TEXT; used with\n"
+" the --name option to become synonymous with the\n"
+" --entry option.\n"
+" --dir-file=NAME specify file name of Info directory file;\n"
+" equivalent to using the DIR-FILE argument.\n"
+" --dry-run same as --test."
+msgstr ""
+
+#: install-info/install-info.c:525
+msgid ""
+" --entry=TEXT insert TEXT as an Info directory entry.\n"
+" TEXT is written as an Info menu item line followed\n"
+" by zero or more extra lines starting with "
+"whitespace.\n"
+" If you specify more than one entry, all are added.\n"
+" If you don't specify any entries, they are determined\n"
+" from information in the Info file itself.\n"
+" When removing, TEXT specifies the entry to remove.\n"
+" TEXT is only removed as a last resort, if the\n"
+" entry as determined from the Info file is not "
+"present,\n"
+" and the basename of the Info file isn't found either."
+msgstr ""
+
+#: install-info/install-info.c:537
+msgid ""
+" --help display this help and exit.\n"
+" --info-dir=DIR same as --dir-file=DIR/dir.\n"
+" --info-file=FILE specify Info file to install in the directory;\n"
+" equivalent to using the INFO-FILE argument.\n"
+" --item=TEXT same as --entry=TEXT.\n"
+" --keep-old do not replace entries, or remove empty sections.\n"
+" --menuentry=TEXT same as --name=TEXT.\n"
+" --name=TEXT the name of the entry is TEXT; used with --description\n"
+" to become synonymous with the --entry option.\n"
+" --no-indent do not format new entries in the DIR file.\n"
+" --quiet suppress warnings."
+msgstr ""
+
+#: install-info/install-info.c:550
+msgid ""
+" --regex=R put this file's entries in all sections that match the\n"
+" regular expression R (ignoring case).\n"
+" --remove same as --delete.\n"
+" --remove-exactly only remove if the info file name matches exactly;\n"
+" suffixes such as .info and .gz are not ignored.\n"
+" --section=SEC put entries in section SEC of the directory.\n"
+" If you specify more than one section, all the entries\n"
+" are added in each of the sections.\n"
+" If you don't specify any sections, they are "
+"determined\n"
+" from information in the Info file itself.\n"
+" --section R SEC equivalent to --regex=R --section=SEC --add-once."
+msgstr ""
+
+#: install-info/install-info.c:563
+msgid ""
+" --silent suppress warnings.\n"
+" --test suppress updating of DIR-FILE.\n"
+" --version display version information and exit."
+msgstr ""
+
+#: install-info/install-info.c:570
+#, fuzzy
+msgid ""
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+"Trimiteþi emailuri raportând bug-uri la bug-texinfo@gnu.org,\n"
+"întrebãri generale ºi discuþii la help-texinfo@gnu.org.\n"
+"Texinfo homepage: http://www.gnu.org/software/texinfo/"
+
+#: install-info/install-info.c:597
+#, c-format
+msgid ""
+"This is the file .../info/dir, which contains the\n"
+"topmost node of the Info hierarchy, called (dir)Top.\n"
+"The first time you invoke Info you start off looking at this node.\n"
+"\n"
+"%s\tThis is the top of the INFO tree\n"
+"\n"
+" This (the Directory node) gives a menu of major topics.\n"
+" Typing \"q\" exits, \"?\" lists all Info commands, \"d\" returns here,\n"
+" \"h\" gives a primer for first-timers,\n"
+" \"mEmacs<Return>\" visits the Emacs manual, etc.\n"
+"\n"
+" In Emacs, you can click mouse button 2 on a menu item or cross reference\n"
+" to select it.\n"
+"\n"
+"%s\n"
+msgstr ""
+"Acesta este fiºierul .../info/dir, care conþine nodul\n"
+"cel mai de sus din ierarhia Info, numit (dir)Top.\n"
+"Prima datã când porniþi Info veþi vedea acest nod.\n"
+"\n"
+"%s\tAcesta este vârful arborelui INFO\n"
+"\n"
+" Acesta (nodul Director) furnizeazã un meniu cu subiecte majore.\n"
+" Apãsând \"q\" terminã, \"?\" enumerã toate comenzile Info, \"d\" vã aduce "
+"aici,\n"
+" \"h\" furnizeazã un tutorial pentru începãtori,\n"
+" \"mEmacs<Return>\" viziteazã manualul Emacs, etc.\n"
+"\n"
+" În Emacs, puteþi face clic cu butonul 2 al mausului pe un articol de "
+"meniu\n"
+" sau o referinþã pentru a o selecta.\n"
+"\n"
+"%s\n"
+
+#: install-info/install-info.c:622
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr "%s: nu am putut citi (%s) ºi nu am putut crea (%s)\n"
+
+#: install-info/install-info.c:715
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: fiºier gol"
+
+#: install-info/install-info.c:1046 install-info/install-info.c:1086
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "START-INFO-DIR-ENTRY fãrã un END-INFO-DIR-ENTRY corespunzãtor"
+
+#: install-info/install-info.c:1081
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "END-INFO-DIR-ENTRY fãrã un START-INFO-DIR-ENTRY corespunzãtor"
+
+#: install-info/install-info.c:1946 install-info/install-info.c:1956
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr "%s: are deja fiºier dir: %s\n"
+
+#: install-info/install-info.c:2036
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: Specificã fiºierul Info o singurã datã.\n"
+
+#: install-info/install-info.c:2069
+#, c-format
+msgid "Extra regular expression specified, ignoring `%s'"
+msgstr ""
+
+#: install-info/install-info.c:2081
+#, c-format
+msgid "Error in regular expression `%s': %s"
+msgstr ""
+
+#: install-info/install-info.c:2139
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "argument suplimentar în linia de comandã `%s'"
+
+#: install-info/install-info.c:2143
+msgid "No input file specified; try --help for more information."
+msgstr ""
+"Nici un fiºier de intrare specificat; încercaþi --help pentru informaþii "
+"suplimentare."
+
+#: install-info/install-info.c:2146
+msgid "No dir file specified; try --help for more information."
+msgstr ""
+"Nici un fiºier dir specificat; încercaþi --help pentru informaþii "
+"suplimentare."
+
+#: install-info/install-info.c:2288
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "nici o intrare dir info în `%s'"
+
+#: install-info/install-info.c:2536
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "nici o intrare gãsitã pentru `%s'; n-am ºters nimic"
+
+#: lib/xexit.c:54
+msgid "ferror on stdout\n"
+msgstr ""
+
+#: lib/xexit.c:59
+msgid "fflush error on stdout\n"
+msgstr ""
+
+#: makeinfo/cmds.c:582 makeinfo/cmds.c:604
+#, c-format
+msgid "arguments to @%s ignored"
+msgstr "argumentele pentru @%s ignorate"
+
+#: makeinfo/cmds.c:779
+msgid "January"
+msgstr "Ianuarie"
+
+#: makeinfo/cmds.c:779
+msgid "February"
+msgstr "Februarie"
+
+#: makeinfo/cmds.c:779
+msgid "March"
+msgstr "Martie"
+
+#: makeinfo/cmds.c:779
+msgid "April"
+msgstr "Aprilie"
+
+#: makeinfo/cmds.c:779
+msgid "May"
+msgstr "Mai"
+
+#: makeinfo/cmds.c:780
+msgid "June"
+msgstr "Iunie"
+
+#: makeinfo/cmds.c:780
+msgid "July"
+msgstr "Iulie"
+
+#: makeinfo/cmds.c:780
+msgid "August"
+msgstr "August"
+
+#: makeinfo/cmds.c:780
+msgid "September"
+msgstr "Septembrie"
+
+#: makeinfo/cmds.c:780
+msgid "October"
+msgstr "Octombrie"
+
+#: makeinfo/cmds.c:781
+msgid "November"
+msgstr "Noiembrie"
+
+#: makeinfo/cmds.c:781
+msgid "December"
+msgstr "Decembrie"
+
+#: makeinfo/cmds.c:1131
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "caracter neverosimil %c în @var"
+
+#: makeinfo/cmds.c:1174
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "argumentul @sc în litere mari, prin urmare fãrã efect"
+
+#: makeinfo/cmds.c:1229
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "`{' aºteptat, dar am vãzut `%c'"
+
+#: makeinfo/cmds.c:1269
+msgid "end of file inside verb block"
+msgstr "sfârºit de fiºier în interiorul blocului de verb"
+
+#: makeinfo/cmds.c:1277
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "`}' aºteptat, dar am vãzut `%c'"
+
+#: makeinfo/cmds.c:1308
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+"@strong{Notã...] produce o referinþã încruciºatã falsã în Info; reformulaþi "
+"pentru a o evita"
+
+#: makeinfo/cmds.c:1504
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s este depãsit"
+
+#: makeinfo/cmds.c:1612
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "@sp necesitã un argument numeric pozitiv, nu `%s'"
+
+#: makeinfo/cmds.c:2023 makeinfo/footnote.c:81
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "Argument nepotrivit pentru %c%s"
+
+#: makeinfo/cmds.c:2033 makeinfo/makeinfo.c:4317
+msgid "asis"
+msgstr "aºacume"
+
+#: makeinfo/cmds.c:2035 makeinfo/cmds.c:2065 makeinfo/makeinfo.c:4319
+msgid "none"
+msgstr "nimic"
+
+#: makeinfo/cmds.c:2049
+#, c-format
+msgid "Bad argument to @%s"
+msgstr "Argument nepotrivit pentru @%s"
+
+#: makeinfo/cmds.c:2063
+msgid "insert"
+msgstr "insereazã"
+
+#: makeinfo/cmds.c:2079
+#, fuzzy, c-format
+msgid "Bad argument to @%s: %s"
+msgstr "Argument nepotrivit pentru @%s"
+
+#: makeinfo/cmds.c:2162
+#, c-format
+msgid "Expected @%s on or off, not `%s'"
+msgstr ""
+
+#: makeinfo/cmds.c:2182
+#, c-format
+msgid "Only @%s 10 or 11 is supported, not `%s'"
+msgstr ""
+
+#: makeinfo/defun.c:83
+msgid "Missing `}' in @def arg"
+msgstr "Lipseºte `}' în @def arg"
+
+#: makeinfo/defun.c:711
+#, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr "Trebuie sã fiþi în mediul `@%s' pentru a folosi `@%s'"
+
+#: makeinfo/files.c:434
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:637
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr "`%s' omis înainte de numele fiºierului de ieºire"
+
+#: makeinfo/files.c:645
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr "`%s' omis întrucât scriu la ieºirea standard (stdout)"
+
+#: makeinfo/files.c:693
+msgid "Output buffer not empty."
+msgstr "Buffer-ul de ieºire nu este gol."
+
+#: makeinfo/float.c:181
+#, c-format
+msgid "Requested float type `%s' not previously used"
+msgstr ""
+
+#: makeinfo/float.c:376 makeinfo/float.c:382 makeinfo/index.c:959
+#: makeinfo/index.c:965
+msgid "See "
+msgstr "Vezi "
+
+#: makeinfo/footnote.c:149
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "`%c%s' necesitã un argument `{...}', nu numai `%s'"
+
+#: makeinfo/footnote.c:164
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "Nici o parantezã de închidere pentru nota de subsol `%s'"
+
+#: makeinfo/footnote.c:197
+msgid "Footnote defined without parent node"
+msgstr "Nota de subsol definitã fãrã nod pãrinte"
+
+#: makeinfo/footnote.c:209
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "Nu sun permise note de subsol în note de subsol"
+
+#: makeinfo/footnote.c:301 makeinfo/index.c:187
+msgid "Footnotes"
+msgstr "Note de subsol"
+
+#: makeinfo/html.c:91
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr "%s: nu am putut deschide --css-file: %s"
+
+#: makeinfo/html.c:180
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr "%s:%d: --css-file s-a terminat cu un comentariu"
+
+#: makeinfo/html.c:426
+msgid "[unexpected] no html tag to pop"
+msgstr "[neaºteptat] nici un tag html de ridicat"
+
+#: makeinfo/html.c:800
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "[neaºteptat] nume de nod invalid: `%s'"
+
+#: makeinfo/index.c:167
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "Index necunoscut `%s'"
+
+#: makeinfo/index.c:232
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr "Info nu poate folosi `:' în intrarea de index `%s'"
+
+#: makeinfo/index.c:410
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "Indez-ul `%s' existã deja"
+
+#: makeinfo/index.c:453
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "Index-ul necunoscut `%s' ºi/sau `%s' în @synindex"
+
+#: makeinfo/index.c:676
+msgid "(line )"
+msgstr "(linie )"
+
+#: makeinfo/index.c:684
+#, c-format
+msgid "(line %*d)"
+msgstr "(linia %*d)"
+
+#: makeinfo/index.c:765
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "Index necunoscut `%s' în @printindex"
+
+#: makeinfo/index.c:834
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "Intrarea pentru index-ul `%s' în afara oricãrui nod"
+
+#: makeinfo/index.c:837 makeinfo/index.c:873
+msgid "(outside of any node)"
+msgstr "(în afara oricãrui nod)"
+
+#: makeinfo/insertion.c:161
+msgid "@item not allowed in argument to @itemize"
+msgstr "@item nu este permis în argument la @itemize"
+
+#: makeinfo/insertion.c:242
+msgid "Broken-Type in insertion_type_pname"
+msgstr "Tip-Greºit în insertion_type_pname"
+
+#: makeinfo/insertion.c:338
+msgid "Enumeration stack overflow"
+msgstr "Stivã de enumerare inundatã (overflow)"
+
+#: makeinfo/insertion.c:370
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "inundate (overflow) la tipãrire, reîncep la %c"
+
+#: makeinfo/insertion.c:639
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s necesitã un argument: formatatorul pentru %citem"
+
+#: makeinfo/insertion.c:727
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr "mediile %cfloat nu pot fi încuibãrite"
+
+#: makeinfo/insertion.c:981
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "`@end' a aºteptat `%s', dar a vãzut `%s'"
+
+#: makeinfo/insertion.c:1349
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "Nici o potrivire %cend %s'"
+
+#: makeinfo/insertion.c:1618
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s necesitã litere sau cifre"
+
+#: makeinfo/insertion.c:1718
+msgid "end of file inside verbatim block"
+msgstr "sfârºit de fiºier în interiorul blocului neformatat (verbatim)"
+
+#: makeinfo/insertion.c:1942
+#, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "@%s nu are sens în exteriorul mediului `@float'"
+
+#: makeinfo/insertion.c:1978
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "@menu vãzut înainte de primul @node, creez nodul `Vârf'"
+
+#: makeinfo/insertion.c:1979
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr ""
+"probabil cã nodul d-voastrã @top ar trebui împachetat în @ifnottex în loc de "
+"@ifinfo?"
+
+#: makeinfo/insertion.c:1991
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "@detailmenu vãzut înainte de primul nod, creez nodul `Vârf'"
+
+#: makeinfo/insertion.c:2047
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr "@%s nu are sens în exteriorul mediilor `@titlepage' ºi `@quotation'"
+
+#: makeinfo/insertion.c:2061
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "@%s nu are sens în exteriorul mediului `@titlepage'"
+
+#: makeinfo/insertion.c:2092
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "`%c%s' fãrã pereche"
+
+#: makeinfo/insertion.c:2097
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "`%c%s' necesitã ceva dupã el"
+
+#: makeinfo/insertion.c:2103
+#, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "Argument greºit `%s' pentru `@%s', folosesc `%s'"
+
+#: makeinfo/insertion.c:2200
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "@%s nu are sens în interiorul blocului `@%s'"
+
+#: makeinfo/insertion.c:2209
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "@itemx nu are sens în interiorul blocului `%s'"
+
+#: makeinfo/insertion.c:2383
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "%c%s gãsit în afara unui bloc de inserare"
+
+#: makeinfo/lang.c:1218
+#, c-format
+msgid "no default territory known for language `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:1281
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr "%s nu este un cod de limbã valid conform ISO 639"
+
+#: makeinfo/lang.c:1399
+#, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "nume de codare nerecunoscut `%s'"
+
+#: makeinfo/lang.c:1407
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "ne pare rãu, codarea `%s' nu este suportatã"
+
+#: makeinfo/lang.c:1492
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "caracter codat invalid `%s'"
+
+#: makeinfo/lang.c:1800
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr "%c%s aºteaptã `i' sau `j' ca argument, nu `%c'"
+
+#: makeinfo/lang.c:1804
+#, c-format
+msgid "%c%s expects a single character `i' or `j' as argument"
+msgstr "%c%s aºteaptã un singur caracter `i' sau `j' ca argument"
+
+#: makeinfo/macro.c:128
+#, c-format
+msgid "macro `%s' previously defined"
+msgstr "macro-ul `%s' definit anterior"
+
+#: makeinfo/macro.c:132
+#, c-format
+msgid "here is the previous definition of `%s'"
+msgstr "aici este definiþia anterioarã a lui `%s'"
+
+#: makeinfo/macro.c:359
+#, c-format
+msgid "\\ in macro expansion followed by `%s' instead of parameter name"
+msgstr "\\ in expansiunea macro urmatã de `%s' în loc de nume parametru"
+
+#: makeinfo/macro.c:401
+#, c-format
+msgid "Macro `%s' called on line %d with too many args"
+msgstr "Macro `%s' chemat pe linia %d cu prea multe argumente"
+
+#: makeinfo/macro.c:580
+#, c-format
+msgid "%cend macro not found"
+msgstr "%cend macro nu a fost gãsit"
+
+#: makeinfo/macro.c:591
+msgid "@allow-recursion is deprecated; please use @rmacro instead"
+msgstr ""
+
+#: makeinfo/macro.c:606
+msgid "@quote-arg is deprecated; arguments are quoted by default"
+msgstr ""
+
+#: makeinfo/macro.c:649
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "nepotrivire @end %s cu @%s"
+
+#: makeinfo/makeinfo.c:188
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "Prea multe erori! Am renunþat.\n"
+
+#: makeinfo/makeinfo.c:306
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: avertisment: "
+
+#: makeinfo/makeinfo.c:325 makeinfo/makeinfo.c:2340
+#, c-format
+msgid "Misplaced %c"
+msgstr "%c nelalocul lui"
+
+#: makeinfo/makeinfo.c:344
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Încercaþi `%s --help' pentru informaþii suplimentare.\n"
+
+#: makeinfo/makeinfo.c:347
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "Folosire: %s [OPÞIUNE]... FIªIER-TEXINFO...\n"
+
+#: makeinfo/makeinfo.c:350
+msgid ""
+"Translate Texinfo source documentation to various other formats, by default\n"
+"Info files suitable for reading online with Emacs or standalone GNU Info.\n"
+msgstr ""
+"Translateazã documentaþia sursã Texinfo în diferite alte formate, implicit\n"
+"fiºiere Info potrivite pentru citit online cu Emacs sau GNU Info.\n"
+
+#: makeinfo/makeinfo.c:354
+#, fuzzy, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\n"
+" --document-language=STR locale to use in translating Texinfo keywords\n"
+" for the output document (default C).\n"
+" --force preserve output even if errors.\n"
+" --help display this help and exit.\n"
+" --no-validate suppress node cross-reference validation.\n"
+" --no-warn suppress warnings (but not errors).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"General options:\n"
+" --error-limit=NUM terminã dupã NUM erori (implicit %d).\n"
+" --force pãstreazã ieºire echiar ºi dacã sunt erori.\n"
+" --help afiºeazã acest mesaj ºi terminã.\n"
+" --no-validate eliminã validarea referinþelor.\n"
+" --no-warn eliminã avertismentele (dar nu erorile).\n"
+" --reference-limit=NUM avertizeazã despre cel mult NUM referinþe "
+"(implicit %d).\n"
+" -v, --verbose explicã ce se executã.\n"
+" --version afiºeazã informaþii despre versiune ºi "
+"terminã.\n"
+
+#: makeinfo/makeinfo.c:369
+#, fuzzy, no-wrap
+msgid ""
+"Output format selection (default is to produce Info):\n"
+" --docbook output Docbook XML rather than Info.\n"
+" --html output HTML rather than Info.\n"
+" --xml output Texinfo XML rather than Info.\n"
+" --plaintext output plain text rather than Info.\n"
+msgstr ""
+"Selecþia formatului de ieºire (implicit este sã creeze Info):\n"
+" --docbook ieºire DocBook XML în loc de Info.\n"
+" --html ieºire HTML în loc de Info.\n"
+" --xml ieºire Texinfo XML în loc de Info.\n"
+" --plaintext ieºire text simplu în loc de Info.\n"
+
+#: makeinfo/makeinfo.c:377
+#, fuzzy
+msgid ""
+"General output options:\n"
+" -E, --macro-expand=FILE output macro-expanded source to FILE,\n"
+" ignoring any @setfilename.\n"
+" --no-headers suppress node separators, Node: lines, and "
+"menus\n"
+" from Info output (thus producing plain "
+"text)\n"
+" or from HTML (thus producing shorter "
+"output);\n"
+" also, write to standard output by default.\n"
+" --no-split suppress the splitting of Info or HTML "
+"output,\n"
+" generate only one output file.\n"
+" --number-sections output chapter and sectioning numbers.\n"
+" -o, --output=FILE output to FILE (or directory if split HTML).\n"
+msgstr ""
+"Opþiuni de ieºire generale:\n"
+" -E, --macro-expand FIªIER ieºire macro-expandatã în FIªIER.\n"
+" ignorînd orice @setfilename.\n"
+" --no-headers eliminã noduri separatoare, Nod: linii ºi "
+"meniuri\n"
+" din ieºire Info (producând text simplu)\n"
+" sau din HTML (producând ieºire mai scurtã);\n"
+" de asemenea, scrie implicit la ieºirea "
+"standard.\n"
+" --no-split eliminã împãrþirea ieºirii Info sau HTML,\n"
+" genereazã un singur fiºier de ieºire.\n"
+" --number-sections scrie numere de capitole ºi secþiuni.\n"
+" -o, --output=FIªIER scrie în FIªIER (director dacã multiple HTML),\n"
+
+#: makeinfo/makeinfo.c:391
+#, fuzzy, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --disable-encoding do not output accented and special characters\n"
+" in Info output based on @documentencoding.\n"
+" --enable-encoding override --disable-encoding (default).\n"
+" --fill-column=NUM break Info lines at NUM characters (default %"
+"d).\n"
+" --footnote-style=STYLE output footnotes in Info according to STYLE:\n"
+" `separate' to put them in their own node;\n"
+" `end' to put them at the end of the node, "
+"in\n"
+" which they are defined (this is the "
+"default).\n"
+" --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %"
+"d).\n"
+" If VAL is `none', do not indent; if VAL is\n"
+" `asis', preserve existing indentation.\n"
+" --split-size=NUM split Info files at size NUM (default %d).\n"
+msgstr ""
+"Options for Info and plain text:\n"
+" --enable-encoding genereazã caractere accentuate ºi speciale în\n"
+" ieºire Info bazat pe @documentencoding.\n"
+" --fill-column=NUM sparge liniile Info la NUM caractere (implicit %"
+"d).\n"
+" --footnote-style=STIL genereazã note de subsol în Info conform cu "
+"STIL:\n"
+" `separate' pentru a le pune in propriul lor "
+"nod;\n"
+" `end' pentru a le pune la sfârºitul nodului\n"
+" în care sunt definite (implicit).\n"
+" --paragraph-indent=VAL precede paragrafele Info cu VAL spaþii "
+"(implicit %d).\n"
+" dacã VAL este `none', nu pune spaþii; dacã "
+"VAL\n"
+" este `asis', pãstrezã spaþiile existente.\n"
+" --split-size=NUM împarte fiºierele Info de dimens. NUM "
+"(implicit %d).\n"
+
+#: makeinfo/makeinfo.c:409
+#, fuzzy
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+" --css-ref=URL generate reference to a CSS file.\n"
+" --internal-links=FILE produce list of internal links in FILE.\n"
+" --transliterate-file-names\n"
+" produce file names in ASCII transliteration.\n"
+msgstr ""
+"Opþiuni pentru HTML:\n"
+" --css-include=FIªIER include FIªIER în HTML <stil> ieºire;\n"
+" citeºte stdin dacã FIªIER este -.\n"
+
+#: makeinfo/makeinfo.c:419
+#, fuzzy, c-format
+msgid ""
+"Options for XML and Docbook:\n"
+" --output-indent=VAL indent XML elements by VAL spaces (default %"
+"d).\n"
+" If VAL is 0, ignorable whitespace is "
+"dropped.\n"
+msgstr ""
+"Opþiuni pentru HTML:\n"
+" --css-include=FIªIER aliniazã elemente XML cu VAL spaþii "
+"(implicit %d)\n"
+" dacã VAL e 0, spaþiile goale ce pot fi "
+"ignorate nu sunt afiºate.\n"
+
+#: makeinfo/makeinfo.c:426
+msgid ""
+"Input file options:\n"
+" --commands-in-node-names allow @ commands in node names.\n"
+" -D VAR define the variable VAR, as with @set.\n"
+" -I DIR append DIR to the @include search path.\n"
+" -P DIR prepend DIR to the @include search path.\n"
+" -U VAR undefine the variable VAR, as with @clear.\n"
+msgstr ""
+"Opþiuni fiºier de intrare:\n"
+" --commands-in-node-names permite comenzi @ în numele nodurilor.\n"
+" -D VAR defineºte variabila VAR, ca ºi @set.\n"
+" -I DIR adaugã DIR la calea de cãutare @include.\n"
+" -P DIR prepend DIR la calea de cãutare @include.\n"
+" -U VAR nedefineºte variabila VAR, ca ºi @clear.\n"
+
+#: makeinfo/makeinfo.c:435
+msgid ""
+"Conditional processing in input:\n"
+" --ifdocbook process @ifdocbook and @docbook even if\n"
+" not generating Docbook.\n"
+" --ifhtml process @ifhtml and @html even if not generating HTML.\n"
+" --ifinfo process @ifinfo even if not generating Info.\n"
+" --ifplaintext process @ifplaintext even if not generating plain text.\n"
+" --iftex process @iftex and @tex; implies --no-split.\n"
+" --ifxml process @ifxml and @xml.\n"
+" --no-ifdocbook do not process @ifdocbook and @docbook text.\n"
+" --no-ifhtml do not process @ifhtml and @html text.\n"
+" --no-ifinfo do not process @ifinfo text.\n"
+" --no-ifplaintext do not process @ifplaintext text.\n"
+" --no-iftex do not process @iftex and @tex text.\n"
+" --no-ifxml do not process @ifxml and @xml text.\n"
+"\n"
+" Also, for the --no-ifFORMAT options, do process @ifnotFORMAT text.\n"
+msgstr ""
+"Procesare condiþionalã în intrare:\n"
+" --ifdocbook proceseazã @ifdocbook º @docbook chiar dacã\n"
+" nu generezi Docbook.\n"
+" --ifhtml proceseazã @ifhtml ºi @html chiar dacã nu generezi "
+"HTML.\n"
+" --ifinfo proceseazã @ifinfo chiar dacã nu generezi Info.\n"
+" --ifplaintext proceseazã @ifplaintext chiar dacã nu generezi text "
+"simplu.\n"
+" --iftex proceseazã @iftex ºi @tex; implicã --no-split.\n"
+" --ifxml proceseazã @ifxml ºi @xml.\n"
+" --no-ifdocbook nu procesa text @ifdocbook ºi @docbook.\n"
+" --no-ifhtml nu procesa text @ifhtml ºi @html.\n"
+" --no-ifinfo nu procesa text @ifinfo.\n"
+" --no-ifplaintext nu procesa text @ifplaintext.\n"
+" --no-iftex nu procesa text @iftex ºi @tex.\n"
+" --no-ifxml nu procesa text @ifxml ºi @xml.\n"
+"\n"
+" De asemenea, pentru opþiunile --no-ifFORMAT, proceseazã text "
+"@ifnotFORMAT.\n"
+
+#: makeinfo/makeinfo.c:454
+msgid ""
+" The defaults for the @if... conditionals depend on the output format:\n"
+" if generating HTML, --ifhtml is on and the others are off;\n"
+" if generating Info, --ifinfo is on and the others are off;\n"
+" if generating plain text, --ifplaintext is on and the others are off;\n"
+" if generating XML, --ifxml is on and the others are off.\n"
+msgstr ""
+" Valori implicite pentru condiþionalele @if... depind de formatul de "
+"ieºire:\n"
+" dacã generaþi HTML, --ifhtml este selectat iar restul sunt deselectate;\n"
+" dacã generaþi, --ifinfo este selectat iar restul sunt deselectate;\n"
+" dacã generaþi text simplu, --ifplaintext este selectat iar restul sunt "
+"deselectate;\n"
+
+#: makeinfo/makeinfo.c:462
+#, fuzzy
+msgid ""
+"Examples:\n"
+" makeinfo foo.texi write Info to foo's @setfilename\n"
+" makeinfo --html foo.texi write HTML to @setfilename\n"
+" makeinfo --xml foo.texi write Texinfo XML to @setfilename\n"
+" makeinfo --docbook foo.texi write DocBook XML to @setfilename\n"
+" makeinfo --no-headers foo.texi write plain text to standard "
+"output\n"
+"\n"
+" makeinfo --html --no-headers foo.texi write html without node lines, "
+"menus\n"
+" makeinfo --number-sections foo.texi write Info with numbered sections\n"
+" makeinfo --no-split foo.texi write one Info file however big\n"
+msgstr ""
+"Exemple:\n"
+" makeinfo foo.texi scrie Info în @setfilename-ul lui "
+"foo\n"
+" makeinfo --html foo.texi scrie HTML în @setfilename\n"
+" makeinfo --xml foo.texi scrie Texinfo XML în @setfilename\n"
+" makeinfo --docbook foo.texi scrie DocBook XML în @setfilename\n"
+" makeinfo --no-headers foo.texi scrie text simplu la ieºirea "
+"standard\n"
+"\n"
+" makeinfo --html --no-headers foo.texi scrie html fãrã linii de noduri, "
+"meniuri\n"
+" makeinfo --number-sections foo.texi scrie Info fãrã secþiuni numerotate\n"
+" makeinfo --no-split foo.texi scrie un singur fiºier Info "
+"indiferent cât de mare\n"
+
+#: makeinfo/makeinfo.c:622
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr "%s: Ignor valoare nerecunoscutã TEXINFO_OUTPUT_FORMAT `%s'.\n"
+
+#: makeinfo/makeinfo.c:670 makeinfo/makeinfo.c:696 makeinfo/makeinfo.c:720
+#: makeinfo/makeinfo.c:780
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr "%s: %s arg trebuie sã fie numeric, nu `%s'.\n"
+
+#: makeinfo/makeinfo.c:683
+#, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "%s: nu am putut deschide ieºirea expansiunii macro-ului `%s'"
+
+#: makeinfo/makeinfo.c:688
+#, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "%s: nu am putut deschide ieºirea expansiunii macro-ului `%s'.\n"
+
+#: makeinfo/makeinfo.c:733
+#, fuzzy, c-format
+msgid "%s: could not open internal links output `%s'"
+msgstr "%s: nu am putut deschide ieºirea expansiunii macro-ului `%s'"
+
+#: makeinfo/makeinfo.c:738
+#, fuzzy, c-format
+msgid "%s: ignoring second internal links output `%s'.\n"
+msgstr "%s: nu am putut deschide ieºirea expansiunii macro-ului `%s'.\n"
+
+#: makeinfo/makeinfo.c:751
+#, c-format
+msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
+msgstr ""
+"%s: --paragraph-indent arg trebuie sã fie numeric/`none'/`asis', nu `%s'.\n"
+
+#: makeinfo/makeinfo.c:769
+#, c-format
+msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
+msgstr ""
+"%s: --footnote-style arg trebuie sã fie `separate' sau `end', nu `%s'.\n"
+
+#: makeinfo/makeinfo.c:844
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: lipseºte fiºierul argument.\n"
+
+#: makeinfo/makeinfo.c:1041 makeinfo/makeinfo.c:4166
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr "Comandã pe multiple linii %c%s folositã incorect"
+
+#: makeinfo/makeinfo.c:1044
+#, c-format
+msgid "Expected `%s'"
+msgstr "Am aºteptat `%s'"
+
+#: makeinfo/makeinfo.c:1521
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "Nu pot crea directorul `%s': %s"
+
+#: makeinfo/makeinfo.c:1567
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "Nici un `%s' nu a fost gãsit în `%s'"
+
+#: makeinfo/makeinfo.c:1647
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr ""
+"%s: Omite expasiunea macro la ieºire întrucât ieºirea Info merge acolo.\n"
+
+#: makeinfo/makeinfo.c:1677
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "Creez fiºierul %s `%s' din `%s'.\n"
+
+#: makeinfo/makeinfo.c:1744
+#, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: ªterg fiºierul de ieºire macro `%s' din cauza erorilor; folosiþi --force "
+"pentru a-l pãstra.\n"
+
+#: makeinfo/makeinfo.c:1799
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: fiºierul de ieºire `%s' din cauza erorilor; folosiþi --force pentru a-l "
+"pãstra.\n"
+
+#: makeinfo/makeinfo.c:1818
+#, fuzzy, c-format
+msgid ""
+"%s: Removing internal links output file `%s' due to errors; use --force to "
+"preserve.\n"
+msgstr ""
+"%s: fiºierul de ieºire `%s' din cauza erorilor; folosiþi --force pentru a-l "
+"pãstra.\n"
+
+#: makeinfo/makeinfo.c:2113
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "Comandã necunoscutã `%s'"
+
+#: makeinfo/makeinfo.c:2135
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr "Folosiþi paranteze pentru a da o comandã ca argument lui @%s"
+
+#: makeinfo/makeinfo.c:2394
+#, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s am aºteptat paranteze"
+
+#: makeinfo/makeinfo.c:2407
+msgid "Unmatched }"
+msgstr "} fãrã pereche"
+
+#: makeinfo/makeinfo.c:2455
+msgid "NO_NAME!"
+msgstr "NICI_UN_NUME!"
+
+#: makeinfo/makeinfo.c:2476
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s lipseºte paranteza de închidere"
+
+#: makeinfo/makeinfo.c:3482
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "Fiºierul @image `%s' (pentru HTML) nu poate fi citit: %s"
+
+#: makeinfo/makeinfo.c:3488
+#, c-format
+msgid "No such file `%s'"
+msgstr "Nici un fiºier `%s'"
+
+#: makeinfo/makeinfo.c:3624
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "Fiºierul @image `%s' (pentru text) nu poate fi citit: %s"
+
+#: makeinfo/makeinfo.c:3633
+msgid "@image missing filename argument"
+msgstr "@image lipseºte fiºierul argument."
+
+#: makeinfo/makeinfo.c:3851
+#, c-format
+msgid "undefined flag: %s"
+msgstr "marcaj nedefinit: %s"
+
+#: makeinfo/makeinfo.c:3852
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{Nici o valoare pentru `%s'}"
+
+#: makeinfo/makeinfo.c:3904
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s necesitã un nume"
+
+#: makeinfo/makeinfo.c:4010
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "Am ajuns la eof înainte de a potrivi @end %s"
+
+#: makeinfo/makeinfo.c:4258
+#, c-format
+msgid "`%.40s...' is too long for expansion; not expanded"
+msgstr "`%.40s...' este prea lung pentru expansiune; nu a fost expandat"
+
+#: makeinfo/multi.c:116
+msgid "Missing } in @multitable template"
+msgstr "} lipsã în ºablonul @multitable"
+
+#: makeinfo/multi.c:260
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "ignor text aiurea `%s' dupã @multitable"
+
+#: makeinfo/multi.c:400
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "Prea multe coloane în articol multitabel (max %d)"
+
+#: makeinfo/multi.c:563
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "[neaºteptat] nu pot selecta coloana #%d în multitabel"
+
+#: makeinfo/multi.c:592
+msgid "ignoring @tab outside of multitable"
+msgstr "ignor @tab în afara multitabelului"
+
+#: makeinfo/multi.c:640
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** Ieºirea multitabel din ultimul rând:\n"
+
+#: makeinfo/multi.c:643
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* coloana #%d: ieºire = %s\n"
+
+#: makeinfo/node.c:279
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "Nodul `%s' definit anterior la linia %d"
+
+#: makeinfo/node.c:647
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "Formatez nodul %s...\n"
+
+#: makeinfo/node.c:714
+#, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr "Nodul `%s' cere o comandã de secþionare (ex., %c%s)"
+
+#: makeinfo/node.c:878
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "Nici un nume specificat pentru comanda `%c%s'"
+
+#: makeinfo/node.c:919 makeinfo/node.c:1163
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr "Ancoraj `%s' ºi nodul `%s' aratã cãtre acelaºi nume de fiºier"
+
+#: makeinfo/node.c:922
+msgid "This @anchor command ignored; references to it will not work"
+msgstr ""
+"Aceastã comandã @anchor ignoratã; referinþele cãtre acesta nu vor merge"
+
+#: makeinfo/node.c:924 makeinfo/node.c:1166
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr "Redenumeºte acest ancoraj sau foloseºte opþiunea `--no-split'"
+
+#: makeinfo/node.c:954
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr "ªir neaºteptat la sfârºitul fiºierului HTML spart `%s'"
+
+#: makeinfo/node.c:1160
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr "Ancoraj `%s' ºi `%s' aratã cãtre acelaºi nume de fiºier"
+
+#: makeinfo/node.c:1165
+msgid "@anchor command ignored; references to it will not work"
+msgstr "Comandã @anchor ignoratã; referinþele cãtre acesta nu vor merge"
+
+#: makeinfo/node.c:1362
+#, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr ""
+"referinþa %s cãtre nodul inexistent `%s' (probabil secþionare incorectã?)"
+
+#: makeinfo/node.c:1462
+#, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr ""
+"Urmãtorul câmp de nod `%s' nu este referit (probabil secþionare incorectã?)"
+
+#: makeinfo/node.c:1465
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "Acest nod (%s) are un Prec incorect"
+
+#: makeinfo/node.c:1520
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "Câmpul Prec al nodului `%s' nu este referit"
+
+#: makeinfo/node.c:1524
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "Acest nod (%s) are referinþa Urmãtor incorectã"
+
+#: makeinfo/node.c:1536
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr "`%s' nu are nici un câmp Sus (probabil secþionare incorectã?)"
+
+#: makeinfo/node.c:1605
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr "Nodului `%s' îi lipseºte articolul pentru `%s' deºi îi este þinta Sus"
+
+#: makeinfo/node.c:1637
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "nod nereferit `%s'"
+
+#: makeinfo/node.c:1727
+#, c-format
+msgid "Removing %s\n"
+msgstr "ªterg %s\n"
+
+#: makeinfo/node.c:1731
+#, c-format
+msgid "Can't remove file `%s': %s"
+msgstr "Nu pot ºterge fisierul `%s': %s"
+
+#: makeinfo/sectioning.c:122
+#, c-format
+msgid "Appendix %c"
+msgstr "Anexã %c"
+
+#: makeinfo/sectioning.c:467
+#, c-format
+msgid "Internal error (search_sectioning) `%s'!"
+msgstr "Eroare internã (search_sectioning) `%s'!"
+
+#: makeinfo/sectioning.c:563
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "Eroare internã (search_sectioning) \"%s\"!"
+
+#: makeinfo/sectioning.c:624
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "%c%s este depãºitã; foloseºte %c%s în schimb"
+
+#: makeinfo/sectioning.c:640
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "Nodul cu %ctop ca ºi secþiune existã deja"
+
+#: makeinfo/sectioning.c:648
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "Aici este nodul %ctop"
+
+#: makeinfo/sectioning.c:664
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "%ctop folosit înaintea lui %cnode, implicit cãtre %s"
+
+#: makeinfo/xml.c:1669
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "Fiºierul @image `%s' nu poate fi citit: %s"
+
+#: makeinfo/xml.c:2014
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+"@headitem ca ultimul articol din @multitable produce documenteDocbook "
+"invalide"
+
+#: makeinfo/xml.c:2150
+msgid "of"
+msgstr "din"
+
+#: makeinfo/xml.c:2155
+msgid "on"
+msgstr "pe"
+
+#: makeinfo/xref.c:127
+msgid "First argument to cross-reference may not be empty"
+msgstr ""
+
+#: makeinfo/xref.c:252
+#, c-format
+msgid "Empty file name for HTML cross reference in `%s'"
+msgstr ""
+
+#: makeinfo/xref.c:387
+msgid "End of file reached while looking for `.' or `,'"
+msgstr ""
+
+#: makeinfo/xref.c:390
+#, c-format
+msgid "`.' or `,' must follow @%s, not `%c'"
+msgstr ""
+
+#: makeinfo/xref.c:392
+#, fuzzy
+msgid "for cross-references in parentheses, use @pxref"
+msgstr "Nici o referinþã la acelaºi pasaj în acest nod."
+
+#: makeinfo/xref.c:435
+msgid "First argument to @inforef may not be empty"
+msgstr ""
+
+#: util/texindex.c:223
+msgid "display this help and exit"
+msgstr "afiºeazã acest mesaj ºi terminã"
+
+#: util/texindex.c:225
+msgid "send output to FILE"
+msgstr "trimite ieºire în FIªIER"
+
+#: util/texindex.c:227
+msgid "display version information and exit"
+msgstr "afiºeazã informaþii despre versiune ºi terminã"
+
+#: util/texindex.c:237
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "Folosire: %s [OPÞIUNI]... FIªIER...\n"
+
+#: util/texindex.c:238
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr "Genereazã un index sortat pentru fiecare FIªIER de ieºire TeX.\n"
+
+#: util/texindex.c:241
+#, c-format
+msgid "Usually FILE... is specified as `foo.%c%c' for a document `foo.texi'.\n"
+msgstr ""
+"De obicei FIªIER... este specificat ca `foo.%c%c' pentru un document 'foo."
+"texi'.\n"
+
+#: util/texindex.c:243
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Opþiuni:\n"
+
+#: util/texindex.c:743
+#, c-format
+msgid "failure reopening %s"
+msgstr "am eºuat sã redeschid %s"
+
+#: util/texindex.c:758 util/texindex.c:786
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: nu este un fiºier index texinfo"
+
+#: util/texindex.c:993
+#, c-format
+msgid "No page number in %s"
+msgstr "Nici un numãr de paginã în %s"
+
+#: util/texindex.c:1066
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr "intrarea %s urmeazã o intrare cu nume secundar"
+
+#~ msgid ""
+#~ "\\%-10[search] Search forward for a specified string\n"
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr ""
+#~ "\\%-10[search] Cautã înainte un ºir specificat\n"
+#~ " ºi selecteazã nodul în care acesta este gãsit.\n"
+
+#~ msgid ""
+#~ "\\%-10[goto-node] Move to node specified by name.\n"
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ msgstr ""
+#~ "\\%-10[goto-node] Mergi la nodul specificat prin nume.\n"
+#~ " Puteþi include ºi un nume de fiºier, ca în (NUMEFIªIER)"
+#~ "NUMENOD.\n"
+
+#, fuzzy
+#~ msgid "\\%-10[next-node] Move to the next node of current section.\n"
+#~ msgstr "\\%-10[next-node] Mergi la \"urmãtorul\" nod al acestui nod.\n"
+
+#~ msgid ""
+#~ "\\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+#~ "node] (DIR)'.\n"
+#~ msgstr ""
+#~ "\\%-10[dir-node] Mergi la nodul `director'. Echivalent cu `\\[goto-"
+#~ "node] (DIR)'.\n"
+
+#~ msgid ""
+#~ "\\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] "
+#~ "Top'.\n"
+#~ msgstr ""
+#~ "\\%-10[top-node] Mergi la nodul Vârf. Echivalent cu `\\[goto-node] "
+#~ "Top'.\n"
+
+#~ msgid ""
+#~ "\\%-10[search-backward] Search backward for a specified string\n"
+#~ " and select the node in which the previous occurrence is "
+#~ "found.\n"
+#~ msgstr ""
+#~ "\\%-10[search-backward] Cautã înapoi un ºir specificat\n"
+#~ " ºi selecteazã nodul în care acesta este gãsit.\n"
+
+#~ msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+#~ msgstr ""
+#~ "--- Folosiþi `\\[history-node]' sau `\\[kill-node]' pentru a termina ---\n"
+
+#, fuzzy
+#~ msgid "\\%-10[move-to-prev-xref] Skip to previous hypertext link [*].\n"
+#~ msgstr ""
+#~ "\\%-10[move-to-prev-xref] Sari la legãtura hypertext precedentã din "
+#~ "acest nod.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]... [MENU-ITEM...]\n"
+#~ "\n"
+#~ "Read documentation in Info format.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --apropos=STRING look up STRING in all indices of all "
+#~ "manuals.\n"
+#~ " -d, --directory=DIR add DIR to INFOPATH.\n"
+#~ " --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+#~ " -f, --file=FILENAME specify Info file to visit.\n"
+#~ " -h, --help display this help and exit.\n"
+#~ " --index-search=STRING go to node pointed by index entry STRING.\n"
+#~ " -n, --node=NODENAME specify nodes in first visited Info file.\n"
+#~ " -o, --output=FILENAME output selected nodes to FILENAME.\n"
+#~ " -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+#~ " --no-raw-escapes output escapes as literal text.\n"
+#~ " --restore=FILENAME read initial keystrokes from FILENAME.\n"
+#~ " -O, --show-options, --usage go to command-line options node.\n"
+#~ "%s --subnodes recursively output menu items.\n"
+#~ " -w, --where, --location print physical location of Info file.\n"
+#~ " --vi-keys use vi-like and less-like key bindings.\n"
+#~ " --version display version information and exit.\n"
+#~ "\n"
+#~ "The first non-option argument, if present, is the menu entry to start "
+#~ "from;\n"
+#~ "it is searched for in all `dir' files along INFOPATH.\n"
+#~ "If it is not present, info merges all `dir' files and shows the result.\n"
+#~ "Any remaining arguments are treated as the names of menu\n"
+#~ "items relative to the initial node visited.\n"
+#~ "\n"
+#~ "Examples:\n"
+#~ " info show top-level dir menu\n"
+#~ " info emacs start at emacs node from top-level dir\n"
+#~ " info emacs buffers start at buffers node within emacs manual\n"
+#~ " info --show-options emacs start at node with emacs' command line "
+#~ "options\n"
+#~ " info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+#~ " info -f ./foo.info show file ./foo.info, not searching dir\n"
+#~ msgstr ""
+#~ "Folosire: %s [OPÞIUNE]... [ARTICOL-MENIU...]\n"
+#~ "\n"
+#~ "Citeºte documentaþie în formatul Info.\n"
+#~ "\n"
+#~ "Opþiuni:\n"
+#~ " --apropos=ªIR cautã ªIR în toþi indexurile tuturor "
+#~ "manualelor.\n"
+#~ " -d, --directory=DIR adaugã DIR la INFOPATH.\n"
+#~ " --dribble=NUMEFIªIER aminteºte ce tasteazã utilizatorul în "
+#~ "NUMEFIªIER.\n"
+#~ " -f, --file=NUMEFIªIER specificã fiºierul Info de vizitat.\n"
+#~ " -h, --help afiºeazã acest mesaj ºi terminã.\n"
+#~ " --index-search=STRING mergi la nodul referit de intrarea "
+#~ "indexului ªIR.\n"
+#~ " -n, --node=NUMENOD specificã nodurile în primul fiºier Info "
+#~ "vizitat.\n"
+#~ " -o, --output=NUMEFIªIER scrie nodurile selectate în NUMEFIªIER.\n"
+#~ " -R, --raw-escapes scrie \"raw\" escape-uri ANSI (implicit).\n"
+#~ " --no-raw-escapes scrie escape-urile ca text normal.\n"
+#~ " --restore=NUMEFIªIER citeºte apãsãrile de teste iniþiale din "
+#~ "NUMEFIªIER.\n"
+#~ " -O, --show-options, --usage mergi la nodul cu opþiunile liniei de "
+#~ "comandã.\n"
+#~ "%s --subnodes afiºeazã recursiv articolele de meniu.\n"
+#~ " -w, --where, --location afiºeazã locaþia fizicã a fiºierului "
+#~ "Info.\n"
+#~ " --vi-keys foloseºte key bindings similare cu cele "
+#~ "din vi ºi less.\n"
+#~ " --version afiºeazã informaþii versiune ºi terminã.\n"
+#~ "\n"
+#~ "Primul argument ce nu e o opþiune, dacã e prezent, este articolul de "
+#~ "meniu\n"
+#~ "de la care se începe; acesta este cãutat în toate fiºierele `dir' din\n"
+#~ "INFOPATH. Dacã acesta nu este prezent, info combinã toate fiºierele "
+#~ "`dir'\n"
+#~ "ºi aratã rezultatul. Restul argumentelor sunt tratate ca nume de "
+#~ "articole\n"
+#~ "de meniu relative la nodul vizitat iniþial.\n"
+#~ "\n"
+#~ "Exemple:\n"
+#~ " info aratã conþinutul dir-ectorului din meniul\n"
+#~ " nivelului de vârf\n"
+#~ " info emacs începe la nodul emacs din dir-ectorul "
+#~ "nivelului\n"
+#~ " de vârf\n"
+#~ " info emacs buffers începe la nodul buffere din manualul emacs\n"
+#~ " info --show-options emacs începe la nodul cu opþiunile liniei de\n"
+#~ " comandã pentru emacs\n"
+#~ " info -f ./foo.info aratã fiºierul ./foo.info, nu cãuta dir\n"
+
+#~ msgid ""
+#~ " Picking a menu item causes another node to be selected.\n"
+#~ msgstr ""
+#~ " Alegând un articol de meniu face ca alt nod sã fie "
+#~ "selectat.\n"
+
+#~ msgid ""
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ msgstr ""
+#~ " Puteþi include ºi un nume de fiºier, ca în (NUMEFIªIER)"
+#~ "NUMENOD.\n"
+
+#~ msgid " %-10s Search backward for a specified string\n"
+#~ msgstr " %-10s Cautã înapoi un ºir specificat\n"
+
+#~ msgid ""
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr " ºi selecteazã nodul în care acesta este gãsit.\n"
+
+#~ msgid "Following Next node..."
+#~ msgstr "Urmeazã nodul Urmãtor..."
+
+#~ msgid "Selecting first menu item..."
+#~ msgstr "Selectare primul articol din meniu..."
+
+#~ msgid "Selecting Next node..."
+#~ msgstr "Selectare nod Urmãtor..."
+
+#~ msgid "Moving Up %d time(s), then Next."
+#~ msgstr "Merg în Sus %d ori, apoi Urmãtor."
+
+#~ msgid "Moving Prev in this window."
+#~ msgstr "Mut Prec în aceatã fereastã"
+
+#~ msgid "Moving Up in this window."
+#~ msgstr "Merg în Sus în aceastã fe"
+
+#~ msgid "Moving to `Prev's last menu item."
+#~ msgstr "Merg la ultimul articol din meniul `Prec'"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "Function"
+#~ msgstr "Funcþie"
+
+#~ msgid "Macro"
+#~ msgstr "Macro"
+
+#~ msgid "Special Form"
+#~ msgstr "Formã Specialº"
+
+#~ msgid "Variable"
+#~ msgstr "Variabilã"
+
+#~ msgid "User Option"
+#~ msgstr "Opþiune Utilizator"
+
+#~ msgid "Instance Variable"
+#~ msgstr "Instanþiere Variabilã"
+
+#~ msgid "Method"
+#~ msgstr "Metodã"
+
+#~ msgid "Untitled"
+#~ msgstr "Fãrã titlu"
+
+#~ msgid "This is %s, produced by makeinfo version %s from %s.\n"
+#~ msgstr "Acesta este %s, produs de makeinfo versiunea %s din %s.\n"
+
+#~ msgid "Next:"
+#~ msgstr "Urmãtor:"
+
+#~ msgid "Previous:"
+#~ msgstr "Precedent:"
+
+#~ msgid "Up:"
+#~ msgstr "Sus:"
+
+#~ msgid "Menu"
+#~ msgstr "Meniu"
+
+#~ msgid "Cross"
+#~ msgstr "Traverseazã"
+
+#~ msgid "Prev"
+#~ msgstr "Prec"
+
+#~ msgid "Up"
+#~ msgstr "Sus"
+
+#, fuzzy
+#~ msgid "see "
+#~ msgstr "Vezi "
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+#~ "\n"
+#~ "Add or remove entries in INFO-FILE from the Info directory DIR-FILE.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --debug report what is being done.\n"
+#~ " --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+#~ " don't insert any new entries.\n"
+#~ " --dir-file=NAME specify file name of Info directory file.\n"
+#~ " This is equivalent to using the DIR-FILE argument.\n"
+#~ " --entry=TEXT insert TEXT as an Info directory entry.\n"
+#~ " TEXT should have the form of an Info menu item line\n"
+#~ " plus zero or more extra lines starting with "
+#~ "whitespace.\n"
+#~ " If you specify more than one entry, they are all "
+#~ "added.\n"
+#~ " If you don't specify any entries, they are "
+#~ "determined\n"
+#~ " from information in the Info file itself.\n"
+#~ " --help display this help and exit.\n"
+#~ " --info-file=FILE specify Info file to install in the directory.\n"
+#~ " This is equivalent to using the INFO-FILE argument.\n"
+#~ " --info-dir=DIR same as --dir-file=DIR/dir.\n"
+#~ " --item=TEXT same as --entry TEXT.\n"
+#~ " An Info directory entry is actually a menu item.\n"
+#~ " --quiet suppress warnings.\n"
+#~ " --remove same as --delete.\n"
+#~ " --remove-exactly only remove if the info file name matches exactly;\n"
+#~ " .info and/or .gz suffixes are not ignored.\n"
+#~ " --section=SEC put this file's entries in section SEC of the "
+#~ "directory.\n"
+#~ " If you specify more than one section, all the "
+#~ "entries\n"
+#~ " are added in each of the sections.\n"
+#~ " If you don't specify any sections, they are "
+#~ "determined\n"
+#~ " from information in the Info file itself.\n"
+#~ " --section-regex=R if an entry is added to a section that does not "
+#~ "exist,\n"
+#~ " look for a section matching basic regular expression "
+#~ "R\n"
+#~ " (and ignoring case) before starting a new section.\n"
+#~ " --test suppress updating of DIR-FILE.\n"
+#~ " --silent suppress warnings.\n"
+#~ " --version display version information and exit.\n"
+#~ msgstr ""
+#~ "Usage: %s [OPÞIUNE]... [FIªIER-INFO [FIªIER-DIR]]\n"
+#~ "\n"
+#~ "Instaleazã sau ºterge intrãri dir din FIªIER-INFO în fiºier director "
+#~ "Info \n"
+#~ "FIªIER-DIR.\n"
+#~ "\n"
+#~ "Opþiuni:\n"
+#~ " --delete ºterge intrãri existente pentru FIªIER-INFO din FIªIER-"
+#~ "DIR;\n"
+#~ " nu insera nici o nouã intrare.\n"
+#~ " --dir-file=NUME specificã nume fiºier pentru fiºierul director Info.\n"
+#~ " This is equivalent to using the DIR-FILE argument.\n"
+#~ " --entry=TEXT insereazã TEXT ca o intrare de director Info.\n"
+#~ " TEXT ar trebui sã aibã forma unei linii articol "
+#~ "meniu Info \n"
+#~ " plus zero sau mai multe extra linii începând cu "
+#~ "spaþiu.\n"
+#~ " Dacã precizaþi mai mult de o intrare, toate sunt "
+#~ "adãugate.\n"
+#~ " Dacã nu precizaþi nici o intrare, ele sunt "
+#~ "determinate\n"
+#~ " din informaþiile din fiºierul Info.\n"
+#~ " --help afiºeazã acest mesaj ºi terminã.\n"
+#~ " --info-file=FIªIER specificã fiºierul Info de instalat în director.\n"
+#~ " Acesta este echivalent cu folosirea argumentului "
+#~ "FIªIER-INFO.\n"
+#~ " --info-dir=DIR acelaºi efect ca --dir-file=DIR/dir.\n"
+#~ " --item=TEXT acelaºi efect ca --entry TEXT.\n"
+#~ " O intrare director Info este de fapt un articol de "
+#~ "meniu.\n"
+#~ " --quiet suprimã avertismentele.\n"
+#~ " --remove acelaºi efect ca --delete.\n"
+#~ " --section=SEC pune intrãrile acestui fiºier în secþiunea SEC, toate\n"
+#~ " intrãrile sunt adãugate în fiecare dintre secþiuni.\n"
+#~ " Dacã nu specificaþi nici o secþiune, acestea sunt\n"
+#~ " determinate din informaþiile din fiºierul Info.\n"
+#~ " --version afiºeazã informaþii depre versiune ºi terminã.\n"
+
+#~ msgid "menu item `%s' already exists, for file `%s'"
+#~ msgstr "articol meniu `%s' existã deja, pentru fiºier `%s'"
+
+#~ msgid "\\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+#~ msgstr ""
+#~ "\\%-10[menu-digit] Alege primul ... al nouãlea articol în meniul "
+#~ "nodului.\n"
+
+#~ msgid "node `%s' has been referenced %d times"
+#~ msgstr "nodul `%s' a fost referit de %d ori"
+
+#, fuzzy
+#~ msgid ""
+#~ "Copyright (C) %s Free Software Foundation, Inc.\n"
+#~ "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n"
+#~ "PARTICULAR PURPOSE. You may redistribute copies of GNU %s\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the file named COPYING.\n"
+#~ msgstr ""
+#~ "Copyright (C) %s Free Software Foundation, Inc.\n"
+#~ "Nu existã NICI o garanþie. Puteþi redistribui acest software conform\n"
+#~ "termenilor Licenþei Publice Generale GNU (GNU GPL). Pentru informaþii\n"
+#~ "suplimentare despre aceste chestiuni, vedeþi fiºierul numit COPYING.\n"
+
+#~ msgid "@quote-arg only useful for single-argument macros"
+#~ msgstr "@quote-arg folositor numai pentru macro-uri cu un singur argument"
+
+#~ msgid "Table of Contents"
+#~ msgstr "Cuprins"
+
+#~ msgid "Short Contents"
+#~ msgstr "Rezumate"
+
+#~ msgid "keep temporary files around after processing"
+#~ msgstr "pãstreazã fiºierele temporare dupã procesare"
+
+#~ msgid "do not keep temporary files around after processing (default)"
+#~ msgstr "nu pãstra fiºierele temporare dupã procesare (implicit)"
+
+#~ msgid ""
+#~ " file, and select the node referenced by the first entry "
+#~ "found.\n"
+#~ msgstr ""
+#~ " ºi selecteazã nodul referit de prima intrare gãsitã.\n"
+
+#~ msgid ""
+#~ "There is NO warranty. You may redistribute this software\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the files named COPYING.\n"
+#~ msgstr ""
+#~ "Nu existã NICI o garanþie. Puteþi redistribui acest software conform\n"
+#~ "termenilor Licenþei Publice Generale GNU (GNU GPL). Pentru informaþii\n"
+#~ "suplimentare despre aceste chestiuni, vedeþi fiºierul numit COPYING.\n"
diff --git a/po/ru.gmo b/po/ru.gmo
new file mode 100644
index 0000000..44815e1
--- /dev/null
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
new file mode 100644
index 0000000..cbd695e
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,3537 @@
+# ðÅÒÅ×ÏÄÙ ÓÏÏÂÝÅÎÉÊ ÄÌÑ GNU Texinfo.
+# Copyright (C) 1999 Free Software Foundation, Inc.
+# Oleg S. Tihonov <ost@tatnipi.ru>, 1999, 2001, 2002, 2003, 2004, 2005
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo 4.7.94\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2008-09-18 20:38+0200\n"
+"PO-Revision-Date: 2005-02-07 09:27+0300\n"
+"Last-Translator: Oleg S. Tihonov <ost@tatnipi.ru>\n"
+"Language-Team: Russian <ru@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=koi8-r\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: gnulib/lib/error.c:125
+msgid "Unknown system error"
+msgstr ""
+
+#: gnulib/lib/getopt.c:526 gnulib/lib/getopt.c:542
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: ÎÅÏÄÎÏÚÎÁÞÎÙÊ ËÌÀÞ `%s'\n"
+
+#: gnulib/lib/getopt.c:575 gnulib/lib/getopt.c:579
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: ËÌÀÞ `--%s' ÄÏÌÖÅÎ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ ÂÅÚ ÁÒÇÕÍÅÎÔÁ\n"
+
+#: gnulib/lib/getopt.c:588 gnulib/lib/getopt.c:593
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: ËÌÀÞ `%c%s' ÄÏÌÖÅÎ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ ÂÅÚ ÁÒÇÕÍÅÎÔÁ\n"
+
+#: gnulib/lib/getopt.c:636 gnulib/lib/getopt.c:655 gnulib/lib/getopt.c:971
+#: gnulib/lib/getopt.c:990
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: ËÌÀÞ `%s' ÄÏÌÖÅÎ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ c ÁÒÇÕÍÅÎÔÏÍ\n"
+
+#: gnulib/lib/getopt.c:693 gnulib/lib/getopt.c:696
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ËÌÀÞ `--%s'\n"
+
+#: gnulib/lib/getopt.c:704 gnulib/lib/getopt.c:707
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ËÌÀÞ `%c%s'\n"
+
+#: gnulib/lib/getopt.c:759 gnulib/lib/getopt.c:762
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: ÎÅÄÏÐÕÓÔÉÍÙÊ ËÌÀÞ -- %c\n"
+
+#: gnulib/lib/getopt.c:768 gnulib/lib/getopt.c:771
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ÎÅ×ÅÒÎÙÊ ËÌÀÞ -- %c\n"
+
+#: gnulib/lib/getopt.c:823 gnulib/lib/getopt.c:839 gnulib/lib/getopt.c:1043
+#: gnulib/lib/getopt.c:1061
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: ËÌÀÞ %c ÄÏÌÖÅÎ ÂÙ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ c ÁÒÇÕÍÅÎÔÏÍ\n"
+
+#: gnulib/lib/getopt.c:892 gnulib/lib/getopt.c:908
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: ÎÅÏÄÎÏÚÎÁÞÎÙÊ ËÌÀÞ `-W %s'\n"
+
+#: gnulib/lib/getopt.c:932 gnulib/lib/getopt.c:950
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: ËÌÀÞ `-W %s' ÄÏÌÖÅÎ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ ÂÅÚ ÁÒÇÕÍÅÎÔÁ\n"
+
+#: gnulib/lib/xalloc-die.c:34 gnulib/lib/xsetenv.c:37
+#, c-format
+msgid "memory exhausted"
+msgstr ""
+
+#: info/echo-area.c:283 info/session.c:966
+msgid "Move forward a character"
+msgstr "óÍÅÓÔÉÔØÓÑ ÎÁ ÓÉÍ×ÏÌ ×ÐÅÒÅÄ"
+
+#: info/echo-area.c:295 info/session.c:993
+msgid "Move backward a character"
+msgstr "óÍÅÓÔÉÔØÓÑ ÎÁ ÓÉÍ×ÏÌ ÎÁÚÁÄ"
+
+#: info/echo-area.c:307
+msgid "Move to the start of this line"
+msgstr "óÍÅÓÔÉÔØÓÑ × ÎÁÞÁÌÏ ÓÔÒÏËÉ"
+
+#: info/echo-area.c:312
+msgid "Move to the end of this line"
+msgstr "óÍÅÓÔÉÔØÓÑ × ËÏÎÅÃ ÓÔÒÏËÉ"
+
+#: info/echo-area.c:320 info/session.c:1025
+msgid "Move forward a word"
+msgstr "óÍÅÓÔÉÔØÓÑ ÎÁ ÓÌÏ×Ï ×ÐÅÒÅÄ"
+
+#: info/echo-area.c:360 info/session.c:1049
+msgid "Move backward a word"
+msgstr "óÍÅÓÔÉÔØÓÑ ÎÁ ÓÌÏ×Ï ÎÁÚÁÄ"
+
+#: info/echo-area.c:400
+msgid "Delete the character under the cursor"
+msgstr "õÄÁÌÉÔØ ÓÌÅÄÕÀÝÉÊ ÓÉÍ×ÏÌ"
+
+#: info/echo-area.c:430
+msgid "Delete the character behind the cursor"
+msgstr "õÄÁÌÉÔØ ÐÒÅÄÙÄÕÝÉÊ ÓÉÍ×ÏÌ"
+
+#: info/echo-area.c:451
+msgid "Cancel or quit operation"
+msgstr "ïÔÍÅÎÉÔØ ÉÌÉ ÐÒÅÒ×ÁÔØ ÄÅÊÓÔ×ÉÅ"
+
+#: info/echo-area.c:466
+msgid "Accept (or force completion of) this line"
+msgstr "ðÒÉÎÑÔØ (ÉÌÉ ÚÁ×ÅÒÛÉÔØ) ÔÅËÕÝÕÀ ÓÔÒÏËÕ"
+
+#: info/echo-area.c:471
+msgid "Insert next character verbatim"
+msgstr "÷ÓÔÁ×ÉÔØ ÓÌÅÄÕÀÝÉÊ ÓÉÍ×ÏÌ \"ËÁË ÅÓÔØ\""
+
+#: info/echo-area.c:479
+msgid "Insert this character"
+msgstr "÷ÓÔÁ×ÉÔØ ÜÔÏÔ ÓÉÍ×ÏÌ"
+
+#: info/echo-area.c:498
+msgid "Insert a TAB character"
+msgstr "÷ÓÔÁ×ÉÔØ ÓÉÍ×ÏÌ ÔÁÂÕÌÑÃÉÉ"
+
+#: info/echo-area.c:505
+msgid "Transpose characters at point"
+msgstr "ðÅÒÅÓÔÁ×ÉÔØ ÓÉÍ×ÏÌÙ ×ÏËÒÕÇ ÔÏÞËÉ"
+
+#: info/echo-area.c:556
+msgid "Yank back the contents of the last kill"
+msgstr "÷ÏÓÓÔÁÎÏ×ÉÔØ ÐÏÓÌÅÄÎÉÊ ÕÎÉÞÔÏÖÅÎÎÙÊ ÔÅËÓÔ"
+
+#: info/echo-area.c:563
+msgid "Kill ring is empty"
+msgstr "ëÏÌØÃÏ ÕÎÉÞÔÏÖÅÎÉÊ ÐÕÓÔÏ"
+
+#: info/echo-area.c:576
+msgid "Yank back a previous kill"
+msgstr "÷ÏÓÓÔÁÎÏ×ÉÔØ ÐÒÅÄÛÅÓÔ×ÕÀÝÉÊ ÕÎÉÞÔÏÖÅÎÎÙÊ ÔÅËÓÔ"
+
+#: info/echo-area.c:609
+msgid "Kill to the end of the line"
+msgstr "õÎÉÞÔÏÖÉÔØ ÔÅËÓÔ ÄÏ ËÏÎÃÁ ÓÔÒÏËÉ"
+
+#: info/echo-area.c:622
+msgid "Kill to the beginning of the line"
+msgstr "õÎÉÞÔÏÖÉÔØ ÔÅËÓÔ ÄÏ ÎÁÞÁÌÁ ÓÔÒÏËÉ"
+
+#: info/echo-area.c:634
+msgid "Kill the word following the cursor"
+msgstr "õÎÉÞÔÏÖÉÔØ ÓÌÅÄÕÀÝÅÅ ÓÌÏ×Ï"
+
+#: info/echo-area.c:654
+msgid "Kill the word preceding the cursor"
+msgstr "õÎÉÞÔÏÖÉÔØ ÐÒÅÄÙÄÕÝÅÅ ÓÌÏ×Ï"
+
+#: info/echo-area.c:870 info/echo-area.c:926
+msgid "No completions"
+msgstr "úÁ×ÅÒÛÅÎÉÊ ÎÅÔ"
+
+#: info/echo-area.c:872
+msgid "Not complete"
+msgstr "îÅ ÚÁ×ÅÒÛÅÎÏ"
+
+#: info/echo-area.c:913
+msgid "List possible completions"
+msgstr "ðÏËÁÚÁÔØ ×ÏÚÍÏÖÎÙÅ ÚÁ×ÅÒÛÅÎÉÑ"
+
+#: info/echo-area.c:930
+msgid "Sole completion"
+msgstr "åÄÉÎÓÔ×ÅÎÎÏÅ ÚÁ×ÅÒÛÅÎÉÅ"
+
+#: info/echo-area.c:939
+msgid "One completion:\n"
+msgstr "åÄÉÎÓÔ×ÅÎÎÏÅ ÚÁ×ÅÒÛÅÎÉÅ:\n"
+
+#: info/echo-area.c:940
+#, c-format
+msgid "%d completions:\n"
+msgstr "úÁ×ÅÒÛÅÎÉÊ: %d :\n"
+
+#: info/echo-area.c:1087
+msgid "Insert completion"
+msgstr "÷ÓÔÁ×ÉÔØ ÚÁ×ÅÒÛÅÎÉÅ"
+
+#: info/echo-area.c:1222
+msgid "Building completions..."
+msgstr "óÏÓÔÁ×ÌÅÎÉÅ ÚÁ×ÅÒÛÅÎÉÊ..."
+
+#: info/echo-area.c:1342
+msgid "Scroll the completions window"
+msgstr "ðÒÏËÒÕÔÉÔØ ÏËÎÏ ÚÁ×ÅÒÛÅÎÉÊ"
+
+#: info/footnotes.c:212
+msgid "Footnotes could not be displayed"
+msgstr "óÎÏÓËÉ ÎÅ ÍÏÇÕÔ ÂÙÔØ ÐÏËÁÚÁÎÙ"
+
+#: info/footnotes.c:238
+msgid "Show the footnotes associated with this node in another window"
+msgstr "ðÏËÁÚÁÔØ ÓÎÏÓËÉ, Ó×ÑÚÁÎÎÙÅ Ó ÜÔÏÊ ÎÏÄÏÊ, × ÄÒÕÇÏÍ ÏËÎÅ"
+
+#: info/footnotes.h:26
+msgid "---------- Footnotes ----------"
+msgstr "---------- óÎÏÓËÉ ----------"
+
+#: info/indices.c:171
+msgid "Look up a string in the index for this file"
+msgstr "îÁÊÔÉ ÓÔÒÏËÕ × ÁÌÆÁ×ÉÔÎÏÍ ÕËÁÚÁÔÅÌÅ ÄÌÑ ÄÁÎÎÏÇÏ ÆÁÊÌÁ"
+
+#: info/indices.c:198
+msgid "Finding index entries..."
+msgstr "ðÏÉÓË × ÁÌÆÁ×ÉÔÎÏÍ ÕËÁÚÁÔÅÌÅ..."
+
+#: info/indices.c:206
+msgid "No indices found."
+msgstr "îÅ ÎÁÊÄÅÎ ÁÌÆÁ×ÉÔÎÙÊ ÕËÁÚÁÔÅÌØ."
+
+#: info/indices.c:216
+msgid "Index entry: "
+msgstr "ðÕÎËÔ × ÁÌÆÁ×ÉÔÎÏÍ ÕËÁÚÁÔÅÌÅ: "
+
+#: info/indices.c:324
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr ""
+"ðÅÒÅÊÔÉ Ë ÓÌÅÄÕÀÝÅÍÕ ÐÕÎËÔÕ ÁÌÆÁ×ÉÔÎÏÇÏ ÕËÁÚÁÔÅÌÑ, ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÍÕ\n"
+"ÐÏÓÌÅÄÎÅÊ ËÏÍÁÎÄÅ `\\[index-search]'"
+
+#: info/indices.c:334
+msgid "No previous index search string."
+msgstr "óÔÒÏËÁ ÐÏÉÓËÁ × ÁÌÆÁ×ÉÔÎÏÍ ÕËÁÚÁÔÅÌÅ ÎÅ ÂÙÌÁ ÒÁÎØÛÅ ÚÁÄÁÎÁ."
+
+#: info/indices.c:341
+msgid "No index entries."
+msgstr "îÅ ÎÁÊÄÅÎ ÁÌÆÁ×ÉÔÎÙÊ ÕËÁÚÁÔÅÌØ."
+
+#: info/indices.c:374
+#, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "÷ ÁÌÆÁ×ÉÔÎÏÍ ÕËÁÚÁÔÅÌÅ %s ÎÅ ÎÁÊÄÅÎÏ ÐÕÎËÔÏ×, ÓÏÄÅÒÖÁÝÉÈ `%s'."
+
+#: info/indices.c:375
+msgid "more "
+msgstr "ÂÏÌØÛÅ "
+
+#: info/indices.c:385
+msgid "CAN'T SEE THIS"
+msgstr "üÔÏ ÎÅ×ÉÄÉÍÙÊ ÔÅËÓÔ!"
+
+#: info/indices.c:421
+#, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr ""
+"îÁÊÄÅÎÁ `%s' × %s. (`\\[next-index-match]' ÎÁÈÏÄÉÔ ÓÌÅÄÕÀÝÅÅ ÓÏ×ÐÁÄÅÎÉÅ.)"
+
+#: info/indices.c:549
+#, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "ðÏÉÓË × ÁÌÆÁ×ÉÔÎÏÍ ÕËÁÚÁÔÅÌÅ ÆÁÊÌÁ `%s'..."
+
+#: info/indices.c:604
+#, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr "îÉ ÏÄÉÎ ÉÚ info-ÆÁÊÌÏ× ÎÅ ÓÏÄÅÒÖÉÔ `%s' × ÁÌÆÁ×ÉÔÎÙÈ ÕËÁÚÁÔÅÌÑÈ."
+
+#: info/indices.c:630
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr ""
+"úÁÐÕÓËÁÅÔ ÐÏÉÓË ÓÔÒÏËÉ × ÁÌÆÁ×ÉÔÎÙÈ ÕËÁÚÁÔÅÌÑÈ ×ÓÅÈ Info-ÆÁÊÌÏ× É ÓÏÚÄÁÅÔ "
+"ÍÅÎÀ"
+
+#: info/indices.c:634
+msgid "Index apropos: "
+msgstr "ëÌÀÞÅ×ÏÅ ÓÌÏ×Ï ÄÌÑ ÐÏÉÓËÁ: "
+
+#: info/indices.c:662
+#, c-format
+msgid ""
+"\n"
+"* Menu: Nodes whose indices contain `%s':\n"
+msgstr ""
+"\n"
+"* Menu: îÏÄÙ, ÞØÉ ÁÌÆÁ×ÉÔÎÙÅ ÕËÁÚÁÔÅÌÉ ÓÏÄÅÒÖÁÔ `%s':\n"
+
+#: info/info.c:275 info/infokey.c:899
+#, c-format
+msgid "Try --help for more information.\n"
+msgstr "ðÏÐÒÏÂÕÊÔÅ --help ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÂÏÌÅÅ ÐÏÄÒÏÂÎÏÇÏ ÏÐÉÓÁÎÉÑ.\n"
+
+#: info/info.c:294 info/infokey.c:145 install-info/install-info.c:2101
+#: makeinfo/makeinfo.c:802 util/texindex.c:295
+#, c-format
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+
+#: info/info.c:506
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "ÄÌÑ `%s' ÎÅ ÎÁÊÄÅÎÏ ×ÈÏÖÄÅÎÉÊ × ÉÍÅÎÎÏÍ ÕËÁÚÁÔÅÌÅ\n"
+
+#: info/info.c:600
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [MENU-ITEM...]\n"
+"\n"
+"Read documentation in Info format.\n"
+msgstr ""
+
+#: info/info.c:606
+msgid ""
+"Options:\n"
+" -k, --apropos=STRING look up STRING in all indices of all "
+"manuals.\n"
+" -d, --directory=DIR add DIR to INFOPATH.\n"
+" --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+" -f, --file=FILENAME specify Info file to visit."
+msgstr ""
+
+#: info/info.c:613
+msgid ""
+" -h, --help display this help and exit.\n"
+" --index-search=STRING go to node pointed by index entry STRING.\n"
+" -n, --node=NODENAME specify nodes in first visited Info file.\n"
+" -o, --output=FILENAME output selected nodes to FILENAME."
+msgstr ""
+
+#: info/info.c:619
+msgid ""
+" -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+" --no-raw-escapes output escapes as literal text.\n"
+" --restore=FILENAME read initial keystrokes from FILENAME.\n"
+" -O, --show-options, --usage go to command-line options node."
+msgstr ""
+
+#: info/info.c:626
+#, fuzzy
+msgid " -b, --speech-friendly be friendly to speech synthesizers."
+msgstr ""
+" -b, --speech-friendly ×Ù×ÏÄÉÔØ × ÆÏÒÍÁÔÅ, ÕÄÏÂÎÏÍ ÄÌÑ ÓÉÎÔÅÚÁÔÏÒÏ× "
+"ÒÅÞÉ.\n"
+
+#: info/info.c:630
+msgid ""
+" --subnodes recursively output menu items.\n"
+" --vi-keys use vi-like and less-like key bindings.\n"
+" --version display version information and exit.\n"
+" -w, --where, --location print physical location of Info file."
+msgstr ""
+
+#: info/info.c:636
+msgid ""
+"\n"
+"The first non-option argument, if present, is the menu entry to start from;\n"
+"it is searched for in all `dir' files along INFOPATH.\n"
+"If it is not present, info merges all `dir' files and shows the result.\n"
+"Any remaining arguments are treated as the names of menu\n"
+"items relative to the initial node visited."
+msgstr ""
+
+#: info/info.c:643
+msgid ""
+"\n"
+"For a summary of key bindings, type h within Info."
+msgstr ""
+
+#: info/info.c:646
+msgid ""
+"\n"
+"Examples:\n"
+" info show top-level dir menu\n"
+" info info show the general manual for Info readers\n"
+" info info-stnd show the manual specific to this Info program\n"
+" info emacs start at emacs node from top-level dir\n"
+" info emacs buffers start at buffers node within emacs manual\n"
+" info --show-options emacs start at node with emacs' command line options\n"
+" info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+" info -f ./foo.info show file ./foo.info, not searching dir"
+msgstr ""
+
+#: info/info.c:657 info/infokey.c:918 makeinfo/makeinfo.c:475
+#: util/texindex.c:259
+msgid ""
+"\n"
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+"ï ÏÛÉÂËÁÈ ÓÏÏÂÝÁÊÔÅ ÐÏ ÁÄÒÅÓÕ bug-texinfo@gnu.org,\n"
+"ÏÂÝÅÅ ÏÂÓÕÖÄÅÎÉÅ É ×ÏÐÒÏÓÙ ÎÁÐÒÁ×ÌÑÊÔÅ ÐÏ ÁÄÒÅÓÕ help-texinfo@gnu.org.\n"
+"äÏÍÁÛÎÁÑ ÓÔÒÁÎÉÃÁ Texinfo: http://www.gnu.org/software/texinfo/"
+
+#: info/info.c:691
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÎÁÊÔÉ ÎÏÄÕ `%s'."
+
+#: info/info.c:692
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÎÁÊÔÉ ÎÏÄÕ `(%s)%s'."
+
+#: info/info.c:693
+msgid "Cannot find a window!"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÎÁÊÔÉ ÏËÎÏ!"
+
+#: info/info.c:694
+msgid "Point doesn't appear within this window's node!"
+msgstr "ôÏÞËÁ ÎÁÈÏÄÉÔÓÑ ×ÎÅ ÎÏÄÙ ÜÔÏÇÏ ÏËÎÁ!"
+
+#: info/info.c:695
+msgid "Cannot delete the last window."
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ ÐÏÓÌÅÄÎÅÅ ÏËÎÏ."
+
+#: info/info.c:696
+msgid "No menu in this node."
+msgstr "÷ ÜÔÏÊ ÎÏÄÅ ÎÅÔ ÍÅÎÀ."
+
+#: info/info.c:697
+msgid "No footnotes in this node."
+msgstr "îÁ ÜÔÏÊ ÎÏÄÅ ÎÅÔ ÓÓÙÌÏË."
+
+#: info/info.c:698
+msgid "No cross references in this node."
+msgstr "îÁ ÜÔÏÊ ÎÏÄÅ ÎÅÔ ÓÓÙÌÏË."
+
+#: info/info.c:699
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "äÌÑ ÜÔÏÊ ÎÏÄÙ ÎÅÔ ÓÓÙÌËÉ `%s'."
+
+#: info/info.c:700
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "ëÏÍÁÎÄÁ Info `%c' ÎÅÉÚ×ÅÓÔÎÁ; ÐÏÐÒÏÂÕÊÔÅ `?' ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÓÐÒÁ×ËÉ."
+
+#: info/info.c:701
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr ""
+"ôÅÒÍÉÎÁÌ ÔÉÐÁ `%s' ÎÅ ÏÂÌÁÄÁÅÔ ÄÏÓÔÁÔÏÞÎÙÍÉ ×ÏÚÍÏÖÎÏÓÔÑÍÉ ÄÌÑ ÚÁÐÕÓËÁ Info."
+
+#: info/info.c:702
+msgid "You are already at the last page of this node."
+msgstr "÷Ù ÕÖÅ ÎÁÈÏÄÉÔÅÓØ ÎÁ ÐÏÓÌÅÄÎÅÊ ÓÔÒÁÎÉÃÅ ÜÔÏÊ ÎÏÄÙ."
+
+#: info/info.c:703
+msgid "You are already at the first page of this node."
+msgstr "÷Ù ÕÖÅ ÎÁÈÏÄÉÔÅÓØ ÎÁ ÐÅÒ×ÏÊ ÓÔÒÁÎÉÃÅ ÜÔÏÊ ÎÏÄÙ."
+
+#: info/info.c:704
+msgid "Only one window."
+msgstr "ôÏÌØËÏ ÏÄÎÏ ÏËÎÏ."
+
+#: info/info.c:705
+msgid "Resulting window would be too small."
+msgstr "ðÏÌÕÞÉ×ÛÅÅÓÑ ÏËÎÏ ÂÙÌÏ ÂÙ ÓÌÉÛËÏÍ ÍÁÌÅÎØËÉÍ."
+
+#: info/info.c:706
+msgid "Not enough room for a help window, please delete a window."
+msgstr ""
+"îÅ È×ÁÔÁÅÔ ÍÅÓÔÁ ÄÌÑ ÓÐÒÁ×ÏÞÎÏÇÏ ÏËÎÁ, ÐÏÖÁÌÕÊÓÔÁ, ÕÄÁÌÉÔÅ ËÁËÏÅ-ÎÉÂÕÄØ ÏËÎÏ."
+
+#: info/infodoc.c:45
+msgid "Basic Info command keys\n"
+msgstr ""
+
+#: info/infodoc.c:47
+#, fuzzy
+msgid "\\%-10[quit-help] Close this help window.\n"
+msgstr "\\%-10[quit-help] ðÏËÉÎÕÔØ ÜÔÕ ÓÐÒÁ×ËÕ.\n"
+
+#: info/infodoc.c:48
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] ðÏËÉÎÕÔØ ÔÁËÖÅ Info.\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr "\\%-10[get-info-help-node] ÷ÙÚ×ÁÔØ ÏÂÕÞÁÀÝÅÅ ÒÕËÏ×ÏÄÓÔ×Ï.\n"
+
+#: info/infodoc.c:51
+#, fuzzy
+msgid "\\%-10[prev-line] Move up one line.\n"
+msgstr "\\%-10[prev-line] ðÒÏËÒÕÔÉÔØ ÎÁ ÓÔÒÁÎÉÃÕ ÎÁÚÁÄ.\n"
+
+#: info/infodoc.c:52
+#, fuzzy
+msgid "\\%-10[next-line] Move down one line.\n"
+msgstr "\\%-10[next-line] ðÒÏËÒÕÔÉÔØ ÎÁ ÓÔÒÁÎÉÃÕ ×ÐÅÒÅÄ.\n"
+
+#: info/infodoc.c:53
+#, fuzzy
+msgid "\\%-10[scroll-backward] Scroll backward one screenful.\n"
+msgstr "\\%-10[scroll-backward] ðÒÏËÒÕÔÉÔØ ÎÁ ÓÔÒÁÎÉÃÕ ÎÁÚÁÄ.\n"
+
+#: info/infodoc.c:54
+#, fuzzy
+msgid "\\%-10[scroll-forward] Scroll forward one screenful.\n"
+msgstr "\\%-10[scroll-forward] ðÒÏËÒÕÔÉÔØ ÎÁ ÓÔÒÁÎÉÃÕ ×ÐÅÒÅÄ.\n"
+
+#: info/infodoc.c:55
+#, fuzzy
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr "\\%-10[beginning-of-node] ðÅÒÅÍÅÓÔÉÔØÓÑ × ÎÁÞÁÌÏ ÜÔÏÊ ÎÏÄÙ.\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr "\\%-10[end-of-node] ðÅÒÅÍÅÓÔÉÔØÓÑ × ËÏÎÅà ÜÔÏÊ ÎÏÄÙ.\n"
+
+#: info/infodoc.c:58
+#, fuzzy
+msgid "\\%-10[move-to-next-xref] Skip to the next hypertext link.\n"
+msgstr ""
+"\\%-10[move-to-next-xref] ðÅÒÅÍÅÓÔÉÔØÓÑ Ë ÓÌÅÄÕÀÝÅÊ ÇÉÐÅÒÓÓÙÌËÅ × ÜÔÏÊ "
+"ÎÏÄÅ.\n"
+
+#: info/infodoc.c:59
+#, fuzzy
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under the "
+"cursor.\n"
+msgstr ""
+"\\%-10[select-reference-this-line] ðÅÒÅÊÔÉ ÐÏ ÇÉÐÅÒÓÓÙÌËÅ ÐÏÄ ËÕÒÓÏÒÏÍ.\n"
+
+#: info/infodoc.c:60
+#, fuzzy
+msgid "\\%-10[history-node] Go back to the last node seen in this window.\n"
+msgstr "\\%-10[history-node] ðÅÒÅÊÔÉ ÎÁ ÐÏÓÌÅÄÎÀÀ ÎÏÄÕ × ÜÔÏÍ ÏËÎÅ.\n"
+
+#: info/infodoc.c:62
+#, fuzzy
+msgid "\\%-10[global-prev-node] Go to the previous node in the document.\n"
+msgstr "\\%-10[prev-node] ðÅÒÅÊÔÉ Ë \"ÐÒÅÄÙÄÕÝÅÊ\" ÎÏÄÅ.\n"
+
+#: info/infodoc.c:63
+#, fuzzy
+msgid "\\%-10[global-next-node] Go to the next node in the document.\n"
+msgstr "\\%-10[next-node] ðÅÒÅÊÔÉ Ë \"ÓÌÅÄÕÀÝÅÊ\" ÎÏÄÅ.\n"
+
+#: info/infodoc.c:64
+#, fuzzy
+msgid "\\%-10[prev-node] Go to the previous node on this level.\n"
+msgstr "\\%-10[prev-node] ðÅÒÅÊÔÉ Ë \"ÐÒÅÄÙÄÕÝÅÊ\" ÎÏÄÅ.\n"
+
+#: info/infodoc.c:65
+#, fuzzy
+msgid "\\%-10[next-node] Go to the next node on this level.\n"
+msgstr "\\%-10[next-node] ðÅÒÅÊÔÉ Ë \"ÓÌÅÄÕÀÝÅÊ\" ÎÏÄÅ.\n"
+
+#: info/infodoc.c:66
+#, fuzzy
+msgid "\\%-10[up-node] Go up one level.\n"
+msgstr "\\%-10[up-node] ðÅÒÅÊÔÉ Ë ÎÏÄÅ \"××ÅÒÈ\".\n"
+
+#: info/infodoc.c:67
+#, fuzzy
+msgid "\\%-10[top-node] Go to the top node of this document.\n"
+msgstr "\\%-10[end-of-node] ðÅÒÅÍÅÓÔÉÔØÓÑ × ËÏÎÅà ÜÔÏÊ ÎÏÄÙ.\n"
+
+#: info/infodoc.c:68
+#, fuzzy
+msgid "\\%-10[dir-node] Go to the main `directory' node.\n"
+msgstr "\\%-10[end-of-node] ðÅÒÅÍÅÓÔÉÔØÓÑ × ËÏÎÅà ÜÔÏÊ ÎÏÄÙ.\n"
+
+#: info/infodoc.c:70
+#, fuzzy
+msgid "1...9 Pick the first...ninth item in this node's menu.\n"
+msgstr " %-10s ÷ÙÂÒÁÔØ ÐÅÒ×ÙÊ ... ÄÅ×ÑÔÙÊ ÐÕÎËÔ ÍÅÎÀ × ÔÅËÕÝÅÊ ÎÏÄÅ.\n"
+
+#: info/infodoc.c:71
+#, fuzzy
+msgid "\\%-10[last-menu-item] Pick the last item in this node's menu.\n"
+msgstr "\\%-10[last-menu-item] ÷ÙÂÒÁÔØ ÐÏÓÌÅÄÎÉÊ ÐÕÎËÔ ÍÅÎÀ × ÔÅËÕÝÅÊ ÎÏÄÅ\n"
+
+#: info/infodoc.c:72
+#, fuzzy
+msgid "\\%-10[menu-item] Pick a menu item specified by name.\n"
+msgstr " %-10s ðÅÒÅÊÔÉ Ë ÚÁÄÁÎÎÏÍÕ ÐÕÎËÔÕ ÍÅÎÀ.\n"
+
+#: info/infodoc.c:73
+#, fuzzy
+msgid "\\%-10[xref-item] Follow a cross reference specified by name.\n"
+msgstr "\\%-10[xref-item] ðÅÒÅÊÔÉ ÐÏ ÓÓÙÌËÅ. óÞÉÔÙ×ÁÅÔ ÉÍÑ ÓÓÙÌËÉ.\n"
+
+#: info/infodoc.c:74
+#, fuzzy
+msgid "\\%-10[goto-node] Go to a node specified by name.\n"
+msgstr " %-10s ðÅÒÅÊÔÉ Ë ÚÁÄÁÎÎÏÊ ÎÏÄÅ.\n"
+
+#: info/infodoc.c:76
+#, fuzzy
+msgid "\\%-10[search] Search forward for a specified string.\n"
+msgstr " %-10s îÁÊÔÉ ÚÁÄÁÎÎÕÀ ÓÔÒÏËÕ, É ÐÅÒÅÊÔÉ Ë\n"
+
+#: info/infodoc.c:77
+#, fuzzy
+msgid "\\%-10[search-previous] Search for previous occurrence.\n"
+msgstr "\\%-10[prev-node] ðÅÒÅÊÔÉ Ë \"ÐÒÅÄÙÄÕÝÅÊ\" ÎÏÄÅ.\n"
+
+#: info/infodoc.c:78
+#, fuzzy
+msgid "\\%-10[search-next] Search for next occurrence.\n"
+msgstr ""
+" %-10s ðÒÏÉÚ×ÅÓÔÉ ÐÏÉÓË ÚÁÄÁÎÎÏÊ ÓÔÒÏËÉ ÓÒÅÄÉ ×ÈÏÖÄÅÎÉÊ ÉÍÅÎÎÙÈ ÕËÁÚÁÔÅÌÅÊ "
+"ÜÔÏÇÏ\n"
+
+#: info/infodoc.c:79
+#, fuzzy
+msgid ""
+"\\%-10[index-search] Search for a specified string in the index, and\n"
+" select the node referenced by the first entry found.\n"
+msgstr ""
+"\\%-10[index-search] éÓËÁÔØ ÚÁÄÁÎÎÕÀ ÓÔÒÏËÕ × ÁÌÆÁ×ÉÔÎÙÈ ÕËÁÚÁÔÅÌÑÈ\n"
+" Info-ÆÁÊÌÁ É ×ÙÂÒÁÔØ ÎÏÄÕ ÐÏ ÐÅÒ×ÏÊ ÎÁÊÄÅÎÎÏÊ ÓÓÙÌËÅ.\n"
+
+#: info/infodoc.c:81
+#, fuzzy
+msgid "\\%-10[abort-key] Cancel the current operation.\n"
+msgstr "ïÔÍÅÎÉÔØ ×ÙÐÏÌÎÅÎÉÅ ÔÅËÕÝÅÊ ËÏÍÁÎÄÙ"
+
+#: info/infodoc.c:89
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"ïÓÎÏ×ÎÙÅ ËÏÍÁÎÄÙ × ÏËÎÁÈ Info\n"
+"******************************\n"
+
+#: info/infodoc.c:92
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s ðÏËÉÎÕÔØ ÜÔÕ ÓÐÒÁ×ËÕ.\n"
+
+#: info/infodoc.c:93
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s ðÏËÉÎÕÔØ ÔÁËÖÅ Info.\n"
+
+#: info/infodoc.c:94
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s ÷ÙÚ×ÁÔØ ÏÂÕÞÁÀÝÅÅ ÒÕËÏ×ÏÄÓÔ×Ï.\n"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr " %-10s ðÅÒÅÊÔÉ Ë `ÓÌÅÄÕÀÝÅÊ' ÎÏÄÅ.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr " %-10s ðÅÒÅÊÔÉ Ë `ÐÒÅÄÙÄÕÝÅÊ' ÎÏÄÅ.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s ðÅÒÅÊÔÉ Ë ÎÏÄÅ `××ÅÒÈ'.\n"
+
+#: info/infodoc.c:101
+#, fuzzy, c-format
+msgid ""
+" %-10s Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+"\\%-10[menu-item] ðÅÒÅÊÔÉ Ë ÐÕÎËÔÕ ÍÅÎÀ, ÚÁÄÁ×ÁÅÍÏÍÕ ÐÏ ÉÍÅÎÉ.\n"
+" ðÒÉ ÐÅÒÅÈÏÄÅ Ë ÚÁÄÁÎÎÏÍÕ ÐÕÎËÔÕ ÍÅÎÀ ×ÙÂÉÒÁÅÔÓÑ ÄÒÕÇÁÑ ÎÏÄÁ.\n"
+
+#: info/infodoc.c:103
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr " %-10s ðÅÒÅÊÔÉ ÐÏ ÓÓÙÌËÅ. óÞÉÔÙ×ÁÅÔ ÉÍÑ ÓÓÙÌËÉ.\n"
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr " %-10s ðÅÒÅÊÔÉ ÎÁ ÐÏÓÌÅÄÎÀÀ ÎÏÄÕ × ÜÔÏÍ ÏËÎÅ.\n"
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr " %-10s ðÅÒÅÍÅÓÔÉÔØÓÑ Ë ÓÌÅÄÕÀÝÅÊ ÇÉÐÅÒÓÓÙÌËÅ × ÜÔÏÊ ÎÏÄÅ.\n"
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s ðÅÒÅÊÔÉ ÐÏ ÇÉÐÅÒÓÓÙÌËÅ ÐÏÄ ËÕÒÓÏÒÏÍ.\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr " %-10s ðÅÒÅÊÔÉ Ë ËÏÒÎÅ×ÏÊ ÎÏÄÅ. üË×É×ÁÌÅÎÔÎÏ `g (DIR)'.\n"
+
+#: info/infodoc.c:108
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr " %-10s ðÅÒÅÊÔÉ Ë ÎÏÄÅ Top. üË×É×ÁÌÅÎÔÎÏ `g Top'.\n"
+
+#: info/infodoc.c:110
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"ðÅÒÅÍÅÝÅÎÉÅ ×ÎÕÔÒÉ ÎÏÄÙ:\n"
+"------------------------\n"
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s ðÒÏËÒÕÔÉÔØ ÎÁ ÓÔÒÁÎÉÃÕ ×ÐÅÒÅÄ.\n"
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s ðÒÏËÒÕÔÉÔØ ÎÁ ÓÔÒÁÎÉÃÕ ÎÁÚÁÄ.\n"
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s ðÅÒÅÍÅÓÔÉÔØÓÑ × ÎÁÞÁÌÏ ÜÔÏÊ ÎÏÄÙ.\n"
+
+#: info/infodoc.c:115
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s ðÅÒÅÍÅÓÔÉÔØÓÑ × ËÏÎÅà ÜÔÏÊ ÎÏÄÙ.\n"
+
+#: info/infodoc.c:116
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s ðÒÏËÒÕÔÉÔØ ÎÁ ÓÔÒÁÎÉÃÕ ×ÐÅÒÅÄ.\n"
+
+#: info/infodoc.c:117
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s ðÒÏËÒÕÔÉÔØ ÎÁ ÓÔÒÁÎÉÃÕ ÎÁÚÁÄ.\n"
+
+#: info/infodoc.c:119
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"äÒÕÇÉÅ ËÏÍÁÎÄÙ:\n"
+"---------------\n"
+
+#: info/infodoc.c:121
+#, fuzzy, c-format
+msgid " %-10s Pick first...ninth item in node's menu.\n"
+msgstr " %-10s ÷ÙÂÒÁÔØ ÐÅÒ×ÙÊ ... ÄÅ×ÑÔÙÊ ÐÕÎËÔ ÍÅÎÀ × ÔÅËÕÝÅÊ ÎÏÄÅ.\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s ÷ÙÂÒÁÔØ ÐÏÓÌÅÄÎÉÊ ÐÕÎËÔ ÍÅÎÀ × ÔÅËÕÝÅÊ ÎÏÄÅ\n"
+
+#: info/infodoc.c:125
+#, fuzzy, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr ""
+"\\%-10[index-search] éÓËÁÔØ ÚÁÄÁÎÎÕÀ ÓÔÒÏËÕ × ÁÌÆÁ×ÉÔÎÙÈ ÕËÁÚÁÔÅÌÑÈ\n"
+" Info-ÆÁÊÌÁ É ×ÙÂÒÁÔØ ÎÏÄÕ ÐÏ ÐÅÒ×ÏÊ ÎÁÊÄÅÎÎÏÊ ÓÓÙÌËÅ.\n"
+
+#: info/infodoc.c:127
+#, fuzzy, c-format
+msgid ""
+" %-10s Move to node specified by name.\n"
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+"\\%-10[goto-node] ðÅÒÅÊÔÉ Ë ÎÏÄÅ, ÚÁÄÁÎÎÏÊ ÐÏ ÉÍÅÎÉ.\n"
+" ÷Ù ÍÏÖÅÔÅ ÚÁÄÁÔØ ÔÁËÖÅ ÉÍÑ ÆÁÊÌÁ, ÎÁÐÒÉÍÅÒ (æáêì)îïäá.\n"
+
+#: info/infodoc.c:129
+#, fuzzy, c-format
+msgid ""
+" %-10s Search forward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+"\\%-10[search] éÓËÁÔØ ÕËÁÚÁÎÎÕÀ ÓÔÒÏËÕ × ÔÅËÕÝÅÍ Info-ÆÁÊÌÅ É ÏÓÔÁÎÏ×ÉÔØÓÑ "
+"×\n"
+" ÎÏÄÅ, × ËÏÔÏÒÏÊ ÎÁÊÄÅÎÏ ÓÌÅÄÕÀÝÅÅ ×ÈÏÖÄÅÎÉÅ.\n"
+
+#: info/infodoc.c:131
+#, fuzzy, c-format
+msgid ""
+" %-10s Search backward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+"\\%-10[search] éÓËÁÔØ ÕËÁÚÁÎÎÕÀ ÓÔÒÏËÕ × ÔÅËÕÝÅÍ Info-ÆÁÊÌÅ É ÏÓÔÁÎÏ×ÉÔØÓÑ "
+"×\n"
+" ÎÏÄÅ, × ËÏÔÏÒÏÊ ÎÁÊÄÅÎÏ ÓÌÅÄÕÀÝÅÅ ×ÈÏÖÄÅÎÉÅ.\n"
+
+#: info/infodoc.c:312
+msgid "The current search path is:\n"
+msgstr "ôÅËÕÝÉÊ ÐÕÔØ ÐÏÉÓËÁ:\n"
+
+#: info/infodoc.c:316
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"ëÏÍÁÎÄÙ, ÄÏÓÔÕÐÎÙÅ × ÏËÎÁÈ Info:\n"
+"\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"ëÏÍÁÎÄÙ, ÄÏÓÔÕÐÎÙÅ × ÜÈÏ-ÏÂÌÁÓÔÉ:\n"
+"\n"
+
+#: info/infodoc.c:343
+#, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+"óÌÅÄÕÀÝÉÅ ËÏÍÁÎÄÙ ÍÏÇÕÔ ÂÙÔØ ×ÙÚ×ÁÎÙ ÔÏÌØËÏ Ó ÐÏÍÏÝØÀ %s:\n"
+"\n"
+
+#: info/infodoc.c:347
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+"óÌÅÄÕÀÝÉÅ ËÏÍÁÎÄÙ ×ÏÏÂÝÅ ÎÅ ÍÏÇÕÔ ÂÙÔØ ×ÙÚ×ÁÎÙ:\n"
+"\n"
+
+#: info/infodoc.c:477
+msgid "Display help message"
+msgstr "ðÏËÁÚÁÔØ ÓÐÒÁ×ËÕ"
+
+#: info/infodoc.c:495
+msgid "Visit Info node `(info)Help'"
+msgstr "ïÂÒÁÔÉÔØÓÑ Ë Info-ÎÏÄÅ `(info)Help'"
+
+#: info/infodoc.c:633
+msgid "Print documentation for KEY"
+msgstr "ðÏËÁÚÁÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ëìá÷éûå"
+
+#: info/infodoc.c:645
+#, c-format
+msgid "Describe key: %s"
+msgstr "ïÐÉÓÁÔØ ËÌÁ×ÉÛÕ: %s"
+
+#: info/infodoc.c:656
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s ÎÅÏÐÒÅÄÅÌÅÎÏ."
+
+#: info/infodoc.c:672 info/infodoc.c:701
+#, c-format
+msgid "%s is undefined."
+msgstr "%s ÎÅÏÐÒÅÄÅÌÅÎÏ."
+
+#: info/infodoc.c:722
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s ÐÒÉ×ÑÚÁÎÏ Ë %s."
+
+#: info/infodoc.c:1146
+msgid "Show what to type to execute a given command"
+msgstr "ðÏËÁÚÙ×ÁÅÔ, ÞÔÏ ÎÕÖÎÏ ÎÁÐÅÞÁÔÁÔØ, ÞÔÏÂÙ ×ÙÐÏÌÎÉÔØ ÄÁÎÎÕÀ ËÏÍÁÎÄÕ"
+
+#: info/infodoc.c:1150
+msgid "Where is command: "
+msgstr "ëÏÍÁÎÄÁ: "
+
+#: info/infodoc.c:1172
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "`%s' ÎÅ ÐÒÉ×ÑÚÁÎÁ ÎÉ Ë ËÁËÉÍ ËÌÁ×ÉÛÁÍ"
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s ÍÏÖÅÔ ÂÙÔØ ×ÙÚ×ÁÎÁ ÔÏÌØËÏ Ó ÐÏÍÏÝØÀ %s."
+
+#: info/infodoc.c:1183
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s ÍÏÖÅÔ ÂÙÔØ ×ÙÚ×ÁÎÁ Ó ÐÏÍÏÝØÀ %s."
+
+#: info/infodoc.c:1188
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "æÕÎËÃÉÉ Ó ÉÍÅÎÅÍ `%s' ÎÅÔ"
+
+#: info/infodoc.c:96
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"÷ÙÂÏÒ ÄÒÕÇÏÊ ÎÏÄÙ:\n"
+"------------------\n"
+
+#: info/infokey.c:170
+msgid "incorrect number of arguments"
+msgstr "ÎÅÐÒÁ×ÉÌØÎÏÅ ÞÉÓÌÏ ÁÒÇÕÍÅÎÔÏ×"
+
+#: info/infokey.c:201
+#, c-format
+msgid "cannot open input file `%s'"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ `%s'"
+
+#: info/infokey.c:215
+#, c-format
+msgid "cannot create output file `%s'"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ `%s'"
+
+#: info/infokey.c:226
+#, c-format
+msgid "error writing to `%s'"
+msgstr "ÏÛÉÂËÁ ÚÁÐÉÓÉ × `%s'"
+
+#: info/infokey.c:232
+#, c-format
+msgid "error closing output file `%s'"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁËÒÙÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ `%s'"
+
+#: info/infokey.c:450
+msgid "key sequence too long"
+msgstr "ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ ËÌÀÞÅÊ ÓÌÉÛËÏÍ ÄÌÉÎÎÁÑ"
+
+#: info/infokey.c:529
+msgid "missing key sequence"
+msgstr "ÐÒÏÐÕÝÅÎÁ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ ËÌÀÞÅÊ"
+
+#: info/infokey.c:610
+msgid "NUL character (\\000) not permitted"
+msgstr "ÚÎÁË NUL (\\000) ÎÅÄÏÐÕÓÔÉÍ"
+
+#: info/infokey.c:641
+#, c-format
+msgid "NUL character (^%c) not permitted"
+msgstr "ÚÎÁË NUL (^%c) ÎÅÄÏÐÕÓÔÉÍ"
+
+#: info/infokey.c:665
+msgid "missing action name"
+msgstr "ÐÒÏÐÕÝÅÎÏ ÉÍÑ ÄÅÊÓÔ×ÉÑ"
+
+#: info/infokey.c:681 info/infokey.c:756
+msgid "section too long"
+msgstr "ÒÁÚÄÅÌ ÓÌÉÛËÏÍ ×ÅÌÉË"
+
+#: info/infokey.c:688
+#, c-format
+msgid "unknown action `%s'"
+msgstr "îÅÉÚ×ÅÓÔÎÏÅ ÄÅÊÓÔ×ÉÅ `%s'"
+
+#: info/infokey.c:698
+msgid "action name too long"
+msgstr "ÉÍÑ ÄÅÊÓÔ×ÉÑ ÓÌÉÛËÏÍ ÄÌÉÎÎÏÅ"
+
+#: info/infokey.c:712
+#, c-format
+msgid "extra characters following action `%s'"
+msgstr "ÌÉÛÎÉÅ ÚÎÁËÉ ÐÏÓÌÅ ÄÅÊÓÔ×ÉÑ `%s'"
+
+#: info/infokey.c:723
+msgid "missing variable name"
+msgstr "ÐÒÏÐÕÝÅÎÏ ÉÍÑ ÐÅÒÅÍÅÎÎÏÊ"
+
+#: info/infokey.c:733
+msgid "missing `=' immediately after variable name"
+msgstr "ÐÒÏÐÕÝÅÎ ÚÎÁË `=' ÓÒÁÚÕ ÐÏÓÌÅ ÉÍÅÎÉ ÐÅÒÅÍÅÎÎÏÊ"
+
+#: info/infokey.c:741
+msgid "variable name too long"
+msgstr "ÉÍÑ ÐÅÒÅÍÅÎÎÏÊ ÓÌÉÛËÏÍ ÄÌÉÎÎÏÅ"
+
+#: info/infokey.c:765
+msgid "value too long"
+msgstr "ÚÎÁÞÅÎÉÅ ÓÌÉÛËÏÍ ÄÌÉÎÎÏÅ"
+
+#: info/infokey.c:890
+#, c-format
+msgid "\"%s\", line %u: "
+msgstr "\"%s\", ÓÔÒÏËÁ %u: "
+
+#: info/infokey.c:906
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [INPUT-FILE]\n"
+"\n"
+"Compile infokey source file to infokey file. Reads INPUT-FILE (default\n"
+"$HOME/.infokey) and writes compiled key file to (by default) $HOME/.info.\n"
+"\n"
+"Options:\n"
+" --output FILE output to FILE instead of $HOME/.info\n"
+" --help display this help and exit.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ëìàþ]... [÷èïäîïê-æáêì]\n"
+"\n"
+"ëÏÍÐÉÌÉÒÕÅÔ ÉÓÈÏÄÎÙÊ ÆÁÊÌ infokey × ÆÁÊÌ infokey. óÞÉÔÙ×ÁÅÔÓÑ\n"
+"÷èïäîïê-æáêì (ÐÏ ÕÍÏÌÞÁÎÉÀ $HOME/.infokey) É ÚÁÐÉÓÙ×ÁÅÔ\n"
+"ÓËÏÍÐÉÌÉÒÏ×ÁÎÎÙÊ ÆÁÊÌ Ó ÐÒÉ×ÑÚËÁÍÉ ËÌÁ×ÉÛ × $HOME/.info.\n"
+"\n"
+"ëÌÀÞÉ:\n"
+" --output éíñ-æáêìá ×Ù×ÏÄÉÔØ × ÕËÁÚÁÎÎÙÊ ÆÁÊÌ, Á ÎÅ × $HOME/."
+"info\n"
+" --help ÐÏËÁÚÁÔØ ÜÔÕ ÓÐÒÁ×ËÕ É ×ÙÊÔÉ\n"
+" --version ÐÏËÁÚÁÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ×ÅÒÓÉÉ É ×ÙÊÔÉ\n"
+
+#: info/infomap.c:955
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "îÅÐÒÁ×ÉÌØÎÙÊ ÆÁÊÌ infokey `%s' ÉÇÎÏÒÉÒÕÅÔÓÑ - ÓÌÉÛËÏÍ ÍÁÌÅÎØËÉÊ"
+
+#: info/infomap.c:958
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "îÅÐÒÁ×ÉÌØÎÙÊ ÆÁÊÌ infokey `%s' ÉÇÎÏÒÉÒÕÅÔÓÑ - ÓÌÉÛËÏÍ ÂÏÌØÛÏÊ"
+
+#: info/infomap.c:971
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "ïÛÉÂËÁ ÞÔÅÎÉÑ ÆÁÊÌÁ infokey `%s' - ÞÔÅÎÉÅ ÐÒÅÒ×ÁÎÏ"
+
+#: info/infomap.c:990
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+"æÁÊÌ infokey `%s' ÎÅÐÒÉÅÍÌÅÍ (ÎÅ×ÅÒÎÁÑ ÓÉÇÎÁÔÕÒÁ) -- ÚÁÐÕÓÔÉÔÅ infokey, "
+"ÞÔÏÂÙ ÏÂÎÏ×ÉÔØ ÅÇÏ"
+
+#: info/infomap.c:999
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr "æÁÊÌ infokey `%s' ÕÓÔÁÒÅÌ -- ÚÁÐÕÓÔÉÔÅ infokey, ÞÔÏÂÙ ÏÂÎÏ×ÉÔØ ÅÇÏ"
+
+#: info/infomap.c:1015
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+
+#: info/infomap.c:1036
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr ""
+"æÁÊÌ infokey `%s' ÎÅÐÒÉÅÍÌÅÍ (ÎÅ×ÅÒÎÙÊ ËÏÄ ÒÁÚÄÅÌÁ) -- ÚÁÐÕÓÔÉÔÅ infokey, "
+"ÞÔÏÂÙ ÏÂÎÏ×ÉÔØ ÅÇÏ"
+
+#: info/infomap.c:1171
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr ""
+"ðÏ×ÒÅÖÄÅÎÎÙÅ ÄÁÎÎÙÅ × ÆÁÊÌÅ infokey -- ÎÅËÏÔÏÒÙÅ ÐÒÉ×ÑÚËÉ ÐÒÏÉÇÎÏÒÉÒÏ×ÁÎÙ"
+
+#: info/infomap.c:1221
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr ""
+"ðÏ×ÒÅÖÄÅÎÎÙÅ ÄÁÎÎÙÅ × ÆÁÊÌÅ infokey -- ÎÅËÏÔÏÒÙÅ ÕÓÔÁÎÏ×ËÉ ÐÅÒÅÍÅÎÎÙÈ "
+"ÐÒÏÉÇÎÏÒÉÒÏ×ÁÎÙ"
+
+#: info/m-x.c:68
+msgid "Read the name of an Info command and describe it"
+msgstr "óÞÉÔÁÔØ ÉÍÑ ËÏÍÁÎÄÙ Info É ÐÏËÁÚÁÔØ ÅÅ ÏÐÉÓÁÎÉÅ"
+
+#: info/m-x.c:72
+msgid "Describe command: "
+msgstr "ïÐÉÓÁÔØ ËÏÍÁÎÄÕ: "
+
+#: info/m-x.c:95
+msgid "Read a command name in the echo area and execute it"
+msgstr "óÞÉÔÁÔØ ÉÍÑ ËÏÍÁÎÄÙ × ÜÈÏ-ÏÂÌÁÓÔÉ É ÉÓÐÏÌÎÉÔØ ÅÅ"
+
+#: info/m-x.c:139
+msgid "Cannot execute an `echo-area' command here."
+msgstr "úÄÅÓØ ÎÅÌØÚÑ ×ÙÐÏÌÎÉÔØ ËÏÍÁÎÄÕ ÜÈÏ-ÏÂÌÁÓÔÉ."
+
+#: info/m-x.c:153
+#, c-format
+msgid "Undefined command: %s"
+msgstr "îÅÏÐÒÅÄÅÌÅÎÎÁÑ ËÏÍÁÎÄÁ: %s"
+
+#: info/m-x.c:159
+msgid "Set the height of the displayed window"
+msgstr "õÓÔÁÎÏ×ÉÔØ ×ÙÓÏÔÕ ÏÔÏÂÒÁÖÁÅÍÏÇÏ ÏËÎÁ"
+
+#: info/m-x.c:172
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "õÓÔÁÎÏ×ÉÔØ ×ÙÓÏÔÕ ÜËÒÁÎÁ ÒÁ×ÎÏÊ (%d): "
+
+#: info/makedoc.c:166 info/makedoc.c:174
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+" üÔÏÔ ÆÁÊÌ ×ËÌÀÞÁÅÔ:\n"
+"\n"
+
+#: info/makedoc.c:556
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÂÒÁÂÏÔÁÔØ ÆÁÊÌ %s.\n"
+
+#: info/nodemenu.c:30
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+"\n"
+"* Menu:\n"
+" (æÁÊÌ)îÏÄÁ óÔÒÏË òÁÚÍÅÒ æÁÊÌ\n"
+" ---------- ----- ------ ----"
+
+#: info/nodemenu.c:201
+msgid ""
+"Here is the menu of nodes you have recently visited.\n"
+"Select one from this menu, or use `\\[history-node]' in another window.\n"
+msgstr ""
+"üÔÏ ÍÅÎÀ ÒÁÎÅÅ ÐÏÓÅÝÅÎÎÙÈ ×ÁÍÉ ÎÏÄ.\n"
+"÷ÙÂÅÒÉÔÅ ÏÄÎÕ ÉÚ ÍÅÎÀ ÉÌÉ ÉÓÐÏÌØÚÕÊÔÅ `\\[history-node]' × ÄÒÕÇÏÍ ÏËÎÅ.\n"
+
+#: info/nodemenu.c:223
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr "óÏÚÄÁÔØ ÏËÎÏ, ÓÏÄÅÒÖÁÝÅÅ ÍÅÎÀ ÐÏÓÅÝÅÎÎÙÈ ÒÁÎÅÅ ÎÏÄ"
+
+#: info/nodemenu.c:303
+msgid "Select a node which has been previously visited in a visible window"
+msgstr "÷ÙÂÒÁÔØ ÒÁÎÅÅ ÐÏÓÅÝÅÎÎÕÀ ÎÏÄÕ × ×ÉÄÉÍÏÍ ÏËÎÅ"
+
+#: info/nodemenu.c:316
+msgid "Select visited node: "
+msgstr "÷ÙÂÒÁÔØ ÐÏÓÅÝÅÎÎÕÀ ÒÁÎÅÅ ÎÏÄÕ: "
+
+#: info/nodemenu.c:336 info/session.c:2578
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "óÓÙÌËÁ ÉÓÞÅÚÌÁ! (%s)."
+
+#: info/search.c:166
+#, c-format
+msgid "regexp error: %s"
+msgstr ""
+
+#: info/session.c:164
+#, c-format
+msgid ""
+"Welcome to Info version %s. Type \\[get-help-window] for help, \\[menu-item] "
+"for menu item."
+msgstr ""
+"äÏÂÒÏ ÐÏÖÁÌÏ×ÁÔØ × Info ×ÅÒÓÉÉ %s. \\[get-help-window] -- ÓÐÒÁ×ËÁ, \\[menu-"
+"item] ×ÙÂÉÒÁÅÔ ÐÕÎËÔ ÍÅÎÀ."
+
+#: info/session.c:625
+msgid "Move down to the next line"
+msgstr "óÍÅÓÔÉÔØÓÑ ÎÁ ÓÔÒÏËÕ ÎÉÖÅ"
+
+#: info/session.c:661
+msgid "Move up to the previous line"
+msgstr "óÍÅÓÔÉÔØÓÑ ÎÁ ÓÔÒÏËÕ ×ÙÛÅ"
+
+#: info/session.c:931
+msgid "Move to the end of the line"
+msgstr "óÍÅÓÔÉÔØÓÑ × ËÏÎÅÃ ÓÔÒÏËÉ"
+
+#: info/session.c:942
+msgid "Move to the start of the line"
+msgstr "óÍÅÓÔÉÔØÓÑ × ÎÁÞÁÌÏ ÓÔÒÏËÉ"
+
+#: info/session.c:1142
+msgid "Next"
+msgstr "óÌÅÄÕÀÝÁÑ"
+
+#: info/session.c:1158 info/session.c:1283
+msgid "No more nodes within this document."
+msgstr "÷ ÜÔÏÍ ÄÏËÕÍÅÎÔÅ ÂÏÌØÛÅ ÎÅÔ ÎÏÄ."
+
+#: info/session.c:1309
+msgid "No `Prev' for this node."
+msgstr "äÌÑ ÜÔÏÊ ÎÏÄÙ ÎÅÔ ÓÓÙÌËÉ `ðÒÅÄÙÄÕÝÁÑ'."
+
+#: info/session.c:1329
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr "÷ ÜÔÏÍ ÄÏËÕÍÅÎÔÅ ÎÅÔ ÓÓÙÌËÉ `ðÒÅÄÙÄÕÝÁÑ' ÉÌÉ `÷×ÅÒÈ' ÄÌÑ ÜÔÏÊ ÎÏÄÙ."
+
+#: info/session.c:1391
+msgid "Move forwards or down through node structure"
+msgstr "ðÒÏÄ×ÉÇÁÔØÓÑ ×ÐÅÒÅÄ ÉÌÉ ×ÎÉÚ ÐÏ ÓÔÒÕËÔÕÒÅ ÎÏÄ"
+
+#: info/session.c:1407
+msgid "Move backwards or up through node structure"
+msgstr "ðÒÏÄ×ÉÇÁÔØÓÑ ÎÁÚÁÄ ÉÌÉ ××ÅÒÈ ÐÏ ÓÔÒÕËÔÕÒÅ ÎÏÄ"
+
+#: info/session.c:1508
+msgid "Scroll forward in this window"
+msgstr "ðÒÏËÒÕÔÉÔØ ×ÐÅÒÅÄ ÔÅËÕÝÅÅ ÏËÎÏ"
+
+#: info/session.c:1516
+msgid "Scroll forward in this window and set default window size"
+msgstr "ðÒÏËÒÕÔÉÔØ ÔÅËÕÝÅÅ ÏËÎÏ ×ÐÅÒÅÄ É ÕÓÔÁÎÏ×ÉÔØ ÒÁÚÍÅÒ ÏËÎÁ ÐÏ ÕÍÏÌÞÁÎÉÀ"
+
+#: info/session.c:1524
+msgid "Scroll forward in this window staying within node"
+msgstr "ðÒÏËÒÕÔÉÔØ ×ÐÅÒÅÄ ÔÅËÕÝÅÅ ÏËÎÏ, ÏÓÔÁ×ÁÑÓØ × ÔÅËÕÝÅÊ ÎÏÄÅ"
+
+#: info/session.c:1532
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr ""
+"ðÒÏËÒÕÔÉÔØ ÔÅËÕÝÅÅ ÏËÎÏ ×ÐÅÒÅÄ, ÏÓÔÁ×ÁÑÓØ × ÔÅËÕÝÅÊ ÎÏÄÅ, É ÕÓÔÁÎÏ×ÉÔØ "
+"ÒÁÚÍÅÒ ÏËÎÁ ÐÏ ÕÍÏÌÞÁÎÉÀ"
+
+#: info/session.c:1540
+msgid "Scroll backward in this window"
+msgstr "ðÒÏËÒÕÔÉÔØ ÎÁÚÁÄ ÔÅËÕÝÅÅ ÏËÎÏ"
+
+#: info/session.c:1548
+msgid "Scroll backward in this window and set default window size"
+msgstr "ðÒÏËÒÕÔÉÔØ ÔÅËÕÝÅÅ ÏËÎÏ ÎÁÚÁÄ É ÕÓÔÁÎÏ×ÉÔØ ÒÁÚÍÅÒ ÏËÎÁ ÐÏ ÕÍÏÌÞÁÎÉÀ"
+
+#: info/session.c:1557
+msgid "Scroll backward in this window staying within node"
+msgstr "ðÒÏËÒÕÔÉÔØ ÎÁÚÁÄ ÔÅËÕÝÅÅ ÏËÎÏ, ÏÓÔÁ×ÁÑÓØ × ÔÅËÕÝÅÊ ÎÏÄÅ"
+
+#: info/session.c:1565
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr ""
+"ðÒÏËÒÕÔÉÔØ ÔÅËÕÝÅÅ ÏËÎÏ ÎÁÚÁÄ, ÏÓÔÁ×ÁÑÓØ × ÔÅËÕÝÅÊ ÎÏÄÅ, É ÕÓÔÁÎÏ×ÉÔØ ÒÁÚÍÅÒ "
+"ÏËÎÁ ÐÏ ÕÍÏÌÞÁÎÉÀ"
+
+#: info/session.c:1573
+msgid "Move to the start of this node"
+msgstr "ðÅÒÅÍÅÓÔÉÔØÓÑ × ÎÁÞÁÌÏ ÎÏÄÙ"
+
+#: info/session.c:1580
+msgid "Move to the end of this node"
+msgstr "ðÅÒÅÍÅÓÔÉÔØÓÑ × ËÏÎÅà ÎÏÄÙ"
+
+#: info/session.c:1587
+msgid "Scroll down by lines"
+msgstr "ðÒÏËÒÕÔÉÔØ ÎÁ ÎÅÓËÏÌØËÏ ÓÔÒÏË ×ÎÉÚ"
+
+#: info/session.c:1604
+msgid "Scroll up by lines"
+msgstr "ðÒÏËÒÕÔÉÔØ ÎÁ ÎÅÓËÏÌØËÏ ÓÔÒÏË ××ÅÒÈ"
+
+#: info/session.c:1622
+msgid "Scroll down by half screen size"
+msgstr "ðÒÏËÒÕÔÉÔØ ÎÁ ÐÏÌÜËÒÁÎÁ ×ÎÉÚ"
+
+#: info/session.c:1648
+msgid "Scroll up by half screen size"
+msgstr "ðÒÏËÒÕÔÉÔØ ÎÁ ÐÏÌÜËÒÁÎÁ ××ÅÒÈ"
+
+#: info/session.c:1677
+msgid "Select the next window"
+msgstr "÷ÙÂÒÁÔØ ÓÌÅÄÕÀÝÅÅ ÏËÎÏ"
+
+#: info/session.c:1716
+msgid "Select the previous window"
+msgstr "÷ÙÂÒÁÔØ ÐÒÅÄÙÄÕÝÅÅ ÏËÎÏ"
+
+#: info/session.c:1767
+msgid "Split the current window"
+msgstr "òÁÚÂÉÔØ ÔÅËÕÝÅÅ ÏËÎÏ"
+
+#: info/session.c:1848
+msgid "Delete the current window"
+msgstr "õÄÁÌÉÔØ ÔÅËÕÝÅÅ ÏËÎÏ"
+
+#: info/session.c:1856
+msgid "Cannot delete a permanent window"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ ÐÏÓÔÏÑÎÎÏÅ ÏËÎÏ"
+
+#: info/session.c:1888
+msgid "Delete all other windows"
+msgstr "õÄÁÌÉÔØ ×ÓÅ ÏÓÔÁÌØÎÙÅ ÏËÎÁ"
+
+#: info/session.c:1934
+msgid "Scroll the other window"
+msgstr "ðÒÏËÒÕÔÉÔØ ÄÒÕÇÏÅ ÏËÎÏ"
+
+#: info/session.c:1955
+msgid "Scroll the other window backward"
+msgstr "ðÒÏËÒÕÔÉÔØ ÄÒÕÇÏÅ ÏËÎÏ ÎÁÚÁÄ"
+
+#: info/session.c:1961
+msgid "Grow (or shrink) this window"
+msgstr "õ×ÅÌÉÞÉÔØ (ÉÌÉ ÕÍÅÎØÛÉÔØ) ÔÅËÕÝÅÅ ÏËÎÏ"
+
+#: info/session.c:1972
+msgid "Divide the available screen space among the visible windows"
+msgstr "òÁÚÄÅÌÉÔØ ÄÏÓÔÕÐÎÏÅ ÍÅÓÔÏ ÎÁ ÜËÒÁÎÅ ÍÅÖÄÕ ×ÉÄÉÍÙÍÉ ÏËÎÁÍÉ"
+
+#: info/session.c:1979
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "ðÅÒÅËÌÀÞÉÔØ ÒÅÖÉÍ ÒÁÚÂÉ×ÁÎÉÑ ÓÔÒÏË × ÔÅËÕÝÅÍ ÏËÎÅ"
+
+#: info/session.c:1986
+msgid "Toggle the usage of regular expressions in searches"
+msgstr ""
+
+#: info/session.c:1990
+msgid "Using regular expressions for searches."
+msgstr ""
+
+#: info/session.c:1991
+msgid "Using literal strings for searches."
+msgstr ""
+
+#: info/session.c:2162
+msgid "Select the Next node"
+msgstr "ðÅÒÅÊÔÉ ÎÁ `óÌÅÄÕÀÝÕÀ' ÎÏÄÕ"
+
+#: info/session.c:2170
+msgid "Select the Prev node"
+msgstr "ðÅÒÅÊÔÉ ÎÁ `ðÒÅÄÙÄÕÝÕÀ' ÎÏÄÕ"
+
+#: info/session.c:2178
+msgid "Select the Up node"
+msgstr "ðÅÒÅÊÔÉ ÎÁ `÷ÅÒÈÎÀÀ' ÎÏÄÕ"
+
+#: info/session.c:2185
+msgid "Select the last node in this file"
+msgstr "ðÅÒÅÊÔÉ ÎÁ ÐÏÓÌÅÄÎÀÀ ÎÏÄÕ × ÆÁÊÌÅ"
+
+#: info/session.c:2212 info/session.c:2245
+msgid "This window has no additional nodes"
+msgstr "üÔÏ ÏËÎÏ ÎÅ ÉÍÅÅÔ ÄÏÐÏÌÎÉÔÅÌØÎÙÈ ÎÏÄ"
+
+#: info/session.c:2218
+msgid "Select the first node in this file"
+msgstr "ðÅÒÅÊÔÉ ÎÁ ÐÅÒ×ÕÀ ÎÏÄÕ × ÆÁÊÌÅ"
+
+#: info/session.c:2252
+msgid "Select the last item in this node's menu"
+msgstr "÷ÙÂÒÁÔØ ÐÏÓÌÅÄÎÉÊ ÐÕÎËÔ ÍÅÎÀ × ÔÅËÕÝÅÊ ÎÏÄÅ"
+
+#: info/session.c:2258
+msgid "Select this menu item"
+msgstr "÷ÙÂÒÁÔØ ÚÁÄÁÎÎÙÊ ÐÕÎËÔ ÍÅÎÀ"
+
+#: info/session.c:2291
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "÷ ÜÔÏÍ ÍÅÎÀ ÎÅÔ %d ÐÕÎËÔÏ×."
+
+#: info/session.c:2485 info/session.c:2486
+#, c-format
+msgid "Menu item (%s): "
+msgstr "ðÕÎËÔ ÍÅÎÀ (%s): "
+
+#: info/session.c:2489
+msgid "Menu item: "
+msgstr "ðÕÎËÔ ÍÅÎÀ: "
+
+#: info/session.c:2496 info/session.c:2497
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "ðÅÒÅÊÔÉ ÐÏ ÓÓÙÌËÅ (%s): "
+
+#: info/session.c:2500
+msgid "Follow xref: "
+msgstr "ðÅÒÅÊÔÉ ÐÏ ÓÓÙÌËÅ: "
+
+#: info/session.c:2629
+msgid "Read a menu item and select its node"
+msgstr "óÞÉÔÁÔØ ÉÍÑ ÐÕÎËÔÁ ÍÅÎÀ É ÐÅÒÅÊÔÉ Ë ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÊ ÎÏÄÅ"
+
+#: info/session.c:2637
+msgid "Read a footnote or cross reference and select its node"
+msgstr "óÞÉÔÁÔØ ÉÍÑ ÓÓÙÌËÉ ÉÌÉ ÓÎÏÓËÉ É ÐÅÒÅÊÔÉ Ë ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÊ ÎÏÄÅ"
+
+#: info/session.c:2643
+msgid "Move to the start of this node's menu"
+msgstr "óÍÅÓÔÉÔØÓÑ Ë ÎÁÞÁÌÕ ÍÅÎÀ ÔÅËÕÝÅÊ ÎÏÄÙ"
+
+#: info/session.c:2667
+msgid "Visit as many menu items at once as possible"
+msgstr "ðÒÏÓÍÏÔÒÅÔØ ÏÄÎÏ×ÒÅÍÅÎÎÏ ËÁË ÍÏÖÎÏ ÂÏÌØÛÅ ÎÏÄ"
+
+#: info/session.c:2695
+msgid "Read a node name and select it"
+msgstr "óÞÉÔÁÔØ ÉÍÑ ÎÏÄÙ É ÐÅÒÅÊÔÉ Ë ÎÅÊ"
+
+#: info/session.c:2750 info/session.c:2755
+msgid "Goto node: "
+msgstr "ðÅÒÅÊÔÉ Ë ÎÏÄÅ: "
+
+#: info/session.c:2819
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "÷ ÎÏÄÅ `%s' ÎÅÔ ÍÅÎÀ."
+
+#: info/session.c:2865
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "ðÕÎËÔ ÍÅÎÀ `%s' ÏÔÓÕÔÓÔ×ÕÅÔ × ÎÏÄÅ `%s'."
+
+#: info/session.c:2895
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÎÁÊÔÉ ÎÏÄÕ ÐÏ ÓÓÙÌËÅ `%s' × `%s'."
+
+#: info/session.c:2945
+msgid "Read a list of menus starting from dir and follow them"
+msgstr "óÞÉÔÁÔØ ÓÐÉÓÏË ÍÅÎÀ, ÎÁÞÉÎÁÀÝÉÊÓÑ Ó dir É ÐÒÏÓÌÅÄÏ×ÁÔØ ÐÏ ÎÉÍ"
+
+#: info/session.c:2947
+msgid "Follow menus: "
+msgstr "ðÒÏÓÌÅÄÏ×ÁÔØ ÐÏ ÍÅÎÀ: "
+
+#: info/session.c:3140
+msgid "Find the node describing program invocation"
+msgstr "îÁÈÏÄÉÔ ÎÏÄÕ, ÒÁÓÓËÁÚÙ×ÁÀÝÕÀ, ËÁË ×ÙÚÙ×ÁÔØ ÐÒÏÇÒÁÍÍÕ"
+
+#: info/session.c:3142
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "îÁÊÔÉ ÎÏÄÕ Invocation ÄÌÑ [%s]: "
+
+#: info/session.c:3180
+msgid "Read a manpage reference and select it"
+msgstr "óÞÉÔÁÔØ ÉÍÑ manpage É ÐÅÒÅÊÔÉ Ë ÎÅÊ"
+
+#: info/session.c:3184
+msgid "Get Manpage: "
+msgstr "ðÒÏÓÍÏÔÒÅÔØ manpage: "
+
+#: info/session.c:3214
+msgid "Select the node `Top' in this file"
+msgstr "ðÅÒÅÊÔÉ ÎÁ `ðÅÒ×ÕÀ' ÎÏÄÕ"
+
+#: info/session.c:3220
+msgid "Select the node `(dir)'"
+msgstr "ðÅÒÅÊÔÉ ÎÁ ÎÏÄÕ `(dir)'"
+
+#: info/session.c:3237 info/session.c:3239
+#, c-format
+msgid "Kill node (%s): "
+msgstr "õÄÁÌÉÔØ ÎÏÄÕ (%s): "
+
+#: info/session.c:3291
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ ÎÏÄÕ `%s'"
+
+#: info/session.c:3301
+msgid "Cannot kill the last node"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ ÐÏÓÌÅÄÎÀÀ ÎÏÄÕ"
+
+#: info/session.c:3387
+msgid "Select the most recently selected node"
+msgstr "ðÅÒÅÊÔÉ Ë ÐÏÓÌÅÄÎÅÊ ×ÙÂÒÁÎÎÏÊ ÎÏÄÅ"
+
+#: info/session.c:3393
+msgid "Kill this node"
+msgstr "õÄÁÌÉÔØ ÔÅËÕÝÕÀ ÎÏÄÕ"
+
+#: info/session.c:3401
+msgid "Read the name of a file and select it"
+msgstr "óÞÉÔÁÔØ ÉÍÑ ÆÁÊÌÁ É ÐÅÒÅÊÔÉ Ë ÎÅÍÕ"
+
+#: info/session.c:3405
+msgid "Find file: "
+msgstr "ïÂÒÁÔÉÔØÓÑ Ë ÆÁÊÌÕ: "
+
+#: info/session.c:3422
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÎÁÊÔÉ `%s'."
+
+#: info/session.c:3465 info/session.c:3583
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ `%s'."
+
+#: info/session.c:3479 info/session.c:3601 info/session.c:3661
+msgid "Done."
+msgstr "úÁ×ÅÒÛÅÎÏ."
+
+#: info/session.c:3534
+#, c-format
+msgid "Writing node %s..."
+msgstr "úÁÐÉÓØ ÎÏÄÙ %s..."
+
+#: info/session.c:3610
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr "îÁÐÒÁ×ÉÔØ ÓÏÄÅÒÖÉÍÏÅ ÜÔÏÊ ÎÏÄÙ ÎÁ ×ÈÏÄ ËÏÍÁÎÄÙ INFO_PRINT_COMMAND"
+
+#: info/session.c:3645
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ËÁÎÁÌ Ë `%s'."
+
+#: info/session.c:3651
+#, c-format
+msgid "Printing node %s..."
+msgstr "ðÅÞÁÔØ ÎÏÄÙ %s..."
+
+#: info/session.c:3900
+msgid "Search continued from the end of the document."
+msgstr ""
+
+#: info/session.c:3905
+#, fuzzy
+msgid "Search continued from the beginning of the document."
+msgstr "õÎÉÞÔÏÖÉÔØ ÔÅËÓÔ ÄÏ ÎÁÞÁÌÁ ÓÔÒÏËÉ"
+
+#: info/session.c:3922
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "ðÏÉÓË ÆÁÊÌÁ %s ..."
+
+#: info/session.c:3979
+msgid "Read a string and search for it case-sensitively"
+msgstr "óÞÉÔÁÔØ ÓÔÒÏËÕ É ÚÁÐÕÓÔÉÔØ ÒÅÇÉÓÔÒÏÚÁ×ÉÓÉÍÙÊ ÐÏÉÓË"
+
+#: info/session.c:3986
+msgid "Read a string and search for it"
+msgstr "óÞÉÔÁÔØ ÓÔÒÏËÕ É ÚÁÐÕÓÔÉÔØ ÐÏÉÓË"
+
+#: info/session.c:3994
+msgid "Read a string and search backward for it"
+msgstr "óÞÉÔÁÔØ ÓÔÒÏËÕ É ÚÁÐÕÓÔÉÔØ ÐÏÉÓË × ÏÂÒÁÔÎÏÍ ÎÁÐÒÁ×ÌÅÎÉÉ"
+
+#: info/session.c:4030 info/session.c:4036
+#, fuzzy, c-format
+msgid "%s%s%s [%s]: "
+msgstr "%s%s ÓÔÒÏËÉ [%s]: "
+
+#: info/session.c:4031 info/session.c:4037
+msgid "Regexp search"
+msgstr ""
+
+#: info/session.c:4032 info/session.c:4038
+#, fuzzy
+msgid " case-sensitively"
+msgstr " c ÕÞÅÔÏÍ ÒÅÇÉÓÔÒÁ "
+
+#: info/session.c:4033 info/session.c:4039
+#, fuzzy
+msgid " backward"
+msgstr "ïÂÒÁÔÎÙÊ ÐÏÉÓË"
+
+#: info/session.c:4037
+msgid "Search"
+msgstr "ðÏÉÓË"
+
+#: info/session.c:4079
+msgid "Search failed."
+msgstr "îÅ ÎÁÊÄÅÎÏ"
+
+#: info/session.c:4097
+msgid "Repeat last search in the same direction"
+msgstr "ðÏ×ÔÏÒÉÔØ ÐÏÓÌÅÄÎÉÊ ÐÏÉÓË × ÔÏÍ ÖÅ ÎÁÐÒÁ×ÌÅÎÉÉ"
+
+#: info/session.c:4100 info/session.c:4110
+msgid "No previous search string"
+msgstr "îÅÔ ÓÔÒÏËÉ ÐÒÅÄÙÄÕÝÅÇÏ ÐÏÉÓËÁ"
+
+#: info/session.c:4107
+msgid "Repeat last search in the reverse direction"
+msgstr "ðÏ×ÔÏÒÉÔØ ÐÏÓÌÅÄÎÉÊ ÐÏÉÓË × ÏÂÒÁÔÎÏÍ ÎÁÐÒÁ×ÌÅÎÉÉ"
+
+#: info/session.c:4126 info/session.c:4132
+msgid "Search interactively for a string as you type it"
+msgstr "úÁÐÕÓÔÉÔØ ÉÎÔÅÒÁËÔÉ×ÎÙÊ ÎÁÒÁÝÉ×ÁÅÍÙÊ ÐÏÉÓË"
+
+#: info/session.c:4212
+#, fuzzy
+msgid "Regexp I-search backward: "
+msgstr "îÁÒÁÝÉ×ÁÅÍÙÊ ÏÂÒÁÔÎÙÊ ÐÏÉÓË: "
+
+#: info/session.c:4213
+msgid "I-search backward: "
+msgstr "îÁÒÁÝÉ×ÁÅÍÙÊ ÏÂÒÁÔÎÙÊ ÐÏÉÓË: "
+
+#: info/session.c:4215
+#, fuzzy
+msgid "Regexp I-search: "
+msgstr "îÁÒÁÝÉ×ÁÅÍÙÊ ÐÏÉÓË: "
+
+#: info/session.c:4216
+msgid "I-search: "
+msgstr "îÁÒÁÝÉ×ÁÅÍÙÊ ÐÏÉÓË: "
+
+#: info/session.c:4241 info/session.c:4243
+msgid "Failing "
+msgstr "îÅ ÎÁÊÄÅÎÏ "
+
+#: info/session.c:4734
+msgid "Move to the previous cross reference"
+msgstr "óÍÅÓÔÉÔØÓÑ Ë ÐÒÅÄÙÄÕÝÅÊ ÓÓÙÌËÅ"
+
+#: info/session.c:4752
+msgid "Move to the next cross reference"
+msgstr "óÍÅÓÔÉÔØÓÑ Ë ÓÌÅÄÕÀÝÅÊ ÓÓÙÌËÅ"
+
+#: info/session.c:4774
+msgid "Select reference or menu item appearing on this line"
+msgstr "÷ÙÂÒÁÔØ ÓÓÙÌËÕ ÉÌÉ ÐÕÎËÔ ÍÅÎÀ, ÎÁÈÏÄÑÝÉÊÓÑ ÎÁ ÄÁÎÎÏÊ ÓÔÒÏËÅ"
+
+#: info/session.c:4797
+msgid "Cancel current operation"
+msgstr "ïÔÍÅÎÉÔØ ×ÙÐÏÌÎÅÎÉÅ ÔÅËÕÝÅÊ ËÏÍÁÎÄÙ"
+
+#: info/session.c:4804
+msgid "Quit"
+msgstr "÷ÙÈÏÄ"
+
+#: info/session.c:4813
+msgid "Move the cursor to a specific line of the window"
+msgstr "ðÅÒÅÍÅÓÔÉÔØ ËÕÒÓÏÒ Ë ÚÁÄÁÎÎÏÊ ÓÔÒÏËÅ ÏËÎÁ"
+
+#: info/session.c:4845
+msgid "Redraw the display"
+msgstr "ðÅÒÅÒÉÓÏ×ÁÔØ ÜËÒÁÎ"
+
+#: info/session.c:4882
+msgid "Quit using Info"
+msgstr "÷ÙÊÔÉ ÉÚ Info"
+
+#: info/session.c:4895
+msgid "Run command bound to this key's lowercase variant"
+msgstr "úÁÐÕÓÔÉÔØ ËÏÍÁÎÄÕ, ÐÒÉ×ÑÚÁÎÎÕÀ Ë ÜÔÏÊ ËÌÁ×ÉÛÅ × ÎÉÖÎÅÍ ÒÅÇÉÓÔÒÅ"
+
+#: info/session.c:4906
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "îÅÉÚ×ÅÓÔÎÁÑ ËÏÍÁÎÄÁ (%s)."
+
+#: info/session.c:4909
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "\"%s\" ÎÅ×ÅÒÎÁÑ ËÏÍÁÎÄÁ"
+
+#: info/session.c:4910
+#, c-format
+msgid "`%s' is invalid"
+msgstr "`%s' ÎÅ×ÅÒÎÏ"
+
+#: info/session.c:5125
+msgid "Add this digit to the current numeric argument"
+msgstr "äÏÂÁ×ÌÑÅÔ ÃÉÆÒÕ Ë ÔÅËÕÝÅÍÕ ÞÉÓÌÏ×ÏÍÕ ÁÒÇÕÍÅÎÔÕ"
+
+#: info/session.c:5134
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "îÁÞÁÔØ (ÉÌÉ ÕÍÎÏÖÉÔØ ÎÁ 4) ÔÅËÕÝÉÊ ÞÉÓÌÏ×ÏÊ ÁÒÇÕÍÅÎÔ"
+
+#: info/session.c:5149
+msgid "Internally used by \\[universal-argument]"
+msgstr "éÓÐÏÌØÚÕÅÔÓÑ ÆÕÎËÃÉÅÊ \\[universal-argument]"
+
+#: info/tilde.c:336
+#, c-format
+msgid "readline: Out of virtual memory!\n"
+msgstr "readline: ÷ÉÒÔÕÁÌØÎÁÑ ÐÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ!\n"
+
+#: info/variables.c:37
+msgid "When \"On\", footnotes appear and disappear automatically"
+msgstr "åÓÌÉ ÕÓÔÁÎÏ×ÌÅÎÏ (\"On\"), ÓÎÏÓËÉ ÐÏÑ×ÌÑÀÔÓÑ É ÉÓÞÅÚÁÀÔ Á×ÔÏÍÁÔÉÞÅÓËÉ"
+
+#: info/variables.c:41
+msgid "When \"On\", creating or deleting a window resizes other windows"
+msgstr ""
+"åÓÌÉ ÕÓÔÁÎÏ×ÌÅÎÏ (\"On\"), ÓÏÚÄÁÎÉÅ ÉÌÉ ÕÄÁÌÅÎÉÅ ÏËÎÁ ÉÚÍÅÎÑÅÔ ÒÁÚÍÅÒ ÄÒÕÇÉÈ "
+"ÏËÏÎ"
+
+#: info/variables.c:45
+msgid "When \"On\", flash the screen instead of ringing the bell"
+msgstr "åÓÌÉ ÕÓÔÁÎÏ×ÌÅÎÏ (\"On\"), ×ÍÅÓÔÏ Ú×ÕËÏ×ÏÇÏ ÓÉÇÎÁÌÁ ÍÉÇÁÅÔ ÜËÒÁÎ"
+
+#: info/variables.c:49
+msgid "When \"On\", errors cause the bell to ring"
+msgstr "åÓÌÉ ÕÓÔÁÎÏ×ÌÅÎÏ (\"On\"), ÏÛÉÂËÉ ×ÙÚÙ×ÁÀÔ Ú×ÕËÏ×ÏÊ ÓÉÇÎÁÌ"
+
+#: info/variables.c:53
+msgid "When \"On\", Info garbage collects files which had to be uncompressed"
+msgstr "åÓÌÉ ÕÓÔÁÎÏ×ÌÅÎÏ (\"On\"), ÐÒÏÉÚ×ÏÄÉÔØ ÓÂÏÒËÕ ÍÕÓÏÒÁ ÄÌÑ ÓÖÁÔÙÈ ÆÁÊÌÏ×"
+
+#: info/variables.c:56
+msgid "When \"On\", the portion of the matched search string is highlighted"
+msgstr "åÓÌÉ ÕÓÔÁÎÏ×ÌÅÎÏ (\"On\"), ×ÙÄÅÌÑÔØ ÐÒÉ ÐÏÉÓËÅ ÓÏ×ÐÁ×ÛÕÀ ÓÔÒÏËÕ"
+
+#: info/variables.c:60
+msgid "Controls what happens when scrolling is requested at the end of a node"
+msgstr "ïÐÒÅÄÅÌÑÅÔ ÐÏ×ÅÄÅÎÉÅ ÐÒÏËÒÕÔËÉ × ËÏÎÃÅ ÎÏÄÙ"
+
+#: info/variables.c:65
+msgid "Same as scroll-behaviour"
+msgstr ""
+
+#: info/variables.c:69
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr "þÉÓÌÏ ÐÒÏËÒÕÞÉ×ÁÅÍÙÈ ÓÔÒÏË, ËÏÇÄÁ ËÕÒÓÏÒ ÐÅÒÅÍÅÝÁÅÔÓÑ ÚÁ ÐÒÅÄÅÌÙ ÏËÎÁ"
+
+#: info/variables.c:73
+msgid "Controls whether scroll-behavior affects cursor movement commands"
+msgstr ""
+
+#: info/variables.c:77
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr "åÓÌÉ ÕÓÔÁÎÏ×ÌÅÎÏ (\"On\"), Info ÏÔÏÂÒÁÖÁÅÔ ÓÉÍ×ÏÌÙ ISO Latin"
+
+#: info/variables.c:81
+#, fuzzy
+msgid ""
+"What to do when a scrolling command is issued at the end of the last node"
+msgstr "ïÐÒÅÄÅÌÑÅÔ ÐÏ×ÅÄÅÎÉÅ ÐÒÏËÒÕÔËÉ × ËÏÎÃÅ ÎÏÄÙ"
+
+#: info/variables.c:88
+msgid "Explain the use of a variable"
+msgstr "ïÐÉÓÁÔØ ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÐÅÒÅÍÅÎÎÏÊ"
+
+#: info/variables.c:94
+msgid "Describe variable: "
+msgstr "ïÐÉÓÁÔØ ÐÅÒÅÍÅÎÎÕÀ: "
+
+#: info/variables.c:113
+msgid "Set the value of an Info variable"
+msgstr "õÓÔÁÎÏ×ÉÔØ ÚÎÁÞÅÎÉÅ ÐÅÒÅÍÅÎÎÏÊ"
+
+#: info/variables.c:119
+msgid "Set variable: "
+msgstr "õÓÔÁÎÏ×ÉÔØ ÐÅÒÅÍÅÎÎÕÀ: "
+
+#: info/variables.c:137
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "õÓÔÁÎÏ×ÉÔØ ÚÎÁÞÅÎÉÅ %s ÒÁ×ÎÙÍ (%d): "
+
+#: info/variables.c:178
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "õÓÔÁÎÏ×ÉÔØ ÚÎÁÞÅÎÉÅ %s ÒÁ×ÎÙÍ (%s): "
+
+#: info/window.c:1026
+msgid "--*** Tags out of Date ***"
+msgstr "--*** ôÅÇÉ ÕÓÔÁÒÅÌÉ ***"
+
+#: info/window.c:1037
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), ÓÔÒÏË ----, "
+
+#: info/window.c:1044
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, ÓÔÒÏË: %d --%s--"
+
+#: info/window.c:1048
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, ÓÔÒÏË: %d --%s--"
+
+#: info/window.c:1055
+#, c-format
+msgid " Subfile: %s"
+msgstr " æÁÊÌ: %s"
+
+#: install-info/install-info.c:221
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: "
+
+#: install-info/install-info.c:270
+#, c-format
+msgid " for %s"
+msgstr " ÄÌÑ %s"
+
+#: install-info/install-info.c:500
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr "\túÁÐÕÓÔÉÔÅ `%s --help' ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÐÏÌÎÏÇÏ ÓÐÉÓËÁ ËÌÀÞÅÊ.\n"
+
+#: install-info/install-info.c:508
+#, fuzzy, c-format
+msgid "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ëìàþ]... TEXINFO-æáêì...\n"
+
+#: install-info/install-info.c:510
+msgid "Add or remove entries in INFO-FILE from the Info directory DIR-FILE."
+msgstr ""
+
+#: install-info/install-info.c:513
+msgid ""
+"Options:\n"
+" --debug report what is being done.\n"
+" --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+" don't insert any new entries.\n"
+" --description=TEXT the description of the entry is TEXT; used with\n"
+" the --name option to become synonymous with the\n"
+" --entry option.\n"
+" --dir-file=NAME specify file name of Info directory file;\n"
+" equivalent to using the DIR-FILE argument.\n"
+" --dry-run same as --test."
+msgstr ""
+
+#: install-info/install-info.c:525
+msgid ""
+" --entry=TEXT insert TEXT as an Info directory entry.\n"
+" TEXT is written as an Info menu item line followed\n"
+" by zero or more extra lines starting with "
+"whitespace.\n"
+" If you specify more than one entry, all are added.\n"
+" If you don't specify any entries, they are determined\n"
+" from information in the Info file itself.\n"
+" When removing, TEXT specifies the entry to remove.\n"
+" TEXT is only removed as a last resort, if the\n"
+" entry as determined from the Info file is not "
+"present,\n"
+" and the basename of the Info file isn't found either."
+msgstr ""
+
+#: install-info/install-info.c:537
+msgid ""
+" --help display this help and exit.\n"
+" --info-dir=DIR same as --dir-file=DIR/dir.\n"
+" --info-file=FILE specify Info file to install in the directory;\n"
+" equivalent to using the INFO-FILE argument.\n"
+" --item=TEXT same as --entry=TEXT.\n"
+" --keep-old do not replace entries, or remove empty sections.\n"
+" --menuentry=TEXT same as --name=TEXT.\n"
+" --name=TEXT the name of the entry is TEXT; used with --description\n"
+" to become synonymous with the --entry option.\n"
+" --no-indent do not format new entries in the DIR file.\n"
+" --quiet suppress warnings."
+msgstr ""
+
+#: install-info/install-info.c:550
+msgid ""
+" --regex=R put this file's entries in all sections that match the\n"
+" regular expression R (ignoring case).\n"
+" --remove same as --delete.\n"
+" --remove-exactly only remove if the info file name matches exactly;\n"
+" suffixes such as .info and .gz are not ignored.\n"
+" --section=SEC put entries in section SEC of the directory.\n"
+" If you specify more than one section, all the entries\n"
+" are added in each of the sections.\n"
+" If you don't specify any sections, they are "
+"determined\n"
+" from information in the Info file itself.\n"
+" --section R SEC equivalent to --regex=R --section=SEC --add-once."
+msgstr ""
+
+#: install-info/install-info.c:563
+msgid ""
+" --silent suppress warnings.\n"
+" --test suppress updating of DIR-FILE.\n"
+" --version display version information and exit."
+msgstr ""
+
+#: install-info/install-info.c:570
+#, fuzzy
+msgid ""
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+"ï ÏÛÉÂËÁÈ ÓÏÏÂÝÁÊÔÅ ÐÏ ÁÄÒÅÓÕ bug-texinfo@gnu.org,\n"
+"ÏÂÝÅÅ ÏÂÓÕÖÄÅÎÉÅ É ×ÏÐÒÏÓÙ ÎÁÐÒÁ×ÌÑÊÔÅ ÐÏ ÁÄÒÅÓÕ help-texinfo@gnu.org.\n"
+"äÏÍÁÛÎÁÑ ÓÔÒÁÎÉÃÁ Texinfo: http://www.gnu.org/software/texinfo/"
+
+#: install-info/install-info.c:597
+#, c-format
+msgid ""
+"This is the file .../info/dir, which contains the\n"
+"topmost node of the Info hierarchy, called (dir)Top.\n"
+"The first time you invoke Info you start off looking at this node.\n"
+"\n"
+"%s\tThis is the top of the INFO tree\n"
+"\n"
+" This (the Directory node) gives a menu of major topics.\n"
+" Typing \"q\" exits, \"?\" lists all Info commands, \"d\" returns here,\n"
+" \"h\" gives a primer for first-timers,\n"
+" \"mEmacs<Return>\" visits the Emacs manual, etc.\n"
+"\n"
+" In Emacs, you can click mouse button 2 on a menu item or cross reference\n"
+" to select it.\n"
+"\n"
+"%s\n"
+msgstr ""
+"üÔÏ ÆÁÊÌ .../info/dir, ÓÏÄÅÒÖÁÝÉÊ ËÏÒÎÅ×ÕÀ ÎÏÄÕ ÉÅÒÁÒÈÉÉ Info,\n"
+"ÎÁÚÙ×ÁÅÍÕÀ (dir)Top. ðÒÉ ×ÙÚÏ×Å Info ×Ù ×ÉÄÉÔÅ ÜÔÕ ÎÏÄÕ.\n"
+"\n"
+"%s\tüÔÏ ËÏÒÎÅ×ÁÑ ÎÏÄÁ ÉÅÒÁÒÈÉÉ Info\n"
+"\n"
+" úÄÅÓØ (× ËÁÔÁÌÏÇÅ Info) ÐÒÅÄÓÔÁ×ÌÅÎÏ ÍÅÎÀ ÐÏ ÏÓÎÏ×ÎÙÍ ÔÅÍÁÍ.\n"
+" îÁÖÍÉÔÅ \"q\" ÞÔÏÂÙ ×ÙÊÔÉ, \"?\" ÞÔÏÂÙ ÐÏÓÍÏÔÒÅÔØ ×ÓÅ ËÏÍÁÎÄÙ Info,\n"
+" \"d\" ÞÔÏÂÙ ×ÅÒÎÕÔØÓÑ ÓÀÄÁ, \"h\" ÞÔÏÂÙ ÐÒÏÞÉÔÁÔØ ÒÕËÏ×ÏÄÓÔ×Ï ÄÌÑ "
+"ÎÏ×ÉÞËÏ×,\n"
+" \"mEmacs<Return>\" ÞÔÏÂÙ ÐÒÏÞÉÔÁÔØ ÒÕËÏ×ÏÄÓÔ×Ï ÐÏ Emacs.\n"
+"\n"
+" ÷ Emacs ×Ù ÍÏÖÅÔÅ ÎÁÖÁÔØ ×ÔÏÒÕÀ ËÎÏÐËÕ ÍÙÛÉ ÎÁ ÐÕÎËÔÅ ÍÅÎÀ ÉÌÉ ÓÓÙÌËÅ,\n"
+" ÞÔÏÂÙ ÐÅÒÅÊÔÉ Ë ÎÅÍÕ.\n"
+"\n"
+"%s\n"
+
+#: install-info/install-info.c:622
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ (%s) É ÓÏÚÄÁÔØ (%s)\n"
+
+#: install-info/install-info.c:715
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: ÐÕÓÔÏÊ ÆÁÊÌ"
+
+#: install-info/install-info.c:1046 install-info/install-info.c:1086
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "START-INFO-DIR-ENTRY ÂÅÚ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÇÏ END-INFO-DIR-ENTRY"
+
+#: install-info/install-info.c:1081
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "END-INFO-DIR-ENTRY ÂÅÚ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÇÏ START-INFO-DIR-ENTRY"
+
+#: install-info/install-info.c:1946 install-info/install-info.c:1956
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr "%s: ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ ÆÁÊÌ dir: %s\n"
+
+#: install-info/install-info.c:2036
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: íÏÖÎÏ ÚÁÄÁÔØ ÔÏÌØËÏ ÏÄÉÎ Info-ÆÁÊÌ.\n"
+
+#: install-info/install-info.c:2069
+#, c-format
+msgid "Extra regular expression specified, ignoring `%s'"
+msgstr ""
+
+#: install-info/install-info.c:2081
+#, c-format
+msgid "Error in regular expression `%s': %s"
+msgstr ""
+
+#: install-info/install-info.c:2139
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "ÉÚÌÉÛÎÉÊ ÁÒÇÕÍÅÎÔ `%s'"
+
+#: install-info/install-info.c:2143
+msgid "No input file specified; try --help for more information."
+msgstr ""
+"îÅ ÚÁÄÁÎ ×ÈÏÄÎÏÊ ÆÁÊÌ.\n"
+"ðÏÐÒÏÂÕÊÔÅ `%s --help' ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÂÏÌÅÅ ÐÏÄÒÏÂÎÏÇÏ ÏÐÉÓÁÎÉÑ."
+
+#: install-info/install-info.c:2146
+msgid "No dir file specified; try --help for more information."
+msgstr ""
+"îÅ ÚÁÄÁÎ ÆÁÊÌ ËÁÔÁÌÏÇÁ.\n"
+"ðÏÐÒÏÂÕÊÔÅ `%s --help' ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÂÏÌÅÅ ÐÏÄÒÏÂÎÏÇÏ ÏÐÉÓÁÎÉÑ."
+
+#: install-info/install-info.c:2288
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "× `%s' ÎÅÔ ×ÈÏÖÄÅÎÉÑ ÄÌÑ ËÁÔÁÌÏÇÁ Info"
+
+#: install-info/install-info.c:2536
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "ÎÅ ÎÁÊÄÅÎÏ ×ÈÏÖÄÅÎÉÊ ÄÌÑ `%s'; ÎÉÞÅÇÏ ÎÅ ÕÄÁÌÅÎÏ"
+
+#: lib/xexit.c:54
+msgid "ferror on stdout\n"
+msgstr ""
+
+#: lib/xexit.c:59
+msgid "fflush error on stdout\n"
+msgstr ""
+
+#: makeinfo/cmds.c:582 makeinfo/cmds.c:604
+#, c-format
+msgid "arguments to @%s ignored"
+msgstr "ÁÒÇÕÍÅÎÔÙ ÄÌÑ @%s ÉÇÎÏÒÉÒÏ×ÁÎÙ"
+
+#: makeinfo/cmds.c:779
+msgid "January"
+msgstr "ÑÎ×ÁÒÑ"
+
+#: makeinfo/cmds.c:779
+msgid "February"
+msgstr "ÆÅ×ÒÁÌÑ"
+
+#: makeinfo/cmds.c:779
+msgid "March"
+msgstr "ÍÁÒÔÁ"
+
+#: makeinfo/cmds.c:779
+msgid "April"
+msgstr "ÁÐÒÅÌÑ"
+
+#: makeinfo/cmds.c:779
+msgid "May"
+msgstr "ÍÁÑ"
+
+#: makeinfo/cmds.c:780
+msgid "June"
+msgstr "ÉÀÎÑ"
+
+#: makeinfo/cmds.c:780
+msgid "July"
+msgstr "ÉÀÌÑ"
+
+#: makeinfo/cmds.c:780
+msgid "August"
+msgstr "Á×ÇÕÓÔÁ"
+
+#: makeinfo/cmds.c:780
+msgid "September"
+msgstr "ÓÅÎÔÑÂÒÑ"
+
+#: makeinfo/cmds.c:780
+msgid "October"
+msgstr "ÏËÔÑÂÒÑ"
+
+#: makeinfo/cmds.c:781
+msgid "November"
+msgstr "ÎÏÑÂÒÑ"
+
+#: makeinfo/cmds.c:781
+msgid "December"
+msgstr "ÄÅËÁÂÒÑ"
+
+#: makeinfo/cmds.c:1131
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "ÍÁÌÏ×ÅÒÏÑÔÎÙÊ ÚÎÁË %c × @var"
+
+#: makeinfo/cmds.c:1174
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "×ÅÓØ ÁÒÇÕÍÅÎÔ @sc ÎÁÂÒÁÎ ÚÁÇÌÁ×ÎÙÍÉ ÂÕË×ÁÍÉ, ÒÅÚÕÌØÔÁÔÁ ÎÅ ÂÕÄÅÔ"
+
+#: makeinfo/cmds.c:1229
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "ÏÖÉÄÁÌÏÓØ `{', ×ÓÔÒÅÞÅÎÏ `%c'"
+
+#: makeinfo/cmds.c:1269
+msgid "end of file inside verb block"
+msgstr "ËÏÎÅà ÆÁÊÌÁ ×ÓÔÒÅÞÅÎ ×ÎÕÔÒÉ ÎÅÏËÏÎÞÅÎÎÏÇÏ ÂÌÏËÁ"
+
+#: makeinfo/cmds.c:1277
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "ÏÖÉÄÁÌÏÓØ `}', ×ÓÔÒÅÞÅÎÏ `%c'"
+
+#: makeinfo/cmds.c:1308
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+"@strong{Note...} ÓÏÚÄÁÅÔ × Info ÌÏÖÎÕÀ ÐÅÒÅËÒÅÓÔÎÕÀ ÓÓÙÌËÕ; ÐÅÒÅÆÒÁÚÉÒÕÊÔÅ "
+"ÔÅËÓÔ, ÞÔÏÂÙ ÉÚÂÅÖÁÔØ ÜÔÏÇÏ"
+
+#: makeinfo/cmds.c:1504
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "ëÏÍÁÎÄÁ %c%s ÕÓÔÁÒÅÌÁ É ÎÅ ÉÓÐÏÌØÚÕÅÔÓÑ"
+
+#: makeinfo/cmds.c:1612
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "ËÏÍÁÎÄÅ @sp ÎÕÖÎÏ ÕËÁÚÁÔØ ÐÏÌÏÖÉÔÅÌØÎÙÊ ÞÉÓÌÏ×ÏÊ ÁÒÇÕÍÅÎÔ, Á ÎÅ `%s'"
+
+#: makeinfo/cmds.c:2023 makeinfo/footnote.c:81
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "ðÌÏÈÏÊ ÁÒÇÕÍÅÎÔ ÄÌÑ %c%s"
+
+#: makeinfo/cmds.c:2033 makeinfo/makeinfo.c:4317
+msgid "asis"
+msgstr "asis"
+
+#: makeinfo/cmds.c:2035 makeinfo/cmds.c:2065 makeinfo/makeinfo.c:4319
+msgid "none"
+msgstr "none"
+
+#: makeinfo/cmds.c:2049
+#, c-format
+msgid "Bad argument to @%s"
+msgstr "ðÌÏÈÏÊ ÁÒÇÕÍÅÎÔ ÄÌÑ @%s"
+
+# ???
+#: makeinfo/cmds.c:2063
+msgid "insert"
+msgstr "insert"
+
+#: makeinfo/cmds.c:2079
+#, fuzzy, c-format
+msgid "Bad argument to @%s: %s"
+msgstr "ðÌÏÈÏÊ ÁÒÇÕÍÅÎÔ ÄÌÑ @%s"
+
+#: makeinfo/cmds.c:2162
+#, c-format
+msgid "Expected @%s on or off, not `%s'"
+msgstr ""
+
+#: makeinfo/cmds.c:2182
+#, c-format
+msgid "Only @%s 10 or 11 is supported, not `%s'"
+msgstr ""
+
+#: makeinfo/defun.c:83
+msgid "Missing `}' in @def arg"
+msgstr "÷ ÁÒÇÕÍÅÎÔÅ @def ÐÒÏÐÕÝÅÎÁ `}'"
+
+#: makeinfo/defun.c:711
+#, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr "îÕÖÎÏ ÂÙÔØ × ÂÌÏËÅ `@%s', ÞÔÏÂÙ ÉÓÐÏÌØÚÏ×ÁÔØ `@%s'"
+
+#: makeinfo/files.c:434
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:637
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr "ÐÅÒÅÄ ÉÍÅÎÅÍ ×ÙÈÏÄÎÏÇÏ ÆÁÊÌÁ ÏÐÕÝÅÎÏ `%s'"
+
+#: makeinfo/files.c:645
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr "`%s' ÏÐÕÝÅÎÏ, ÐÏÓËÏÌØËÕ ÐÅÞÁÔØ ÉÄÅÔ ÎÁ ÓÔÁÎÄÁÒÔÎÙÊ ×Ù×ÏÄ"
+
+#: makeinfo/files.c:693
+msgid "Output buffer not empty."
+msgstr "÷ÙÈÏÄÎÏÊ ÂÕÆÅÒ ÎÅ ÐÕÓÔ."
+
+#: makeinfo/float.c:181
+#, c-format
+msgid "Requested float type `%s' not previously used"
+msgstr ""
+
+#: makeinfo/float.c:376 makeinfo/float.c:382 makeinfo/index.c:959
+#: makeinfo/index.c:965
+msgid "See "
+msgstr "óÍÏÔÒÉÔÅ "
+
+#: makeinfo/footnote.c:149
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "`%c%s' ÔÒÅÂÕÅÔ ÁÒÇÕÍÅÎÔ `{...}', Á ÎÅ ÐÒÏÓÔÏ `%s'"
+
+#: makeinfo/footnote.c:164
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "äÌÑ ÓÎÏÓËÉ `%s' ÎÅÔ ÚÁËÒÙ×ÁÀÝÅÊ ÆÉÇÕÒÎÏÊ ÓËÏÂËÉ"
+
+#: makeinfo/footnote.c:197
+msgid "Footnote defined without parent node"
+msgstr "óÎÏÓËÁ ÏÐÒÅÄÅÌÅÎÁ ÂÅÚ ÒÏÄÉÔÅÌØÓËÏÊ ÎÏÄÙ"
+
+#: makeinfo/footnote.c:209
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "óÎÏÓËÉ ÉÚ ÓÎÏÓÏË ÚÁÐÒÅÝÅÎÙ"
+
+#: makeinfo/footnote.c:301 makeinfo/index.c:187
+msgid "Footnotes"
+msgstr "óÎÏÓËÉ"
+
+#: makeinfo/html.c:91
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ css-ÆÁÊÌ: %s"
+
+#: makeinfo/html.c:180
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr "%s:%d: css-ÆÁÊÌ ÏÂÒÙ×ÁÅÔÓÑ × ËÏÍÍÅÎÔÁÒÉÉ"
+
+#: makeinfo/html.c:426
+msgid "[unexpected] no html tag to pop"
+msgstr ""
+"[ÎÅÐÒÅÄ×ÉÄÅÎÎÁÑ ÓÉÔÕÁÃÉÑ] × ÓÔÅËÅ html-ÔÅÇÏ× ÎÅÔ ÜÌÅÍÅÎÔÁ ÄÌÑ ×ÙÔÁÌËÉ×ÁÎÉÑ"
+
+#: makeinfo/html.c:800
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "[ÎÅÐÒÅÄ×ÉÄÅÎÎÁÑ ÓÉÔÕÁÃÉÑ] ÎÅ×ÅÒÎÏÅ ÉÍÑ ÎÏÄÙ: `%s'"
+
+#: makeinfo/index.c:167
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "éÍÅÎÎÏÊ ÕËÁÚÁÔÅÌØ `%s' ÎÅÉÚ×ÅÓÔÅÎ"
+
+#: makeinfo/index.c:232
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr ""
+"Info ÎÅ ÍÏÖÅÔ ÏÂÒÁÂÏÔÁÔØ ÚÎÁË `:' ×Ï ×ÈÏÖÄÅÎÉÉ ÁÌÆÁ×ÉÔÎÏÇÏ ÕËÁÚÁÔÅÌÑ `%s'"
+
+#: makeinfo/index.c:410
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "éÍÅÎÎÏÊ ÕËÁÚÁÔÅÌØ `%s' ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ"
+
+#: makeinfo/index.c:453
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "îÅÉÚ×ÅÓÔÅÎ ÉÍÅÎÎÏÊ ÕËÁÚÁÔÅÌØ `%s' É/ÉÌÉ `%s' × @synindex"
+
+#: makeinfo/index.c:676
+msgid "(line )"
+msgstr "(ÓÔÒÏËÁ )"
+
+#: makeinfo/index.c:684
+#, c-format
+msgid "(line %*d)"
+msgstr "(ÓÔÒÏËÁ %*d)"
+
+#: makeinfo/index.c:765
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "îÅÉÚ×ÅÓÔÅÎ ÉÍÅÎÎÏÊ ÕËÁÚÁÔÅÌØ `%s' × @printindex"
+
+#: makeinfo/index.c:834
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "÷ÈÏÖÄÅÎÉÅ ÄÌÑ ÉÍÅÎÎÏÇÏ ÕËÁÚÁÔÅÌÑ `%s' ×ÎÅ ÎÏÄÙ"
+
+#: makeinfo/index.c:837 makeinfo/index.c:873
+msgid "(outside of any node)"
+msgstr "(×ÎÅ ËÁËÏÊ-ÌÉÂÏ ÎÏÄÙ)"
+
+#: makeinfo/insertion.c:161
+msgid "@item not allowed in argument to @itemize"
+msgstr "ÎÅÌØÚÑ ÚÁÄÁ×ÁÔØ @item × ÁÒÇÕÍÅÎÔÅ ÄÌÑ @itemize"
+
+#: makeinfo/insertion.c:242
+msgid "Broken-Type in insertion_type_pname"
+msgstr "Broken-Type × insertion_type_pname"
+
+#: makeinfo/insertion.c:338
+msgid "Enumeration stack overflow"
+msgstr "ðÅÒÅÐÏÌÎÅÎÉÅ ÓÔÅËÁ ÐÅÒÅÞÉÓÌÅÎÉÑ"
+
+#: makeinfo/insertion.c:370
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "ÚÁËÏÎÞÉÌÓÑ ÁÌÆÁ×ÉÔ, ×ÏÚ×ÒÁÔ ÎÁ %c"
+
+#: makeinfo/insertion.c:639
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s ÄÏÌÖÎÁ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ c ÁÒÇÕÍÅÎÔÏÍ: ÆÏÒÍÁÔÏÍ ÄÌÑ %citem"
+
+#: makeinfo/insertion.c:727
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr "ÂÌÏËÉ %cfloat ÎÅÌØÚÑ ×ËÌÁÄÙ×ÁÔØ ÄÒÕÇ × ÄÒÕÇÁ"
+
+#: makeinfo/insertion.c:981
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "ÏÖÉÄÁÌÏÓØ `@end' Ó `%s', ×ÓÔÒÅÞÅÎÏ `%s'"
+
+#: makeinfo/insertion.c:1349
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "îÅÔ ÐÁÒÎÏÊ `%cend %s'"
+
+#: makeinfo/insertion.c:1618
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s ÔÒÅÂÕÅÔ ÂÕË×Ù ÉÌÉ ÃÉÆÒÙ"
+
+#: makeinfo/insertion.c:1718
+msgid "end of file inside verbatim block"
+msgstr "ËÏÎÅà ÆÁÊÌÁ ×ÓÔÒÅÞÅÎ ×ÎÕÔÒÉ ÎÅÏËÏÎÞÅÎÎÏÇÏ ÂÌÏËÁ"
+
+#: makeinfo/insertion.c:1942
+#, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "@%s ÎÅ ÉÍÅÅÔ ÓÍÙÓÌÁ ×ÎÅ ÂÌÏËÁ `@float'"
+
+#: makeinfo/insertion.c:1978
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "@menu ×ÓÔÒÅÞÅÎÏ ÐÅÒÅÄ ÐÅÒ×ÏÊ @node, ÂÕÄÅÔ ÓÏÚÄÁÎÁ ÎÏÄÁ `Top'"
+
+#: makeinfo/insertion.c:1979
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr ""
+"×ÅÒÏÑÔÎÏ, ×ÁÛÁ ÎÏÄÁ @top ÄÏÌÖÎÁ ÂÙÔØ × ÂÌÏËÅ @ifnottex, Á ÎÅ × @ifinfo?"
+
+#: makeinfo/insertion.c:1991
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "@detailmenu ×ÓÔÒÅÞÅÎÏ ÐÅÒÅÄ ÐÅÒ×ÏÊ @node, ÂÕÄÅÔ ÓÏÚÄÁÎÁ ÎÏÄÁ `Top'"
+
+#: makeinfo/insertion.c:2047
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr "@%s ÎÅ ÉÍÅÅÔ ÓÍÙÓÌÁ ×ÎÅ ÂÌÏËÁ `@titlepage' ÉÌÉ `@quotation'"
+
+#: makeinfo/insertion.c:2061
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "@%s ÎÅ ÉÍÅÅÔ ÓÍÙÓÌÁ ×ÎÅ ÂÌÏËÁ `@titlepage'"
+
+#: makeinfo/insertion.c:2092
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "îÅÐÁÒÎÁÑ `%c%s'"
+
+#: makeinfo/insertion.c:2097
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "ðÏÓÌÅ `%c%s' ÄÏÌÖÎÏ ÞÔÏ-ÔÏ ÉÄÔÉ"
+
+#: makeinfo/insertion.c:2103
+#, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "ðÌÏÈÏÊ ÁÒÇÕÍÅÎÔ `%s' ÄÌÑ `@%s', ÂÕÄÅÔ ÉÓÐÏÌØÚÏ×ÁÎ `%s'"
+
+#: makeinfo/insertion.c:2200
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "@%s ÎÅ ÉÍÅÅÔ ÓÍÙÓÌÁ ×ÎÕÔÒÉ ÂÌÏËÁ `@%s'"
+
+#: makeinfo/insertion.c:2209
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "@itemx ÎÅ ÉÍÅÅÔ ÓÍÙÓÌÁ ×ÎÕÔÒÉ ÂÌÏËÁ `%s'"
+
+#: makeinfo/insertion.c:2383
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "%c%s ×ÓÔÒÅÞÅÎÁ ×ÎÅ ÂÌÏËÁ ×ÓÔÁ×ËÉ"
+
+#: makeinfo/lang.c:1218
+#, c-format
+msgid "no default territory known for language `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:1281
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr "%s ÎÅ Ñ×ÌÑÅÔÓÑ ×ÅÒÎÙÍ ËÏÄÏÍ ÑÚÙËÁ ÉÚ ISO 639"
+
+#: makeinfo/lang.c:1399
+#, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "ÉÍÑ ËÏÄÉÒÏ×ËÉ `%s' ÎÅ ÒÁÓÐÏÚÎÁÎÏ"
+
+#: makeinfo/lang.c:1407
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "ÉÚ×ÉÎÉÔÅ, ËÏÄÉÒÏ×ËÁ `%s' ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ"
+
+#: makeinfo/lang.c:1492
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "ÎÅÐÒÁ×ÉÌØÎÏ ÚÁËÏÄÉÒÏ×ÁÎÎÙÊ ÚÎÁË `%s'"
+
+#: makeinfo/lang.c:1800
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr "%c%s ÏÖÉÄÁÅÔ × ËÁÞÅÓÔ×Å ÁÒÇÕÍÅÎÔÁ `i' ÉÌÉ `j', Á ÎÅ `%c'"
+
+#: makeinfo/lang.c:1804
+#, c-format
+msgid "%c%s expects a single character `i' or `j' as argument"
+msgstr "%c%s ÏÖÉÄÁÅÔ × ËÁÞÅÓÔ×Å ÁÒÇÕÍÅÎÔÁ ÏÄÉÎ ÓÉÍ×ÏÌ `i' ÉÌÉ `j'"
+
+#: makeinfo/macro.c:128
+#, c-format
+msgid "macro `%s' previously defined"
+msgstr "ÍÁËÒÏ `%s' ÂÙÌÏ ÏÐÒÅÄÅÌÅÎÏ ÒÁÎØÛÅ"
+
+#: makeinfo/macro.c:132
+#, c-format
+msgid "here is the previous definition of `%s'"
+msgstr "ÍÅÓÔÏ ÐÒÅÄÙÄÕÝÅÇÏ ÏÐÒÅÄÅÌÅÎÉÑ `%s'"
+
+#: makeinfo/macro.c:359
+#, c-format
+msgid "\\ in macro expansion followed by `%s' instead of parameter name"
+msgstr "ÐÏÓÌÅ \\ × ÒÁÓËÒÙÔÉÉ ÍÁËÒÏ ÓÔÏÉÔ `%s', Á ÎÅ ÉÍÑ ÐÁÒÁÍÅÔÒÁ"
+
+#: makeinfo/macro.c:401
+#, c-format
+msgid "Macro `%s' called on line %d with too many args"
+msgstr "íÁËÒÏ `%s' ×ÙÚ×ÁÎÏ ÎÁ ÓÔÒÏËÅ %d Ó ÉÚÌÉÛÎÉÍÉ ÁÒÇÕÍÅÎÔÁÍÉ"
+
+#: makeinfo/macro.c:580
+#, c-format
+msgid "%cend macro not found"
+msgstr "ÎÅ ×ÓÔÒÅÞÅÎÏ %cend macro"
+
+#: makeinfo/macro.c:591
+msgid "@allow-recursion is deprecated; please use @rmacro instead"
+msgstr ""
+
+#: makeinfo/macro.c:606
+msgid "@quote-arg is deprecated; arguments are quoted by default"
+msgstr ""
+
+#: makeinfo/macro.c:649
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "ÎÅÐÁÒÎÙÅ @end %s É @%s"
+
+#: makeinfo/makeinfo.c:188
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ÏÛÉÂÏË! ïÓÔÁÎÏ×ËÁ.\n"
+
+#: makeinfo/makeinfo.c:306
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: "
+
+#: makeinfo/makeinfo.c:325 makeinfo/makeinfo.c:2340
+#, c-format
+msgid "Misplaced %c"
+msgstr "úÄÅÓØ ÎÅ ÄÏÌÖÎÏ ÂÙÔØ %c"
+
+#: makeinfo/makeinfo.c:344
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "ðÏÐÒÏÂÕÊÔÅ `%s --help' ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÂÏÌÅÅ ÐÏÄÒÏÂÎÏÇÏ ÏÐÉÓÁÎÉÑ.\n"
+
+#: makeinfo/makeinfo.c:347
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ëìàþ]... TEXINFO-æáêì...\n"
+
+#: makeinfo/makeinfo.c:350
+msgid ""
+"Translate Texinfo source documentation to various other formats, by default\n"
+"Info files suitable for reading online with Emacs or standalone GNU Info.\n"
+msgstr ""
+"ðÒÅÏÂÒÁÚÕÅÔ ÄÏËÕÍÅÎÔÁÃÉÀ × ÆÏÒÍÁÔÅ Texinfo × ÄÒÕÇÉÅ ÆÏÒÍÁÔÙ, ÐÏ\n"
+"ÕÍÏÌÞÁÎÉÀ × Info-ÆÁÊÌÙ, ËÏÔÏÒÙÅ ÍÏÖÎÏ ÞÉÔÁÔØ Ó ÐÏÍÏÝØÀ Emacs ÉÌÉ\n"
+"ÏÔÄÅÌØÎÏÊ ÐÒÏÇÒÁÍÍÙ GNU Info.\n"
+
+#: makeinfo/makeinfo.c:354
+#, fuzzy, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\n"
+" --document-language=STR locale to use in translating Texinfo keywords\n"
+" for the output document (default C).\n"
+" --force preserve output even if errors.\n"
+" --help display this help and exit.\n"
+" --no-validate suppress node cross-reference validation.\n"
+" --no-warn suppress warnings (but not errors).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"ïÂÝÉÅ ËÌÀÞÉ:\n"
+" --error-limit=þéóìï ÏÓÔÁÎÏ×ÉÔØÓÑ ÐÏÓÌÅ þéóìá ÏÛÉÂÏË (ÐÏ "
+"ÕÍÏÌÞÁÎÉÀ %d).\n"
+" --force ÓÏÈÒÁÎÑÔØ ×Ù×ÏÄ, ÄÁÖÅ ÅÓÌÉ ÂÙÌÉ ÏÛÉÂËÉ.\n"
+" --help ÐÏËÁÚÁÔØ ÜÔÕ ÓÐÒÁ×ËÕ É ×ÙÊÔÉ.\n"
+" --no-validate ÎÅ ÐÒÏÉÚ×ÏÄÉÔØ ÐÒÏ×ÅÒËÕ ÐÅÒÅËÒÅÓÔÎÙÈ "
+"ÓÓÙÌÏË.\n"
+" --no-warn ÎÅ ÐÏËÁÚÙ×ÁÔØ ÐÒÅÄÕÐÒÅÖÄÅÎÉÑ (ÎÏ ÎÅ "
+"ÏÛÉÂËÉ).\n"
+" --reference-limit=î ÍÁËÓÉÍÁÌØÎÏÅ ÞÉÓÌÏ ÓÓÙÌÏË, ÎÅ ×ÙÚÙ×ÁÀÝÅÅ\n"
+" ×Ù×ÏÄ ÐÒÅÄÕÐÒÅÖÄÅÎÉÑ (ÐÏ ÕÍÏÌÞÁÎÉÀ %d).\n"
+" -v, --verbose ÐÏÑÓÎÑÔØ ÄÅÊÓÔ×ÉÑ.\n"
+" --version ÐÏËÁÚÁÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ×ÅÒÓÉÉ É ×ÙÊÔÉ.\n"
+
+#: makeinfo/makeinfo.c:369
+#, fuzzy, no-wrap
+msgid ""
+"Output format selection (default is to produce Info):\n"
+" --docbook output Docbook XML rather than Info.\n"
+" --html output HTML rather than Info.\n"
+" --xml output Texinfo XML rather than Info.\n"
+" --plaintext output plain text rather than Info.\n"
+msgstr ""
+"÷ÙÂÏÒ ×ÙÈÏÄÎÏÇÏ ÆÏÒÍÁÔÁ (ÐÏ ÕÍÏÌÞÁÎÉÀ ×Ù×ÏÄÉÔÓÑ Info):\n"
+" --docbook ×Ù×ÏÄÉÔØ × ÆÏÒÍÁÔÅ DocBook XML, Á ÎÅ Info.\n"
+" --html ×Ù×ÏÄÉÔØ × ÆÏÒÍÁÔÅ HTML, Á ÎÅ Info.\n"
+" --xml ×Ù×ÏÄÉÔØ × ÆÏÒÍÁÔÅ Texinfo XML, Á ÎÅ × Info.\n"
+" --plaintext ×Ù×ÏÄÉÔØ ÐÒÏÓÔÏÊ ÔÅËÓÔ, Á ÎÅ Info.\n"
+
+#: makeinfo/makeinfo.c:377
+#, fuzzy
+msgid ""
+"General output options:\n"
+" -E, --macro-expand=FILE output macro-expanded source to FILE,\n"
+" ignoring any @setfilename.\n"
+" --no-headers suppress node separators, Node: lines, and "
+"menus\n"
+" from Info output (thus producing plain "
+"text)\n"
+" or from HTML (thus producing shorter "
+"output);\n"
+" also, write to standard output by default.\n"
+" --no-split suppress the splitting of Info or HTML "
+"output,\n"
+" generate only one output file.\n"
+" --number-sections output chapter and sectioning numbers.\n"
+" -o, --output=FILE output to FILE (or directory if split HTML).\n"
+msgstr ""
+"ïÂÝÉÅ ËÌÀÞÉ, ÕÐÒÁ×ÌÑÀÝÉÅ ×Ù×ÏÄÏÍ:\n"
+" -E, --macro-expand æáêì ×Ù×ÅÓÔÉ × æáêì ÐÅÒ×ÏÎÁÞÁÌØÎÙÊ Texinfo-ÆÁÊÌ Ó\n"
+" ÒÁÓËÒÙÔÙÍÉ ÍÁËÒÏÓÁÍÉ.\n"
+" --no-headers ×Ù×ÏÄÉÔØ ÐÒÏÓÔÏÊ ÔÅËÓÔ, ÐÒÏÐÕÓËÁÑ ÒÁÚÄÅÌÉÔÅÌÉ "
+"ÎÏÄ\n"
+" Info É ÓÔÒÏËÉ Node:; ÐÉÓÁÔØ ÎÁ ÓÔÁÎÄÁÒÔÎÙÊ "
+"×Ù×ÏÄ,\n"
+" ÅÓÌÉ ÎÅ ÚÁÄÁÎ ËÌÀÞ --output.\n"
+" --no-split ÐÏÄÁ×ÉÔØ ÒÁÚÂÉÅÎÉÅ ÂÏÌØÛÉÈ Info- ÉÌÉ HTML-"
+"ÆÁÊÌÏ×,\n"
+" ÓÏÚÄÁ×ÁÔØ ÔÏÌØËÏ ÏÄÉÎ ×ÙÈÏÄÎÏÊ ÆÁÊÌ.\n"
+" --number-sections ×ËÌÀÞÁÔØ × ×Ù×ÏÄ ÎÏÍÅÒÁ ÇÌÁ×, ÒÁÚÄÅÌÏ× É "
+"ÐÒÉÌÏÖÅÎÉÊ.\n"
+" -o, --output=æáêì ×Ù×ÏÄÉÔØ × ÕËÁÚÁÎÎÙÊ æáêì (ËÁÔÁÌÏÇ ÄÌÑ HTML Ó \n"
+" ÒÁÚÂÉÅÎÉÅÍ).\n"
+
+#: makeinfo/makeinfo.c:391
+#, fuzzy, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --disable-encoding do not output accented and special characters\n"
+" in Info output based on @documentencoding.\n"
+" --enable-encoding override --disable-encoding (default).\n"
+" --fill-column=NUM break Info lines at NUM characters (default %"
+"d).\n"
+" --footnote-style=STYLE output footnotes in Info according to STYLE:\n"
+" `separate' to put them in their own node;\n"
+" `end' to put them at the end of the node, "
+"in\n"
+" which they are defined (this is the "
+"default).\n"
+" --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %"
+"d).\n"
+" If VAL is `none', do not indent; if VAL is\n"
+" `asis', preserve existing indentation.\n"
+" --split-size=NUM split Info files at size NUM (default %d).\n"
+msgstr ""
+"ëÌÀÞÉ ÄÌÑ Info É ÐÒÏÓÔÏÇÏ ÔÅËÓÔÁ:\n"
+" --enable-encoding ×Ù×ÏÄÉÔØ ÚÎÁËÉ Ó ÁËÃÅÎÔÁÍÉ É ÓÐÅÃÉÁÌØÎÙÅ "
+"ÚÎÁËÉ,\n"
+" ÏÓÎÏ×Ù×ÁÑÓØ ÎÁ @documentencoding.\n"
+" --fill-column=þéóìï ÒÁÚÂÉ×ÁÔØ ÓÔÒÏËÉ ÄÌÉÎÎÅÅ þéóìá ÚÎÁËÏ× (ÐÏ\n"
+" ÕÍÏÌÞÁÎÉÀ %d).\n"
+" --footnote-style=óôéìø ×Ù×ÏÄÉÔØ ÓÎÏÓËÉ ÏÄÎÉÍ ÉÚ óôéìåê:\n"
+" `separate' -- ÐÏÍÅÝÁÔØ ÓÎÏÓËÉ × ÏÔÄÅÌØÎÕÀ "
+"ÎÏÄÕ,\n"
+" `end' -- ÐÏÍÅÝÁÔØ ÓÎÏÓËÉ × ËÏÎÅÃ ÎÏÄÙ, ÇÄÅ "
+"ÏÎÉ ÂÙÌÉ\n"
+" ÏÐÒÅÄÅÌÅÎÙ (ÐÏ ÕÍÏÌÞÁÎÉÀ)\n"
+" --paragraph-indent=î ÄÅÌÁÔØ ÏÔÓÔÕÐÙ ÛÉÒÉÎÏÊ î ÐÒÏÂÅÌÏ× (ÐÏ "
+"ÕÍÏÌÞÁÎÉÀ %d).\n"
+" åÓÌÉ î ÒÁ×ÎÏ `none', ÎÅ ÄÅÌÁÔØ ÏÔÓÔÕÐÙ, "
+"ÅÓÌÉ\n"
+" `asis', ÓÏÈÒÁÎÑÔØ ÓÕÝÅÓÔ×ÕÀÝÉÅ ÏÔÓÔÕÐÙ.\n"
+" --split-size=òáúíåò ÒÁÚÂÉ×ÁÔØ ÎÁ ÆÁÊÌÙ ÚÁÄÁÎÎÏÇÏ òáúíåòá (ÐÏ\n"
+" ÕÍÏÌÞÁÎÉÀ %d).\n"
+
+#: makeinfo/makeinfo.c:409
+#, fuzzy
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+" --css-ref=URL generate reference to a CSS file.\n"
+" --internal-links=FILE produce list of internal links in FILE.\n"
+" --transliterate-file-names\n"
+" produce file names in ASCII transliteration.\n"
+msgstr ""
+"ëÌÀÞÉ ÄÌÑ HTML:\n"
+" --css-include=æáêì ×ËÌÀÞÉÔØ æáêì × ÔÅÇ <style> × ×Ù×ÏÄÅ HTML;\n"
+" ÞÉÔÁÔØ ÓÔÁÎÄÁÒÔÎÙÊ ××ÏÄ, ÅÓÌÉ æáêì ÚÁÄÁÎ ËÁË "
+"-.\n"
+
+#: makeinfo/makeinfo.c:419
+#, fuzzy, c-format
+msgid ""
+"Options for XML and Docbook:\n"
+" --output-indent=VAL indent XML elements by VAL spaces (default %"
+"d).\n"
+" If VAL is 0, ignorable whitespace is "
+"dropped.\n"
+msgstr ""
+"ëÌÀÞÉ ÄÌÑ XML É Docbook:\n"
+" --output-indent=þéóìï ÄÅÌÁÔØ ÄÌÑ XML-ÜÌÅÍÅÎÔÏ× ÏÔÓÔÕÐÙ ÎÁ "
+"ÚÁÄÁÎÎÏÅ \n"
+" þéóìï ÐÒÏÂÅÌÏ× (ÐÏ ÕÍÏÌÞÁÎÉÀ %d).\n"
+" åÓÌÉ þéóìï ÒÁ×ÎÏ ÎÕÌÀ, ÎÅÚÎÁÞÁÝÉÅ ÐÒÏÂÅÌÙ "
+"ÏÐÕÓËÁÀÔÓÑ.\n"
+
+#: makeinfo/makeinfo.c:426
+msgid ""
+"Input file options:\n"
+" --commands-in-node-names allow @ commands in node names.\n"
+" -D VAR define the variable VAR, as with @set.\n"
+" -I DIR append DIR to the @include search path.\n"
+" -P DIR prepend DIR to the @include search path.\n"
+" -U VAR undefine the variable VAR, as with @clear.\n"
+msgstr ""
+"ëÌÀÞÉ, ÕÐÒÁ×ÌÑÀÝÉÅ ×ÈÏÄÎÙÍÉ ÆÁÊÌÁÍÉ:\n"
+" --commands-in-node-names ÐÏÚ×ÏÌÉÔØ ÉÓÐÏÌØÚÏ×ÁÎÉÅ @-ËÏÍÁÎÄ × ÉÍÅÎÁÈ "
+"ÎÏÄ.\n"
+" -D ðåòåíåîîáñ ÏÐÒÅÄÅÌÉÔØ ðåòåíåîîõà, ÁÎÁÌÏÇÉÞÎÏ ÉÓÐÏÌØÚÏ×ÁÎÉÀ "
+"@set.\n"
+" -I ëáôáìïç ÄÏÂÁ×ÉÔØ ëáôáìïç × ËÏÎÅà ÓÐÉÓËÁ ÐÏÉÓËÁ ×ËÌÀÞÁÅÍÙÈ\n"
+" ÆÁÊÌÏ× @include.\n"
+" -P ëáôáìïç ÄÏÂÁ×ÉÔØ ëáôáìïç × ÎÁÞÁÌÏ ÓÐÉÓËÁ ÐÏÉÓËÁ ×ËÌÀÞÁÅÍÙÈ\n"
+" ÆÁÊÌÏ× @include.\n"
+" -U ðåòåíåîîáñ ÓÄÅÌÁÔØ ðåòåíåîîõà ÎÅÏÐÒÅÄÅÌÅÎÎÏÊ, ÁÎÁÌÏÇÉÞÎÏ\n"
+" ÉÓÐÏÌØÚÏ×ÁÎÉÀ @clear.\n"
+
+#: makeinfo/makeinfo.c:435
+msgid ""
+"Conditional processing in input:\n"
+" --ifdocbook process @ifdocbook and @docbook even if\n"
+" not generating Docbook.\n"
+" --ifhtml process @ifhtml and @html even if not generating HTML.\n"
+" --ifinfo process @ifinfo even if not generating Info.\n"
+" --ifplaintext process @ifplaintext even if not generating plain text.\n"
+" --iftex process @iftex and @tex; implies --no-split.\n"
+" --ifxml process @ifxml and @xml.\n"
+" --no-ifdocbook do not process @ifdocbook and @docbook text.\n"
+" --no-ifhtml do not process @ifhtml and @html text.\n"
+" --no-ifinfo do not process @ifinfo text.\n"
+" --no-ifplaintext do not process @ifplaintext text.\n"
+" --no-iftex do not process @iftex and @tex text.\n"
+" --no-ifxml do not process @ifxml and @xml text.\n"
+"\n"
+" Also, for the --no-ifFORMAT options, do process @ifnotFORMAT text.\n"
+msgstr ""
+"õÓÌÏ×ÎÁÑ ÏÂÒÁÂÏÔËÁ ÉÓÈÏÄÎÏÇÏ ÔÅËÓÔÁ:\n"
+" --ifhtml ÏÂÒÁÂÁÔÙ×ÁÔØ ÔÅËÓÔ ×ÎÕÔÒÉ ÂÌÏËÏ× @ifhtml É @html,\n"
+" ÄÁÖÅ ÐÒÉ ×Ù×ÏÄÅ ÎÅ × ÆÏÒÍÁÔÅ HTML.\n"
+" --ifinfo ÏÂÒÁÂÁÔÙ×ÁÔØ ÔÅËÓÔ ×ÎÕÔÒÉ ÂÌÏËÏ× @ifinfo, ÄÁÖÅ ÐÒÉ\n"
+" ×Ù×ÏÄÅ ÎÅ × ÆÏÒÍÁÔÅ Info.\n"
+" --ifplaintext ÏÂÒÁÂÁÔÙ×ÁÔØ ÔÅËÓÔ ×ÎÕÔÒÉ ÂÌÏËÏ× @ifplaintext, ÄÁÖÅ ÐÒÉ\n"
+" ×Ù×ÏÄÅ ÎÅ × ÆÏÒÍÁÔÅ ÐÒÏÓÔÏÇÏ ÔÅËÓÔÁ.\n"
+" --iftex ÏÂÒÁÂÁÔÙ×ÁÔØ ÔÅËÓÔ ×ÎÕÔÒÉ ÂÌÏËÏ× @iftex É @tex;\n"
+" ÐÏÄÒÁÚÕÍÅ×ÁÅÔ --no-split.\n"
+" --ifxml ÏÂÒÁÂÁÔÙ×ÁÔØ ÔÅËÓÔ ×ÎÕÔÒÉ ÂÌÏËÏ× @ifxml É @xml.\n"
+" --no-ifhtml ÎÅ ÏÂÒÁÂÁÔÙ×ÁÔØ ÔÅËÓÔ ×ÎÕÔÒÉ ÂÌÏËÏ× @ifhtml É @html.\n"
+" --no-ifinfo ÎÅ ÏÂÒÁÂÁÔÙ×ÁÔØ ÔÅËÓÔ ×ÎÕÔÒÉ ÂÌÏËÏ× @ifinfo.\n"
+" --no-ifplaintext ÎÅ ÏÂÒÁÂÁÔÙ×ÁÔØ ÔÅËÓÔ ×ÎÕÔÒÉ ÂÌÏËÏ× @ifplaintext.\n"
+" --no-iftex ÎÅ ÏÂÒÁÂÁÔÙ×ÁÔØ ÔÅËÓÔ ×ÎÕÔÒÉ ÂÌÏËÏ× @iftex É @tex.\n"
+" --no-ifxml ÎÅ ÏÂÒÁÂÁÔÙ×ÁÔØ ÔÅËÓÔ ×ÎÕÔÒÉ ÂÌÏËÏ× @ifxml É @xml.\n"
+"\n"
+" ëÒÏÍÅ ÔÏÇÏ, ÄÌÑ ËÌÀÞÅÊ --no-ifæïòíáô, ÏÂÒÁÂÁÔÙ×ÁÔØ ÂÌÏËÉ @ifnotæïòíáô.\n"
+
+#: makeinfo/makeinfo.c:454
+msgid ""
+" The defaults for the @if... conditionals depend on the output format:\n"
+" if generating HTML, --ifhtml is on and the others are off;\n"
+" if generating Info, --ifinfo is on and the others are off;\n"
+" if generating plain text, --ifplaintext is on and the others are off;\n"
+" if generating XML, --ifxml is on and the others are off.\n"
+msgstr ""
+"ðÏ ÕÍÏÌÞÁÎÉÀ ÏÂÒÁÂÏÔËÁ ÕÓÌÏ×ÎÙÈ ËÏÍÁÎÄ @if... ÚÁ×ÉÓÉÔ ÏÔ ×ÙÈÏÄÎÏÇÏ ÆÏÒÍÁÔÁ:\n"
+" ÐÒÉ ×Ù×ÏÄÅ HTML ×ËÌÀÞÅÎ --ifhtml, Á ÏÓÔÁÌØÎÙÅ ×ÙËÌÀÞÅÎÙ;\n"
+" ÐÒÉ ×Ù×ÏÄÅ Info ×ËÌÀÞÅÎ --ifinfo, Á ÏÓÔÁÌØÎÙÅ ×ÙËÌÀÞÅÎÙ;\n"
+" ÐÒÉ ×Ù×ÏÄÅ ÐÒÏÓÔÏÇÏ ÔÅËÓÔÁ ×ËÌÀÞÅÎ --ifplaintext, ÏÓÔÁÌØÎÙÅ ×ÙËÌÀÞÅÎÙ;\n"
+" ÐÒÉ ×Ù×ÏÄÅ XML ×ËÌÀÞÅÎ --ifxml, ÏÓÔÁÌØÎÙÅ ×ÙËÌÀÞÅÎÙ.\n"
+
+#: makeinfo/makeinfo.c:462
+#, fuzzy
+msgid ""
+"Examples:\n"
+" makeinfo foo.texi write Info to foo's @setfilename\n"
+" makeinfo --html foo.texi write HTML to @setfilename\n"
+" makeinfo --xml foo.texi write Texinfo XML to @setfilename\n"
+" makeinfo --docbook foo.texi write DocBook XML to @setfilename\n"
+" makeinfo --no-headers foo.texi write plain text to standard "
+"output\n"
+"\n"
+" makeinfo --html --no-headers foo.texi write html without node lines, "
+"menus\n"
+" makeinfo --number-sections foo.texi write Info with numbered sections\n"
+" makeinfo --no-split foo.texi write one Info file however big\n"
+msgstr ""
+"ðÒÉÍÅÒÙ:\n"
+" makeinfo foo.texi ÚÁÐÉÓÁÔØ Info × @setfilename ÉÚ foo\n"
+" makeinfo --html foo.texi ÚÁÐÉÓÁÔØ HTML × @setfilename\n"
+" makeinfo --xml foo.texi ÚÁÐÉÓÁÔØ Texinfo XML × @setfilename\n"
+" makeinfo --docbook foo.texi ÚÁÐÉÓÁÔØ DocBook XML × @setfilename\n"
+" makeinfo --no-headers -o - foo.texi ÚÁÐÉÓÁÔØ ÐÒÏÓÔÏÊ ÔÅËÓÔ ÎÁ "
+"ÓÔÁÎÄÁÒÔÎÙÊ\n"
+" ×Ù×ÏÄ\n"
+"\n"
+" makeinfo --html --no-headers foo.texi ÚÁÐÉÓÁÔØ HTML ÂÅÚ ÍÅÎÀ É ÓÔÒÏË ÎÏÄÙ\n"
+" makeinfo --number-sections foo.texi ÚÁÐÉÓÁÔØ Info Ó ÎÕÍÅÒÏ×ÁÎÎÙÍÉ "
+"ÒÁÚÄÅÌÁÍÉ\n"
+" makeinfo --no-split foo.texi ÚÁÐÉÓÁÔØ ÏÄÉÎ ÂÏÌØÛÏÊ Info-ÆÁÊÌ\n"
+
+#: makeinfo/makeinfo.c:622
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr "%s: ÎÅÉÚ×ÅÓÔÎÏÅ ÚÎÁÞÅÎÉÅ TEXINFO_OUTPUT_FORMAT `%s' ÉÇÎÏÒÉÒÏ×ÁÎÏ.\n"
+
+#: makeinfo/makeinfo.c:670 makeinfo/makeinfo.c:696 makeinfo/makeinfo.c:720
+#: makeinfo/makeinfo.c:780
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr "%s: %s ÁÒÇÕÍÅÎÔ ÄÏÌÖÅÎ ÂÙÔØ ÞÉÓÌÏ×ÙÍ, ÎÅ `%s'.\n"
+
+#: makeinfo/makeinfo.c:683
+#, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ ÍÁËÒÏÒÁÓÛÉÒÅÎÉÑ `%s'"
+
+#: makeinfo/makeinfo.c:688
+#, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "%s: ×ÔÏÒÏÊ ×ÙÈÏÄÎÏÊ ÆÁÊÌ ÍÁËÒÏÒÁÓÛÉÒÅÎÉÑ `%s' ÉÇÎÏÒÉÒÏ×ÁÎ.\n"
+
+#: makeinfo/makeinfo.c:733
+#, fuzzy, c-format
+msgid "%s: could not open internal links output `%s'"
+msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ ÍÁËÒÏÒÁÓÛÉÒÅÎÉÑ `%s'"
+
+#: makeinfo/makeinfo.c:738
+#, fuzzy, c-format
+msgid "%s: ignoring second internal links output `%s'.\n"
+msgstr "%s: ×ÔÏÒÏÊ ×ÙÈÏÄÎÏÊ ÆÁÊÌ ÍÁËÒÏÒÁÓÛÉÒÅÎÉÑ `%s' ÉÇÎÏÒÉÒÏ×ÁÎ.\n"
+
+#: makeinfo/makeinfo.c:751
+#, c-format
+msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
+msgstr ""
+"%s: ÁÒÇÕÍÅÎÔ --paragraph-indent ÄÏÌÖÅÎ ÂÙÔØ ÞÉÓÌÏ×ÙÍ, ÉÌÉ\n"
+"`none', ÉÌÉ `asis'; ÎÅ `%s'.\n"
+
+#: makeinfo/makeinfo.c:769
+#, c-format
+msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
+msgstr ""
+"%s: ÁÒÇÕÍÅÎÔ --footnote-style ÄÏÌÖÅÎ ÂÙÔØ `separate' ÉÌÉ `end'; Á ÎÅ `%s'.\n"
+
+#: makeinfo/makeinfo.c:844
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: ÐÒÏÐÕÝÅÎ ÁÒÇÕÍÅÎÔ, ÚÁÄÁÀÝÉÊ ÆÁÊÌ.\n"
+
+#: makeinfo/makeinfo.c:1041 makeinfo/makeinfo.c:4166
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr "îÅÐÒÁ×ÉÌØÎÏ ÉÓÐÏÌØÚÏ×ÁÎÁ ÍÎÏÇÏÓÔÒÏÞÎÁÑ ËÏÍÁÎÄÁ %c%s"
+
+#: makeinfo/makeinfo.c:1044
+#, c-format
+msgid "Expected `%s'"
+msgstr "ïÖÉÄÁÅÔÓÑ `%s'"
+
+#: makeinfo/makeinfo.c:1521
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ËÁÔÁÌÏÇ `%s': %s"
+
+#: makeinfo/makeinfo.c:1567
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "`%s' ÎÅ ÎÁÊÄÅÎ × `%s'"
+
+#: makeinfo/makeinfo.c:1647
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr ""
+"%s: òÁÓËÒÙÔÉÅ ÍÁËÒÏÓÏ× × ÓÔÁÎÄÁÒÔÎÙÊ ×Ù×ÏÄ ÎÅ ÐÒÏÉÚ×ÏÄÉÔÓÑ,\n"
+"ÔÁË ËÁË ÔÕÄÁ ÎÁÐÒÁ×ÌÅÎ ×Ù×ÏÄ × ÆÏÒÍÁÔÅ Info.\n"
+
+#: makeinfo/makeinfo.c:1677
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "óÏÚÄÁÎÉÅ %s-ÆÁÊÌÁ `%s' ÉÚ `%s'.\n"
+
+#: makeinfo/makeinfo.c:1744
+#, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: õÄÁÌÅÎÉÅ ×ÙÈÏÄÎÏÇÏ ÆÁÊÌÁ ÍÁËÒÏÒÁÓÛÉÒÅÎÉÊ `%s' -- ÂÙÌÉ ÏÛÉÂËÉ;\n"
+"ÉÓÐÏÌØÚÕÊÔÅ --force, ÞÔÏÂÙ ÐÒÉÎÕÄÉÔÅÌØÎÏ ÓÏÈÒÁÎÉÔØ ÒÅÚÕÌØÔÁÔÙ.\n"
+
+#: makeinfo/makeinfo.c:1799
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: õÄÁÌÅÎÉÅ ×ÙÈÏÄÎÏÇÏ ÆÁÊÌÁ `%s' -- ÂÙÌÉ ÏÛÉÂËÉ;\n"
+"ÉÓÐÏÌØÚÕÊÔÅ --force, ÞÔÏÂÙ ÐÒÉÎÕÄÉÔÅÌØÎÏ ÓÏÈÒÁÎÉÔØ ÒÅÚÕÌØÔÁÔÙ.\n"
+
+#: makeinfo/makeinfo.c:1818
+#, fuzzy, c-format
+msgid ""
+"%s: Removing internal links output file `%s' due to errors; use --force to "
+"preserve.\n"
+msgstr ""
+"%s: õÄÁÌÅÎÉÅ ×ÙÈÏÄÎÏÇÏ ÆÁÊÌÁ `%s' -- ÂÙÌÉ ÏÛÉÂËÉ;\n"
+"ÉÓÐÏÌØÚÕÊÔÅ --force, ÞÔÏÂÙ ÐÒÉÎÕÄÉÔÅÌØÎÏ ÓÏÈÒÁÎÉÔØ ÒÅÚÕÌØÔÁÔÙ.\n"
+
+#: makeinfo/makeinfo.c:2113
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "îÅÉÚ×ÅÓÔÎÁÑ ËÏÍÁÎÄÁ `%s'"
+
+#: makeinfo/makeinfo.c:2135
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr ""
+"éÓÐÏÌØÚÕÊÔÅ ÆÉÇÕÒÎÙÅ ÓËÏÂËÉ, ÞÔÏÂÙ ÐÅÒÅÄÁÔØ @%s ËÏÍÁÎÄÕ × ËÁÞÅÓÔ×Å ÁÒÇÕÍÅÎÔÁ"
+
+#: makeinfo/makeinfo.c:2394
+#, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s ÐÏÄÒÁÚÕÍÅ×ÁÅÔ ÆÉÇÕÒÎÙÅ ÓËÏÂËÉ"
+
+#: makeinfo/makeinfo.c:2407
+msgid "Unmatched }"
+msgstr "îÅÐÁÒÎÁÑ }"
+
+#: makeinfo/makeinfo.c:2455
+msgid "NO_NAME!"
+msgstr "âåú_éíåîé!"
+
+#: makeinfo/makeinfo.c:2476
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s ÐÒÏÐÕÝÅÎÁ ÚÁËÒÙ×ÁÀÝÁÑ ÓËÏÂËÁ"
+
+#: makeinfo/makeinfo.c:3482
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ ÆÁÊÌ `%s' × ËÏÍÁÎÄÅ @image (ÄÌÑ HTML): %s"
+
+#: makeinfo/makeinfo.c:3488
+#, c-format
+msgid "No such file `%s'"
+msgstr "æÁÊÌ `%s' ÎÅ ÓÕÝÅÓÔ×ÕÅÔ"
+
+#: makeinfo/makeinfo.c:3624
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ ÆÁÊÌ `%s' × ËÏÍÁÎÄÅ @image (ÄÌÑ ÔÅËÓÔÁ): %s"
+
+#: makeinfo/makeinfo.c:3633
+msgid "@image missing filename argument"
+msgstr "ÐÏÓÌÅ @image ÐÒÏÐÕÝÅÎ ÁÒÇÕÍÅÎÔ ÚÁÄÁÀÝÉÊ ÆÁÊÌ "
+
+#: makeinfo/makeinfo.c:3851
+#, c-format
+msgid "undefined flag: %s"
+msgstr "ÎÅÏÐÒÅÄÅÌÅÎÎÙÊ ÆÌÁÇ: %s"
+
+#: makeinfo/makeinfo.c:3852
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{úÎÁÞÅÎÉÅ `%s' ÎÅ ÚÁÄÁÎÏ}"
+
+#: makeinfo/makeinfo.c:3904
+#, c-format
+msgid "%c%s requires a name"
+msgstr "ËÏÍÁÎÄÅ %c%s ÎÕÖÎÏ ÕËÁÚÁÔØ ÉÍÑ"
+
+#: makeinfo/makeinfo.c:4010
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "ëÏÎÅà ÆÁÊÌÁ ÒÁÎØÛÅ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÊ ËÏÍÁÎÄÙ @end %s"
+
+#: makeinfo/makeinfo.c:4258
+#, c-format
+msgid "`%.40s...' is too long for expansion; not expanded"
+msgstr "`%.40s...' ÓÌÉÛËÏÍ ×ÅÌÉËÏ; ÎÅ×ÏÚÍÏÖÎÏ ÒÁÓËÒÙÔØ"
+
+#: makeinfo/multi.c:116
+msgid "Missing } in @multitable template"
+msgstr "÷ ÛÁÂÌÏÎÅ @multitable ÐÒÏÐÕÝÅÎÁ `}'"
+
+#: makeinfo/multi.c:260
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "ÔÅËÓÔ `%s' ÐÏÓÌÅ @multitable ÉÇÎÏÒÉÒÏ×ÁÎ"
+
+#: makeinfo/multi.c:400
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ËÏÌÏÎÏË × ÜÌÅÍÅÎÔÅ ÔÁÂÌÉÃÙ (ÍÁËÓÉÍÕÍ %d)"
+
+#: makeinfo/multi.c:563
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "[ÎÅÐÒÅÄ×ÉÄÅÎÎÁÑ ÓÉÔÕÁÃÉÑ] ÎÅ×ÏÚÍÏÖÎÏ ×ÙÂÒÁÔØ ËÏÌÏÎËÕ #%d × ÔÁÂÌÉÃÅ"
+
+#: makeinfo/multi.c:592
+msgid "ignoring @tab outside of multitable"
+msgstr "@tab ×ÎÅ ÔÁÂÌÉÃÙ ÉÇÎÏÒÉÒÏ×ÁÎ"
+
+#: makeinfo/multi.c:640
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** íÎÏÇÏËÏÌÏÎÏÞÎÙÊ ×Ù×ÏÄ ÉÚ ÐÏÓÌÅÄÎÅÊ ÓÔÒÏËÉ:\n"
+
+#: makeinfo/multi.c:643
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* ËÏÌÏÎËÁ %d: ×Ù×ÏÄ = %s\n"
+
+#: makeinfo/node.c:279
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "îÏÄÁ `%s' ÂÙÌÁ ÒÁÎÅÅ ÏÐÒÅÄÅÌÅÎÁ × ÓÔÒÏËÅ %d"
+
+#: makeinfo/node.c:647
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "æÏÒÍÁÔÉÒÏ×ÁÎÉÅ ÎÏÄÙ %s...\n"
+
+#: makeinfo/node.c:714
+#, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr "äÌÑ ÎÏÄÙ `%s' ÔÒÅÂÕÅÔÓÑ ËÏÍÁÎÄÁ ÏÐÉÓÁÎÉÑ ÓÔÒÕËÔÕÒÙ ÇÌÁ× (ÎÁÐÒ. %c%s)"
+
+#: makeinfo/node.c:878
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "äÌÑ ËÏÍÁÎÄÙ `%c%s' ÎÅ ÚÁÄÁÎÏ ÉÍÑ ÎÏÄÙ"
+
+#: makeinfo/node.c:919 makeinfo/node.c:1163
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr "íÁÒËÅÒ `%s' É ÎÏÄÁ `%s' ÓÓÙÌÁÀÔÓÑ ÎÁ ÏÄÎÏ É ÔÏ ÖÅ ÉÍÑ ÆÁÊÌÁ"
+
+#: makeinfo/node.c:922
+msgid "This @anchor command ignored; references to it will not work"
+msgstr "äÁÎÎÁÑ ËÏÍÁÎÄÁ @anchor ÉÇÎÏÒÉÒÕÅÔÓÑ; ÓÓÙÌËÉ ÎÁ ÎÅÅ ÎÅ ÂÕÄÕÔ ÒÁÂÏÔÁÔØ"
+
+#: makeinfo/node.c:924 makeinfo/node.c:1166
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr "ðÅÒÅÉÍÅÎÕÊÔÅ ÜÔÏÔ ÍÁÒËÅÒ ÉÌÉ ÉÓÐÏÌØÚÕÊÔÅ ËÌÀÞ `--no-split'"
+
+#: makeinfo/node.c:954
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr "îÅÏÖÉÄÁÎÎÁÑ ÓÔÒÏËÁ × ËÏÎÃÅ ÒÁÚÂÉÔÏÇÏ HTML-ÆÁÊÌÁ `%s'"
+
+#: makeinfo/node.c:1160
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr "íÁÒËÅÒÙ `%s' É `%s' ÓÓÙÌÁÀÔÓÑ ÎÁ ÏÄÎÏ É ÔÏ ÖÅ ÉÍÑ ÆÁÊÌÁ"
+
+#: makeinfo/node.c:1165
+msgid "@anchor command ignored; references to it will not work"
+msgstr "ëÏÍÁÎÄÁ @anchor ÉÇÎÏÒÉÒÕÅÔÓÑ; ÓÓÙÌËÉ ÎÁ ÎÅÅ ÎÅ ÂÕÄÕÔ ÒÁÂÏÔÁÔØ"
+
+# ÚÄÅÓØ %s ÍÏÖÅÔ ÂÙÔØ `cross' ÉÌÉ `menu'
+#: makeinfo/node.c:1362
+#, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr ""
+"%s ÎÁ ÎÅÓÕÝÅÓÔ×ÕÀÝÕÀ ÎÏÄÕ `%s' (×ÏÚÍÏÖÎÏ, ÎÅÐÒÁ×ÉÌØÎÏ ÏÐÉÓÁÎÁ ÓÔÒÕËÔÕÒÁ "
+"ÇÌÁ×?)"
+
+#: makeinfo/node.c:1462
+#, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr ""
+"îÁ ÐÏÌÅ Next ÎÏÄÙ `%s' ÎÅÔ ÓÓÙÌÏË (×ÏÚÍÏÖÎÏ, ÎÅÐÒÁ×ÉÌØÎÏ ÏÐÉÓÁÎÁ ÓÔÒÕËÔÕÒÁ "
+"ÇÌÁ×?)"
+
+#: makeinfo/node.c:1465
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "÷ ÜÔÏÊ ÎÏÄÅ (%s) ÎÅÐÒÁ×ÉÌØÎÙÊ ÕËÁÚÁÔÅÌØ Prev"
+
+#: makeinfo/node.c:1520
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "îÁ ÐÏÌÅ Prev ÎÏÄÙ `%s' ÎÅÔ ÓÓÙÌÏË"
+
+#: makeinfo/node.c:1524
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "÷ ÜÔÏÊ ÎÏÄÅ (%s) ÎÅÐÒÁ×ÉÌØÎÙÊ ÕËÁÚÁÔÅÌØ Next"
+
+#: makeinfo/node.c:1536
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr ""
+"÷ ÎÏÄÅ `%s' ÎÅÔ ÐÏÌÑ Up (×ÏÚÍÏÖÎÏ, ÎÅÐÒÁ×ÉÌØÎÏ ÏÐÉÓÁÎÁ ÓÔÒÕËÔÕÒÁ ÇÌÁ×?)"
+
+#: makeinfo/node.c:1605
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr "îÏÄÁ `%s' ÎÅ ÉÍÅÅÔ ÐÕÎËÔÁ ÍÅÎÀ ÄÌÑ `%s', ÈÏÔÑ ÎÁ ÎÅÅ ÓÓÙÌÁÅÔÓÑ ÐÏÌÅ Up"
+
+#: makeinfo/node.c:1637
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "ÎÁ ÎÏÄÕ `%s' ÎÅÔ ÓÓÙÌÏË"
+
+#: makeinfo/node.c:1727
+#, c-format
+msgid "Removing %s\n"
+msgstr "õÄÁÌÅÎÉÅ %s\n"
+
+#: makeinfo/node.c:1731
+#, c-format
+msgid "Can't remove file `%s': %s"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ ÆÁÊÌ `%s': %s"
+
+#: makeinfo/sectioning.c:122
+#, c-format
+msgid "Appendix %c"
+msgstr "ðÒÉÌÏÖÅÎÉÅ %c"
+
+#: makeinfo/sectioning.c:467
+#, c-format
+msgid "Internal error (search_sectioning) `%s'!"
+msgstr "÷ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ (search_sectioning) `%s'!"
+
+#: makeinfo/sectioning.c:563
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "÷ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ (search_sectioning) \"%s\"!"
+
+#: makeinfo/sectioning.c:624
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "ëÏÍÁÎÄÁ %c%s ÕÓÔÁÒÅÌÁ; ÉÓÐÏÌØÚÕÊÔÅ ×ÍÅÓÔÏ ÎÅÅ %c%s"
+
+#: makeinfo/sectioning.c:640
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "îÏÄÁ Ó %ctop × ËÁÞÅÓÔ×Å ÒÁÚÄÅÌÁ ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ"
+
+#: makeinfo/sectioning.c:648
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "úÄÅÓØ ÎÁÈÏÄÉÔÓÑ ÎÏÄÁ %ctop"
+
+#: makeinfo/sectioning.c:664
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "%ctop ×ÓÔÒÅÞÅÎÁ ÐÅÒÅÄ %cnode, ÐÏ ÕÍÏÌÞÁÎÉÀ ÉÓÐÏÌØÚÕÅÔÓÑ %s"
+
+#: makeinfo/xml.c:1669
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ @image ÆÁÊÌ `%s': %s"
+
+#: makeinfo/xml.c:2014
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+"ÉÓÐÏÌØÚÏ×ÁÎÉÅ @headitem × ËÁÞÅÓÔ×Å ÐÏÓÌÅÄÎÅÇÏ ÜÌÅÍÅÎÔÁ @multitable ×ÙÄÁÅÔ "
+"ÎÅËÏÒÒÅËÔÎÙÅ ÄÏËÕÍÅÎÔÙ Docbook"
+
+#: makeinfo/xml.c:2150
+msgid "of"
+msgstr "ÉÚ"
+
+#: makeinfo/xml.c:2155
+msgid "on"
+msgstr "ÎÁÄ"
+
+#: makeinfo/xref.c:127
+msgid "First argument to cross-reference may not be empty"
+msgstr ""
+
+#: makeinfo/xref.c:252
+#, c-format
+msgid "Empty file name for HTML cross reference in `%s'"
+msgstr ""
+
+#: makeinfo/xref.c:387
+msgid "End of file reached while looking for `.' or `,'"
+msgstr ""
+
+#: makeinfo/xref.c:390
+#, c-format
+msgid "`.' or `,' must follow @%s, not `%c'"
+msgstr ""
+
+#: makeinfo/xref.c:392
+#, fuzzy
+msgid "for cross-references in parentheses, use @pxref"
+msgstr "îÁ ÜÔÏÊ ÎÏÄÅ ÎÅÔ ÓÓÙÌÏË."
+
+#: makeinfo/xref.c:435
+msgid "First argument to @inforef may not be empty"
+msgstr ""
+
+#: util/texindex.c:223
+msgid "display this help and exit"
+msgstr "ÐÏËÁÚÁÔØ ÜÔÕ ÓÐÒÁ×ËÕ É ×ÙÊÔÉ"
+
+#: util/texindex.c:225
+msgid "send output to FILE"
+msgstr "ÚÁÐÉÓÁÔØ ×Ù×ÏÄ × æáêì"
+
+#: util/texindex.c:227
+msgid "display version information and exit"
+msgstr "ÐÏËÁÚÁÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ×ÅÒÓÉÉ É ×ÙÊÔÉ"
+
+#: util/texindex.c:237
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ëìàþ]... æáêì...\n"
+
+#: util/texindex.c:238
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr ""
+"óÏÚÄÁÅÔ ÓÏÒÔÉÒÏ×ÁÎÎÙÊ ÁÌÆÁ×ÉÔÎÙÊ ÕËÁÚÁÔÅÌØ ÄÌÑ\n"
+"ËÁÖÄÏÇÏ ×ÙÈÏÄÎÏÇÏ TeX-ÆÁÊÌÁ.\n"
+
+#: util/texindex.c:241
+#, c-format
+msgid "Usually FILE... is specified as `foo.%c%c' for a document `foo.texi'.\n"
+msgstr "æáêì... ÄÌÑ ÄÏËÕÍÅÎÔÁ `foo.texi' ÏÂÙÞÎÏ ÚÁÄÁÅÔÓÑ ËÁË `foo.%c%c'.\n"
+
+#: util/texindex.c:243
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"ëÌÀÞÉ:\n"
+
+#: util/texindex.c:743
+#, c-format
+msgid "failure reopening %s"
+msgstr "ÏÛÉÂËÁ ÐÏ×ÔÏÒÎÏÇÏ ÏÔËÒÙÔÉÑ %s"
+
+#: util/texindex.c:758 util/texindex.c:786
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: ÎÅ texinfo-ÆÁÊÌ Ó ÁÌÆÁ×ÉÔÎÙÍ ÕËÁÚÁÔÅÌÅÍ"
+
+#: util/texindex.c:993
+#, c-format
+msgid "No page number in %s"
+msgstr "÷ %s ÎÅÔ ÎÏÍÅÒÁ ÓÔÒÁÎÉÃÙ"
+
+#: util/texindex.c:1066
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr "ÚÁ ×ÈÏÖÄÅÎÉÅÍ %s ÓÌÅÄÕÅÔ ×ÈÏÖÄÅÎÉÅ Ó ×ÔÏÒÉÞÎÙÍ ÉÍÅÎÅÍ"
+
+#~ msgid ""
+#~ "\\%-10[search] Search forward for a specified string\n"
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr ""
+#~ "\\%-10[search] éÓËÁÔØ ÕËÁÚÁÎÎÕÀ ÓÔÒÏËÕ × ÔÅËÕÝÅÍ Info-ÆÁÊÌÅ É "
+#~ "ÏÓÔÁÎÏ×ÉÔØÓÑ ×\n"
+#~ " ÎÏÄÅ, × ËÏÔÏÒÏÊ ÎÁÊÄÅÎÏ ÓÌÅÄÕÀÝÅÅ ×ÈÏÖÄÅÎÉÅ.\n"
+
+#~ msgid ""
+#~ "\\%-10[goto-node] Move to node specified by name.\n"
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ msgstr ""
+#~ "\\%-10[goto-node] ðÅÒÅÊÔÉ Ë ÎÏÄÅ, ÚÁÄÁÎÎÏÊ ÐÏ ÉÍÅÎÉ.\n"
+#~ " ÷Ù ÍÏÖÅÔÅ ÚÁÄÁÔØ ÔÁËÖÅ ÉÍÑ ÆÁÊÌÁ, ÎÁÐÒÉÍÅÒ (æáêì)îïäá.\n"
+
+#, fuzzy
+#~ msgid "\\%-10[next-node] Move to the next node of current section.\n"
+#~ msgstr "\\%-10[next-node] ðÅÒÅÊÔÉ Ë \"ÓÌÅÄÕÀÝÅÊ\" ÎÏÄÅ.\n"
+
+#~ msgid ""
+#~ "\\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+#~ "node] (DIR)'.\n"
+#~ msgstr ""
+#~ "\\%-10[dir-node] ðÅÒÅÊÔÉ Ë ËÏÒÎÅ×ÏÊ ÎÏÄÅ. üË×É×ÁÌÅÎÔÎÏ `g (DIR)'.\n"
+
+#~ msgid ""
+#~ "\\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] "
+#~ "Top'.\n"
+#~ msgstr "\\%-10[top-node] ðÅÒÅÊÔÉ Ë ÎÏÄÅ Top. üË×É×ÁÌÅÎÔÎÏ `g Top'.\n"
+
+#~ msgid ""
+#~ "\\%-10[search-backward] Search backward for a specified string\n"
+#~ " and select the node in which the previous occurrence is "
+#~ "found.\n"
+#~ msgstr ""
+#~ "\\%-10[search-backward] éÓËÁÔØ ÕËÁÚÁÎÎÕÀ ÓÔÒÏËÕ × ÔÅËÕÝÅÍ Info-ÆÁÊÌÅ ×\n"
+#~ " ÎÏÄÅ, × ËÏÔÏÒÏÊ ÎÁÊÄÅÎÏ ÓÌÅÄÕÀÝÅÅ ×ÈÏÖÄÅÎÉÅ.\n"
+
+#~ msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+#~ msgstr ""
+#~ "--- éÓÐÏÌØÚÕÊÔÅ `\\[history-node]' ÉÌÉ `\\[kill-node]' ÄÌÑ ×ÙÈÏÄÁ ---\n"
+
+#, fuzzy
+#~ msgid "\\%-10[move-to-prev-xref] Skip to previous hypertext link [*].\n"
+#~ msgstr ""
+#~ "\\%-10[move-to-prev-xref] ðÅÒÅÍÅÓÔÉÔØÓÑ Ë ÓÌÅÄÕÀÝÅÊ ÇÉÐÅÒÓÓÙÌËÅ × ÜÔÏÊ "
+#~ "ÎÏÄÅ.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]... [MENU-ITEM...]\n"
+#~ "\n"
+#~ "Read documentation in Info format.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --apropos=STRING look up STRING in all indices of all "
+#~ "manuals.\n"
+#~ " -d, --directory=DIR add DIR to INFOPATH.\n"
+#~ " --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+#~ " -f, --file=FILENAME specify Info file to visit.\n"
+#~ " -h, --help display this help and exit.\n"
+#~ " --index-search=STRING go to node pointed by index entry STRING.\n"
+#~ " -n, --node=NODENAME specify nodes in first visited Info file.\n"
+#~ " -o, --output=FILENAME output selected nodes to FILENAME.\n"
+#~ " -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+#~ " --no-raw-escapes output escapes as literal text.\n"
+#~ " --restore=FILENAME read initial keystrokes from FILENAME.\n"
+#~ " -O, --show-options, --usage go to command-line options node.\n"
+#~ "%s --subnodes recursively output menu items.\n"
+#~ " -w, --where, --location print physical location of Info file.\n"
+#~ " --vi-keys use vi-like and less-like key bindings.\n"
+#~ " --version display version information and exit.\n"
+#~ "\n"
+#~ "The first non-option argument, if present, is the menu entry to start "
+#~ "from;\n"
+#~ "it is searched for in all `dir' files along INFOPATH.\n"
+#~ "If it is not present, info merges all `dir' files and shows the result.\n"
+#~ "Any remaining arguments are treated as the names of menu\n"
+#~ "items relative to the initial node visited.\n"
+#~ "\n"
+#~ "Examples:\n"
+#~ " info show top-level dir menu\n"
+#~ " info emacs start at emacs node from top-level dir\n"
+#~ " info emacs buffers start at buffers node within emacs manual\n"
+#~ " info --show-options emacs start at node with emacs' command line "
+#~ "options\n"
+#~ " info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+#~ " info -f ./foo.info show file ./foo.info, not searching dir\n"
+#~ msgstr ""
+#~ "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ëìàþ]... [ðõîëô-íåîà...]\n"
+#~ "\n"
+#~ "ðÏÚ×ÏÌÑÅÔ ÐÒÏÓÍÁÔÒÉ×ÁÔØ ÄÏËÕÍÅÎÔÁÃÉÀ × ÆÏÒÍÁÔÅ Info.\n"
+#~ "\n"
+#~ "ëÌÀÞÉ:\n"
+#~ " --apropos=ôåíá ÉÓËÁÔØ ôåíõ ×Ï ×ÓÅÈ ÁÌÆÁ×ÉÔÎÙÈ ÕËÁÚÁÔÅÌÑÈ\n"
+#~ " ×ÓÅÈ ÒÕËÏ×ÏÄÓÔ×.\n"
+#~ " -d, --directory=ëáôáìïç ÄÏÂÁ×ÉÔØ ëáôáìïç Ë INFOPATH.\n"
+#~ " --dribble=æáêì ÚÁÐÉÓÁÔØ ××ÏÄÉÍÙÅ ÐÏÌØÚÏ×ÁÔÅÌÅÍ ÚÎÁËÉ × æáêì.\n"
+#~ " -f, --file=æáêì ÐÏËÁÚÁÔØ ÚÁÄÁÎÎÙÊ æáêì.\n"
+#~ " -h, --help ÐÏËÁÚÁÔØ ÜÔÕ ÓÐÒÁ×ËÕ É ×ÙÊÔÉ.\n"
+#~ " --index-search=óôòïëá ÐÅÒÅÊÔÉ Ë ÎÏÄÅ, ÎÁ ËÏÔÏÒÕÀ ÓÓÙÌÁÅÔÓÑ "
+#~ "ÚÁÄÁÎÎÏÅ\n"
+#~ " óôòïëïê ×ÈÏÖÄÅÎÉÅ ÉÍÅÎÎÏÇÏ ÕËÁÚÁÔÅÌÑ.\n"
+#~ " -n, --node=îïäá ÎÁÞÁÔØ ÐÒÏÓÍÏÔÒ Ó ÚÁÄÁÎÎÏÊ îïäù.\n"
+#~ " -o, --output=æáêì ÚÁÐÉÓÁÔØ ×ÙÂÒÁÎÎÙÅ ÎÏÄÙ × æáêì.\n"
+#~ " -R, --raw-escapes ×Ù×ÏÄÉÔØ escape-ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔÉ ANSI (ÐÏ "
+#~ "ÕÍÏÌÞÁÎÉÀ).\n"
+#~ " --no-raw-escapes ×Ù×ÏÄÉÔØ escape-ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔÉ ËÁË "
+#~ "ÂÕË×ÁÌØÎÙÊ ÔÅËÓÔ.\n"
+#~ " --restore=æáêì ÐÒÏÞÉÔÁÔØ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ ÎÁÖÁÔÙÈ ËÌÁ×ÉÛ ÉÚ "
+#~ "æáêìá.\n"
+#~ " -O, --show-options, --usage ÐÅÒÅÊÔÉ Ë ÎÏÄÅ, ÏÐÉÓÙ×ÁÀÝÅÊ ËÌÀÞÉ ËÏÍÁÎÄÎÏÊ "
+#~ "ÓÔÒÏËÉ.\n"
+#~ "%s --subnodes ÒÅËÕÒÓÉ×ÎÏ ×Ù×ÏÄÉÔØ ÐÕÎËÔÙ ÍÅÎÀ.\n"
+#~ " --vi-keys ÉÓÐÏÌØÚÏ×ÁÔØ ÐÒÉ×ÑÚËÉ ËÌÁ×ÉÛ ËÁË × vi É less.\n"
+#~ " --version ÐÏËÁÚÁÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ×ÅÒÓÉÉ É ×ÙÊÔÉ.\n"
+#~ "\n"
+#~ "ðÅÒ×ÙÊ ÎÅ Ñ×ÌÑÀÝÉÊÓÑ ËÌÀÞÏÍ ÁÒÇÕÍÅÎÔ, ÅÓÌÉ ÏÎ ÅÓÔØ, ÚÁÄÁÅÔ ÉÍÑ\n"
+#~ "ÎÁÞÁÌØÎÏÇÏ ÐÕÎËÔÁ ÍÅÎÀ; ÏÎ ÉÝÅÔÓÑ ×Ï ×ÓÅÈ ÆÁÊÌÁÈ `dir' × INFOPATH.\n"
+#~ "åÓÌÉ ÏÎ ÎÅ ÎÁÊÄÅÎ, info ÏÂßÅÄÉÎÑÅÔ ×ÓÅ ÆÁÊÌÙ `dir' É ÐÏËÁÚÙ×ÁÅÔ\n"
+#~ "ÒÅÚÕÌØÔÁÔ. ÷ÓÅ ÏÓÔÁÌØÎÙÅ ÁÒÇÕÍÅÎÔÙ ÒÁÓÓÍÁÔÒÉ×ÁÀÔÓÑ ËÁË ÉÍÅÎÁ ÐÕÎËÔÏ×\n"
+#~ "ÍÅÎÀ ÏÔÎÏÓÉÔÅÌØÎÏ ÐÅÒ×ÏÊ ÐÏÓÅÝÅÎÎÏÊ ÎÏÄÙ.\n"
+#~ "\n"
+#~ "ðÒÉÍÅÒÙ:\n"
+#~ " info ÐÏËÁÚÁÔØ ÍÅÎÀ ËÁÔÁÌÏÇÁ ×ÅÒÈÎÅÇÏ ÕÒÏ×ÎÑ\n"
+#~ " info emacs ÎÁÞÁÔØ Ó ÎÏÄÙ emacs ÉÚ ËÁÔÁÌÏÇÁ ×ÅÒÈÎÅÇÏ "
+#~ "ÕÒÏ×ÎÑ\n"
+#~ " info emacs buffers ÎÁÞÁÔØ Ó ÎÏÄÙ buffers × ÒÕËÏ×ÏÄÓÔ×Å emacs\n"
+#~ " info --show-options emacs ÎÁÞÁÔØ Ó ÎÏÄÙ, ÏÐÉÓÙ×ÁÀÝÅÊ ËÌÀÞÉ emacs\n"
+#~ " info -f ./foo.info ÐÏËÁÚÁÔØ ÆÁÊÌ ./foo.info, ÎÅ ÉÓËÁÔØ dir\n"
+
+#~ msgid ""
+#~ " Picking a menu item causes another node to be selected.\n"
+#~ msgstr ""
+#~ " ðÒÉ ÐÅÒÅÈÏÄÅ Ë ÚÁÄÁÎÎÏÍÕ ÐÕÎËÔÕ ÍÅÎÀ ×ÙÂÉÒÁÅÔÓÑ ÄÒÕÇÁÑ "
+#~ "ÎÏÄÁ.\n"
+
+#~ msgid ""
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ msgstr ""
+#~ " ÷Ù ÍÏÖÅÔÅ ÚÁÄÁÔØ ÔÁËÖÅ ÉÍÑ ÆÁÊÌÁ, ÎÁÐÒÉÍÅÒ (æáêì)îïäá.\n"
+
+#~ msgid " %-10s Search backward for a specified string\n"
+#~ msgstr ""
+#~ " %-10s îÁÊÔÉ ÚÁÄÁÎÎÕÀ ÓÔÒÏËÕ × ÏÂÒÁÔÎÏÍ ÎÁÐÒÁ×ÌÅÎÉÉ, É ÐÅÒÅÊÔÉ Ë\n"
+
+#~ msgid ""
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr " ÎÏÄÅ, × ËÏÔÏÒÏÊ ÎÁÊÄÅÎÏ ÓÌÅÄÕÀÝÅÅ ×ÈÏÖÄÅÎÉÅ.\n"
+
+#~ msgid "Following Next node..."
+#~ msgstr "ðÅÒÅÈÏÄ ÎÁ ÎÏÄÕ \"óÌÅÄÕÀÝÁÑ\"..."
+
+#~ msgid "Selecting first menu item..."
+#~ msgstr "÷ÙÂÉÒÁÅÔÓÑ ÐÅÒ×ÙÊ ÐÕÎËÔ ÍÅÎÀ..."
+
+#~ msgid "Selecting Next node..."
+#~ msgstr "÷ÙÂÉÒÁÅÔÓÑ ÎÏÄÁ \"óÌÅÄÕÀÝÁÑ\"..."
+
+#~ msgid "Moving Up %d time(s), then Next."
+#~ msgstr "ðÅÒÅÍÅÝÅÎÉÅ \"÷×ÅÒÈ\" %d ÒÁÚ(Á), ÚÁÔÅÍ \"óÌÅÄÕÀÝÁÑ\"."
+
+#~ msgid "Moving Prev in this window."
+#~ msgstr "ðÅÒÅÈÏÄ ÎÁ ÎÏÄÕ \"ðÒÅÄÙÄÕÝÁÑ\" × ÜÔÏÍ ÏËÎÅ."
+
+#~ msgid "Moving Up in this window."
+#~ msgstr "ðÅÒÅÈÏÄ ÎÁ ÎÏÄÕ \"÷×ÅÒÈ\" × ÜÔÏÍ ÏËÎÅ."
+
+#~ msgid "Moving to `Prev's last menu item."
+#~ msgstr "ðÅÒÅÈÏÄ ÎÁ ÐÏÓÌÅÄÎÉÊ ÐÕÎËÔ ÍÅÎÀ ÎÏÄÙ `ðÒÅÄÙÄÕÝÁÑ'."
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "Function"
+#~ msgstr "æÕÎËÃÉÑ"
+
+#~ msgid "Macro"
+#~ msgstr "íÁËÒÏ"
+
+#~ msgid "Special Form"
+#~ msgstr "óÐÅÃÉÁÌØÎÁÑ ÆÏÒÍÁ"
+
+#~ msgid "Variable"
+#~ msgstr "ðÅÒÅÍÅÎÎÁÑ"
+
+#~ msgid "User Option"
+#~ msgstr "ðÏÌØÚÏ×ÁÔÅÌØÓËÉÊ ÐÁÒÁÍÅÔÒ"
+
+#~ msgid "Instance Variable"
+#~ msgstr "ðÅÒÅÍÅÎÎÁÑ ÜËÚÅÍÐÌÑÒÁ"
+
+#~ msgid "Method"
+#~ msgstr "íÅÔÏÄ"
+
+#~ msgid "Untitled"
+#~ msgstr "âÅÚ ÚÁÇÏÌÏ×ËÁ"
+
+#~ msgid "This is %s, produced by makeinfo version %s from %s.\n"
+#~ msgstr "üÔÏ %s, ÓÏÚÄÁÎÎÙÊ makeinfo ×ÅÒÓÉÉ %s ÉÚ %s.\n"
+
+#~ msgid "Next:"
+#~ msgstr "óÌÅÄÕÀÝÁÑ:"
+
+#~ msgid "Previous:"
+#~ msgstr "ðÒÅÄÙÄÕÝÁÑ:"
+
+#~ msgid "Up:"
+#~ msgstr "÷×ÅÒÈ:"
+
+#~ msgid "Menu"
+#~ msgstr "óÓÙÌËÁ ÉÚ ÍÅÎÀ"
+
+#~ msgid "Cross"
+#~ msgstr "ðÅÒÅËÒÅÓÔÎÁÑ ÓÓÙÌËÁ"
+
+#~ msgid "Prev"
+#~ msgstr "ðÒÅÄÙÄÕÝÁÑ"
+
+#~ msgid "Up"
+#~ msgstr "÷×ÅÒÈ"
+
+#, fuzzy
+#~ msgid "see "
+#~ msgstr "óÍÏÔÒÉÔÅ "
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+#~ "\n"
+#~ "Add or remove entries in INFO-FILE from the Info directory DIR-FILE.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --debug report what is being done.\n"
+#~ " --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+#~ " don't insert any new entries.\n"
+#~ " --dir-file=NAME specify file name of Info directory file.\n"
+#~ " This is equivalent to using the DIR-FILE argument.\n"
+#~ " --entry=TEXT insert TEXT as an Info directory entry.\n"
+#~ " TEXT should have the form of an Info menu item line\n"
+#~ " plus zero or more extra lines starting with "
+#~ "whitespace.\n"
+#~ " If you specify more than one entry, they are all "
+#~ "added.\n"
+#~ " If you don't specify any entries, they are "
+#~ "determined\n"
+#~ " from information in the Info file itself.\n"
+#~ " --help display this help and exit.\n"
+#~ " --info-file=FILE specify Info file to install in the directory.\n"
+#~ " This is equivalent to using the INFO-FILE argument.\n"
+#~ " --info-dir=DIR same as --dir-file=DIR/dir.\n"
+#~ " --item=TEXT same as --entry TEXT.\n"
+#~ " An Info directory entry is actually a menu item.\n"
+#~ " --quiet suppress warnings.\n"
+#~ " --remove same as --delete.\n"
+#~ " --remove-exactly only remove if the info file name matches exactly;\n"
+#~ " .info and/or .gz suffixes are not ignored.\n"
+#~ " --section=SEC put this file's entries in section SEC of the "
+#~ "directory.\n"
+#~ " If you specify more than one section, all the "
+#~ "entries\n"
+#~ " are added in each of the sections.\n"
+#~ " If you don't specify any sections, they are "
+#~ "determined\n"
+#~ " from information in the Info file itself.\n"
+#~ " --section-regex=R if an entry is added to a section that does not "
+#~ "exist,\n"
+#~ " look for a section matching basic regular expression "
+#~ "R\n"
+#~ " (and ignoring case) before starting a new section.\n"
+#~ " --test suppress updating of DIR-FILE.\n"
+#~ " --silent suppress warnings.\n"
+#~ " --version display version information and exit.\n"
+#~ msgstr ""
+#~ "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ëìàþ]... [INFO-æáêì [DIR-æáêì]]\n"
+#~ "\n"
+#~ "õÓÔÁÎÁ×ÌÉ×ÁÅÔ ÉÌÉ ÕÄÁÌÑÅÔ ×ÈÏÖÄÅÎÉÑ ËÁÔÁÌÏÇÁ ÄÌÑ INFO-æáêìá ÉÚ\n"
+#~ "ÆÁÊÌÁ-ËÁÔÁÌÏÇÁ Info DIR-æáêì.\n"
+#~ "\n"
+#~ "ëÌÀÞÉ:\n"
+#~ " --delete ÕÄÁÌÉÔØ ÓÕÝÅÓÔ×ÕÀÝÉÅ ×ÈÏÖÄÅÎÉÑ ÄÌÑ INFO-æáêìá ÉÚ DIR-"
+#~ "æáêìá;\n"
+#~ " ÎÅ ×ÓÔÁ×ÌÑÔØ ÎÏ×ÙÅ ×ÈÏÖÄÅÎÉÑ.\n"
+#~ " --dir-file=éíñ ÚÁÄÁÅÔ ÉÍÑ ËÁÔÁÌÏÇÅ Info,\n"
+#~ " ÜË×É×ÁÌÅÎÔÎÏ ÉÓÐÏÌØÚÏ×ÁÎÉÀ ÁÒÇÕÍÅÎÔÁ DIR-æáêì.\n"
+#~ " --entry=ôåëóô ×ÓÔÁ×ÉÔØ ôåëóô × ËÁÞÅÓÔ×Å ×ÈÏÖÄÅÎÉÑ ËÁÔÁÌÏÇÁ Info.\n"
+#~ " ôÅËÓÔ ÄÏÌÖÅÎ ÉÍÅÔØ ÆÏÒÍÕ ÐÕÎËÔÁ ÍÅÎÀ ÐÌÀÓ (×ÏÚÍÏÖÎÏ)\n"
+#~ " ÎÅÓËÏÌØËÏ ÓÔÒÏË, ÎÁÞÉÎÁÀÝÉÈÓÑ ÐÒÏÂÅÌØÎÙÍÉ ÓÉÍ×ÏÌÁÍÉ. "
+#~ "åÓÌÉ ×Ù\n"
+#~ " ÚÁÄÁÄÉÔÅ ÎÅÓËÏÌØËÏ ×ÈÏÖÄÅÎÉÊ, ×ÓÅ ÏÎÉ ÂÕÄÕÔ "
+#~ "×ÓÔÁ×ÌÅÎÙ. åÓÌÉ\n"
+#~ " ×Ù ÎÅ ÚÁÄÁÄÉÔÅ ×ÈÏÖÄÅÎÉÊ, ÂÕÄÅÔ ×ÓÔÁ×ÌÅÎ ÔÅËÓÔ ÉÚ Info-"
+#~ "ÆÁÊÌÁ.\n"
+#~ " --help ÐÏËÁÚÁÔØ ÜÔÕ ÓÐÒÁ×ËÕ É ×ÙÊÔÉ.\n"
+#~ " --info-file=æáêì ÚÁÄÁÅÔ ÉÍÑ ÕÓÔÁÎÁ×ÌÉ×ÁÅÍÏÇÏ Info-ÆÁÊÌÁ,\n"
+#~ " ÜË×É×ÁÌÅÎÔÎÏ ÉÓÐÏÌØÚÏ×ÁÎÉÀ ÁÒÇÕÍÅÎÔÁ INFO-æáêì.\n"
+#~ " --info-dir=éíñ ÓÉÎÏÎÉÍ --dir-file=éíñ/dir.\n"
+#~ " --item=ôåëóô ÓÉÎÏÎÉÍ --entry ôåëóô.\n"
+#~ " ÷ÈÏÖÄÅÎÉÅ ËÁÔÁÌÏÇÁ Info ÎÁ ÓÁÍÏÍ ÄÅÌÅ Ñ×ÌÑÅÔÓÑ ÐÕÎËÔÏÍ "
+#~ "ÍÅÎÀ.\n"
+#~ " --quiet ÎÅ ×Ù×ÏÄÉÔØ ÐÒÅÄÕÐÒÅÖÄÅÎÉÑ.\n"
+#~ " --remove ÓÉÎÏÎÉÍ --delete.\n"
+#~ " --section=óåë ÐÏÍÅÓÔÉÔØ ×ÈÏÖÄÅÎÉÑ × ÚÁÄÁÎÎÕÀ ÓÅËÃÉÀ ËÁÔÁÌÏÇÁ.\n"
+#~ " åÓÌÉ ×Ù ÚÁÄÁÄÉÔÅ ÎÅÓËÏÌØËÏ ÓÅËÃÉÊ, ×ÈÏÖÄÅÎÉÑ ÂÕÄÕÔ "
+#~ "×ÓÔÁ×ÌÅÎÙ ×\n"
+#~ " ËÁÖÄÕÀ. åÓÌÉ ×Ù ÎÅ ÚÁÄÁÄÉÔÅ ÓÅËÃÉÊ, ×ÈÏÖÄÅÎÉÑ ÂÕÄÕÔ "
+#~ "×ÓÔÁ×ÌÅÎÙ\n"
+#~ " × ÓÅËÃÉÉ, ÚÁÄÁÎÎÙÅ × Info-ÆÁÊÌÅ.\n"
+#~ " --version ÐÏËÁÚÁÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ×ÅÒÓÉÉ É ×ÙÊÔÉ.\n"
+
+#~ msgid "menu item `%s' already exists, for file `%s'"
+#~ msgstr "ÐÕÎËÔ ÍÅÎÀ `%s' ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ, ÄÌÑ ÆÁÊÌÁ `%s'"
+
+#~ msgid "\\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+#~ msgstr ""
+#~ "\\%-10[menu-digit] ÷ÙÂÒÁÔØ ÐÅÒ×ÙÊ ... ÄÅ×ÑÔÙÊ ÐÕÎËÔ ÍÅÎÀ × ÔÅËÕÝÅÊ "
+#~ "ÎÏÄÅ.\n"
+
+#~ msgid "node `%s' has been referenced %d times"
+#~ msgstr "ÎÁ ÎÏÄÕ `%s' ÐÏÑ×ÉÌÏÓØ %d ÓÓÙÌÏË"
+
+#, fuzzy
+#~ msgid ""
+#~ "Copyright (C) %s Free Software Foundation, Inc.\n"
+#~ "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n"
+#~ "PARTICULAR PURPOSE. You may redistribute copies of GNU %s\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the file named COPYING.\n"
+#~ msgstr ""
+#~ "Copyright (C) %s Free Software Foundation, Inc.\n"
+#~ "íÙ îå ÐÒÅÄÏÓÔÁ×ÌÑÅÍ ÇÁÒÁÎÔÉÊ. ÷Ù ÍÏÖÅÔÅ ÒÁÓÐÒÏÓÔÒÁÎÑÔØ ÜÔÉ ÐÒÏÇÒÁÍÍÙ, "
+#~ "ÐÒÉ\n"
+#~ "ÓÏÂÌÀÄÅÎÉÉ ÕÓÌÏ×ÉÊ õÎÉ×ÅÒÓÁÌØÎÏÊ ïÂÝÅÓÔ×ÅÎÎÏÊ ìÉÃÅÎÚÉÉ GNU.\n"
+#~ "äÌÑ ÐÏÌÕÞÅÎÉÑ ÐÏÄÒÏÂÎÏÊ ÉÎÆÏÒÍÁÃÉÉ Ï ×ÏÚÍÏÖÎÏÓÔÉ ÒÁÓÐÒÏÓÔÒÁÎÅÎÉÑ "
+#~ "ÓÍÏÔÒÉÔÅ\n"
+#~ "ÆÁÊÌ COPYING.\n"
+
+#~ msgid "@quote-arg only useful for single-argument macros"
+#~ msgstr "@quote-arg ÐÏÌÅÚÎÁ, ÔÏÌØËÏ ÅÓÌÉ ÍÁËÒÏ ÐÒÉÎÉÍÁÅÔ ÏÄÉÎ ÁÒÇÕÍÅÎÔ"
+
+#~ msgid "Table of Contents"
+#~ msgstr "óÏÄÅÒÖÁÎÉÅ"
+
+#~ msgid "Short Contents"
+#~ msgstr "ëÒÁÔËÏÅ ÓÏÄÅÒÖÁÎÉÅ"
+
+#~ msgid "keep temporary files around after processing"
+#~ msgstr "ÓÏÈÒÁÎÑÔØ ×ÒÅÍÅÎÎÙÅ ÆÁÊÌÙ ÐÏÓÌÅ ÒÁÂÏÔÙ"
+
+#~ msgid "do not keep temporary files around after processing (default)"
+#~ msgstr "ÎÅ ÓÏÈÒÁÎÑÔØ ×ÒÅÍÅÎÎÙÅ ÆÁÊÌÙ (ÐÏ ÕÍÏÌÞÁÎÉÀ)"
+
+#~ msgid ""
+#~ " file, and select the node referenced by the first entry "
+#~ "found.\n"
+#~ msgstr ""
+#~ " Info-ÆÁÊÌÁ É ×ÙÂÒÁÔØ ÎÏÄÕ ÐÏ ÐÅÒ×ÏÊ ÎÁÊÄÅÎÎÏÊ ÓÓÙÌËÅ.\n"
+
+#~ msgid ""
+#~ "There is NO warranty. You may redistribute this software\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the files named COPYING.\n"
+#~ msgstr ""
+#~ "íÙ îå ÐÒÅÄÏÓÔÁ×ÌÑÅÍ ÇÁÒÁÎÔÉÊ. ÷Ù ÍÏÖÅÔÅ ÒÁÓÐÒÏÓÔÒÁÎÑÔØ ÜÔÉ ÐÒÏÇÒÁÍÍÙ, "
+#~ "ÐÒÉ\n"
+#~ "ÓÏÂÌÀÄÅÎÉÉ ÕÓÌÏ×ÉÊ õÎÉ×ÅÒÓÁÌØÎÏÊ ïÂÝÅÓÔ×ÅÎÎÏÊ ìÉÃÅÎÚÉÉ GNU.\n"
+#~ "äÌÑ ÐÏÌÕÞÅÎÉÑ ÐÏÄÒÏÂÎÏÊ ÉÎÆÏÒÍÁÃÉÉ Ï ×ÏÚÍÏÖÎÏÓÔÉ ÒÁÓÐÒÏÓÔÒÁÎÅÎÉÑ "
+#~ "ÓÍÏÔÒÉÔÅ\n"
+#~ "ÆÁÊÌ COPYING.\n"
diff --git a/po/rw.gmo b/po/rw.gmo
new file mode 100644
index 0000000..5a21c6e
--- /dev/null
+++ b/po/rw.gmo
Binary files differ
diff --git a/po/rw.po b/po/rw.po
new file mode 100644
index 0000000..ccce35c
--- /dev/null
+++ b/po/rw.po
@@ -0,0 +1,3540 @@
+# Kinyarwanda translations for texinfo package.
+# Copyright (C) 2005 Free Software Foundation, Inc.
+# This file is distributed under the same license as the texinfo package.
+# Steve Murphy <murf@e-tools.com>, 2005.
+# Steve performed initial rough translation from compendium built from translations provided by the following translators:
+# Philibert Ndandali <ndandali@yahoo.fr>, 2005.
+# Viateur MUGENZI <muvia1@yahoo.fr>, 2005.
+# Noëlla Mupole <s24211045@tuks.co.za>, 2005.
+# Carole Karema <karemacarole@hotmail.com>, 2005.
+# JEAN BAPTISTE NGENDAHAYO <ngenda_denis@yahoo.co.uk>, 2005.
+# Augustin KIBERWA <akiberwa@yahoo.co.uk>, 2005.
+# Donatien NSENGIYUMVA <ndonatienuk@yahoo.co.uk>, 2005.
+# Antoine Bigirimana <antoine@e-tools.com>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo 4.7.94\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2008-09-18 20:38+0200\n"
+"PO-Revision-Date: 2005-04-04 10:55-0700\n"
+"Last-Translator: Steven Michael Murphy <murf@e-tools.com>\n"
+"Language-Team: Kinyarwanda <translation-team-rw@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: gnulib/lib/error.c:125
+msgid "Unknown system error"
+msgstr ""
+
+#: gnulib/lib/getopt.c:526 gnulib/lib/getopt.c:542
+#, fuzzy, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s:Ihitamo ni"
+
+#: gnulib/lib/getopt.c:575 gnulib/lib/getopt.c:579
+#, fuzzy, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s:Ihitamo Kwemerera"
+
+#: gnulib/lib/getopt.c:588 gnulib/lib/getopt.c:593
+#, fuzzy, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s:Ihitamo Kwemerera"
+
+#: gnulib/lib/getopt.c:636 gnulib/lib/getopt.c:655 gnulib/lib/getopt.c:971
+#: gnulib/lib/getopt.c:990
+#, fuzzy, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s:Ihitamo"
+
+#: gnulib/lib/getopt.c:693 gnulib/lib/getopt.c:696
+#, fuzzy, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s:Ihitamo"
+
+#: gnulib/lib/getopt.c:704 gnulib/lib/getopt.c:707
+#, fuzzy, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s:Ihitamo"
+
+#: gnulib/lib/getopt.c:759 gnulib/lib/getopt.c:762
+#, fuzzy, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s:Ihitamo"
+
+#: gnulib/lib/getopt.c:768 gnulib/lib/getopt.c:771
+#, fuzzy, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s:Sibyo Ihitamo"
+
+#: gnulib/lib/getopt.c:823 gnulib/lib/getopt.c:839 gnulib/lib/getopt.c:1043
+#: gnulib/lib/getopt.c:1061
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s:Ihitamo"
+
+#: gnulib/lib/getopt.c:892 gnulib/lib/getopt.c:908
+#, fuzzy, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s:Ihitamo ni"
+
+#: gnulib/lib/getopt.c:932 gnulib/lib/getopt.c:950
+#, fuzzy, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s:Ihitamo Kwemerera"
+
+#: gnulib/lib/xalloc-die.c:34 gnulib/lib/xsetenv.c:37
+#, c-format
+msgid "memory exhausted"
+msgstr ""
+
+#: info/echo-area.c:283 info/session.c:966
+#, fuzzy
+msgid "Move forward a character"
+msgstr "Imbere a Inyuguti"
+
+#: info/echo-area.c:295 info/session.c:993
+#, fuzzy
+msgid "Move backward a character"
+msgstr "subira inyuma a Inyuguti"
+
+#: info/echo-area.c:307
+#, fuzzy
+msgid "Move to the start of this line"
+msgstr "Kuri i Gutangira Bya iyi Umurongo"
+
+#: info/echo-area.c:312
+#, fuzzy
+msgid "Move to the end of this line"
+msgstr "Kuri i Impera Bya iyi Umurongo"
+
+#: info/echo-area.c:320 info/session.c:1025
+#, fuzzy
+msgid "Move forward a word"
+msgstr "Imbere a ijambo"
+
+#: info/echo-area.c:360 info/session.c:1049
+#, fuzzy
+msgid "Move backward a word"
+msgstr "subira inyuma a ijambo"
+
+#: info/echo-area.c:400
+#, fuzzy
+msgid "Delete the character under the cursor"
+msgstr "i Inyuguti i indanga"
+
+#: info/echo-area.c:430
+#, fuzzy
+msgid "Delete the character behind the cursor"
+msgstr "i Inyuguti i indanga"
+
+#: info/echo-area.c:451
+#, fuzzy
+msgid "Cancel or quit operation"
+msgstr "Cyangwa Kuvamo"
+
+#: info/echo-area.c:466
+#, fuzzy
+msgid "Accept (or force completion of) this line"
+msgstr "Cyangwa Bya iyi Umurongo"
+
+#: info/echo-area.c:471
+#, fuzzy
+msgid "Insert next character verbatim"
+msgstr "Komeza>> Inyuguti"
+
+#: info/echo-area.c:479
+#, fuzzy
+msgid "Insert this character"
+msgstr "iyi Inyuguti"
+
+#: info/echo-area.c:498
+#, fuzzy
+msgid "Insert a TAB character"
+msgstr "a Inyuguti"
+
+#: info/echo-area.c:505
+#, fuzzy
+msgid "Transpose characters at point"
+msgstr "Inyuguti ku Akadomo"
+
+#: info/echo-area.c:556
+#, fuzzy
+msgid "Yank back the contents of the last kill"
+msgstr "Inyuma i Ibigize Bya i Iheruka"
+
+#: info/echo-area.c:563
+#, fuzzy
+msgid "Kill ring is empty"
+msgstr "Kuvuza Inzogera ni ubusa"
+
+#: info/echo-area.c:576
+#, fuzzy
+msgid "Yank back a previous kill"
+msgstr "Inyuma a Ibanjirije"
+
+#: info/echo-area.c:609
+#, fuzzy
+msgid "Kill to the end of the line"
+msgstr "Kuri i Impera Bya i Umurongo"
+
+#: info/echo-area.c:622
+#, fuzzy
+msgid "Kill to the beginning of the line"
+msgstr "Kuri i Itangiriro Bya i Umurongo"
+
+#: info/echo-area.c:634
+#, fuzzy
+msgid "Kill the word following the cursor"
+msgstr "i ijambo i indanga"
+
+#: info/echo-area.c:654
+#, fuzzy
+msgid "Kill the word preceding the cursor"
+msgstr "i ijambo i indanga"
+
+#: info/echo-area.c:870 info/echo-area.c:926
+msgid "No completions"
+msgstr ""
+
+#: info/echo-area.c:872
+#, fuzzy
+msgid "Not complete"
+msgstr "Byuzuye"
+
+#: info/echo-area.c:913
+msgid "List possible completions"
+msgstr ""
+
+#: info/echo-area.c:930
+msgid "Sole completion"
+msgstr ""
+
+#: info/echo-area.c:939
+msgid "One completion:\n"
+msgstr ""
+
+#: info/echo-area.c:940
+#, c-format
+msgid "%d completions:\n"
+msgstr ""
+
+#: info/echo-area.c:1087
+msgid "Insert completion"
+msgstr ""
+
+#: info/echo-area.c:1222
+msgid "Building completions..."
+msgstr ""
+
+#: info/echo-area.c:1342
+#, fuzzy
+msgid "Scroll the completions window"
+msgstr "i Idirishya"
+
+#: info/footnotes.c:212
+#, fuzzy
+msgid "Footnotes could not be displayed"
+msgstr "OYA"
+
+#: info/footnotes.c:238
+#, fuzzy
+msgid "Show the footnotes associated with this node in another window"
+msgstr "i Ubusobanuro mpezarupapuro Na: iyi in Idirishya"
+
+#: info/footnotes.h:26
+msgid "---------- Footnotes ----------"
+msgstr ""
+
+#: info/indices.c:171
+#, fuzzy
+msgid "Look up a string in the index for this file"
+msgstr "Hejuru a Ikurikiranyanyuguti in i Umubarendanga kugirango iyi IDOSIYE"
+
+#: info/indices.c:198
+#, fuzzy
+msgid "Finding index entries..."
+msgstr "Umubarendanga Ibyinjijwe"
+
+#: info/indices.c:206
+#, fuzzy
+msgid "No indices found."
+msgstr "ibimenyetso Byabonetse"
+
+# sw/source\ui\inc\swmn.hrc:_MN_EDIT.FN_EDIT_IDX_ENTRY_DLG.text
+#: info/indices.c:216
+#, fuzzy
+msgid "Index entry: "
+msgstr "Ikinjizwa mu mubarendanga...."
+
+#: info/indices.c:324
+#, fuzzy
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr ""
+"Kuri i Komeza>> Umubarendanga Ikintu Bivuye i Iheruka Umubarendanga Gushaka "
+"Komandi:"
+
+#: info/indices.c:334
+#, fuzzy
+msgid "No previous index search string."
+msgstr "Ibanjirije Umubarendanga Gushaka Ikurikiranyanyuguti"
+
+#: info/indices.c:341
+#, fuzzy
+msgid "No index entries."
+msgstr "Umubarendanga Ibyinjijwe"
+
+#: info/indices.c:374
+#, fuzzy, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "Ibyinjijwe"
+
+# framework/source\services\logindialog.src:RID_DLG_LOGIN.RID_PB_ADDITIONALSETTINGS.text
+#: info/indices.c:375
+#, fuzzy
+msgid "more "
+msgstr "Birenzeho"
+
+#: info/indices.c:385
+msgid "CAN'T SEE THIS"
+msgstr ""
+
+#: info/indices.c:421
+#, fuzzy, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr "in Komeza>> Umubarendanga BIHUYE Kuri Gushaka Komeza>>"
+
+#: info/indices.c:549
+#, fuzzy, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "ibimenyetso Bya"
+
+#: info/indices.c:604
+#, fuzzy, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr "Bihari Ibisobanuro Idosiye in ibimenyetso"
+
+#: info/indices.c:630
+#, fuzzy
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr ""
+"Byose Ibisobanuro ibimenyetso kugirango a Ikurikiranyanyuguti Na a "
+"Ibikubiyemo"
+
+#: info/indices.c:634
+msgid "Index apropos: "
+msgstr ""
+
+#: info/indices.c:662
+#, fuzzy, c-format
+msgid ""
+"\n"
+"* Menu: Nodes whose indices contain `%s':\n"
+msgstr "*bya ibimenyetso"
+
+#: info/info.c:275 info/infokey.c:899
+#, fuzzy, c-format
+msgid "Try --help for more information.\n"
+msgstr "Ifashayobora kugirango Birenzeho Ibisobanuro"
+
+#: info/info.c:294 info/infokey.c:145 install-info/install-info.c:2101
+#: makeinfo/makeinfo.c:802 util/texindex.c:295
+#, c-format
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+
+#: info/info.c:506
+#, fuzzy, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "Oya Umubarendanga Ibyinjijwe Byabonetse kugirango"
+
+#: info/info.c:600
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [MENU-ITEM...]\n"
+"\n"
+"Read documentation in Info format.\n"
+msgstr ""
+
+#: info/info.c:606
+msgid ""
+"Options:\n"
+" -k, --apropos=STRING look up STRING in all indices of all "
+"manuals.\n"
+" -d, --directory=DIR add DIR to INFOPATH.\n"
+" --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+" -f, --file=FILENAME specify Info file to visit."
+msgstr ""
+
+#: info/info.c:613
+msgid ""
+" -h, --help display this help and exit.\n"
+" --index-search=STRING go to node pointed by index entry STRING.\n"
+" -n, --node=NODENAME specify nodes in first visited Info file.\n"
+" -o, --output=FILENAME output selected nodes to FILENAME."
+msgstr ""
+
+#: info/info.c:619
+msgid ""
+" -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+" --no-raw-escapes output escapes as literal text.\n"
+" --restore=FILENAME read initial keystrokes from FILENAME.\n"
+" -O, --show-options, --usage go to command-line options node."
+msgstr ""
+
+#: info/info.c:626
+#, fuzzy
+msgid " -b, --speech-friendly be friendly to speech synthesizers."
+msgstr "-B Kuri"
+
+#: info/info.c:630
+msgid ""
+" --subnodes recursively output menu items.\n"
+" --vi-keys use vi-like and less-like key bindings.\n"
+" --version display version information and exit.\n"
+" -w, --where, --location print physical location of Info file."
+msgstr ""
+
+#: info/info.c:636
+msgid ""
+"\n"
+"The first non-option argument, if present, is the menu entry to start from;\n"
+"it is searched for in all `dir' files along INFOPATH.\n"
+"If it is not present, info merges all `dir' files and shows the result.\n"
+"Any remaining arguments are treated as the names of menu\n"
+"items relative to the initial node visited."
+msgstr ""
+
+#: info/info.c:643
+msgid ""
+"\n"
+"For a summary of key bindings, type h within Info."
+msgstr ""
+
+#: info/info.c:646
+msgid ""
+"\n"
+"Examples:\n"
+" info show top-level dir menu\n"
+" info info show the general manual for Info readers\n"
+" info info-stnd show the manual specific to this Info program\n"
+" info emacs start at emacs node from top-level dir\n"
+" info emacs buffers start at buffers node within emacs manual\n"
+" info --show-options emacs start at node with emacs' command line options\n"
+" info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+" info -f ./foo.info show file ./foo.info, not searching dir"
+msgstr ""
+
+#: info/info.c:657 info/infokey.c:918 makeinfo/makeinfo.c:475
+#: util/texindex.c:259
+#, fuzzy
+msgid ""
+"\n"
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr "org."
+
+#: info/info.c:691
+#, fuzzy, c-format
+msgid "Cannot find node `%s'."
+msgstr "Gushaka"
+
+#: info/info.c:692
+#, fuzzy, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "Gushaka"
+
+#: info/info.c:693
+#, fuzzy
+msgid "Cannot find a window!"
+msgstr "Gushaka a Idirishya"
+
+#: info/info.c:694
+#, fuzzy
+msgid "Point doesn't appear within this window's node!"
+msgstr "Kugaragara muri iyi"
+
+#: info/info.c:695
+#, fuzzy
+msgid "Cannot delete the last window."
+msgstr "Gusiba i Iheruka Idirishya"
+
+#: info/info.c:696
+#, fuzzy
+msgid "No menu in this node."
+msgstr "Ibikubiyemo in iyi"
+
+#: info/info.c:697
+#, fuzzy
+msgid "No footnotes in this node."
+msgstr "Ubusobanuro mpezarupapuro in iyi"
+
+#: info/info.c:698
+#, fuzzy
+msgid "No cross references in this node."
+msgstr "Kwambukiranya Indango in iyi"
+
+#: info/info.c:699
+#, fuzzy, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Mweretsi kugirango iyi"
+
+#: info/info.c:700
+#, fuzzy, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "Komandi: kugirango Ifashayobora"
+
+#: info/info.c:701
+#, fuzzy, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr "Ubwoko ni OYA Cyiza Kuri Gukoresha"
+
+#: info/info.c:702
+#, fuzzy
+msgid "You are already at the last page of this node."
+msgstr "ku i Iheruka Ipaji Bya iyi"
+
+#: info/info.c:703
+#, fuzzy
+msgid "You are already at the first page of this node."
+msgstr "ku i Itangira Ipaji Bya iyi"
+
+#: info/info.c:704
+#, fuzzy
+msgid "Only one window."
+msgstr "Idirishya"
+
+#: info/info.c:705
+#, fuzzy
+msgid "Resulting window would be too small."
+msgstr "Idirishya Gitoya"
+
+#: info/info.c:706
+#, fuzzy
+msgid "Not enough room for a help window, please delete a window."
+msgstr "kugirango a Ifashayobora Idirishya Gusiba a Idirishya"
+
+#: info/infodoc.c:45
+msgid "Basic Info command keys\n"
+msgstr ""
+
+#: info/infodoc.c:47
+#, fuzzy
+msgid "\\%-10[quit-help] Close this help window.\n"
+msgstr "\\%-10 Kuvamo Ifashayobora iyi Ifashayobora"
+
+#: info/infodoc.c:48
+#, fuzzy
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10 Kuvamo"
+
+#: info/infodoc.c:49
+#, fuzzy
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr "\\%-10 Kubona Ibisobanuro Ifashayobora i"
+
+#: info/infodoc.c:51
+#, fuzzy
+msgid "\\%-10[prev-line] Move up one line.\n"
+msgstr "\\%-10 Umurongo subira inyuma 1. Umurongo"
+
+#: info/infodoc.c:52
+#, fuzzy
+msgid "\\%-10[next-line] Move down one line.\n"
+msgstr "\\%-10 Komeza>> Umurongo Imbere 1. Umurongo"
+
+#: info/infodoc.c:53
+#, fuzzy
+msgid "\\%-10[scroll-backward] Scroll backward one screenful.\n"
+msgstr "\\%-10 subira inyuma subira inyuma a Ipaji"
+
+#: info/infodoc.c:54
+#, fuzzy
+msgid "\\%-10[scroll-forward] Scroll forward one screenful.\n"
+msgstr "\\%-10 Imbere Imbere a Ipaji"
+
+#: info/infodoc.c:55
+#, fuzzy
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr "\\%-10 Itangiriro Bya Kuri i Itangiriro Bya iyi"
+
+#: info/infodoc.c:56
+#, fuzzy
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr "\\%-10 Impera Bya Kuri i Impera Bya iyi"
+
+#: info/infodoc.c:58
+#, fuzzy
+msgid "\\%-10[move-to-next-xref] Skip to the next hypertext link.\n"
+msgstr ""
+"\\%-10 Kwimura Kuri Komeza>> X- Ngenderwaho Kuri Komeza>> Ihuza muri iyi"
+
+#: info/infodoc.c:59
+#, fuzzy
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under the "
+"cursor.\n"
+msgstr "\\%-10 Guhitamo Indango iyi Umurongo i Ihuza indanga"
+
+#: info/infodoc.c:60
+#, fuzzy
+msgid "\\%-10[history-node] Go back to the last node seen in this window.\n"
+msgstr "\\%-10 Urutonde Kuri i Iheruka in iyi Idirishya"
+
+#: info/infodoc.c:62
+#, fuzzy
+msgid "\\%-10[global-prev-node] Go to the previous node in the document.\n"
+msgstr "\\%-10 Kuri i Ibanjirije Bya iyi"
+
+#: info/infodoc.c:63
+#, fuzzy
+msgid "\\%-10[global-next-node] Go to the next node in the document.\n"
+msgstr "\\%-10 Komeza>> Kuri i Komeza>> Bya iyi"
+
+#: info/infodoc.c:64
+#, fuzzy
+msgid "\\%-10[prev-node] Go to the previous node on this level.\n"
+msgstr "\\%-10 Kuri i Ibanjirije Bya iyi"
+
+#: info/infodoc.c:65
+#, fuzzy
+msgid "\\%-10[next-node] Go to the next node on this level.\n"
+msgstr "\\%-10 Komeza>> Kuri i Komeza>> Bya iyi"
+
+#: info/infodoc.c:66
+#, fuzzy
+msgid "\\%-10[up-node] Go up one level.\n"
+msgstr "\\%-10 Hejuru Hejuru Bivuye iyi"
+
+#: info/infodoc.c:67
+#, fuzzy
+msgid "\\%-10[top-node] Go to the top node of this document.\n"
+msgstr "\\%-10 Impera Bya Kuri i Impera Bya iyi"
+
+#: info/infodoc.c:68
+#, fuzzy
+msgid "\\%-10[dir-node] Go to the main `directory' node.\n"
+msgstr "\\%-10 Impera Bya Kuri i Impera Bya iyi"
+
+#: info/infodoc.c:70
+#, fuzzy
+msgid "1...9 Pick the first...ninth item in this node's menu.\n"
+msgstr "%-10sItangira Ikintu in Ibikubiyemo"
+
+#: info/infodoc.c:71
+#, fuzzy
+msgid "\\%-10[last-menu-item] Pick the last item in this node's menu.\n"
+msgstr "\\%-10 Iheruka Ibikubiyemo Ikintu Iheruka Ikintu in Ibikubiyemo"
+
+#: info/infodoc.c:72
+#, fuzzy
+msgid "\\%-10[menu-item] Pick a menu item specified by name.\n"
+msgstr "%-10sIbikubiyemo Ikintu ku Izina:"
+
+#: info/infodoc.c:73
+#, fuzzy
+msgid "\\%-10[xref-item] Follow a cross reference specified by name.\n"
+msgstr ""
+"\\%-10 X- Ngenderwaho Ikintu a Kwambukiranya Indango Izina: Bya Indango"
+
+#: info/infodoc.c:74
+#, fuzzy
+msgid "\\%-10[goto-node] Go to a node specified by name.\n"
+msgstr "%-10sKuri ku Izina:"
+
+#: info/infodoc.c:76
+#, fuzzy
+msgid "\\%-10[search] Search forward for a specified string.\n"
+msgstr "%-10sImbere kugirango a Ikurikiranyanyuguti"
+
+#: info/infodoc.c:77
+#, fuzzy
+msgid "\\%-10[search-previous] Search for previous occurrence.\n"
+msgstr "\\%-10 Kuri i Ibanjirije Bya iyi"
+
+#: info/infodoc.c:78
+#, fuzzy
+msgid "\\%-10[search-next] Search for next occurrence.\n"
+msgstr ""
+"%-10skugirango a Ikurikiranyanyuguti in i Umubarendanga Ibyinjijwe Bya iyi"
+
+#: info/infodoc.c:79
+#, fuzzy
+msgid ""
+"\\%-10[index-search] Search for a specified string in the index, and\n"
+" select the node referenced by the first entry found.\n"
+msgstr ""
+"\\%-10 Umubarendanga Gushaka kugirango a Ikurikiranyanyuguti in i "
+"Umubarendanga Ibyinjijwe Bya iyi IDOSIYE Na Guhitamo i ku i Itangira "
+"Icyinjijwe Byabonetse"
+
+#: info/infodoc.c:81
+#, fuzzy
+msgid "\\%-10[abort-key] Cancel the current operation.\n"
+msgstr "KIGEZWEHO"
+
+#: info/infodoc.c:89
+#, fuzzy
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr "in"
+
+#: info/infodoc.c:92
+#, fuzzy, c-format
+msgid " %-10s Quit this help.\n"
+msgstr "%-10siyi Ifashayobora"
+
+#: info/infodoc.c:93
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr ""
+
+#: info/infodoc.c:94
+#, fuzzy, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr "%-10si"
+
+#: info/infodoc.c:98
+#, fuzzy, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr "%-10sKuri i Bya iyi"
+
+#: info/infodoc.c:99
+#, fuzzy, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr "%-10sKuri i Bya iyi"
+
+#: info/infodoc.c:100
+#, fuzzy, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr "%-10sBivuye iyi"
+
+#: info/infodoc.c:101
+#, fuzzy, c-format
+msgid ""
+" %-10s Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+"\\%-10 Ibikubiyemo Ikintu Ibikubiyemo Ikintu ku Izina: a Ibikubiyemo Ikintu "
+"Kuri Byahiswemo"
+
+#: info/infodoc.c:103
+#, fuzzy, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr "%-10sa Kwambukiranya Indango Izina: Bya Indango"
+
+#: info/infodoc.c:104
+#, fuzzy, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr "%-10sKuri i Iheruka in iyi Idirishya"
+
+#: info/infodoc.c:105
+#, fuzzy, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr "%-10sKuri Komeza>> Ihuza muri iyi"
+
+#: info/infodoc.c:106
+#, fuzzy, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr "%-10si Ihuza indanga"
+
+#: info/infodoc.c:107
+#, fuzzy, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr "%-10sKuri i Kuri g"
+
+#: info/infodoc.c:108
+#, fuzzy, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr "%-10sKuri i Kuri g"
+
+#: info/infodoc.c:110
+#, fuzzy
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr "muri a"
+
+#: info/infodoc.c:112
+#, fuzzy, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr "%-10sImbere a Ipaji"
+
+#: info/infodoc.c:113
+#, fuzzy, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr "%-10ssubira inyuma a Ipaji"
+
+#: info/infodoc.c:114
+#, fuzzy, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr "%-10sKuri i Itangiriro Bya iyi"
+
+#: info/infodoc.c:115
+#, fuzzy, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr "%-10sKuri i Impera Bya iyi"
+
+#: info/infodoc.c:116
+#, fuzzy, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr "%-10sImbere 1. Umurongo"
+
+#: info/infodoc.c:117
+#, fuzzy, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr "%-10ssubira inyuma 1. Umurongo"
+
+#: info/infodoc.c:119
+#, fuzzy
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr "Amabwiriza"
+
+#: info/infodoc.c:121
+#, fuzzy, c-format
+msgid " %-10s Pick first...ninth item in node's menu.\n"
+msgstr "%-10sItangira Ikintu in Ibikubiyemo"
+
+#: info/infodoc.c:122
+#, fuzzy, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr "%-10sIheruka Ikintu in Ibikubiyemo"
+
+#: info/infodoc.c:125
+#, fuzzy, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr ""
+"\\%-10 Umubarendanga Gushaka kugirango a Ikurikiranyanyuguti in i "
+"Umubarendanga Ibyinjijwe Bya iyi IDOSIYE Na Guhitamo i ku i Itangira "
+"Icyinjijwe Byabonetse"
+
+#: info/infodoc.c:127
+#, fuzzy, c-format
+msgid ""
+" %-10s Move to node specified by name.\n"
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+"\\%-10 Kuri ku Izina: Gicurasi Gushyiramo a Izina ry'idosiye: Nka Nka in"
+
+#: info/infodoc.c:129
+#, fuzzy, c-format
+msgid ""
+" %-10s Search forward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+"\\%-10 Gushaka Imbere kugirango a Na Guhitamo i in i Komeza>> ukugaragara ni "
+"Byabonetse"
+
+#: info/infodoc.c:131
+#, fuzzy, c-format
+msgid ""
+" %-10s Search backward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+"\\%-10 Gushaka Imbere kugirango a Na Guhitamo i in i Komeza>> ukugaragara ni "
+"Byabonetse"
+
+#: info/infodoc.c:312
+#, fuzzy
+msgid "The current search path is:\n"
+msgstr "KIGEZWEHO Gushaka Inzira ni"
+
+#: info/infodoc.c:316
+#, fuzzy
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr "Bihari in"
+
+#: info/infodoc.c:320
+#, fuzzy
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr "Bihari in i Ubuso"
+
+#: info/infodoc.c:343
+#, fuzzy, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr "Amabwiriza Biturutse"
+
+#: info/infodoc.c:347
+#, fuzzy
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr "Amabwiriza ku Byose"
+
+#: info/infodoc.c:477
+#, fuzzy
+msgid "Display help message"
+msgstr "Ifashayobora Ubutumwa"
+
+#: info/infodoc.c:495
+#, fuzzy
+msgid "Visit Info node `(info)Help'"
+msgstr "Ibisobanuro"
+
+#: info/infodoc.c:633
+#, fuzzy
+msgid "Print documentation for KEY"
+msgstr "kugirango"
+
+#: info/infodoc.c:645
+#, fuzzy, c-format
+msgid "Describe key: %s"
+msgstr "Urufunguzo"
+
+#: info/infodoc.c:656
+#, fuzzy, c-format
+msgid "ESC %s is undefined."
+msgstr "ni kidasobanuye"
+
+#: info/infodoc.c:672 info/infodoc.c:701
+#, fuzzy, c-format
+msgid "%s is undefined."
+msgstr "%sni kidasobanuye"
+
+#: info/infodoc.c:722
+#, fuzzy, c-format
+msgid "%s is defined to %s."
+msgstr "%sni Kuri"
+
+#: info/infodoc.c:1146
+#, fuzzy
+msgid "Show what to type to execute a given command"
+msgstr "Kuri Ubwoko Kuri Gukora a Komandi:"
+
+#: info/infodoc.c:1150
+#, fuzzy
+msgid "Where is command: "
+msgstr "ni Komandi:"
+
+#: info/infodoc.c:1172
+#, fuzzy, c-format
+msgid "`%s' is not on any keys"
+msgstr "`%s'ni OYA ku Utubuto"
+
+#: info/infodoc.c:1179
+#, fuzzy, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%sBiturutse"
+
+#: info/infodoc.c:1183
+#, fuzzy, c-format
+msgid "%s can be invoked via %s."
+msgstr "%sBiturutse"
+
+#: info/infodoc.c:1188
+#, fuzzy, c-format
+msgid "There is no function named `%s'"
+msgstr "ni Oya Umumaro"
+
+#: info/infodoc.c:96
+#, fuzzy
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr "Ikindi"
+
+#: info/infokey.c:170
+#, fuzzy
+msgid "incorrect number of arguments"
+msgstr "Umubare Bya ingingo"
+
+#: info/infokey.c:201
+#, fuzzy, c-format
+msgid "cannot open input file `%s'"
+msgstr "Gufungura Iyinjiza IDOSIYE"
+
+#: info/infokey.c:215
+#, fuzzy, c-format
+msgid "cannot create output file `%s'"
+msgstr "Kurema Ibisohoka IDOSIYE"
+
+#: info/infokey.c:226
+#, fuzzy, c-format
+msgid "error writing to `%s'"
+msgstr "Ikosa Kuri"
+
+#: info/infokey.c:232
+#, fuzzy, c-format
+msgid "error closing output file `%s'"
+msgstr "Ikosa Ibisohoka IDOSIYE"
+
+#: info/infokey.c:450
+#, fuzzy
+msgid "key sequence too long"
+msgstr "Urufunguzo"
+
+#: info/infokey.c:529
+#, fuzzy
+msgid "missing key sequence"
+msgstr "Ibuze Urufunguzo"
+
+#: info/infokey.c:610
+#, fuzzy
+msgid "NUL character (\\000) not permitted"
+msgstr "Inyuguti OYA"
+
+#: info/infokey.c:641
+#, fuzzy, c-format
+msgid "NUL character (^%c) not permitted"
+msgstr "Inyuguti OYA"
+
+#: info/infokey.c:665
+#, fuzzy
+msgid "missing action name"
+msgstr "Ibuze Igikorwa Izina:"
+
+#: info/infokey.c:681 info/infokey.c:756
+#, fuzzy
+msgid "section too long"
+msgstr "Icyiciro"
+
+#: info/infokey.c:688
+#, fuzzy, c-format
+msgid "unknown action `%s'"
+msgstr "Kitazwi Igikorwa"
+
+#: info/infokey.c:698
+#, fuzzy
+msgid "action name too long"
+msgstr "Igikorwa Izina:"
+
+#: info/infokey.c:712
+#, fuzzy, c-format
+msgid "extra characters following action `%s'"
+msgstr "Birenga Inyuguti Igikorwa"
+
+#: info/infokey.c:723
+#, fuzzy
+msgid "missing variable name"
+msgstr "Ibuze IMPINDURAGACIRO Izina:"
+
+#: info/infokey.c:733
+#, fuzzy
+msgid "missing `=' immediately after variable name"
+msgstr "Ibuze Ako kanya Nyuma IMPINDURAGACIRO Izina:"
+
+#: info/infokey.c:741
+#, fuzzy
+msgid "variable name too long"
+msgstr "IMPINDURAGACIRO Izina:"
+
+#: info/infokey.c:765
+#, fuzzy
+msgid "value too long"
+msgstr "Agaciro"
+
+#: info/infokey.c:890
+#, fuzzy, c-format
+msgid "\"%s\", line %u: "
+msgstr "\"%s\",Umurongo"
+
+#: info/infokey.c:906
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [OPTION]... [INPUT-FILE]\n"
+"\n"
+"Compile infokey source file to infokey file. Reads INPUT-FILE (default\n"
+"$HOME/.infokey) and writes compiled key file to (by default) $HOME/.info.\n"
+"\n"
+"Options:\n"
+" --output FILE output to FILE instead of $HOME/.info\n"
+" --help display this help and exit.\n"
+" --version display version information and exit.\n"
+msgstr "Ibisobanuro."
+
+#: info/infomap.c:955
+#, fuzzy, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "Kwirengagiza Sibyo IDOSIYE Gitoya"
+
+#: info/infomap.c:958
+#, fuzzy, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "Kwirengagiza Sibyo IDOSIYE"
+
+#: info/infomap.c:971
+#, fuzzy, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "IDOSIYE Gusoma"
+
+#: info/infomap.c:990
+#, fuzzy, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr "IDOSIYE Imibare Gukoresha Kuri Kuvugurura"
+
+#: info/infomap.c:999
+#, fuzzy, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr "IDOSIYE ni Inyuma Bya Itariki Gukoresha Kuri Kuvugurura"
+
+#: info/infomap.c:1015
+#, fuzzy, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr "IDOSIYE Icyiciro Uburebure Gukoresha Kuri Kuvugurura"
+
+#: info/infomap.c:1036
+#, fuzzy, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr "IDOSIYE Icyiciro ITEGEKONGENGA Gukoresha Kuri Kuvugurura"
+
+#: info/infomap.c:1171
+#, fuzzy
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr "Ibyatanzwe in IDOSIYE Urufunguzo Ibyafataranyijwe"
+
+#: info/infomap.c:1221
+#, fuzzy
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr "Ibyatanzwe in IDOSIYE VAR Amagenamiterere"
+
+#: info/m-x.c:68
+#, fuzzy
+msgid "Read the name of an Info command and describe it"
+msgstr "i Izina: Bya Komandi: Na"
+
+#: info/m-x.c:72
+#, fuzzy
+msgid "Describe command: "
+msgstr "Komandi:"
+
+#: info/m-x.c:95
+#, fuzzy
+msgid "Read a command name in the echo area and execute it"
+msgstr "a Komandi: Izina: in i Ubuso Na Gukora"
+
+#: info/m-x.c:139
+#, fuzzy
+msgid "Cannot execute an `echo-area' command here."
+msgstr "Gukora Komandi:"
+
+#: info/m-x.c:153
+#, fuzzy, c-format
+msgid "Undefined command: %s"
+msgstr "Komandi:"
+
+#: info/m-x.c:159
+#, fuzzy
+msgid "Set the height of the displayed window"
+msgstr "i Ubuhagarike Bya i Idirishya"
+
+#: info/m-x.c:172
+#, fuzzy, c-format
+msgid "Set screen height to (%d): "
+msgstr "Mugaragaza Ubuhagarike Kuri"
+
+#: info/makedoc.c:166 info/makedoc.c:174
+#, fuzzy, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr "Idosiye Kuri Ubwoko iyi IDOSIYE Gushyiramo"
+
+#: info/makedoc.c:556
+#, fuzzy, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "i IDOSIYE"
+
+#: info/nodemenu.c:30
+#, fuzzy
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr "*Idosiye"
+
+#: info/nodemenu.c:201
+#, fuzzy
+msgid ""
+"Here is the menu of nodes you have recently visited.\n"
+"Select one from this menu, or use `\\[history-node]' in another window.\n"
+msgstr ""
+"ni i Ibikubiyemo Bya Bivuye iyi Ibikubiyemo Cyangwa Gukoresha Urutonde in "
+"Idirishya"
+
+#: info/nodemenu.c:223
+#, fuzzy
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr "a Idirishya a Ibikubiyemo Bya Byose Bya i"
+
+#: info/nodemenu.c:303
+#, fuzzy
+msgid "Select a node which has been previously visited in a visible window"
+msgstr "a in a Kigaragara Idirishya"
+
+#: info/nodemenu.c:316
+msgid "Select visited node: "
+msgstr ""
+
+#: info/nodemenu.c:336 info/session.c:2578
+#, fuzzy, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "Indango"
+
+#: info/search.c:166
+#, c-format
+msgid "regexp error: %s"
+msgstr ""
+
+#: info/session.c:164
+#, fuzzy, c-format
+msgid ""
+"Welcome to Info version %s. Type \\[get-help-window] for help, \\[menu-item] "
+"for menu item."
+msgstr ""
+"Kuri Verisiyo Kubona Ifashayobora Idirishya kugirango Ifashayobora "
+"Ibikubiyemo Ikintu kugirango Ibikubiyemo Ikintu"
+
+#: info/session.c:625
+#, fuzzy
+msgid "Move down to the next line"
+msgstr "Hasi Kuri i Komeza>> Umurongo"
+
+#: info/session.c:661
+#, fuzzy
+msgid "Move up to the previous line"
+msgstr "Hejuru Kuri i Ibanjirije Umurongo"
+
+#: info/session.c:931
+#, fuzzy
+msgid "Move to the end of the line"
+msgstr "Kuri i Impera Bya i Umurongo"
+
+#: info/session.c:942
+#, fuzzy
+msgid "Move to the start of the line"
+msgstr "Kuri i Gutangira Bya i Umurongo"
+
+#: info/session.c:1142
+msgid "Next"
+msgstr "Ikurikira"
+
+#: info/session.c:1158 info/session.c:1283
+#, fuzzy
+msgid "No more nodes within this document."
+msgstr "Birenzeho muri iyi Inyandiko"
+
+#: info/session.c:1309
+#, fuzzy
+msgid "No `Prev' for this node."
+msgstr "kugirango iyi"
+
+#: info/session.c:1329
+#, fuzzy
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr "Cyangwa kugirango iyi muri iyi Inyandiko"
+
+#: info/session.c:1391
+#, fuzzy
+msgid "Move forwards or down through node structure"
+msgstr "Cyangwa Hasi Gihinguranya Imiterere"
+
+#: info/session.c:1407
+#, fuzzy
+msgid "Move backwards or up through node structure"
+msgstr "Inyuma Cyangwa Hejuru Gihinguranya Imiterere"
+
+#: info/session.c:1508
+#, fuzzy
+msgid "Scroll forward in this window"
+msgstr "Imbere in iyi Idirishya"
+
+#: info/session.c:1516
+#, fuzzy
+msgid "Scroll forward in this window and set default window size"
+msgstr "Imbere in iyi Idirishya Na Gushyiraho Mburabuzi Idirishya Ingano"
+
+#: info/session.c:1524
+#, fuzzy
+msgid "Scroll forward in this window staying within node"
+msgstr "Imbere in iyi Idirishya muri"
+
+#: info/session.c:1532
+#, fuzzy
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr "Imbere in iyi Idirishya muri Na Gushyiraho Mburabuzi Idirishya Ingano"
+
+#: info/session.c:1540
+#, fuzzy
+msgid "Scroll backward in this window"
+msgstr "subira inyuma in iyi Idirishya"
+
+#: info/session.c:1548
+#, fuzzy
+msgid "Scroll backward in this window and set default window size"
+msgstr ""
+"subira inyuma in iyi Idirishya Na Gushyiraho Mburabuzi Idirishya Ingano"
+
+#: info/session.c:1557
+#, fuzzy
+msgid "Scroll backward in this window staying within node"
+msgstr "subira inyuma in iyi Idirishya muri"
+
+#: info/session.c:1565
+#, fuzzy
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr ""
+"subira inyuma in iyi Idirishya muri Na Gushyiraho Mburabuzi Idirishya Ingano"
+
+#: info/session.c:1573
+#, fuzzy
+msgid "Move to the start of this node"
+msgstr "Kuri i Gutangira Bya iyi"
+
+#: info/session.c:1580
+#, fuzzy
+msgid "Move to the end of this node"
+msgstr "Kuri i Impera Bya iyi"
+
+#: info/session.c:1587
+#, fuzzy
+msgid "Scroll down by lines"
+msgstr "Hasi ku Imirongo"
+
+#: info/session.c:1604
+#, fuzzy
+msgid "Scroll up by lines"
+msgstr "Hejuru ku Imirongo"
+
+#: info/session.c:1622
+#, fuzzy
+msgid "Scroll down by half screen size"
+msgstr "Hasi ku Mugaragaza Ingano"
+
+#: info/session.c:1648
+#, fuzzy
+msgid "Scroll up by half screen size"
+msgstr "Hejuru ku Mugaragaza Ingano"
+
+#: info/session.c:1677
+#, fuzzy
+msgid "Select the next window"
+msgstr "i Komeza>> Idirishya"
+
+#: info/session.c:1716
+#, fuzzy
+msgid "Select the previous window"
+msgstr "i Ibanjirije Idirishya"
+
+#: info/session.c:1767
+#, fuzzy
+msgid "Split the current window"
+msgstr "i KIGEZWEHO Idirishya"
+
+#: info/session.c:1848
+#, fuzzy
+msgid "Delete the current window"
+msgstr "i KIGEZWEHO Idirishya"
+
+#: info/session.c:1856
+#, fuzzy
+msgid "Cannot delete a permanent window"
+msgstr "Gusiba a Idirishya"
+
+#: info/session.c:1888
+#, fuzzy
+msgid "Delete all other windows"
+msgstr "Byose Ikindi"
+
+#: info/session.c:1934
+#, fuzzy
+msgid "Scroll the other window"
+msgstr "i Ikindi Idirishya"
+
+#: info/session.c:1955
+#, fuzzy
+msgid "Scroll the other window backward"
+msgstr "i Ikindi Idirishya subira inyuma"
+
+#: info/session.c:1961
+#, fuzzy
+msgid "Grow (or shrink) this window"
+msgstr "Cyangwa Kugabanuka iyi Idirishya"
+
+#: info/session.c:1972
+#, fuzzy
+msgid "Divide the available screen space among the visible windows"
+msgstr "i Bihari Mugaragaza Umwanya i Kigaragara"
+
+#: info/session.c:1979
+#, fuzzy
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "i Leta Bya Umurongo in i KIGEZWEHO Idirishya"
+
+#: info/session.c:1986
+msgid "Toggle the usage of regular expressions in searches"
+msgstr ""
+
+#: info/session.c:1990
+msgid "Using regular expressions for searches."
+msgstr ""
+
+#: info/session.c:1991
+msgid "Using literal strings for searches."
+msgstr ""
+
+#: info/session.c:2162
+#, fuzzy
+msgid "Select the Next node"
+msgstr "i"
+
+#: info/session.c:2170
+#, fuzzy
+msgid "Select the Prev node"
+msgstr "i"
+
+#: info/session.c:2178
+#, fuzzy
+msgid "Select the Up node"
+msgstr "i"
+
+#: info/session.c:2185
+#, fuzzy
+msgid "Select the last node in this file"
+msgstr "i Iheruka in iyi IDOSIYE"
+
+#: info/session.c:2212 info/session.c:2245
+#, fuzzy
+msgid "This window has no additional nodes"
+msgstr "Idirishya Oya"
+
+#: info/session.c:2218
+#, fuzzy
+msgid "Select the first node in this file"
+msgstr "i Itangira in iyi IDOSIYE"
+
+#: info/session.c:2252
+#, fuzzy
+msgid "Select the last item in this node's menu"
+msgstr "i Iheruka Ikintu in iyi Ibikubiyemo"
+
+#: info/session.c:2258
+#, fuzzy
+msgid "Select this menu item"
+msgstr "iyi Ibikubiyemo Ikintu"
+
+#: info/session.c:2291
+#, fuzzy, c-format
+msgid "There aren't %d items in this menu."
+msgstr "in iyi Ibikubiyemo"
+
+#: info/session.c:2485 info/session.c:2486
+#, fuzzy, c-format
+msgid "Menu item (%s): "
+msgstr "Ikintu"
+
+#: info/session.c:2489
+#, fuzzy
+msgid "Menu item: "
+msgstr "Ikintu"
+
+#: info/session.c:2496 info/session.c:2497
+#, fuzzy, c-format
+msgid "Follow xref (%s): "
+msgstr "X- Ngenderwaho"
+
+#: info/session.c:2500
+#, fuzzy
+msgid "Follow xref: "
+msgstr "X- Ngenderwaho"
+
+#: info/session.c:2629
+#, fuzzy
+msgid "Read a menu item and select its node"
+msgstr "a Ibikubiyemo Ikintu Na Guhitamo"
+
+#: info/session.c:2637
+#, fuzzy
+msgid "Read a footnote or cross reference and select its node"
+msgstr "a Ubusobanuro mpezarupapuro Cyangwa Kwambukiranya Indango Na Guhitamo"
+
+#: info/session.c:2643
+#, fuzzy
+msgid "Move to the start of this node's menu"
+msgstr "Kuri i Gutangira Bya iyi Ibikubiyemo"
+
+#: info/session.c:2667
+#, fuzzy
+msgid "Visit as many menu items at once as possible"
+msgstr "Nka Ibikubiyemo ku Rimwe Nka"
+
+#: info/session.c:2695
+#, fuzzy
+msgid "Read a node name and select it"
+msgstr "a Izina: Na Guhitamo"
+
+#: info/session.c:2750 info/session.c:2755
+msgid "Goto node: "
+msgstr ""
+
+#: info/session.c:2819
+#, fuzzy, c-format
+msgid "No menu in node `%s'."
+msgstr "Ibikubiyemo in"
+
+#: info/session.c:2865
+#, fuzzy, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "Ibikubiyemo Ikintu in"
+
+#: info/session.c:2895
+#, fuzzy, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr "Kuri Gushaka ku in"
+
+#: info/session.c:2945
+#, fuzzy
+msgid "Read a list of menus starting from dir and follow them"
+msgstr "a Urutonde Bya Ibikubiyemo Bivuye Na"
+
+#: info/session.c:2947
+#, fuzzy
+msgid "Follow menus: "
+msgstr "Ibikubiyemo"
+
+#: info/session.c:3140
+#, fuzzy
+msgid "Find the node describing program invocation"
+msgstr "i Porogaramu"
+
+#: info/session.c:3142
+#, fuzzy, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "Bya"
+
+#: info/session.c:3180
+#, fuzzy
+msgid "Read a manpage reference and select it"
+msgstr "a Indango Na Guhitamo"
+
+#: info/session.c:3184
+msgid "Get Manpage: "
+msgstr ""
+
+#: info/session.c:3214
+#, fuzzy
+msgid "Select the node `Top' in this file"
+msgstr "i in iyi IDOSIYE"
+
+#: info/session.c:3220
+#, fuzzy
+msgid "Select the node `(dir)'"
+msgstr "i"
+
+#: info/session.c:3237 info/session.c:3239
+#, c-format
+msgid "Kill node (%s): "
+msgstr ""
+
+#: info/session.c:3291
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr ""
+
+#: info/session.c:3301
+#, fuzzy
+msgid "Cannot kill the last node"
+msgstr "i Iheruka"
+
+#: info/session.c:3387
+#, fuzzy
+msgid "Select the most recently selected node"
+msgstr "i Byahiswemo"
+
+#: info/session.c:3393
+#, fuzzy
+msgid "Kill this node"
+msgstr "iyi"
+
+#: info/session.c:3401
+#, fuzzy
+msgid "Read the name of a file and select it"
+msgstr "i Izina: Bya a IDOSIYE Na Guhitamo"
+
+#: info/session.c:3405
+#, fuzzy
+msgid "Find file: "
+msgstr "IDOSIYE"
+
+#: info/session.c:3422
+#, fuzzy, c-format
+msgid "Cannot find `%s'."
+msgstr "Gushaka"
+
+#: info/session.c:3465 info/session.c:3583
+#, fuzzy, c-format
+msgid "Could not create output file `%s'."
+msgstr "OYA Kurema Ibisohoka IDOSIYE"
+
+#: info/session.c:3479 info/session.c:3601 info/session.c:3661
+msgid "Done."
+msgstr "Byakozwe."
+
+#: info/session.c:3534
+#, c-format
+msgid "Writing node %s..."
+msgstr ""
+
+#: info/session.c:3610
+#, fuzzy
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr "i Ibigize Bya iyi Gihinguranya"
+
+#: info/session.c:3645
+#, fuzzy, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "Gufungura Kuri"
+
+#: info/session.c:3651
+#, c-format
+msgid "Printing node %s..."
+msgstr ""
+
+#: info/session.c:3900
+msgid "Search continued from the end of the document."
+msgstr ""
+
+#: info/session.c:3905
+#, fuzzy
+msgid "Search continued from the beginning of the document."
+msgstr "Kuri i Itangiriro Bya i Umurongo"
+
+#: info/session.c:3922
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr ""
+
+#: info/session.c:3979
+#, fuzzy
+msgid "Read a string and search for it case-sensitively"
+msgstr "a Ikurikiranyanyuguti Na Gushaka kugirango"
+
+#: info/session.c:3986
+#, fuzzy
+msgid "Read a string and search for it"
+msgstr "a Ikurikiranyanyuguti Na Gushaka kugirango"
+
+#: info/session.c:3994
+#, fuzzy
+msgid "Read a string and search backward for it"
+msgstr "a Ikurikiranyanyuguti Na Gushaka subira inyuma kugirango"
+
+#: info/session.c:4030 info/session.c:4036
+#, fuzzy, c-format
+msgid "%s%s%s [%s]: "
+msgstr "%s%sforIkurikiranyanyuguti"
+
+#: info/session.c:4031 info/session.c:4037
+msgid "Regexp search"
+msgstr ""
+
+#: info/session.c:4032 info/session.c:4038
+msgid " case-sensitively"
+msgstr ""
+
+#: info/session.c:4033 info/session.c:4039
+#, fuzzy
+msgid " backward"
+msgstr "Gushaka usubira inyuma"
+
+#: info/session.c:4037
+msgid "Search"
+msgstr "Gushaka"
+
+#: info/session.c:4079
+#, fuzzy
+msgid "Search failed."
+msgstr "Byanze"
+
+#: info/session.c:4097
+#, fuzzy
+msgid "Repeat last search in the same direction"
+msgstr "Iheruka Gushaka in i Icyerekezo"
+
+#: info/session.c:4100 info/session.c:4110
+#, fuzzy
+msgid "No previous search string"
+msgstr "Ibanjirije Gushaka Ikurikiranyanyuguti"
+
+#: info/session.c:4107
+#, fuzzy
+msgid "Repeat last search in the reverse direction"
+msgstr "Iheruka Gushaka in i Ihindurakerekezo Icyerekezo"
+
+#: info/session.c:4126 info/session.c:4132
+#, fuzzy
+msgid "Search interactively for a string as you type it"
+msgstr "kugirango a Ikurikiranyanyuguti Nka Ubwoko"
+
+#: info/session.c:4212
+#, fuzzy
+msgid "Regexp I-search backward: "
+msgstr "Gushaka subira inyuma"
+
+#: info/session.c:4213
+#, fuzzy
+msgid "I-search backward: "
+msgstr "Gushaka subira inyuma"
+
+#: info/session.c:4215
+#, fuzzy
+msgid "Regexp I-search: "
+msgstr "Gushaka"
+
+#: info/session.c:4216
+#, fuzzy
+msgid "I-search: "
+msgstr "Gushaka"
+
+#: info/session.c:4241 info/session.c:4243
+msgid "Failing "
+msgstr ""
+
+#: info/session.c:4734
+#, fuzzy
+msgid "Move to the previous cross reference"
+msgstr "Kuri i Ibanjirije Kwambukiranya Indango"
+
+#: info/session.c:4752
+#, fuzzy
+msgid "Move to the next cross reference"
+msgstr "Kuri i Komeza>> Kwambukiranya Indango"
+
+#: info/session.c:4774
+#, fuzzy
+msgid "Select reference or menu item appearing on this line"
+msgstr "Indango Cyangwa Ibikubiyemo Ikintu ku iyi Umurongo"
+
+#: info/session.c:4797
+#, fuzzy
+msgid "Cancel current operation"
+msgstr "KIGEZWEHO"
+
+#: info/session.c:4804
+msgid "Quit"
+msgstr "Kuvamo"
+
+#: info/session.c:4813
+#, fuzzy
+msgid "Move the cursor to a specific line of the window"
+msgstr "i indanga Kuri a Umurongo Bya i Idirishya"
+
+#: info/session.c:4845
+#, fuzzy
+msgid "Redraw the display"
+msgstr "i Kugaragaza"
+
+#: info/session.c:4882
+#, fuzzy
+msgid "Quit using Info"
+msgstr "ikoresha"
+
+#: info/session.c:4895
+#, fuzzy
+msgid "Run command bound to this key's lowercase variant"
+msgstr "Komandi: Kuri iyi Inyuguti nto"
+
+#: info/session.c:4906
+#, fuzzy, c-format
+msgid "Unknown command (%s)."
+msgstr "Komandi:"
+
+#: info/session.c:4909
+#, fuzzy, c-format
+msgid "\"%s\" is invalid"
+msgstr "\"%s\"ni Sibyo"
+
+#: info/session.c:4910
+#, fuzzy, c-format
+msgid "`%s' is invalid"
+msgstr "`%s'ni Sibyo"
+
+#: info/session.c:5125
+#, fuzzy
+msgid "Add this digit to the current numeric argument"
+msgstr "iyi Kuri i KIGEZWEHO Bikurikije umubare"
+
+#: info/session.c:5134
+#, fuzzy
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "Gutangira Cyangwa Gukuba ku 4. i KIGEZWEHO Bikurikije umubare"
+
+#: info/session.c:5149
+#, fuzzy
+msgid "Internally used by \\[universal-argument]"
+msgstr "ku Ky'isi yose"
+
+#: info/tilde.c:336
+#, fuzzy, c-format
+msgid "readline: Out of virtual memory!\n"
+msgstr "Bya Kitaboneka Ububiko"
+
+#: info/variables.c:37
+#, fuzzy
+msgid "When \"On\", footnotes appear and disappear automatically"
+msgstr "Ubusobanuro mpezarupapuro Kugaragara Na Kubura ku buryo bwikora"
+
+#: info/variables.c:41
+#, fuzzy
+msgid "When \"On\", creating or deleting a window resizes other windows"
+msgstr "Cyangwa a Idirishya Ikindi"
+
+#: info/variables.c:45
+#, fuzzy
+msgid "When \"On\", flash the screen instead of ringing the bell"
+msgstr "Umurabyo i Mugaragaza Bya i"
+
+#: info/variables.c:49
+#, fuzzy
+msgid "When \"On\", errors cause the bell to ring"
+msgstr "Amakosa i Kuri Kuvuza Inzogera"
+
+#: info/variables.c:53
+#, fuzzy
+msgid "When \"On\", Info garbage collects files which had to be uncompressed"
+msgstr "Idosiye Kuri"
+
+#: info/variables.c:56
+#, fuzzy
+msgid "When \"On\", the portion of the matched search string is highlighted"
+msgstr "i Bya i Gushaka Ikurikiranyanyuguti ni"
+
+#: info/variables.c:60
+#, fuzzy
+msgid "Controls what happens when scrolling is requested at the end of a node"
+msgstr "Ryari: ni ku i Impera Bya a"
+
+#: info/variables.c:65
+msgid "Same as scroll-behaviour"
+msgstr ""
+
+#: info/variables.c:69
+#, fuzzy
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr "Umubare Imirongo Kuri Ryari: i indanga Inyuma Bya i Idirishya"
+
+#: info/variables.c:73
+msgid "Controls whether scroll-behavior affects cursor movement commands"
+msgstr ""
+
+#: info/variables.c:77
+#, fuzzy
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr "Na Inyuguti"
+
+#: info/variables.c:81
+#, fuzzy
+msgid ""
+"What to do when a scrolling command is issued at the end of the last node"
+msgstr "Ryari: ni ku i Impera Bya a"
+
+#: info/variables.c:88
+#, fuzzy
+msgid "Explain the use of a variable"
+msgstr "i Gukoresha Bya a IMPINDURAGACIRO"
+
+#: info/variables.c:94
+#, fuzzy
+msgid "Describe variable: "
+msgstr "IMPINDURAGACIRO"
+
+#: info/variables.c:113
+#, fuzzy
+msgid "Set the value of an Info variable"
+msgstr "i Agaciro Bya IMPINDURAGACIRO"
+
+# sw/source\ui\fldui\fldui.src:STR_SETFLD.text
+#: info/variables.c:119
+#, fuzzy
+msgid "Set variable: "
+msgstr "Gushyiraho igihinduka"
+
+#: info/variables.c:137
+#, fuzzy, c-format
+msgid "Set %s to value (%d): "
+msgstr "Kuri Agaciro"
+
+#: info/variables.c:178
+#, fuzzy, c-format
+msgid "Set %s to value (%s): "
+msgstr "Kuri Agaciro"
+
+#: info/window.c:1026
+#, fuzzy
+msgid "--*** Tags out of Date ***"
+msgstr "--***Inyuma Bya"
+
+#: info/window.c:1037
+#, fuzzy
+msgid "-----Info: (), lines ----, "
+msgstr "-----Imirongo"
+
+#: info/window.c:1044
+#, fuzzy, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info:%s,%dImirongo"
+
+#: info/window.c:1048
+#, fuzzy, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info:(%s)%s,%dImirongo"
+
+#: info/window.c:1055
+#, c-format
+msgid " Subfile: %s"
+msgstr ""
+
+#: install-info/install-info.c:221
+#, fuzzy, c-format
+msgid "%s: warning: "
+msgstr "%s:Iburira"
+
+#: install-info/install-info.c:270
+#, fuzzy, c-format
+msgid " for %s"
+msgstr "ya:"
+
+#: install-info/install-info.c:500
+#, fuzzy, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr "kugirango a Byuzuye Urutonde Bya Amahitamo"
+
+#: install-info/install-info.c:508
+#, c-format
+msgid "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+msgstr ""
+
+#: install-info/install-info.c:510
+msgid "Add or remove entries in INFO-FILE from the Info directory DIR-FILE."
+msgstr ""
+
+#: install-info/install-info.c:513
+msgid ""
+"Options:\n"
+" --debug report what is being done.\n"
+" --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+" don't insert any new entries.\n"
+" --description=TEXT the description of the entry is TEXT; used with\n"
+" the --name option to become synonymous with the\n"
+" --entry option.\n"
+" --dir-file=NAME specify file name of Info directory file;\n"
+" equivalent to using the DIR-FILE argument.\n"
+" --dry-run same as --test."
+msgstr ""
+
+#: install-info/install-info.c:525
+msgid ""
+" --entry=TEXT insert TEXT as an Info directory entry.\n"
+" TEXT is written as an Info menu item line followed\n"
+" by zero or more extra lines starting with "
+"whitespace.\n"
+" If you specify more than one entry, all are added.\n"
+" If you don't specify any entries, they are determined\n"
+" from information in the Info file itself.\n"
+" When removing, TEXT specifies the entry to remove.\n"
+" TEXT is only removed as a last resort, if the\n"
+" entry as determined from the Info file is not "
+"present,\n"
+" and the basename of the Info file isn't found either."
+msgstr ""
+
+#: install-info/install-info.c:537
+msgid ""
+" --help display this help and exit.\n"
+" --info-dir=DIR same as --dir-file=DIR/dir.\n"
+" --info-file=FILE specify Info file to install in the directory;\n"
+" equivalent to using the INFO-FILE argument.\n"
+" --item=TEXT same as --entry=TEXT.\n"
+" --keep-old do not replace entries, or remove empty sections.\n"
+" --menuentry=TEXT same as --name=TEXT.\n"
+" --name=TEXT the name of the entry is TEXT; used with --description\n"
+" to become synonymous with the --entry option.\n"
+" --no-indent do not format new entries in the DIR file.\n"
+" --quiet suppress warnings."
+msgstr ""
+
+#: install-info/install-info.c:550
+msgid ""
+" --regex=R put this file's entries in all sections that match the\n"
+" regular expression R (ignoring case).\n"
+" --remove same as --delete.\n"
+" --remove-exactly only remove if the info file name matches exactly;\n"
+" suffixes such as .info and .gz are not ignored.\n"
+" --section=SEC put entries in section SEC of the directory.\n"
+" If you specify more than one section, all the entries\n"
+" are added in each of the sections.\n"
+" If you don't specify any sections, they are "
+"determined\n"
+" from information in the Info file itself.\n"
+" --section R SEC equivalent to --regex=R --section=SEC --add-once."
+msgstr ""
+
+#: install-info/install-info.c:563
+msgid ""
+" --silent suppress warnings.\n"
+" --test suppress updating of DIR-FILE.\n"
+" --version display version information and exit."
+msgstr ""
+
+#: install-info/install-info.c:570
+#, fuzzy
+msgid ""
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr "org."
+
+#: install-info/install-info.c:597
+#, fuzzy, c-format
+msgid ""
+"This is the file .../info/dir, which contains the\n"
+"topmost node of the Info hierarchy, called (dir)Top.\n"
+"The first time you invoke Info you start off looking at this node.\n"
+"\n"
+"%s\tThis is the top of the INFO tree\n"
+"\n"
+" This (the Directory node) gives a menu of major topics.\n"
+" Typing \"q\" exits, \"?\" lists all Info commands, \"d\" returns here,\n"
+" \"h\" gives a primer for first-timers,\n"
+" \"mEmacs<Return>\" visits the Emacs manual, etc.\n"
+"\n"
+" In Emacs, you can click mouse button 2 on a menu item or cross reference\n"
+" to select it.\n"
+"\n"
+"%s\n"
+msgstr ""
+"ni i IDOSIYE Ibisobanuro Kirimo Bya i Itangira Igihe Gutangira Bidakora ku "
+"iyi ni i Hejuru: Bya i i a Ibikubiyemo Bya Q Intonde Byose Amabwiriza D h a "
+"kugirango Itangira i Bikorwa Kanda Imbeba Akabuto 2. ku a Ibikubiyemo Ikintu "
+"Cyangwa Kwambukiranya Kuri Guhitamo"
+
+#: install-info/install-info.c:622
+#, fuzzy, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr "%s:OYA Gusoma Na OYA Kurema"
+
+#: install-info/install-info.c:715
+#, fuzzy, c-format
+msgid "%s: empty file"
+msgstr "%s:ubusa IDOSIYE"
+
+#: install-info/install-info.c:1046 install-info/install-info.c:1086
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr ""
+
+#: install-info/install-info.c:1081
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr ""
+
+#: install-info/install-info.c:1946 install-info/install-info.c:1956
+#, fuzzy, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr "%s:IDOSIYE"
+
+#: install-info/install-info.c:2036
+#, fuzzy, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s:i IDOSIYE Rimwe"
+
+#: install-info/install-info.c:2069
+#, c-format
+msgid "Extra regular expression specified, ignoring `%s'"
+msgstr ""
+
+#: install-info/install-info.c:2081
+#, c-format
+msgid "Error in regular expression `%s': %s"
+msgstr ""
+
+#: install-info/install-info.c:2139
+#, fuzzy, c-format
+msgid "excess command line argument `%s'"
+msgstr "Komandi: Umurongo"
+
+#: install-info/install-info.c:2143
+#, fuzzy
+msgid "No input file specified; try --help for more information."
+msgstr "Iyinjiza IDOSIYE Ifashayobora kugirango Birenzeho Ibisobanuro"
+
+#: install-info/install-info.c:2146
+#, fuzzy
+msgid "No dir file specified; try --help for more information."
+msgstr "IDOSIYE Ifashayobora kugirango Birenzeho Ibisobanuro"
+
+#: install-info/install-info.c:2288
+#, fuzzy, c-format
+msgid "no info dir entry in `%s'"
+msgstr "Oya Ibisobanuro Icyinjijwe in"
+
+#: install-info/install-info.c:2536
+#, fuzzy, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "Oya Ibyinjijwe Byabonetse kugirango Cyasibwe"
+
+#: lib/xexit.c:54
+msgid "ferror on stdout\n"
+msgstr ""
+
+#: lib/xexit.c:59
+msgid "fflush error on stdout\n"
+msgstr ""
+
+#: makeinfo/cmds.c:582 makeinfo/cmds.c:604
+#, fuzzy, c-format
+msgid "arguments to @%s ignored"
+msgstr "ingingo Kuri"
+
+#: makeinfo/cmds.c:779
+msgid "January"
+msgstr "Mutarama"
+
+#: makeinfo/cmds.c:779
+msgid "February"
+msgstr "Gashyantare"
+
+#: makeinfo/cmds.c:779
+msgid "March"
+msgstr "Werurwe"
+
+#: makeinfo/cmds.c:779
+msgid "April"
+msgstr "Mata"
+
+#: makeinfo/cmds.c:779
+msgid "May"
+msgstr "Gicurasi"
+
+#: makeinfo/cmds.c:780
+msgid "June"
+msgstr "Kamena"
+
+#: makeinfo/cmds.c:780
+msgid "July"
+msgstr "Nyakanga"
+
+#: makeinfo/cmds.c:780
+msgid "August"
+msgstr "Kanama"
+
+#: makeinfo/cmds.c:780
+msgid "September"
+msgstr "Nzeri"
+
+#: makeinfo/cmds.c:780
+msgid "October"
+msgstr "Ukwakira"
+
+#: makeinfo/cmds.c:781
+msgid "November"
+msgstr "Ugushyingo"
+
+#: makeinfo/cmds.c:781
+msgid "December"
+msgstr "Ukuboza"
+
+#: makeinfo/cmds.c:1131
+#, fuzzy, c-format
+msgid "unlikely character %c in @var"
+msgstr "Inyuguti in VAR"
+
+#: makeinfo/cmds.c:1174
+#, fuzzy
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "@Byose Inyuguti nkuru Oya INGARUKA"
+
+#: makeinfo/cmds.c:1229
+#, fuzzy, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "`{'Ikitezwe:"
+
+#: makeinfo/cmds.c:1269
+#, fuzzy
+msgid "end of file inside verb block"
+msgstr "Impera Bya IDOSIYE Mo Imbere Ishinga Funga"
+
+#: makeinfo/cmds.c:1277
+#, fuzzy, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "`}'Ikitezwe:"
+
+#: makeinfo/cmds.c:1308
+#, fuzzy
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr "@a Kwambukiranya Indango in Kuri"
+
+#: makeinfo/cmds.c:1504
+#, fuzzy, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%sni"
+
+#: makeinfo/cmds.c:1612
+#, fuzzy, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "@SP a Bikurikije umubare OYA"
+
+#: makeinfo/cmds.c:2023 makeinfo/footnote.c:81
+#, fuzzy, c-format
+msgid "Bad argument to %c%s"
+msgstr "Kuri"
+
+#: makeinfo/cmds.c:2033 makeinfo/makeinfo.c:4317
+msgid "asis"
+msgstr ""
+
+#: makeinfo/cmds.c:2035 makeinfo/cmds.c:2065 makeinfo/makeinfo.c:4319
+msgid "none"
+msgstr "ntacyo"
+
+#: makeinfo/cmds.c:2049
+#, fuzzy, c-format
+msgid "Bad argument to @%s"
+msgstr "Kuri"
+
+# basctl/source\basicide\basidesh.src:RID_POPUP_TABBAR.RID_INSERT.text
+#: makeinfo/cmds.c:2063
+#, fuzzy
+msgid "insert"
+msgstr "Kongeramo"
+
+#: makeinfo/cmds.c:2079
+#, fuzzy, c-format
+msgid "Bad argument to @%s: %s"
+msgstr "Kuri"
+
+#: makeinfo/cmds.c:2162
+#, c-format
+msgid "Expected @%s on or off, not `%s'"
+msgstr ""
+
+#: makeinfo/cmds.c:2182
+#, c-format
+msgid "Only @%s 10 or 11 is supported, not `%s'"
+msgstr ""
+
+#: makeinfo/defun.c:83
+#, fuzzy
+msgid "Missing `}' in @def arg"
+msgstr "in"
+
+#: makeinfo/defun.c:711
+#, fuzzy, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr "in Kuri Gukoresha"
+
+#: makeinfo/files.c:434
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr ""
+
+#: makeinfo/files.c:637
+#, fuzzy, c-format
+msgid "`%s' omitted before output filename"
+msgstr "`%s'Mbere Ibisohoka Izina ry'idosiye:"
+
+#: makeinfo/files.c:645
+#, fuzzy, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr "`%s'guhera Kuri"
+
+#: makeinfo/files.c:693
+#, fuzzy
+msgid "Output buffer not empty."
+msgstr "OYA ubusa"
+
+#: makeinfo/float.c:181
+#, c-format
+msgid "Requested float type `%s' not previously used"
+msgstr ""
+
+#: makeinfo/float.c:376 makeinfo/float.c:382 makeinfo/index.c:959
+#: makeinfo/index.c:965
+msgid "See "
+msgstr ""
+
+#: makeinfo/footnote.c:149
+#, fuzzy, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "`%c%s'OYA"
+
+#: makeinfo/footnote.c:164
+#, fuzzy, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "kugirango Ubusobanuro mpezarupapuro"
+
+#: makeinfo/footnote.c:197
+msgid "Footnote defined without parent node"
+msgstr ""
+
+#: makeinfo/footnote.c:209
+#, fuzzy
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "Mo Imbere Ubusobanuro mpezarupapuro OYA"
+
+#: makeinfo/footnote.c:301 makeinfo/index.c:187
+msgid "Footnotes"
+msgstr "Ubusobanuro mpezarupapuro"
+
+#: makeinfo/html.c:91
+#, fuzzy, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr "%s:OYA Gufungura IDOSIYE"
+
+#: makeinfo/html.c:180
+#, fuzzy, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr "%s:%d:--IDOSIYE in Icyo wongeraho"
+
+#: makeinfo/html.c:426
+#, fuzzy
+msgid "[unexpected] no html tag to pop"
+msgstr "[Oya HTML Itagi: Kuri"
+
+#: makeinfo/html.c:800
+#, fuzzy, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "[Sibyo Izina:"
+
+#: makeinfo/index.c:167
+#, fuzzy, c-format
+msgid "Unknown index `%s'"
+msgstr "Umubarendanga"
+
+#: makeinfo/index.c:232
+#, fuzzy, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr "in Umubarendanga Icyinjijwe"
+
+#: makeinfo/index.c:410
+#, c-format
+msgid "Index `%s' already exists"
+msgstr ""
+
+#: makeinfo/index.c:453
+#, fuzzy, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "Umubarendanga Na Cyangwa in"
+
+#: makeinfo/index.c:676
+#, fuzzy
+msgid "(line )"
+msgstr "(Umurongo"
+
+#: makeinfo/index.c:684
+#, fuzzy, c-format
+msgid "(line %*d)"
+msgstr "(Umurongo"
+
+#: makeinfo/index.c:765
+#, fuzzy, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "Umubarendanga in"
+
+#: makeinfo/index.c:834
+#, fuzzy, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "kugirango Umubarendanga Hanze Bya"
+
+#: makeinfo/index.c:837 makeinfo/index.c:873
+#, fuzzy
+msgid "(outside of any node)"
+msgstr "(Hanze Bya"
+
+#: makeinfo/insertion.c:161
+#, fuzzy
+msgid "@item not allowed in argument to @itemize"
+msgstr "@Ikintu OYA in Kuri"
+
+#: makeinfo/insertion.c:242
+#, fuzzy
+msgid "Broken-Type in insertion_type_pname"
+msgstr "in"
+
+#: makeinfo/insertion.c:338
+#, fuzzy
+msgid "Enumeration stack overflow"
+msgstr "Byarenze urugero"
+
+#: makeinfo/insertion.c:370
+#, fuzzy, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "Byarenze urugero ku"
+
+#: makeinfo/insertion.c:639
+#, fuzzy, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%si kugirango"
+
+#: makeinfo/insertion.c:727
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr ""
+
+#: makeinfo/insertion.c:981
+#, fuzzy, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "`@Ikitezwe:"
+
+#: makeinfo/insertion.c:1349
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr ""
+
+#: makeinfo/insertion.c:1618
+#, fuzzy, c-format
+msgid "%s requires letter or digit"
+msgstr "%sIbaruwa... Cyangwa"
+
+#: makeinfo/insertion.c:1718
+#, fuzzy
+msgid "end of file inside verbatim block"
+msgstr "Impera Bya IDOSIYE Mo Imbere Funga"
+
+#: makeinfo/insertion.c:1942
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "@%sOYA Hanze"
+
+#: makeinfo/insertion.c:1978
+#, fuzzy
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "@Ibikubiyemo Mbere Itangira"
+
+#: makeinfo/insertion.c:1979
+#, fuzzy
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr "Hejuru: in"
+
+#: makeinfo/insertion.c:1991
+#, fuzzy
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "@Mbere Itangira"
+
+#: makeinfo/insertion.c:2047
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr "@%sOYA Hanze Na"
+
+#: makeinfo/insertion.c:2061
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "@%sOYA Hanze"
+
+#: makeinfo/insertion.c:2092
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr ""
+
+#: makeinfo/insertion.c:2097
+#, fuzzy, c-format
+msgid "`%c%s' needs something after it"
+msgstr "`%c%s'Nyuma"
+
+#: makeinfo/insertion.c:2103
+#, fuzzy, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "Kuri ikoresha"
+
+#: makeinfo/insertion.c:2200
+#, fuzzy, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "@%sOYA Mo Imbere Funga"
+
+#: makeinfo/insertion.c:2209
+#, fuzzy, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "@OYA Mo Imbere Funga"
+
+#: makeinfo/insertion.c:2383
+#, fuzzy, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "%c%sByabonetse Hanze Bya Iyinjizamo Funga"
+
+#: makeinfo/lang.c:1218
+#, c-format
+msgid "no default territory known for language `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:1281
+#, fuzzy, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr "%sni OYA a Byemewe Ururimi ITEGEKONGENGA"
+
+#: makeinfo/lang.c:1399
+#, fuzzy, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "Imisobekere: Izina:"
+
+#: makeinfo/lang.c:1407
+#, fuzzy, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "Imisobekere: OYA"
+
+#: makeinfo/lang.c:1492
+#, fuzzy, c-format
+msgid "invalid encoded character `%s'"
+msgstr "Sibyo Inyuguti"
+
+#: makeinfo/lang.c:1800
+#, fuzzy, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr "%c%sCyangwa Nka OYA"
+
+#: makeinfo/lang.c:1804
+#, fuzzy, c-format
+msgid "%c%s expects a single character `i' or `j' as argument"
+msgstr "%c%sa UMWE Inyuguti Cyangwa Nka"
+
+#: makeinfo/macro.c:128
+#, fuzzy, c-format
+msgid "macro `%s' previously defined"
+msgstr "Makoro"
+
+#: makeinfo/macro.c:132
+#, fuzzy, c-format
+msgid "here is the previous definition of `%s'"
+msgstr "ni i Ibanjirije Insobanuro Bya"
+
+#: makeinfo/macro.c:359
+#, fuzzy, c-format
+msgid "\\ in macro expansion followed by `%s' instead of parameter name"
+msgstr "\\ in Makoro ku Bya Izina:"
+
+#: makeinfo/macro.c:401
+#, fuzzy, c-format
+msgid "Macro `%s' called on line %d with too many args"
+msgstr "ku Umurongo Na:"
+
+#: makeinfo/macro.c:580
+#, fuzzy, c-format
+msgid "%cend macro not found"
+msgstr "%cendMakoro OYA Byabonetse"
+
+#: makeinfo/macro.c:591
+msgid "@allow-recursion is deprecated; please use @rmacro instead"
+msgstr ""
+
+#: makeinfo/macro.c:606
+msgid "@quote-arg is deprecated; arguments are quoted by default"
+msgstr ""
+
+#: makeinfo/macro.c:649
+#, fuzzy, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "Impera Na:"
+
+#: makeinfo/makeinfo.c:188
+#, fuzzy, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "Amakosa Hejuru"
+
+#: makeinfo/makeinfo.c:306
+#, fuzzy, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d:Iburira"
+
+#: makeinfo/makeinfo.c:325 makeinfo/makeinfo.c:2340
+#, c-format
+msgid "Misplaced %c"
+msgstr ""
+
+#: makeinfo/makeinfo.c:344
+#, fuzzy, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "kugirango Birenzeho Ibisobanuro"
+
+#: makeinfo/makeinfo.c:347
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:350
+#, fuzzy
+msgid ""
+"Translate Texinfo source documentation to various other formats, by default\n"
+"Info files suitable for reading online with Emacs or standalone GNU Info.\n"
+msgstr ""
+"Inkomoko Kuri Ikindi Imiterere ku Idosiye kugirango kiri kuri interineti Na: "
+"Cyangwa"
+
+#: makeinfo/makeinfo.c:354
+#, fuzzy, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\n"
+" --document-language=STR locale to use in translating Texinfo keywords\n"
+" for the output document (default C).\n"
+" --force preserve output even if errors.\n"
+" --help display this help and exit.\n"
+" --no-validate suppress node cross-reference validation.\n"
+" --no-warn suppress warnings (but not errors).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"Amahitamo Ikosa Kuvamo Nyuma Amakosa Mburabuzi Ibisohoka ATARIIGIHARWE NIBA "
+"Amakosa Ifashayobora Kugaragaza iyi Ifashayobora Na Gusohoka Oya Kwemeza "
+"Kwambukiranya Indango Kwemeza Oya Iburira OYA Amakosa Indango Ibyerekeye ku "
+"Indango Mburabuzi v ni Byakozwe Verisiyo Kugaragaza Verisiyo Ibisobanuro Na "
+"Gusohoka"
+
+#: makeinfo/makeinfo.c:369
+#, fuzzy, no-wrap
+msgid ""
+"Output format selection (default is to produce Info):\n"
+" --docbook output Docbook XML rather than Info.\n"
+" --html output HTML rather than Info.\n"
+" --xml output Texinfo XML rather than Info.\n"
+" --plaintext output plain text rather than Info.\n"
+msgstr "Imiterere Ihitamo Mburabuzi ni Kuri InyandikoGitabo Ibisohoka HTML Ibisohoka xml Ibisohoka Ibisohoka Byuzuye Umwandiko"
+
+#: makeinfo/makeinfo.c:377
+#, fuzzy
+msgid ""
+"General output options:\n"
+" -E, --macro-expand=FILE output macro-expanded source to FILE,\n"
+" ignoring any @setfilename.\n"
+" --no-headers suppress node separators, Node: lines, and "
+"menus\n"
+" from Info output (thus producing plain "
+"text)\n"
+" or from HTML (thus producing shorter "
+"output);\n"
+" also, write to standard output by default.\n"
+" --no-split suppress the splitting of Info or HTML "
+"output,\n"
+" generate only one output file.\n"
+" --number-sections output chapter and sectioning numbers.\n"
+" -o, --output=FILE output to FILE (or directory if split HTML).\n"
+msgstr ""
+"Ibisohoka Amahitamo E Makoro Kwagura Ibisohoka Makoro Cyagutse Inkomoko Kuri "
+"Oya Imitwe Imirongo Na Bivuye Ibisohoka Byuzuye Umwandiko Cyangwa Bivuye "
+"Ibisohoka Kwandika Kuri Bisanzwe Ibisohoka ku Mburabuzi Oya Gutandukanya Bya "
+"Cyangwa Ibisohoka Ibisohoka IDOSIYE Umubare Ibyatoranyijwe Ibisohoka Umutwe "
+"Na Imibare o Ibisohoka Ibisohoka Kuri bushyinguro NIBA Gutandukanya"
+
+#: makeinfo/makeinfo.c:391
+#, fuzzy, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --disable-encoding do not output accented and special characters\n"
+" in Info output based on @documentencoding.\n"
+" --enable-encoding override --disable-encoding (default).\n"
+" --fill-column=NUM break Info lines at NUM characters (default %"
+"d).\n"
+" --footnote-style=STYLE output footnotes in Info according to STYLE:\n"
+" `separate' to put them in their own node;\n"
+" `end' to put them at the end of the node, "
+"in\n"
+" which they are defined (this is the "
+"default).\n"
+" --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %"
+"d).\n"
+" If VAL is `none', do not indent; if VAL is\n"
+" `asis', preserve existing indentation.\n"
+" --split-size=NUM split Info files at size NUM (default %d).\n"
+msgstr ""
+"kugirango Na Byuzuye Umwandiko Gushoboza Imisobekere: Ibisohoka Na "
+"Bidasanzwe Inyuguti Ibisohoka ku Kuzuza Inkingi itandukanya Imirongo ku "
+"Inyuguti Mburabuzi Ubusobanuro mpezarupapuro IMISUSIRE Ibisohoka Ubusobanuro "
+"mpezarupapuro in Kuri Kuri Gushyira in Kuri Gushyira ku i Impera Bya i in "
+"Mburabuzi Igika Ikurura Ikurura Ibika ku Imyanya Mburabuzi ni OYA Ikurura "
+"NIBA Gutandukanya Ingano Gutandukanya Idosiye ku Ingano Mburabuzi"
+
+#: makeinfo/makeinfo.c:409
+#, fuzzy
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+" --css-ref=URL generate reference to a CSS file.\n"
+" --internal-links=FILE produce list of internal links in FILE.\n"
+" --transliterate-file-names\n"
+" produce file names in ASCII transliteration.\n"
+msgstr "kugirango Gushyiramo Gushyiramo in IMISUSIRE Ibisohoka Gusoma NIBA ni"
+
+#: makeinfo/makeinfo.c:419
+#, fuzzy, c-format
+msgid ""
+"Options for XML and Docbook:\n"
+" --output-indent=VAL indent XML elements by VAL spaces (default %"
+"d).\n"
+" If VAL is 0, ignorable whitespace is "
+"dropped.\n"
+msgstr ""
+"kugirango Na Ibisohoka Ikurura Ikurura Ibintu ku Imyanya Mburabuzi ni 0 ni"
+
+#: makeinfo/makeinfo.c:426
+#, fuzzy
+msgid ""
+"Input file options:\n"
+" --commands-in-node-names allow @ commands in node names.\n"
+" -D VAR define the variable VAR, as with @set.\n"
+" -I DIR append DIR to the @include search path.\n"
+" -P DIR prepend DIR to the @include search path.\n"
+" -U VAR undefine the variable VAR, as with @clear.\n"
+msgstr ""
+"IDOSIYE Amahitamo Amabwiriza in Amazina Kwemerera Amabwiriza in Amazina "
+"Kugaragaza... i IMPINDURAGACIRO Nka Na: Gushyiraho Kongeraho... Kuri i "
+"Gushyiramo Gushaka Inzira Kuri i Gushyiramo Gushaka Inzira U i "
+"IMPINDURAGACIRO Nka Na: Gusiba"
+
+#: makeinfo/makeinfo.c:435
+#, fuzzy
+msgid ""
+"Conditional processing in input:\n"
+" --ifdocbook process @ifdocbook and @docbook even if\n"
+" not generating Docbook.\n"
+" --ifhtml process @ifhtml and @html even if not generating HTML.\n"
+" --ifinfo process @ifinfo even if not generating Info.\n"
+" --ifplaintext process @ifplaintext even if not generating plain text.\n"
+" --iftex process @iftex and @tex; implies --no-split.\n"
+" --ifxml process @ifxml and @xml.\n"
+" --no-ifdocbook do not process @ifdocbook and @docbook text.\n"
+" --no-ifhtml do not process @ifhtml and @html text.\n"
+" --no-ifinfo do not process @ifinfo text.\n"
+" --no-ifplaintext do not process @ifplaintext text.\n"
+" --no-iftex do not process @iftex and @tex text.\n"
+" --no-ifxml do not process @ifxml and @xml text.\n"
+"\n"
+" Also, for the --no-ifFORMAT options, do process @ifnotFORMAT text.\n"
+msgstr ""
+"Inonosora in Iyinjiza Na InyandikoGitabo ATARIIGIHARWE OYA Na HTML "
+"ATARIIGIHARWE NIBA OYA ATARIIGIHARWE NIBA OYA ATARIIGIHARWE NIBA OYA Byuzuye "
+"Umwandiko Na Oya Gutandukanya Na xml Oya OYA Na InyandikoGitabo Umwandiko "
+"Oya OYA Na HTML Umwandiko Oya OYA Umwandiko Oya OYA Umwandiko Oya OYA Na "
+"Umwandiko Oya OYA Na xml Umwandiko kugirango i Oya Amahitamo Umwandiko"
+
+#: makeinfo/makeinfo.c:454
+#, fuzzy
+msgid ""
+" The defaults for the @if... conditionals depend on the output format:\n"
+" if generating HTML, --ifhtml is on and the others are off;\n"
+" if generating Info, --ifinfo is on and the others are off;\n"
+" if generating plain text, --ifplaintext is on and the others are off;\n"
+" if generating XML, --ifxml is on and the others are off.\n"
+msgstr ""
+"kugirango i NIBA ku i Ibisohoka Imiterere NIBA ni ku Na i Ibindi Bidakora "
+"NIBA ni ku Na i Ibindi Bidakora NIBA Byuzuye Umwandiko ni ku Na i Ibindi "
+"Bidakora NIBA ni ku Na i Ibindi Bidakora"
+
+#: makeinfo/makeinfo.c:462
+#, fuzzy
+msgid ""
+"Examples:\n"
+" makeinfo foo.texi write Info to foo's @setfilename\n"
+" makeinfo --html foo.texi write HTML to @setfilename\n"
+" makeinfo --xml foo.texi write Texinfo XML to @setfilename\n"
+" makeinfo --docbook foo.texi write DocBook XML to @setfilename\n"
+" makeinfo --no-headers foo.texi write plain text to standard "
+"output\n"
+"\n"
+" makeinfo --html --no-headers foo.texi write html without node lines, "
+"menus\n"
+" makeinfo --number-sections foo.texi write Info with numbered sections\n"
+" makeinfo --no-split foo.texi write one Info file however big\n"
+msgstr ""
+"Kwandika Kuri HTML Kwandika Kuri xml Kwandika Kuri InyandikoGitabo Kwandika "
+"Kuri Oya Imitwe Kwandika Byuzuye Umwandiko Kuri Bisanzwe HTML Oya Imitwe "
+"Kwandika HTML Imirongo Umubare Ibyatoranyijwe Kwandika Na: Iriho Imibare Oya "
+"Gutandukanya Kwandika IDOSIYE"
+
+#: makeinfo/makeinfo.c:622
+#, fuzzy, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr "%s:Kwirengagiza Agaciro"
+
+#: makeinfo/makeinfo.c:670 makeinfo/makeinfo.c:696 makeinfo/makeinfo.c:720
+#: makeinfo/makeinfo.c:780
+#, fuzzy, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr "%s:%sBikurikije umubare OYA"
+
+#: makeinfo/makeinfo.c:683
+#, fuzzy, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "%s:OYA Gufungura Makoro Ibisohoka"
+
+#: makeinfo/makeinfo.c:688
+#, fuzzy, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "%s:ISEGONDA Makoro Ibisohoka"
+
+#: makeinfo/makeinfo.c:733
+#, fuzzy, c-format
+msgid "%s: could not open internal links output `%s'"
+msgstr "%s:OYA Gufungura Makoro Ibisohoka"
+
+#: makeinfo/makeinfo.c:738
+#, fuzzy, c-format
+msgid "%s: ignoring second internal links output `%s'.\n"
+msgstr "%s:ISEGONDA Makoro Ibisohoka"
+
+#: makeinfo/makeinfo.c:751
+#, fuzzy, c-format
+msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
+msgstr "%s:--Igika Ikurura Bikurikije umubare OYA"
+
+#: makeinfo/makeinfo.c:769
+#, fuzzy, c-format
+msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
+msgstr "%s:--Ubusobanuro mpezarupapuro IMISUSIRE Cyangwa OYA"
+
+#: makeinfo/makeinfo.c:844
+#, fuzzy, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s:Ibuze IDOSIYE"
+
+#: makeinfo/makeinfo.c:1041 makeinfo/makeinfo.c:4166
+#, fuzzy, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr "Komandi:"
+
+#: makeinfo/makeinfo.c:1044
+#, fuzzy, c-format
+msgid "Expected `%s'"
+msgstr "Ikitezwe:"
+
+#: makeinfo/makeinfo.c:1521
+#, fuzzy, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "Kurema bushyinguro"
+
+#: makeinfo/makeinfo.c:1567
+#, fuzzy, c-format
+msgid "No `%s' found in `%s'"
+msgstr "Byabonetse in"
+
+#: makeinfo/makeinfo.c:1647
+#, fuzzy, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr "%s:Makoro Kuri Nka Ibisohoka ni"
+
+#: makeinfo/makeinfo.c:1677
+#, fuzzy, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "IDOSIYE Bivuye"
+
+#: makeinfo/makeinfo.c:1744
+#, fuzzy, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr "%s:Makoro Ibisohoka IDOSIYE Kuri Amakosa Gukoresha Kuri"
+
+#: makeinfo/makeinfo.c:1799
+#, fuzzy, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr "%s:Ibisohoka IDOSIYE Kuri Amakosa Gukoresha Kuri"
+
+#: makeinfo/makeinfo.c:1818
+#, fuzzy, c-format
+msgid ""
+"%s: Removing internal links output file `%s' due to errors; use --force to "
+"preserve.\n"
+msgstr "%s:Ibisohoka IDOSIYE Kuri Amakosa Gukoresha Kuri"
+
+#: makeinfo/makeinfo.c:2113
+#, fuzzy, c-format
+msgid "Unknown command `%s'"
+msgstr "Komandi:"
+
+#: makeinfo/makeinfo.c:2135
+#, fuzzy, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr "Ingirwadusodeko Kuri a Komandi: Nka Kuri"
+
+#: makeinfo/makeinfo.c:2394
+#, fuzzy, c-format
+msgid "%c%s expected braces"
+msgstr "%c%sIkitezwe: Ingirwadusodeko"
+
+#: makeinfo/makeinfo.c:2407
+msgid "Unmatched }"
+msgstr ""
+
+# 4203
+#: makeinfo/makeinfo.c:2455
+#, fuzzy
+msgid "NO_NAME!"
+msgstr "nta zina"
+
+#: makeinfo/makeinfo.c:2476
+#, fuzzy, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%sIbuze Gufunga"
+
+#: makeinfo/makeinfo.c:3482
+#, fuzzy, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "@Ishusho IDOSIYE kugirango OYA"
+
+#: makeinfo/makeinfo.c:3488
+#, fuzzy, c-format
+msgid "No such file `%s'"
+msgstr "IDOSIYE"
+
+#: makeinfo/makeinfo.c:3624
+#, fuzzy, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "@Ishusho IDOSIYE kugirango Umwandiko"
+
+#: makeinfo/makeinfo.c:3633
+#, fuzzy
+msgid "@image missing filename argument"
+msgstr "@Ishusho Ibuze Izina ry'idosiye:"
+
+#: makeinfo/makeinfo.c:3851
+#, fuzzy, c-format
+msgid "undefined flag: %s"
+msgstr "kidasobanuye Ibendera"
+
+#: makeinfo/makeinfo.c:3852
+#, fuzzy, c-format
+msgid "{No value for `%s'}"
+msgstr "{Agaciro kugirango"
+
+#: makeinfo/makeinfo.c:3904
+#, fuzzy, c-format
+msgid "%c%s requires a name"
+msgstr "%c%sa Izina:"
+
+#: makeinfo/makeinfo.c:4010
+#, fuzzy, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "Mbere Impera"
+
+#: makeinfo/makeinfo.c:4258
+#, fuzzy, c-format
+msgid "`%.40s...' is too long for expansion; not expanded"
+msgstr ""
+"`%.Project- Id- Version: basctl\n"
+"POT- Creation- Date: 2003- 12- 07 17: 13+ 02\n"
+"PO- Revision- Date: 2004- 11- 04 10: 13- 0700\n"
+"Last- Translator: Language- Team:< en@ li. org> MIME- Version: 1. 0\n"
+"Content- Type: text/ plain; charset= UTF- 8\n"
+"Content- Transfer- Encoding: 8bit\n"
+"X- Generator: KBabel 1. 0\n"
+"."
+
+#: makeinfo/multi.c:116
+#, fuzzy
+msgid "Missing } in @multitable template"
+msgstr "in Inyandikorugero"
+
+#: makeinfo/multi.c:260
+#, fuzzy, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "Umwandiko Nyuma"
+
+#: makeinfo/multi.c:400
+#, fuzzy, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "Inkingi in Ikintu KININI"
+
+#: makeinfo/multi.c:563
+#, fuzzy, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "[Guhitamo Inkingi in"
+
+#: makeinfo/multi.c:592
+#, fuzzy
+msgid "ignoring @tab outside of multitable"
+msgstr "Isunika Hanze Bya"
+
+#: makeinfo/multi.c:640
+#, fuzzy, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "**Ibisohoka Bivuye Iheruka Urubariro"
+
+#: makeinfo/multi.c:643
+#, fuzzy, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "*Inkingi Ibisohoka"
+
+#: makeinfo/node.c:279
+#, fuzzy, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "ku Umurongo"
+
+#: makeinfo/node.c:647
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr ""
+
+#: makeinfo/node.c:714
+#, fuzzy, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr "g."
+
+#: makeinfo/node.c:878
+#, fuzzy, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "Izina: kugirango Komandi:"
+
+#: makeinfo/node.c:919 makeinfo/node.c:1163
+#, fuzzy, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr "Na Kuri i IDOSIYE Izina:"
+
+#: makeinfo/node.c:922
+#, fuzzy
+msgid "This @anchor command ignored; references to it will not work"
+msgstr "Agafashi Komandi: Indango Kuri OYA Akazi"
+
+#: makeinfo/node.c:924 makeinfo/node.c:1166
+#, fuzzy
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr "iyi Agafashi Cyangwa Gukoresha i Oya Ihitamo"
+
+#: makeinfo/node.c:954
+#, fuzzy, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr "Ikurikiranyanyuguti ku Impera Bya Gutandukanya IDOSIYE"
+
+#: makeinfo/node.c:1160
+#, fuzzy, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr "Na Kuri i IDOSIYE Izina:"
+
+#: makeinfo/node.c:1165
+#, fuzzy
+msgid "@anchor command ignored; references to it will not work"
+msgstr "@Agafashi Komandi: Indango Kuri OYA Akazi"
+
+#: makeinfo/node.c:1362
+#, fuzzy, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr "%sIndango Kuri"
+
+#: makeinfo/node.c:1462
+#, fuzzy, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr "Umwanya Bya OYA Kuri"
+
+#: makeinfo/node.c:1465
+#, fuzzy, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "i"
+
+#: makeinfo/node.c:1520
+#, fuzzy, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "Umwanya Bya OYA Kuri"
+
+#: makeinfo/node.c:1524
+#, fuzzy, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "i"
+
+#: makeinfo/node.c:1536
+#, fuzzy, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr "`%s'Oya Umwanya"
+
+#: makeinfo/node.c:1605
+#, fuzzy, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr "Ibikubiyemo Ikintu kugirango Intego"
+
+#: makeinfo/node.c:1637
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr ""
+
+#: makeinfo/node.c:1727
+#, c-format
+msgid "Removing %s\n"
+msgstr ""
+
+#: makeinfo/node.c:1731
+#, fuzzy, c-format
+msgid "Can't remove file `%s': %s"
+msgstr "Gukuraho... IDOSIYE"
+
+#: makeinfo/sectioning.c:122
+#, c-format
+msgid "Appendix %c"
+msgstr ""
+
+#: makeinfo/sectioning.c:467
+#, fuzzy, c-format
+msgid "Internal error (search_sectioning) `%s'!"
+msgstr "Ikosa"
+
+#: makeinfo/sectioning.c:563
+#, fuzzy, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "Ikosa"
+
+#: makeinfo/sectioning.c:624
+#, fuzzy, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "%c%sni Gukoresha"
+
+#: makeinfo/sectioning.c:640
+#, fuzzy, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "Na: Nka a Icyiciro"
+
+#: makeinfo/sectioning.c:648
+#, fuzzy, c-format
+msgid "Here is the %ctop node"
+msgstr "ni i"
+
+#: makeinfo/sectioning.c:664
+#, fuzzy, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "%ctopMbere Kuri"
+
+#: makeinfo/xml.c:1669
+#, fuzzy, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "@Ishusho IDOSIYE"
+
+#: makeinfo/xml.c:2014
+#, fuzzy
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr "@Nka i Iheruka Ikintu Bya Sibyo Inyandiko"
+
+#: makeinfo/xml.c:2150
+msgid "of"
+msgstr "ya"
+
+#: makeinfo/xml.c:2155
+msgid "on"
+msgstr "kuri"
+
+#: makeinfo/xref.c:127
+msgid "First argument to cross-reference may not be empty"
+msgstr ""
+
+#: makeinfo/xref.c:252
+#, c-format
+msgid "Empty file name for HTML cross reference in `%s'"
+msgstr ""
+
+#: makeinfo/xref.c:387
+msgid "End of file reached while looking for `.' or `,'"
+msgstr ""
+
+#: makeinfo/xref.c:390
+#, c-format
+msgid "`.' or `,' must follow @%s, not `%c'"
+msgstr ""
+
+#: makeinfo/xref.c:392
+#, fuzzy
+msgid "for cross-references in parentheses, use @pxref"
+msgstr "Kwambukiranya Indango in iyi"
+
+#: makeinfo/xref.c:435
+msgid "First argument to @inforef may not be empty"
+msgstr ""
+
+#: util/texindex.c:223
+#, fuzzy
+msgid "display this help and exit"
+msgstr "Kugaragaza iyi Ifashayobora Na Gusohoka"
+
+#: util/texindex.c:225
+#, fuzzy
+msgid "send output to FILE"
+msgstr "Kohereza Ibisohoka Kuri"
+
+#: util/texindex.c:227
+#, fuzzy
+msgid "display version information and exit"
+msgstr "Kugaragaza Verisiyo Ibisobanuro Na Gusohoka"
+
+#: util/texindex.c:237
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr ""
+
+#: util/texindex.c:238
+#, fuzzy, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr "a bishunguwe Umubarendanga kugirango Ibisohoka"
+
+#: util/texindex.c:241
+#, fuzzy, c-format
+msgid "Usually FILE... is specified as `foo.%c%c' for a document `foo.texi'.\n"
+msgstr "ni Nka kugirango a Inyandiko"
+
+#: util/texindex.c:243
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Amahitamo:\n"
+
+#: util/texindex.c:743
+#, c-format
+msgid "failure reopening %s"
+msgstr ""
+
+#: util/texindex.c:758 util/texindex.c:786
+#, fuzzy, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s:OYA a Umubarendanga IDOSIYE"
+
+#: util/texindex.c:993
+#, fuzzy, c-format
+msgid "No page number in %s"
+msgstr "Ipaji Umubare in"
+
+#: util/texindex.c:1066
+#, fuzzy, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr "Icyinjijwe Icyinjijwe Na: a Izina:"
+
+#, fuzzy
+#~ msgid ""
+#~ "\\%-10[search] Search forward for a specified string\n"
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr ""
+#~ "\\%-10 Gushaka Imbere kugirango a Na Guhitamo i in i Komeza>> ukugaragara "
+#~ "ni Byabonetse"
+
+#, fuzzy
+#~ msgid ""
+#~ "\\%-10[goto-node] Move to node specified by name.\n"
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ msgstr ""
+#~ "\\%-10 Kuri ku Izina: Gicurasi Gushyiramo a Izina ry'idosiye: Nka Nka in"
+
+#, fuzzy
+#~ msgid "\\%-10[next-node] Move to the next node of current section.\n"
+#~ msgstr "\\%-10 Komeza>> Kuri i Komeza>> Bya iyi"
+
+#, fuzzy
+#~ msgid ""
+#~ "\\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+#~ "node] (DIR)'.\n"
+#~ msgstr "\\%-10 Kuri i Kuri"
+
+#, fuzzy
+#~ msgid ""
+#~ "\\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] "
+#~ "Top'.\n"
+#~ msgstr "\\%-10 Hejuru: Kuri i Kuri"
+
+#, fuzzy
+#~ msgid ""
+#~ "\\%-10[search-backward] Search backward for a specified string\n"
+#~ " and select the node in which the previous occurrence is "
+#~ "found.\n"
+#~ msgstr ""
+#~ "\\%-10 Gushaka subira inyuma subira inyuma kugirango a Na Guhitamo i in i "
+#~ "Ibanjirije ukugaragara ni Byabonetse"
+
+#, fuzzy
+#~ msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+#~ msgstr "---Urutonde Cyangwa Kuri Gusohoka"
+
+#, fuzzy
+#~ msgid "\\%-10[move-to-prev-xref] Skip to previous hypertext link [*].\n"
+#~ msgstr "\\%-10 Kwimura Kuri X- Ngenderwaho Kuri Ibanjirije Ihuza muri iyi"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]... [MENU-ITEM...]\n"
+#~ "\n"
+#~ "Read documentation in Info format.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --apropos=STRING look up STRING in all indices of all "
+#~ "manuals.\n"
+#~ " -d, --directory=DIR add DIR to INFOPATH.\n"
+#~ " --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+#~ " -f, --file=FILENAME specify Info file to visit.\n"
+#~ " -h, --help display this help and exit.\n"
+#~ " --index-search=STRING go to node pointed by index entry STRING.\n"
+#~ " -n, --node=NODENAME specify nodes in first visited Info file.\n"
+#~ " -o, --output=FILENAME output selected nodes to FILENAME.\n"
+#~ " -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+#~ " --no-raw-escapes output escapes as literal text.\n"
+#~ " --restore=FILENAME read initial keystrokes from FILENAME.\n"
+#~ " -O, --show-options, --usage go to command-line options node.\n"
+#~ "%s --subnodes recursively output menu items.\n"
+#~ " -w, --where, --location print physical location of Info file.\n"
+#~ " --vi-keys use vi-like and less-like key bindings.\n"
+#~ " --version display version information and exit.\n"
+#~ "\n"
+#~ "The first non-option argument, if present, is the menu entry to start "
+#~ "from;\n"
+#~ "it is searched for in all `dir' files along INFOPATH.\n"
+#~ "If it is not present, info merges all `dir' files and shows the result.\n"
+#~ "Any remaining arguments are treated as the names of menu\n"
+#~ "items relative to the initial node visited.\n"
+#~ "\n"
+#~ "Examples:\n"
+#~ " info show top-level dir menu\n"
+#~ " info emacs start at emacs node from top-level dir\n"
+#~ " info emacs buffers start at buffers node within emacs manual\n"
+#~ " info --show-options emacs start at node with emacs' command line "
+#~ "options\n"
+#~ " info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+#~ " info -f ./foo.info show file ./foo.info, not searching dir\n"
+#~ msgstr ""
+#~ "in Imiterere Hejuru in Byose ibimenyetso Bya Byose D bushyinguro "
+#~ "Kongeramo Kuri Ukoresha: in F IDOSIYE IDOSIYE Kuri h Ifashayobora "
+#~ "Kugaragaza iyi Ifashayobora Na Gusohoka Umubarendanga Gushaka Gyayo Kuri "
+#~ "ku Umubarendanga Icyinjijwe N in Itangira IDOSIYE o Ibisohoka Ibisohoka "
+#~ "Byahiswemo Kuri Ibisohoka Mburabuzi Oya Ibisohoka Nka Umwandiko Kugarura "
+#~ "Gusoma Bivuye Garagaza Amahitamo Ikoresha: Gyayo Kuri Komandi: Umurongo "
+#~ "Amahitamo Ibisohoka Ibikubiyemo W Ahantu Gucapa Ifatika Ahantu Bya "
+#~ "IDOSIYE Utubuto Gukoresha nka Na Birutwa nka Urufunguzo Ibyafataranyijwe "
+#~ "Verisiyo Kugaragaza Verisiyo Ibisobanuro Na Gusohoka Itangira Ihitamo "
+#~ "NIBA ni i Ibikubiyemo Icyinjijwe Kuri Gutangira Bivuye ni kugirango in "
+#~ "Byose Idosiye ni OYA Ibisobanuro Byose Idosiye Na i Igisubizo ingingo Nka "
+#~ "i Amazina Bya Bifitanye isano Kuri i Ibisobanuro Garagaza Hejuru: urwego "
+#~ "Ibisobanuro Gutangira ku Bivuye Hejuru: urwego Ibisobanuro Gutangira ku "
+#~ "muri Ibisobanuro Garagaza Amahitamo Gutangira ku Na: Komandi: Umurongo "
+#~ "Ibisobanuro F Ibisobanuro Garagaza IDOSIYE Ibisobanuro OYA Ishakisha"
+
+#, fuzzy
+#~ msgid ""
+#~ " Picking a menu item causes another node to be selected.\n"
+#~ msgstr "a Ibikubiyemo Ikintu Kuri Byahiswemo"
+
+#, fuzzy
+#~ msgid ""
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ msgstr "Gicurasi Gushyiramo a Izina ry'idosiye: Nka Nka in"
+
+#, fuzzy
+#~ msgid " %-10s Search backward for a specified string\n"
+#~ msgstr "%-10ssubira inyuma kugirango a"
+
+#, fuzzy
+#~ msgid ""
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr "Na Guhitamo i in i Komeza>> ukugaragara ni Byabonetse"
+
+#, fuzzy
+#~ msgid "Selecting first menu item..."
+#~ msgstr "Itangira Ibikubiyemo Ikintu"
+
+#, fuzzy
+#~ msgid "Moving Up %d time(s), then Next."
+#~ msgstr "Igihe S Hanyuma"
+
+#, fuzzy
+#~ msgid "Moving Prev in this window."
+#~ msgstr "in iyi Idirishya"
+
+#, fuzzy
+#~ msgid "Moving Up in this window."
+#~ msgstr "in iyi Idirishya"
+
+#, fuzzy
+#~ msgid "Moving to `Prev's last menu item."
+#~ msgstr "Kuri Iheruka Ibikubiyemo Ikintu"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "Function"
+#~ msgstr "Umumaro"
+
+#~ msgid "Macro"
+#~ msgstr "Makoro"
+
+#~ msgid "Variable"
+#~ msgstr "Imburabuzi"
+
+#, fuzzy
+#~ msgid "Instance Variable"
+#~ msgstr "Imburabuzi"
+
+#~ msgid "Method"
+#~ msgstr "Uburyo"
+
+# filter/source\xsltdialog\xmlfilterdialogstrings.src:STR_DEFAULT_UI_NAME.text
+#~ msgid "Untitled"
+#~ msgstr "Nta mutwe"
+
+#, fuzzy
+#~ msgid "This is %s, produced by makeinfo version %s from %s.\n"
+#~ msgstr "ni ku Verisiyo Bivuye"
+
+#, fuzzy
+#~ msgid "Next:"
+#~ msgstr "Ibikurikira>"
+
+#, fuzzy
+#~ msgid "Previous:"
+#~ msgstr "Ibanjirije"
+
+# #-#-#-#-# sc.pot (PACKAGE VERSION) #-#-#-#-#
+# sc/source\ui\src\menue.src:SCCFG_PLUGINMENU.SUBMENU_EDIT.SUBMENU_FILL.FID_FILL_TO_TOP.text
+# #-#-#-#-# sc.pot (PACKAGE VERSION) #-#-#-#-#
+# sc/source\ui\src\menue.src:SCCFG_MENUBAR.SUBMENU_EDIT.SUBMENU_FILL.FID_FILL_TO_TOP.text
+# #-#-#-#-# sc.pot (PACKAGE VERSION) #-#-#-#-#
+# sc/source\ui\src\miscdlgs.src:RID_SCDLG_FILLSERIES.BTN_TOP.text
+#, fuzzy
+#~ msgid "Up:"
+#~ msgstr "Hejuru"
+
+#~ msgid "Menu"
+#~ msgstr "Ibikubiyemo"
+
+#~ msgid "Cross"
+#~ msgstr "Kwambukiranya"
+
+#, fuzzy
+#~ msgid "Prev"
+#~ msgstr "Ibanjirije"
+
+#~ msgid "Up"
+#~ msgstr "Hejuru"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+#~ "\n"
+#~ "Add or remove entries in INFO-FILE from the Info directory DIR-FILE.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --debug report what is being done.\n"
+#~ " --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+#~ " don't insert any new entries.\n"
+#~ " --dir-file=NAME specify file name of Info directory file.\n"
+#~ " This is equivalent to using the DIR-FILE argument.\n"
+#~ " --entry=TEXT insert TEXT as an Info directory entry.\n"
+#~ " TEXT should have the form of an Info menu item line\n"
+#~ " plus zero or more extra lines starting with "
+#~ "whitespace.\n"
+#~ " If you specify more than one entry, they are all "
+#~ "added.\n"
+#~ " If you don't specify any entries, they are "
+#~ "determined\n"
+#~ " from information in the Info file itself.\n"
+#~ " --help display this help and exit.\n"
+#~ " --info-file=FILE specify Info file to install in the directory.\n"
+#~ " This is equivalent to using the INFO-FILE argument.\n"
+#~ " --info-dir=DIR same as --dir-file=DIR/dir.\n"
+#~ " --item=TEXT same as --entry TEXT.\n"
+#~ " An Info directory entry is actually a menu item.\n"
+#~ " --quiet suppress warnings.\n"
+#~ " --remove same as --delete.\n"
+#~ " --remove-exactly only remove if the info file name matches exactly;\n"
+#~ " .info and/or .gz suffixes are not ignored.\n"
+#~ " --section=SEC put this file's entries in section SEC of the "
+#~ "directory.\n"
+#~ " If you specify more than one section, all the "
+#~ "entries\n"
+#~ " are added in each of the sections.\n"
+#~ " If you don't specify any sections, they are "
+#~ "determined\n"
+#~ " from information in the Info file itself.\n"
+#~ " --section-regex=R if an entry is added to a section that does not "
+#~ "exist,\n"
+#~ " look for a section matching basic regular expression "
+#~ "R\n"
+#~ " (and ignoring case) before starting a new section.\n"
+#~ " --test suppress updating of DIR-FILE.\n"
+#~ " --silent suppress warnings.\n"
+#~ " --version display version information and exit.\n"
+#~ msgstr ""
+#~ "Cyangwa Gusiba Ibyinjijwe Bivuye in i bushyinguro Gusiba Gusiba "
+#~ "Ibyinjijwe kugirango Bivuye Kongeramo Gishya Ibyinjijwe IDOSIYE IDOSIYE "
+#~ "Izina: Bya bushyinguro IDOSIYE ni Kuri ikoresha i Icyinjijwe Kongeramo "
+#~ "Nka bushyinguro Icyinjijwe i Ifishi Bya Ibikubiyemo Ikintu Guteranya Zeru "
+#~ "Cyangwa Birenzeho Birenga Imirongo Na: Birenzeho Icyinjijwe Byose "
+#~ "Kyongewe Ibyinjijwe Bivuye Ibisobanuro in i IDOSIYE Ifashayobora "
+#~ "Kugaragaza iyi Ifashayobora Na Gusohoka Ibisobanuro IDOSIYE IDOSIYE Kuri "
+#~ "Kwinjiza porogaramu in i bushyinguro ni Kuri ikoresha i Ibisobanuro Nka "
+#~ "IDOSIYE Ikintu Nka Icyinjijwe bushyinguro Icyinjijwe ni a Ibikubiyemo "
+#~ "Ikintu Iburira Gukuraho... Nka Gusiba Icyiciro Gushyira iyi Ibyinjijwe in "
+#~ "Icyiciro Bya i bushyinguro Birenzeho Icyiciro Byose i Kyongewe in Bya i "
+#~ "Ibyatoranyijwe Ibyatoranyijwe Bivuye Ibisobanuro in i IDOSIYE Verisiyo "
+#~ "Kugaragaza Verisiyo Ibisobanuro Na Gusohoka"
+
+#, fuzzy
+#~ msgid "menu item `%s' already exists, for file `%s'"
+#~ msgstr "Ibikubiyemo Ikintu kugirango IDOSIYE"
+
+#, fuzzy
+#~ msgid "\\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+#~ msgstr "\\%-10 Ibikubiyemo Itangira Ikintu in Ibikubiyemo"
+
+#, fuzzy
+#~ msgid "node `%s' has been referenced %d times"
+#~ msgstr "Times"
+
+#, fuzzy
+#~ msgid ""
+#~ "Copyright (C) %s Free Software Foundation, Inc.\n"
+#~ "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n"
+#~ "PARTICULAR PURPOSE. You may redistribute copies of GNU %s\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the file named COPYING.\n"
+#~ msgstr ""
+#~ "C ni Gicurasi iyi i Bya i Birenzeho Ibisobanuro Ibyerekeye i Idosiye"
+
+#, fuzzy
+#~ msgid "@quote-arg only useful for single-argument macros"
+#~ msgstr "@Gushyiraho akugarizo kugirango UMWE Makoro"
+
+#~ msgid "Table of Contents"
+#~ msgstr "Ishakiro"
+
+#, fuzzy
+#~ msgid "Short Contents"
+#~ msgstr "Ishakiro"
+
+#, fuzzy
+#~ msgid "keep temporary files around after processing"
+#~ msgstr "Gumana: By'igihe gito Idosiye Nyuma Inonosora"
+
+#, fuzzy
+#~ msgid "do not keep temporary files around after processing (default)"
+#~ msgstr "OYA Gumana: By'igihe gito Idosiye Nyuma Inonosora Mburabuzi"
+
+#, fuzzy
+#~ msgid ""
+#~ " file, and select the node referenced by the first entry "
+#~ "found.\n"
+#~ msgstr "IDOSIYE Na Guhitamo i ku i Itangira Icyinjijwe Byabonetse"
+
+#, fuzzy
+#~ msgid ""
+#~ "There is NO warranty. You may redistribute this software\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the files named COPYING.\n"
+#~ msgstr "ni Gicurasi iyi i Bya i Birenzeho Ibisobanuro Ibyerekeye i Idosiye"
diff --git a/po/stamp-po b/po/stamp-po
new file mode 100644
index 0000000..9788f70
--- /dev/null
+++ b/po/stamp-po
@@ -0,0 +1 @@
+timestamp
diff --git a/po/sv.gmo b/po/sv.gmo
new file mode 100644
index 0000000..bb5d32f
--- /dev/null
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
new file mode 100644
index 0000000..cbfe2a3
--- /dev/null
+++ b/po/sv.po
@@ -0,0 +1,3862 @@
+# Swedish messages for texinfo.
+# Copyright (C) 2001, 2002, 2003, 2004, 2008 Free Software Foundation, Inc.
+# Christian Rose <menthos@menthos.com>, 2001, 2002, 2003, 2004, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo 4.11.93\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2008-09-18 20:38+0200\n"
+"PO-Revision-Date: 2008-03-09 20:35+0100\n"
+"Last-Translator: Christian Rose <menthos@menthos.com>\n"
+"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: gnulib/lib/error.c:125
+msgid "Unknown system error"
+msgstr "Okänt systemfel"
+
+#: gnulib/lib/getopt.c:526 gnulib/lib/getopt.c:542
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: flaggan \"%s\" är flertydig\n"
+
+#: gnulib/lib/getopt.c:575 gnulib/lib/getopt.c:579
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: flaggan \"--%s\" tillåter inget argument\n"
+
+#: gnulib/lib/getopt.c:588 gnulib/lib/getopt.c:593
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: flaggan \"%c%s\" tillåter inget argument\n"
+
+#: gnulib/lib/getopt.c:636 gnulib/lib/getopt.c:655 gnulib/lib/getopt.c:971
+#: gnulib/lib/getopt.c:990
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: flaggan \"%s\" kräver ett argument\n"
+
+#: gnulib/lib/getopt.c:693 gnulib/lib/getopt.c:696
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: okänd flagga \"--%s\"\n"
+
+#: gnulib/lib/getopt.c:704 gnulib/lib/getopt.c:707
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: okänd flagga \"%c%s\"\n"
+
+#: gnulib/lib/getopt.c:759 gnulib/lib/getopt.c:762
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: otillåten flagga -- %c\n"
+
+#: gnulib/lib/getopt.c:768 gnulib/lib/getopt.c:771
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ogiltig flagga -- %c\n"
+
+#: gnulib/lib/getopt.c:823 gnulib/lib/getopt.c:839 gnulib/lib/getopt.c:1043
+#: gnulib/lib/getopt.c:1061
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: flaggan kräver ett argument -- %c\n"
+
+#: gnulib/lib/getopt.c:892 gnulib/lib/getopt.c:908
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: flaggan \"-W %s\" är flertydig\n"
+
+#: gnulib/lib/getopt.c:932 gnulib/lib/getopt.c:950
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: flaggan \"-W %s\" tillåter inget argument\n"
+
+#: gnulib/lib/xalloc-die.c:34 gnulib/lib/xsetenv.c:37
+#, c-format
+msgid "memory exhausted"
+msgstr "minne slut"
+
+#: info/echo-area.c:283 info/session.c:966
+msgid "Move forward a character"
+msgstr "Gå ett tecken framåt"
+
+#: info/echo-area.c:295 info/session.c:993
+msgid "Move backward a character"
+msgstr "Gå ett tecken bakåt"
+
+#: info/echo-area.c:307
+msgid "Move to the start of this line"
+msgstr "Gå till början på raden"
+
+#: info/echo-area.c:312
+msgid "Move to the end of this line"
+msgstr "Gå till slutet på raden"
+
+#: info/echo-area.c:320 info/session.c:1025
+msgid "Move forward a word"
+msgstr "Gå ett ord framåt"
+
+#: info/echo-area.c:360 info/session.c:1049
+msgid "Move backward a word"
+msgstr "Gå ett ord bakåt"
+
+#: info/echo-area.c:400
+msgid "Delete the character under the cursor"
+msgstr "Ta bort tecknet under markören"
+
+#: info/echo-area.c:430
+msgid "Delete the character behind the cursor"
+msgstr "Ta bort tecknet bakom markören"
+
+#: info/echo-area.c:451
+msgid "Cancel or quit operation"
+msgstr "Avbryt eller avsluta operation"
+
+#: info/echo-area.c:466
+msgid "Accept (or force completion of) this line"
+msgstr "Acceptera (eller tvinga komplettering av) denna rad"
+
+#: info/echo-area.c:471
+msgid "Insert next character verbatim"
+msgstr "Infoga nästa tecken ordagrant"
+
+#: info/echo-area.c:479
+msgid "Insert this character"
+msgstr "Infoga detta tecken"
+
+#: info/echo-area.c:498
+msgid "Insert a TAB character"
+msgstr "Infoga ett TABULATOR-tecken"
+
+#: info/echo-area.c:505
+msgid "Transpose characters at point"
+msgstr "Transponera tecken vid punkt"
+
+#: info/echo-area.c:556
+msgid "Yank back the contents of the last kill"
+msgstr "Ryck tillbaka innehållet i det senaste dödandet"
+
+#: info/echo-area.c:563
+msgid "Kill ring is empty"
+msgstr "Dödsringen är tom"
+
+#: info/echo-area.c:576
+msgid "Yank back a previous kill"
+msgstr "Ryck tillbaka ett tidigare dödande"
+
+#: info/echo-area.c:609
+msgid "Kill to the end of the line"
+msgstr "Döda till slutet på raden"
+
+#: info/echo-area.c:622
+msgid "Kill to the beginning of the line"
+msgstr "Döda till början på raden"
+
+#: info/echo-area.c:634
+msgid "Kill the word following the cursor"
+msgstr "Döda ordet efter markören"
+
+#: info/echo-area.c:654
+msgid "Kill the word preceding the cursor"
+msgstr "Döda ordet före markören"
+
+#: info/echo-area.c:870 info/echo-area.c:926
+msgid "No completions"
+msgstr "Inga kompletteringar"
+
+#: info/echo-area.c:872
+msgid "Not complete"
+msgstr "Inte fullständig"
+
+#: info/echo-area.c:913
+msgid "List possible completions"
+msgstr "Visa möjliga kompletteringar"
+
+#: info/echo-area.c:930
+msgid "Sole completion"
+msgstr "Enda komplettering"
+
+#: info/echo-area.c:939
+msgid "One completion:\n"
+msgstr "En komplettering:\n"
+
+#: info/echo-area.c:940
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d kompletteringar:\n"
+
+#: info/echo-area.c:1087
+msgid "Insert completion"
+msgstr "Infoga komplettering"
+
+#: info/echo-area.c:1222
+msgid "Building completions..."
+msgstr "Bygger kompletteringar..."
+
+#: info/echo-area.c:1342
+msgid "Scroll the completions window"
+msgstr "Rulla kompletteringsfönstret"
+
+#: info/footnotes.c:212
+msgid "Footnotes could not be displayed"
+msgstr "Fotnoter kunde inte visas"
+
+#: info/footnotes.c:238
+msgid "Show the footnotes associated with this node in another window"
+msgstr "Visa fotnoterna som är associerade med denna nod i ett annat fönster"
+
+#: info/footnotes.h:26
+msgid "---------- Footnotes ----------"
+msgstr "---------- Fotnoter -----------"
+
+#: info/indices.c:171
+msgid "Look up a string in the index for this file"
+msgstr "Slå upp en sträng i indexet för denna fil"
+
+#: info/indices.c:198
+msgid "Finding index entries..."
+msgstr "Söker indexposter..."
+
+#: info/indices.c:206
+msgid "No indices found."
+msgstr "Inga index hittades."
+
+#: info/indices.c:216
+msgid "Index entry: "
+msgstr "Indexpost: "
+
+#: info/indices.c:324
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr ""
+"Gå till nästa matchande indexpost från det senaste \"\\[index-search]\"-"
+"kommandot"
+
+#: info/indices.c:334
+msgid "No previous index search string."
+msgstr "Det finns ingen tidigare indexsöksträng."
+
+#: info/indices.c:341
+msgid "No index entries."
+msgstr "Inga indexposter."
+
+# This is broken
+#
+# info_error (_("No %sindex entries containing \"%s\"."),
+# index_offset > 0 ? _("more ") : "", index_search);
+#
+# Please don't use this type of construct, use two complete sentences
+# instead and an outer if statement.
+#
+#: info/indices.c:374
+#, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "Inga %sindexposter som innehåller \"%s\"."
+
+#: info/indices.c:375
+msgid "more "
+msgstr "fler "
+
+#: info/indices.c:385
+msgid "CAN'T SEE THIS"
+msgstr "KAN INTE SE DETTA"
+
+#: info/indices.c:421
+#, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr "Hittade \"%s\" i %s. (\"\\[next-index-match]\" försöker hitta nästa)."
+
+#: info/indices.c:549
+#, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "Genomsöker index av \"%s\"..."
+
+#: info/indices.c:604
+#, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr "Inga tillgängliga infofiler har \"%s\" i deras index."
+
+#: info/indices.c:630
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr "Gräv i alla kända infofilers index efter en sträng och bygg en meny"
+
+#: info/indices.c:634
+msgid "Index apropos: "
+msgstr "Index-apropos: "
+
+#: info/indices.c:662
+#, c-format
+msgid ""
+"\n"
+"* Menu: Nodes whose indices contain `%s':\n"
+msgstr ""
+"\n"
+"* Meny: Noder vars index innehåller \"%s\":\n"
+
+#: info/info.c:275 info/infokey.c:899
+#, c-format
+msgid "Try --help for more information.\n"
+msgstr "Prova --help för mer information.\n"
+
+#: info/info.c:294 info/infokey.c:145 install-info/install-info.c:2101
+#: makeinfo/makeinfo.c:802 util/texindex.c:295
+#, c-format
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"Copyright © %s Free Software Foundation, Inc.\n"
+"Licens GPLv3+: GNU GPL version 3 eller senare <http://gnu.org/licenses/gpl."
+"html>\n"
+"(Följande text är en informell översättning som enbart tillhandahålls\n"
+" i informativt syfte. För alla juridiska tolkningar gäller den engelska\n"
+" originaltexten.)\n"
+"Det här är fri programvara. Du kan fritt modifiera det och\n"
+"vidaredistribuera det. Det finns INGEN GARANTI, i den omfattning som\n"
+"medges av gällande lag.\n"
+
+#: info/info.c:506
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "inga indexposter för \"%s\" hittades\n"
+
+#: info/info.c:600
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [MENU-ITEM...]\n"
+"\n"
+"Read documentation in Info format.\n"
+msgstr ""
+"Användning: %s [FLAGGA]... [MENYPOST...]\n"
+"\n"
+"Läs dokumentation i Info-format.\n"
+
+#: info/info.c:606
+msgid ""
+"Options:\n"
+" -k, --apropos=STRING look up STRING in all indices of all "
+"manuals.\n"
+" -d, --directory=DIR add DIR to INFOPATH.\n"
+" --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+" -f, --file=FILENAME specify Info file to visit."
+msgstr ""
+"Flaggor:\n"
+" -k, --apropos=STRÄNG slå upp STRÄNG i alla index i alla manualer.\n"
+" -d, --directory=KATALOG lägg till KATALOG till INFOPATH.\n"
+" --dribble=FILNAMN kom ihåg användarens tangentnedtryckningar i\n"
+" FILNAMN.\n"
+" -f, --file=FILNAMN ange den Info-fil som ska besökas."
+
+#: info/info.c:613
+msgid ""
+" -h, --help display this help and exit.\n"
+" --index-search=STRING go to node pointed by index entry STRING.\n"
+" -n, --node=NODENAME specify nodes in first visited Info file.\n"
+" -o, --output=FILENAME output selected nodes to FILENAME."
+msgstr ""
+" -h, --help visa denna hjälptext och avsluta.\n"
+" --index-search=STRÄNG gå till noden som utpekas av indexpost\n"
+" STRÄNG.\n"
+" -n, --node=NODNAMN ange noder i den först besökta Info-filen.\n"
+" -o, --output=FILNAMN skriv ut valda noder till FILNAMN."
+
+#: info/info.c:619
+msgid ""
+" -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+" --no-raw-escapes output escapes as literal text.\n"
+" --restore=FILENAME read initial keystrokes from FILENAME.\n"
+" -O, --show-options, --usage go to command-line options node."
+msgstr ""
+" -R, --raw-escapes skriv ut \"råa\" ANSI-styrkoder (standard).\n"
+" --no-raw-escapes skriv ut styrkoder som text.\n"
+" --restore=FILNAMN läs initiala tangentnedtryckningar från\n"
+" FILNAMN.\n"
+" -O, --show-options, --usage gå till noden för kommandoradsflaggor."
+
+#: info/info.c:626
+msgid " -b, --speech-friendly be friendly to speech synthesizers."
+msgstr " -b, --speech-friendly var vänlig mot talsyntesprogram."
+
+#: info/info.c:630
+msgid ""
+" --subnodes recursively output menu items.\n"
+" --vi-keys use vi-like and less-like key bindings.\n"
+" --version display version information and exit.\n"
+" -w, --where, --location print physical location of Info file."
+msgstr ""
+" --subnodes skriv ut menyposter rekursivt.\n"
+" --vi-keys använd vi- och less-liknande\n"
+" snabbtangenter.\n"
+" --version visa versionsinformation och avsluta.\n"
+" -w, --where, --location skriv ut den fysiska platsen för Info-filen."
+
+#: info/info.c:636
+msgid ""
+"\n"
+"The first non-option argument, if present, is the menu entry to start from;\n"
+"it is searched for in all `dir' files along INFOPATH.\n"
+"If it is not present, info merges all `dir' files and shows the result.\n"
+"Any remaining arguments are treated as the names of menu\n"
+"items relative to the initial node visited."
+msgstr ""
+"\n"
+"Det första argumentet som inte är en flagga är, om det finns, menyposten\n"
+"att börja från. Det söks efter i alla \"dir\"-filer i INFOPATH.\n"
+"Om den inte finns slår info samman alla \"dir\"-filer och visar resultatet.\n"
+"Alla återstående argument betraktas som namnen på menyposter relativa till\n"
+"den först besökta noden."
+
+#: info/info.c:643
+msgid ""
+"\n"
+"For a summary of key bindings, type h within Info."
+msgstr ""
+
+#: info/info.c:646
+#, fuzzy
+msgid ""
+"\n"
+"Examples:\n"
+" info show top-level dir menu\n"
+" info info show the general manual for Info readers\n"
+" info info-stnd show the manual specific to this Info program\n"
+" info emacs start at emacs node from top-level dir\n"
+" info emacs buffers start at buffers node within emacs manual\n"
+" info --show-options emacs start at node with emacs' command line options\n"
+" info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+" info -f ./foo.info show file ./foo.info, not searching dir"
+msgstr ""
+"\n"
+"Exempel:\n"
+" info visa översta katalogmenyn\n"
+" info emacs börja på emacs-noden från översta katalogen\n"
+" info emacs buffers börja på buffertnoden inom emacs-manualen\n"
+" info --show-options emacs börja på noden med emacs kommandoradsflaggor\n"
+" info --subnodes -o ut.txt emacs dumpa hela manualen till ut.txt\n"
+" info -f ./foo.info visa filen ./foo.info, sök inte i katalogen"
+
+#: info/info.c:657 info/infokey.c:918 makeinfo/makeinfo.c:475
+#: util/texindex.c:259
+msgid ""
+"\n"
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+"Skicka felrapporter till bug-texinfo@gnu.org,\n"
+"allmänna frågor och diskussion till help-texinfo@gnu.org\n"
+"och synpunkter på översättningen till sv@li.org.\n"
+"Hemsida för texinfo: http://www.gnu.org/software/texinfo/"
+
+#: info/info.c:691
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "Kan inte hitta noden \"%s\"."
+
+#: info/info.c:692
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "Kan inte hitta noden \"(%s)%s\"."
+
+#: info/info.c:693
+msgid "Cannot find a window!"
+msgstr "Kan inte hitta ett fönster!"
+
+#: info/info.c:694
+msgid "Point doesn't appear within this window's node!"
+msgstr "Punkten finns inte inom detta fönsters nod!"
+
+#: info/info.c:695
+msgid "Cannot delete the last window."
+msgstr "Kan inte ta bort det sista fönstret."
+
+#: info/info.c:696
+msgid "No menu in this node."
+msgstr "Ingen meny i denna nod."
+
+#: info/info.c:697
+msgid "No footnotes in this node."
+msgstr "Inga fotnoter i denna nod."
+
+#: info/info.c:698
+msgid "No cross references in this node."
+msgstr "Inga korsreferenser i denna nod."
+
+#: info/info.c:699
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Ingen \"%s\"-pekare för denna nod."
+
+#: info/info.c:700
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "Okänt Info-kommando \"%c\". Prova \"?\" för hjälp."
+
+#: info/info.c:701
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr "Terminaltypen \"%s\" är inte tillräckligt smart för att köra Info."
+
+#: info/info.c:702
+msgid "You are already at the last page of this node."
+msgstr "Du är redan på sista sidan för denna nod."
+
+#: info/info.c:703
+msgid "You are already at the first page of this node."
+msgstr "Du är redan på första sidan för denna nod."
+
+#: info/info.c:704
+msgid "Only one window."
+msgstr "Endast ett fönster."
+
+#: info/info.c:705
+msgid "Resulting window would be too small."
+msgstr "Resulterande fönstret skulle bli för litet."
+
+#: info/info.c:706
+msgid "Not enough room for a help window, please delete a window."
+msgstr ""
+"Inte tillräckligt med utrymme för ett hjälpfönster, ta bort ett fönster."
+
+#: info/infodoc.c:45
+msgid "Basic Info command keys\n"
+msgstr "Grundläggande Info-kommandotangenter\n"
+
+#: info/infodoc.c:47
+msgid "\\%-10[quit-help] Close this help window.\n"
+msgstr "\\%-10[quit-help] Stäng detta hjälpfönster.\n"
+
+#: info/infodoc.c:48
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] Avsluta Info helt.\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr "\\%-10[get-info-help-node] Starta Info-handboken.\n"
+
+#: info/infodoc.c:51
+msgid "\\%-10[prev-line] Move up one line.\n"
+msgstr "\\%-10[prev-node] Gå en rad uppåt.\n"
+
+#: info/infodoc.c:52
+msgid "\\%-10[next-line] Move down one line.\n"
+msgstr "\\%-10[next-line] Gå en rad nedåt.\n"
+
+#: info/infodoc.c:53
+msgid "\\%-10[scroll-backward] Scroll backward one screenful.\n"
+msgstr "\\%-10[scroll-backward] Rulla en skärmlängd bakåt.\n"
+
+#: info/infodoc.c:54
+msgid "\\%-10[scroll-forward] Scroll forward one screenful.\n"
+msgstr "\\%-10[scroll-forward] Rulla en skärmlängd framåt.\n"
+
+#: info/infodoc.c:55
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr "\\%-10[beginning-of-node] Gå till början på denna nod.\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr "\\%-10[end-of-node] Gå till slutet på denna nod.\n"
+
+#: info/infodoc.c:58
+msgid "\\%-10[move-to-next-xref] Skip to the next hypertext link.\n"
+msgstr "\\%-10[move-to-next-xref] Hoppa till nästa hypertextlänk.\n"
+
+#: info/infodoc.c:59
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under the "
+"cursor.\n"
+msgstr ""
+"\\%-10[select-reference-this-line] Följ hypertextlänken under markören.\n"
+
+#: info/infodoc.c:60
+msgid "\\%-10[history-node] Go back to the last node seen in this window.\n"
+msgstr "\\%-10[history-node] Gå till den sista noden i detta fönster.\n"
+
+#: info/infodoc.c:62
+msgid "\\%-10[global-prev-node] Go to the previous node in the document.\n"
+msgstr "\\%-10[global-prev-node] Gå till föregående nod i dokumentet.\n"
+
+#: info/infodoc.c:63
+msgid "\\%-10[global-next-node] Go to the next node in the document.\n"
+msgstr "\\%-10[global-next-node] Gå till nästa nod i dokumentet.\n"
+
+#: info/infodoc.c:64
+msgid "\\%-10[prev-node] Go to the previous node on this level.\n"
+msgstr "\\%-10[prev-node] Gå till föregående nod på denna nivå.\n"
+
+#: info/infodoc.c:65
+msgid "\\%-10[next-node] Go to the next node on this level.\n"
+msgstr "\\%-10[next-node] Gå till nästa nod på denna nivå.\n"
+
+#: info/infodoc.c:66
+msgid "\\%-10[up-node] Go up one level.\n"
+msgstr "\\%-10[up-node] Gå en nivå uppåt.\n"
+
+#: info/infodoc.c:67
+msgid "\\%-10[top-node] Go to the top node of this document.\n"
+msgstr "\\%-10[top-node] Gå till den översta noden i detta dokument.\n"
+
+#: info/infodoc.c:68
+msgid "\\%-10[dir-node] Go to the main `directory' node.\n"
+msgstr "\\%-10[dir-node] GÃ¥ till huvudkatalognoden.\n"
+
+#: info/infodoc.c:70
+msgid "1...9 Pick the first...ninth item in this node's menu.\n"
+msgstr "1...9 Välj första...nionde objektet i denna nods meny.\n"
+
+#: info/infodoc.c:71
+msgid "\\%-10[last-menu-item] Pick the last item in this node's menu.\n"
+msgstr "\\%-10[last-menu-item] Välj sista objektet i denna nods meny.\n"
+
+#: info/infodoc.c:72
+msgid "\\%-10[menu-item] Pick a menu item specified by name.\n"
+msgstr "\\%-10[menu-item] Välj den namngivna menyposten.\n"
+
+#: info/infodoc.c:73
+msgid "\\%-10[xref-item] Follow a cross reference specified by name.\n"
+msgstr "\\%-10[xref-item] Följ den namngivna korsreferensen.\n"
+
+#: info/infodoc.c:74
+msgid "\\%-10[goto-node] Go to a node specified by name.\n"
+msgstr "\\%-10[goto-node] GÃ¥ till den namngivna noden.\n"
+
+#: info/infodoc.c:76
+msgid "\\%-10[search] Search forward for a specified string.\n"
+msgstr "\\%-10[search] Sök framåt efter en angiven sträng.\n"
+
+#: info/infodoc.c:77
+msgid "\\%-10[search-previous] Search for previous occurrence.\n"
+msgstr "\\%-10[search-previous] Sök efter föregående förekomst.\n"
+
+#: info/infodoc.c:78
+msgid "\\%-10[search-next] Search for next occurrence.\n"
+msgstr "\\%-10[search-next] Sök efter nästa förekomst.\n"
+
+#: info/infodoc.c:79
+msgid ""
+"\\%-10[index-search] Search for a specified string in the index, and\n"
+" select the node referenced by the first entry found.\n"
+msgstr ""
+"\\%-10[index-search] Sök efter en angiven sträng i indexet, och välj\n"
+" noden som refereras av den första posten som hittas.\n"
+
+#: info/infodoc.c:81
+msgid "\\%-10[abort-key] Cancel the current operation.\n"
+msgstr "\\%-10[abort-key] Avbryt pågående åtgärd.\n"
+
+#: info/infodoc.c:89
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"Grundläggande kommandon i Info-fönster\n"
+"**************************************\n"
+
+#: info/infodoc.c:92
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s Avsluta denna hjälp.\n"
+
+#: info/infodoc.c:93
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Avsluta Info helt.\n"
+
+#: info/infodoc.c:94
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Starta Info-handboken.\n"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr " %-10s Gå till nästa nod från denna nod.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr " %-10s Gå till föregående nod från denna nod.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s Gå upp från denna nod.\n"
+
+#: info/infodoc.c:101
+#, c-format
+msgid ""
+" %-10s Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+" %-10s Välj den namngivna menyposten.\n"
+" Att välja en menypost gör att en annan nod väljs.\n"
+
+#: info/infodoc.c:103
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr " %-10s Följ en korsreferens. Läser namnet på en referens.\n"
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr " %-10s Gå till den sista noden i detta fönster.\n"
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr " %-10s Hoppa till nästa hypertextlänk i denna nod.\n"
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s Följ hypertextlänken under markören.\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr " %-10s Gå till \"directory\"-noden. Likvärdigt med \"g (DIR)\".\n"
+
+#: info/infodoc.c:108
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr " %-10s Gå till den översta noden. Likvärdigt med \"g Top\".\n"
+
+#: info/infodoc.c:110
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"Förflyttning inom en nod:\n"
+"-------------------------\n"
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s Rulla en sida framåt.\n"
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s Rulla en sida bakåt.\n"
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s Gå till början på denna nod.\n"
+
+#: info/infodoc.c:115
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s Gå till slutet på denna nod.\n"
+
+#: info/infodoc.c:116
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s Rulla en rad framåt.\n"
+
+#: info/infodoc.c:117
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s Rulla en rad bakåt.\n"
+
+#: info/infodoc.c:119
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"Andra kommandon:\n"
+"----------------\n"
+
+#: info/infodoc.c:121
+#, c-format
+msgid " %-10s Pick first...ninth item in node's menu.\n"
+msgstr " %-10s Välj första...nionde objektet i nodens meny.\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s Välj det sista objektet i nodens meny.\n"
+
+#: info/infodoc.c:125
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr ""
+" %-10s Sök efter en angiven sträng i indexposterna i denna Info-fil,\n"
+" och välj noden som refereras av den första posten som\n"
+" hittas.\n"
+
+#: info/infodoc.c:127
+#, c-format
+msgid ""
+" %-10s Move to node specified by name.\n"
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+" %-10s GÃ¥ till den namngivna noden.\n"
+" Du kan även inkludera ett filnamn, som exempelvis\n"
+" (FILNAMN)NODNAMN.\n"
+
+#: info/infodoc.c:129
+#, c-format
+msgid ""
+" %-10s Search forward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+" %-10s Sök framåt efter en angiven sträng\n"
+" och välj den nod i vilken nästa förekomst hittas.\n"
+
+#: info/infodoc.c:131
+#, c-format
+msgid ""
+" %-10s Search backward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+" %-10s Sök bakåt efter en angiven sträng\n"
+" och välj den nod i vilken nästa förekomst hittas.\n"
+
+#: info/infodoc.c:312
+msgid "The current search path is:\n"
+msgstr "Den aktuella sökvägen är:\n"
+
+#: info/infodoc.c:316
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"Kommandon som är tillgängliga i Info-fönster:\n"
+"\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"Kommandon som är tillgängliga i echo-området:\n"
+"\n"
+
+#: info/infodoc.c:343
+#, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+"Följande kommandon kan endast startas via %s:\n"
+"\n"
+
+#: info/infodoc.c:347
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+"Följande kommandon kan inte startas alls:\n"
+"\n"
+
+#: info/infodoc.c:477
+msgid "Display help message"
+msgstr "Visa hjälpmeddelande"
+
+#: info/infodoc.c:495
+msgid "Visit Info node `(info)Help'"
+msgstr "Besök Info-noden \"(info)Help\""
+
+#: info/infodoc.c:633
+msgid "Print documentation for KEY"
+msgstr "Visa dokumentationen för NYCKEL"
+
+#: info/infodoc.c:645
+#, c-format
+msgid "Describe key: %s"
+msgstr "Beskriv nyckel: %s"
+
+#: info/infodoc.c:656
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s är odefinierad."
+
+#: info/infodoc.c:672 info/infodoc.c:701
+#, c-format
+msgid "%s is undefined."
+msgstr "%s är odefinierad."
+
+#: info/infodoc.c:722
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s är definierad till %s."
+
+#: info/infodoc.c:1146
+msgid "Show what to type to execute a given command"
+msgstr "Visa vad som ska anges för att köra ett angivet kommando"
+
+#: info/infodoc.c:1150
+msgid "Where is command: "
+msgstr "Var är kommando: "
+
+#: info/infodoc.c:1172
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "\"%s\" finns inte på några tangenter"
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s kan endast startas via %s."
+
+#: info/infodoc.c:1183
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s kan startas via %s."
+
+#: info/infodoc.c:1188
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "Det finns ingen funktion med namnet \"%s\""
+
+#: info/infodoc.c:96
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"Välja andra noder:\n"
+"------------------\n"
+
+#: info/infokey.c:170
+msgid "incorrect number of arguments"
+msgstr "felaktigt antal argument"
+
+#: info/infokey.c:201
+#, c-format
+msgid "cannot open input file `%s'"
+msgstr "kan inte öppna indatafilen \"%s\""
+
+#: info/infokey.c:215
+#, c-format
+msgid "cannot create output file `%s'"
+msgstr "kan inte skapa utdatafilen \"%s\""
+
+#: info/infokey.c:226
+#, c-format
+msgid "error writing to `%s'"
+msgstr "fel vid skrivning till \"%s\""
+
+#: info/infokey.c:232
+#, c-format
+msgid "error closing output file `%s'"
+msgstr "fel vid stängning av utdatafilen \"%s\""
+
+#: info/infokey.c:450
+msgid "key sequence too long"
+msgstr "nyckelsekvensen är för lång"
+
+#: info/infokey.c:529
+msgid "missing key sequence"
+msgstr "nyckelsekvens saknas"
+
+#: info/infokey.c:610
+msgid "NUL character (\\000) not permitted"
+msgstr "NUL-tecknet (\\000) är inte tillåtet"
+
+#: info/infokey.c:641
+#, c-format
+msgid "NUL character (^%c) not permitted"
+msgstr "NUL-tecknet (^%c) är inte tillåtet"
+
+#: info/infokey.c:665
+msgid "missing action name"
+msgstr "åtgärdsnamn saknas"
+
+#: info/infokey.c:681 info/infokey.c:756
+msgid "section too long"
+msgstr "avsnittet är för långt"
+
+#: info/infokey.c:688
+#, c-format
+msgid "unknown action `%s'"
+msgstr "okänd åtgärd \"%s\""
+
+#: info/infokey.c:698
+msgid "action name too long"
+msgstr "åtgärdsnamnet är för långt"
+
+#: info/infokey.c:712
+#, c-format
+msgid "extra characters following action `%s'"
+msgstr "extra tecken följer på åtgärden \"%s\""
+
+#: info/infokey.c:723
+msgid "missing variable name"
+msgstr "variabelnamn saknas"
+
+#: info/infokey.c:733
+msgid "missing `=' immediately after variable name"
+msgstr "\"=\" saknas direkt efter variabelnamnet"
+
+#: info/infokey.c:741
+msgid "variable name too long"
+msgstr "variabelnamnet är för långt"
+
+#: info/infokey.c:765
+msgid "value too long"
+msgstr "värdet är för långt"
+
+#: info/infokey.c:890
+#, c-format
+msgid "\"%s\", line %u: "
+msgstr "\"%s\", rad %u: "
+
+#: info/infokey.c:906
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [INPUT-FILE]\n"
+"\n"
+"Compile infokey source file to infokey file. Reads INPUT-FILE (default\n"
+"$HOME/.infokey) and writes compiled key file to (by default) $HOME/.info.\n"
+"\n"
+"Options:\n"
+" --output FILE output to FILE instead of $HOME/.info\n"
+" --help display this help and exit.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"Användning: %s [FLAGGA]... [INDATAFIL]\n"
+"\n"
+"Kompilera infonyckelkällfil till infonyckelfil. Läser INDATAFIL (som\n"
+"standard $HOME/.infokey) och skriver (som standard) den kompilerade\n"
+"nyckelfilen till $HOME/.info.\n"
+"\n"
+"Flaggor:\n"
+" --output FIL generera till FIL istället för $HOME/.info\n"
+" --help visa denna hjälptext och avsluta.\n"
+" --version visa versionsinformation och avsluta.\n"
+
+#: info/infomap.c:955
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "Ignorerar ogiltig infonyckelfil \"%s\" - för liten"
+
+#: info/infomap.c:958
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "Ignorerar ogiltig infonyckelfil \"%s\" - för stor"
+
+#: info/infomap.c:971
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "Fel vid läsning av infonyckelfilen \"%s\" - kort läsning"
+
+#: info/infomap.c:990
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+"Ogiltig infonyckelfil \"%s\" (felaktiga magiska nummer) -- kör infokey för\n"
+"att uppdatera den"
+
+#: info/infomap.c:999
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr ""
+"Din infonyckelfil \"%s\" är för gammal -- kör infokey för att uppdatera den"
+
+#: info/infomap.c:1015
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+"Ogiltig infonyckelfil \"%s\" (felaktig asvnittslängd) -- kör infokey för\n"
+"att uppdatera den"
+
+#: info/infomap.c:1036
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr ""
+"ogiltig infonyckelfil \"%s\" (felaktig avsnittskod) -- kör infokey för att\n"
+"uppdatera den"
+
+#: info/infomap.c:1171
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr "Felaktig data i infonyckelfil -- en del bindningar ignorerades"
+
+#: info/infomap.c:1221
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr "Felaktig data i infonyckelfil -- en del inställningar ignorerades"
+
+#: info/m-x.c:68
+msgid "Read the name of an Info command and describe it"
+msgstr "Läs namnet på ett Info-kommando och beskriv det"
+
+#: info/m-x.c:72
+msgid "Describe command: "
+msgstr "Beskriv kommando: "
+
+#: info/m-x.c:95
+msgid "Read a command name in the echo area and execute it"
+msgstr "Läs ett kommandonamn i echo-området och kör det"
+
+#: info/m-x.c:139
+msgid "Cannot execute an `echo-area' command here."
+msgstr "Kan inte köra ett \"echo-area\"-kommando här."
+
+#: info/m-x.c:153
+#, c-format
+msgid "Undefined command: %s"
+msgstr "Odefinierat kommando: %s"
+
+#: info/m-x.c:159
+msgid "Set the height of the displayed window"
+msgstr "Ställ in höjden på det visade fönstret"
+
+#: info/m-x.c:172
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Ställ in skärmhöjden till (%d): "
+
+#: info/makedoc.c:166 info/makedoc.c:174
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+" Källkodsfiler som grävdes igenom för att göra att denna fil inkluderar:\n"
+"\n"
+
+#: info/makedoc.c:556
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "Kunde inte manipulera filen %s.\n"
+
+#: info/nodemenu.c:30
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+"\n"
+"* Meny:\n"
+" (Fil)Nod Rader Storl. Innehållande fil\n"
+" -------- ----- ------ ----------------"
+
+#: info/nodemenu.c:201
+msgid ""
+"Here is the menu of nodes you have recently visited.\n"
+"Select one from this menu, or use `\\[history-node]' in another window.\n"
+msgstr ""
+"Här är menyn med de noder som du har besökt nyligen.\n"
+"Välj en från denna meny eller använd\"\\[history-node]\" i ett annat "
+"fönster.\n"
+
+#: info/nodemenu.c:223
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr ""
+"Skapa ett fönster som innehåller en meny med alla nyligen besökta noder"
+
+#: info/nodemenu.c:303
+msgid "Select a node which has been previously visited in a visible window"
+msgstr "Välj en nod som har besökts nyligen i ett synligt fönster"
+
+#: info/nodemenu.c:316
+msgid "Select visited node: "
+msgstr "Välj besökt nod: "
+
+#: info/nodemenu.c:336 info/session.c:2578
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "Referensen försvann! (%s)."
+
+#: info/search.c:166
+#, c-format
+msgid "regexp error: %s"
+msgstr "fel i reguljärt uttryck: %s"
+
+#: info/session.c:164
+#, c-format
+msgid ""
+"Welcome to Info version %s. Type \\[get-help-window] for help, \\[menu-item] "
+"for menu item."
+msgstr ""
+"Välkommen till Info version %s. Skriv in \\[get-help-window] för hjälp, "
+"\\[menu-item] för menypost."
+
+#: info/session.c:625
+msgid "Move down to the next line"
+msgstr "Gå ned till nästa rad"
+
+#: info/session.c:661
+msgid "Move up to the previous line"
+msgstr "Gå upp till föregående rad"
+
+#: info/session.c:931
+msgid "Move to the end of the line"
+msgstr "Gå till slutet på raden"
+
+#: info/session.c:942
+msgid "Move to the start of the line"
+msgstr "Gå till början på raden"
+
+# src/menus.c:332
+#: info/session.c:1142
+msgid "Next"
+msgstr "Nästa"
+
+#: info/session.c:1158 info/session.c:1283
+msgid "No more nodes within this document."
+msgstr "Inga fler noder i detta dokument."
+
+#: info/session.c:1309
+msgid "No `Prev' for this node."
+msgstr "Ingen \"Föreg\" för denna nod."
+
+#: info/session.c:1329
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr "Inget \"Prev\" eller \"Up\" för denna nod inom detta dokument."
+
+#: info/session.c:1391
+msgid "Move forwards or down through node structure"
+msgstr "Gå framåt eller nedåt i nodstrukturen"
+
+#: info/session.c:1407
+msgid "Move backwards or up through node structure"
+msgstr "Gå bakåt eller upp i nodstrukturen"
+
+#: info/session.c:1508
+msgid "Scroll forward in this window"
+msgstr "Rulla framåt i detta fönster"
+
+#: info/session.c:1516
+msgid "Scroll forward in this window and set default window size"
+msgstr "Rulla framåt i detta fönster och ställ in standardfönsterstorleken"
+
+#: info/session.c:1524
+msgid "Scroll forward in this window staying within node"
+msgstr "Rulla framåt i detta fönster och stanna inom noden"
+
+#: info/session.c:1532
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr ""
+"Rulla framåt i detta fönster och stanna inom noden och ställ in "
+"standardfönsterstorleken"
+
+#: info/session.c:1540
+msgid "Scroll backward in this window"
+msgstr "Rulla bakåt i detta fönster"
+
+#: info/session.c:1548
+msgid "Scroll backward in this window and set default window size"
+msgstr "Rulla bakåt i detta fönster och ställ in standardfönsterstorleken"
+
+#: info/session.c:1557
+msgid "Scroll backward in this window staying within node"
+msgstr "Rulla bakåt i detta fönster och stanna inom noden"
+
+#: info/session.c:1565
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr ""
+"Rulla bakåt i detta fönster och stanna inom noden och ställ in "
+"standardfönsterstorleken"
+
+#: info/session.c:1573
+msgid "Move to the start of this node"
+msgstr "Gå till början på denna nod"
+
+#: info/session.c:1580
+msgid "Move to the end of this node"
+msgstr "Gå till slutet på denna nod"
+
+#: info/session.c:1587
+msgid "Scroll down by lines"
+msgstr "Rulla nedåt radvis"
+
+#: info/session.c:1604
+msgid "Scroll up by lines"
+msgstr "Rulla uppåt radvis"
+
+#: info/session.c:1622
+msgid "Scroll down by half screen size"
+msgstr "Rulla nedåt med halva skärmstorleken"
+
+#: info/session.c:1648
+msgid "Scroll up by half screen size"
+msgstr "Rulla uppåt med halva skärmstorleken"
+
+#: info/session.c:1677
+msgid "Select the next window"
+msgstr "Välj nästa fönster"
+
+#: info/session.c:1716
+msgid "Select the previous window"
+msgstr "Välj föregående fönster"
+
+#: info/session.c:1767
+msgid "Split the current window"
+msgstr "Dela aktuellt fönster"
+
+#: info/session.c:1848
+msgid "Delete the current window"
+msgstr "Ta bort aktuellt fönster"
+
+#: info/session.c:1856
+msgid "Cannot delete a permanent window"
+msgstr "Kan inte ta bort ett permanent fönster"
+
+#: info/session.c:1888
+msgid "Delete all other windows"
+msgstr "Ta bort alla andra fönster"
+
+#: info/session.c:1934
+msgid "Scroll the other window"
+msgstr "Rulla det andra fönstret"
+
+#: info/session.c:1955
+msgid "Scroll the other window backward"
+msgstr "Rulla det andra fönstret bakåt"
+
+#: info/session.c:1961
+msgid "Grow (or shrink) this window"
+msgstr "Väx (eller krymp) detta fönster"
+
+#: info/session.c:1972
+msgid "Divide the available screen space among the visible windows"
+msgstr "Dela det tillgängliga skärmutrymmet mellan de synliga fönstren"
+
+#: info/session.c:1979
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "Växla tillståndet för radbrytning i det aktuella fönstret"
+
+#: info/session.c:1986
+msgid "Toggle the usage of regular expressions in searches"
+msgstr "Växla användningen av reguljära uttryck i sökningar"
+
+#: info/session.c:1990
+msgid "Using regular expressions for searches."
+msgstr "Använder reguljära uttryck i sökningar."
+
+#: info/session.c:1991
+msgid "Using literal strings for searches."
+msgstr "Använder ordagranna strängar i sökningar."
+
+#: info/session.c:2162
+msgid "Select the Next node"
+msgstr "Välj nästa nod"
+
+#: info/session.c:2170
+msgid "Select the Prev node"
+msgstr "Välj föregående nod"
+
+#: info/session.c:2178
+msgid "Select the Up node"
+msgstr "Välj uppnoden"
+
+#: info/session.c:2185
+msgid "Select the last node in this file"
+msgstr "Välj den sista noden i denna fil"
+
+#: info/session.c:2212 info/session.c:2245
+msgid "This window has no additional nodes"
+msgstr "Detta fönster har inga ytterligare noder"
+
+#: info/session.c:2218
+msgid "Select the first node in this file"
+msgstr "Välj den första noden i denna fil"
+
+#: info/session.c:2252
+msgid "Select the last item in this node's menu"
+msgstr "Välj det sista objektet i denna nods meny"
+
+#: info/session.c:2258
+msgid "Select this menu item"
+msgstr "Välj denna menypost"
+
+#: info/session.c:2291
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "Det finns inte %d poster i denna meny."
+
+#: info/session.c:2485 info/session.c:2486
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Menypost (%s): "
+
+#: info/session.c:2489
+msgid "Menu item: "
+msgstr "Menypost: "
+
+#: info/session.c:2496 info/session.c:2497
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Följ xref (%s): "
+
+#: info/session.c:2500
+msgid "Follow xref: "
+msgstr "Följ xref: "
+
+#: info/session.c:2629
+msgid "Read a menu item and select its node"
+msgstr "Läs en menypost och välj dess nod"
+
+#: info/session.c:2637
+msgid "Read a footnote or cross reference and select its node"
+msgstr "Läs en fotnot eller korsreferens och välj dess nod"
+
+#: info/session.c:2643
+msgid "Move to the start of this node's menu"
+msgstr "Gå till början på denna nods meny"
+
+#: info/session.c:2667
+msgid "Visit as many menu items at once as possible"
+msgstr "Besök så många menyposter som möjligt samtidigt"
+
+#: info/session.c:2695
+msgid "Read a node name and select it"
+msgstr "Läs ett nodnamn och välj det"
+
+#: info/session.c:2750 info/session.c:2755
+msgid "Goto node: "
+msgstr "GÃ¥ till nod: "
+
+#: info/session.c:2819
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "Ingen meny i noden \"%s\"."
+
+#: info/session.c:2865
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "Ingen menypost \"%s\" i noden \"%s\"."
+
+#: info/session.c:2895
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr "Kan inte hitta noden som refereras av \"%s\" i \"%s\"."
+
+#: info/session.c:2945
+msgid "Read a list of menus starting from dir and follow them"
+msgstr "Läs en lista med menyer som börjar med katalog, och följ dem"
+
+#: info/session.c:2947
+msgid "Follow menus: "
+msgstr "Följ menyer: "
+
+#: info/session.c:3140
+msgid "Find the node describing program invocation"
+msgstr "Hitta den nod som beskriver start av programmet"
+
+#: info/session.c:3142
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "Hitta programstartnod för [%s]: "
+
+#: info/session.c:3180
+msgid "Read a manpage reference and select it"
+msgstr "Läs en referens till manualsida och välj den"
+
+#: info/session.c:3184
+msgid "Get Manpage: "
+msgstr "Hämta manualsida: "
+
+#: info/session.c:3214
+msgid "Select the node `Top' in this file"
+msgstr "Välj noden \"Top\" i denna fil"
+
+#: info/session.c:3220
+msgid "Select the node `(dir)'"
+msgstr "Välj noden \"(dir)\""
+
+#: info/session.c:3237 info/session.c:3239
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Döda noden (%s): "
+
+#: info/session.c:3291
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "Kan inte döda noden \"%s\""
+
+#: info/session.c:3301
+msgid "Cannot kill the last node"
+msgstr "Kan inte döda den sista noden"
+
+#: info/session.c:3387
+msgid "Select the most recently selected node"
+msgstr "Välj den senast valda noden"
+
+#: info/session.c:3393
+msgid "Kill this node"
+msgstr "Döda denna nod"
+
+#: info/session.c:3401
+msgid "Read the name of a file and select it"
+msgstr "Läs namnet på en fil och välj den"
+
+#: info/session.c:3405
+msgid "Find file: "
+msgstr "Sök fil: "
+
+#: info/session.c:3422
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "Kan inte hitta \"%s\"."
+
+#: info/session.c:3465 info/session.c:3583
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "Kunde inte skapa utdatafilen \"%s\"."
+
+#: info/session.c:3479 info/session.c:3601 info/session.c:3661
+msgid "Done."
+msgstr "Färdig."
+
+#: info/session.c:3534
+#, c-format
+msgid "Writing node %s..."
+msgstr "Skriver noden %s..."
+
+#: info/session.c:3610
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr "Skicka innehållet i denna nod i rör till INFO_PRINT_COMMAND"
+
+#: info/session.c:3645
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "Kan inte öppna rör till \"%s\"."
+
+#: info/session.c:3651
+#, c-format
+msgid "Printing node %s..."
+msgstr "Skriver ut noden %s..."
+
+#: info/session.c:3900
+msgid "Search continued from the end of the document."
+msgstr "Sökningen fortsatte från slutet av dokumentet."
+
+#: info/session.c:3905
+msgid "Search continued from the beginning of the document."
+msgstr "Sökningen fortsatte från början av dokumentet."
+
+#: info/session.c:3922
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "Söker i underfilen %s..."
+
+#: info/session.c:3979
+msgid "Read a string and search for it case-sensitively"
+msgstr "Läs en sträng och sök efter den skiftlägeskänsligt"
+
+#: info/session.c:3986
+msgid "Read a string and search for it"
+msgstr "Läs en sträng och sök efter den"
+
+#: info/session.c:3994
+msgid "Read a string and search backward for it"
+msgstr "Läs en sträng och sök baklänges efter den"
+
+# This is broken
+#
+# sprintf (prompt, _("%s%sfor string [%s]: "),
+# direction < 0 ? _("Search backward") : _("Search"),
+# case_sensitive ? _(" case-sensitively ") : _(" "),
+# search_string);
+#
+# Never split a sentence like this, use multiple complete messages instead.
+# If you split a sentence like this, you actually mark them for seperate
+# translation, but they shouldn't be translated seperately, since they
+# belong to the same sentence! All grammar/wording/sentence rules affect
+# how the words interact in the sentence, and you cannot take them out of
+# their sentence context and expect the same grammar to be valid. If you do,
+# you assume things about languages that are hardly true for any language
+# but the original one.
+# Make this several, complete messages, and move the logic out of the
+# messages themselves. Yes, this will result in many more messages, but
+# those will be translatable, while the current design isn't.
+#
+#: info/session.c:4030 info/session.c:4036
+#, c-format
+msgid "%s%s%s [%s]: "
+msgstr "%s%s%s [%s]: "
+
+#: info/session.c:4031 info/session.c:4037
+msgid "Regexp search"
+msgstr "Sökning med reguljära uttryck"
+
+#: info/session.c:4032 info/session.c:4038
+msgid " case-sensitively"
+msgstr " skiljandes på VERSALER/gemener"
+
+#: info/session.c:4033 info/session.c:4039
+msgid " backward"
+msgstr " baklänges"
+
+#: info/session.c:4037
+msgid "Search"
+msgstr "Sök"
+
+#: info/session.c:4079
+msgid "Search failed."
+msgstr "Sökningen misslyckades."
+
+#: info/session.c:4097
+msgid "Repeat last search in the same direction"
+msgstr "Upprepa den senaste sökningen i samma riktning"
+
+#: info/session.c:4100 info/session.c:4110
+msgid "No previous search string"
+msgstr "Ingen tidigare söksträng"
+
+#: info/session.c:4107
+msgid "Repeat last search in the reverse direction"
+msgstr "Upprepa den senaste sökningen i omvänd riktning"
+
+#: info/session.c:4126 info/session.c:4132
+msgid "Search interactively for a string as you type it"
+msgstr "Sök interaktivt efter en sträng allteftersom du skriver den"
+
+#: info/session.c:4212
+msgid "Regexp I-search backward: "
+msgstr "I-sök med reguljärt uttryck baklänges: "
+
+#: info/session.c:4213
+msgid "I-search backward: "
+msgstr "I-sök baklänges: "
+
+#: info/session.c:4215
+msgid "Regexp I-search: "
+msgstr "I-sök med reguljärt uttryck: "
+
+#: info/session.c:4216
+msgid "I-search: "
+msgstr "I-sök: "
+
+#: info/session.c:4241 info/session.c:4243
+msgid "Failing "
+msgstr "Misslyckas "
+
+#: info/session.c:4734
+msgid "Move to the previous cross reference"
+msgstr "Gå till föregående korsreferens"
+
+#: info/session.c:4752
+msgid "Move to the next cross reference"
+msgstr "Gå till nästa korsreferens"
+
+#: info/session.c:4774
+msgid "Select reference or menu item appearing on this line"
+msgstr "Välj referens eller menypost som finns på denna rad"
+
+#: info/session.c:4797
+msgid "Cancel current operation"
+msgstr "Avbryt pågående åtgärd"
+
+#: info/session.c:4804
+msgid "Quit"
+msgstr "Avsluta"
+
+#: info/session.c:4813
+msgid "Move the cursor to a specific line of the window"
+msgstr "Flytta markören till en specifik rad i fönstret"
+
+#: info/session.c:4845
+msgid "Redraw the display"
+msgstr "Rita om displayen"
+
+#: info/session.c:4882
+msgid "Quit using Info"
+msgstr "Avsluta användandet av Info"
+
+#: info/session.c:4895
+msgid "Run command bound to this key's lowercase variant"
+msgstr "Kör kommando som är knutet till denna tangents gemena variant"
+
+#: info/session.c:4906
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "Okänt kommando (%s)."
+
+#: info/session.c:4909
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "\"%s\" är ogiltigt"
+
+#: info/session.c:4910
+#, c-format
+msgid "`%s' is invalid"
+msgstr "\"%s\" är ogiltigt"
+
+#: info/session.c:5125
+msgid "Add this digit to the current numeric argument"
+msgstr "Lägg till denna siffra till det aktuella numeriska argumentet"
+
+#: info/session.c:5134
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "Börja (eller multiplicera med 4) det numeriska argumentet"
+
+#: info/session.c:5149
+msgid "Internally used by \\[universal-argument]"
+msgstr "Används internt av \\[universal-argument]"
+
+#: info/tilde.c:336
+#, c-format
+msgid "readline: Out of virtual memory!\n"
+msgstr "readline: Slut på virtuellt minne!\n"
+
+#: info/variables.c:37
+msgid "When \"On\", footnotes appear and disappear automatically"
+msgstr "När detta är \"On\" visas och försvinner fotnoter automatiskt"
+
+#: info/variables.c:41
+msgid "When \"On\", creating or deleting a window resizes other windows"
+msgstr ""
+"När detta är \"On\" ändrar skapande eller borttagande av ett fönster\n"
+"storleken på andra fönster"
+
+#: info/variables.c:45
+msgid "When \"On\", flash the screen instead of ringing the bell"
+msgstr ""
+"När detta är \"On\" blinkar skärmen till istället för att klockan ringer"
+
+#: info/variables.c:49
+msgid "When \"On\", errors cause the bell to ring"
+msgstr "När detta är \"On\" gör fel att klockan ringer"
+
+#: info/variables.c:53
+msgid "When \"On\", Info garbage collects files which had to be uncompressed"
+msgstr "När detta är \"On\" skräpsamlar Info filer som behövde packas upp"
+
+#: info/variables.c:56
+msgid "When \"On\", the portion of the matched search string is highlighted"
+msgstr "När detta är \"On\" markeras delen av den matchade söksträngen"
+
+#: info/variables.c:60
+msgid "Controls what happens when scrolling is requested at the end of a node"
+msgstr "Styr vad som händer då rullning begärs i slutet på en nod"
+
+#: info/variables.c:65
+msgid "Same as scroll-behaviour"
+msgstr "Samma som \"scroll-behaviour\""
+
+#: info/variables.c:69
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr "Antalet rader att rulla då markören flyttas utanför fönstret"
+
+#: info/variables.c:73
+msgid "Controls whether scroll-behavior affects cursor movement commands"
+msgstr "Styr huruvida \"scroll-behavior\" påverkar flyttkommandon för markören"
+
+#: info/variables.c:77
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr "När detta är \"On\" accepterar och visar Info ISO Latin-tecken"
+
+#: info/variables.c:81
+msgid ""
+"What to do when a scrolling command is issued at the end of the last node"
+msgstr ""
+"Vad som ska göras då ett rullningskommando ges i slutet på den sista noden"
+
+#: info/variables.c:88
+msgid "Explain the use of a variable"
+msgstr "Förklara användandet av en variabel"
+
+#: info/variables.c:94
+msgid "Describe variable: "
+msgstr "Beskriv variabel: "
+
+#: info/variables.c:113
+msgid "Set the value of an Info variable"
+msgstr "Ställ in värdet på en Info-variabel"
+
+#: info/variables.c:119
+msgid "Set variable: "
+msgstr "Ställ in variabel: "
+
+#: info/variables.c:137
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "Ställ in %s till värdet (%d): "
+
+#: info/variables.c:178
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "Ställ in %s till värdet (%s): "
+
+#: info/window.c:1026
+msgid "--*** Tags out of Date ***"
+msgstr "--*** För gamla taggar ***"
+
+#: info/window.c:1037
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), rader ----, "
+
+#: info/window.c:1044
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d rader --%s--"
+
+#: info/window.c:1048
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d rader --%s--"
+
+#: info/window.c:1055
+#, c-format
+msgid " Subfile: %s"
+msgstr " Underfil: %s"
+
+#: install-info/install-info.c:221
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: varning: "
+
+# char *s = concat ("", strerror (errno), _(" for %s"));
+#
+#: install-info/install-info.c:270
+#, c-format
+msgid " for %s"
+msgstr " för %s"
+
+#: install-info/install-info.c:500
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr "\tProva \"%s --help\" för en fullständig lista med flaggor.\n"
+
+#: install-info/install-info.c:508
+#, c-format
+msgid "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+msgstr "Användning: %s [FLAGGA]... [INFO-FIL [KATALOGFIL]]\n"
+
+#: install-info/install-info.c:510
+msgid "Add or remove entries in INFO-FILE from the Info directory DIR-FILE."
+msgstr ""
+"Lägg till eller ta bort poster i INFO-FIL från Info-katalogen KATALOGFIL."
+
+#: install-info/install-info.c:513
+msgid ""
+"Options:\n"
+" --debug report what is being done.\n"
+" --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+" don't insert any new entries.\n"
+" --description=TEXT the description of the entry is TEXT; used with\n"
+" the --name option to become synonymous with the\n"
+" --entry option.\n"
+" --dir-file=NAME specify file name of Info directory file;\n"
+" equivalent to using the DIR-FILE argument.\n"
+" --dry-run same as --test."
+msgstr ""
+"Flaggor:\n"
+" --debug rapportera vad som görs.\n"
+" --delete ta bort existerande poster för INFO-FIL från "
+"KATALOGFIL\n"
+" och infoga inte några nya poster.\n"
+" --description=TEXT postens beskrivning är TEXT. Detta används tillsammans\n"
+" med flaggan --name för att den ska bli likvärdig med\n"
+" flaggan --entry.\n"
+" --dir-file=NAMN ange filnamnet på Info-katalogfilen. Detta motsvarar\n"
+" användning av argumentet KATALOGFIL.\n"
+" --dry-run samma som --test."
+
+#: install-info/install-info.c:525
+msgid ""
+" --entry=TEXT insert TEXT as an Info directory entry.\n"
+" TEXT is written as an Info menu item line followed\n"
+" by zero or more extra lines starting with "
+"whitespace.\n"
+" If you specify more than one entry, all are added.\n"
+" If you don't specify any entries, they are determined\n"
+" from information in the Info file itself.\n"
+" When removing, TEXT specifies the entry to remove.\n"
+" TEXT is only removed as a last resort, if the\n"
+" entry as determined from the Info file is not "
+"present,\n"
+" and the basename of the Info file isn't found either."
+msgstr ""
+" --entry=TEXT infoga TEXT som en Info-katalogpost.\n"
+" TEXT skrivs som en Info-menypostrad som följs av\n"
+" noll eller fler extra rader som börjar med tomrum.\n"
+" Om du anger mer än en post kommer alla att läggas\n"
+" till. Om du inte anger några poster kommer de att\n"
+" avgöras från information i själva Info-filen.\n"
+" Vid borttagning anger TEXT posten som ska tas bort.\n"
+" TEXT tas endast bort som en sista utväg, om den\n"
+" post som anges utav Info-filen inte finns och\n"
+" basnamnet för Info-filen inte heller kan hittas."
+
+#: install-info/install-info.c:537
+msgid ""
+" --help display this help and exit.\n"
+" --info-dir=DIR same as --dir-file=DIR/dir.\n"
+" --info-file=FILE specify Info file to install in the directory;\n"
+" equivalent to using the INFO-FILE argument.\n"
+" --item=TEXT same as --entry=TEXT.\n"
+" --keep-old do not replace entries, or remove empty sections.\n"
+" --menuentry=TEXT same as --name=TEXT.\n"
+" --name=TEXT the name of the entry is TEXT; used with --description\n"
+" to become synonymous with the --entry option.\n"
+" --no-indent do not format new entries in the DIR file.\n"
+" --quiet suppress warnings."
+msgstr ""
+" --help visa denna hjälptext och avsluta.\n"
+" --info-dir=KAT samma som --dir-file=KAT/dir.\n"
+" --info-file=FIL ange Info-fil att installera i katalogen.\n"
+" Detta motsvarar användning av argumentet INFO-FIL.\n"
+" --item=TEXT samma som --entry=TEXT.\n"
+" --keep-old ersätt inte poster och ta inte bort tomma avsnitt.\n"
+" --menuentry=TEXT samma som --name=TEXT.\n"
+" --name=TEXT namnet på posten är TEXT. Används tillsammans med\n"
+" --description för att bli likvärdigt med flaggan\n"
+" --entry.\n"
+" --no-indent formatera inte nya poster i filen KAT.\n"
+" --quiet undertryck varningar."
+
+#: install-info/install-info.c:550
+msgid ""
+" --regex=R put this file's entries in all sections that match the\n"
+" regular expression R (ignoring case).\n"
+" --remove same as --delete.\n"
+" --remove-exactly only remove if the info file name matches exactly;\n"
+" suffixes such as .info and .gz are not ignored.\n"
+" --section=SEC put entries in section SEC of the directory.\n"
+" If you specify more than one section, all the entries\n"
+" are added in each of the sections.\n"
+" If you don't specify any sections, they are "
+"determined\n"
+" from information in the Info file itself.\n"
+" --section R SEC equivalent to --regex=R --section=SEC --add-once."
+msgstr ""
+" --regex=R placera denna fils poster i alla avsnitt som matchar\n"
+" det reguljära uttrycket R (och ignorera skiftläge).\n"
+" --remove samma som --delete.\n"
+" --remove-exactly ta endast bort om Info-filnamnet matchar exakt.\n"
+" Filändelser som till exempel .info- och .gz ignoreras\n"
+" inte.\n"
+" --section=AVSNITT placera poster i avsnittet AVSNITT i katalogen. Om du\n"
+" anger mer än ett avsnitt kommer alla poster att "
+"läggas\n"
+" till i varje avsnitt. Om du inte anger några avsnitt\n"
+" kommer de att bestämmas utifrån information i själva\n"
+" Info-filen.\n"
+" --section R AVSNITT likvärdigt med --regex=R --section=AVSNITT --add-once."
+
+#: install-info/install-info.c:563
+msgid ""
+" --silent suppress warnings.\n"
+" --test suppress updating of DIR-FILE.\n"
+" --version display version information and exit."
+msgstr ""
+" --silent undertryck varningar.\n"
+" --test undertryck uppdatering av KATALOGFIL.\n"
+" --version visa versionsinformation och avsluta."
+
+#: install-info/install-info.c:570
+msgid ""
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"Skicka felrapporter till bug-texinfo@gnu.org,\n"
+"allmänna frågor och diskussion till help-texinfo@gnu.org\n"
+"och synpunkter på översättningen till tp-sv@listor.tp-sv.se.\n"
+"Hemsida för texinfo: http://www.gnu.org/software/texinfo/"
+
+#: install-info/install-info.c:597
+#, c-format
+msgid ""
+"This is the file .../info/dir, which contains the\n"
+"topmost node of the Info hierarchy, called (dir)Top.\n"
+"The first time you invoke Info you start off looking at this node.\n"
+"\n"
+"%s\tThis is the top of the INFO tree\n"
+"\n"
+" This (the Directory node) gives a menu of major topics.\n"
+" Typing \"q\" exits, \"?\" lists all Info commands, \"d\" returns here,\n"
+" \"h\" gives a primer for first-timers,\n"
+" \"mEmacs<Return>\" visits the Emacs manual, etc.\n"
+"\n"
+" In Emacs, you can click mouse button 2 on a menu item or cross reference\n"
+" to select it.\n"
+"\n"
+"%s\n"
+msgstr ""
+"Detta är filen .../info/dir som innehåller den översta noden i\n"
+"Info-hierarkin som kallas (kat)Top.\n"
+"Första gången du använder Info börjar du med denna nod.\n"
+"\n"
+"%s\tDetta är översta noden i INFO-trädet\n"
+"\n"
+" Denna nod (katalognoden) erbjuder en meny med huvudrubriker.\n"
+" Att skriva \"q\" avslutar, \"?\" visar alla Info-kommandon, \"d\"\n"
+" återvänder hit, \"h\" visar en hjälp för förstagångsanvändare,\n"
+" \"mEmacs<Retur>\" besöker Emacs-manualen, osv.\n"
+"\n"
+" I Emacs kan du klicka med musknapp 2 på en menypost eller korsreferens\n"
+" för att välja den.\n"
+"\n"
+"%s\n"
+
+#: install-info/install-info.c:622
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr "%s: kunde inte läsa (%s) och kunde inte skapa (%s)\n"
+
+#: install-info/install-info.c:715
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: tom fil"
+
+#: install-info/install-info.c:1046 install-info/install-info.c:1086
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "START-INFO-DIR-ENTRY utan matchande END-INFO-DIR-ENTRY"
+
+#: install-info/install-info.c:1081
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "END-INFO-DIR-ENTRY utan matchande START-INFO-DIR-ENTRY"
+
+#: install-info/install-info.c:1946 install-info/install-info.c:1956
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr "%s: har redan katalogfilen: %s\n"
+
+#: install-info/install-info.c:2036
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: Ange Info-filen endast en gång.\n"
+
+#: install-info/install-info.c:2069
+#, c-format
+msgid "Extra regular expression specified, ignoring `%s'"
+msgstr "Extra reguljärt uttryck angivet, ignorerar \"%s\""
+
+#: install-info/install-info.c:2081
+#, c-format
+msgid "Error in regular expression `%s': %s"
+msgstr "Fel i reguljära uttrycket \"%s\": %s"
+
+#: install-info/install-info.c:2139
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "för många kommandoradsargument \"%s\""
+
+#: install-info/install-info.c:2143
+msgid "No input file specified; try --help for more information."
+msgstr "Ingen indatafil angiven; prova --help för mer information."
+
+#: install-info/install-info.c:2146
+msgid "No dir file specified; try --help for more information."
+msgstr "Ingen katalogfil angiven; prova --help för mer information."
+
+#: install-info/install-info.c:2288
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "ingen info-katalogpost i \"%s\""
+
+#: install-info/install-info.c:2536
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "inga poster hittades för \"%s\"; ingenting togs bort"
+
+#: lib/xexit.c:54
+msgid "ferror on stdout\n"
+msgstr "ferror-fel på standard ut\n"
+
+#: lib/xexit.c:59
+msgid "fflush error on stdout\n"
+msgstr "fflush-fel på standard ut\n"
+
+#: makeinfo/cmds.c:582 makeinfo/cmds.c:604
+#, c-format
+msgid "arguments to @%s ignored"
+msgstr "argument till @%s ignorerades"
+
+# This is broken
+#
+# The translator should not need to translate this - it is all present
+# in libc and can be used with nl_langinfo(), strftime() and friends.
+#
+#: makeinfo/cmds.c:779
+msgid "January"
+msgstr "januari"
+
+#: makeinfo/cmds.c:779
+msgid "February"
+msgstr "februari"
+
+#: makeinfo/cmds.c:779
+msgid "March"
+msgstr "mars"
+
+#: makeinfo/cmds.c:779
+msgid "April"
+msgstr "april"
+
+#: makeinfo/cmds.c:779
+msgid "May"
+msgstr "maj"
+
+#: makeinfo/cmds.c:780
+msgid "June"
+msgstr "juni"
+
+#: makeinfo/cmds.c:780
+msgid "July"
+msgstr "juli"
+
+#: makeinfo/cmds.c:780
+msgid "August"
+msgstr "augusti"
+
+#: makeinfo/cmds.c:780
+msgid "September"
+msgstr "september"
+
+#: makeinfo/cmds.c:780
+msgid "October"
+msgstr "oktober"
+
+#: makeinfo/cmds.c:781
+msgid "November"
+msgstr "november"
+
+#: makeinfo/cmds.c:781
+msgid "December"
+msgstr "december"
+
+#: makeinfo/cmds.c:1131
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "osannolikt tecken %c i @var"
+
+#: makeinfo/cmds.c:1174
+msgid "@sc argument all uppercase, thus no effect"
+msgstr ""
+"@sc-argumentet är enbart med stora bokstäver, därför har det ingen effekt"
+
+#: makeinfo/cmds.c:1229
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "\"{\" förväntades, men såg \"%c\""
+
+#: makeinfo/cmds.c:1269
+msgid "end of file inside verb block"
+msgstr "filslut inuti verb-block"
+
+#: makeinfo/cmds.c:1277
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "\"}\" förväntades, men såg \"%c\""
+
+# Är det kombinationen "@strong{Note:.." eller bara @strong{} rent allmänt som
+# orsakar problem?
+#: makeinfo/cmds.c:1308
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+"@strong{Obs...} skapar en falsk korsreferens i Info; formulera om för att "
+"undvika detta"
+
+#: makeinfo/cmds.c:1504
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s är föråldrat"
+
+#: makeinfo/cmds.c:1612
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "@sp kräver ett positivt numeriskt argument, inte \"%s\""
+
+#: makeinfo/cmds.c:2023 makeinfo/footnote.c:81
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "Felaktigt argument till %c%s"
+
+#: makeinfo/cmds.c:2033 makeinfo/makeinfo.c:4317
+msgid "asis"
+msgstr "oförändrad"
+
+#: makeinfo/cmds.c:2035 makeinfo/cmds.c:2065 makeinfo/makeinfo.c:4319
+msgid "none"
+msgstr "ingen"
+
+#: makeinfo/cmds.c:2049
+#, c-format
+msgid "Bad argument to @%s"
+msgstr "Felaktigt argument till @%s"
+
+#: makeinfo/cmds.c:2063
+msgid "insert"
+msgstr "infoga"
+
+#: makeinfo/cmds.c:2079
+#, c-format
+msgid "Bad argument to @%s: %s"
+msgstr "Felaktigt argument till @%s: %s"
+
+#: makeinfo/cmds.c:2162
+#, c-format
+msgid "Expected @%s on or off, not `%s'"
+msgstr "Förväntade @%s on eller off, inte \"%s\""
+
+#: makeinfo/cmds.c:2182
+#, c-format
+msgid "Only @%s 10 or 11 is supported, not `%s'"
+msgstr "Endast @%s 10 eller 11 stöds, inte \"%s\""
+
+#: makeinfo/defun.c:83
+msgid "Missing `}' in @def arg"
+msgstr "\"}\" saknas i @def-argumentet"
+
+#: makeinfo/defun.c:711
+#, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr "Måste vara i \"@%s\"-omgivning för att använda \"@%s\""
+
+#: makeinfo/files.c:434
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:637
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr "\"%s\" utelämnades innan utdatafilnamnet"
+
+#: makeinfo/files.c:645
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr "\"%s\" utelämnades efter skrivning till standard ut"
+
+#: makeinfo/files.c:693
+msgid "Output buffer not empty."
+msgstr "Utdatabufferten är inte tom."
+
+#: makeinfo/float.c:181
+#, c-format
+msgid "Requested float type `%s' not previously used"
+msgstr "Begärda flyttalstypen \"%s\" har inte tidigare använts"
+
+#: makeinfo/float.c:376 makeinfo/float.c:382 makeinfo/index.c:959
+#: makeinfo/index.c:965
+msgid "See "
+msgstr "Se "
+
+#: makeinfo/footnote.c:149
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "\"%c%s\" behöver ett argument \"{...}\", inte bara \"%s\""
+
+#: makeinfo/footnote.c:164
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "Ingen avslutande klammer för fotnoten \"%s\""
+
+#: makeinfo/footnote.c:197
+msgid "Footnote defined without parent node"
+msgstr "Fotnoten definierad utan föräldernod"
+
+#: makeinfo/footnote.c:209
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "Fotnoter inuti fotnoter är inte tillåtet"
+
+#: makeinfo/footnote.c:301 makeinfo/index.c:187
+msgid "Footnotes"
+msgstr "Fotnoter"
+
+#: makeinfo/html.c:91
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr "%s: kunde inte öppna --css-fil: %s"
+
+#: makeinfo/html.c:180
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr "%s:%d: --css-fil slutade med kommentar"
+
+# to pop?
+#: makeinfo/html.c:426
+msgid "[unexpected] no html tag to pop"
+msgstr "[oväntat] ingen html-tagg att poppa"
+
+#: makeinfo/html.c:800
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "[oväntat] ogiltigt nodnamn: \"%s\""
+
+#: makeinfo/index.c:167
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "Okänt index \"%s\""
+
+#: makeinfo/index.c:232
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr "Info kan inte hantera \":\" i indexposten \"%s\""
+
+#: makeinfo/index.c:410
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "Indexet \"%s\" finns redan"
+
+#: makeinfo/index.c:453
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "Okänt index \"%s\" och/eller \"%s\" i @synindex"
+
+#: makeinfo/index.c:676
+msgid "(line )"
+msgstr "(rad )"
+
+#: makeinfo/index.c:684
+#, c-format
+msgid "(line %*d)"
+msgstr "(rad %*d)"
+
+#: makeinfo/index.c:765
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "Okänt index \"%s\" i @printindex"
+
+#: makeinfo/index.c:834
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "Posten för index \"%s\" är utanför alla noder"
+
+#: makeinfo/index.c:837 makeinfo/index.c:873
+msgid "(outside of any node)"
+msgstr "(utanför alla noder)"
+
+#: makeinfo/insertion.c:161
+msgid "@item not allowed in argument to @itemize"
+msgstr "@item är inte tillåtet i argument till @itemize"
+
+#: makeinfo/insertion.c:242
+msgid "Broken-Type in insertion_type_pname"
+msgstr "Felaktig typ i insertion_type_pname"
+
+#: makeinfo/insertion.c:338
+msgid "Enumeration stack overflow"
+msgstr "Uppräkningsstacken har flödat över"
+
+#: makeinfo/insertion.c:370
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "bokstaveringen har flödat över, startar om vid %c"
+
+#: makeinfo/insertion.c:639
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s kräver ett argument: formateraren för %citem"
+
+#: makeinfo/insertion.c:727
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr "%cfloat-omgivningar kan inte nästlas"
+
+#: makeinfo/insertion.c:981
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "\"@end\" förväntade \"%s\", men såg \"%s\""
+
+#: makeinfo/insertion.c:1349
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "Inget matchande \"%cend %s\""
+
+#: makeinfo/insertion.c:1618
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s kräver bokstav eller siffra"
+
+#: makeinfo/insertion.c:1718
+msgid "end of file inside verbatim block"
+msgstr "filslut inuti bokstavligt block"
+
+#: makeinfo/insertion.c:1942
+#, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "@%s är inte meningsfullt utanför \"@float\"-omgivning"
+
+#: makeinfo/insertion.c:1978
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "@menu sågs innan första @node, skapar \"Top\"-nod"
+
+#: makeinfo/insertion.c:1979
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr "din @top-nod ska kanske packas i @ifnottex istället för @ifinfo?"
+
+#: makeinfo/insertion.c:1991
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "@detailmenu sågs innan första noden, skapar \"Top\"-nod"
+
+#: makeinfo/insertion.c:2047
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr ""
+"@%s är inte meningsfullt utanför \"@titlepage\"- och \"@quotation\"-omgivning"
+
+#: makeinfo/insertion.c:2061
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "@%s är inte meningsfullt utanför \"@titlepage\"-omgivning"
+
+#: makeinfo/insertion.c:2092
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "Ensamt \"%c%s\""
+
+#: makeinfo/insertion.c:2097
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "\"%c%s\" kräver någonting efter sig"
+
+#: makeinfo/insertion.c:2103
+#, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "Felaktigt argument \"%s\" till \"@%s\", använder \"%s\""
+
+#: makeinfo/insertion.c:2200
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "@%s är inte meningsfullt inuti \"@%s\"-block"
+
+#: makeinfo/insertion.c:2209
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "@itemx är inte meningsfullt inuti \"%s\"-block"
+
+#: makeinfo/insertion.c:2383
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "%c%s hittades utanför ett insättningsblock"
+
+#: makeinfo/lang.c:1218
+#, c-format
+msgid "no default territory known for language `%s'"
+msgstr "inget standardterritorium är känt för språket \"%s\""
+
+#: makeinfo/lang.c:1281
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr "%s är inte en giltig landskod enligt ISO 639"
+
+#: makeinfo/lang.c:1399
+#, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "okänt kodningsnamn \"%s\""
+
+#: makeinfo/lang.c:1407
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "tyvärr, kodningen \"%s\" stöds inte"
+
+#: makeinfo/lang.c:1492
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "ogiltigt kodat tecken \"%s\""
+
+#: makeinfo/lang.c:1800
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr "%c%s förväntar \"i\" eller \"j\" som argument, inte \"%c\""
+
+#: makeinfo/lang.c:1804
+#, c-format
+msgid "%c%s expects a single character `i' or `j' as argument"
+msgstr "%c%s förväntar ett ensamt tecken \"i\" eller \"j\" som argument"
+
+#: makeinfo/macro.c:128
+#, c-format
+msgid "macro `%s' previously defined"
+msgstr "makrot \"%s\" är redan definierat"
+
+#: makeinfo/macro.c:132
+#, c-format
+msgid "here is the previous definition of `%s'"
+msgstr "här är den tidigare definitionen av \"%s\""
+
+#: makeinfo/macro.c:359
+#, c-format
+msgid "\\ in macro expansion followed by `%s' instead of parameter name"
+msgstr "\\ i makroutökning följdes av \"%s\" istället för parameternamn"
+
+#: makeinfo/macro.c:401
+#, c-format
+msgid "Macro `%s' called on line %d with too many args"
+msgstr "Makrot \"%s\" anropades på rad %d med för många argument"
+
+#: makeinfo/macro.c:580
+#, c-format
+msgid "%cend macro not found"
+msgstr "Makrot %cend hittades inte"
+
+#: makeinfo/macro.c:591
+msgid "@allow-recursion is deprecated; please use @rmacro instead"
+msgstr "@allow-recursion är föråldrat; använd @rmacro istället"
+
+#: makeinfo/macro.c:606
+msgid "@quote-arg is deprecated; arguments are quoted by default"
+msgstr "@quote-arg är föråldrat; argument är citerade som standard"
+
+#: makeinfo/macro.c:649
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "@end %s och @%s passar inte"
+
+#: makeinfo/makeinfo.c:188
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "För många fel! Gav upp.\n"
+
+#: makeinfo/makeinfo.c:306
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: varning: "
+
+#: makeinfo/makeinfo.c:325 makeinfo/makeinfo.c:2340
+#, c-format
+msgid "Misplaced %c"
+msgstr "Felplacerat %c"
+
+#: makeinfo/makeinfo.c:344
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Prova \"%s --help\" för mer information.\n"
+
+#: makeinfo/makeinfo.c:347
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "Användning: %s [FLAGGA]... TEXINFO-FIL...\n"
+
+#: makeinfo/makeinfo.c:350
+msgid ""
+"Translate Texinfo source documentation to various other formats, by default\n"
+"Info files suitable for reading online with Emacs or standalone GNU Info.\n"
+msgstr ""
+"Översätt Texinfo-källdokumentation till diverse andra format, som standard\n"
+"infofiler som är lämpliga för läsning med Emacs eller GNU Info.\n"
+
+#: makeinfo/makeinfo.c:354
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\n"
+" --document-language=STR locale to use in translating Texinfo keywords\n"
+" for the output document (default C).\n"
+" --force preserve output even if errors.\n"
+" --help display this help and exit.\n"
+" --no-validate suppress node cross-reference validation.\n"
+" --no-warn suppress warnings (but not errors).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"Allmänna flaggor:\n"
+" --error-limit=ANTAL avsluta efter ANTAL fel (standardvärde %d).\n"
+" --document-language=STR lokal att använda vid översättning av\n"
+" Texinfo-nyckelord för utdatadokumentet\n"
+" (standardvärde C).\n"
+" --force bevara utdata även om fel.\n"
+" --help visa denna hjälptext och avsluta.\n"
+" --no-validate undertryck korsreferensvalidering av noder.\n"
+" --no-warn undertryck varningar (men inte fel).\n"
+" -v, --verbose förklara vad som görs.\n"
+" --version visa versionsinformation och avsluta.\n"
+
+#: makeinfo/makeinfo.c:369
+#, no-wrap
+msgid ""
+"Output format selection (default is to produce Info):\n"
+" --docbook output Docbook XML rather than Info.\n"
+" --html output HTML rather than Info.\n"
+" --xml output Texinfo XML rather than Info.\n"
+" --plaintext output plain text rather than Info.\n"
+msgstr ""
+"Val av utdataformat (standard är att producera Info):\n"
+" --docbook generera Docbook XML istället för Info.\n"
+" --html generera HTML istället för Info.\n"
+" --xml generera Texinfo XML istället för Info.\n"
+" --plaintext generera vanlig text istället för Info.\n"
+
+#: makeinfo/makeinfo.c:377
+msgid ""
+"General output options:\n"
+" -E, --macro-expand=FILE output macro-expanded source to FILE,\n"
+" ignoring any @setfilename.\n"
+" --no-headers suppress node separators, Node: lines, and "
+"menus\n"
+" from Info output (thus producing plain "
+"text)\n"
+" or from HTML (thus producing shorter "
+"output);\n"
+" also, write to standard output by default.\n"
+" --no-split suppress the splitting of Info or HTML "
+"output,\n"
+" generate only one output file.\n"
+" --number-sections output chapter and sectioning numbers.\n"
+" -o, --output=FILE output to FILE (or directory if split HTML).\n"
+msgstr ""
+"Allmänna utdataflaggor:\n"
+" -E, --macro-expand=FIL generera makroexpanderad källkod till FIL,\n"
+" ignorera alla @setfilename.\n"
+" --no-headers undertryck nodseparatorer, Node:-rader och\n"
+" menyer från Info-utdata (och skapa\n"
+" därigenom vanlig text) eller från HTML\n"
+" (och producera därigenom kortare utdata).\n"
+" Skriv även till standard ut som standard.\n"
+" --no-split undertryck delning av Info eller HTML-utdata,\n"
+" generera endast en utdatafil.\n"
+" --number-sections generera kapitel- och avsnittsnummer.\n"
+" -o, --output=FIL generera till FIL (katalog om delad HTML).\n"
+
+#: makeinfo/makeinfo.c:391
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --disable-encoding do not output accented and special characters\n"
+" in Info output based on @documentencoding.\n"
+" --enable-encoding override --disable-encoding (default).\n"
+" --fill-column=NUM break Info lines at NUM characters (default %"
+"d).\n"
+" --footnote-style=STYLE output footnotes in Info according to STYLE:\n"
+" `separate' to put them in their own node;\n"
+" `end' to put them at the end of the node, "
+"in\n"
+" which they are defined (this is the "
+"default).\n"
+" --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %"
+"d).\n"
+" If VAL is `none', do not indent; if VAL is\n"
+" `asis', preserve existing indentation.\n"
+" --split-size=NUM split Info files at size NUM (default %d).\n"
+msgstr ""
+"Flaggor för Info och vanlig text:\n"
+" --disable-encoding generera inte tecken med accent och\n"
+" specialtecken i Info-utdata baserat på\n"
+" @documentencoding.\n"
+" --enable-encoding åsidosätt --disable-encoding (standard).\n"
+" --fill-column=ANTAL radbryt Info-rader vid ANTAL tecken\n"
+" (standardvärde %d).\n"
+" --footnote-style=STIL generera fotnoter i Info som följer STIL:\n"
+" \"separate\" för att placera fotnoter i sin\n"
+" egen nod,\n"
+" \"end\" för att placera fotnoter i slutet\n"
+" av den nod där de är definierade\n"
+" (standardalternativ).\n"
+" --paragraph-indent=VÄRDE gör indrag i Info-stycken med VÄRDE\n"
+" blanksteg (standardvärde %d).\n"
+" Om VÄRDE är \"none\" görs inga indrag; om\n"
+" VÄRDE är \"asis\" bevaras befintliga\n"
+" indrag.\n"
+" --split-size=ANTAL dela upp Info-filer vid storleken ANTAL\n"
+" (standardvärde %d).\n"
+
+#: makeinfo/makeinfo.c:409
+#, fuzzy
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+" --css-ref=URL generate reference to a CSS file.\n"
+" --internal-links=FILE produce list of internal links in FILE.\n"
+" --transliterate-file-names\n"
+" produce file names in ASCII transliteration.\n"
+msgstr ""
+"Flaggor för HTML:\n"
+" --css-include=FIL inkludera FIL i HTML <style>-utdata;\n"
+" läs standard in om FIL är -.\n"
+" --css-ref=URL generera referens till en CSS-fil.\n"
+" --transliterate-file-names\n"
+" producera filnamn i ASCII-translitteration.\n"
+
+#: makeinfo/makeinfo.c:419
+#, c-format
+msgid ""
+"Options for XML and Docbook:\n"
+" --output-indent=VAL indent XML elements by VAL spaces (default %"
+"d).\n"
+" If VAL is 0, ignorable whitespace is "
+"dropped.\n"
+msgstr ""
+"Flaggor för XML och Docbook:\n"
+" --output-indent=VÄRDE dra in XML-element med VÄRDE blanksteg\n"
+" (standard %d). Om VÄRDE är 0 kastas\n"
+" mellanrum som kan ignoreras.\n"
+
+#: makeinfo/makeinfo.c:426
+msgid ""
+"Input file options:\n"
+" --commands-in-node-names allow @ commands in node names.\n"
+" -D VAR define the variable VAR, as with @set.\n"
+" -I DIR append DIR to the @include search path.\n"
+" -P DIR prepend DIR to the @include search path.\n"
+" -U VAR undefine the variable VAR, as with @clear.\n"
+msgstr ""
+"Flaggor för indatafil:\n"
+" --commands-in-node-names tillåt @-kommandon i nodnamn.\n"
+" -D VARIABEL definiera variabeln VARIABEL, som med "
+"@set.\n"
+" -I KATALOG lägg till KATALOG till @include-sökvägen.\n"
+" -P KATALOG lägg till KATALOG först i @include-"
+"sökvägen.\n"
+" -U VARIABEL odefiniera variabeln VARIABEL, som med "
+"@clear.\n"
+
+#: makeinfo/makeinfo.c:435
+msgid ""
+"Conditional processing in input:\n"
+" --ifdocbook process @ifdocbook and @docbook even if\n"
+" not generating Docbook.\n"
+" --ifhtml process @ifhtml and @html even if not generating HTML.\n"
+" --ifinfo process @ifinfo even if not generating Info.\n"
+" --ifplaintext process @ifplaintext even if not generating plain text.\n"
+" --iftex process @iftex and @tex; implies --no-split.\n"
+" --ifxml process @ifxml and @xml.\n"
+" --no-ifdocbook do not process @ifdocbook and @docbook text.\n"
+" --no-ifhtml do not process @ifhtml and @html text.\n"
+" --no-ifinfo do not process @ifinfo text.\n"
+" --no-ifplaintext do not process @ifplaintext text.\n"
+" --no-iftex do not process @iftex and @tex text.\n"
+" --no-ifxml do not process @ifxml and @xml text.\n"
+"\n"
+" Also, for the --no-ifFORMAT options, do process @ifnotFORMAT text.\n"
+msgstr ""
+"Villkorlig behandling i indata:\n"
+" --ifdocbook behandla @ifdocbook och @docbook även om inte\n"
+" Docbook genereras.\n"
+" --ifhtml behandla @ifhtml och @html även om inte HTML genereras.\n"
+" --ifinfo behandla @ifinfo-text även om inte Info genereras.\n"
+" --ifplaintext behandla @ifplaintext även om inte vanlig text\n"
+" genereras.\n"
+" --iftex behandla @iftex och @tex-text; medför --no-split.\n"
+" --ifxml behandla @ifxml och @xml.\n"
+" --no-ifdocbook behandla inte @ifdocbook- och @docbook-text.\n"
+" --no-ifhtml behandla inte @ifhtml- och @html-text.\n"
+" --no-ifinfo behandla inte @ifinfo-text.\n"
+" --no-ifplaintext behandla inte @ifplaintext-text.\n"
+" --no-iftex behandla inte @iftex- och @tex-text.\n"
+" --no-ifxml behandla inte @ifxml- och @xml-text.\n"
+"\n"
+" Dessutom, för flaggorna --no-ifFORMAT, behandla @ifnotFORMAT-text.\n"
+
+#: makeinfo/makeinfo.c:454
+msgid ""
+" The defaults for the @if... conditionals depend on the output format:\n"
+" if generating HTML, --ifhtml is on and the others are off;\n"
+" if generating Info, --ifinfo is on and the others are off;\n"
+" if generating plain text, --ifplaintext is on and the others are off;\n"
+" if generating XML, --ifxml is on and the others are off.\n"
+msgstr ""
+" Standardvärdena för @if...-villkoren beror på utdataformatet:\n"
+" om HTML genereras är --ifhtml på och de andra av;\n"
+" om Info genereras är --ifinfo på och de andra av;\n"
+" om vanlig text genereras är --ifplaintext på och de andra av;\n"
+" om XML genereras är --ifxml på och de andra av.\n"
+
+#: makeinfo/makeinfo.c:462
+msgid ""
+"Examples:\n"
+" makeinfo foo.texi write Info to foo's @setfilename\n"
+" makeinfo --html foo.texi write HTML to @setfilename\n"
+" makeinfo --xml foo.texi write Texinfo XML to @setfilename\n"
+" makeinfo --docbook foo.texi write DocBook XML to @setfilename\n"
+" makeinfo --no-headers foo.texi write plain text to standard "
+"output\n"
+"\n"
+" makeinfo --html --no-headers foo.texi write html without node lines, "
+"menus\n"
+" makeinfo --number-sections foo.texi write Info with numbered sections\n"
+" makeinfo --no-split foo.texi write one Info file however big\n"
+msgstr ""
+"Exempel:\n"
+" makeinfo apa.texi skriv Info till apas @setfilename\n"
+" makeinfo --html apa.texi skriv HTML till @setfilename\n"
+" makeinfo --xml apa.texi skriv Texinfo XML till "
+"@setfilename\n"
+" makeinfo --docbook apa.texi skriv DocBook XML till "
+"@setfilename\n"
+" makeinfo --no-headers apa.texi skriv vanlig text till standard ut\n"
+" makeinfo --html --no-headers apa.texi skriv html utan nodrader och "
+"menyer\n"
+" makeinfo --number-sections apa.texi skriv Info med numrerade avsnitt\n"
+" makeinfo --no-split apa.texi skriv en Info-fil hur stor den än "
+"är\n"
+
+#: makeinfo/makeinfo.c:622
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr "%s: Ignorerar okänt TEXINFO_OUTPUT_FORMAT-värde \"%s\".\n"
+
+#: makeinfo/makeinfo.c:670 makeinfo/makeinfo.c:696 makeinfo/makeinfo.c:720
+#: makeinfo/makeinfo.c:780
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr "%s: argumentet %s måste vara numeriskt, inte \"%s\".\n"
+
+#: makeinfo/makeinfo.c:683
+#, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "%s: kunde inte öppna makroexpansionsutdata \"%s\""
+
+#: makeinfo/makeinfo.c:688
+#, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "%s: ignorerar andra makroexpansionsutdata \"%s\".\n"
+
+#: makeinfo/makeinfo.c:733
+#, fuzzy, c-format
+msgid "%s: could not open internal links output `%s'"
+msgstr "%s: kunde inte öppna makroexpansionsutdata \"%s\""
+
+#: makeinfo/makeinfo.c:738
+#, fuzzy, c-format
+msgid "%s: ignoring second internal links output `%s'.\n"
+msgstr "%s: ignorerar andra makroexpansionsutdata \"%s\".\n"
+
+#: makeinfo/makeinfo.c:751
+#, c-format
+msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
+msgstr ""
+"%s: argumentet --paragraph-indent måste vara numeriskt/\"none\"/\"asis\", "
+"inte \"%s\".\n"
+
+#: makeinfo/makeinfo.c:769
+#, c-format
+msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
+msgstr ""
+"%s: argumentet --footnote-style måste vara \"separate\" eller \"end\", inte "
+"\"%s\".\n"
+
+#: makeinfo/makeinfo.c:844
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: filargument saknas.\n"
+
+#: makeinfo/makeinfo.c:1041 makeinfo/makeinfo.c:4166
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr "Flerradskommandot %c%s används felaktigt"
+
+#: makeinfo/makeinfo.c:1044
+#, c-format
+msgid "Expected `%s'"
+msgstr "\"%s\" förväntades"
+
+#: makeinfo/makeinfo.c:1521
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "Kan inte skapa katalogen \"%s\": %s"
+
+#: makeinfo/makeinfo.c:1567
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "Inget \"%s\" hittades i \"%s\""
+
+#: makeinfo/makeinfo.c:1647
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr ""
+"%s: Hoppar över makroexpansionen till standard ut eftersom Info-utdatan går "
+"dit.\n"
+
+# printf (_("Making %s file `%s' from `%s'.\n"),
+# no_headers ? "text" : (html ? "HTML" : "info"),
+# output_filename, input_filename);
+#
+#: makeinfo/makeinfo.c:1677
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "Skapar %s-fil \"%s\" från \"%s\".\n"
+
+#: makeinfo/makeinfo.c:1744
+#, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: Tar bort makroutdatafilen \"%s\" på grund av fel; använd --force för att "
+"bevara.\n"
+
+#: makeinfo/makeinfo.c:1799
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: Tar bort utdatafilen \"%s\" på grund av fel; använd --force för att "
+"bevara.\n"
+
+#: makeinfo/makeinfo.c:1818
+#, fuzzy, c-format
+msgid ""
+"%s: Removing internal links output file `%s' due to errors; use --force to "
+"preserve.\n"
+msgstr ""
+"%s: Tar bort utdatafilen \"%s\" på grund av fel; använd --force för att "
+"bevara.\n"
+
+#: makeinfo/makeinfo.c:2113
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "Okänt kommando \"%s\""
+
+#: makeinfo/makeinfo.c:2135
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr "Använd klamrar för att ge ett komamndo som ett argument till @%s"
+
+#: makeinfo/makeinfo.c:2394
+#, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s förväntade klamrar"
+
+#: makeinfo/makeinfo.c:2407
+msgid "Unmatched }"
+msgstr "Ensam }"
+
+#: makeinfo/makeinfo.c:2455
+msgid "NO_NAME!"
+msgstr "INGET_NAMN!"
+
+#: makeinfo/makeinfo.c:2476
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s saknar avslutande klammer"
+
+#: makeinfo/makeinfo.c:3482
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "@image-filen \"%s\" (för HTML) är oläslig: %s"
+
+#: makeinfo/makeinfo.c:3488
+#, c-format
+msgid "No such file `%s'"
+msgstr "Det finns ingen sådan fil \"%s\""
+
+#: makeinfo/makeinfo.c:3624
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "@image-filen \"%s\" (för text) är oläslig: %s"
+
+#: makeinfo/makeinfo.c:3633
+msgid "@image missing filename argument"
+msgstr "@image saknar filnamnsargument"
+
+#: makeinfo/makeinfo.c:3851
+#, c-format
+msgid "undefined flag: %s"
+msgstr "odefinierad flagga: %s"
+
+#: makeinfo/makeinfo.c:3852
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{Inget värde för \"%s\"}"
+
+#: makeinfo/makeinfo.c:3904
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s kräver ett namn"
+
+#: makeinfo/makeinfo.c:4010
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "NÃ¥dde filslut innan matchande @end %s"
+
+#: makeinfo/makeinfo.c:4258
+#, c-format
+msgid "`%.40s...' is too long for expansion; not expanded"
+msgstr "\"%.40s...\" är för lång för expansion; inte expanderad"
+
+#: makeinfo/multi.c:116
+msgid "Missing } in @multitable template"
+msgstr "Ett } saknas i @multitable-mall"
+
+#: makeinfo/multi.c:260
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "ignorerar lös text \"%s\" efter @multitable"
+
+#: makeinfo/multi.c:400
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "För många kolumner i multitabellsobjekt (max %d)"
+
+#: makeinfo/multi.c:563
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "[oväntat] kan inte välja kolumn %d i multitabell"
+
+#: makeinfo/multi.c:592
+msgid "ignoring @tab outside of multitable"
+msgstr "ignorerar @tab utanför multitabell"
+
+#: makeinfo/multi.c:640
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** Utdata på flera kolumner från senaste raden:\n"
+
+#: makeinfo/multi.c:643
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* kolumn %d: utdata = %s\n"
+
+#: makeinfo/node.c:279
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "Noden \"%s\" är tidigare definierad på rad %d"
+
+#: makeinfo/node.c:647
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "Formaterar noden %s...\n"
+
+#: makeinfo/node.c:714
+#, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr "Noden \"%s\" kräver ett kommando för avsnittsindelning (t.ex. %c%s)"
+
+#: makeinfo/node.c:878
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "Inget nodnamn angivet för kommandot \"%c%s\""
+
+#: makeinfo/node.c:919 makeinfo/node.c:1163
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr "Ankaret \"%s\" och noden \"%s\" mappas till samma filnamn"
+
+#: makeinfo/node.c:922
+msgid "This @anchor command ignored; references to it will not work"
+msgstr ""
+"Detta @anchor-kommando ignoreras; referenser till det kommer inte att fungera"
+
+#: makeinfo/node.c:924 makeinfo/node.c:1166
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr "Byt namn på detta ankare eller använd flaggan \"--no-split\""
+
+#: makeinfo/node.c:954
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr "Oväntad sträng vid slutet på den delade HTML-filen \"%s\""
+
+#: makeinfo/node.c:1160
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr "Ankarna \"%s\" och \"%s\" mappas till samma filnamn"
+
+#: makeinfo/node.c:1165
+msgid "@anchor command ignored; references to it will not work"
+msgstr ""
+"@anchor-kommandot ignoreras; referenser till det kommer inte att fungera"
+
+#: makeinfo/node.c:1362
+#, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr ""
+"%s-referens till ickeexisterande noden \"%s\" (kanske felaktig "
+"avsnittsindelning?)"
+
+#: makeinfo/node.c:1462
+#, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr ""
+"Nästa fält i noden \"%s\" pekas inte till (kanske felaktig "
+"avsnittsindelning?)"
+
+#: makeinfo/node.c:1465
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "Denna nod (%s) har den felaktiga föregående-noden"
+
+#: makeinfo/node.c:1520
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "Föregående-fältet i noden \"%s\" pekas inte till"
+
+#: makeinfo/node.c:1524
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "Denna nod (%s) har den felaktiga nästa-noden"
+
+#: makeinfo/node.c:1536
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr "\"%s\" har inget upp-fält (kanske felaktig avsnittsindelning?)"
+
+#: makeinfo/node.c:1605
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr "Noden \"%s\" saknar menypost för \"%s\" trots att den är dess Upp-mål"
+
+#: makeinfo/node.c:1637
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "orefererad nod \"%s\""
+
+#: makeinfo/node.c:1727
+#, c-format
+msgid "Removing %s\n"
+msgstr "Tar bort %s\n"
+
+#: makeinfo/node.c:1731
+#, c-format
+msgid "Can't remove file `%s': %s"
+msgstr "Kan inte ta bort filen \"%s\": %s"
+
+#: makeinfo/sectioning.c:122
+#, c-format
+msgid "Appendix %c"
+msgstr "Appendix %c"
+
+#: makeinfo/sectioning.c:467
+#, c-format
+msgid "Internal error (search_sectioning) `%s'!"
+msgstr "Internt fel (search_sectioning) \"%s\"!"
+
+#: makeinfo/sectioning.c:563
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "Internt fel (search_sectioning) \"%s\"!"
+
+#: makeinfo/sectioning.c:624
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "%c%s är föråldrat; använd %c%s istället"
+
+#: makeinfo/sectioning.c:640
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "En nod med %ctop som ett avsnitt finns redan"
+
+#: makeinfo/sectioning.c:648
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "Här är %ctop-noden"
+
+#: makeinfo/sectioning.c:664
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "%ctop användes innan %cnode, använder %s som standard"
+
+#: makeinfo/xml.c:1669
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "@image-filen \"%s\" är oläslig: %s"
+
+#: makeinfo/xml.c:2014
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+"@headitem som det sista objektet i @multitable genererar ogiltiga Docbook-"
+"dokument"
+
+#: makeinfo/xml.c:2150
+msgid "of"
+msgstr "av"
+
+#: makeinfo/xml.c:2155
+msgid "on"
+msgstr "på"
+
+#: makeinfo/xref.c:127
+msgid "First argument to cross-reference may not be empty"
+msgstr "Första argumentet till korsreferens kan inte vara tomt"
+
+#: makeinfo/xref.c:252
+#, c-format
+msgid "Empty file name for HTML cross reference in `%s'"
+msgstr "Tomt filnamn för HTML-korsreferens i \"%s\""
+
+#: makeinfo/xref.c:387
+msgid "End of file reached while looking for `.' or `,'"
+msgstr "Slutet på filen nåddes då \".\" eller \",\" eftersöktes"
+
+#: makeinfo/xref.c:390
+#, c-format
+msgid "`.' or `,' must follow @%s, not `%c'"
+msgstr "\".\" eller \",\" måste följa på @%s, inte \"%c\""
+
+#: makeinfo/xref.c:392
+msgid "for cross-references in parentheses, use @pxref"
+msgstr "använd @pxref för korsreferenser inuti parenteser"
+
+#: makeinfo/xref.c:435
+msgid "First argument to @inforef may not be empty"
+msgstr "Första argumentet till @inforef kan inte vara tomt"
+
+#: util/texindex.c:223
+msgid "display this help and exit"
+msgstr "visa denna hjälptext och avsluta"
+
+#: util/texindex.c:225
+msgid "send output to FILE"
+msgstr "skicka utdata till FIL"
+
+#: util/texindex.c:227
+msgid "display version information and exit"
+msgstr "visa versionsinformation och avsluta"
+
+#: util/texindex.c:237
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "Användning: %s [FLAGGA]... FIL...\n"
+
+#: util/texindex.c:238
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr "Generera ett sorterat index för varje TeX-utdataFIL.\n"
+
+#: util/texindex.c:241
+#, c-format
+msgid "Usually FILE... is specified as `foo.%c%c' for a document `foo.texi'.\n"
+msgstr ""
+"Vanligtvis anges FIL... som \"apa.%c%c\" för ett dokument \"apa.texi\".\n"
+
+#: util/texindex.c:243
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Flaggor:\n"
+
+#: util/texindex.c:743
+#, c-format
+msgid "failure reopening %s"
+msgstr "misslyckande vid återöppnande av %s"
+
+#: util/texindex.c:758 util/texindex.c:786
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: inte en texinfo-indexfil"
+
+#: util/texindex.c:993
+#, c-format
+msgid "No page number in %s"
+msgstr "Inget sidnummer i %s"
+
+#: util/texindex.c:1066
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr "posten %s följer på en post med ett sekundärt namn"
+
+#~ msgid "Cancel the current operation"
+#~ msgstr "Avbryt aktuell åtgärd"
+
+#~ msgid "Search backward"
+#~ msgstr "Sök baklänges"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]... [MENU-ITEM...]\n"
+#~ "\n"
+#~ "Read documentation in Info format.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --apropos=STRING look up STRING in all indices of all "
+#~ "manuals.\n"
+#~ " -d, --directory=DIR add DIR to INFOPATH.\n"
+#~ " --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+#~ " -f, --file=FILENAME specify Info file to visit.\n"
+#~ " -h, --help display this help and exit.\n"
+#~ " --index-search=STRING go to node pointed by index entry STRING.\n"
+#~ " -n, --node=NODENAME specify nodes in first visited Info file.\n"
+#~ " -o, --output=FILENAME output selected nodes to FILENAME.\n"
+#~ " -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+#~ " --no-raw-escapes output escapes as literal text.\n"
+#~ " --restore=FILENAME read initial keystrokes from FILENAME.\n"
+#~ " -O, --show-options, --usage go to command-line options node.\n"
+#~ "%s --subnodes recursively output menu items.\n"
+#~ " -w, --where, --location print physical location of Info file.\n"
+#~ " --vi-keys use vi-like and less-like key bindings.\n"
+#~ " --version display version information and exit.\n"
+#~ "\n"
+#~ "The first non-option argument, if present, is the menu entry to start "
+#~ "from;\n"
+#~ "it is searched for in all `dir' files along INFOPATH.\n"
+#~ "If it is not present, info merges all `dir' files and shows the result.\n"
+#~ "Any remaining arguments are treated as the names of menu\n"
+#~ "items relative to the initial node visited.\n"
+#~ "\n"
+#~ "Examples:\n"
+#~ " info show top-level dir menu\n"
+#~ " info emacs start at emacs node from top-level dir\n"
+#~ " info emacs buffers start at buffers node within emacs manual\n"
+#~ " info --show-options emacs start at node with emacs' command line "
+#~ "options\n"
+#~ " info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+#~ " info -f ./foo.info show file ./foo.info, not searching dir\n"
+#~ msgstr ""
+#~ "Användning: %s [FLAGGA]... [MENYPOST...]\n"
+#~ "\n"
+#~ "Läs dokumentation i Info-format.\n"
+#~ "\n"
+#~ "Flaggor:\n"
+#~ " --apropos=STRÄNG slå upp STRÄNG i alla index i alla "
+#~ "manualer.\n"
+#~ " -d, --directory=KATALOG lägg till KATALOG till INFOPATH.\n"
+#~ " --dribble=FILNAMN kom ihåg användarens tangentnedtryckningar "
+#~ "i\n"
+#~ " FILNAMN.\n"
+#~ " -f, --file=FILNAMN ange den Info-fil som ska besökas.\n"
+#~ " -h, --help visa denna hjälptext och avsluta.\n"
+#~ " --index-search=STRÄNG gå till noden som utpekas av indexpost\n"
+#~ " STRÄNG.\n"
+#~ " -n, --node=NODNAMN ange noder i den först besökta Info-"
+#~ "filen.\n"
+#~ " -o, --output=FILNAMN skriv ut valda noder till FILNAMN.\n"
+#~ " -R, --raw-escapes skriv ut \"råa\" ANSI-styrkoder "
+#~ "(standard).\n"
+#~ " --no-raw-escapes skriv ut styrkoder som text.\n"
+#~ " --restore=FILNAMN läs initiala tangentnedtryckningar från\n"
+#~ " FILNAMN.\n"
+#~ " -O, --show-options, --usage gå till noden för kommandoradsflaggor.\n"
+#~ "%s --subnodes skriv ut menyposter rekursivt.\n"
+#~ " -w, --where, --location skriv ut den fysiska platsen för Info-"
+#~ "filen.\n"
+#~ " --vi-keys använd vi- och less-liknande\n"
+#~ " snabbtangenter.\n"
+#~ " --version visa versionsinformation och avsluta.\n"
+#~ "\n"
+#~ "Det första argumentet som inte är en flagga är, om det finns, menyposten\n"
+#~ "att börja från. Det söks efter i alla \"dir\"-filer i INFOPATH.\n"
+#~ "Om den inte finns slår info samman alla \"dir\"-filer och visar "
+#~ "resultatet.\n"
+#~ "Alla återstående argument betraktas som namnen på menyposter relativa "
+#~ "till\n"
+#~ "den först besökta noden.\n"
+#~ "\n"
+#~ "Exampel:\n"
+#~ " info visa översta katalogmenyn\n"
+#~ " info emacs börja på emacs-noden från översta katalogen\n"
+#~ " info emacs buffers börja på buffertnoden inom emacs-manualen\n"
+#~ " info --show-options emacs börja på noden med emacs "
+#~ "kommandoradsflaggor\n"
+#~ " info --subnodes -o ut.txt emacs dumpa hela manualen till ut.txt\n"
+#~ " info -f ./foo.info visa filen ./foo.info, sök inte i katalogen\n"
+
+#~ msgid "\\%-10[move-to-prev-xref] Skip to previous hypertext link [*].\n"
+#~ msgstr ""
+#~ "\\%-10[move-to-prev-xref] Hoppa till föregående hypertextlänk [*].\n"
+
+#~ msgid ""
+#~ "\\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+#~ "node] (DIR)'.\n"
+#~ msgstr ""
+#~ "\\%-10[dir-node] Gå till \"directory\"-noden. Likvärdigt med \"g (DIR)"
+#~ "\".\n"
+
+#~ msgid ""
+#~ "\\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] "
+#~ "Top'.\n"
+#~ msgstr ""
+#~ "\\%-10[top-node] Gå till den översta noden. Likvärdigt med \"g Top\".\n"
+
+#~ msgid ""
+#~ "[*] Command acts within this node or the entire document, depending "
+#~ "on\n"
+#~ "the value of cursor-movement-scrolls variable\n"
+#~ msgstr ""
+#~ "[*] Kommandot agerar inuti denna nod eller hela dokumentet, beroende "
+#~ "på\n"
+#~ "värdet av variabeln cursor-movement-scrolls\n"
+
+#~ msgid "\\%-10[prev-line] Scroll backward 1 line.\n"
+#~ msgstr "\\%-10[prev-line] Rulla en rad bakåt.\n"
+
+#~ msgid ""
+#~ "\\%-10[search] Search forward for a specified string\n"
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr ""
+#~ "\\%-10[search] Sök framåt efter en angiven sträng\n"
+#~ " och välj den nod i vilken nästa förekomst hittas.\n"
+
+#~ msgid ""
+#~ "\\%-10[search-backward] Search backward for a specified string\n"
+#~ " and select the node in which the previous occurrence is "
+#~ "found.\n"
+#~ msgstr ""
+#~ "\\%-10[search-backward] Sök bakåt efter en angiven sträng\n"
+#~ " och välj den nod i vilken nästa förekomst hittas.\n"
+
+#~ msgid ""
+#~ " Picking a menu item causes another node to be selected.\n"
+#~ msgstr " Att välja en menypost gör att en annan nod väljs.\n"
+
+#~ msgid ""
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ msgstr ""
+#~ " Du kan även inkludera ett filnamn, som exempelvis\n"
+#~ " (FILNAMN)NODNAMN.\n"
+
+# This is broken
+#
+# N_(" %-10s Search backward in this Info file for a specified string,\n"),
+# N_(" and select the node in which the next occurrence is found.\n"),
+#
+# Please don't split a single sentence like this in multiple messages,
+# use one single message instead. Sentences have to be kept together when
+# translating, you can't split a sentence into parts and mark them for
+# separate translation and expect it to work with word ordering,
+# grammar, and everything else in other languages. Splitting sentences
+# just makes it harder for translators when having not just to translate,
+# but also puzzle the pieces of the sentence together again so that it
+# makes some sense, in order to be able to translate in the first place.
+#
+#~ msgid " %-10s Search backward for a specified string\n"
+#~ msgstr " %-10s Sök bakåt efter en angiven sträng,\n"
+
+#~ msgid ""
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr " och välj den nod i vilken nästa förekomst hittas.\n"
+
+#~ msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+#~ msgstr ""
+#~ "--- Använd \"\\[history-node]\" eller \"\\[kill-node]\" för att avsluta "
+#~ "---\n"
+
+#~ msgid "Following Next node..."
+#~ msgstr "Följer nästa-nod..."
+
+#~ msgid "Selecting first menu item..."
+#~ msgstr "Väljer första menyposten..."
+
+#~ msgid "Selecting Next node..."
+#~ msgstr "Väljer nästa nod..."
+
+#~ msgid "Moving Up %d time(s), then Next."
+#~ msgstr "Går upp %d gång(er), sedan Nästa."
+
+#~ msgid "Moving Prev in this window."
+#~ msgstr "Gå till föregående i detta fönster."
+
+#~ msgid "Moving Up in this window."
+#~ msgstr "Går upp i detta fönster."
+
+#~ msgid "Moving to `Prev's last menu item."
+#~ msgstr "Gå till \"Föreg\"s senaste menypost."
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "Function"
+#~ msgstr "Funktion"
+
+#~ msgid "Macro"
+#~ msgstr "Makro"
+
+#~ msgid "Special Form"
+#~ msgstr "Specialform"
+
+#~ msgid "Variable"
+#~ msgstr "Variabel"
+
+#~ msgid "User Option"
+#~ msgstr "Användarflagga"
+
+#~ msgid "Instance Variable"
+#~ msgstr "Instansvariabel"
+
+#~ msgid "Method"
+#~ msgstr "Metod"
+
+#~ msgid "Untitled"
+#~ msgstr "Namnlös"
+
+#~ msgid "This is %s, produced by makeinfo version %s from %s.\n"
+#~ msgstr "Detta är %s, skapad av makeinfo version %s från %s.\n"
+
+# src/menus.c:332
+#~ msgid "Next:"
+#~ msgstr "Nästa:"
+
+#~ msgid "Previous:"
+#~ msgstr "Föregående:"
+
+#~ msgid "Up:"
+#~ msgstr "Upp:"
+
+#~ msgid "Menu"
+#~ msgstr "Meny"
+
+#~ msgid "Cross"
+#~ msgstr "Kors"
+
+#~ msgid "Prev"
+#~ msgstr "Föreg"
+
+#~ msgid "Up"
+#~ msgstr "Upp"
+
+#~ msgid "see "
+#~ msgstr "se "
+
+#~ msgid "See section ``%s'' in "
+#~ msgstr "Se avsnittet \"%s\" i "
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+#~ "\n"
+#~ "Add or remove entries in INFO-FILE from the Info directory DIR-FILE.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --debug report what is being done.\n"
+#~ " --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+#~ " don't insert any new entries.\n"
+#~ " --dir-file=NAME specify file name of Info directory file.\n"
+#~ " This is equivalent to using the DIR-FILE argument.\n"
+#~ " --entry=TEXT insert TEXT as an Info directory entry.\n"
+#~ " TEXT should have the form of an Info menu item line\n"
+#~ " plus zero or more extra lines starting with "
+#~ "whitespace.\n"
+#~ " If you specify more than one entry, they are all "
+#~ "added.\n"
+#~ " If you don't specify any entries, they are "
+#~ "determined\n"
+#~ " from information in the Info file itself.\n"
+#~ " --help display this help and exit.\n"
+#~ " --info-file=FILE specify Info file to install in the directory.\n"
+#~ " This is equivalent to using the INFO-FILE argument.\n"
+#~ " --info-dir=DIR same as --dir-file=DIR/dir.\n"
+#~ " --item=TEXT same as --entry TEXT.\n"
+#~ " An Info directory entry is actually a menu item.\n"
+#~ " --quiet suppress warnings.\n"
+#~ " --remove same as --delete.\n"
+#~ " --remove-exactly only remove if the info file name matches exactly;\n"
+#~ " .info and/or .gz suffixes are not ignored.\n"
+#~ " --section=SEC put this file's entries in section SEC of the "
+#~ "directory.\n"
+#~ " If you specify more than one section, all the "
+#~ "entries\n"
+#~ " are added in each of the sections.\n"
+#~ " If you don't specify any sections, they are "
+#~ "determined\n"
+#~ " from information in the Info file itself.\n"
+#~ " --section-regex=R if an entry is added to a section that does not "
+#~ "exist,\n"
+#~ " look for a section matching basic regular expression "
+#~ "R\n"
+#~ " (and ignoring case) before starting a new section.\n"
+#~ " --test suppress updating of DIR-FILE.\n"
+#~ " --silent suppress warnings.\n"
+#~ " --version display version information and exit.\n"
+#~ msgstr ""
+#~ "Användning: %s [FLAGGA]... [INFO-FIL [KATALOGFIL]]\n"
+#~ "\n"
+#~ "Installera eller ta bort katalogposter från INFO-FIL i Info-katalogfilen\n"
+#~ "KATALOGFIL.\n"
+#~ "\n"
+#~ "Flaggor:\n"
+#~ " --debug rapportera vad som görs.\n"
+#~ " --delete ta bort existerande poster för INFO-FIL från "
+#~ "KATALOGFIL;\n"
+#~ " infoga inte några nya poster.\n"
+#~ " --dir-file=NAMN ange filnamnet på Info-katalogfilen.\n"
+#~ " Detta motsvarar användning av argumentet "
+#~ "KATALOGFIL.\n"
+#~ " --entry=TEXT infoga TEXT som en Info-katalogpost.\n"
+#~ " TEXT bör vara i formen av en Info-menypostsrad plus\n"
+#~ " noll eller fler extra rader som börjar med tomrum.\n"
+#~ " Om du anger mer än en post kommer alla att läggas\n"
+#~ " till. Om du inte anger några poster kommer de att\n"
+#~ " avgöras från information i själva Info-filen.\n"
+#~ " --help visa denna hjälptext och avsluta.\n"
+#~ " --info-file=FIL ange Info-fil att installera i katalogen.\n"
+#~ " Detta motsvarar användning av argumentet INFO-FIL.\n"
+#~ " --info-dir=KAT samma som --dir-file=KAT/kat.\n"
+#~ " --item=TEXT samma som --entry TEXT.\n"
+#~ " En Info-katalogpost är egentligen en menypost.\n"
+#~ " --quiet undertryck varningar.\n"
+#~ " --remove samma som --delete.\n"
+#~ " --remove-exactly ta endast bort om Info-filnamnet matchar exakt.\n"
+#~ " .info- och/eller .gz-filändelser ignoreras inte.\n"
+#~ " --section=AVSNITT placera denna fils poster i avsnittet AVSNITT i\n"
+#~ " katalogen. Om du anger mer än ett avsnitt kommer "
+#~ "alla\n"
+#~ " poster att läggas till i varje avsnitt. Om du inte\n"
+#~ " anger några avsnitt kommer de att bestämmas från\n"
+#~ " information i själva Info-filen.\n"
+#~ " --section-regex=R om en post läggs till i ett avsnitt som saknas,\n"
+#~ " leta efter ett avsnitt som matchar det "
+#~ "grundläggande\n"
+#~ " reguljära uttrycket R (och ignorera skiftläge) "
+#~ "innan\n"
+#~ " ett nytt avsnitt påbörjas.\n"
+#~ " --test undertryck varning av KATALOGFIL.\n"
+#~ " --silent undertryck varningar.\n"
+#~ " --version visa versionsinformation och avsluta.\n"
+
+#~ msgid "menu item `%s' already exists, for file `%s'"
+#~ msgstr "menyposten \"%s\" finns redan, för filen \"%s\""
+
+#~ msgid "virtual memory exhausted"
+#~ msgstr "virtuellt minne slut"
+
+#~ msgid "Same as scroll-behavior"
+#~ msgstr "Samma som \"scroll-behavior\""
+
+#~ msgid "off"
+#~ msgstr "av"
+
+#~ msgid ""
+#~ "There is NO warranty. You may redistribute this software\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the files named COPYING.\n"
+#~ msgstr ""
+#~ "Det finns INGEN garanti. Du kan vidaredistribuera denna programvara\n"
+#~ "under villkoren i GNU General Public License.\n"
+#~ "Se filen COPYING för mer information om detta.\n"
+
+#~ msgid "\\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+#~ msgstr ""
+#~ "\\%-10[menu-digit] Välj första ... nionde objektet i nodens meny.\n"
+
+# This is broken
+#
+# N_(" %-10s Search for a specified string in the index entries of this Info\n"),
+# N_(" file, and select the node referenced by the first entry found.\n"),
+#
+# Please don't split a single sentence like this in multiple messages,
+# use one single message instead. Sentences have to be kept together when
+# translating, you can't split a sentence into parts and mark them for
+# separate translation and expect it to work with word ordering,
+# grammar, and everything else in other languages. Splitting sentences
+# just makes it harder for translators when having not just to translate,
+# but also puzzle the pieces of the sentence together again so that it
+# makes some sense, in order to be able to translate in the first place.
+#
+#~ msgid ""
+#~ " %-10s Search for a specified string in the index entries of this Info\n"
+#~ msgstr " %-10s Sök efter en angiven sträng i indexposterna i denna\n"
+
+#~ msgid ""
+#~ " file, and select the node referenced by the first entry "
+#~ "found.\n"
+#~ msgstr ""
+#~ " Info-fil, och välj noden som refereras av den första "
+#~ "posten\n"
+#~ " som hittas.\n"
+
+#~ msgid ""
+#~ "Copyright (C) %s Free Software Foundation, Inc.\n"
+#~ "There is NO warranty. You may redistribute this software\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the files named COPYING.\n"
+#~ msgstr ""
+#~ "Copyright © %s Free Software Foundation, Inc.\n"
+#~ "Det finns INGEN garanti. Du kan vidaredistribuera denna programvara\n"
+#~ "under villkoren i GNU General Public License.\n"
+#~ "Se filen COPYING för mer information om detta.\n"
+
+#~ msgid "@quote-arg only useful for single-argument macros"
+#~ msgstr "@quote-arg är endast användbart för makron med ett argument"
+
+#~ msgid "node `%s' has been referenced %d times"
+#~ msgstr "noden \"%s\" har refererats %d gånger"
+
+#~ msgid "Table of Contents"
+#~ msgstr "Innehållsförteckning"
+
+#~ msgid "Short Contents"
+#~ msgstr "Kort innehållsförteckning"
+
+#~ msgid "keep temporary files around after processing"
+#~ msgstr "behåll temporära filer efter behandling"
+
+#~ msgid "do not keep temporary files around after processing (default)"
+#~ msgstr "behåll inte temporära filer efter behandling (standardalternativ)"
+
+#~ msgid "%s: Specify the Info directory only once.\n"
+#~ msgstr "%s: Ange Info-katalogen endast en gång.\n"
+
+#~ msgid "(line)"
+#~ msgstr "(rad)"
+
+#~ msgid "line"
+#~ msgstr "rad"
+
+#~ msgid "line %*d"
+#~ msgstr "rad %*d"
+
+#~ msgid "(line %d)"
+#~ msgstr "(rad %d)"
+
+#~ msgid "line %d"
+#~ msgstr "rad %d"
+
+#~ msgid "Appendix %c "
+#~ msgstr "Appendix %c "
+
+#~ msgid "\"\" is invalid"
+#~ msgstr "\"\" är ogiltigt"
+
+#~ msgid "%s is an invalid ISO code, using %c"
+#~ msgstr "%s är en ogiltig ISO-kod, använder %c"
+
+#~ msgid "Cannot specify more than one macro expansion output"
+#~ msgstr "Kan inte ange mer än en makroexpansionsutdata"
+
+#~ msgid "File exists, but is not a directory"
+#~ msgstr "Filen finns men är ingen katalog"
+
+#~ msgid "Node:"
+#~ msgstr "Nod:"
+
+#~ msgid "%s: TOC should be here, but it was not found"
+#~ msgstr "%s: Innehållsförteckningen skulle vara här, men hittades inte"
+
+#~ msgid "No `%s.png' or `.jpg', and no extension supplied"
+#~ msgstr "Ingen \"%s.png\" eller \".jpg\" och ingen filändelse angiven"
+
+#~ msgid "%s; for file `%s'.\n"
+#~ msgstr "%s; för filen \"%s\".\n"
+
+#~ msgid "`%s' has no Up field"
+#~ msgstr "\"%s\" har inget upp-fält"
+
+#~ msgid "\\%-10[scroll-forward] Scroll forward 1 line.\n"
+#~ msgstr "\\%-10[scroll-forward] Rulla en rad framåt.\n"
+
+#~ msgid "\\%-10[scroll-backward] Scroll backward 1 line.\n"
+#~ msgstr "\\%-10[scroll-backward] Rulla en rad bakåt.\n"
+
+#~ msgid ""
+#~ "Email bug reports to bug-texinfo@gnu.org,\n"
+#~ "general questions and discussion to help-texinfo@gnu.org."
+#~ msgstr ""
+#~ "Skicka felrapporter till bug-texinfo@gnu.org,\n"
+#~ "allmänna frågor och diskussion till help-texinfo@gnu.org\n"
+#~ "och synpunkter på översättningen till sv@li.org."
+
+#~ msgid "%s' argument to @image command not found"
+#~ msgstr "%s argument till @image-kommandot hittades inte"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+#~ "\n"
+#~ "Translate Texinfo source documentation to various other formats:\n"
+#~ "Info files suitable for reading online with Emacs or standalone GNU Info\n"
+#~ "(by default); plain text (with --no-headers); or HTML (with --html).\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --commands-in-node-names allow @ commands in node names.\n"
+#~ " -D VAR define a variable, as with @set.\n"
+#~ "--docbook output DocBook rather than Info format.\n"
+#~ " -E, --macro-expand FILE output macro-expanded source to FILE.\n"
+#~ " --error-limit=NUM quit after NUM errors (default %d).\n"
+#~ " --fill-column=NUM break Info lines at NUM characters (default %"
+#~ "d).\n"
+#~ " --footnote-style=STYLE output footnotes according to STYLE:\n"
+#~ " `separate' to place footnotes in their own "
+#~ "node,\n"
+#~ " `end' to place the footnotes at the end of "
+#~ "the\n"
+#~ " node in which they are defined (the "
+#~ "default).\n"
+#~ " --force preserve output even if errors.\n"
+#~ " --help display this help and exit.\n"
+#~ " --html output HTML rather than Info format.\n"
+#~ " -I DIR append DIR to the @include search path.\n"
+#~ " --ifhtml process @ifhtml and @html text even when not\n"
+#~ " generating HTML.\n"
+#~ " --ifinfo process @ifinfo text even when generating "
+#~ "HTML.\n"
+#~ " --iftex process @iftex and @tex text.\n"
+#~ " implies --no-split.\n"
+#~ msgstr ""
+#~ "Användning: %s [FLAGGA]... TEXINFO-FIL...\n"
+#~ "\n"
+#~ "Översätt Texinfo-källdokumentation till diverse andra format:\n"
+#~ "Info-filer som är lämpliga för läsning på skärm med Emacs eller separat\n"
+#~ "GNU Info (standardalternativ), vanlig text (med --no-headers), eller\n"
+#~ "HTML (med --html).\n"
+#~ "\n"
+#~ "Flaggor:\n"
+#~ " --commands-in-node-names tillåt @-kommandon i nodnamn.\n"
+#~ " -D VARIABEL definiera en variabel, som med @set.\n"
+#~ "--docbook generera DocBook istället för Info-format.\n"
+#~ " -E, --macro-expand FIL generera makroexpanderad källkod till FIL.\n"
+#~ " --error-limit=ANTAL avsluta efter ANTAL fel (standard %d).\n"
+#~ " --fill-column=ANTAL radbryt Info-rader vid ANTAL tecken (standard %"
+#~ "d).\n"
+#~ " --footnote-style=STIL generera fotnoter enligt STIL:\n"
+#~ " \"separate\" för att placera fotnoter i sin\n"
+#~ " egen nod,\n"
+#~ " \"end\" för att placera fotnoter i slutet på\n"
+#~ " den nod där de är definierade (standard).\n"
+#~ " --force bevara utdata även om fel påträffas.\n"
+#~ " --help visa denna hjälptext och avsluta.\n"
+#~ " --html generera HTML istället för Info-format.\n"
+#~ " -I KATALOG lägg till KATALOG till @include-sökvägen.\n"
+#~ " --ifhtml behandla @ifhtml- och @html-text även om inte\n"
+#~ " HTML genereras.\n"
+#~ " --ifinfo behandla @ifinfo-text även då HTML genereras.\n"
+#~ " --iftex behandla @iftex- och @tex-text.\n"
+#~ " medför --no-split.\n"
+
+#~ msgid ""
+#~ " --no-headers suppress Info node separators and Node: "
+#~ "lines;\n"
+#~ " write to standard output without --output.\n"
+#~ " --no-ifhtml do not process @ifhtml and @html text.\n"
+#~ " --no-ifinfo do not process @ifinfo text.\n"
+#~ " --no-iftex do not process @iftex and @tex text.\n"
+#~ " --no-split suppress splitting of Info or HTML output,\n"
+#~ " generate only one output file.\n"
+#~ " --no-validate suppress node cross-reference validation.\n"
+#~ " --no-warn suppress warnings (but not errors).\n"
+#~ " --number-sections include chapter, section, etc. numbers in "
+#~ "output.\n"
+#~ " -o, --output=FILE output to FILE (directory if split HTML),\n"
+#~ " ignoring any @setfilename.\n"
+#~ " -P DIR prepend DIR to the @include search path.\n"
+#~ " --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %"
+#~ "d).\n"
+#~ " if VAL is `none', do not indent;\n"
+#~ " if VAL is `asis', preserve existing "
+#~ "indentation.\n"
+#~ " --reference-limit=NUM warn about at most NUM references (default %"
+#~ "d).\n"
+#~ " --split-size=NUM split into files at NUM size. (default %d).\n"
+#~ " -U VAR undefine a variable, as with @clear.\n"
+#~ " -v, --verbose explain what is being done.\n"
+#~ " --version display version information and exit.\n"
+#~ " --xml output XML (TexinfoML) rather than Info "
+#~ "format.\n"
+#~ msgstr ""
+#~ " --no-headers undertryck Info-nodavskiljare och \"Node:\"-"
+#~ "rader,\n"
+#~ " skriv till standard ut utan --output.\n"
+#~ " --no-ifhtml behandla inte @ifhtml- och @html-text.\n"
+#~ " --no-ifinfo behandla inte @ifinfo-text.\n"
+#~ " --no-iftex behandla inte @iftex- och @tex-text.\n"
+#~ " --no-split undertryck delning av Info- eller HTML-"
+#~ "utdata,\n"
+#~ " skapa endast en utdatafil.\n"
+#~ " --no-validate undertryck nod-korsreferensvalidering.\n"
+#~ " --no-warn undertryck varningar (men inte fel).\n"
+#~ " --number-sections inkludera kapitel-, sektionsnummer osv i "
+#~ "utdata.\n"
+#~ " -o, --output=FIL skriv till FIL (katalog om delad HTML),\n"
+#~ " ignorerar alla @setfilename.\n"
+#~ " -P KATALOG lägg till KATALOG till @include-sökvägen.\n"
+#~ " --paragraph-indent=VÄRDE gör indrag i Info-stycken med VÄRDE blanksteg\n"
+#~ " (standardvärde %d).\n"
+#~ " om VÄRDE är \"none\" görs inget indrag;\n"
+#~ " om VÄRDE är \"asis\" bevaras befintlig "
+#~ "indragning.\n"
+#~ " --reference-limit=ANTAL varna om högst ANTAL referenser\n"
+#~ " (standardvärde %d).\n"
+#~ " --split-size=ANTAL dela i filer vid storleken ANTAL\n"
+#~ " (standardvärde %d).\n"
+#~ " -U VARIABEL odefiniera en variabel, som med @clear.\n"
+#~ " -v, --verbose förklara vad som görs.\n"
+#~ " --version visa versionsinformation och avsluta.\n"
+#~ " --xml generera XML (TexinfoML) istället för Info-"
+#~ "format.\n"
diff --git a/po/texinfo.pot b/po/texinfo.pot
new file mode 100644
index 0000000..a922034
--- /dev/null
+++ b/po/texinfo.pot
@@ -0,0 +1,2880 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo 4.13\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2008-09-18 20:38+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: gnulib/lib/error.c:125
+msgid "Unknown system error"
+msgstr ""
+
+#: gnulib/lib/getopt.c:526 gnulib/lib/getopt.c:542
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr ""
+
+#: gnulib/lib/getopt.c:575 gnulib/lib/getopt.c:579
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr ""
+
+#: gnulib/lib/getopt.c:588 gnulib/lib/getopt.c:593
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr ""
+
+#: gnulib/lib/getopt.c:636 gnulib/lib/getopt.c:655 gnulib/lib/getopt.c:971
+#: gnulib/lib/getopt.c:990
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr ""
+
+#: gnulib/lib/getopt.c:693 gnulib/lib/getopt.c:696
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr ""
+
+#: gnulib/lib/getopt.c:704 gnulib/lib/getopt.c:707
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr ""
+
+#: gnulib/lib/getopt.c:759 gnulib/lib/getopt.c:762
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr ""
+
+#: gnulib/lib/getopt.c:768 gnulib/lib/getopt.c:771
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr ""
+
+#: gnulib/lib/getopt.c:823 gnulib/lib/getopt.c:839 gnulib/lib/getopt.c:1043
+#: gnulib/lib/getopt.c:1061
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr ""
+
+#: gnulib/lib/getopt.c:892 gnulib/lib/getopt.c:908
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr ""
+
+#: gnulib/lib/getopt.c:932 gnulib/lib/getopt.c:950
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr ""
+
+#: gnulib/lib/xalloc-die.c:34 gnulib/lib/xsetenv.c:37
+#, c-format
+msgid "memory exhausted"
+msgstr ""
+
+#: info/echo-area.c:283 info/session.c:966
+msgid "Move forward a character"
+msgstr ""
+
+#: info/echo-area.c:295 info/session.c:993
+msgid "Move backward a character"
+msgstr ""
+
+#: info/echo-area.c:307
+msgid "Move to the start of this line"
+msgstr ""
+
+#: info/echo-area.c:312
+msgid "Move to the end of this line"
+msgstr ""
+
+#: info/echo-area.c:320 info/session.c:1025
+msgid "Move forward a word"
+msgstr ""
+
+#: info/echo-area.c:360 info/session.c:1049
+msgid "Move backward a word"
+msgstr ""
+
+#: info/echo-area.c:400
+msgid "Delete the character under the cursor"
+msgstr ""
+
+#: info/echo-area.c:430
+msgid "Delete the character behind the cursor"
+msgstr ""
+
+#: info/echo-area.c:451
+msgid "Cancel or quit operation"
+msgstr ""
+
+#: info/echo-area.c:466
+msgid "Accept (or force completion of) this line"
+msgstr ""
+
+#: info/echo-area.c:471
+msgid "Insert next character verbatim"
+msgstr ""
+
+#: info/echo-area.c:479
+msgid "Insert this character"
+msgstr ""
+
+#: info/echo-area.c:498
+msgid "Insert a TAB character"
+msgstr ""
+
+#: info/echo-area.c:505
+msgid "Transpose characters at point"
+msgstr ""
+
+#: info/echo-area.c:556
+msgid "Yank back the contents of the last kill"
+msgstr ""
+
+#: info/echo-area.c:563
+msgid "Kill ring is empty"
+msgstr ""
+
+#: info/echo-area.c:576
+msgid "Yank back a previous kill"
+msgstr ""
+
+#: info/echo-area.c:609
+msgid "Kill to the end of the line"
+msgstr ""
+
+#: info/echo-area.c:622
+msgid "Kill to the beginning of the line"
+msgstr ""
+
+#: info/echo-area.c:634
+msgid "Kill the word following the cursor"
+msgstr ""
+
+#: info/echo-area.c:654
+msgid "Kill the word preceding the cursor"
+msgstr ""
+
+#: info/echo-area.c:870 info/echo-area.c:926
+msgid "No completions"
+msgstr ""
+
+#: info/echo-area.c:872
+msgid "Not complete"
+msgstr ""
+
+#: info/echo-area.c:913
+msgid "List possible completions"
+msgstr ""
+
+#: info/echo-area.c:930
+msgid "Sole completion"
+msgstr ""
+
+#: info/echo-area.c:939
+msgid "One completion:\n"
+msgstr ""
+
+#: info/echo-area.c:940
+#, c-format
+msgid "%d completions:\n"
+msgstr ""
+
+#: info/echo-area.c:1087
+msgid "Insert completion"
+msgstr ""
+
+#: info/echo-area.c:1222
+msgid "Building completions..."
+msgstr ""
+
+#: info/echo-area.c:1342
+msgid "Scroll the completions window"
+msgstr ""
+
+#: info/footnotes.c:212
+msgid "Footnotes could not be displayed"
+msgstr ""
+
+#: info/footnotes.c:238
+msgid "Show the footnotes associated with this node in another window"
+msgstr ""
+
+#: info/footnotes.h:26
+msgid "---------- Footnotes ----------"
+msgstr ""
+
+#: info/indices.c:171
+msgid "Look up a string in the index for this file"
+msgstr ""
+
+#: info/indices.c:198
+msgid "Finding index entries..."
+msgstr ""
+
+#: info/indices.c:206
+msgid "No indices found."
+msgstr ""
+
+#: info/indices.c:216
+msgid "Index entry: "
+msgstr ""
+
+#: info/indices.c:324
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr ""
+
+#: info/indices.c:334
+msgid "No previous index search string."
+msgstr ""
+
+#: info/indices.c:341
+msgid "No index entries."
+msgstr ""
+
+#: info/indices.c:374
+#, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr ""
+
+#: info/indices.c:375
+msgid "more "
+msgstr ""
+
+#: info/indices.c:385
+msgid "CAN'T SEE THIS"
+msgstr ""
+
+#: info/indices.c:421
+#, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr ""
+
+#: info/indices.c:549
+#, c-format
+msgid "Scanning indices of `%s'..."
+msgstr ""
+
+#: info/indices.c:604
+#, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr ""
+
+#: info/indices.c:630
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr ""
+
+#: info/indices.c:634
+msgid "Index apropos: "
+msgstr ""
+
+#: info/indices.c:662
+#, c-format
+msgid ""
+"\n"
+"* Menu: Nodes whose indices contain `%s':\n"
+msgstr ""
+
+#: info/info.c:275 info/infokey.c:899
+#, c-format
+msgid "Try --help for more information.\n"
+msgstr ""
+
+#: info/info.c:294 info/infokey.c:145 install-info/install-info.c:2101
+#: makeinfo/makeinfo.c:802 util/texindex.c:295
+#, c-format
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+
+#: info/info.c:506
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr ""
+
+#: info/info.c:600
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [MENU-ITEM...]\n"
+"\n"
+"Read documentation in Info format.\n"
+msgstr ""
+
+#: info/info.c:606
+msgid ""
+"Options:\n"
+" -k, --apropos=STRING look up STRING in all indices of all "
+"manuals.\n"
+" -d, --directory=DIR add DIR to INFOPATH.\n"
+" --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+" -f, --file=FILENAME specify Info file to visit."
+msgstr ""
+
+#: info/info.c:613
+msgid ""
+" -h, --help display this help and exit.\n"
+" --index-search=STRING go to node pointed by index entry STRING.\n"
+" -n, --node=NODENAME specify nodes in first visited Info file.\n"
+" -o, --output=FILENAME output selected nodes to FILENAME."
+msgstr ""
+
+#: info/info.c:619
+msgid ""
+" -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+" --no-raw-escapes output escapes as literal text.\n"
+" --restore=FILENAME read initial keystrokes from FILENAME.\n"
+" -O, --show-options, --usage go to command-line options node."
+msgstr ""
+
+#: info/info.c:626
+msgid " -b, --speech-friendly be friendly to speech synthesizers."
+msgstr ""
+
+#: info/info.c:630
+msgid ""
+" --subnodes recursively output menu items.\n"
+" --vi-keys use vi-like and less-like key bindings.\n"
+" --version display version information and exit.\n"
+" -w, --where, --location print physical location of Info file."
+msgstr ""
+
+#: info/info.c:636
+msgid ""
+"\n"
+"The first non-option argument, if present, is the menu entry to start from;\n"
+"it is searched for in all `dir' files along INFOPATH.\n"
+"If it is not present, info merges all `dir' files and shows the result.\n"
+"Any remaining arguments are treated as the names of menu\n"
+"items relative to the initial node visited."
+msgstr ""
+
+#: info/info.c:643
+msgid ""
+"\n"
+"For a summary of key bindings, type h within Info."
+msgstr ""
+
+#: info/info.c:646
+msgid ""
+"\n"
+"Examples:\n"
+" info show top-level dir menu\n"
+" info info show the general manual for Info readers\n"
+" info info-stnd show the manual specific to this Info program\n"
+" info emacs start at emacs node from top-level dir\n"
+" info emacs buffers start at buffers node within emacs manual\n"
+" info --show-options emacs start at node with emacs' command line options\n"
+" info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+" info -f ./foo.info show file ./foo.info, not searching dir"
+msgstr ""
+
+#: info/info.c:657 info/infokey.c:918 makeinfo/makeinfo.c:475
+#: util/texindex.c:259
+msgid ""
+"\n"
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+
+#: info/info.c:691
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr ""
+
+#: info/info.c:692
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr ""
+
+#: info/info.c:693
+msgid "Cannot find a window!"
+msgstr ""
+
+#: info/info.c:694
+msgid "Point doesn't appear within this window's node!"
+msgstr ""
+
+#: info/info.c:695
+msgid "Cannot delete the last window."
+msgstr ""
+
+#: info/info.c:696
+msgid "No menu in this node."
+msgstr ""
+
+#: info/info.c:697
+msgid "No footnotes in this node."
+msgstr ""
+
+#: info/info.c:698
+msgid "No cross references in this node."
+msgstr ""
+
+#: info/info.c:699
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr ""
+
+#: info/info.c:700
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr ""
+
+#: info/info.c:701
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr ""
+
+#: info/info.c:702
+msgid "You are already at the last page of this node."
+msgstr ""
+
+#: info/info.c:703
+msgid "You are already at the first page of this node."
+msgstr ""
+
+#: info/info.c:704
+msgid "Only one window."
+msgstr ""
+
+#: info/info.c:705
+msgid "Resulting window would be too small."
+msgstr ""
+
+#: info/info.c:706
+msgid "Not enough room for a help window, please delete a window."
+msgstr ""
+
+#: info/infodoc.c:45
+msgid "Basic Info command keys\n"
+msgstr ""
+
+#: info/infodoc.c:47
+msgid "\\%-10[quit-help] Close this help window.\n"
+msgstr ""
+
+#: info/infodoc.c:48
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr ""
+
+#: info/infodoc.c:49
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr ""
+
+#: info/infodoc.c:51
+msgid "\\%-10[prev-line] Move up one line.\n"
+msgstr ""
+
+#: info/infodoc.c:52
+msgid "\\%-10[next-line] Move down one line.\n"
+msgstr ""
+
+#: info/infodoc.c:53
+msgid "\\%-10[scroll-backward] Scroll backward one screenful.\n"
+msgstr ""
+
+#: info/infodoc.c:54
+msgid "\\%-10[scroll-forward] Scroll forward one screenful.\n"
+msgstr ""
+
+#: info/infodoc.c:55
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr ""
+
+#: info/infodoc.c:56
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr ""
+
+#: info/infodoc.c:58
+msgid "\\%-10[move-to-next-xref] Skip to the next hypertext link.\n"
+msgstr ""
+
+#: info/infodoc.c:59
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under the "
+"cursor.\n"
+msgstr ""
+
+#: info/infodoc.c:60
+msgid "\\%-10[history-node] Go back to the last node seen in this window.\n"
+msgstr ""
+
+#: info/infodoc.c:62
+msgid "\\%-10[global-prev-node] Go to the previous node in the document.\n"
+msgstr ""
+
+#: info/infodoc.c:63
+msgid "\\%-10[global-next-node] Go to the next node in the document.\n"
+msgstr ""
+
+#: info/infodoc.c:64
+msgid "\\%-10[prev-node] Go to the previous node on this level.\n"
+msgstr ""
+
+#: info/infodoc.c:65
+msgid "\\%-10[next-node] Go to the next node on this level.\n"
+msgstr ""
+
+#: info/infodoc.c:66
+msgid "\\%-10[up-node] Go up one level.\n"
+msgstr ""
+
+#: info/infodoc.c:67
+msgid "\\%-10[top-node] Go to the top node of this document.\n"
+msgstr ""
+
+#: info/infodoc.c:68
+msgid "\\%-10[dir-node] Go to the main `directory' node.\n"
+msgstr ""
+
+#: info/infodoc.c:70
+msgid "1...9 Pick the first...ninth item in this node's menu.\n"
+msgstr ""
+
+#: info/infodoc.c:71
+msgid "\\%-10[last-menu-item] Pick the last item in this node's menu.\n"
+msgstr ""
+
+#: info/infodoc.c:72
+msgid "\\%-10[menu-item] Pick a menu item specified by name.\n"
+msgstr ""
+
+#: info/infodoc.c:73
+msgid "\\%-10[xref-item] Follow a cross reference specified by name.\n"
+msgstr ""
+
+#: info/infodoc.c:74
+msgid "\\%-10[goto-node] Go to a node specified by name.\n"
+msgstr ""
+
+#: info/infodoc.c:76
+msgid "\\%-10[search] Search forward for a specified string.\n"
+msgstr ""
+
+#: info/infodoc.c:77
+msgid "\\%-10[search-previous] Search for previous occurrence.\n"
+msgstr ""
+
+#: info/infodoc.c:78
+msgid "\\%-10[search-next] Search for next occurrence.\n"
+msgstr ""
+
+#: info/infodoc.c:79
+msgid ""
+"\\%-10[index-search] Search for a specified string in the index, and\n"
+" select the node referenced by the first entry found.\n"
+msgstr ""
+
+#: info/infodoc.c:81
+msgid "\\%-10[abort-key] Cancel the current operation.\n"
+msgstr ""
+
+#: info/infodoc.c:89
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+
+#: info/infodoc.c:92
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr ""
+
+#: info/infodoc.c:93
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr ""
+
+#: info/infodoc.c:94
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr ""
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr ""
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr ""
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr ""
+
+#: info/infodoc.c:101
+#, c-format
+msgid ""
+" %-10s Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+
+#: info/infodoc.c:103
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr ""
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr ""
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr ""
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr ""
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr ""
+
+#: info/infodoc.c:108
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr ""
+
+#: info/infodoc.c:110
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr ""
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr ""
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr ""
+
+#: info/infodoc.c:115
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr ""
+
+#: info/infodoc.c:116
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr ""
+
+#: info/infodoc.c:117
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr ""
+
+#: info/infodoc.c:119
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+
+#: info/infodoc.c:121
+#, c-format
+msgid " %-10s Pick first...ninth item in node's menu.\n"
+msgstr ""
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr ""
+
+#: info/infodoc.c:125
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr ""
+
+#: info/infodoc.c:127
+#, c-format
+msgid ""
+" %-10s Move to node specified by name.\n"
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+
+#: info/infodoc.c:129
+#, c-format
+msgid ""
+" %-10s Search forward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+
+#: info/infodoc.c:131
+#, c-format
+msgid ""
+" %-10s Search backward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+
+#: info/infodoc.c:312
+msgid "The current search path is:\n"
+msgstr ""
+
+#: info/infodoc.c:316
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+
+#: info/infodoc.c:343
+#, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+
+#: info/infodoc.c:347
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+
+#: info/infodoc.c:477
+msgid "Display help message"
+msgstr ""
+
+#: info/infodoc.c:495
+msgid "Visit Info node `(info)Help'"
+msgstr ""
+
+#: info/infodoc.c:633
+msgid "Print documentation for KEY"
+msgstr ""
+
+#: info/infodoc.c:645
+#, c-format
+msgid "Describe key: %s"
+msgstr ""
+
+#: info/infodoc.c:656
+#, c-format
+msgid "ESC %s is undefined."
+msgstr ""
+
+#: info/infodoc.c:672 info/infodoc.c:701
+#, c-format
+msgid "%s is undefined."
+msgstr ""
+
+#: info/infodoc.c:722
+#, c-format
+msgid "%s is defined to %s."
+msgstr ""
+
+#: info/infodoc.c:1146
+msgid "Show what to type to execute a given command"
+msgstr ""
+
+#: info/infodoc.c:1150
+msgid "Where is command: "
+msgstr ""
+
+#: info/infodoc.c:1172
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr ""
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr ""
+
+#: info/infodoc.c:1183
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr ""
+
+#: info/infodoc.c:1188
+#, c-format
+msgid "There is no function named `%s'"
+msgstr ""
+
+#: info/infodoc.c:96
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+
+#: info/infokey.c:170
+msgid "incorrect number of arguments"
+msgstr ""
+
+#: info/infokey.c:201
+#, c-format
+msgid "cannot open input file `%s'"
+msgstr ""
+
+#: info/infokey.c:215
+#, c-format
+msgid "cannot create output file `%s'"
+msgstr ""
+
+#: info/infokey.c:226
+#, c-format
+msgid "error writing to `%s'"
+msgstr ""
+
+#: info/infokey.c:232
+#, c-format
+msgid "error closing output file `%s'"
+msgstr ""
+
+#: info/infokey.c:450
+msgid "key sequence too long"
+msgstr ""
+
+#: info/infokey.c:529
+msgid "missing key sequence"
+msgstr ""
+
+#: info/infokey.c:610
+msgid "NUL character (\\000) not permitted"
+msgstr ""
+
+#: info/infokey.c:641
+#, c-format
+msgid "NUL character (^%c) not permitted"
+msgstr ""
+
+#: info/infokey.c:665
+msgid "missing action name"
+msgstr ""
+
+#: info/infokey.c:681 info/infokey.c:756
+msgid "section too long"
+msgstr ""
+
+#: info/infokey.c:688
+#, c-format
+msgid "unknown action `%s'"
+msgstr ""
+
+#: info/infokey.c:698
+msgid "action name too long"
+msgstr ""
+
+#: info/infokey.c:712
+#, c-format
+msgid "extra characters following action `%s'"
+msgstr ""
+
+#: info/infokey.c:723
+msgid "missing variable name"
+msgstr ""
+
+#: info/infokey.c:733
+msgid "missing `=' immediately after variable name"
+msgstr ""
+
+#: info/infokey.c:741
+msgid "variable name too long"
+msgstr ""
+
+#: info/infokey.c:765
+msgid "value too long"
+msgstr ""
+
+#: info/infokey.c:890
+#, c-format
+msgid "\"%s\", line %u: "
+msgstr ""
+
+#: info/infokey.c:906
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [INPUT-FILE]\n"
+"\n"
+"Compile infokey source file to infokey file. Reads INPUT-FILE (default\n"
+"$HOME/.infokey) and writes compiled key file to (by default) $HOME/.info.\n"
+"\n"
+"Options:\n"
+" --output FILE output to FILE instead of $HOME/.info\n"
+" --help display this help and exit.\n"
+" --version display version information and exit.\n"
+msgstr ""
+
+#: info/infomap.c:955
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr ""
+
+#: info/infomap.c:958
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr ""
+
+#: info/infomap.c:971
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr ""
+
+#: info/infomap.c:990
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:999
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1015
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1036
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1171
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr ""
+
+#: info/infomap.c:1221
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr ""
+
+#: info/m-x.c:68
+msgid "Read the name of an Info command and describe it"
+msgstr ""
+
+#: info/m-x.c:72
+msgid "Describe command: "
+msgstr ""
+
+#: info/m-x.c:95
+msgid "Read a command name in the echo area and execute it"
+msgstr ""
+
+#: info/m-x.c:139
+msgid "Cannot execute an `echo-area' command here."
+msgstr ""
+
+#: info/m-x.c:153
+#, c-format
+msgid "Undefined command: %s"
+msgstr ""
+
+#: info/m-x.c:159
+msgid "Set the height of the displayed window"
+msgstr ""
+
+#: info/m-x.c:172
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr ""
+
+#: info/makedoc.c:166 info/makedoc.c:174
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+
+#: info/makedoc.c:556
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr ""
+
+#: info/nodemenu.c:30
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+
+#: info/nodemenu.c:201
+msgid ""
+"Here is the menu of nodes you have recently visited.\n"
+"Select one from this menu, or use `\\[history-node]' in another window.\n"
+msgstr ""
+
+#: info/nodemenu.c:223
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr ""
+
+#: info/nodemenu.c:303
+msgid "Select a node which has been previously visited in a visible window"
+msgstr ""
+
+#: info/nodemenu.c:316
+msgid "Select visited node: "
+msgstr ""
+
+#: info/nodemenu.c:336 info/session.c:2578
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr ""
+
+#: info/search.c:166
+#, c-format
+msgid "regexp error: %s"
+msgstr ""
+
+#: info/session.c:164
+#, c-format
+msgid ""
+"Welcome to Info version %s. Type \\[get-help-window] for help, \\[menu-item] "
+"for menu item."
+msgstr ""
+
+#: info/session.c:625
+msgid "Move down to the next line"
+msgstr ""
+
+#: info/session.c:661
+msgid "Move up to the previous line"
+msgstr ""
+
+#: info/session.c:931
+msgid "Move to the end of the line"
+msgstr ""
+
+#: info/session.c:942
+msgid "Move to the start of the line"
+msgstr ""
+
+#: info/session.c:1142
+msgid "Next"
+msgstr ""
+
+#: info/session.c:1158 info/session.c:1283
+msgid "No more nodes within this document."
+msgstr ""
+
+#: info/session.c:1309
+msgid "No `Prev' for this node."
+msgstr ""
+
+#: info/session.c:1329
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr ""
+
+#: info/session.c:1391
+msgid "Move forwards or down through node structure"
+msgstr ""
+
+#: info/session.c:1407
+msgid "Move backwards or up through node structure"
+msgstr ""
+
+#: info/session.c:1508
+msgid "Scroll forward in this window"
+msgstr ""
+
+#: info/session.c:1516
+msgid "Scroll forward in this window and set default window size"
+msgstr ""
+
+#: info/session.c:1524
+msgid "Scroll forward in this window staying within node"
+msgstr ""
+
+#: info/session.c:1532
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr ""
+
+#: info/session.c:1540
+msgid "Scroll backward in this window"
+msgstr ""
+
+#: info/session.c:1548
+msgid "Scroll backward in this window and set default window size"
+msgstr ""
+
+#: info/session.c:1557
+msgid "Scroll backward in this window staying within node"
+msgstr ""
+
+#: info/session.c:1565
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr ""
+
+#: info/session.c:1573
+msgid "Move to the start of this node"
+msgstr ""
+
+#: info/session.c:1580
+msgid "Move to the end of this node"
+msgstr ""
+
+#: info/session.c:1587
+msgid "Scroll down by lines"
+msgstr ""
+
+#: info/session.c:1604
+msgid "Scroll up by lines"
+msgstr ""
+
+#: info/session.c:1622
+msgid "Scroll down by half screen size"
+msgstr ""
+
+#: info/session.c:1648
+msgid "Scroll up by half screen size"
+msgstr ""
+
+#: info/session.c:1677
+msgid "Select the next window"
+msgstr ""
+
+#: info/session.c:1716
+msgid "Select the previous window"
+msgstr ""
+
+#: info/session.c:1767
+msgid "Split the current window"
+msgstr ""
+
+#: info/session.c:1848
+msgid "Delete the current window"
+msgstr ""
+
+#: info/session.c:1856
+msgid "Cannot delete a permanent window"
+msgstr ""
+
+#: info/session.c:1888
+msgid "Delete all other windows"
+msgstr ""
+
+#: info/session.c:1934
+msgid "Scroll the other window"
+msgstr ""
+
+#: info/session.c:1955
+msgid "Scroll the other window backward"
+msgstr ""
+
+#: info/session.c:1961
+msgid "Grow (or shrink) this window"
+msgstr ""
+
+#: info/session.c:1972
+msgid "Divide the available screen space among the visible windows"
+msgstr ""
+
+#: info/session.c:1979
+msgid "Toggle the state of line wrapping in the current window"
+msgstr ""
+
+#: info/session.c:1986
+msgid "Toggle the usage of regular expressions in searches"
+msgstr ""
+
+#: info/session.c:1990
+msgid "Using regular expressions for searches."
+msgstr ""
+
+#: info/session.c:1991
+msgid "Using literal strings for searches."
+msgstr ""
+
+#: info/session.c:2162
+msgid "Select the Next node"
+msgstr ""
+
+#: info/session.c:2170
+msgid "Select the Prev node"
+msgstr ""
+
+#: info/session.c:2178
+msgid "Select the Up node"
+msgstr ""
+
+#: info/session.c:2185
+msgid "Select the last node in this file"
+msgstr ""
+
+#: info/session.c:2212 info/session.c:2245
+msgid "This window has no additional nodes"
+msgstr ""
+
+#: info/session.c:2218
+msgid "Select the first node in this file"
+msgstr ""
+
+#: info/session.c:2252
+msgid "Select the last item in this node's menu"
+msgstr ""
+
+#: info/session.c:2258
+msgid "Select this menu item"
+msgstr ""
+
+#: info/session.c:2291
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr ""
+
+#: info/session.c:2485 info/session.c:2486
+#, c-format
+msgid "Menu item (%s): "
+msgstr ""
+
+#: info/session.c:2489
+msgid "Menu item: "
+msgstr ""
+
+#: info/session.c:2496 info/session.c:2497
+#, c-format
+msgid "Follow xref (%s): "
+msgstr ""
+
+#: info/session.c:2500
+msgid "Follow xref: "
+msgstr ""
+
+#: info/session.c:2629
+msgid "Read a menu item and select its node"
+msgstr ""
+
+#: info/session.c:2637
+msgid "Read a footnote or cross reference and select its node"
+msgstr ""
+
+#: info/session.c:2643
+msgid "Move to the start of this node's menu"
+msgstr ""
+
+#: info/session.c:2667
+msgid "Visit as many menu items at once as possible"
+msgstr ""
+
+#: info/session.c:2695
+msgid "Read a node name and select it"
+msgstr ""
+
+#: info/session.c:2750 info/session.c:2755
+msgid "Goto node: "
+msgstr ""
+
+#: info/session.c:2819
+#, c-format
+msgid "No menu in node `%s'."
+msgstr ""
+
+#: info/session.c:2865
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr ""
+
+#: info/session.c:2895
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr ""
+
+#: info/session.c:2945
+msgid "Read a list of menus starting from dir and follow them"
+msgstr ""
+
+#: info/session.c:2947
+msgid "Follow menus: "
+msgstr ""
+
+#: info/session.c:3140
+msgid "Find the node describing program invocation"
+msgstr ""
+
+#: info/session.c:3142
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr ""
+
+#: info/session.c:3180
+msgid "Read a manpage reference and select it"
+msgstr ""
+
+#: info/session.c:3184
+msgid "Get Manpage: "
+msgstr ""
+
+#: info/session.c:3214
+msgid "Select the node `Top' in this file"
+msgstr ""
+
+#: info/session.c:3220
+msgid "Select the node `(dir)'"
+msgstr ""
+
+#: info/session.c:3237 info/session.c:3239
+#, c-format
+msgid "Kill node (%s): "
+msgstr ""
+
+#: info/session.c:3291
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr ""
+
+#: info/session.c:3301
+msgid "Cannot kill the last node"
+msgstr ""
+
+#: info/session.c:3387
+msgid "Select the most recently selected node"
+msgstr ""
+
+#: info/session.c:3393
+msgid "Kill this node"
+msgstr ""
+
+#: info/session.c:3401
+msgid "Read the name of a file and select it"
+msgstr ""
+
+#: info/session.c:3405
+msgid "Find file: "
+msgstr ""
+
+#: info/session.c:3422
+#, c-format
+msgid "Cannot find `%s'."
+msgstr ""
+
+#: info/session.c:3465 info/session.c:3583
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr ""
+
+#: info/session.c:3479 info/session.c:3601 info/session.c:3661
+msgid "Done."
+msgstr ""
+
+#: info/session.c:3534
+#, c-format
+msgid "Writing node %s..."
+msgstr ""
+
+#: info/session.c:3610
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr ""
+
+#: info/session.c:3645
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr ""
+
+#: info/session.c:3651
+#, c-format
+msgid "Printing node %s..."
+msgstr ""
+
+#: info/session.c:3900
+msgid "Search continued from the end of the document."
+msgstr ""
+
+#: info/session.c:3905
+msgid "Search continued from the beginning of the document."
+msgstr ""
+
+#: info/session.c:3922
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr ""
+
+#: info/session.c:3979
+msgid "Read a string and search for it case-sensitively"
+msgstr ""
+
+#: info/session.c:3986
+msgid "Read a string and search for it"
+msgstr ""
+
+#: info/session.c:3994
+msgid "Read a string and search backward for it"
+msgstr ""
+
+#: info/session.c:4030 info/session.c:4036
+#, c-format
+msgid "%s%s%s [%s]: "
+msgstr ""
+
+#: info/session.c:4031 info/session.c:4037
+msgid "Regexp search"
+msgstr ""
+
+#: info/session.c:4032 info/session.c:4038
+msgid " case-sensitively"
+msgstr ""
+
+#: info/session.c:4033 info/session.c:4039
+msgid " backward"
+msgstr ""
+
+#: info/session.c:4037
+msgid "Search"
+msgstr ""
+
+#: info/session.c:4079
+msgid "Search failed."
+msgstr ""
+
+#: info/session.c:4097
+msgid "Repeat last search in the same direction"
+msgstr ""
+
+#: info/session.c:4100 info/session.c:4110
+msgid "No previous search string"
+msgstr ""
+
+#: info/session.c:4107
+msgid "Repeat last search in the reverse direction"
+msgstr ""
+
+#: info/session.c:4126 info/session.c:4132
+msgid "Search interactively for a string as you type it"
+msgstr ""
+
+#: info/session.c:4212
+msgid "Regexp I-search backward: "
+msgstr ""
+
+#: info/session.c:4213
+msgid "I-search backward: "
+msgstr ""
+
+#: info/session.c:4215
+msgid "Regexp I-search: "
+msgstr ""
+
+#: info/session.c:4216
+msgid "I-search: "
+msgstr ""
+
+#: info/session.c:4241 info/session.c:4243
+msgid "Failing "
+msgstr ""
+
+#: info/session.c:4734
+msgid "Move to the previous cross reference"
+msgstr ""
+
+#: info/session.c:4752
+msgid "Move to the next cross reference"
+msgstr ""
+
+#: info/session.c:4774
+msgid "Select reference or menu item appearing on this line"
+msgstr ""
+
+#: info/session.c:4797
+msgid "Cancel current operation"
+msgstr ""
+
+#: info/session.c:4804
+msgid "Quit"
+msgstr ""
+
+#: info/session.c:4813
+msgid "Move the cursor to a specific line of the window"
+msgstr ""
+
+#: info/session.c:4845
+msgid "Redraw the display"
+msgstr ""
+
+#: info/session.c:4882
+msgid "Quit using Info"
+msgstr ""
+
+#: info/session.c:4895
+msgid "Run command bound to this key's lowercase variant"
+msgstr ""
+
+#: info/session.c:4906
+#, c-format
+msgid "Unknown command (%s)."
+msgstr ""
+
+#: info/session.c:4909
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr ""
+
+#: info/session.c:4910
+#, c-format
+msgid "`%s' is invalid"
+msgstr ""
+
+#: info/session.c:5125
+msgid "Add this digit to the current numeric argument"
+msgstr ""
+
+#: info/session.c:5134
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr ""
+
+#: info/session.c:5149
+msgid "Internally used by \\[universal-argument]"
+msgstr ""
+
+#: info/tilde.c:336
+#, c-format
+msgid "readline: Out of virtual memory!\n"
+msgstr ""
+
+#: info/variables.c:37
+msgid "When \"On\", footnotes appear and disappear automatically"
+msgstr ""
+
+#: info/variables.c:41
+msgid "When \"On\", creating or deleting a window resizes other windows"
+msgstr ""
+
+#: info/variables.c:45
+msgid "When \"On\", flash the screen instead of ringing the bell"
+msgstr ""
+
+#: info/variables.c:49
+msgid "When \"On\", errors cause the bell to ring"
+msgstr ""
+
+#: info/variables.c:53
+msgid "When \"On\", Info garbage collects files which had to be uncompressed"
+msgstr ""
+
+#: info/variables.c:56
+msgid "When \"On\", the portion of the matched search string is highlighted"
+msgstr ""
+
+#: info/variables.c:60
+msgid "Controls what happens when scrolling is requested at the end of a node"
+msgstr ""
+
+#: info/variables.c:65
+msgid "Same as scroll-behaviour"
+msgstr ""
+
+#: info/variables.c:69
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr ""
+
+#: info/variables.c:73
+msgid "Controls whether scroll-behavior affects cursor movement commands"
+msgstr ""
+
+#: info/variables.c:77
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr ""
+
+#: info/variables.c:81
+msgid ""
+"What to do when a scrolling command is issued at the end of the last node"
+msgstr ""
+
+#: info/variables.c:88
+msgid "Explain the use of a variable"
+msgstr ""
+
+#: info/variables.c:94
+msgid "Describe variable: "
+msgstr ""
+
+#: info/variables.c:113
+msgid "Set the value of an Info variable"
+msgstr ""
+
+#: info/variables.c:119
+msgid "Set variable: "
+msgstr ""
+
+#: info/variables.c:137
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr ""
+
+#: info/variables.c:178
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr ""
+
+#: info/window.c:1026
+msgid "--*** Tags out of Date ***"
+msgstr ""
+
+#: info/window.c:1037
+msgid "-----Info: (), lines ----, "
+msgstr ""
+
+#: info/window.c:1044
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr ""
+
+#: info/window.c:1048
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr ""
+
+#: info/window.c:1055
+#, c-format
+msgid " Subfile: %s"
+msgstr ""
+
+#: install-info/install-info.c:221
+#, c-format
+msgid "%s: warning: "
+msgstr ""
+
+#: install-info/install-info.c:270
+#, c-format
+msgid " for %s"
+msgstr ""
+
+#: install-info/install-info.c:500
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr ""
+
+#: install-info/install-info.c:508
+#, c-format
+msgid "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+msgstr ""
+
+#: install-info/install-info.c:510
+msgid "Add or remove entries in INFO-FILE from the Info directory DIR-FILE."
+msgstr ""
+
+#: install-info/install-info.c:513
+msgid ""
+"Options:\n"
+" --debug report what is being done.\n"
+" --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+" don't insert any new entries.\n"
+" --description=TEXT the description of the entry is TEXT; used with\n"
+" the --name option to become synonymous with the\n"
+" --entry option.\n"
+" --dir-file=NAME specify file name of Info directory file;\n"
+" equivalent to using the DIR-FILE argument.\n"
+" --dry-run same as --test."
+msgstr ""
+
+#: install-info/install-info.c:525
+msgid ""
+" --entry=TEXT insert TEXT as an Info directory entry.\n"
+" TEXT is written as an Info menu item line followed\n"
+" by zero or more extra lines starting with "
+"whitespace.\n"
+" If you specify more than one entry, all are added.\n"
+" If you don't specify any entries, they are determined\n"
+" from information in the Info file itself.\n"
+" When removing, TEXT specifies the entry to remove.\n"
+" TEXT is only removed as a last resort, if the\n"
+" entry as determined from the Info file is not "
+"present,\n"
+" and the basename of the Info file isn't found either."
+msgstr ""
+
+#: install-info/install-info.c:537
+msgid ""
+" --help display this help and exit.\n"
+" --info-dir=DIR same as --dir-file=DIR/dir.\n"
+" --info-file=FILE specify Info file to install in the directory;\n"
+" equivalent to using the INFO-FILE argument.\n"
+" --item=TEXT same as --entry=TEXT.\n"
+" --keep-old do not replace entries, or remove empty sections.\n"
+" --menuentry=TEXT same as --name=TEXT.\n"
+" --name=TEXT the name of the entry is TEXT; used with --description\n"
+" to become synonymous with the --entry option.\n"
+" --no-indent do not format new entries in the DIR file.\n"
+" --quiet suppress warnings."
+msgstr ""
+
+#: install-info/install-info.c:550
+msgid ""
+" --regex=R put this file's entries in all sections that match the\n"
+" regular expression R (ignoring case).\n"
+" --remove same as --delete.\n"
+" --remove-exactly only remove if the info file name matches exactly;\n"
+" suffixes such as .info and .gz are not ignored.\n"
+" --section=SEC put entries in section SEC of the directory.\n"
+" If you specify more than one section, all the entries\n"
+" are added in each of the sections.\n"
+" If you don't specify any sections, they are "
+"determined\n"
+" from information in the Info file itself.\n"
+" --section R SEC equivalent to --regex=R --section=SEC --add-once."
+msgstr ""
+
+#: install-info/install-info.c:563
+msgid ""
+" --silent suppress warnings.\n"
+" --test suppress updating of DIR-FILE.\n"
+" --version display version information and exit."
+msgstr ""
+
+#: install-info/install-info.c:570
+msgid ""
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+
+#: install-info/install-info.c:597
+#, c-format
+msgid ""
+"This is the file .../info/dir, which contains the\n"
+"topmost node of the Info hierarchy, called (dir)Top.\n"
+"The first time you invoke Info you start off looking at this node.\n"
+"\n"
+"%s\tThis is the top of the INFO tree\n"
+"\n"
+" This (the Directory node) gives a menu of major topics.\n"
+" Typing \"q\" exits, \"?\" lists all Info commands, \"d\" returns here,\n"
+" \"h\" gives a primer for first-timers,\n"
+" \"mEmacs<Return>\" visits the Emacs manual, etc.\n"
+"\n"
+" In Emacs, you can click mouse button 2 on a menu item or cross reference\n"
+" to select it.\n"
+"\n"
+"%s\n"
+msgstr ""
+
+#: install-info/install-info.c:622
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr ""
+
+#: install-info/install-info.c:715
+#, c-format
+msgid "%s: empty file"
+msgstr ""
+
+#: install-info/install-info.c:1046 install-info/install-info.c:1086
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr ""
+
+#: install-info/install-info.c:1081
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr ""
+
+#: install-info/install-info.c:1946 install-info/install-info.c:1956
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr ""
+
+#: install-info/install-info.c:2036
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr ""
+
+#: install-info/install-info.c:2069
+#, c-format
+msgid "Extra regular expression specified, ignoring `%s'"
+msgstr ""
+
+#: install-info/install-info.c:2081
+#, c-format
+msgid "Error in regular expression `%s': %s"
+msgstr ""
+
+#: install-info/install-info.c:2139
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr ""
+
+#: install-info/install-info.c:2143
+msgid "No input file specified; try --help for more information."
+msgstr ""
+
+#: install-info/install-info.c:2146
+msgid "No dir file specified; try --help for more information."
+msgstr ""
+
+#: install-info/install-info.c:2288
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr ""
+
+#: install-info/install-info.c:2536
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr ""
+
+#: lib/xexit.c:54
+msgid "ferror on stdout\n"
+msgstr ""
+
+#: lib/xexit.c:59
+msgid "fflush error on stdout\n"
+msgstr ""
+
+#: makeinfo/cmds.c:582 makeinfo/cmds.c:604
+#, c-format
+msgid "arguments to @%s ignored"
+msgstr ""
+
+#: makeinfo/cmds.c:779
+msgid "January"
+msgstr ""
+
+#: makeinfo/cmds.c:779
+msgid "February"
+msgstr ""
+
+#: makeinfo/cmds.c:779
+msgid "March"
+msgstr ""
+
+#: makeinfo/cmds.c:779
+msgid "April"
+msgstr ""
+
+#: makeinfo/cmds.c:779
+msgid "May"
+msgstr ""
+
+#: makeinfo/cmds.c:780
+msgid "June"
+msgstr ""
+
+#: makeinfo/cmds.c:780
+msgid "July"
+msgstr ""
+
+#: makeinfo/cmds.c:780
+msgid "August"
+msgstr ""
+
+#: makeinfo/cmds.c:780
+msgid "September"
+msgstr ""
+
+#: makeinfo/cmds.c:780
+msgid "October"
+msgstr ""
+
+#: makeinfo/cmds.c:781
+msgid "November"
+msgstr ""
+
+#: makeinfo/cmds.c:781
+msgid "December"
+msgstr ""
+
+#: makeinfo/cmds.c:1131
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr ""
+
+#: makeinfo/cmds.c:1174
+msgid "@sc argument all uppercase, thus no effect"
+msgstr ""
+
+#: makeinfo/cmds.c:1229
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr ""
+
+#: makeinfo/cmds.c:1269
+msgid "end of file inside verb block"
+msgstr ""
+
+#: makeinfo/cmds.c:1277
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr ""
+
+#: makeinfo/cmds.c:1308
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+
+#: makeinfo/cmds.c:1504
+#, c-format
+msgid "%c%s is obsolete"
+msgstr ""
+
+#: makeinfo/cmds.c:1612
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr ""
+
+#: makeinfo/cmds.c:2023 makeinfo/footnote.c:81
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr ""
+
+#: makeinfo/cmds.c:2033 makeinfo/makeinfo.c:4317
+msgid "asis"
+msgstr ""
+
+#: makeinfo/cmds.c:2035 makeinfo/cmds.c:2065 makeinfo/makeinfo.c:4319
+msgid "none"
+msgstr ""
+
+#: makeinfo/cmds.c:2049
+#, c-format
+msgid "Bad argument to @%s"
+msgstr ""
+
+#: makeinfo/cmds.c:2063
+msgid "insert"
+msgstr ""
+
+#: makeinfo/cmds.c:2079
+#, c-format
+msgid "Bad argument to @%s: %s"
+msgstr ""
+
+#: makeinfo/cmds.c:2162
+#, c-format
+msgid "Expected @%s on or off, not `%s'"
+msgstr ""
+
+#: makeinfo/cmds.c:2182
+#, c-format
+msgid "Only @%s 10 or 11 is supported, not `%s'"
+msgstr ""
+
+#: makeinfo/defun.c:83
+msgid "Missing `}' in @def arg"
+msgstr ""
+
+#: makeinfo/defun.c:711
+#, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr ""
+
+#: makeinfo/files.c:434
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr ""
+
+#: makeinfo/files.c:637
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr ""
+
+#: makeinfo/files.c:645
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr ""
+
+#: makeinfo/files.c:693
+msgid "Output buffer not empty."
+msgstr ""
+
+#: makeinfo/float.c:181
+#, c-format
+msgid "Requested float type `%s' not previously used"
+msgstr ""
+
+#: makeinfo/float.c:376 makeinfo/float.c:382 makeinfo/index.c:959
+#: makeinfo/index.c:965
+msgid "See "
+msgstr ""
+
+#: makeinfo/footnote.c:149
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr ""
+
+#: makeinfo/footnote.c:164
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr ""
+
+#: makeinfo/footnote.c:197
+msgid "Footnote defined without parent node"
+msgstr ""
+
+#: makeinfo/footnote.c:209
+msgid "Footnotes inside footnotes are not allowed"
+msgstr ""
+
+#: makeinfo/footnote.c:301 makeinfo/index.c:187
+msgid "Footnotes"
+msgstr ""
+
+#: makeinfo/html.c:91
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr ""
+
+#: makeinfo/html.c:180
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr ""
+
+#: makeinfo/html.c:426
+msgid "[unexpected] no html tag to pop"
+msgstr ""
+
+#: makeinfo/html.c:800
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr ""
+
+#: makeinfo/index.c:167
+#, c-format
+msgid "Unknown index `%s'"
+msgstr ""
+
+#: makeinfo/index.c:232
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr ""
+
+#: makeinfo/index.c:410
+#, c-format
+msgid "Index `%s' already exists"
+msgstr ""
+
+#: makeinfo/index.c:453
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr ""
+
+#: makeinfo/index.c:676
+msgid "(line )"
+msgstr ""
+
+#: makeinfo/index.c:684
+#, c-format
+msgid "(line %*d)"
+msgstr ""
+
+#: makeinfo/index.c:765
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr ""
+
+#: makeinfo/index.c:834
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr ""
+
+#: makeinfo/index.c:837 makeinfo/index.c:873
+msgid "(outside of any node)"
+msgstr ""
+
+#: makeinfo/insertion.c:161
+msgid "@item not allowed in argument to @itemize"
+msgstr ""
+
+#: makeinfo/insertion.c:242
+msgid "Broken-Type in insertion_type_pname"
+msgstr ""
+
+#: makeinfo/insertion.c:338
+msgid "Enumeration stack overflow"
+msgstr ""
+
+#: makeinfo/insertion.c:370
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr ""
+
+#: makeinfo/insertion.c:639
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr ""
+
+#: makeinfo/insertion.c:727
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr ""
+
+#: makeinfo/insertion.c:981
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr ""
+
+#: makeinfo/insertion.c:1349
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr ""
+
+#: makeinfo/insertion.c:1618
+#, c-format
+msgid "%s requires letter or digit"
+msgstr ""
+
+#: makeinfo/insertion.c:1718
+msgid "end of file inside verbatim block"
+msgstr ""
+
+#: makeinfo/insertion.c:1942
+#, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr ""
+
+#: makeinfo/insertion.c:1978
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr ""
+
+#: makeinfo/insertion.c:1979
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr ""
+
+#: makeinfo/insertion.c:1991
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr ""
+
+#: makeinfo/insertion.c:2047
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr ""
+
+#: makeinfo/insertion.c:2061
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr ""
+
+#: makeinfo/insertion.c:2092
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr ""
+
+#: makeinfo/insertion.c:2097
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr ""
+
+#: makeinfo/insertion.c:2103
+#, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr ""
+
+#: makeinfo/insertion.c:2200
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr ""
+
+#: makeinfo/insertion.c:2209
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr ""
+
+#: makeinfo/insertion.c:2383
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr ""
+
+#: makeinfo/lang.c:1218
+#, c-format
+msgid "no default territory known for language `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:1281
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr ""
+
+#: makeinfo/lang.c:1399
+#, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:1407
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr ""
+
+#: makeinfo/lang.c:1492
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:1800
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr ""
+
+#: makeinfo/lang.c:1804
+#, c-format
+msgid "%c%s expects a single character `i' or `j' as argument"
+msgstr ""
+
+#: makeinfo/macro.c:128
+#, c-format
+msgid "macro `%s' previously defined"
+msgstr ""
+
+#: makeinfo/macro.c:132
+#, c-format
+msgid "here is the previous definition of `%s'"
+msgstr ""
+
+#: makeinfo/macro.c:359
+#, c-format
+msgid "\\ in macro expansion followed by `%s' instead of parameter name"
+msgstr ""
+
+#: makeinfo/macro.c:401
+#, c-format
+msgid "Macro `%s' called on line %d with too many args"
+msgstr ""
+
+#: makeinfo/macro.c:580
+#, c-format
+msgid "%cend macro not found"
+msgstr ""
+
+#: makeinfo/macro.c:591
+msgid "@allow-recursion is deprecated; please use @rmacro instead"
+msgstr ""
+
+#: makeinfo/macro.c:606
+msgid "@quote-arg is deprecated; arguments are quoted by default"
+msgstr ""
+
+#: makeinfo/macro.c:649
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:188
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:306
+#, c-format
+msgid "%s:%d: warning: "
+msgstr ""
+
+#: makeinfo/makeinfo.c:325 makeinfo/makeinfo.c:2340
+#, c-format
+msgid "Misplaced %c"
+msgstr ""
+
+#: makeinfo/makeinfo.c:344
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:347
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:350
+msgid ""
+"Translate Texinfo source documentation to various other formats, by default\n"
+"Info files suitable for reading online with Emacs or standalone GNU Info.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:354
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\n"
+" --document-language=STR locale to use in translating Texinfo keywords\n"
+" for the output document (default C).\n"
+" --force preserve output even if errors.\n"
+" --help display this help and exit.\n"
+" --no-validate suppress node cross-reference validation.\n"
+" --no-warn suppress warnings (but not errors).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:369
+#, no-wrap
+msgid ""
+"Output format selection (default is to produce Info):\n"
+" --docbook output Docbook XML rather than Info.\n"
+" --html output HTML rather than Info.\n"
+" --xml output Texinfo XML rather than Info.\n"
+" --plaintext output plain text rather than Info.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:377
+msgid ""
+"General output options:\n"
+" -E, --macro-expand=FILE output macro-expanded source to FILE,\n"
+" ignoring any @setfilename.\n"
+" --no-headers suppress node separators, Node: lines, and "
+"menus\n"
+" from Info output (thus producing plain "
+"text)\n"
+" or from HTML (thus producing shorter "
+"output);\n"
+" also, write to standard output by default.\n"
+" --no-split suppress the splitting of Info or HTML "
+"output,\n"
+" generate only one output file.\n"
+" --number-sections output chapter and sectioning numbers.\n"
+" -o, --output=FILE output to FILE (or directory if split HTML).\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:391
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --disable-encoding do not output accented and special characters\n"
+" in Info output based on @documentencoding.\n"
+" --enable-encoding override --disable-encoding (default).\n"
+" --fill-column=NUM break Info lines at NUM characters (default %"
+"d).\n"
+" --footnote-style=STYLE output footnotes in Info according to STYLE:\n"
+" `separate' to put them in their own node;\n"
+" `end' to put them at the end of the node, "
+"in\n"
+" which they are defined (this is the "
+"default).\n"
+" --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %"
+"d).\n"
+" If VAL is `none', do not indent; if VAL is\n"
+" `asis', preserve existing indentation.\n"
+" --split-size=NUM split Info files at size NUM (default %d).\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:409
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+" --css-ref=URL generate reference to a CSS file.\n"
+" --internal-links=FILE produce list of internal links in FILE.\n"
+" --transliterate-file-names\n"
+" produce file names in ASCII transliteration.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:419
+#, c-format
+msgid ""
+"Options for XML and Docbook:\n"
+" --output-indent=VAL indent XML elements by VAL spaces (default %"
+"d).\n"
+" If VAL is 0, ignorable whitespace is "
+"dropped.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:426
+msgid ""
+"Input file options:\n"
+" --commands-in-node-names allow @ commands in node names.\n"
+" -D VAR define the variable VAR, as with @set.\n"
+" -I DIR append DIR to the @include search path.\n"
+" -P DIR prepend DIR to the @include search path.\n"
+" -U VAR undefine the variable VAR, as with @clear.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:435
+msgid ""
+"Conditional processing in input:\n"
+" --ifdocbook process @ifdocbook and @docbook even if\n"
+" not generating Docbook.\n"
+" --ifhtml process @ifhtml and @html even if not generating HTML.\n"
+" --ifinfo process @ifinfo even if not generating Info.\n"
+" --ifplaintext process @ifplaintext even if not generating plain text.\n"
+" --iftex process @iftex and @tex; implies --no-split.\n"
+" --ifxml process @ifxml and @xml.\n"
+" --no-ifdocbook do not process @ifdocbook and @docbook text.\n"
+" --no-ifhtml do not process @ifhtml and @html text.\n"
+" --no-ifinfo do not process @ifinfo text.\n"
+" --no-ifplaintext do not process @ifplaintext text.\n"
+" --no-iftex do not process @iftex and @tex text.\n"
+" --no-ifxml do not process @ifxml and @xml text.\n"
+"\n"
+" Also, for the --no-ifFORMAT options, do process @ifnotFORMAT text.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:454
+msgid ""
+" The defaults for the @if... conditionals depend on the output format:\n"
+" if generating HTML, --ifhtml is on and the others are off;\n"
+" if generating Info, --ifinfo is on and the others are off;\n"
+" if generating plain text, --ifplaintext is on and the others are off;\n"
+" if generating XML, --ifxml is on and the others are off.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:462
+msgid ""
+"Examples:\n"
+" makeinfo foo.texi write Info to foo's @setfilename\n"
+" makeinfo --html foo.texi write HTML to @setfilename\n"
+" makeinfo --xml foo.texi write Texinfo XML to @setfilename\n"
+" makeinfo --docbook foo.texi write DocBook XML to @setfilename\n"
+" makeinfo --no-headers foo.texi write plain text to standard "
+"output\n"
+"\n"
+" makeinfo --html --no-headers foo.texi write html without node lines, "
+"menus\n"
+" makeinfo --number-sections foo.texi write Info with numbered sections\n"
+" makeinfo --no-split foo.texi write one Info file however big\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:622
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:670 makeinfo/makeinfo.c:696 makeinfo/makeinfo.c:720
+#: makeinfo/makeinfo.c:780
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:683
+#, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr ""
+
+#: makeinfo/makeinfo.c:688
+#, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:733
+#, c-format
+msgid "%s: could not open internal links output `%s'"
+msgstr ""
+
+#: makeinfo/makeinfo.c:738
+#, c-format
+msgid "%s: ignoring second internal links output `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:751
+#, c-format
+msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:769
+#, c-format
+msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:844
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1041 makeinfo/makeinfo.c:4166
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1044
+#, c-format
+msgid "Expected `%s'"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1521
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1567
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1647
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1677
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1744
+#, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1799
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1818
+#, c-format
+msgid ""
+"%s: Removing internal links output file `%s' due to errors; use --force to "
+"preserve.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2113
+#, c-format
+msgid "Unknown command `%s'"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2135
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2394
+#, c-format
+msgid "%c%s expected braces"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2407
+msgid "Unmatched }"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2455
+msgid "NO_NAME!"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2476
+#, c-format
+msgid "%c%s missing close brace"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3482
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3488
+#, c-format
+msgid "No such file `%s'"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3624
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3633
+msgid "@image missing filename argument"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3851
+#, c-format
+msgid "undefined flag: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3852
+#, c-format
+msgid "{No value for `%s'}"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3904
+#, c-format
+msgid "%c%s requires a name"
+msgstr ""
+
+#: makeinfo/makeinfo.c:4010
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:4258
+#, c-format
+msgid "`%.40s...' is too long for expansion; not expanded"
+msgstr ""
+
+#: makeinfo/multi.c:116
+msgid "Missing } in @multitable template"
+msgstr ""
+
+#: makeinfo/multi.c:260
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr ""
+
+#: makeinfo/multi.c:400
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr ""
+
+#: makeinfo/multi.c:563
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr ""
+
+#: makeinfo/multi.c:592
+msgid "ignoring @tab outside of multitable"
+msgstr ""
+
+#: makeinfo/multi.c:640
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr ""
+
+#: makeinfo/multi.c:643
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr ""
+
+#: makeinfo/node.c:279
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr ""
+
+#: makeinfo/node.c:647
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr ""
+
+#: makeinfo/node.c:714
+#, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr ""
+
+#: makeinfo/node.c:878
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr ""
+
+#: makeinfo/node.c:919 makeinfo/node.c:1163
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr ""
+
+#: makeinfo/node.c:922
+msgid "This @anchor command ignored; references to it will not work"
+msgstr ""
+
+#: makeinfo/node.c:924 makeinfo/node.c:1166
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr ""
+
+#: makeinfo/node.c:954
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr ""
+
+#: makeinfo/node.c:1160
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr ""
+
+#: makeinfo/node.c:1165
+msgid "@anchor command ignored; references to it will not work"
+msgstr ""
+
+#: makeinfo/node.c:1362
+#, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1462
+#, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1465
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr ""
+
+#: makeinfo/node.c:1520
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr ""
+
+#: makeinfo/node.c:1524
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr ""
+
+#: makeinfo/node.c:1536
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1605
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr ""
+
+#: makeinfo/node.c:1637
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr ""
+
+#: makeinfo/node.c:1727
+#, c-format
+msgid "Removing %s\n"
+msgstr ""
+
+#: makeinfo/node.c:1731
+#, c-format
+msgid "Can't remove file `%s': %s"
+msgstr ""
+
+#: makeinfo/sectioning.c:122
+#, c-format
+msgid "Appendix %c"
+msgstr ""
+
+#: makeinfo/sectioning.c:467
+#, c-format
+msgid "Internal error (search_sectioning) `%s'!"
+msgstr ""
+
+#: makeinfo/sectioning.c:563
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr ""
+
+#: makeinfo/sectioning.c:624
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr ""
+
+#: makeinfo/sectioning.c:640
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr ""
+
+#: makeinfo/sectioning.c:648
+#, c-format
+msgid "Here is the %ctop node"
+msgstr ""
+
+#: makeinfo/sectioning.c:664
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr ""
+
+#: makeinfo/xml.c:1669
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr ""
+
+#: makeinfo/xml.c:2014
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+
+#: makeinfo/xml.c:2150
+msgid "of"
+msgstr ""
+
+#: makeinfo/xml.c:2155
+msgid "on"
+msgstr ""
+
+#: makeinfo/xref.c:127
+msgid "First argument to cross-reference may not be empty"
+msgstr ""
+
+#: makeinfo/xref.c:252
+#, c-format
+msgid "Empty file name for HTML cross reference in `%s'"
+msgstr ""
+
+#: makeinfo/xref.c:387
+msgid "End of file reached while looking for `.' or `,'"
+msgstr ""
+
+#: makeinfo/xref.c:390
+#, c-format
+msgid "`.' or `,' must follow @%s, not `%c'"
+msgstr ""
+
+#: makeinfo/xref.c:392
+msgid "for cross-references in parentheses, use @pxref"
+msgstr ""
+
+#: makeinfo/xref.c:435
+msgid "First argument to @inforef may not be empty"
+msgstr ""
+
+#: util/texindex.c:223
+msgid "display this help and exit"
+msgstr ""
+
+#: util/texindex.c:225
+msgid "send output to FILE"
+msgstr ""
+
+#: util/texindex.c:227
+msgid "display version information and exit"
+msgstr ""
+
+#: util/texindex.c:237
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr ""
+
+#: util/texindex.c:238
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr ""
+
+#: util/texindex.c:241
+#, c-format
+msgid "Usually FILE... is specified as `foo.%c%c' for a document `foo.texi'.\n"
+msgstr ""
+
+#: util/texindex.c:243
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+
+#: util/texindex.c:743
+#, c-format
+msgid "failure reopening %s"
+msgstr ""
+
+#: util/texindex.c:758 util/texindex.c:786
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr ""
+
+#: util/texindex.c:993
+#, c-format
+msgid "No page number in %s"
+msgstr ""
+
+#: util/texindex.c:1066
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr ""
diff --git a/po/tr.gmo b/po/tr.gmo
new file mode 100644
index 0000000..9974057
--- /dev/null
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
new file mode 100644
index 0000000..9b025f9
--- /dev/null
+++ b/po/tr.po
@@ -0,0 +1,3221 @@
+# translation of texinfo-4.12.94.po to Turkish
+# Copyright (C) 2002, 2004, 2007, 2008 Free Software Foundation, Inc.
+# This file is distributed under the same license as the texinfo package.
+# texinfo-4.12.94 Türkçe Çevirisi
+# Eyüp Hakan Duran <hakan_duran@hotmail.com>, 2002, 2004, 2007, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo 4.12.94\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2008-09-18 20:38+0200\n"
+"PO-Revision-Date: 2008-08-25 21:25-0500\n"
+"Last-Translator: Eyüp Hakan Duran <hakan_duran@hotmail.com>\n"
+"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-9\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: gnulib/lib/error.c:125
+msgid "Unknown system error"
+msgstr "Bilinmeyen sistem hatasý"
+
+#: gnulib/lib/getopt.c:526 gnulib/lib/getopt.c:542
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: `%s' seçeneði belirsiz\n"
+
+#: gnulib/lib/getopt.c:575 gnulib/lib/getopt.c:579
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: `--%s' seçeneði argümansýz kullanýlýr\n"
+
+#: gnulib/lib/getopt.c:588 gnulib/lib/getopt.c:593
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: `%c%s' seçeneði argümansýz kullanýlýr\n"
+
+#: gnulib/lib/getopt.c:636 gnulib/lib/getopt.c:655 gnulib/lib/getopt.c:971
+#: gnulib/lib/getopt.c:990
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: `%s' seçeneði bir argümanla kullanýlýr\n"
+
+#: gnulib/lib/getopt.c:693 gnulib/lib/getopt.c:696
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: `--%s' seçeneði bilinmiyor\n"
+
+#: gnulib/lib/getopt.c:704 gnulib/lib/getopt.c:707
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: `%c%s' seçeneði bilinmiyor\n"
+
+#: gnulib/lib/getopt.c:759 gnulib/lib/getopt.c:762
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: kuraldýþý seçenek -- %c\n"
+
+#: gnulib/lib/getopt.c:768 gnulib/lib/getopt.c:771
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: geçersiz seçenek -- %c\n"
+
+#: gnulib/lib/getopt.c:823 gnulib/lib/getopt.c:839 gnulib/lib/getopt.c:1043
+#: gnulib/lib/getopt.c:1061
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: seçenek bir argümanla kullanýlýr -- %c\n"
+
+#: gnulib/lib/getopt.c:892 gnulib/lib/getopt.c:908
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: `-W %s' seçeneði belirsiz\n"
+
+#: gnulib/lib/getopt.c:932 gnulib/lib/getopt.c:950
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: `-W %s' seçeneði argümansýz kullanýlýr\n"
+
+#: gnulib/lib/xalloc-die.c:34 gnulib/lib/xsetenv.c:37
+#, c-format
+msgid "memory exhausted"
+msgstr "bellek tükendi"
+
+#: info/echo-area.c:283 info/session.c:966
+msgid "Move forward a character"
+msgstr "Bir karakter ileri gider"
+
+#: info/echo-area.c:295 info/session.c:993
+msgid "Move backward a character"
+msgstr "Bir karakter geri gider"
+
+#: info/echo-area.c:307
+msgid "Move to the start of this line"
+msgstr "Satýrýn baþlangýcýna gider"
+
+#: info/echo-area.c:312
+msgid "Move to the end of this line"
+msgstr "Satýrýn sonuna gider"
+
+#: info/echo-area.c:320 info/session.c:1025
+msgid "Move forward a word"
+msgstr "Bir kelime ileri gider"
+
+#: info/echo-area.c:360 info/session.c:1049
+msgid "Move backward a word"
+msgstr "Bir kelime geri gider"
+
+#: info/echo-area.c:400
+msgid "Delete the character under the cursor"
+msgstr "Ýmlecin altýndaki karakteri siler"
+
+#: info/echo-area.c:430
+msgid "Delete the character behind the cursor"
+msgstr "Ýmleçden önceki karakteri siler"
+
+#: info/echo-area.c:451
+msgid "Cancel or quit operation"
+msgstr "Ýþlemi keser ya da çýkar"
+
+#: info/echo-area.c:466
+msgid "Accept (or force completion of) this line"
+msgstr "Bu satýrý kabul eder (ya da tamamlanmasý için zorlar)"
+
+#: info/echo-area.c:471
+msgid "Insert next character verbatim"
+msgstr "Sonraki karakteri aynen yerleþtirir"
+
+#: info/echo-area.c:479
+msgid "Insert this character"
+msgstr "Bu karakteri yerleþtirir"
+
+#: info/echo-area.c:498
+msgid "Insert a TAB character"
+msgstr "Bir TAB karakteri yerleþtirir"
+
+#: info/echo-area.c:505
+msgid "Transpose characters at point"
+msgstr "Verilen yerde karakterleri yer deðiþtirir"
+
+#: info/echo-area.c:556
+msgid "Yank back the contents of the last kill"
+msgstr "Son silinenin içeriði kadar geri çeker"
+
+#: info/echo-area.c:563
+msgid "Kill ring is empty"
+msgstr "Silinen zincir boþ"
+
+#: info/echo-area.c:576
+msgid "Yank back a previous kill"
+msgstr "Bir önceki silinen kadar geri çeker"
+
+#: info/echo-area.c:609
+msgid "Kill to the end of the line"
+msgstr "Satýrýn sonuna kadar siler"
+
+#: info/echo-area.c:622
+msgid "Kill to the beginning of the line"
+msgstr "Satýrýn baþýna kadar siler"
+
+#: info/echo-area.c:634
+msgid "Kill the word following the cursor"
+msgstr "Ýmleçten sonraki kelimeyi siler"
+
+#: info/echo-area.c:654
+msgid "Kill the word preceding the cursor"
+msgstr "Ýmleçten önceki kelimeyi siler"
+
+#: info/echo-area.c:870 info/echo-area.c:926
+msgid "No completions"
+msgstr "Tamamlama yok"
+
+#: info/echo-area.c:872
+msgid "Not complete"
+msgstr "Bitmedi"
+
+#: info/echo-area.c:913
+msgid "List possible completions"
+msgstr "Olasý tamamlamalarý listeler"
+
+#: info/echo-area.c:930
+msgid "Sole completion"
+msgstr "Tek tamamlama"
+
+#: info/echo-area.c:939
+msgid "One completion:\n"
+msgstr "Bir tamamlama:\n"
+
+#: info/echo-area.c:940
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d tamamlama:\n"
+
+#: info/echo-area.c:1087
+msgid "Insert completion"
+msgstr "Tamamlamayý yerleþtir"
+
+#: info/echo-area.c:1222
+msgid "Building completions..."
+msgstr "Tamamlamalarý oluþturuyor..."
+
+#: info/echo-area.c:1342
+msgid "Scroll the completions window"
+msgstr "Tamamlama penceresini kaydýrýr"
+
+#: info/footnotes.c:212
+msgid "Footnotes could not be displayed"
+msgstr "Dipnotlar gösterilemedi"
+
+#: info/footnotes.c:238
+msgid "Show the footnotes associated with this node in another window"
+msgstr "Diðer penceredeki bu düðümle iliþkili dipnotlarý gösterir"
+
+#: info/footnotes.h:26
+msgid "---------- Footnotes ----------"
+msgstr "----------- Dipnotlar ---------"
+
+#: info/indices.c:171
+msgid "Look up a string in the index for this file"
+msgstr "Bu dosyada indeks içinde bir dizgeyi arar"
+
+#: info/indices.c:198
+msgid "Finding index entries..."
+msgstr "indeks girdilerini buluyor..."
+
+#: info/indices.c:206
+msgid "No indices found."
+msgstr "Hiç indis yok."
+
+#: info/indices.c:216
+msgid "Index entry: "
+msgstr "indeks giriþi: "
+
+#: info/indices.c:324
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr ""
+"Son `\\[index-search]'komutundan bir sonraki eþleþen indeks öðesine gider"
+
+#: info/indices.c:334
+msgid "No previous index search string."
+msgstr "Daha önce bir indeks arama dizgesi yok."
+
+#: info/indices.c:341
+msgid "No index entries."
+msgstr "Hiç indeks girdisi yok."
+
+#: info/indices.c:374
+#, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "`%s' içeren %sindex girdisi yok."
+
+#: info/indices.c:375
+msgid "more "
+msgstr "daha"
+
+#: info/indices.c:385
+msgid "CAN'T SEE THIS"
+msgstr "BU GÖRÜLMEZ"
+
+#: info/indices.c:421
+#, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr ""
+"`%s' bulundu - %s içinde. (`\\[next-index-match]' sonrakini bulmayý dener.)"
+
+#: info/indices.c:549
+#, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "`%s' indislerini tarýyor..."
+
+#: info/indices.c:604
+#, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr "Mevcut bilgi dosyalarýndan hiçbirisinin indisinde `%s' yok."
+
+#: info/indices.c:630
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr ""
+"Bir dizge için tüm bilinen bilgi dosyalarýnýn indislerinide ekleyerek bir "
+"menu oluþturur"
+
+#: info/indices.c:634
+msgid "Index apropos: "
+msgstr "Ýndeks hakkýnda:"
+
+#: info/indices.c:662
+#, c-format
+msgid ""
+"\n"
+"* Menu: Nodes whose indices contain `%s':\n"
+msgstr ""
+"\n"
+"* Menü: `%s' indislerini içeren düðümler:\n"
+
+#: info/info.c:275 info/infokey.c:899
+#, c-format
+msgid "Try --help for more information.\n"
+msgstr "Daha fazla bilgi için --help seçeneðini kullanýn.\n"
+
+#: info/info.c:294 info/infokey.c:145 install-info/install-info.c:2101
+#: makeinfo/makeinfo.c:802 util/texindex.c:295
+#, c-format
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"Telif Hakký (C) %s Özgür Yazýlým Vakfý Inc.\n"
+"Lisans GPLv3+: GNU GPL sürüm 3 ya da sonrasý <http://gnu.org/licenses/gpl."
+"html>\n"
+"Bu özgür yazýlýmdýr: deðiþtirip daðýtma özgürlüðüne sahipsiniz.\n"
+"Yasalarýn elverdiði ölçüde HÝÇBÝR GARANTÝ yoktur.\n"
+
+#: info/info.c:506
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "`%s' için indeks girdisi yok.\n"
+
+#: info/info.c:600
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [MENU-ITEM...]\n"
+"\n"
+"Read documentation in Info format.\n"
+msgstr ""
+"Kullaným: %s [SEÇENEK]... [MENÜ ÖGESÝ...]\n"
+"\n"
+"Info biçemindeki belgeleri okuyun.\n"
+
+#: info/info.c:606
+msgid ""
+"Options:\n"
+" -k, --apropos=STRING look up STRING in all indices of all "
+"manuals.\n"
+" -d, --directory=DIR add DIR to INFOPATH.\n"
+" --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+" -f, --file=FILENAME specify Info file to visit."
+msgstr ""
+"Seçenekler:\n"
+" -k, --apopros=DÝZGE tüm manüellerin tüm indekslerinde DÝZGE'yi "
+"arar.\n"
+" -d, --directory=DÝZ DÝZ'i INFO YOLU'na ekler.\n"
+" --dribble=DOSYAADI DOSYAADI'ndaki kullanýcý tuþbasýmlarýný "
+"anýmsar.\n"
+" -f, --file=DOSYAADI ziyaret edilecek Info dosyasýný belirler."
+
+#: info/info.c:613
+msgid ""
+" -h, --help display this help and exit.\n"
+" --index-search=STRING go to node pointed by index entry STRING.\n"
+" -n, --node=NODENAME specify nodes in first visited Info file.\n"
+" -o, --output=FILENAME output selected nodes to FILENAME."
+msgstr ""
+" -h, --help bu yardýmý görüntüler ve çýkar.\n"
+" --index-search=DÝZGE Ýndeks girdisi DÝZGE tarafýndan iþaret edilen "
+"düðüme gider.\n"
+" -n, --node=DÜÐÜMADI Ýlk ziyaret edilen Info dosyasýnda düðümleri "
+"belirler.\n"
+" -o, --output=DOSYAADI Seçili düðümlerden DOSYAAYDI'na çýktý alýr."
+
+#: info/info.c:619
+msgid ""
+" -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+" --no-raw-escapes output escapes as literal text.\n"
+" --restore=FILENAME read initial keystrokes from FILENAME.\n"
+" -O, --show-options, --usage go to command-line options node."
+msgstr ""
+" -R, --raw-escapes \"ham\" ANSI kaçýþlardan çýktý alýr "
+"(öntanýmlý).\n"
+" --no-raw-escapes kaçýþlarýn okunur metin gibi çýktýsýný alýr.\n"
+" --restore=DOSYAADI ilk tuþbasýmlarýný DOSYAADI'ndan okur.\n"
+" -Q, --show-options, --usage komut satýrý seçenekler düðümüne gider."
+
+#: info/info.c:626
+msgid " -b, --speech-friendly be friendly to speech synthesizers."
+msgstr " -b, --speech-friendly konuþma sentezcilerine dostça davranýr."
+
+#: info/info.c:630
+msgid ""
+" --subnodes recursively output menu items.\n"
+" --vi-keys use vi-like and less-like key bindings.\n"
+" --version display version information and exit.\n"
+" -w, --where, --location print physical location of Info file."
+msgstr ""
+" --subnotes menü ögelerinin özyineli çýktýsýný alýr.\n"
+" --vi-keys vi ve less benzeri tuþ baðlantýlarýný "
+"kullanýr.\n"
+" --version sürüm bilgisini gösterir ve çýkar.\n"
+" -w, --where, --location Info dosyasýnýn fiziksel konumunu yazdýrýr."
+
+#: info/info.c:636
+msgid ""
+"\n"
+"The first non-option argument, if present, is the menu entry to start from;\n"
+"it is searched for in all `dir' files along INFOPATH.\n"
+"If it is not present, info merges all `dir' files and shows the result.\n"
+"Any remaining arguments are treated as the names of menu\n"
+"items relative to the initial node visited."
+msgstr ""
+"\n"
+"Eðer mevcutsa, ilk seçenek-olmayan argüman baþlanacak menü girdisidir;\n"
+"bu, tüm INFO YOLU içindeki `dir' dosyalarýnda aranýr.\n"
+"Mevcut deðilse, info tüm `dir' dosyalarýný birleþtirir ve sonucu gösterir.\n"
+"Kalan tüm argümanlar, ilk ziyaret edilen düðüme göreceli menü\n"
+"ögesi isimleri olarak iþlem görür."
+
+#: info/info.c:643
+msgid ""
+"\n"
+"For a summary of key bindings, type h within Info."
+msgstr ""
+"\n"
+"Tuþ baðlantýlarýnýn bir özeti için Info içinden h tuþlayýn."
+
+#: info/info.c:646
+msgid ""
+"\n"
+"Examples:\n"
+" info show top-level dir menu\n"
+" info info show the general manual for Info readers\n"
+" info info-stnd show the manual specific to this Info program\n"
+" info emacs start at emacs node from top-level dir\n"
+" info emacs buffers start at buffers node within emacs manual\n"
+" info --show-options emacs start at node with emacs' command line options\n"
+" info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+" info -f ./foo.info show file ./foo.info, not searching dir"
+msgstr ""
+"\n"
+"Örnekler:\n"
+" info en üst düzey dir menüsünü gösterir\n"
+" info info Info okuyucularý için genel el kitabýný "
+"gösterir\n"
+" info info-stnd bu Info programýna özgü el kitabýný gösterir\n"
+" info emacs en üst düzey dir'den emacs düðümünden baþlatýr\n"
+" info emasc buffers emacs elkitabý içinden tampon düðümünden "
+"baþlatýr\n"
+" info --show-options emacs emacs'ýn komut satýrý seçenekleri bulunan "
+"düðümden baþlatýr\n"
+" info --subnodes -o out.txt emacs tüm elkitabýný out.txt'e çýkartýr\n"
+" info -f ./foo.info dir aramadan ./foo.info dosyasýný gösterir"
+
+#: info/info.c:657 info/infokey.c:918 makeinfo/makeinfo.c:475
+#: util/texindex.c:259
+msgid ""
+"\n"
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+"Yazýlým hatalarýný bug-texinfo@gnu.org'a,\n"
+"genel soru ve tartýþmalarý help-texinfo@gnu.org'a gönderiniz.\n"
+"Texinfo anasayfasý: http://www.gnu.org/software/texinfo/"
+
+#: info/info.c:691
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "`%s' düðümü bulunamadý."
+
+#: info/info.c:692
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "`(%s)%s' düðümü bulunamadý."
+
+#: info/info.c:693
+msgid "Cannot find a window!"
+msgstr "Bir pencere bulunamadý!"
+
+#: info/info.c:694
+msgid "Point doesn't appear within this window's node!"
+msgstr "Orasý bu pencerenin düðümü gibi görünmüyor!"
+
+#: info/info.c:695
+msgid "Cannot delete the last window."
+msgstr "Son pencere silinemez."
+
+#: info/info.c:696
+msgid "No menu in this node."
+msgstr "Bu düðümde menü yok."
+
+#: info/info.c:697
+msgid "No footnotes in this node."
+msgstr "Bu düðümde dipnot yok."
+
+#: info/info.c:698
+msgid "No cross references in this node."
+msgstr "Bu düðümde çapraz baþvuru yok."
+
+#: info/info.c:699
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Bu düðüm için `%s' yer gösterici yok."
+
+#: info/info.c:700
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "Info komutu `%c' bilinmiyor; yardým almak için `?' deneyin."
+
+#: info/info.c:701
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr "`%s' terminal türü Info çalýþtýrmak için yeterince akýllý deðil."
+
+#: info/info.c:702
+msgid "You are already at the last page of this node."
+msgstr "Zaten bu düðümün son sayfasýndasýnýz."
+
+#: info/info.c:703
+msgid "You are already at the first page of this node."
+msgstr "Zaten bu düðümün ilk sayfasýndasýnýz."
+
+#: info/info.c:704
+msgid "Only one window."
+msgstr "Sadece bir pencere."
+
+#: info/info.c:705
+msgid "Resulting window would be too small."
+msgstr "Pencere çok küçük olacaktý."
+
+#: info/info.c:706
+msgid "Not enough room for a help window, please delete a window."
+msgstr "Bir yardým penceresi için yer yok, lütfen bir pencere silin."
+
+#: info/infodoc.c:45
+msgid "Basic Info command keys\n"
+msgstr "Temel Info komut tuþlarý\n"
+
+#: info/infodoc.c:47
+msgid "\\%-10[quit-help] Close this help window.\n"
+msgstr "\\%-10[quit help] Bu yardým penceresini kapatýr.\n"
+
+#: info/infodoc.c:48
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] Info'dan büsbütün çýkar.\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr "\\%-10[get-info-help-node] Info öðreticiyi çaðýrýr.\n"
+
+#: info/infodoc.c:51
+msgid "\\%-10[prev-line] Move up one line.\n"
+msgstr "\\%-10[prev-line] Bir satýr yukarý git.\n"
+
+#: info/infodoc.c:52
+msgid "\\%-10[next-line] Move down one line.\n"
+msgstr "\\%-10[next-line] Bir satýr aþaðý git.\n"
+
+#: info/infodoc.c:53
+msgid "\\%-10[scroll-backward] Scroll backward one screenful.\n"
+msgstr "\\%-10[scroll-backward] Geriye doðru bir ekran kaydýrýr.\n"
+
+#: info/infodoc.c:54
+msgid "\\%-10[scroll-forward] Scroll forward one screenful.\n"
+msgstr "\\%-10[scroll-forward] Ýleriye doðru bir ekran kaydýrýr.\n"
+
+#: info/infodoc.c:55
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr "\\%-10[beginning-of-node] Bu düðümün baþlangýcýna gider.\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr "\\%-10[end-of-node] Bu düðümün sonuna gider.\n"
+
+#: info/infodoc.c:58
+msgid "\\%-10[move-to-next-xref] Skip to the next hypertext link.\n"
+msgstr "\\%-10[move-to-next-xref] Bir sonraki yardýmlý metin linkine atlar.\n"
+
+#: info/infodoc.c:59
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under the "
+"cursor.\n"
+msgstr ""
+"\\%-10[select-reference-this-line] Ýmleç altýndaki yardýmlý metin linkini "
+"izler.\n"
+
+#: info/infodoc.c:60
+msgid "\\%-10[history-node] Go back to the last node seen in this window.\n"
+msgstr "\\%-10[history-node] Bu pencerede görünen en son düðüme gider.\n"
+
+#: info/infodoc.c:62
+msgid "\\%-10[global-prev-node] Go to the previous node in the document.\n"
+msgstr "\\%-10[global-prev-node] Belgede bundan önceki düðüme gider.\n"
+
+#: info/infodoc.c:63
+msgid "\\%-10[global-next-node] Go to the next node in the document.\n"
+msgstr "\\%-10[global-next-node] Belgede bundan sonraki düðüme gider.\n"
+
+#: info/infodoc.c:64
+msgid "\\%-10[prev-node] Go to the previous node on this level.\n"
+msgstr "\\%-10[prev-node] Bu düzeydeki bundan önceki düðüme gider.\n"
+
+#: info/infodoc.c:65
+msgid "\\%-10[next-node] Go to the next node on this level.\n"
+msgstr "\\%-10[next-node] Bu düzeydeki bundan sonraki düðüme gider.\n"
+
+#: info/infodoc.c:66
+msgid "\\%-10[up-node] Go up one level.\n"
+msgstr "\\%-10[up-node] Bir düzey üste gider.\n"
+
+#: info/infodoc.c:67
+msgid "\\%-10[top-node] Go to the top node of this document.\n"
+msgstr "\\%-10[top-node] Bu belgenin en üst düðümüne gider.\n"
+
+#: info/infodoc.c:68
+msgid "\\%-10[dir-node] Go to the main `directory' node.\n"
+msgstr "\\%-10[dir-node] Ana `directory' düðümüne gider.\n"
+
+#: info/infodoc.c:70
+msgid "1...9 Pick the first...ninth item in this node's menu.\n"
+msgstr "1...9 Bu düðümün menüsündeki ilk...dokuzuncu öðeyi seçer.\n"
+
+#: info/infodoc.c:71
+msgid "\\%-10[last-menu-item] Pick the last item in this node's menu.\n"
+msgstr "\\%-10[last-menu-item] Bu düðümün menüsündeki son öðeyi seçer.\n"
+
+#: info/infodoc.c:72
+msgid "\\%-10[menu-item] Pick a menu item specified by name.\n"
+msgstr "\\%-10[menu-item] Ýsmi ile belirtilen menü öðesini seçer.\n"
+
+#: info/infodoc.c:73
+msgid "\\%-10[xref-item] Follow a cross reference specified by name.\n"
+msgstr "\\%-10[xref-item] Ýþmiyle belirtilen bir çapraz baþvuruyu izler.\n"
+
+#: info/infodoc.c:74
+msgid "\\%-10[goto-node] Go to a node specified by name.\n"
+msgstr "\\%-10[goto-node] ismiyle belirtilen düðüme gider.\n"
+
+#: info/infodoc.c:76
+msgid "\\%-10[search] Search forward for a specified string.\n"
+msgstr "\\%-10[search] Belirli bir dizgeyi ileriye doðru arar\n"
+
+#: info/infodoc.c:77
+msgid "\\%-10[search-previous] Search for previous occurrence.\n"
+msgstr "\\%-10[search-previous] Önceki bulunmayý arar.\n"
+
+#: info/infodoc.c:78
+msgid "\\%-10[search-next] Search for next occurrence.\n"
+msgstr "\\%-10[search-next] Sonraki bulunmayý arar.\n"
+
+#: info/infodoc.c:79
+msgid ""
+"\\%-10[index-search] Search for a specified string in the index, and\n"
+" select the node referenced by the first entry found.\n"
+msgstr ""
+"\\%-10[index-search] Ýndeks girdileri içinde belirli bir dizgeyi arar\n"
+" ve bulunan ilk girdi tarafýndan gönderme yapýlan düðümü "
+"seçer.\n"
+
+#: info/infodoc.c:81
+msgid "\\%-10[abort-key] Cancel the current operation.\n"
+msgstr "\\%-10[abort-key] Mevcut iþlemi iptal eder.\n"
+
+#: info/infodoc.c:89
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"Info Pencerelerindeki Temel Komutlar\n"
+"************************************\n"
+
+#: info/infodoc.c:92
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s Bu yardým penceresinden çýkar.\n"
+
+#: info/infodoc.c:93
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Info büsbütün çýkar.\n"
+
+#: info/infodoc.c:94
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Info öðreticiyi yardýma çaðýrýr.\n"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr " %-10s Bu düðümün `sonraki' düðümüne gider.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr " %-10s Bu düðümün `önceki' düðümüne gider.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s Bu düðümden `yukarý' gider.\n"
+
+#: info/infodoc.c:101
+#, c-format
+msgid ""
+" %-10s Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+" %-10s Ýsmini belirterek menü öðesi seçin.\n"
+" Menü öðesi seçmek, bir baþka düðümün seçilmesine yolaçar.\n"
+
+#: info/infodoc.c:103
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr " %-10s Bir çapraz baþvuruyu izler. Baþvuru ismini okur.\n"
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr " %-10s Bu pencerede görünen son düðüme gider.\n"
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr " %-10s Bu düðümün içinden sonraki URL baðýna atlar.\n"
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s Ýmleç altýndaki URL baðýný izler.\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr " %-10s `dizin' düðümüne gider. `g (DÝZÝN)' ile eþdeðer.\n"
+
+#: info/infodoc.c:108
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr " %-10s Üst düðüme gider. `g Top' ile eþdeðer.\n"
+
+#: info/infodoc.c:110
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"Bir düðüm içinde dolaþým:\n"
+"-------------------------\n"
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s Bir sayfa ileri kaydýrýr.\n"
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s Bir sayfa geri kaydýrýr.\n"
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s Bu düðümün baþlangýcýna gider.\n"
+
+#: info/infodoc.c:115
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s Bu düðümün sonuna gider.\n"
+
+#: info/infodoc.c:116
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s Bir satýr ileri kaydýrýr.\n"
+
+#: info/infodoc.c:117
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s Bir satýr geri kaydýrýr.\n"
+
+#: info/infodoc.c:119
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"Diðer komutlar:\n"
+"---------------\n"
+
+#: info/infodoc.c:121
+#, c-format
+msgid " %-10s Pick first...ninth item in node's menu.\n"
+msgstr " %-10s Düðüm menüsündeki ilk...dokuzuncu ögeyi seçer.\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s Düðüm menüsündeki son öðeyi seçer.\n"
+
+#: info/infodoc.c:125
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr ""
+" %-10s Bu Info dosyasýndaki indeks girdileri içinde belirli bir dizgeyi "
+"arar\n"
+" ve bulunan ilk girdi tarafýndan gönderme yapýlan düðümü "
+"seçer.\n"
+
+#: info/infodoc.c:127
+#, c-format
+msgid ""
+" %-10s Move to node specified by name.\n"
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+" %-10s Ýsmiyle belirtilen düðüme gider.\n"
+" (DOSYAADI)DÜÐÜMADI þeklinde bir dosya adý da "
+"ekleyebilirsiniz.\n"
+
+#: info/infodoc.c:129
+#, c-format
+msgid ""
+" %-10s Search forward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+" %-10s Belirli bir dizgeyi ileriye doðru arar\n"
+" ve sonraki bulunanýn içinde olduðu düðümü seçer.\n"
+
+#: info/infodoc.c:131
+#, c-format
+msgid ""
+" %-10s Search backward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+" %-10s Belirli bir dizgeyi geriye doðru arar\n"
+" ve sonraki bulunanýn içinde olduðu düðümü seçer.\n"
+
+#: info/infodoc.c:312
+msgid "The current search path is:\n"
+msgstr "Þu anki arama yolu:\n"
+
+#: info/infodoc.c:316
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"Info pencerelerinde kullanýlabilecek komutlar:\n"
+"\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"Eko alanýnda kullanýlabilecek komutlar:\n"
+"\n"
+
+#: info/infodoc.c:343
+#, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+"Aþaðýdaki komutlar yalnýzca %s aracýlýðýyla çaðrýlabilirler:\n"
+"\n"
+
+#: info/infodoc.c:347
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr " tümü\n"
+
+#: info/infodoc.c:477
+msgid "Display help message"
+msgstr "Bu yardým iletisini gösterir"
+
+#: info/infodoc.c:495
+msgid "Visit Info node `(info)Help'"
+msgstr "Info düðümünü `(info)Help' ziyaret eder"
+
+#: info/infodoc.c:633
+msgid "Print documentation for KEY"
+msgstr "KEY ile ilgili belgeleri basar"
+
+#: info/infodoc.c:645
+#, c-format
+msgid "Describe key: %s"
+msgstr "Tuþ açýklamasý: %s"
+
+#: info/infodoc.c:656
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s atanmamýþ."
+
+#: info/infodoc.c:672 info/infodoc.c:701
+#, c-format
+msgid "%s is undefined."
+msgstr "%s atanmamýþ."
+
+#: info/infodoc.c:722
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s %s olarak atanmýþ."
+
+#: info/infodoc.c:1146
+msgid "Show what to type to execute a given command"
+msgstr "Verilen komutu çalýþtýracak türü gösterir"
+
+#: info/infodoc.c:1150
+msgid "Where is command: "
+msgstr "Komutun yeri: "
+
+#: info/infodoc.c:1172
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "`%s' bir tuþ üzerinde deðil"
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s sadece %s üzerinden çaðrýlabilir."
+
+#: info/infodoc.c:1183
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s, %s üzerinden çaðrýlabilir."
+
+#: info/infodoc.c:1188
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "`%s' isimli bir iþlev yok"
+
+#: info/infodoc.c:96
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"Diðer düðümleri seçme:\n"
+"----------------------\n"
+
+#: info/infokey.c:170
+msgid "incorrect number of arguments"
+msgstr "argüman sayýsý yanlýþ"
+
+#: info/infokey.c:201
+#, c-format
+msgid "cannot open input file `%s'"
+msgstr "`%s' girdi dosyasý açýlamýyor"
+
+#: info/infokey.c:215
+#, c-format
+msgid "cannot create output file `%s'"
+msgstr "`%s' çýktý dosyasý oluþturulamýyor"
+
+#: info/infokey.c:226
+#, c-format
+msgid "error writing to `%s'"
+msgstr "`%s''e yazma hatasý"
+
+#: info/infokey.c:232
+#, c-format
+msgid "error closing output file `%s'"
+msgstr "`%s' çýktý dosyasýný kapatmada hata"
+
+#: info/infokey.c:450
+msgid "key sequence too long"
+msgstr "anahtar sýralamasý çok uzun"
+
+#: info/infokey.c:529
+msgid "missing key sequence"
+msgstr "anahtar sýralamasý kayýp"
+
+#: info/infokey.c:610
+msgid "NUL character (\\000) not permitted"
+msgstr "NUL karakterine (\\000) izin verilmiyor"
+
+#: info/infokey.c:641
+#, c-format
+msgid "NUL character (^%c) not permitted"
+msgstr "NUL karakterine (^%c) izin verilmiyor"
+
+#: info/infokey.c:665
+msgid "missing action name"
+msgstr "kayýp eylem adý"
+
+#: info/infokey.c:681 info/infokey.c:756
+msgid "section too long"
+msgstr "bölüm çok uzun"
+
+#: info/infokey.c:688
+#, c-format
+msgid "unknown action `%s'"
+msgstr "bilinmeyen eylem `%s'"
+
+#: info/infokey.c:698
+msgid "action name too long"
+msgstr "eylem adý çok uzun"
+
+#: info/infokey.c:712
+#, c-format
+msgid "extra characters following action `%s'"
+msgstr "`%s' eylemini izleyen fazladan karakterler"
+
+#: info/infokey.c:723
+msgid "missing variable name"
+msgstr "kayýp deðiþken adý"
+
+#: info/infokey.c:733
+msgid "missing `=' immediately after variable name"
+msgstr "deðiþken adýndan hemen sonra kayýp `=' "
+
+#: info/infokey.c:741
+msgid "variable name too long"
+msgstr "deðiþken adý çok uzun"
+
+#: info/infokey.c:765
+msgid "value too long"
+msgstr "deðer çok uzun"
+
+#: info/infokey.c:890
+#, c-format
+msgid "\"%s\", line %u: "
+msgstr "\"%s\", satýr %u: "
+
+#: info/infokey.c:906
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [INPUT-FILE]\n"
+"\n"
+"Compile infokey source file to infokey file. Reads INPUT-FILE (default\n"
+"$HOME/.infokey) and writes compiled key file to (by default) $HOME/.info.\n"
+"\n"
+"Options:\n"
+" --output FILE output to FILE instead of $HOME/.info\n"
+" --help display this help and exit.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"Kullaným: %s [SEÇENEK]... [GÝRDÝ-DOSYASI]\n"
+"\n"
+"infokey kaynak dosyasýný infokey dosyasýna derler. GÝRDÝ-DOSYASI'ný\n"
+"okur (öntanýmlý $HOME/.infokey) ve derlenmiþ dosyayý $HOME/.info \n"
+"dosyasýna (öntanýmlý) yazar\n"
+"\n"
+"Seçenekler:\n"
+" --output DOSYA çýktý, $HOME/.info yerine DOSYA'ya\n"
+" --help bu yardýmý gösterir ve çýkar\n"
+" --version sürüm bilgisini gösterir ve çýkar.\n"
+
+#: info/infomap.c:955
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "Geçersiz infokey dosyasý `%s' yoksayýlýyor - çok küçük"
+
+#: info/infomap.c:958
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "Geçersiz infokey dosyasý `%s' yoksayýlýyor - çok büyük"
+
+#: info/infomap.c:971
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "infokey dosyasý `%s' okumada hata - çok kýsa"
+
+#: info/infomap.c:990
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+"Geçersiz infokey dosyasý `%s' (hatalý sihirli numaralar) -- güncellemek için "
+"infokey yürütün"
+
+#: info/infomap.c:999
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr "infokey dosyanýz `%s' eskimiþ -- güncellemek için infokey yürütün"
+
+#: info/infomap.c:1015
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+"Geçersiz infokey dosyasý `%s' (hatalý bölüm uzunluðu) -- güncellemek için "
+"infokey yürütün"
+
+#: info/infomap.c:1036
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr ""
+"Geçersiz infokey dosyasý `%s' (hatalý bölüm kodu) -- güncellemek için "
+"infokey yürütün"
+
+#: info/infomap.c:1171
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr "Infokey dosyasýnda hatalý veri -- bazý tuþ baðlantýlarý yoksayýldý"
+
+#: info/infomap.c:1221
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr "Infokey dosyasýnda hatalý veri -- bazý deðiþken ayarlarý yoksayýldý"
+
+#: info/m-x.c:68
+msgid "Read the name of an Info command and describe it"
+msgstr "Bir Info komut ismini okur ve onu açýklar"
+
+#: info/m-x.c:72
+msgid "Describe command: "
+msgstr "Komut açýklamasý: "
+
+#: info/m-x.c:95
+msgid "Read a command name in the echo area and execute it"
+msgstr "Eko alanýndan komut ismini okur ve onu çalýþtýrýr"
+
+#: info/m-x.c:139
+msgid "Cannot execute an `echo-area' command here."
+msgstr "Bir `eko-alaný' komutu burada çalýþtýrýlamaz."
+
+#: info/m-x.c:153
+#, c-format
+msgid "Undefined command: %s"
+msgstr "tanýmlanmamýþ komut: %s"
+
+#: info/m-x.c:159
+msgid "Set the height of the displayed window"
+msgstr "Gösterilen pencerenin yüksekliði belirtilir"
+
+#: info/m-x.c:172
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Ekran yüksekliðini (%d) ye ayarlar: "
+
+#: info/makedoc.c:166 info/makedoc.c:174
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+" Bu dosyanýn içermesini saðlamak için peþi sýra sürüklenen kaynak "
+"dosyalar:\n"
+"\n"
+
+#: info/makedoc.c:556
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "%s dosyasý manipüle edilemedi.\n"
+
+#: info/nodemenu.c:30
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+"\n"
+"* Menü:\n"
+" (Dosya)Düðüm Satýr Boyut Ýçerdiði Dosya\n"
+" ------------ ----- ----- --------------"
+
+#: info/nodemenu.c:201
+msgid ""
+"Here is the menu of nodes you have recently visited.\n"
+"Select one from this menu, or use `\\[history-node]' in another window.\n"
+msgstr ""
+"Son zamanlarda uðradýðýnýz düðüm menüsünü görmektesiniz.\n"
+"Ya bu menüden seçin, ya da baþka bir pencerede `\\[history-node]' kullanýn.\n"
+
+#: info/nodemenu.c:223
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr ""
+"Son zamanlarda uðradýðýnýz tüm düðümlerin menüsünü içeren bir pencere "
+"oluþturur"
+
+#: info/nodemenu.c:303
+msgid "Select a node which has been previously visited in a visible window"
+msgstr "Daha önce, görünür bir pencereden uðradýðýnýz bir düðüm seçiniz"
+
+#: info/nodemenu.c:316
+msgid "Select visited node: "
+msgstr "Uðramýþ olduðunuz düðümü seçiniz: "
+
+#: info/nodemenu.c:336 info/session.c:2578
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "Referans yokoldu! (%s)."
+
+#: info/search.c:166
+#, c-format
+msgid "regexp error: %s"
+msgstr "düzenli ifade hatasý: %s"
+
+#: info/session.c:164
+#, c-format
+msgid ""
+"Welcome to Info version %s. Type \\[get-help-window] for help, \\[menu-item] "
+"for menu item."
+msgstr ""
+"Info sürüm %s'e hoþgeldiniz. Yardým için \\[get-help-window], menü öðesi "
+"için \\[menu-item] yazýnýz."
+
+#: info/session.c:625
+msgid "Move down to the next line"
+msgstr "Sonraki satýra (aþaðý) gider"
+
+#: info/session.c:661
+msgid "Move up to the previous line"
+msgstr "Önceki satýra (yukarý) gider"
+
+#: info/session.c:931
+msgid "Move to the end of the line"
+msgstr "Satýr sonuna gider"
+
+#: info/session.c:942
+msgid "Move to the start of the line"
+msgstr "Satýr baþýna gider"
+
+#: info/session.c:1142
+msgid "Next"
+msgstr "Sonraki"
+
+#: info/session.c:1158 info/session.c:1283
+msgid "No more nodes within this document."
+msgstr "Bu belge içinde baþka düðüm yok."
+
+#: info/session.c:1309
+msgid "No `Prev' for this node."
+msgstr "Bu düðüm için baþka `Önceki' yok."
+
+#: info/session.c:1329
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr "Bu belge içinde, bu düðüm için `Önceki' ya da `Yukarý' yok."
+
+#: info/session.c:1391
+msgid "Move forwards or down through node structure"
+msgstr "Düðüm yapýsý içinde ileriye ya da aþaðýya gider"
+
+#: info/session.c:1407
+msgid "Move backwards or up through node structure"
+msgstr "Düðüm yapýsý içinde geriye ya da yukarýya gider"
+
+#: info/session.c:1508
+msgid "Scroll forward in this window"
+msgstr "Bu pencerede ileriye doðru kaydýrýr"
+
+#: info/session.c:1516
+msgid "Scroll forward in this window and set default window size"
+msgstr ""
+"Bu pencerede ileriye doðru kaydýrýr ve öntanýmlý pencere boyutuna ayarlar"
+
+#: info/session.c:1524
+msgid "Scroll forward in this window staying within node"
+msgstr "Bu pencerede, düðüm içinde kalarak ileriye doðru kaydýrýr"
+
+#: info/session.c:1532
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr ""
+"Bu pencerede, düðüm içinde kalarak ileriye doðru kaydýrýr ve öntanýmlý "
+"pencere boyutunu ayarlar"
+
+#: info/session.c:1540
+msgid "Scroll backward in this window"
+msgstr "Bu pencerede geriye doðru kaydýrýr"
+
+#: info/session.c:1548
+msgid "Scroll backward in this window and set default window size"
+msgstr ""
+"Bu pencerede geriye doðru kaydýrýr ve öntanýmlý pencere boyutunu ayarlar"
+
+#: info/session.c:1557
+msgid "Scroll backward in this window staying within node"
+msgstr "Bu pencerede, düðüm içinde kalarak geriye doðru kaydýrýr"
+
+#: info/session.c:1565
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr "geri ve set öntanýmlý"
+
+#: info/session.c:1573
+msgid "Move to the start of this node"
+msgstr "Bu düðümün baþlangýcýna gider"
+
+#: info/session.c:1580
+msgid "Move to the end of this node"
+msgstr "Bu düðümün sonuna gider"
+
+#: info/session.c:1587
+msgid "Scroll down by lines"
+msgstr "Aþaðýya doðru satýr kaydýrýr"
+
+#: info/session.c:1604
+msgid "Scroll up by lines"
+msgstr "Yukarýya doðru satýr kaydýrýr"
+
+#: info/session.c:1622
+msgid "Scroll down by half screen size"
+msgstr "Aþaðýya doðru yarým ekran boyutu kaydýrýr"
+
+#: info/session.c:1648
+msgid "Scroll up by half screen size"
+msgstr "Yukarýya doðru yarým ekran boyutu kaydýrýr"
+
+#: info/session.c:1677
+msgid "Select the next window"
+msgstr "Sonraki pencereyi seçer"
+
+#: info/session.c:1716
+msgid "Select the previous window"
+msgstr "Önceki pencereyi seçer"
+
+#: info/session.c:1767
+msgid "Split the current window"
+msgstr "Mevcut pencereyi böler"
+
+#: info/session.c:1848
+msgid "Delete the current window"
+msgstr "Mevcut pencereyi siler"
+
+#: info/session.c:1856
+msgid "Cannot delete a permanent window"
+msgstr "Kalýcý bir pencere silinemez"
+
+#: info/session.c:1888
+msgid "Delete all other windows"
+msgstr "Diðer tüm pencereleri siler"
+
+#: info/session.c:1934
+msgid "Scroll the other window"
+msgstr "Diðer pencereyi kaydýrýr"
+
+#: info/session.c:1955
+msgid "Scroll the other window backward"
+msgstr "Diðer pencereyi geriye doðru kaydýrýr"
+
+#: info/session.c:1961
+msgid "Grow (or shrink) this window"
+msgstr "Bu pencereyi büyütür (ya da küçültür)"
+
+#: info/session.c:1972
+msgid "Divide the available screen space among the visible windows"
+msgstr "Mevcut ekran boþluðunu görünür pencereler arasýnda bölüþtürür"
+
+#: info/session.c:1979
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "Mevcut penceredeki satýr sarma durumunu deðiþtirir"
+
+#: info/session.c:1986
+msgid "Toggle the usage of regular expressions in searches"
+msgstr "Aramalarda düzenli ifade kullanýmýna geç"
+
+#: info/session.c:1990
+msgid "Using regular expressions for searches."
+msgstr "Aramalarda düzenli ifade kullanýlýyor."
+
+#: info/session.c:1991
+msgid "Using literal strings for searches."
+msgstr "Aramalarda yazýlý dizge kullanýlýyor."
+
+#: info/session.c:2162
+msgid "Select the Next node"
+msgstr "Sonraki düðümü seçer"
+
+#: info/session.c:2170
+msgid "Select the Prev node"
+msgstr "Önceki düðümü seçer"
+
+#: info/session.c:2178
+msgid "Select the Up node"
+msgstr "Üstteki düðümü seçer"
+
+#: info/session.c:2185
+msgid "Select the last node in this file"
+msgstr "Bu dosyadaki son düðümü seçer"
+
+#: info/session.c:2212 info/session.c:2245
+msgid "This window has no additional nodes"
+msgstr "Bu pencerenin baþka düðümü yok"
+
+#: info/session.c:2218
+msgid "Select the first node in this file"
+msgstr "Bu dosyadaki ilk düðümü seçer"
+
+#: info/session.c:2252
+msgid "Select the last item in this node's menu"
+msgstr "Bu düðümün menüsündeki son öðeyi seçer"
+
+#: info/session.c:2258
+msgid "Select this menu item"
+msgstr "Bu menü öðesini seçer"
+
+#: info/session.c:2291
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "Bu menüde %d adet öðe yok."
+
+#: info/session.c:2485 info/session.c:2486
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Menü öðesi (%s): "
+
+#: info/session.c:2489
+msgid "Menu item: "
+msgstr "Menü öðesi: "
+
+#: info/session.c:2496 info/session.c:2497
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Ýzlenecek xref (%s): "
+
+#: info/session.c:2500
+msgid "Follow xref: "
+msgstr "Ýzlenecek xref: "
+
+#: info/session.c:2629
+msgid "Read a menu item and select its node"
+msgstr "Bir menü öðesini okur ve düðümünü seçer"
+
+#: info/session.c:2637
+msgid "Read a footnote or cross reference and select its node"
+msgstr "Oku yada ve select"
+
+#: info/session.c:2643
+msgid "Move to the start of this node's menu"
+msgstr "Bu düðüm menüsünün baþlangýcýna gider"
+
+#: info/session.c:2667
+msgid "Visit as many menu items at once as possible"
+msgstr "Tek seferde mümkün olan en fazla sayýda menü öðesine uðrar"
+
+#: info/session.c:2695
+msgid "Read a node name and select it"
+msgstr "Bir düðüm adý okur ve seçer"
+
+#: info/session.c:2750 info/session.c:2755
+msgid "Goto node: "
+msgstr "Düðüme gider: "
+
+#: info/session.c:2819
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "Menüsü olmayan düðüm `%s'."
+
+#: info/session.c:2865
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "`%2$s' düðümünde `%1$s' menü öðesi yok."
+
+#: info/session.c:2895
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr "`%2$s''de `%1$s' tarafýndan baþvurulan düðüm bulunamadý."
+
+#: info/session.c:2945
+msgid "Read a list of menus starting from dir and follow them"
+msgstr "Dizinden baþlayarak bir menü listesini oku ve izle"
+
+#: info/session.c:2947
+msgid "Follow menus: "
+msgstr "Menüleri izle: "
+
+#: info/session.c:3140
+msgid "Find the node describing program invocation"
+msgstr "Program çaðýrmayý açýklayan düðümü bulur"
+
+#: info/session.c:3142
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "[%s]'in çaðýrma düðümünü bulur: "
+
+#: info/session.c:3180
+msgid "Read a manpage reference and select it"
+msgstr "Bir klavuz sayfasý baþvurusunu okur ve seçer"
+
+#: info/session.c:3184
+msgid "Get Manpage: "
+msgstr "Alýnacak klavuz sayfasý: "
+
+#: info/session.c:3214
+msgid "Select the node `Top' in this file"
+msgstr "Bu dosyadaki `En Üst' düðümü seç"
+
+#: info/session.c:3220
+msgid "Select the node `(dir)'"
+msgstr "`(dizin)' düðümünü seç"
+
+#: info/session.c:3237 info/session.c:3239
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Düðümü öldür (%s): "
+
+#: info/session.c:3291
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "Öldürülemeyen düðüm `%s' "
+
+#: info/session.c:3301
+msgid "Cannot kill the last node"
+msgstr "Son düðüm öldürülemiyor"
+
+#: info/session.c:3387
+msgid "Select the most recently selected node"
+msgstr "En son seçilen düðümü seçer"
+
+#: info/session.c:3393
+msgid "Kill this node"
+msgstr "Bu düðümü öldürür"
+
+#: info/session.c:3401
+msgid "Read the name of a file and select it"
+msgstr "Bir dosyanýn adýný okur ve seçer"
+
+#: info/session.c:3405
+msgid "Find file: "
+msgstr "Dosyayý bul: "
+
+#: info/session.c:3422
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "`%s' bulunamýyor."
+
+#: info/session.c:3465 info/session.c:3583
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "Çýktý dosyasý `%s' oluþturulamýyor."
+
+#: info/session.c:3479 info/session.c:3601 info/session.c:3661
+msgid "Done."
+msgstr "Bitti."
+
+#: info/session.c:3534
+#, c-format
+msgid "Writing node %s..."
+msgstr "%s düðümü yazýlýyor..."
+
+#: info/session.c:3610
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr "Bu düðümün içeriðini INFO_PRINT_COMMAND üzerinden veri yolla"
+
+#: info/session.c:3645
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "Veri yolu `%s''e açýlamýyor."
+
+#: info/session.c:3651
+#, c-format
+msgid "Printing node %s..."
+msgstr "%s düðümü yazdýrýlýyor..."
+
+#: info/session.c:3900
+msgid "Search continued from the end of the document."
+msgstr "Arama, belgenin sonundan sürdürülüyor."
+
+#: info/session.c:3905
+msgid "Search continued from the beginning of the document."
+msgstr "Arama, belgenin baþýndan sürdürülüyor."
+
+#: info/session.c:3922
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "%s altdosyasý aranýyor ..."
+
+#: info/session.c:3979
+msgid "Read a string and search for it case-sensitively"
+msgstr "Bir dizge okur ve onu büyük/küçük harf duyarlý þekilde arar"
+
+#: info/session.c:3986
+msgid "Read a string and search for it"
+msgstr "Bir dizge okur ve (onu) arar"
+
+#: info/session.c:3994
+msgid "Read a string and search backward for it"
+msgstr "Bir dizge okur ve (onu) geriye doðru arar"
+
+#: info/session.c:4030 info/session.c:4036
+#, c-format
+msgid "%s%s%s [%s]: "
+msgstr "%s%s%s [%s]: "
+
+#: info/session.c:4031 info/session.c:4037
+msgid "Regexp search"
+msgstr "Düzenli ifade arama"
+
+#: info/session.c:4032 info/session.c:4038
+msgid " case-sensitively"
+msgstr " büyük/küçük harf duyarlý þekilde "
+
+#: info/session.c:4033 info/session.c:4039
+msgid " backward"
+msgstr " geriye doðru"
+
+#: info/session.c:4037
+msgid "Search"
+msgstr "Ara"
+
+#: info/session.c:4079
+msgid "Search failed."
+msgstr "Arama baþarýsýz"
+
+#: info/session.c:4097
+msgid "Repeat last search in the same direction"
+msgstr "Son aramayý ayný yönde yineler"
+
+#: info/session.c:4100 info/session.c:4110
+msgid "No previous search string"
+msgstr "Daha önceden arama dizgesi yok"
+
+#: info/session.c:4107
+msgid "Repeat last search in the reverse direction"
+msgstr "Son aramayý ters yönde yineler"
+
+#: info/session.c:4126 info/session.c:4132
+msgid "Search interactively for a string as you type it"
+msgstr "Bir dizgeyi siz yazarken etkileþimli þekilde arar"
+
+#: info/session.c:4212
+msgid "Regexp I-search backward: "
+msgstr "Düzenli ifade I-arama, geriye doðru: "
+
+#: info/session.c:4213
+msgid "I-search backward: "
+msgstr "I-arama, geriye doðru: "
+
+#: info/session.c:4215
+msgid "Regexp I-search: "
+msgstr "Düzenli ifade I-arama: "
+
+#: info/session.c:4216
+msgid "I-search: "
+msgstr "I-arama: "
+
+#: info/session.c:4241 info/session.c:4243
+msgid "Failing "
+msgstr "Baþarýlamýyor "
+
+#: info/session.c:4734
+msgid "Move to the previous cross reference"
+msgstr "Önceki çapraz baþvuruya gider"
+
+#: info/session.c:4752
+msgid "Move to the next cross reference"
+msgstr "Sonraki çapraz baþvuruya gider"
+
+#: info/session.c:4774
+msgid "Select reference or menu item appearing on this line"
+msgstr "Bu satýrdaki referans ya da menü öðesini seçer"
+
+#: info/session.c:4797
+msgid "Cancel current operation"
+msgstr "Mevcut iþlemi iptal eder"
+
+#: info/session.c:4804
+msgid "Quit"
+msgstr "Çýk"
+
+#: info/session.c:4813
+msgid "Move the cursor to a specific line of the window"
+msgstr "Ýmleci pencerenin belirli bir satýrýna taþýr"
+
+#: info/session.c:4845
+msgid "Redraw the display"
+msgstr "Görüntüyü yeniden çizer"
+
+#: info/session.c:4882
+msgid "Quit using Info"
+msgstr "Info'dan çýkar"
+
+#: info/session.c:4895
+msgid "Run command bound to this key's lowercase variant"
+msgstr "Bu tuþun küçük harfine atanmýþ komutu yürütür"
+
+#: info/session.c:4906
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "Bilinmeyen komut (%s)."
+
+#: info/session.c:4909
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "\"%s\" geçersiz"
+
+#: info/session.c:4910
+#, c-format
+msgid "`%s' is invalid"
+msgstr "`%s' geçersiz"
+
+#: info/session.c:5125
+msgid "Add this digit to the current numeric argument"
+msgstr "Mevcut sayýsal argümana bu sayýyý ekle"
+
+#: info/session.c:5134
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "Mevcut sayýsal argümaný baþlat (ya da 4'le çarp)"
+
+#: info/session.c:5149
+msgid "Internally used by \\[universal-argument]"
+msgstr "Dahili olarak \\[universal argument] tarafýndan kullanýlýyor"
+
+#: info/tilde.c:336
+#, c-format
+msgid "readline: Out of virtual memory!\n"
+msgstr "okuma-satýrý: Sanal bellek tükendi!\n"
+
+#: info/variables.c:37
+msgid "When \"On\", footnotes appear and disappear automatically"
+msgstr "\"Açýk\" olduðunda, dipnotlar otomatik olarak görünür ve kaybolur"
+
+#: info/variables.c:41
+msgid "When \"On\", creating or deleting a window resizes other windows"
+msgstr ""
+"\"Açýk\" olduðunda, bir pencereyi oluþturma ya da silme, diðerlerini yeniden "
+"boyutlandýrýr"
+
+#: info/variables.c:45
+msgid "When \"On\", flash the screen instead of ringing the bell"
+msgstr "\"Açýk\" olduðunda, zil çalýnacaðýna ekran yanýp söner"
+
+#: info/variables.c:49
+msgid "When \"On\", errors cause the bell to ring"
+msgstr "\"Açýk\" olduðunda, hatalar zilin çalmasýna neden olur"
+
+#: info/variables.c:53
+msgid "When \"On\", Info garbage collects files which had to be uncompressed"
+msgstr ""
+"\"Açýk\" olduðunda Info çöpü, sýkýþtýrmasý açýlmak zorunda olan dosyalarý "
+"biriktirir"
+
+#: info/variables.c:56
+msgid "When \"On\", the portion of the matched search string is highlighted"
+msgstr "\"Açýk\" olduðunda, arama dizgesinin eþleþen kýsmý ýþýklandýrýlýr"
+
+#: info/variables.c:60
+msgid "Controls what happens when scrolling is requested at the end of a node"
+msgstr "Bir düðüm sonunda kaydýrma istendiðinde ne olacaðýný kontrol eder"
+
+#: info/variables.c:65
+msgid "Same as scroll-behaviour"
+msgstr "Metin kaydýrma davranýþýyla ayný"
+
+#: info/variables.c:69
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr "Ýmleç penceere dýþýna taþýndýðýnda kaydýrýlacak satýr sayýsý"
+
+#: info/variables.c:73
+msgid "Controls whether scroll-behavior affects cursor movement commands"
+msgstr ""
+"Metin kaydýrma davranýþýnýn imleç hareket komutlarýný etkileyip "
+"etkilemeyeceðini kontrol eder"
+
+#: info/variables.c:77
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr ""
+"\"Açýk\" olduðunda Info, ISO Latin karakterleri kabul eder ve görüntüler"
+
+#: info/variables.c:81
+msgid ""
+"What to do when a scrolling command is issued at the end of the last node"
+msgstr "Son düðümün sonunda kaydýrma istendiðinde yapýlacak þey"
+
+#: info/variables.c:88
+msgid "Explain the use of a variable"
+msgstr "Bir deðiþkenin kullanýmýný açýklar"
+
+#: info/variables.c:94
+msgid "Describe variable: "
+msgstr "Açýklanacak deðiþken: "
+
+#: info/variables.c:113
+msgid "Set the value of an Info variable"
+msgstr "Bir Info deðiþkeninin deðerini belirler"
+
+#: info/variables.c:119
+msgid "Set variable: "
+msgstr "Deðiþkeni ata: "
+
+#: info/variables.c:137
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "%s'e atanacak deðer (%d): "
+
+#: info/variables.c:178
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "%s'e atanacak deðer (%s): "
+
+#: info/window.c:1026
+msgid "--*** Tags out of Date ***"
+msgstr "..*** Eskimiþ Etiketler ***"
+
+#: info/window.c:1037
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), satýr ----, "
+
+#: info/window.c:1044
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d satýr --%s--"
+
+#: info/window.c:1048
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d satýr --%s--"
+
+#: info/window.c:1055
+#, c-format
+msgid " Subfile: %s"
+msgstr " Altdosya: %s"
+
+#: install-info/install-info.c:221
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: uyarý: "
+
+#: install-info/install-info.c:270
+#, c-format
+msgid " for %s"
+msgstr " %s için"
+
+#: install-info/install-info.c:500
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr "\tSeçeneklerin tam bir listesi için `%s --help''i deneyiniz.\n"
+
+#: install-info/install-info.c:508
+#, c-format
+msgid "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+msgstr "Kullaným: %s [SEÇENEK]... [INFO-DOSYASI [DÝZÝN-DOSYASI]]\n"
+
+#: install-info/install-info.c:510
+msgid "Add or remove entries in INFO-FILE from the Info directory DIR-FILE."
+msgstr ""
+"DÝZÝN-DOSYASI Info dizininden INFO-DOSYASI içine girdi ekle ya da çýkar"
+
+#: install-info/install-info.c:513
+msgid ""
+"Options:\n"
+" --debug report what is being done.\n"
+" --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+" don't insert any new entries.\n"
+" --description=TEXT the description of the entry is TEXT; used with\n"
+" the --name option to become synonymous with the\n"
+" --entry option.\n"
+" --dir-file=NAME specify file name of Info directory file;\n"
+" equivalent to using the DIR-FILE argument.\n"
+" --dry-run same as --test."
+msgstr ""
+"Seçenekler:\n"
+" --debug yapýlmakta olaný rapor et.\n"
+" --delete DIZIN-DOSYASI'ndan INFO-DOSYASI için mevcut girdileri "
+"sil;\n"
+" hiç yeni girdi ekleme.\n"
+" --description=METÝN girdinin açýklamasý METÝN'dir; --entry seçeneðiyle\n"
+" eþanlamlý hale gelmesi için --name seçeneðiyle "
+"birlikte\n"
+" kullanýlýr.\n"
+" --dir-file=AD Info dizindosyasýnýn adýný belirtir; DÝZÝN-DOSYASI \n"
+" argümanýný kullanmakla eþdeðerdir.\n"
+" --dry-run --test ile ayný."
+
+#: install-info/install-info.c:525
+msgid ""
+" --entry=TEXT insert TEXT as an Info directory entry.\n"
+" TEXT is written as an Info menu item line followed\n"
+" by zero or more extra lines starting with "
+"whitespace.\n"
+" If you specify more than one entry, all are added.\n"
+" If you don't specify any entries, they are determined\n"
+" from information in the Info file itself.\n"
+" When removing, TEXT specifies the entry to remove.\n"
+" TEXT is only removed as a last resort, if the\n"
+" entry as determined from the Info file is not "
+"present,\n"
+" and the basename of the Info file isn't found either."
+msgstr ""
+" --entry =METÝN METÝN'i Info dizin girdisi olarak "
+"ekler.\n"
+" METÝN, Info menü ögesi olarak yazýlýp, sýfýr ya da "
+"boþlukla\n"
+" baþlayan diðer satýrlarla devam eder.\n"
+" Eðer birden fazla girdi belirtirseniz, tümü "
+"eklenir. \n"
+" Eðer hiçbir girdi belirtmezseniz bunlar, Info\n"
+" dosyasýnýn içindeki bilgiden belirlenir.\n"
+" Silinirken, METÝN, silinecek girdiyi belirler.\n"
+" Eðer girdi Info dosyasýnda belirlendiði gibi "
+"deðilse,\n"
+" ve Info dosyasýnýn temel adý da bulunamýyorsa\n"
+" METÝN yalnýzca son çare olarak silinir."
+
+#: install-info/install-info.c:537
+msgid ""
+" --help display this help and exit.\n"
+" --info-dir=DIR same as --dir-file=DIR/dir.\n"
+" --info-file=FILE specify Info file to install in the directory;\n"
+" equivalent to using the INFO-FILE argument.\n"
+" --item=TEXT same as --entry=TEXT.\n"
+" --keep-old do not replace entries, or remove empty sections.\n"
+" --menuentry=TEXT same as --name=TEXT.\n"
+" --name=TEXT the name of the entry is TEXT; used with --description\n"
+" to become synonymous with the --entry option.\n"
+" --no-indent do not format new entries in the DIR file.\n"
+" --quiet suppress warnings."
+msgstr ""
+" --help bu yardýmý gösterir ve çýkar.\n"
+" --info-dir=DÝZÝN --dir-file=DÝZÝN/dizin ile ayný.\n"
+" --info-file=DOSYA dizine kurulacak Info dosyasýný belirler; \n"
+" INFO-DOSYASI argümanýný kullanmakla eþdeðerdir.\n"
+" --item=METÝN --entry=METÝN ile ayný.\n"
+" --keep-old girdileri deðiþtirmez ya da boþ bölümleri silmez.\n"
+" -menuentry=METÝN --name=METÝN ile ayný.\n"
+" --name=METÝN girdinin adý METÝN'dir; --description ile\n"
+" kullanýldýðýnda --entry seçeneðiyle eþanlamlý olur.\n"
+" --no-indent DÝZÝN dosyasýndaki yeni girdileri biçemlemez.\n"
+" --quiet uyarýlarý baskýlar."
+
+#: install-info/install-info.c:550
+msgid ""
+" --regex=R put this file's entries in all sections that match the\n"
+" regular expression R (ignoring case).\n"
+" --remove same as --delete.\n"
+" --remove-exactly only remove if the info file name matches exactly;\n"
+" suffixes such as .info and .gz are not ignored.\n"
+" --section=SEC put entries in section SEC of the directory.\n"
+" If you specify more than one section, all the entries\n"
+" are added in each of the sections.\n"
+" If you don't specify any sections, they are "
+"determined\n"
+" from information in the Info file itself.\n"
+" --section R SEC equivalent to --regex=R --section=SEC --add-once."
+msgstr ""
+" --regex=R bu dosyanýn tüm bölümlerindeki R düzenli ifadesine uyan "
+"(büyük/\n"
+" küçük harf duyarsýz) tüm girdilerini koyar.\n"
+" --remove --delet ile ayný.\n"
+" --remove-exactly yalnýzca info dosya adý tam olarak eþleþirse siler;\n"
+" .info ve .gz uzantýlarý yok sayýlmaz.\n"
+" --section=BÖLÜM girdileri dizinin BÖLÜM bölümüne koyar.\n"
+" Birden fazla bölüm belirtirseniz, her bir bölüme tüm "
+"girdiler\n"
+" eklenir.\n"
+" Eðer hiçbir bölüm belirtmezseniz bunlar, Info "
+"dosyasýndaki\n"
+" bilgiden belirlenir.\n"
+" --section R BÖLÜM --regex=R --section=BÖLÜM --add-once ile eþdeðer."
+
+#: install-info/install-info.c:563
+msgid ""
+" --silent suppress warnings.\n"
+" --test suppress updating of DIR-FILE.\n"
+" --version display version information and exit."
+msgstr ""
+" --silent uyarýlarý baskýlar.\n"
+" --test DÝZÝN-DOSYASI'nýn güncellenmesini engeller.\n"
+" --version sürüm bilgisini gösterir ve çýkar."
+
+#: install-info/install-info.c:570
+msgid ""
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"Yazýlým hatalarýný bug-texinfo@gnu.org'a,\n"
+"genel soru ve tartýþmalarý help-texinfo@gnu.org'a gönderiniz.\n"
+"Texinfo anasayfasý: http://www.gnu.org/software/texinfo/"
+
+#: install-info/install-info.c:597
+#, c-format
+msgid ""
+"This is the file .../info/dir, which contains the\n"
+"topmost node of the Info hierarchy, called (dir)Top.\n"
+"The first time you invoke Info you start off looking at this node.\n"
+"\n"
+"%s\tThis is the top of the INFO tree\n"
+"\n"
+" This (the Directory node) gives a menu of major topics.\n"
+" Typing \"q\" exits, \"?\" lists all Info commands, \"d\" returns here,\n"
+" \"h\" gives a primer for first-timers,\n"
+" \"mEmacs<Return>\" visits the Emacs manual, etc.\n"
+"\n"
+" In Emacs, you can click mouse button 2 on a menu item or cross reference\n"
+" to select it.\n"
+"\n"
+"%s\n"
+msgstr ""
+"Bu, .../info/dir dosyasý olup, (dir)Üst adý verilen, Info\n"
+"hiyerarþisinin en üst düðümünü içerir.\n"
+"Info'yu ilk çalýþtýrdýðýnýzda bu düðüme bakarak baþlýyor olursunuz.\n"
+"\n"
+"%s\tBu, INFO aðacýnýn tepesidir\n"
+"\n"
+" Bu (Dizin düðümü), temel konularýn bir menüsünü verir.\n"
+" \"q\" tuþuyla çýkar, \"?\" ile tüm Info komutlarýný listeler, \"d\" ile "
+"buraya döner,\n"
+" \"h\" ile yeni baþlayanlar için bir klavuz alabilir,\n"
+" \"mEmacs<Return>\" ile Emacs klavuzunu ziyaret edebilirsiniz, vs.\n"
+"\n"
+" Emacs'ta, bir menü öðesi ya da çapraz baþvuru üzerinde sað fare tuþunu\n"
+" týklayarak seçim yapabilirsiniz.\n"
+"\n"
+"%s\n"
+
+#: install-info/install-info.c:622
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr "%1$s: (%2$s) okunamýyor ve (%3$s) oluþturulamýyor\n"
+
+#: install-info/install-info.c:715
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: boþ dosya"
+
+#: install-info/install-info.c:1046 install-info/install-info.c:1086
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "Eþleþen END-INFO-DIR-ENTRY'siz START-INFO-DIR-ENTRY"
+
+#: install-info/install-info.c:1081
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "Eþleþen START-INFO-DIR-ENTRY'siz END-INFO-DIR-ENTRY"
+
+#: install-info/install-info.c:1946 install-info/install-info.c:1956
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr "%s: zaten dir dosyasý var: %s\n"
+
+#: install-info/install-info.c:2036
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: Info dosyasýný yalnýzca bir kez belirtin.\n"
+
+#: install-info/install-info.c:2069
+#, c-format
+msgid "Extra regular expression specified, ignoring `%s'"
+msgstr "Bir baþka düzenli ifade belirlendi, `%s' yok sayýlýyor"
+
+#: install-info/install-info.c:2081
+#, c-format
+msgid "Error in regular expression `%s': %s"
+msgstr "Düzenli ifadede hata `%s': %s"
+
+#: install-info/install-info.c:2139
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "fazladan komut satýrý argümaný `%s'"
+
+#: install-info/install-info.c:2143
+msgid "No input file specified; try --help for more information."
+msgstr "Girdi dosyasý belirtilmemiþ; daha fazla bilgi için --help deneyin."
+
+#: install-info/install-info.c:2146
+msgid "No dir file specified; try --help for more information."
+msgstr "dizin dosyasý belirtilmemiþ; daha fazla bilgi için --help deneyin."
+
+#: install-info/install-info.c:2288
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "`%s' içinde info dizin girdisi yok"
+
+#: install-info/install-info.c:2536
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "`%s' için girdi bulunamadý; hiçbir þey silinmedi"
+
+#: lib/xexit.c:54
+msgid "ferror on stdout\n"
+msgstr "stdout'da ferror\n"
+
+#: lib/xexit.c:59
+msgid "fflush error on stdout\n"
+msgstr "stdout'da fflush hatasý\n"
+
+#: makeinfo/cmds.c:582 makeinfo/cmds.c:604
+#, c-format
+msgid "arguments to @%s ignored"
+msgstr "@%s'ye argümanlar yok sayýldý"
+
+#: makeinfo/cmds.c:779
+msgid "January"
+msgstr "Ocak"
+
+#: makeinfo/cmds.c:779
+msgid "February"
+msgstr "Þubat"
+
+#: makeinfo/cmds.c:779
+msgid "March"
+msgstr "Mart"
+
+#: makeinfo/cmds.c:779
+msgid "April"
+msgstr "Nisan"
+
+#: makeinfo/cmds.c:779
+msgid "May"
+msgstr "Mayýs"
+
+#: makeinfo/cmds.c:780
+msgid "June"
+msgstr "Haziran"
+
+#: makeinfo/cmds.c:780
+msgid "July"
+msgstr "Temmuz"
+
+#: makeinfo/cmds.c:780
+msgid "August"
+msgstr "Aðustos"
+
+#: makeinfo/cmds.c:780
+msgid "September"
+msgstr "Eylül"
+
+#: makeinfo/cmds.c:780
+msgid "October"
+msgstr "Ekim"
+
+#: makeinfo/cmds.c:781
+msgid "November"
+msgstr "Kasým"
+
+#: makeinfo/cmds.c:781
+msgid "December"
+msgstr "Aralýk"
+
+#: makeinfo/cmds.c:1131
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "@var içinde düþük olasýlýklý karakter %c"
+
+#: makeinfo/cmds.c:1174
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "@sc argümaný tamamen büyükharf(le yazýlmýþ), etkisiz"
+
+#: makeinfo/cmds.c:1229
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "`{' beklenirdi, `%c' görüldü"
+
+#: makeinfo/cmds.c:1269
+msgid "end of file inside verb block"
+msgstr "fiil bloðu içinde dosya sonu"
+
+#: makeinfo/cmds.c:1277
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "`}' beklenirdi, `%c' görüldü"
+
+#: makeinfo/cmds.c:1308
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+"@strong{Not...} Info'da sahte bir çapraz-baþvuru oluþturur; bundan kaçýnmak "
+"için yazýmý deðiþtirin"
+
+#: makeinfo/cmds.c:1504
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s kullanýmdan kalkmýþ"
+
+#: makeinfo/cmds.c:1612
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "@sp pozitif bir sayýsal argüman gerektirir, `%s' deðil"
+
+#: makeinfo/cmds.c:2023 makeinfo/footnote.c:81
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "%c%s'ye hatalý argüman"
+
+#: makeinfo/cmds.c:2033 makeinfo/makeinfo.c:4317
+msgid "asis"
+msgstr "asis"
+
+#: makeinfo/cmds.c:2035 makeinfo/cmds.c:2065 makeinfo/makeinfo.c:4319
+msgid "none"
+msgstr "yok"
+
+#: makeinfo/cmds.c:2049
+#, c-format
+msgid "Bad argument to @%s"
+msgstr "@%s'ye hatalý argüman"
+
+#: makeinfo/cmds.c:2063
+msgid "insert"
+msgstr "ekle"
+
+#: makeinfo/cmds.c:2079
+#, c-format
+msgid "Bad argument to @%s: %s"
+msgstr "@%s:%s'ye hatalý argüman"
+
+#: makeinfo/cmds.c:2162
+#, c-format
+msgid "Expected @%s on or off, not `%s'"
+msgstr "%1$s'de açýk ya da kapalý bakleniyordu, `%2$s' deðil"
+
+#: makeinfo/cmds.c:2182
+#, c-format
+msgid "Only @%s 10 or 11 is supported, not `%s'"
+msgstr "Yalnýzca @%1$s 10 ya da 11 destekleniyor, `%2$s' deðil"
+
+#: makeinfo/defun.c:83
+msgid "Missing `}' in @def arg"
+msgstr "@def arg'da kayýp `}'"
+
+#: makeinfo/defun.c:711
+#, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr "`@%s' kullanmak için `@%s' ortamý içinde ol(un)malýdýr"
+
+#: makeinfo/files.c:434
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:637
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr "`%s' çýktý dosya adýndan önce yok sayýldý"
+
+#: makeinfo/files.c:645
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr "stdout'a yazýlýyor olduðundan `%s' yok sayýldý"
+
+#: makeinfo/files.c:693
+msgid "Output buffer not empty."
+msgstr "Çýktý tamponu boþ deðil"
+
+#: makeinfo/float.c:181
+#, c-format
+msgid "Requested float type `%s' not previously used"
+msgstr "Ýstenen yüzer türü `%s' daha önce kullanýlmadý"
+
+#: makeinfo/float.c:376 makeinfo/float.c:382 makeinfo/index.c:959
+#: makeinfo/index.c:965
+msgid "See "
+msgstr "Bkz "
+
+#: makeinfo/footnote.c:149
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "`%c%s' bir argüman gereksinir `{ }', yalnýzca `%s' deðil"
+
+#: makeinfo/footnote.c:164
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "Dipnot `%s' için kapama } yok"
+
+#: makeinfo/footnote.c:197
+msgid "Footnote defined without parent node"
+msgstr "Dipnot, ebeveyn düðümsüz tanýmlanmýþ"
+
+#: makeinfo/footnote.c:209
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "Dipnot içi dipnotlara izin verilmez"
+
+#: makeinfo/footnote.c:301 makeinfo/index.c:187
+msgid "Footnotes"
+msgstr "Dipnotlar"
+
+#: makeinfo/html.c:91
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr "%s: açýlamayan --css-dosyasý: %s"
+
+#: makeinfo/html.c:180
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr "%s:%d: --css-dosyasý yorum içinde sonlandý"
+
+#: makeinfo/html.c:426
+msgid "[unexpected] no html tag to pop"
+msgstr "hayýr :"
+
+#: makeinfo/html.c:800
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "[beklenmeyen] geçersiz düðüm ismi: `%s'"
+
+#: makeinfo/index.c:167
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "Bilinmeyen indeks `%s'"
+
+#: makeinfo/index.c:232
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr "Info, `%s' indeks girdisindeki `:''yi kullanamýyor"
+
+#: makeinfo/index.c:410
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "Ýndeks `%s' zaten mevcut"
+
+#: makeinfo/index.c:453
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "Bilinmeyen indeks `%1$s' ve/veya @synindex içinde `%2$s'"
+
+#: makeinfo/index.c:676
+msgid "(line )"
+msgstr "(satýr )"
+
+#: makeinfo/index.c:684
+#, c-format
+msgid "(line %*d)"
+msgstr "(satýr %*d)"
+
+#: makeinfo/index.c:765
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "@printindex içinde bilinmeyen indeks `%s'"
+
+#: makeinfo/index.c:834
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "`%s' indeks girdisi tüm düðümlerin dýþýnda"
+
+#: makeinfo/index.c:837 makeinfo/index.c:873
+msgid "(outside of any node)"
+msgstr "(tüm düðümlerin dýþýnda)"
+
+#: makeinfo/insertion.c:161
+msgid "@item not allowed in argument to @itemize"
+msgstr "@item, @itemize'a argüman olarak kullanýlamaz"
+
+#: makeinfo/insertion.c:242
+msgid "Broken-Type in insertion_type_pname"
+msgstr "insertion_type_pname içinde Kýrýk-Tip"
+
+#: makeinfo/insertion.c:338
+msgid "Enumeration stack overflow"
+msgstr "Numaralandýrma yýðýn taþmasý"
+
+#: makeinfo/insertion.c:370
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "harflendirme taþmasý, %c'den yeniden baþlanýyor"
+
+#: makeinfo/insertion.c:639
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s bir argüman gerektirir: %c öðesi için biçimlendirici"
+
+#: makeinfo/insertion.c:727
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr "%cfloat çevreler içiçelendirilemez"
+
+#: makeinfo/insertion.c:981
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "`@end' `%1$s' beklerdi, `%2$s' gördü"
+
+#: makeinfo/insertion.c:1349
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "Eþleþen `%cend %s' yok"
+
+#: makeinfo/insertion.c:1618
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s harf ya da rakam gerektirir"
+
+#: makeinfo/insertion.c:1718
+msgid "end of file inside verbatim block"
+msgstr "verbatim bloðu içinde dosya sonu"
+
+#: makeinfo/insertion.c:1942
+#, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "`@float' çevresi dýþýnda @%s anlamlý deðil"
+
+#: makeinfo/insertion.c:1978
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "önce Üst"
+
+#: makeinfo/insertion.c:1979
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr ""
+"belki de sizin @top düðümünüz, @ifinfo'dan ziyade @ifnottex içine "
+"sarýlmalýdýr?"
+
+#: makeinfo/insertion.c:1991
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "@detailmenu ilk düðümden önce görüldü, `En Üst' düðüm oluþturuluyor"
+
+#: makeinfo/insertion.c:2047
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr "`@titlepage' ve `@quotation' çevreleri dýþýnda @%s anlamlý deðil"
+
+#: makeinfo/insertion.c:2061
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "`@titlepage' çevresi dýþýnda @%s anlamlý deðil"
+
+#: makeinfo/insertion.c:2092
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "Eþleþmeyen `%c%s'"
+
+#: makeinfo/insertion.c:2097
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "`%c%s' sonrasýnda birþeyler gereklidir"
+
+#: makeinfo/insertion.c:2103
+#, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "`%2$s''e hatalý argüman, `%1$s', `%3$s' kullanýlýyor"
+
+#: makeinfo/insertion.c:2200
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "`@%s' bloðu içinde @%s anlamlý deðil"
+
+#: makeinfo/insertion.c:2209
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "`%s' bloðunun içinde @itemx anlamlý deðil"
+
+#: makeinfo/insertion.c:2383
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "%c%s, bir ekleme bloðunun dýþýnda bulundu"
+
+#: makeinfo/lang.c:1218
+#, c-format
+msgid "no default territory known for language `%s'"
+msgstr "`%s' dili için bilinen öntanýmlý bölge yok"
+
+#: makeinfo/lang.c:1281
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr "%s geçerli bir ISO 639 dil kodu deðildir"
+
+#: makeinfo/lang.c:1399
+#, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "tanýnmayan kodlama adý `%s'"
+
+#: makeinfo/lang.c:1407
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "üzgünüm, `%s' kodlamasý desteklenmiyor"
+
+#: makeinfo/lang.c:1492
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "geçersiz kodlanmýþ karakter `%s'"
+
+#: makeinfo/lang.c:1800
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr "%c%s argüman olarak `i' ya da `j' gerektirir, %c deðil"
+
+#: makeinfo/lang.c:1804
+#, c-format
+msgid "%c%s expects a single character `i' or `j' as argument"
+msgstr "%c%s argüman olarak tek karakter, `i' ya da `j' gerektirir"
+
+#: makeinfo/macro.c:128
+#, c-format
+msgid "macro `%s' previously defined"
+msgstr "makro `%s' daha önce tanýmlanmýþ"
+
+#: makeinfo/macro.c:132
+#, c-format
+msgid "here is the previous definition of `%s'"
+msgstr "iþte `%s''nin önceki tanýmý"
+
+#: makeinfo/macro.c:359
+#, c-format
+msgid "\\ in macro expansion followed by `%s' instead of parameter name"
+msgstr "makro geniþlemesindeki \\'i, parametre adý yerine `%s' izliyor"
+
+#: makeinfo/macro.c:401
+#, c-format
+msgid "Macro `%s' called on line %d with too many args"
+msgstr "Makro `%s', %d satýrýnda çok sayýda arg.la çaðrýldý"
+
+#: makeinfo/macro.c:580
+#, c-format
+msgid "%cend macro not found"
+msgstr "%cson makrosu bulunamadý"
+
+#: makeinfo/macro.c:591
+msgid "@allow-recursion is deprecated; please use @rmacro instead"
+msgstr "@allow-recursion kullanýlmýyor; lütfen yerine @rmacro kullanýnýz"
+
+#: makeinfo/macro.c:606
+msgid "@quote-arg is deprecated; arguments are quoted by default"
+msgstr ""
+"@quote-arg kullanýlmýyor; argümanlar öntanýmlý olarak týrnak içine alýnýyor"
+
+#: makeinfo/macro.c:649
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "@%s ile eþleþmeyen @end %s"
+
+#: makeinfo/makeinfo.c:188
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "Çok sayýda hata! Vazgeçildi.\n"
+
+#: makeinfo/makeinfo.c:306
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: uyarý: "
+
+#: makeinfo/makeinfo.c:325 makeinfo/makeinfo.c:2340
+#, c-format
+msgid "Misplaced %c"
+msgstr "Yanlýþ yerleþtirilmiþ %c"
+
+#: makeinfo/makeinfo.c:344
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Daha fazla bilgi için `%s --help' yazýn.\n"
+
+#: makeinfo/makeinfo.c:347
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "Kullaným: %s [SEÇENEK]... TEXINFO-DOSYASI...\n"
+
+#: makeinfo/makeinfo.c:350
+msgid ""
+"Translate Texinfo source documentation to various other formats, by default\n"
+"Info files suitable for reading online with Emacs or standalone GNU Info.\n"
+msgstr ""
+"Öntanýmlý olarak Texinfo kaynak belgelerini diðer çeþitli biçemlere çevirir\n"
+"Info dosyalarý çevrimiçi Emacs ya da tek baþýna GNU Info'yla okunmak için "
+"uygundur.\n"
+
+#: makeinfo/makeinfo.c:354
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\n"
+" --document-language=STR locale to use in translating Texinfo keywords\n"
+" for the output document (default C).\n"
+" --force preserve output even if errors.\n"
+" --help display this help and exit.\n"
+" --no-validate suppress node cross-reference validation.\n"
+" --no-warn suppress warnings (but not errors).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"Genel seçenekler:\n"
+" --error-limit=ADET ADET hatadan sonra çýkar (öntanýmlý %d).\n"
+" --document-language=STR Çýktý belgesi için Texinfo anahtar "
+"sözcüklerini \n"
+" çevirmekte kullanýlacak yerel (öntanýmlý "
+"C).\n"
+" --force hatalarda dahi çýktýyý korur.\n"
+" --help bu yardýmý görüntüler ve çýkar.\n"
+" --no-validate düðüm çapraz-baþvuru onaylamasýný baskýlar.\n"
+" --no-warn uyarýlarý baskýlar (fakat hatalarý deðil).\n"
+" -v, --verbose ne yapýlýyor olduðunu açýklar.\n"
+" --version sürüm bilgisini görüntüler ve çýkar.\n"
+
+#: makeinfo/makeinfo.c:369
+#, no-wrap
+msgid ""
+"Output format selection (default is to produce Info):\n"
+" --docbook output Docbook XML rather than Info.\n"
+" --html output HTML rather than Info.\n"
+" --xml output Texinfo XML rather than Info.\n"
+" --plaintext output plain text rather than Info.\n"
+msgstr ""
+"Çýktý biçem seçimi (öntanýmlýsý Info üretmektir):\n"
+" --docbook Info yerine DocBook XML çýktýsý üretir.\n"
+" --html Info yerine HTML çýktýsý üretir.\n"
+" --xml Info yerine Texinfo XML çýktýsý üretir.\n"
+" --plaintext Info yerine salt metin çýktýsý üretir.\n"
+
+#: makeinfo/makeinfo.c:377
+msgid ""
+"General output options:\n"
+" -E, --macro-expand=FILE output macro-expanded source to FILE,\n"
+" ignoring any @setfilename.\n"
+" --no-headers suppress node separators, Node: lines, and "
+"menus\n"
+" from Info output (thus producing plain "
+"text)\n"
+" or from HTML (thus producing shorter "
+"output);\n"
+" also, write to standard output by default.\n"
+" --no-split suppress the splitting of Info or HTML "
+"output,\n"
+" generate only one output file.\n"
+" --number-sections output chapter and sectioning numbers.\n"
+" -o, --output=FILE output to FILE (or directory if split HTML).\n"
+msgstr ""
+"Genel çýktý seçenekleri:\n"
+" -E, --macro-expand DOSYA makro-geniþletilmiþ kaynak çýktýsýný herhangi "
+"bir\n"
+" @setfilename'i yoksayarak DOSYA'ya yazar.\n"
+" --no-headers Info ya da HTML çýktýsýnda düðüm ayraçlarýný, "
+"Node:\n"
+" satýrlarýný ve menüleri baskýlar (salt "
+"metinya da daha kýsa çýktý\n"
+" üretmek üzere); ayrýca, öntanýmlý olarak\n"
+" standart çýktýya yazar.\n"
+" --no-split Info ya da HTML çýktýsýnýn bölünmesini "
+"baskýlar,\n"
+" yalnýzca bir çýktý dosyasý oluþturur.\n"
+" --number-sections bölüm ve kýsým numaralarýnýn çýktýsýný alýr.\n"
+" -o, --output=DOSYA çýktýyý DOSYA'ya yazar (bölünmüþ HTML ise "
+"dizine).\n"
+
+#: makeinfo/makeinfo.c:391
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --disable-encoding do not output accented and special characters\n"
+" in Info output based on @documentencoding.\n"
+" --enable-encoding override --disable-encoding (default).\n"
+" --fill-column=NUM break Info lines at NUM characters (default %"
+"d).\n"
+" --footnote-style=STYLE output footnotes in Info according to STYLE:\n"
+" `separate' to put them in their own node;\n"
+" `end' to put them at the end of the node, "
+"in\n"
+" which they are defined (this is the "
+"default).\n"
+" --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %"
+"d).\n"
+" If VAL is `none', do not indent; if VAL is\n"
+" `asis', preserve existing indentation.\n"
+" --split-size=NUM split Info files at size NUM (default %d).\n"
+msgstr ""
+"Info ve salt metin için seçenekler:\n"
+" --disable-encoding aksanlý ve özel karakterlerin çýktýsýný "
+"@documentencoding'e\n"
+" dayalý olarak Info çýktýsýna yazmaz.\n"
+" --enable-encoding --disable encoding'i (öntanýmlý) geçersiz "
+"kýlar.\n"
+" --fill-column=ADET Info satýrlarýný ADET karakterde bitir "
+"(öntanýmlý %d)\n"
+" --footnote-style=STÝL Info'da dipnotlarýn çýktýsýný STÝL'e göre "
+"yazar:\n"
+" kendi düðümlerine koymak için `separate';\n"
+" tanýmlandýklarý düðümün sonuna koymak için\n"
+" `end' (öntanýmlý).\n"
+" --paragraph-indent=DEG Info paragraflarýný DEG boþluk girintiler "
+"(öntanýmlý %d).\n"
+" Eðer DEG `none' ise girintilemez; eðer DEG\n"
+" `asis' ise mevcut girintiyi korur.\n"
+" --spilt-size=NUM Info dosyalarýný NUM boyutuna böler (öntanýmlý "
+"%d).\n"
+
+#: makeinfo/makeinfo.c:409
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+" --css-ref=URL generate reference to a CSS file.\n"
+" --internal-links=FILE produce list of internal links in FILE.\n"
+" --transliterate-file-names\n"
+" produce file names in ASCII transliteration.\n"
+msgstr ""
+"HTML seçenekleri:\n"
+" --css-include=DOSYA DOSYA'yý HTML <style> çýktýsýnda içerir;\n"
+" eðer DOSYA - ise stdin'i okur.\n"
+" --css-ref=URL bir CSS dosyasýna baþvuru oluþturur.\n"
+" --internal-links=DOSYA DOSYA içinde iç linklerin listesini üretir.\n"
+" --transliterate-file-names\n"
+" dosya isimlerini ASCII alfabesine dönüþtürerek "
+"üretir.\n"
+
+#: makeinfo/makeinfo.c:419
+#, c-format
+msgid ""
+"Options for XML and Docbook:\n"
+" --output-indent=VAL indent XML elements by VAL spaces (default %"
+"d).\n"
+" If VAL is 0, ignorable whitespace is "
+"dropped.\n"
+msgstr ""
+"XML ve Docbook için seçenekler:\n"
+" --output-indent=DEÐER XML elementlerini DEÐER kadar boþluk "
+"girintilendir (öntanýmlý %d).\n"
+" eðer DEÐER 0 ise yok sayýlabilen beyaz "
+"boþluk silinir.\n"
+
+#: makeinfo/makeinfo.c:426
+msgid ""
+"Input file options:\n"
+" --commands-in-node-names allow @ commands in node names.\n"
+" -D VAR define the variable VAR, as with @set.\n"
+" -I DIR append DIR to the @include search path.\n"
+" -P DIR prepend DIR to the @include search path.\n"
+" -U VAR undefine the variable VAR, as with @clear.\n"
+msgstr ""
+"Girdi dosyasý seçenekleri:\n"
+" --commands-in-node-names düðüm adlarýnda @ komutlarýna izin verir.\n"
+" -D VAR VAR deðiþkenini, @set ile olduðu gibi "
+"tanýmlar.\n"
+" -I DIR DIR'ý @include arama yolu sonuna ekler.\n"
+" -P DIR DIR'ý @include arama yolu baþýna ekler.\n"
+" -U VAR VAR deðiþkeninin tanýmýný, @clear ile "
+"olduðu gibi geri alýr.\n"
+
+#: makeinfo/makeinfo.c:435
+msgid ""
+"Conditional processing in input:\n"
+" --ifdocbook process @ifdocbook and @docbook even if\n"
+" not generating Docbook.\n"
+" --ifhtml process @ifhtml and @html even if not generating HTML.\n"
+" --ifinfo process @ifinfo even if not generating Info.\n"
+" --ifplaintext process @ifplaintext even if not generating plain text.\n"
+" --iftex process @iftex and @tex; implies --no-split.\n"
+" --ifxml process @ifxml and @xml.\n"
+" --no-ifdocbook do not process @ifdocbook and @docbook text.\n"
+" --no-ifhtml do not process @ifhtml and @html text.\n"
+" --no-ifinfo do not process @ifinfo text.\n"
+" --no-ifplaintext do not process @ifplaintext text.\n"
+" --no-iftex do not process @iftex and @tex text.\n"
+" --no-ifxml do not process @ifxml and @xml text.\n"
+"\n"
+" Also, for the --no-ifFORMAT options, do process @ifnotFORMAT text.\n"
+msgstr ""
+"Girdide koþullu iþlem:\n"
+" --ifdocbook Docbook oluþturulmuyorsa bile @ifdocbook\n"
+" ve @docbook'u iþler.\n"
+" --ifhtml HTML oluþturulmuyorsa bile @ifhtml ve @html'yi iþler.\n"
+" --ifinfo Info oluþturulmuyorsa bile @ifinfo'yu iþler.\n"
+" --ifplaintext Salt metin oluþturulmuyorsa bile @ifplaintext'i iþler.\n"
+" --iftex @iftex ve @tex iþler; --no-split anlamýna gelir.\n"
+" --ifxml @ifxml ve @xml'i iþler\n"
+" --no-ifdocbook @ifdocbook ve @docbook metnini iþlemez.\n"
+" --no-ifhtml @ifhtml ve @html metin iþlemez.\n"
+" --no-ifinfo @ifinfo metin iþlemez.\n"
+" --no-ifplaintext @ifplintext metin iþlemez.\n"
+" --no-iftex @iftex ve @tex metin iþlemez.\n"
+" --no-ifxml @ifxml ve @xml metin iþlemez.\n"
+"\n"
+" Ayrýca --no-ifFORMAT seçenekleri için ifnotFORMAT metnini iþler.\n"
+
+#: makeinfo/makeinfo.c:454
+msgid ""
+" The defaults for the @if... conditionals depend on the output format:\n"
+" if generating HTML, --ifhtml is on and the others are off;\n"
+" if generating Info, --ifinfo is on and the others are off;\n"
+" if generating plain text, --ifplaintext is on and the others are off;\n"
+" if generating XML, --ifxml is on and the others are off.\n"
+msgstr ""
+" @if... koþullularýnýn öntanýmlýlarý çýktý formatýna baðlýdýr:\n"
+" eðer HTML oluþturuluyorsa, --ifhtml açýk, diðerleri kapalýdýr;\n"
+" eðer Info oluþturuluyorsa, --ifinfo açýk, diðerleri kapalýdýr;\n"
+" eðer salt metin oluþturuluyorsa, --ifplaintext açýk, diðerleri kapalýdýr;\n"
+" eðer XML oluþturuluyorsa, --ifxml açýk, deiðerleri kapalýdýr.\n"
+
+#: makeinfo/makeinfo.c:462
+msgid ""
+"Examples:\n"
+" makeinfo foo.texi write Info to foo's @setfilename\n"
+" makeinfo --html foo.texi write HTML to @setfilename\n"
+" makeinfo --xml foo.texi write Texinfo XML to @setfilename\n"
+" makeinfo --docbook foo.texi write DocBook XML to @setfilename\n"
+" makeinfo --no-headers foo.texi write plain text to standard "
+"output\n"
+"\n"
+" makeinfo --html --no-headers foo.texi write html without node lines, "
+"menus\n"
+" makeinfo --number-sections foo.texi write Info with numbered sections\n"
+" makeinfo --no-split foo.texi write one Info file however big\n"
+msgstr ""
+"Örnekler:\n"
+" makeinfo foo.texi foo'nun @setfilename'ine Info yazar\n"
+" makeinfo --html foo.texi @setfilename'e HTML yazar\n"
+" makeinfo --xml foo.texi @setfilename'e XML yazar\n"
+" makeinfo --docbook foo.texi @setfilename'e DocBook XML yazar\n"
+" makeinfo --no-headers foo.texi standart çýktýya salt metin yazar\n"
+"\n"
+" makeinfo --html --no-headres foo.texi düðüm çizgisiz, menüsüz html yazar\n"
+" makeinfo --number-sections foo.texi numaralanmýþ kýsýmlarý olan Info "
+"yazar\n"
+" makeinfo --no-split foo.texi ne büyüklükte olursa olsun tek Info "
+"dosyasý yazar\n"
+
+#: makeinfo/makeinfo.c:622
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr "%s: Tanýnamayan TEXINFO_OUTPUT_FORMAT deðeri `%s' yok sayýlýyor.\n"
+
+#: makeinfo/makeinfo.c:670 makeinfo/makeinfo.c:696 makeinfo/makeinfo.c:720
+#: makeinfo/makeinfo.c:780
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr "%1$s: %2$s arg sayýsal olmalýdýr, `%3$s' deðil.\n"
+
+#: makeinfo/makeinfo.c:683
+#, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "%s:makro geniþleme çýktýsý `%s' açýlamadý"
+
+#: makeinfo/makeinfo.c:688
+#, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "%s: ikinci makro geniþleme çýktýsý yok sayýlýyor `%s'.\n"
+
+#: makeinfo/makeinfo.c:733
+#, c-format
+msgid "%s: could not open internal links output `%s'"
+msgstr "%s: iç linkler çýktýsý açýlamadý `%s'"
+
+#: makeinfo/makeinfo.c:738
+#, c-format
+msgid "%s: ignoring second internal links output `%s'.\n"
+msgstr "%s: ikinci iç linkler çýktýsý yok sayýlýyor `%s'.\n"
+
+#: makeinfo/makeinfo.c:751
+#, c-format
+msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
+msgstr ""
+"%1$s: --paragraph-indent arg. sayýsal/`none'/`asis' olmalýdýr, `%2$s' "
+"deðil.\n"
+
+#: makeinfo/makeinfo.c:769
+#, c-format
+msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
+msgstr ""
+"%1$s: --footnote-style arg. `separate' ya da `end' olmalýdýr, `%2$s' deðil.\n"
+
+#: makeinfo/makeinfo.c:844
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: dosya argümaný eksik.\n"
+
+#: makeinfo/makeinfo.c:1041 makeinfo/makeinfo.c:4166
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr "Çok satýrlý komut %c%s uygunsuz kullanýldý"
+
+#: makeinfo/makeinfo.c:1044
+#, c-format
+msgid "Expected `%s'"
+msgstr "`%s' gerekir"
+
+#: makeinfo/makeinfo.c:1521
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "`%1$s' dizini oluþturulamýyor: %2$s"
+
+#: makeinfo/makeinfo.c:1567
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "`%2$s' içinde `%1$s' yok"
+
+#: makeinfo/makeinfo.c:1647
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr ""
+"%s: Makro geniþlemesini, Info çýktýsý da oraya gittiðinden, stdout'a "
+"atlatýyor.\n"
+
+#: makeinfo/makeinfo.c:1677
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "`%3$s''den %1$s dosya `%2$s' yapýlýyor.\n"
+
+#: makeinfo/makeinfo.c:1744
+#, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%1$s: Makro çýktý dosyasý `%2$s' hatalardan dolayý siliniyor; korumak için --"
+"force kullanýnýz.\n"
+
+#: makeinfo/makeinfo.c:1799
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%1$s: Çýktý dosyasý `%2$s' hatalardan dolayý siliniyor; korumak için --force "
+"kullanýnýz.\n"
+
+#: makeinfo/makeinfo.c:1818
+#, c-format
+msgid ""
+"%s: Removing internal links output file `%s' due to errors; use --force to "
+"preserve.\n"
+msgstr ""
+"%s: Ýç linkler çýktý dosyasý `%s' hatalardan dolayý siliniyor; korumak için "
+"--force kullanýnýz.\n"
+
+#: makeinfo/makeinfo.c:2113
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "Bilinmeyen komut `%s'"
+
+#: makeinfo/makeinfo.c:2135
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr "@%s'e argüman olarak bir komut vermek için {} kullanýn"
+
+#: makeinfo/makeinfo.c:2394
+#, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s küme parantezi bekledi"
+
+#: makeinfo/makeinfo.c:2407
+msgid "Unmatched }"
+msgstr "Eþleþmemiþ }"
+
+#: makeinfo/makeinfo.c:2455
+msgid "NO_NAME!"
+msgstr "ÝSÝMSÝZ!"
+
+#: makeinfo/makeinfo.c:2476
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s eksik kapama }"
+
+#: makeinfo/makeinfo.c:3482
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "@image dosyasý `%1$s' (HTML için) okunamýyor: %2$s"
+
+#: makeinfo/makeinfo.c:3488
+#, c-format
+msgid "No such file `%s'"
+msgstr "`%s' adýnda dosya yok"
+
+#: makeinfo/makeinfo.c:3624
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "@image dosyasý `%1$s' (metin için) okunamýyor: %2$s"
+
+#: makeinfo/makeinfo.c:3633
+msgid "@image missing filename argument"
+msgstr "@image eksik dosyaadý argümaný"
+
+#: makeinfo/makeinfo.c:3851
+#, c-format
+msgid "undefined flag: %s"
+msgstr "tanýmlanmamýþ bayrak: %s"
+
+#: makeinfo/makeinfo.c:3852
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "(`%s' için deðer yok)"
+
+#: makeinfo/makeinfo.c:3904
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s bir isim gerektirir"
+
+#: makeinfo/makeinfo.c:4010
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "Eþleþen @end %s'den önce dosya sonuna ulaþýldý"
+
+#: makeinfo/makeinfo.c:4258
+#, c-format
+msgid "`%.40s...' is too long for expansion; not expanded"
+msgstr "`%.40s...' geniþleme için çok uzun; geniþletilmedi"
+
+#: makeinfo/multi.c:116
+msgid "Missing } in @multitable template"
+msgstr "@multitable þablonunda eksik }"
+
+#: makeinfo/multi.c:260
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "@multitable'dan sonraki baþýboþ metin `%s' yoksayýlýyor"
+
+#: makeinfo/multi.c:400
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "Çok-tablolu öðede, çok fazla sütun (maks %d)"
+
+#: makeinfo/multi.c:563
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "[beklenmeyen] çok-tabloluda sütun #%d seçilemiyor"
+
+#: makeinfo/multi.c:592
+msgid "ignoring @tab outside of multitable"
+msgstr "çok-tablolunun dýþýndaki @tab yoksayýlýyor"
+
+#: makeinfo/multi.c:640
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "**Son satýrdan çok-sütunlu çýktý:\n"
+
+#: makeinfo/multi.c:643
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* sütun #%d: çýktý = %s\n"
+
+#: makeinfo/node.c:279
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "Düðüm `%s' daha önce satýr %d'de tanýmlandý"
+
+#: makeinfo/node.c:647
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "Düðüm %s biçimleniyor...\n"
+
+#: makeinfo/node.c:714
+#, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr "Düðüm `%s' bir bölümleme komutu gerektirir (ör: %c%s)"
+
+#: makeinfo/node.c:878
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "`%c%s' komutu için bir düðüm adý belirtilmedi"
+
+#: makeinfo/node.c:919 makeinfo/node.c:1163
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr "Çýpa `%1$s' ve düðüm `%2$s' ayný dosya adýna yönlendiriyor"
+
+#: makeinfo/node.c:922
+msgid "This @anchor command ignored; references to it will not work"
+msgstr "Bu @anchor komutu yoksayýldý; buraya yönelik baþvurular çalýþmayacak"
+
+#: makeinfo/node.c:924 makeinfo/node.c:1166
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr "Bu çýpayý yeniden adlandýrýn ya da `--no-split' seçeneðini kullanýn"
+
+#: makeinfo/node.c:954
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr "Bölünmüþ-HTML dosyasýnýn sonunda beklenmeyen dizge `%s'"
+
+#: makeinfo/node.c:1160
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr "`%1$s' ve `%2$s' çýpalarý ayný dosya adýna yönlendiriyor"
+
+#: makeinfo/node.c:1165
+msgid "@anchor command ignored; references to it will not work"
+msgstr "@anchor komutu yoksayýldý; buraya yönelik baþvurular çalýþmayacak"
+
+#: makeinfo/node.c:1362
+#, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr "%s baþvuru mevcut olmayan düðüme `%s' (yanlýþ bölümleme nedeniyle?)"
+
+#: makeinfo/node.c:1462
+#, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr ""
+"Düðüm `%s''in sonraki alaný þuraya iþaret etmiyor (yanlýþ bölümleme "
+"nedeniyle?)"
+
+#: makeinfo/node.c:1465
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "Bu düðüm (%s) hatalý Önceki'ne sahip"
+
+#: makeinfo/node.c:1520
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "Düðüm `%s''in önceki alaný þuraya iþaret etmiyor"
+
+#: makeinfo/node.c:1524
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "Bu düðüm (%s) hatalý Sonraki'ne sahip"
+
+#: makeinfo/node.c:1536
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr "`%s''in Yukarý alaný yok (yanlýþ bölümleme nedeniyle?)"
+
+#: makeinfo/node.c:1605
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr ""
+"Düðüm `%s', Yukarý hedefi olmasýna karþýn, `%s' için eksik menü öðesi "
+"içeriyor"
+
+#: makeinfo/node.c:1637
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "baþvurulmamýþ düðüm `%s'"
+
+#: makeinfo/node.c:1727
+#, c-format
+msgid "Removing %s\n"
+msgstr "%s siliniyor\n"
+
+#: makeinfo/node.c:1731
+#, c-format
+msgid "Can't remove file `%s': %s"
+msgstr "`%s' dosyasý silinemiyor: %s"
+
+#: makeinfo/sectioning.c:122
+#, c-format
+msgid "Appendix %c"
+msgstr "Ek %c "
+
+#: makeinfo/sectioning.c:467
+#, c-format
+msgid "Internal error (search_sectioning) `%s'!"
+msgstr "Dahili hata (search_sectioning) `%s'!"
+
+#: makeinfo/sectioning.c:563
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "Dahili hata (search_sectioning) \"%s\"!"
+
+#: makeinfo/sectioning.c:624
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "%c%s kullanýmdan kalkmýþ; yerine %c%s kullanýn"
+
+#: makeinfo/sectioning.c:640
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "%cüst'lü düðüm bir bölüm olarak zaten var"
+
+#: makeinfo/sectioning.c:648
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "Ýþte %cüst düðüm"
+
+#: makeinfo/sectioning.c:664
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "%cüst, %cdüðümden önce kullanýldý, %s'e öntanýmlanýyor"
+
+#: makeinfo/xml.c:1669
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "@image dosyasý `%1$s' okunamýyor: %2$s"
+
+#: makeinfo/xml.c:2014
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr "@multitable'ýn son öðesi @headitem geçersiz Docbook belgeleri üretiyor"
+
+#: makeinfo/xml.c:2150
+msgid "of"
+msgstr "kapalý"
+
+#: makeinfo/xml.c:2155
+msgid "on"
+msgstr "açýk"
+
+#: makeinfo/xref.c:127
+msgid "First argument to cross-reference may not be empty"
+msgstr "Çapraz baþvuru kurulacak ilk argüman boþ olmayabilir"
+
+#: makeinfo/xref.c:252
+#, c-format
+msgid "Empty file name for HTML cross reference in `%s'"
+msgstr "`%s' deHTML çapraz baþvurusu için boþ dosya adý"
+
+#: makeinfo/xref.c:387
+msgid "End of file reached while looking for `.' or `,'"
+msgstr "`.' ya da `,'ararken dosya sonuna ulaþýldý"
+
+#: makeinfo/xref.c:390
+#, c-format
+msgid "`.' or `,' must follow @%s, not `%c'"
+msgstr "`.' ya da `,' @%s'i izlemelidir, `%c'yi deðil"
+
+#: makeinfo/xref.c:392
+msgid "for cross-references in parentheses, use @pxref"
+msgstr "parantez içindeki çapraz baþvurular için @pxref kullanýnýz"
+
+#: makeinfo/xref.c:435
+msgid "First argument to @inforef may not be empty"
+msgstr "@inforef'e ilk argüman boþ olmayabilir"
+
+#: util/texindex.c:223
+msgid "display this help and exit"
+msgstr "bu yardýmý görüntüler ve çýkar"
+
+#: util/texindex.c:225
+msgid "send output to FILE"
+msgstr "çýktýyý DOSYA'ya gönderir"
+
+#: util/texindex.c:227
+msgid "display version information and exit"
+msgstr "sürüm bilgisini görüntüler ve çýkar"
+
+#: util/texindex.c:237
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "Kullaným: %s [SEÇENEK]... DOSYA...\n"
+
+#: util/texindex.c:238
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr "Her TeX çýktý DOSYAsý için sýralanmýþ bir indeks oluþturur.\n"
+
+#: util/texindex.c:241
+#, c-format
+msgid "Usually FILE... is specified as `foo.%c%c' for a document `foo.texi'.\n"
+msgstr ""
+"Genellikle DOSYA... bir `foo.texi' belgesi için `foo.%c%c' olarak "
+"belirtilir.\n"
+
+#: util/texindex.c:243
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Seçenekler:\n"
+
+#: util/texindex.c:743
+#, c-format
+msgid "failure reopening %s"
+msgstr "%s'i yeniden açmada hata"
+
+#: util/texindex.c:758 util/texindex.c:786
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: bir texinfo indeks dosyasý deðil"
+
+#: util/texindex.c:993
+#, c-format
+msgid "No page number in %s"
+msgstr "%s'de sayfa numarasý yok"
+
+#: util/texindex.c:1066
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr "%s girdisi, ikincil isimli bir girdiyi takip ediyor"
diff --git a/po/vi.gmo b/po/vi.gmo
new file mode 100644
index 0000000..605ece4
--- /dev/null
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
new file mode 100644
index 0000000..041e399
--- /dev/null
+++ b/po/vi.po
@@ -0,0 +1,3252 @@
+# Vietnamese translation for TexInfo.
+# Copyright © 2008 Free Software Foundation, Inc.
+# This file is distributed under the same license as the texinfo package.
+# Clytie Siddall <clytie@riverland.net.au>, 2006-2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo 4.12.94\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2008-09-18 20:38+0200\n"
+"PO-Revision-Date: 2008-09-08 22:02+0930\n"
+"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
+"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: LocFactoryEditor 1.7b3\n"
+
+#: gnulib/lib/error.c:125
+msgid "Unknown system error"
+msgstr "Lỗi hệ thống không rõ"
+
+#: gnulib/lib/getopt.c:526 gnulib/lib/getopt.c:542
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: tùy chá»n « %s » là mÆ¡ hồ\n"
+
+#: gnulib/lib/getopt.c:575 gnulib/lib/getopt.c:579
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: tùy chá»n « --%s » không cho phép đối số\n"
+
+#: gnulib/lib/getopt.c:588 gnulib/lib/getopt.c:593
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: tùy chá»n « %c%s » không cho phép đối số\n"
+
+#: gnulib/lib/getopt.c:636 gnulib/lib/getopt.c:655 gnulib/lib/getopt.c:971
+#: gnulib/lib/getopt.c:990
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: tùy chá»n « %s » cần đến đối số\n"
+
+#: gnulib/lib/getopt.c:693 gnulib/lib/getopt.c:696
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: không nhận ra tùy chá»n « --%s »\n"
+
+#: gnulib/lib/getopt.c:704 gnulib/lib/getopt.c:707
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: không nhận ra tùy chá»n « %c%s »\n"
+
+#: gnulib/lib/getopt.c:759 gnulib/lib/getopt.c:762
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: không cho phép tùy chá»n « -- %c »\n"
+
+#: gnulib/lib/getopt.c:768 gnulib/lib/getopt.c:771
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: tùy chá»n không hợp lệ « -- %c »\n"
+
+#: gnulib/lib/getopt.c:823 gnulib/lib/getopt.c:839 gnulib/lib/getopt.c:1043
+#: gnulib/lib/getopt.c:1061
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: tùy chá»n cần đến đối số « -- %c »\n"
+
+#: gnulib/lib/getopt.c:892 gnulib/lib/getopt.c:908
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: tùy chá»n « -W %s » là mÆ¡ hồ\n"
+
+#: gnulib/lib/getopt.c:932 gnulib/lib/getopt.c:950
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: tùy chá»n « -W %s » không cho phép đối số\n"
+
+#: gnulib/lib/xalloc-die.c:34 gnulib/lib/xsetenv.c:37
+#, c-format
+msgid "memory exhausted"
+msgstr "hết bộ nhớ hoàn toàn"
+
+#: info/echo-area.c:283 info/session.c:966
+msgid "Move forward a character"
+msgstr "Tiếp một ký tự"
+
+#: info/echo-area.c:295 info/session.c:993
+msgid "Move backward a character"
+msgstr "Lùi một ký tự"
+
+#: info/echo-area.c:307
+msgid "Move to the start of this line"
+msgstr "VỠđầu dòng này"
+
+#: info/echo-area.c:312
+msgid "Move to the end of this line"
+msgstr "Tới cuối dòng này"
+
+#: info/echo-area.c:320 info/session.c:1025
+msgid "Move forward a word"
+msgstr "Tiếp một từ"
+
+#: info/echo-area.c:360 info/session.c:1049
+msgid "Move backward a word"
+msgstr "Lùi một từ"
+
+#: info/echo-area.c:400
+msgid "Delete the character under the cursor"
+msgstr "Xóa ký tá»± dÆ°á»›i con trá»"
+
+#: info/echo-area.c:430
+msgid "Delete the character behind the cursor"
+msgstr "Xóa ký tá»± ở sau con trá»"
+
+#: info/echo-area.c:451
+msgid "Cancel or quit operation"
+msgstr "Thao tác thôi hay thoát"
+
+#: info/echo-area.c:466
+msgid "Accept (or force completion of) this line"
+msgstr "Chấp nhận (hoặc buộc kết thúc) dòng này"
+
+#: info/echo-area.c:471
+msgid "Insert next character verbatim"
+msgstr "Chèn ký tự kế tiếp đúng nguyên văn"
+
+#: info/echo-area.c:479
+msgid "Insert this character"
+msgstr "Chèn ký tự này"
+
+#: info/echo-area.c:498
+msgid "Insert a TAB character"
+msgstr "Chèn ký tự TAB"
+
+#: info/echo-area.c:505
+msgid "Transpose characters at point"
+msgstr "Äổi chá»— hai ký tá»± tại Ä‘iểm"
+
+#: info/echo-area.c:556
+msgid "Yank back the contents of the last kill"
+msgstr "Lấy lại nội dung của thao tác giết cuối cùng"
+
+#: info/echo-area.c:563
+msgid "Kill ring is empty"
+msgstr "Vòng giết rỗng"
+
+#: info/echo-area.c:576
+msgid "Yank back a previous kill"
+msgstr "Lấy lại một thao tác giết trước"
+
+#: info/echo-area.c:609
+msgid "Kill to the end of the line"
+msgstr "Giết đến cuối dòng"
+
+#: info/echo-area.c:622
+msgid "Kill to the beginning of the line"
+msgstr "Giết vỠđầu dòng"
+
+#: info/echo-area.c:634
+msgid "Kill the word following the cursor"
+msgstr "Giết từ nằm sau con trá»"
+
+#: info/echo-area.c:654
+msgid "Kill the word preceding the cursor"
+msgstr "Giết từ nằm trÆ°á»›c con trá»"
+
+#: info/echo-area.c:870 info/echo-area.c:926
+msgid "No completions"
+msgstr "Không có sự gõ xong"
+
+#: info/echo-area.c:872
+msgid "Not complete"
+msgstr "ChÆ°a xong"
+
+#: info/echo-area.c:913
+msgid "List possible completions"
+msgstr "Liệt kê các sự gõ xong có thể"
+
+#: info/echo-area.c:930
+msgid "Sole completion"
+msgstr "Sự gõ xong duy nhất"
+
+#: info/echo-area.c:939
+msgid "One completion:\n"
+msgstr "Một sự gõ xong:\n"
+
+#: info/echo-area.c:940
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d sự gõ xong:\n"
+
+#: info/echo-area.c:1087
+msgid "Insert completion"
+msgstr "Chèn sự gõ xong"
+
+#: info/echo-area.c:1222
+msgid "Building completions..."
+msgstr "Äang xây dá»±ng các sá»± gõ xong..."
+
+#: info/echo-area.c:1342
+msgid "Scroll the completions window"
+msgstr "Cuộn cửa sổ gõ xong"
+
+#: info/footnotes.c:212
+msgid "Footnotes could not be displayed"
+msgstr "Không thể hiển thị cước chú"
+
+#: info/footnotes.c:238
+msgid "Show the footnotes associated with this node in another window"
+msgstr ""
+"Hiển thị các cước chú liên quan đến nút thông tin này trong cửa sổ khác"
+
+#: info/footnotes.h:26
+msgid "---------- Footnotes ----------"
+msgstr "â”â”â”CÆ°á»›c chúâ”â”â”"
+
+#: info/indices.c:171
+msgid "Look up a string in the index for this file"
+msgstr "Tra tìm chuỗi trong chỉ mục cho tập tin này"
+
+#: info/indices.c:198
+msgid "Finding index entries..."
+msgstr "Äang tìm mục nhập chỉ mục..."
+
+#: info/indices.c:206
+msgid "No indices found."
+msgstr "Không tìm thấy chỉ mục."
+
+#: info/indices.c:216
+msgid "Index entry: "
+msgstr "Mục nhập chỉ mục: "
+
+#: info/indices.c:324
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr ""
+"Tới mục chỉ mục khớp kế tiếp từ lệnh «[index-search]» (tìm kiếm chỉ mục) cuối "
+"cùng."
+
+#: info/indices.c:334
+msgid "No previous index search string."
+msgstr "Không có chuỗi tìm kiếm chỉ mục trước"
+
+#: info/indices.c:341
+msgid "No index entries."
+msgstr "Không có gì trong chỉ mục."
+
+#: info/indices.c:374
+#, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "Không cỠgì trong chỉ mục %s chứa « %s »."
+
+#: info/indices.c:375
+msgid "more "
+msgstr "thêm "
+
+#: info/indices.c:385
+msgid "CAN'T SEE THIS"
+msgstr "KHÔNG THỂ THẤY ÄIỀU NÀY"
+
+#: info/indices.c:421
+#, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr ""
+"Tìm thấy « %s » trong %s. (« \\[next-index-match] » thá»­ tìm Ä‘iá»u kế tiếp.)"
+
+# Type: text
+# Description
+#: info/indices.c:549
+#, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "Äang quét các chỉ mục của « %s »..."
+
+#: info/indices.c:604
+#, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr "Không có tập tin thông tin sẵn sàng chứa « %s » trong chỉ mục ."
+
+#: info/indices.c:630
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr ""
+"Grovel má»i chỉ mục của tập tin thông tin (info) tìm chuá»—i và xây dá»±ng trình "
+"Ä‘Æ¡n"
+
+#: info/indices.c:634
+msgid "Index apropos: "
+msgstr "Chỉ mục apropos: "
+
+#: info/indices.c:662
+#, c-format
+msgid ""
+"\n"
+"* Menu: Nodes whose indices contain `%s':\n"
+msgstr ""
+"\n"
+"* Trình đơn: nút có chỉ mục chứa « %s »:\n"
+
+#: info/info.c:275 info/infokey.c:899
+#, c-format
+msgid "Try --help for more information.\n"
+msgstr "Hãy thử lệnh trợ giúp « --help » để xem thông tin thêm.\n"
+
+#: info/info.c:294 info/infokey.c:145 install-info/install-info.c:2101
+#: makeinfo/makeinfo.c:802 util/texindex.c:295
+#, c-format
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"Tác quyá»n © %s Tổ chức Phần má»m Tá»± do.\n"
+"Giấy phép GPL pb3+: Giấy phép Công cộng GNU phiên bản 3 và sau:\n"
+"<http://gnu.org/licenses/gpl.html>\n"
+"Äây là phần má»m tá»± do : bạn có quyá»n thay đổi và phát hành lại nó.\n"
+"KHÔNG CÓ BẢO HÀNH GÃŒ CẢ, vá»›i Ä‘iá»u kiện được pháp luật cho phép\n"
+
+#: info/info.c:506
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "không tìm thấy gì trong chỉ mục cho « %s »\n"
+
+#: info/info.c:600
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [MENU-ITEM...]\n"
+"\n"
+"Read documentation in Info format.\n"
+msgstr ""
+"Sá»­ dụng: %s [TÙY_CHỌN]... [MỤC_TRÃŒNH_ÄÆ N...]\n"
+"\n"
+"Äá»c tài liệu hÆ°á»›ng dẫn theo định dạng Info.\n"
+
+#: info/info.c:606
+msgid ""
+"Options:\n"
+" -k, --apropos=STRING look up STRING in all indices of all "
+"manuals.\n"
+" -d, --directory=DIR add DIR to INFOPATH.\n"
+" --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+" -f, --file=FILENAME specify Info file to visit."
+msgstr ""
+"Tùy chá»n:\n"
+" -k, --apropos=CHUá»–I tra cứu chuá»—i này trong má»i chỉ mục của má»i sổ "
+"tay.\n"
+" -d, --directory=THƯ_MỤC thêm thÆ° mục này vào Ä‘Æ°á»ng dẫn INFOPATH.\n"
+" --dribble=TẬP_TIN lưu các cú bấm phím vào tập tin này.\n"
+" -f, --file=TẬP_TIN ghi rõ tập tin Info cần thăm."
+
+#: info/info.c:613
+msgid ""
+" -h, --help display this help and exit.\n"
+" --index-search=STRING go to node pointed by index entry STRING.\n"
+" -n, --node=NODENAME specify nodes in first visited Info file.\n"
+" -o, --output=FILENAME output selected nodes to FILENAME."
+msgstr ""
+" -h, --help hiển thị trợ giúp này rồi thoát.\n"
+" --index-search=CHUỖI đi tới nút được ngụ ý bởi chuỗi chỉ mục này.\n"
+" -n, --node=TÊN_NÚT ghi rõ nút trong tập tin Info được thăm đầu "
+"tiên.\n"
+" -o, --output=TẬP_TIN xuất các nút đã chá»n vào tập tin này."
+
+#: info/info.c:619
+msgid ""
+" -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+" --no-raw-escapes output escapes as literal text.\n"
+" --restore=FILENAME read initial keystrokes from FILENAME.\n"
+" -O, --show-options, --usage go to command-line options node."
+msgstr ""
+" -R, --raw-escapes xuất các ký tự thoát ANSI « thô » (mặc định)\n"
+" --no-raw-escapes xuất các ký tự thoát dạng văn bản nghĩa chữ.\n"
+" --restore=TẬP_TIN Ä‘á»c các cú bấm phím đầu tiên từ tập tin này.\n"
+" -O, --show-options, --usage \tÄ‘i tá»›i nút chứa các tùy chá»n dòng lệnh."
+
+#: info/info.c:626
+msgid " -b, --speech-friendly be friendly to speech synthesizers."
+msgstr ""
+" -b, --speech-friendly thân thiện với thiết bị tổng hợp tiếng nói"
+
+#: info/info.c:630
+msgid ""
+" --subnodes recursively output menu items.\n"
+" --vi-keys use vi-like and less-like key bindings.\n"
+" --version display version information and exit.\n"
+" -w, --where, --location print physical location of Info file."
+msgstr ""
+" --subnodes xuất đệ quy các mục trình đơn.\n"
+" --vi-keys dùng các tổ hợp phím kiểu Vi và Less.\n"
+" --version hiển thị thông tin phiên bản rồi thoát\n"
+" -w, --where, --location in vị trí vật lý của tập tin Info."
+
+#: info/info.c:636
+msgid ""
+"\n"
+"The first non-option argument, if present, is the menu entry to start from;\n"
+"it is searched for in all `dir' files along INFOPATH.\n"
+"If it is not present, info merges all `dir' files and shows the result.\n"
+"Any remaining arguments are treated as the names of menu\n"
+"items relative to the initial node visited."
+msgstr ""
+"\n"
+"Äối số đầu tiên không phải tùy chá»n, nếu có, là mục trình Ä‘Æ¡n từ đó cần bắt "
+"đầu ;\n"
+"có tìm nó trong má»i tập tin « dir » (thÆ° mục) trên Ä‘Æ°á»ng dẫn INFOPATH.\n"
+"Không có thì Info trộn tất cả các tập tin « dir » rồi hiển thị kết quả.\n"
+"Bất cứ đối số còn lại nào được xử lý như tên của mục trình đơn\n"
+"tương đối với nút đầu tiên được thăm."
+
+#: info/info.c:643
+msgid ""
+"\n"
+"For a summary of key bindings, type h within Info."
+msgstr ""
+"\n"
+"Äể xem bản tóm tắt các tổ hợp phím, hãy gõ « h » bên trong Info."
+
+#: info/info.c:646
+msgid ""
+"\n"
+"Examples:\n"
+" info show top-level dir menu\n"
+" info info show the general manual for Info readers\n"
+" info info-stnd show the manual specific to this Info program\n"
+" info emacs start at emacs node from top-level dir\n"
+" info emacs buffers start at buffers node within emacs manual\n"
+" info --show-options emacs start at node with emacs' command line options\n"
+" info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+" info -f ./foo.info show file ./foo.info, not searching dir"
+msgstr ""
+"\n"
+"Ví dụ :\n"
+" info hiển thị trình đơn thư mục cấp đầu\n"
+" info info\t\t\thiển thị sổ tay chung cho trình Ä‘á»c Info\n"
+" info info-stnd\t\thiển thị sổ tay đặc trưng cho trình Info này\n"
+" info emacs bắt đầu ở nút emacs từ thư mục cấp đầu\n"
+" info emacs buffers bắt đầu ở nút bộ đệm bên trong sổ tay emacs\n"
+" info --show-options emacs bắt đầu ở nút chứa các tùy chá»n dòng lệnh của "
+"emacs\n"
+" info --subnodes -o out.txt emacs đổ toàn bộ sổ tay vào tập tin « out.txt "
+"»\n"
+" info -f ./foo.info hiển thị tập tin « ./foo.info », không tìm kiếm "
+"thư mục"
+
+#: info/info.c:657 info/infokey.c:918 makeinfo/makeinfo.c:475
+#: util/texindex.c:259
+msgid ""
+"\n"
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+"Hãy thông báo lỗi cho <bug-texinfo@gnu.org>,\n"
+"và gá»­i câu há»i chung, thảo luận v.v. cho <help-texinfo@gnu.org>.\n"
+"Trang chủ texinfo: <http://www.gnu.org/software/texinfo/>."
+
+#: info/info.c:691
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "Không tìm thấy nút thông tin « %s »."
+
+#: info/info.c:692
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "Không tìm thấy nút thông tin « (%s)%s »."
+
+#: info/info.c:693
+msgid "Cannot find a window!"
+msgstr "Không tìm thấy cửa sổ."
+
+#: info/info.c:694
+msgid "Point doesn't appear within this window's node!"
+msgstr "Äiểm không xuất hiện bên trong cái nút thông tin của cá»­a sổ này."
+
+#: info/info.c:695
+msgid "Cannot delete the last window."
+msgstr "Không thể xóa cửa sổ cuối cùng."
+
+#: info/info.c:696
+msgid "No menu in this node."
+msgstr "Không có trình đơn trong nút thông tin này."
+
+#: info/info.c:697
+msgid "No footnotes in this node."
+msgstr "Không có cước chú trong nút thông tin này."
+
+#: info/info.c:698
+msgid "No cross references in this node."
+msgstr "Không có tham chiếu chéo trong nút thông tin này."
+
+#: info/info.c:699
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Không có con trỠ« %s » cho nút thông tin này."
+
+#: info/info.c:700
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "Không nhận ra lệnh Info « %c »: hãy thử lệnh « ? » để xem trợ giúp."
+
+#: info/info.c:701
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr "Thiết bị cuối kiểu « %s » không đủ khéo để chạy Info."
+
+#: info/info.c:702
+msgid "You are already at the last page of this node."
+msgstr "Bạn ở trang cuối cùng của nút thông tin này."
+
+#: info/info.c:703
+msgid "You are already at the first page of this node."
+msgstr "Bạn ở trang đầu tiên của nút thông tin này."
+
+#: info/info.c:704
+msgid "Only one window."
+msgstr "Chỉ một cửa sổ."
+
+#: info/info.c:705
+msgid "Resulting window would be too small."
+msgstr "Cá»­a sổ kết quả quá nhá»."
+
+#: info/info.c:706
+msgid "Not enough room for a help window, please delete a window."
+msgstr "Không đủ chỗ cho cửa sổ trợ giúp: hãy xóa một cửa sổ."
+
+#: info/infodoc.c:45
+msgid "Basic Info command keys\n"
+msgstr "Phím lệnh Info cơ bản\n"
+
+#: info/infodoc.c:47
+msgid "\\%-10[quit-help] Close this help window.\n"
+msgstr "\\%-10[quit-help] Äóng cá»­a sổ trợ giúp này.\n"
+
+#: info/infodoc.c:48
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] Thoát hoàn toàn khởi info (_thoát_).\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr ""
+"\\%-10[get-info-help-node] gá»i trợ lý hÆ°á»›ng dẫn Info.\n"
+"\t\t\t(_lấy nút trợ giúp Info_)\n"
+
+#: info/infodoc.c:51
+msgid "\\%-10[prev-line] Move up one line.\n"
+msgstr "\\%-10[prev-line] Äi lên má»™t dòng.\n"
+
+#: info/infodoc.c:52
+msgid "\\%-10[next-line] Move down one line.\n"
+msgstr "\\%-10[next-line] Äi xuống má»™t dòng.\n"
+
+#: info/infodoc.c:53
+msgid "\\%-10[scroll-backward] Scroll backward one screenful.\n"
+msgstr "\\%-10[scroll-backward] Cuộn lùi 1 màn hình.\n"
+
+#: info/infodoc.c:54
+msgid "\\%-10[scroll-forward] Scroll forward one screenful.\n"
+msgstr "\\%-10[scroll-forward] Cuộn tới 1 màn hình.\n"
+
+#: info/infodoc.c:55
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr "\\%-10[beginning-of-node] VỠđầu của nút này (_đầu của nút_).\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr "\\%-10[end-of-node] Tới cuối của nút này (_cuối của nút_).\n"
+
+#: info/infodoc.c:58
+msgid "\\%-10[move-to-next-xref] Skip to the next hypertext link.\n"
+msgstr "\\%-10[move-to-next-xref] Nhảy tới siêu liên kết kế tiếp.\n"
+
+#: info/infodoc.c:59
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under the "
+"cursor.\n"
+msgstr ""
+"\\%-10[select-reference-this-line] Theo siêu liên kết nằm dÆ°á»›i con trá».\n"
+
+#: info/infodoc.c:60
+msgid "\\%-10[history-node] Go back to the last node seen in this window.\n"
+msgstr ""
+"\\%-10[history-node] Trở vỠnút cuối cùng được xem trong cửa sổ này.\n"
+
+#: info/infodoc.c:62
+msgid "\\%-10[global-prev-node] Go to the previous node in the document.\n"
+msgstr "\\%-10[global-prev-node] Äi vá» nút trÆ°á»›c trong tài liệu.\n"
+
+#: info/infodoc.c:63
+msgid "\\%-10[global-next-node] Go to the next node in the document.\n"
+msgstr "\\%-10[global-next-node] Äi tá»›i nút kế tiếp trong tài liệu.\n"
+
+#: info/infodoc.c:64
+msgid "\\%-10[prev-node] Go to the previous node on this level.\n"
+msgstr "\\%-10[prev-node] Äi vá» nút trÆ°á»›c ở cấp này.\n"
+
+#: info/infodoc.c:65
+msgid "\\%-10[next-node] Go to the next node on this level.\n"
+msgstr "\\%-10[next-node] Äi tá»›i nút kế tiếp ở cấp này.\n"
+
+#: info/infodoc.c:66
+msgid "\\%-10[up-node] Go up one level.\n"
+msgstr "\\%-10[up-node] Äi lên má»™t cấp.\n"
+
+#: info/infodoc.c:67
+msgid "\\%-10[top-node] Go to the top node of this document.\n"
+msgstr "\\%-10[top-node] Äi tá»›i nút đầu của tài liệu này.\n"
+
+#: info/infodoc.c:68
+msgid "\\%-10[dir-node] Go to the main `directory' node.\n"
+msgstr "\\%-10[dir-node] Äi tá»›i nút « directory » (thÆ° mục) chính.\n"
+
+#: info/infodoc.c:70
+msgid "1...9 Pick the first...ninth item in this node's menu.\n"
+msgstr ""
+"1...9 Chá»n cả mục thứ nhất đến thứ chín trong trình Ä‘Æ¡n của nút này.\n"
+
+#: info/infodoc.c:71
+msgid "\\%-10[last-menu-item] Pick the last item in this node's menu.\n"
+msgstr "\\%-10[last-menu-item] Chá»n mục cuối trong trình Ä‘Æ¡n của nút này.\n"
+
+#: info/infodoc.c:72
+msgid "\\%-10[menu-item] Pick a menu item specified by name.\n"
+msgstr "\\%-10[menu-item] Chá»n má»™t mục trình Ä‘Æ¡n xác định theo tên.\n"
+
+#: info/infodoc.c:73
+msgid "\\%-10[xref-item] Follow a cross reference specified by name.\n"
+msgstr "\\%-10[xref-item] Theo một tham chiếu chéo xác định theo tên.\n"
+
+#: info/infodoc.c:74
+msgid "\\%-10[goto-node] Go to a node specified by name.\n"
+msgstr "\\%-10[goto-node] Äi tá»›i má»™t nút xác định theo tên.\n"
+
+#: info/infodoc.c:76
+msgid "\\%-10[search] Search forward for a specified string.\n"
+msgstr "\\%-10[search] Äi tá»›i tìm má»™t chuá»—i đã ghi rõ.\n"
+
+#: info/infodoc.c:77
+msgid "\\%-10[search-previous] Search for previous occurrence.\n"
+msgstr "\\%-10[search-previous] Tìm lần gặp trước.\n"
+
+#: info/infodoc.c:78
+msgid "\\%-10[search-next] Search for next occurrence.\n"
+msgstr "\\%-10[search-next] Tìm lần gặp kế tiếp.\n"
+
+#: info/infodoc.c:79
+msgid ""
+"\\%-10[index-search] Search for a specified string in the index, and\n"
+" select the node referenced by the first entry found.\n"
+msgstr ""
+"\\%-10[index-search] Trong chỉ mục, tìm một chuỗi đã ghi rõ,\n"
+"và chá»n nút được tham chiếu bởi mục nhập đầu tiên được tìm.\n"
+
+#: info/infodoc.c:81
+msgid "\\%-10[abort-key] Cancel the current operation.\n"
+msgstr "\\%-10[abort-key] Hủy bỠthao tác đang chạy.\n"
+
+#: info/infodoc.c:89
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"Lệnh Cơ bản trong Cửa sổ Info\n"
+"â”â”â”â”â”â”â”â”â”â”â”â”â”\n"
+
+#: info/infodoc.c:92
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s Thoát khá»i trợ giúp này.\n"
+
+#: info/infodoc.c:93
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Thoát hoàn toàn Info.\n"
+
+#: info/infodoc.c:94
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Gá»i trợ lý hÆ°á»›ng dẫn Info.\n"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr " %-10s Tới nút « kế » của nút này.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr " %-10s VỠnút « lùi » của nút này.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s Chuyển « lên » từ nút này.\n"
+
+#: info/infodoc.c:101
+#, c-format
+msgid ""
+" %-10s Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+" %-10s Chá»n má»™t mục trình Ä‘Æ¡n xác định theo tên.\n"
+"Việc chá»n má»™t mục trình Ä‘Æ¡n thì gây ra chá»n má»™t nút khác.\n"
+
+#: info/infodoc.c:103
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr " %-10s Theo má»™t tham chiếu chéo. Äá»c tên tham chiếu.\n"
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr " %-10s Tới nút cuối hiển thị trong cửa sổ này.\n"
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr " %-10s Nhảy tới liên kết siêu văn bản kế tiếp bên trong nút này.\n"
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s Theo liên kết siêu văn bản nằm dÆ°á»›i con trá».\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr " %-10s Tới nút « thư mục ». Bằng « g (THƯ_MỤC) ».\n"
+
+#: info/infodoc.c:108
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr " %-10s Tá»›i nút Äầu. Bằng « g Trên ».\n"
+
+#: info/infodoc.c:110
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"Di chuyển bên trong nút thông tin:\n"
+"â”â”â”â”â”â”â”\n"
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s Cuá»™n tá»›i 1 trang.\n"
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s Cuộn lùi 1 trang.\n"
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s VỠđầu nút này.\n"
+
+#: info/infodoc.c:115
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s Tới cuối nút này.\n"
+
+#: info/infodoc.c:116
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s Cuộn tới 1 dòng.\n"
+
+#: info/infodoc.c:117
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s Cuộn lùi 1 dòng.\n"
+
+#: info/infodoc.c:119
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"Lệnh khác:\n"
+"â”â”â”â”\n"
+
+#: info/infodoc.c:121
+#, c-format
+msgid " %-10s Pick first...ninth item in node's menu.\n"
+msgstr " %-10s Chá»n cả mục thứ nhất đến thứ chín trong trình Ä‘Æ¡n của nút.\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s Chá»n mục cuối trong trình Ä‘Æ¡n của nút.\n"
+
+#: info/infodoc.c:125
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr ""
+" %-10s Tìm kiếm chuỗi đã xác định trong các mục chỉ mục\n"
+"\tcủa nút Info này, cÅ©ng chá»n nút tá»›i đó mục đầu đã tìm có chỉ.\n"
+
+#: info/infodoc.c:127
+#, c-format
+msgid ""
+" %-10s Move to node specified by name.\n"
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+" %-10s Äi tá»›i nút xác định theo tên.\n"
+"Bạn cũng có thể ghi rõ tên tập tin, v.d. « (TÊN_TẬP_TIN)TÊN_NÚT ».\n"
+
+#: info/infodoc.c:129
+#, c-format
+msgid ""
+" %-10s Search forward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+" %-10s Tìm kiếm tới chuỗi đã xác định trong các mục chỉ mục\n"
+"\tcủa nút Info này, cÅ©ng chá»n nút trong đó tìm mục tÆ°Æ¡ng ứng kế tiếp.\n"
+
+#: info/infodoc.c:131
+#, c-format
+msgid ""
+" %-10s Search backward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+" %-10s Äi ngược tìm má»™t chuá»—i đã ghi rõ,\n"
+"và chá»n nút ở đó gặp lần tìm kế tiếp.\n"
+
+#: info/infodoc.c:312
+msgid "The current search path is:\n"
+msgstr "ÄÆ°á»ng dẫn tìm kiếm hiện thá»i:\n"
+
+#: info/infodoc.c:316
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"Các lệnh sẵn sàng trong cửa sổ Info:\n"
+"\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"Các lệnh sẵn sàng trong vùng phản hồi:\n"
+"\n"
+
+#: info/infodoc.c:343
+#, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+"Theo đây có những lệnh có thể được gá»i chỉ bằng %s:\n"
+"\n"
+
+#: info/infodoc.c:347
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr "Theo đây có những lệnh không thể gá»i:\n"
+
+#: info/infodoc.c:477
+msgid "Display help message"
+msgstr "Hiển thị thông điệp trợ giúp"
+
+#: info/infodoc.c:495
+msgid "Visit Info node `(info)Help'"
+msgstr "Xem nút Info « (info)Help »"
+
+#: info/infodoc.c:633
+msgid "Print documentation for KEY"
+msgstr "In ra tài liệu hướng dẫn cho KHÓA"
+
+#: info/infodoc.c:645
+#, c-format
+msgid "Describe key: %s"
+msgstr "Diễn tả khoá: %s"
+
+#: info/infodoc.c:656
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "Chưa định nghĩa ESC %s."
+
+#: info/infodoc.c:672 info/infodoc.c:701
+#, c-format
+msgid "%s is undefined."
+msgstr "Chưa định nghĩa %s."
+
+#: info/infodoc.c:722
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s đã được định nghĩa thành %s."
+
+#: info/infodoc.c:1146
+msgid "Show what to type to execute a given command"
+msgstr "Hiển thị chuỗi cần gõ để thực hiện lệnh đã cho"
+
+#: info/infodoc.c:1150
+msgid "Where is command: "
+msgstr "Lệnh ở đâu : "
+
+#: info/infodoc.c:1172
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "« %s » không phải trên khoá nào"
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s có thể được gá»i chỉ bằng %s."
+
+#: info/infodoc.c:1183
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s có thể được gá»i bằng %s."
+
+#: info/infodoc.c:1188
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "Không có hàm tên « %s »"
+
+#: info/infodoc.c:96
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"Chá»n các nút khác:\n"
+"â”â”â”â”â”â”â”\n"
+
+#: info/infokey.c:170
+msgid "incorrect number of arguments"
+msgstr "có số đối số không đúng"
+
+#: info/infokey.c:201
+#, c-format
+msgid "cannot open input file `%s'"
+msgstr "không thể mở tập tin nhập vào « %s »"
+
+#: info/infokey.c:215
+#, c-format
+msgid "cannot create output file `%s'"
+msgstr "không thể tạo tập tin xuất « %s »"
+
+#: info/infokey.c:226
+#, c-format
+msgid "error writing to `%s'"
+msgstr "gặp lỗi khi ghi vào « %s »"
+
+#: info/infokey.c:232
+#, c-format
+msgid "error closing output file `%s'"
+msgstr "gặp lỗi khi đóng tập tin xuất « %s »"
+
+#: info/infokey.c:450
+msgid "key sequence too long"
+msgstr "chuỗi phím quá dài"
+
+#: info/infokey.c:529
+msgid "missing key sequence"
+msgstr "thiếu chuỗi phím"
+
+#: info/infokey.c:610
+msgid "NUL character (\\000) not permitted"
+msgstr "không cho phép ký tự vô giá trị (\\000)"
+
+#: info/infokey.c:641
+#, c-format
+msgid "NUL character (^%c) not permitted"
+msgstr "không cho phép ký tự vô giá trị (^%c)"
+
+#: info/infokey.c:665
+msgid "missing action name"
+msgstr "thiếu tên hành động"
+
+#: info/infokey.c:681 info/infokey.c:756
+msgid "section too long"
+msgstr "phần quá dài"
+
+#: info/infokey.c:688
+#, c-format
+msgid "unknown action `%s'"
+msgstr "hành động lạ « %s »"
+
+#: info/infokey.c:698
+msgid "action name too long"
+msgstr "tên hành động quá dài"
+
+#: info/infokey.c:712
+#, c-format
+msgid "extra characters following action `%s'"
+msgstr "có ký tự thêm nằm sau hành động « %s »"
+
+#: info/infokey.c:723
+msgid "missing variable name"
+msgstr "thiếu tên biến"
+
+#: info/infokey.c:733
+msgid "missing `=' immediately after variable name"
+msgstr "thiếu ký tự bằng « = » ngay sau tên biến"
+
+#: info/infokey.c:741
+msgid "variable name too long"
+msgstr "tên biến quá dài"
+
+#: info/infokey.c:765
+msgid "value too long"
+msgstr "giá trị quá dài"
+
+#: info/infokey.c:890
+#, c-format
+msgid "\"%s\", line %u: "
+msgstr "« %s », dòng %u: "
+
+#: info/infokey.c:906
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [INPUT-FILE]\n"
+"\n"
+"Compile infokey source file to infokey file. Reads INPUT-FILE (default\n"
+"$HOME/.infokey) and writes compiled key file to (by default) $HOME/.info.\n"
+"\n"
+"Options:\n"
+" --output FILE output to FILE instead of $HOME/.info\n"
+" --help display this help and exit.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"Cách sử dụng: %s [TÙY_CHỌN]... [TTN]\n"
+"\n"
+"[TTN\t\tTập Tin Nhập vào]\n"
+"\n"
+"Biên dịch tập tin mã nguồn infokey vào tập tin infokey. Äá»c tập tin nhập "
+"vào\n"
+"\t(mặc định là « $HOME/.infokey ») và ghi tập tin khoá đã biên dịch ra\n"
+"\t(theo mặc định) « $HOME/.info ».\n"
+"\n"
+"Tùy chá»n:\n"
+" --output TẬP_TIN \txuất ra tập tin này, thay cho « $HOME/.info »\n"
+" --help \t\thiển thị trợ giúp này rồi thoát.\n"
+" --version \t\thiển thị thông tin phiên bản rồi thoát.\n"
+
+#: info/infomap.c:955
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "Äang bá» qua tập tin infokey không hợp lệ « %s »: quá nhá»"
+
+#: info/infomap.c:958
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "Äang bá» qua tập tin infokey không hợp lệ « %s »: quá lá»›n"
+
+#: info/infomap.c:971
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "Gặp lá»—i khi Ä‘á»c tập tin infokey « %s»: Ä‘á»c ngắn"
+
+#: info/infomap.c:990
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+"Tập tin infokey « %s » không hợp lệ (số ma thuật sai): hãy chạy infokey để "
+"cập nhật nó"
+
+#: info/infomap.c:999
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr "Tập tin infokey « %s » của bạn quá cũ : hãy chạy infokey để cập nhật nó"
+
+#: info/infomap.c:1015
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+"Tập tin infokey « %s » không hợp lệ (độ dài phần sai): hãy chạy infokey để "
+"cập nhật nó"
+
+#: info/infomap.c:1036
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr ""
+"Tập tin infokey « %s » không hợp lệ (mã phần sai): hãy chạy infokey để cập "
+"nhật nó"
+
+#: info/infomap.c:1171
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr "Gặp dữ liệu sai trong tập tin infokey nên bỠqua một số tổ hợp phím"
+
+#: info/infomap.c:1221
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr ""
+"Gặp dữ liệu sai trong tập tin infokey nên bỠqua một số cách thiết lập « var »"
+
+#: info/m-x.c:68
+msgid "Read the name of an Info command and describe it"
+msgstr "Äá»c tên lệnh info và diá»…n tả nó"
+
+#: info/m-x.c:72
+msgid "Describe command: "
+msgstr "Diễn tả lệnh: "
+
+#: info/m-x.c:95
+msgid "Read a command name in the echo area and execute it"
+msgstr "Äá»c tên lệnh trong vùng phản hồi và thá»±c hiện nó"
+
+#: info/m-x.c:139
+msgid "Cannot execute an `echo-area' command here."
+msgstr "Không thể thực hiện lệnh « vùng phản hồi » ở đây."
+
+#: info/m-x.c:153
+#, c-format
+msgid "Undefined command: %s"
+msgstr "Lệnh chưa xác định: %s"
+
+#: info/m-x.c:159
+msgid "Set the height of the displayed window"
+msgstr "Lập độ cao của cửa sổ hiển thị"
+
+#: info/m-x.c:172
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Lập độ cao của màn hình thành (%d): "
+
+#: info/makedoc.c:166 info/makedoc.c:174
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+" Các tập tin mã nguồn đã grovel để tạo tập tin này bao gồm:\n"
+"\n"
+
+#: info/makedoc.c:556
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "Không thể thao tác tập tin %s.\n"
+
+#: info/nodemenu.c:30
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+"\n"
+"* Trình đơn:\n"
+" (Tập tin)Nút Dòng Cỡ Chứa tập tin\n"
+" â”â”â”â”â”\t\t\t\tâ”â”â”\tâ” â”â”â”â”â”"
+
+#: info/nodemenu.c:201
+msgid ""
+"Here is the menu of nodes you have recently visited.\n"
+"Select one from this menu, or use `\\[history-node]' in another window.\n"
+msgstr ""
+"Äây là trình Ä‘Æ¡n các nút bạn vừa xem.\n"
+"Hãy chá»n má»™t nút trong trình Ä‘Æ¡n này,\n"
+"hoặc dùng « \\[history-node] » (lược sử nút) trong cửa sổ khác.\n"
+
+#: info/nodemenu.c:223
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr "Tạo cá»­a sổ chứa trình Ä‘Æ¡n chứa các nút xem hiện thá»i"
+
+#: info/nodemenu.c:303
+msgid "Select a node which has been previously visited in a visible window"
+msgstr "Chá»n nút đã xem trÆ°á»›c, trong cá»­a sổ hiện rõ"
+
+#: info/nodemenu.c:316
+msgid "Select visited node: "
+msgstr "Chá»n nút đã xem: "
+
+#: info/nodemenu.c:336 info/session.c:2578
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "Tham chiếu đã biến mật. (%s)"
+
+#: info/search.c:166
+#, c-format
+msgid "regexp error: %s"
+msgstr "Lỗi biểu thức chính quy: %s"
+
+#: info/session.c:164
+#, c-format
+msgid ""
+"Welcome to Info version %s. Type \\[get-help-window] for help, \\[menu-item] "
+"for menu item."
+msgstr ""
+"Chúc mừng bạn dùng trình Info phiên bản %s. Hãy gõ :\n"
+"\t \\[get-help-window]\t\tđể xem trợ giúp,\n"
+"\t\\[menu-item] \t\t\tcho mục trình đơn."
+
+#: info/session.c:625
+msgid "Move down to the next line"
+msgstr "Tới dòng kế"
+
+#: info/session.c:661
+msgid "Move up to the previous line"
+msgstr "VỠdòng trước"
+
+#: info/session.c:931
+msgid "Move to the end of the line"
+msgstr "Tới cuối dòng"
+
+#: info/session.c:942
+msgid "Move to the start of the line"
+msgstr "VỠđầu dòng"
+
+#: info/session.c:1142
+msgid "Next"
+msgstr "Kế"
+
+#: info/session.c:1158 info/session.c:1283
+msgid "No more nodes within this document."
+msgstr "Không có nút nữa trong tài liệu này."
+
+#: info/session.c:1309
+msgid "No `Prev' for this node."
+msgstr "Không có « Lùi » cho nút này"
+
+#: info/session.c:1329
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr "Không có « Lùi » hay « Lên » cho nút này trong tài liệu này."
+
+#: info/session.c:1391
+msgid "Move forwards or down through node structure"
+msgstr "Chuyển tới hay xuống qua cấu trúc nút"
+
+#: info/session.c:1407
+msgid "Move backwards or up through node structure"
+msgstr "Chuyển lùi hay lên qua cấu trúc nút"
+
+#: info/session.c:1508
+msgid "Scroll forward in this window"
+msgstr "Cuộn tới trong cửa sổ này"
+
+#: info/session.c:1516
+msgid "Scroll forward in this window and set default window size"
+msgstr "Cuộn tới trong cửa sổ này và lập kích cỡ cửa sổ mặc định"
+
+#: info/session.c:1524
+msgid "Scroll forward in this window staying within node"
+msgstr "Cuộn tới trong cửa sổ này mà còn lại trong nút này"
+
+#: info/session.c:1532
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr ""
+"Cuộn tới trong cửa sổ này, mà còn lại trong nút này và lập kích cỡ cửa sổ "
+"mặc định"
+
+#: info/session.c:1540
+msgid "Scroll backward in this window"
+msgstr "Cuộn lùi trong cửa sổ này"
+
+#: info/session.c:1548
+msgid "Scroll backward in this window and set default window size"
+msgstr "Cuộn lùi trong cửa sổ này và lập kích cỡ cửa sổ mặc định"
+
+#: info/session.c:1557
+msgid "Scroll backward in this window staying within node"
+msgstr "Cuộn lùi trong cửa sổ này, mà còn lại trong nút này"
+
+#: info/session.c:1565
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr ""
+"Cuộn lùi trong cửa sổ này, mà còn lại trong nút này và lập kích cỡ cửa sổ "
+"mặc định"
+
+#: info/session.c:1573
+msgid "Move to the start of this node"
+msgstr "VỠđầu nút này"
+
+#: info/session.c:1580
+msgid "Move to the end of this node"
+msgstr "Tới cuối nút này"
+
+#: info/session.c:1587
+msgid "Scroll down by lines"
+msgstr "Cuộn xuống theo dòng"
+
+#: info/session.c:1604
+msgid "Scroll up by lines"
+msgstr "Cuộn lên theo dòng"
+
+#: info/session.c:1622
+msgid "Scroll down by half screen size"
+msgstr "Cuộn xuống theo nửa màn hình"
+
+#: info/session.c:1648
+msgid "Scroll up by half screen size"
+msgstr "Cuộn lên theo nửa màn hình"
+
+#: info/session.c:1677
+msgid "Select the next window"
+msgstr "Chá»n cá»­a sổ kế"
+
+#: info/session.c:1716
+msgid "Select the previous window"
+msgstr "Chá»n cá»­a sổ lùi"
+
+#: info/session.c:1767
+msgid "Split the current window"
+msgstr "Chia tách cửa sổ hiện có"
+
+#: info/session.c:1848
+msgid "Delete the current window"
+msgstr "Xóa cửa sổ hiện có"
+
+#: info/session.c:1856
+msgid "Cannot delete a permanent window"
+msgstr "Không thể xóa cá»­a sổ lâu bá»n"
+
+#: info/session.c:1888
+msgid "Delete all other windows"
+msgstr "Xóa các cửa sổ khác"
+
+#: info/session.c:1934
+msgid "Scroll the other window"
+msgstr "Cuộn cửa sổ khác"
+
+#: info/session.c:1955
+msgid "Scroll the other window backward"
+msgstr "Cuộn lùi cửa sổ khác"
+
+#: info/session.c:1961
+msgid "Grow (or shrink) this window"
+msgstr "Phóng to (hay thu nhá») cá»­a sổ này"
+
+#: info/session.c:1972
+msgid "Divide the available screen space among the visible windows"
+msgstr "Chia chỗ màn hình sẵn sàng ra các cửa sổ hiện rõ"
+
+#: info/session.c:1979
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "Bật tắt tính trạng ngắt dòng trong cá»­a sổ hiện thá»i"
+
+#: info/session.c:1986
+msgid "Toggle the usage of regular expressions in searches"
+msgstr "Bật/tắt khả năng sử dụng biểu thức chính quy khi tìm kiếm"
+
+#: info/session.c:1990
+msgid "Using regular expressions for searches."
+msgstr "Dùng biểu thức chính quy khi tìm kiếm."
+
+#: info/session.c:1991
+msgid "Using literal strings for searches."
+msgstr "Dùng chuỗi nghĩa chữ khi tìm kiếm."
+
+#: info/session.c:2162
+msgid "Select the Next node"
+msgstr "Chá»n nút Kế"
+
+#: info/session.c:2170
+msgid "Select the Prev node"
+msgstr "Chá»n nút Lùi"
+
+#: info/session.c:2178
+msgid "Select the Up node"
+msgstr "Chá»n nút Lên"
+
+#: info/session.c:2185
+msgid "Select the last node in this file"
+msgstr "Chá»n nút cuối trong tập tin này"
+
+#: info/session.c:2212 info/session.c:2245
+msgid "This window has no additional nodes"
+msgstr "Cửa sổ này không có nút thêm"
+
+#: info/session.c:2218
+msgid "Select the first node in this file"
+msgstr "Chá»n nút đầu trong tập tin này"
+
+#: info/session.c:2252
+msgid "Select the last item in this node's menu"
+msgstr "Chá»n mục cuối trong trình Ä‘Æ¡n nút này"
+
+#: info/session.c:2258
+msgid "Select this menu item"
+msgstr "Chá»n mục trình Ä‘Æ¡n này"
+
+#: info/session.c:2291
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "Không có %d mục trong trình đơn này."
+
+#: info/session.c:2485 info/session.c:2486
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Mục trình đơn (%s): "
+
+#: info/session.c:2489
+msgid "Menu item: "
+msgstr "Mục trình đơn: "
+
+#: info/session.c:2496 info/session.c:2497
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Theo tham chiếu chéo (%s): "
+
+#: info/session.c:2500
+msgid "Follow xref: "
+msgstr "Theo tham chiếu chéo : "
+
+#: info/session.c:2629
+msgid "Read a menu item and select its node"
+msgstr "Äá»c mục trình Ä‘Æ¡n và chá»n nút của nó"
+
+#: info/session.c:2637
+msgid "Read a footnote or cross reference and select its node"
+msgstr "Äá»c cÆ°á»›c chú hay tham chiếu chéo và chá»n nút của nó"
+
+#: info/session.c:2643
+msgid "Move to the start of this node's menu"
+msgstr "VỠđầu trình đơn của nút này"
+
+#: info/session.c:2667
+msgid "Visit as many menu items at once as possible"
+msgstr "Xem đồng thá»i càng nhiá»u mục trình Ä‘Æ¡n càng có thể"
+
+#: info/session.c:2695
+msgid "Read a node name and select it"
+msgstr "Äá»c tên nút và chá»n nó"
+
+#: info/session.c:2750 info/session.c:2755
+msgid "Goto node: "
+msgstr "Tới nút: "
+
+#: info/session.c:2819
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "Không có trình đơn trong nút « %s »."
+
+#: info/session.c:2865
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "Không có mục trình đơn « %s » trong nút « %s »."
+
+#: info/session.c:2895
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr "Không tìm thấy nút được tham chiếu bởi « %s » trong « %s »."
+
+#: info/session.c:2945
+msgid "Read a list of menus starting from dir and follow them"
+msgstr "Äá»c danh sách các trình Ä‘Æ¡n bắt đầu từ « thÆ° mục » và theo chúng"
+
+#: info/session.c:2947
+msgid "Follow menus: "
+msgstr "Theo trình đơn: "
+
+#: info/session.c:3140
+msgid "Find the node describing program invocation"
+msgstr "Tìm nút diá»…n tả cuá»™c gá»i chÆ°Æ¡ng trình"
+
+#: info/session.c:3142
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "Tìm nút gá»i của [%s]: "
+
+#: info/session.c:3180
+msgid "Read a manpage reference and select it"
+msgstr "Äá»c tham chiếu trang hÆ°á»›ng dẫn (man) và chá»n nó"
+
+#: info/session.c:3184
+msgid "Get Manpage: "
+msgstr "Lấy trang Man: "
+
+#: info/session.c:3214
+msgid "Select the node `Top' in this file"
+msgstr "Chá»n « Trên » trong tập tin này"
+
+#: info/session.c:3220
+msgid "Select the node `(dir)'"
+msgstr "Chá»n nút « thÆ° mục »"
+
+#: info/session.c:3237 info/session.c:3239
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Giết nút (%s): "
+
+#: info/session.c:3291
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "Không thể giết nút « %s »"
+
+#: info/session.c:3301
+msgid "Cannot kill the last node"
+msgstr "Không thể giết nút cuối"
+
+#: info/session.c:3387
+msgid "Select the most recently selected node"
+msgstr "Chá»n nút má»›i chá»n"
+
+#: info/session.c:3393
+msgid "Kill this node"
+msgstr "Giết nút này"
+
+#: info/session.c:3401
+msgid "Read the name of a file and select it"
+msgstr "Äá»c tên tập tin và chá»n nó"
+
+#: info/session.c:3405
+msgid "Find file: "
+msgstr "Tìm tập tin: "
+
+#: info/session.c:3422
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "Không tìm thấy « %s »"
+
+#: info/session.c:3465 info/session.c:3583
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "Không thể tạo tập tin xuất « %s »."
+
+#: info/session.c:3479 info/session.c:3601 info/session.c:3661
+msgid "Done."
+msgstr "Hoàn tất."
+
+#: info/session.c:3534
+#, c-format
+msgid "Writing node %s..."
+msgstr "Äang ghi nút %s..."
+
+#: info/session.c:3610
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr ""
+"Gửi nội dung của nút nay qua ống dẫn kiểu « INFO_PRINT_COMMAND » (Info in ra "
+"lệnh)"
+
+#: info/session.c:3645
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "Không thể mở ống dẫn đến « %s »."
+
+#: info/session.c:3651
+#, c-format
+msgid "Printing node %s..."
+msgstr "Äang in nút %s..."
+
+#: info/session.c:3900
+msgid "Search continued from the end of the document."
+msgstr "Tiến trình tìm kiếm đã tiếp tục từ cuối của tài liệu."
+
+#: info/session.c:3905
+msgid "Search continued from the beginning of the document."
+msgstr "Tiến trình tìm kiếm đã tiếp tục từ đầu của tài liệu."
+
+#: info/session.c:3922
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "Äang tìm kiếm tập tin phụ %s..."
+
+#: info/session.c:3979
+msgid "Read a string and search for it case-sensitively"
+msgstr "Äá»c chuá»—i và tìm kiếm nó, phân biệt chữ hoa/thÆ°á»ng"
+
+#: info/session.c:3986
+msgid "Read a string and search for it"
+msgstr "Äá»c chuá»—i và tìm kiếm nó"
+
+#: info/session.c:3994
+msgid "Read a string and search backward for it"
+msgstr "Äá»c chuá»—i và tìm kiếm lùi nó"
+
+#: info/session.c:4030 info/session.c:4036
+#, c-format
+msgid "%s%s%s [%s]: "
+msgstr "%s%s%s [%s]: "
+
+#: info/session.c:4031 info/session.c:4037
+msgid "Regexp search"
+msgstr "Tìm kiếm dùng biểu thức chính quy"
+
+#: info/session.c:4032 info/session.c:4038
+msgid " case-sensitively"
+msgstr " phân biết chữ hoa/thÆ°á»ng "
+
+#: info/session.c:4033 info/session.c:4039
+msgid " backward"
+msgstr " ngược"
+
+#: info/session.c:4037
+msgid "Search"
+msgstr "Tìm kiếm"
+
+#: info/session.c:4079
+msgid "Search failed."
+msgstr "Lỗi tìm kiếm."
+
+#: info/session.c:4097
+msgid "Repeat last search in the same direction"
+msgstr "Làm lại việc tìm kiếm cuối, vỠcùng phía hướng"
+
+#: info/session.c:4100 info/session.c:4110
+msgid "No previous search string"
+msgstr "Không có chuỗi tìm kiếm trước"
+
+#: info/session.c:4107
+msgid "Repeat last search in the reverse direction"
+msgstr "Làm lại việc tìm kiếm cuối, vỠngược phía hướng"
+
+#: info/session.c:4126 info/session.c:4132
+msgid "Search interactively for a string as you type it"
+msgstr "Tìm kiếm tương tác chuỗi đang gõ"
+
+#: info/session.c:4212
+msgid "Regexp I-search backward: "
+msgstr "Tìm kiếm ngược I dùng biểu thức chính quy: "
+
+#: info/session.c:4213
+msgid "I-search backward: "
+msgstr "Tìm kiếm ngược I: "
+
+#: info/session.c:4215
+msgid "Regexp I-search: "
+msgstr "Tìm kiếm I dùng biểu thức chính quy: "
+
+#: info/session.c:4216
+msgid "I-search: "
+msgstr "Tìm kiếm I: "
+
+#: info/session.c:4241 info/session.c:4243
+msgid "Failing "
+msgstr "Äang thất bại "
+
+#: info/session.c:4734
+msgid "Move to the previous cross reference"
+msgstr "VỠtham chiếu chéo trước"
+
+#: info/session.c:4752
+msgid "Move to the next cross reference"
+msgstr "Tới tham chiếu chéo kế"
+
+#: info/session.c:4774
+msgid "Select reference or menu item appearing on this line"
+msgstr "Chá»n tham chiếu hay mục trình Ä‘Æ¡n xuất hiện trên dòng này"
+
+#: info/session.c:4797
+msgid "Cancel current operation"
+msgstr "Hủy thao tác đang chạy"
+
+#: info/session.c:4804
+msgid "Quit"
+msgstr "Thoát"
+
+#: info/session.c:4813
+msgid "Move the cursor to a specific line of the window"
+msgstr "Chuyển con chạy tới một đóng riêng trong cửa sổ"
+
+#: info/session.c:4845
+msgid "Redraw the display"
+msgstr "Vẽ lại màn hình"
+
+#: info/session.c:4882
+msgid "Quit using Info"
+msgstr "Thoát khá»i Info"
+
+#: info/session.c:4895
+msgid "Run command bound to this key's lowercase variant"
+msgstr "Chạy lệnh đã đóng kết đến biến thế chữ thÆ°á»ng của phím này"
+
+#: info/session.c:4906
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "Lệnh không rõ (%s)."
+
+#: info/session.c:4909
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "« %s » không hợp lệ"
+
+#: info/session.c:4910
+#, c-format
+msgid "`%s' is invalid"
+msgstr "« %s » không hợp lệ"
+
+#: info/session.c:5125
+msgid "Add this digit to the current numeric argument"
+msgstr "Thêm chữ số này vào đối số thuá»™c số hiện thá»i"
+
+#: info/session.c:5134
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "Bắt đầu (hoặc nhân vá»›i 4) đối số thuá»™c số hiện thá»i)"
+
+#: info/session.c:5149
+msgid "Internally used by \\[universal-argument]"
+msgstr "Dùng bên trong bởi « \\[universal-argument] » (đối số toàn thể)"
+
+#: info/tilde.c:336
+#, c-format
+msgid "readline: Out of virtual memory!\n"
+msgstr "readline: hết bộ nhớ ảo.\n"
+
+#: info/variables.c:37
+msgid "When \"On\", footnotes appear and disappear automatically"
+msgstr "Bật thì cước chú tự động xuất hiện và biến mật"
+
+#: info/variables.c:41
+msgid "When \"On\", creating or deleting a window resizes other windows"
+msgstr "Bật thì việc tao hoặc xóa bỠcửa sổ thay đổi kích cỡ của cửa sổ khác"
+
+#: info/variables.c:45
+msgid "When \"On\", flash the screen instead of ringing the bell"
+msgstr "Bật thì chớp màn hình thay vào rung chuông"
+
+#: info/variables.c:49
+msgid "When \"On\", errors cause the bell to ring"
+msgstr "Bật thì lỗi gây ra rung chuông"
+
+#: info/variables.c:53
+msgid "When \"On\", Info garbage collects files which had to be uncompressed"
+msgstr "Bật thì Rác Info tập hợp tập tin đã cần giải nén"
+
+#: info/variables.c:56
+msgid "When \"On\", the portion of the matched search string is highlighted"
+msgstr "Bật thì tô sáng một phần chuỗi tìm kiếm đã khớp"
+
+#: info/variables.c:60
+msgid "Controls what happens when scrolling is requested at the end of a node"
+msgstr "Äiá»u khiển ứng xá»­ khi cuá»™n được yêu cầu tại kết thúc nút"
+
+#: info/variables.c:65
+msgid "Same as scroll-behaviour"
+msgstr "Tương tự với « scroll-behaviour » (ứng xử cuộn)"
+
+#: info/variables.c:69
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr "Số dòng cần cuá»™n khi con chạy rá»i cá»­a sổ"
+
+#: info/variables.c:73
+msgid "Controls whether scroll-behavior affects cursor movement commands"
+msgstr "Äiá»u khiển nếu ứng xá»­ cuá»™n có tác Ä‘á»™ng lệnh di chuyển con trá» không"
+
+#: info/variables.c:77
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr "Bật thì Info chấp nhận và hiển thị ký tự La-tinh ISO"
+
+#: info/variables.c:81
+msgid ""
+"What to do when a scrolling command is issued at the end of the last node"
+msgstr "Äiá»u khiển ứng xá»­ khi cuá»™n được yêu cầu tại kết thúc của nút cuối cùng"
+
+#: info/variables.c:88
+msgid "Explain the use of a variable"
+msgstr "Diễn tả cách sử dụng biến"
+
+#: info/variables.c:94
+msgid "Describe variable: "
+msgstr "Diễn tả biến: "
+
+#: info/variables.c:113
+msgid "Set the value of an Info variable"
+msgstr "Lập giá trị của biến Info"
+
+#: info/variables.c:119
+msgid "Set variable: "
+msgstr "Lập biến: "
+
+#: info/variables.c:137
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "Lập %s thành giá trị (%d): "
+
+#: info/variables.c:178
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "Lập %s thành giá trị (%s): "
+
+#: info/window.c:1026
+msgid "--*** Tags out of Date ***"
+msgstr "--*** Thẻ quá cũ ***"
+
+#: info/window.c:1037
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), dòng ----, "
+
+#: info/window.c:1044
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d dòng --%s--"
+
+#: info/window.c:1048
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d dòng --%s--"
+
+#: info/window.c:1055
+#, c-format
+msgid " Subfile: %s"
+msgstr " Tập tin phụ: %s"
+
+#: install-info/install-info.c:221
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: cảnh báo : "
+
+#: install-info/install-info.c:270
+#, c-format
+msgid " for %s"
+msgstr " cho %s"
+
+#: install-info/install-info.c:500
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr ""
+"\tHãy thá»­ lệnh trợ giúp « %s --help » để xem danh sách tùy chá»n hoàn toàn.\n"
+
+#: install-info/install-info.c:508
+#, c-format
+msgid "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+msgstr "Sử dụng: %s [TÙY_CHỌN]... [TẬP_TIN_INFO [TẬP_TIN_THƯ_MỤC]]\n"
+
+#: install-info/install-info.c:510
+msgid "Add or remove entries in INFO-FILE from the Info directory DIR-FILE."
+msgstr "Thêm hoặc gỡ bá» mục nhập trong TẬP_TIN_INFO vào/khá»i TẬP_TIN_THƯ_MỤC."
+
+#: install-info/install-info.c:513
+msgid ""
+"Options:\n"
+" --debug report what is being done.\n"
+" --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+" don't insert any new entries.\n"
+" --description=TEXT the description of the entry is TEXT; used with\n"
+" the --name option to become synonymous with the\n"
+" --entry option.\n"
+" --dir-file=NAME specify file name of Info directory file;\n"
+" equivalent to using the DIR-FILE argument.\n"
+" --dry-run same as --test."
+msgstr ""
+"Tùy chá»n:\n"
+" --debug thông báo vỠmỗi hành động.\n"
+" --delete xoá các mục nhập đã tồn tại cho TẬP_TIN_INFO\n"
+"\t\t\t\tkhá»i TẬP_TIN_THƯ_MỤC; đừng chèn mục nhập má»›i. --description=VÄ‚N_BẢN "
+"\tmô tả của mục nhập là văn bản này;\n"
+"\t\t\t\tkết hợp vá»›i tùy chá»n « --name » để làm cùng\n"
+"\t\t\t\tkết quả vá»›i tùy chá»n « --entry ».\n"
+" --dir-file=TÊN ghi rõ tên tập tin của tập tin thư mục info;\n"
+"\t\t\t\tcó cùng kết quả với đối số TẬP_TIN_THƯ_MỤC. --dry-run có "
+"cùng kết quả vá»›i tùy chá»n « --test »."
+
+#: install-info/install-info.c:525
+msgid ""
+" --entry=TEXT insert TEXT as an Info directory entry.\n"
+" TEXT is written as an Info menu item line followed\n"
+" by zero or more extra lines starting with "
+"whitespace.\n"
+" If you specify more than one entry, all are added.\n"
+" If you don't specify any entries, they are determined\n"
+" from information in the Info file itself.\n"
+" When removing, TEXT specifies the entry to remove.\n"
+" TEXT is only removed as a last resort, if the\n"
+" entry as determined from the Info file is not "
+"present,\n"
+" and the basename of the Info file isn't found either."
+msgstr ""
+" --entry=VĂN_BẢN chèn văn bản này dạng mục nhập tập tin Info.\n"
+"\tVăn bản này được ghi dưới dạng một dòng mục trình đơn info,\n"
+"\tđằng trước ≥0 dòng thêm bắt đầu với khoảng trắng.\n"
+"\tGhi rõ nhiá»u mục nhập thì tất cả được thêm.\n"
+"\tKhông ghi rõ mục nhập thì các mục nhập được xác định\n"
+"\ttừ thông tin trong tập tin Info chính nó.\n"
+"\tKhi gỡ bá», văn bản này ghi rõ mục nhập cần gỡ bá».\n"
+"\tVăn bản này chỉ được gỡ bỠnhư là phương sách cuối cùng,\n"
+"\tnếu không có mục nhập được xác định từ tập tin Info,\n"
+"\tvà cũng không tìm thấy tên cơ bản của tập tin Info."
+
+#: install-info/install-info.c:537
+msgid ""
+" --help display this help and exit.\n"
+" --info-dir=DIR same as --dir-file=DIR/dir.\n"
+" --info-file=FILE specify Info file to install in the directory;\n"
+" equivalent to using the INFO-FILE argument.\n"
+" --item=TEXT same as --entry=TEXT.\n"
+" --keep-old do not replace entries, or remove empty sections.\n"
+" --menuentry=TEXT same as --name=TEXT.\n"
+" --name=TEXT the name of the entry is TEXT; used with --description\n"
+" to become synonymous with the --entry option.\n"
+" --no-indent do not format new entries in the DIR file.\n"
+" --quiet suppress warnings."
+msgstr ""
+" --help hiển thị trợ giúp này rồi thoát.\n"
+" --info-dir=THƯ_MỤC bằng « --dir-file=THƯ_MỤC/thư_mục ».\n"
+" --info-file=TẬP_TIN \tghi rõ tập tin Info cần cài đặt vào thư mục;\n"
+"\t\t\t\t\tcó cùng kết quả với đối số TẬP_TIN_INFO. --item=VĂN_BẢN "
+"bằng « --entry=VĂN_BẢN ».\n"
+" --keep-old đừng thay thế mục nhập hoặc gỡ bỠphần rỗng.\n"
+" --menuentry=VĂN_BẢN bằng « --name=VĂN_BẢN ».\n"
+" --name=VĂN_BẢN tên của mục nhập là văn bản này;\n"
+"\t\t\t\t\tdùng cùng vá»›i tùy chá»n « --description »\n"
+" \t\t\tthì có cùng kết quả vá»›i tùy chá»n « --entry ».\n"
+" --no-indent đừng định dạng mục nhập mới trong tập tin THƯ_MỤC\n"
+" --quiet thu hồi cảnh báo."
+
+#: install-info/install-info.c:550
+msgid ""
+" --regex=R put this file's entries in all sections that match the\n"
+" regular expression R (ignoring case).\n"
+" --remove same as --delete.\n"
+" --remove-exactly only remove if the info file name matches exactly;\n"
+" suffixes such as .info and .gz are not ignored.\n"
+" --section=SEC put entries in section SEC of the directory.\n"
+" If you specify more than one section, all the entries\n"
+" are added in each of the sections.\n"
+" If you don't specify any sections, they are "
+"determined\n"
+" from information in the Info file itself.\n"
+" --section R SEC equivalent to --regex=R --section=SEC --add-once."
+msgstr ""
+" --regex=R đặt các mục nhập của tập tin này vào má»i phần\n"
+"\t\t\t\ttương ứng với biểu thức chính quy R\n"
+"\t\t\t\t(không phân biệt chữ hoa/thÆ°á»ng).\n"
+" --remove bằng « --delete ».\n"
+" --remove-exactly chỉ gỡ bỠnếu tên tập tin Info tương ứng chính xác;\n"
+"\t\t\t\tcũng phân biệt đuôi tên tập tin như .info và .gz\n"
+" --section=PHẦN đặt các mục nhập vào phần này của thư mục.\n"
+"\t\t\t\tGhi rõ nhiá»u phần thì tất cả các mục nhập\n"
+"\t\t\t\tđược thêm vào mỗi phần.\n"
+"\t\t\t\tKhông ghi rõ phần thì các phần được xác định\n"
+"\t\t\t\ttừ thông tin trong tập tin Info chính nó.\n"
+" --section R PHẦN bằng « --regex=R --section=PHẦN --add-once »."
+
+#: install-info/install-info.c:563
+msgid ""
+" --silent suppress warnings.\n"
+" --test suppress updating of DIR-FILE.\n"
+" --version display version information and exit."
+msgstr ""
+" --silent thu hồi cảnh báo.\n"
+" --test thu hồi nâng cấp TẬP_TIN_THƯ_MỤC.\n"
+" --version hiển thị thông tin phiên bản rồi thoát."
+
+#: install-info/install-info.c:570
+msgid ""
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"Hãy thông báo lỗi cho địa chỉ « bug-texinfo@gnu.org »,\n"
+"và gá»­i câu há»i chung, thảo luận v.v. cho help-texinfo@gnu.org.\n"
+"Trang chủ texinfo: http://www.gnu.org/software/texinfo/"
+
+#: install-info/install-info.c:597
+#, c-format
+msgid ""
+"This is the file .../info/dir, which contains the\n"
+"topmost node of the Info hierarchy, called (dir)Top.\n"
+"The first time you invoke Info you start off looking at this node.\n"
+"\n"
+"%s\tThis is the top of the INFO tree\n"
+"\n"
+" This (the Directory node) gives a menu of major topics.\n"
+" Typing \"q\" exits, \"?\" lists all Info commands, \"d\" returns here,\n"
+" \"h\" gives a primer for first-timers,\n"
+" \"mEmacs<Return>\" visits the Emacs manual, etc.\n"
+"\n"
+" In Emacs, you can click mouse button 2 on a menu item or cross reference\n"
+" to select it.\n"
+"\n"
+"%s\n"
+msgstr ""
+"Äây là tập tin « .../info/dir », mà chứa nút đầu của phân cấp Info,\n"
+"có tên Trên: (dir)Top.\n"
+"Lần đầu tiên chạy Info thì bạn xem nút này.\n"
+"\n"
+"%s\tÄây là đầu cây INFO\n"
+"\n"
+" Äây (nút ThÆ° mục) Ä‘Æ°a ra trình Ä‘Æ¡n các chủ Ä‘á» chính.\n"
+" Phím tắt:\n"
+" • q\t\tthoát\n"
+" • ?\t\t\tliệt kê các lệnh Info\n"
+" • d\t\ttrở vỠđây\n"
+" • h\t\thiện trợ giúp cho ngÆ°á»i má»›i dùng Info\n"
+" • mEmacs<Return>\tthăm sổ tay Emacs\n"
+"v.v.\n"
+" Trong Emacs, bạn có thể nhấn cái nút chuột 2 vào mục trình đơn\n"
+" hay vào tham chiếu chéo, để chá»n nó.\n"
+"\n"
+"%s\n"
+
+#: install-info/install-info.c:622
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr "%s: không thể Ä‘á»c (%s) và không thể tạo (%s)\n"
+
+#: install-info/install-info.c:715
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: tập tin rỗng"
+
+#: install-info/install-info.c:1046 install-info/install-info.c:1086
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr ""
+"Có « START-INFO-DIR-ENTRY » (mục nhập thư mục Info đầu) mà không có « END-INFO-"
+"DIR-ENTRY » (mục nhập thư mục Info kết thúc) tương ứng"
+
+#: install-info/install-info.c:1081
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr ""
+"Có « END-INFO-DIR-ENTRY » (mục nhập thư mục Info kết thúc) mà không có « START-"
+"INFO-DIR-ENTRY » (mục nhập thư mục Info đầu) tương ứng"
+
+#: install-info/install-info.c:1946 install-info/install-info.c:1956
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr "%s: đã có tập tin thư mục: %s\n"
+
+#: install-info/install-info.c:2036
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: hãy ghi rõ tập tin Info chỉ một lần.\n"
+
+#: install-info/install-info.c:2069
+#, c-format
+msgid "Extra regular expression specified, ignoring `%s'"
+msgstr "Biểu thức chính quy thêm được ghi rõ nên bỠqua « %s »"
+
+#: install-info/install-info.c:2081
+#, c-format
+msgid "Error in regular expression `%s': %s"
+msgstr "Gặp lỗi trong biểu thức chính quy « %s »: %s"
+
+#: install-info/install-info.c:2139
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "đối số dòng lệnh thừa « %s »"
+
+#: install-info/install-info.c:2143
+msgid "No input file specified; try --help for more information."
+msgstr ""
+"Chưa ghi rõ tập tin nhập vào. Hãy chạy lệnh trợ giúp « --help » để xem thông "
+"tin thêm."
+
+#: install-info/install-info.c:2146
+msgid "No dir file specified; try --help for more information."
+msgstr ""
+"Chưa ghi rõ tập tin thư mục. Hãy chạy lệnh trợ giúp « --help » để xem thông "
+"tin thêm."
+
+#: install-info/install-info.c:2288
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "không có mục nhập thư mục Info trong « %s »"
+
+#: install-info/install-info.c:2536
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "không tìm thấy mục nhập cho « %s » nên không xóa gì"
+
+#: lib/xexit.c:54
+msgid "ferror on stdout\n"
+msgstr "lỗi ferror trên thiết bị xuất chuẩn\n"
+
+#: lib/xexit.c:59
+msgid "fflush error on stdout\n"
+msgstr "lỗi fflush trên thiết bị xuất chuẩn\n"
+
+#: makeinfo/cmds.c:582 makeinfo/cmds.c:604
+#, c-format
+msgid "arguments to @%s ignored"
+msgstr "các đối số tới @%s bị bỠqua"
+
+#: makeinfo/cmds.c:779
+msgid "January"
+msgstr "Tháng Giêng"
+
+#: makeinfo/cmds.c:779
+msgid "February"
+msgstr "Tháng Hai"
+
+#: makeinfo/cmds.c:779
+msgid "March"
+msgstr "Tháng Ba"
+
+#: makeinfo/cmds.c:779
+msgid "April"
+msgstr "Tháng Tư"
+
+#: makeinfo/cmds.c:779
+msgid "May"
+msgstr "Tháng Năm"
+
+#: makeinfo/cmds.c:780
+msgid "June"
+msgstr "Tháng Sáu"
+
+#: makeinfo/cmds.c:780
+msgid "July"
+msgstr "Tháng Bảy"
+
+#: makeinfo/cmds.c:780
+msgid "August"
+msgstr "Tháng Tám"
+
+#: makeinfo/cmds.c:780
+msgid "September"
+msgstr "Tháng Chín"
+
+#: makeinfo/cmds.c:780
+msgid "October"
+msgstr "Tháng MÆ°á»i"
+
+#: makeinfo/cmds.c:781
+msgid "November"
+msgstr "Tháng MÆ°á»i Má»™t"
+
+#: makeinfo/cmds.c:781
+msgid "December"
+msgstr "Tháng Chạp"
+
+#: makeinfo/cmds.c:1131
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "gặp ký tá»± bất thÆ°á»ng %c trong @var"
+
+#: makeinfo/cmds.c:1174
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "đối số @sc hoàn toàn chữ hoa nên không có tác động"
+
+#: makeinfo/cmds.c:1229
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "mong đợi « { » còn gặp « %c »"
+
+#: makeinfo/cmds.c:1269
+msgid "end of file inside verb block"
+msgstr "kết thức tập tin bên trong khối động từ"
+
+#: makeinfo/cmds.c:1277
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "mong đợi « } » còn gặp « %c »"
+
+#: makeinfo/cmds.c:1308
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+"« @strong{Note...} » tạo một tham chiếu chéo giả trong Info; hãy sửa đổi để "
+"tránh nó"
+
+#: makeinfo/cmds.c:1504
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s quá cũ"
+
+#: makeinfo/cmds.c:1612
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "« @sp » cần đến một đối số dương thuộc số, không phải « %s »"
+
+#: makeinfo/cmds.c:2023 makeinfo/footnote.c:81
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "Äối số sai tá»›i %c%s"
+
+#: makeinfo/cmds.c:2033 makeinfo/makeinfo.c:4317
+msgid "asis"
+msgstr "như thế"
+
+#: makeinfo/cmds.c:2035 makeinfo/cmds.c:2065 makeinfo/makeinfo.c:4319
+msgid "none"
+msgstr "không có"
+
+#: makeinfo/cmds.c:2049
+#, c-format
+msgid "Bad argument to @%s"
+msgstr "Äối số sai tá»›i @%s"
+
+#: makeinfo/cmds.c:2063
+msgid "insert"
+msgstr "chèn"
+
+#: makeinfo/cmds.c:2079
+#, c-format
+msgid "Bad argument to @%s: %s"
+msgstr "Äối số sai tá»›i @%s: %s"
+
+#: makeinfo/cmds.c:2162
+#, c-format
+msgid "Expected @%s on or off, not `%s'"
+msgstr "Mong đợi @%s bật hay tắt, không phải « %s »"
+
+#: makeinfo/cmds.c:2182
+#, c-format
+msgid "Only @%s 10 or 11 is supported, not `%s'"
+msgstr "Chỉ hỗ trợ @%s 10 hay 11, không phải « %s »"
+
+#: makeinfo/defun.c:83
+msgid "Missing `}' in @def arg"
+msgstr "Thiếu « } » trong đối số xác định @def"
+
+#: makeinfo/defun.c:711
+#, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr "Phải bên trong môi trÆ°á»ng « @%s » để dùng « @%s »"
+
+#: makeinfo/files.c:434
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:637
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr "« %s » bị bỠsót trước tên tập tin xuất"
+
+#: makeinfo/files.c:645
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr "« %s » bị bỠsót vì ghi ra thiết bị xuất chuẩn"
+
+#: makeinfo/files.c:693
+msgid "Output buffer not empty."
+msgstr "Bộ đệm xuất không rỗng."
+
+#: makeinfo/float.c:181
+#, c-format
+msgid "Requested float type `%s' not previously used"
+msgstr "Kiểu nổi đã yêu cầu « %s » không phải được dùng trước"
+
+#: makeinfo/float.c:376 makeinfo/float.c:382 makeinfo/index.c:959
+#: makeinfo/index.c:965
+msgid "See "
+msgstr "Xem "
+
+#: makeinfo/footnote.c:149
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "« %c%s » cần thiết đối số « {...} », không phải chỉ « %s »"
+
+#: makeinfo/footnote.c:164
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "Không có ngoặc móc đóng cho cước chú « %s »"
+
+# Type: text
+# Description
+# Main menu item
+#: makeinfo/footnote.c:197
+msgid "Footnote defined without parent node"
+msgstr "Cước chú đã xác định mà không có nút cha"
+
+#: makeinfo/footnote.c:209
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "Không cho phép cước chú bên trong cước chú (lồng nhau)"
+
+#: makeinfo/footnote.c:301 makeinfo/index.c:187
+msgid "Footnotes"
+msgstr "Cước chú"
+
+#: makeinfo/html.c:91
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr "%s: không thể mở tập tin CSS « --css-file »: %s"
+
+#: makeinfo/html.c:180
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr "%s:%d: tập tin CSS « --css-file » kết thúc với ghi chú"
+
+#: makeinfo/html.c:426
+msgid "[unexpected] no html tag to pop"
+msgstr "[bất thÆ°á»ng] không có thẻ HTML cần bật"
+
+#: makeinfo/html.c:800
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "[bất thÆ°á»ng] tên nút không hợp lệ: « %s »"
+
+#: makeinfo/index.c:167
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "Chỉ mục lạ « %s »"
+
+#: makeinfo/index.c:232
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr "Info không thể xử lý dấu hai chấm « : » trong mục nhập chỉ mục « %s »"
+
+#: makeinfo/index.c:410
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "Chỉ mục « %s » đã có."
+
+#: makeinfo/index.c:453
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "Chỉ mục lạ « %s » và/hay « %s » trong @synindex"
+
+#: makeinfo/index.c:676
+msgid "(line )"
+msgstr "(dòng)"
+
+#: makeinfo/index.c:684
+#, c-format
+msgid "(line %*d)"
+msgstr "(dòng %*d)"
+
+#: makeinfo/index.c:765
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "Chỉ mục lạ « %s » trong @printindex"
+
+#: makeinfo/index.c:834
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "Mục nhập cho chỉ mục « %s » nằm ở ngoại nút nào"
+
+#: makeinfo/index.c:837 makeinfo/index.c:873
+msgid "(outside of any node)"
+msgstr "(ở ngoại nút nào)"
+
+#: makeinfo/insertion.c:161
+msgid "@item not allowed in argument to @itemize"
+msgstr "không cho phép @item trong đối số tới @itemize"
+
+#: makeinfo/insertion.c:242
+msgid "Broken-Type in insertion_type_pname"
+msgstr ""
+"« Broken-Type » (kiểu bị há»ng) trong « insertion_type_pname » (tên p kiểu chèn)"
+
+#: makeinfo/insertion.c:338
+msgid "Enumeration stack overflow"
+msgstr "Tràn đống đếm"
+
+#: makeinfo/insertion.c:370
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "tràn vẽ chữ, khởi chạy lại tại %c"
+
+#: makeinfo/insertion.c:639
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s cần thiết một đối số: bộ định dạng cho %citem"
+
+#: makeinfo/insertion.c:727
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr "Môi trÆ°á»ng %cfloat không thể được lồng nhau"
+
+#: makeinfo/insertion.c:981
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "« @end » mong đợi « %s », còn gặp « %s »"
+
+#: makeinfo/insertion.c:1349
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "Không có « %cend %s » tương ứng"
+
+#: makeinfo/insertion.c:1618
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s cần thiết chữ hay chữ số"
+
+#: makeinfo/insertion.c:1718
+msgid "end of file inside verbatim block"
+msgstr "kết thúc tập tin bên trong khối đúng nguyên văn"
+
+#: makeinfo/insertion.c:1942
+#, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "@%s không có nghÄ©a bên ngoài môi trÆ°á»ng « @float » (nổi)"
+
+#: makeinfo/insertion.c:1978
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "gặp @menu trước @node đầu thì tạo nút « Trên »"
+
+#: makeinfo/insertion.c:1979
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr ""
+"có lẽ nút « @top » (trên) của bạn nên được bao bá»c bằng @ifnottex thay cho "
+"@ifinfo ?"
+
+#: makeinfo/insertion.c:1991
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "gặp @detailmenu trước nút đầu thì tạo nút « Trên »"
+
+#: makeinfo/insertion.c:2047
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr ""
+"@%s không có nghÄ©a bên ngoài môi trÆ°á»ng « @titlepage » và « @quotation »"
+
+#: makeinfo/insertion.c:2061
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "@%s không có nghÄ©a bên ngoài môi trÆ°á»ng « @titlepage »"
+
+#: makeinfo/insertion.c:2092
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "Chưa khớp « %c%s »"
+
+#: makeinfo/insertion.c:2097
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "« %c%s » cần gì đó theo nó"
+
+#: makeinfo/insertion.c:2103
+#, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "Äối số sai « %s » tá»›i « %s » nên dùng « %s »"
+
+#: makeinfo/insertion.c:2200
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "@%s không có nghĩa bên trong khối « @%s »"
+
+#: makeinfo/insertion.c:2209
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "@itemx không có nghĩa bên trong khối « %s »"
+
+#: makeinfo/insertion.c:2383
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "gặp %c%s bên ngoài một khối chèn"
+
+#: makeinfo/lang.c:1218
+#, c-format
+msgid "no default territory known for language `%s'"
+msgstr "không biết vùng lãnh thổ mặc định cho ngôn ngữ « %s »"
+
+#: makeinfo/lang.c:1281
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr "%s không phải mã ngôn ngữ kiểu ISO 639 hợp lệ"
+
+#: makeinfo/lang.c:1399
+#, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "không nhận ra tên bảng mã « %s »"
+
+#: makeinfo/lang.c:1407
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "tiếc là không hỗ trợ bảng mã « %s »"
+
+#: makeinfo/lang.c:1492
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "ký tự đã mã hóa không hợp lệ: « %s »"
+
+#: makeinfo/lang.c:1800
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr "%c%s mong đợi « i » hay « j » làm đối số, không phải « %c »"
+
+#: makeinfo/lang.c:1804
+#, c-format
+msgid "%c%s expects a single character `i' or `j' as argument"
+msgstr "%c%s mong đợi một ký tự riêng lẻ « i » hay « j » làm đối số"
+
+#: makeinfo/macro.c:128
+#, c-format
+msgid "macro `%s' previously defined"
+msgstr "vĩ lệnh « %s » được xác định trước"
+
+#: makeinfo/macro.c:132
+#, c-format
+msgid "here is the previous definition of `%s'"
+msgstr "đây là lá»i xác định trÆ°á»›c của « %s »"
+
+#: makeinfo/macro.c:359
+#, c-format
+msgid "\\ in macro expansion followed by `%s' instead of parameter name"
+msgstr ""
+"« \\ » trong phần mở rộng vĩ lệnh có « %s » theo sau, thay cho tên tham số"
+
+#: makeinfo/macro.c:401
+#, c-format
+msgid "Macro `%s' called on line %d with too many args"
+msgstr "VÄ© lệnh « %s » được gá»i trên dòng %d vá»›i quá nhiá»u đối số"
+
+#: makeinfo/macro.c:580
+#, c-format
+msgid "%cend macro not found"
+msgstr "Không tìm thấy vĩ lệnh %cend"
+
+#: makeinfo/macro.c:591
+msgid "@allow-recursion is deprecated; please use @rmacro instead"
+msgstr "@allow-recursion bị phản đối; hãy sử dụng @rmacro thay thế"
+
+#: makeinfo/macro.c:606
+msgid "@quote-arg is deprecated; arguments are quoted by default"
+msgstr "@quote-arg bị phản đối; các đối số được trích dẫn theo mặc định"
+
+#: makeinfo/macro.c:649
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "khá»›p sai @end %s vá»›i @%s"
+
+#: makeinfo/makeinfo.c:188
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "Quá nhiá»u lá»—i nên thôi.\n"
+
+#: makeinfo/makeinfo.c:306
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: cảnh báo : "
+
+#: makeinfo/makeinfo.c:325 makeinfo/makeinfo.c:2340
+#, c-format
+msgid "Misplaced %c"
+msgstr "Äịnh vị sai %c"
+
+#: makeinfo/makeinfo.c:344
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Hãy thử lệnh trợ giúp « %s --help » để xem thông tin thêm.\n"
+
+#: makeinfo/makeinfo.c:347
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr ""
+"Cách sử dụng: %s [TÙY_CHỌN]... TTT...\n"
+"\n"
+"[TTT\t\tTập Tin Texinfo]\n"
+
+#: makeinfo/makeinfo.c:350
+msgid ""
+"Translate Texinfo source documentation to various other formats, by default\n"
+"Info files suitable for reading online with Emacs or standalone GNU Info.\n"
+msgstr ""
+"Dịch tài liệu nguồn Texinfo sang nhiá»u định dạng khác nhau, mặc định là tập "
+"tin Info thích hợp để Ä‘á»c trá»±c tuyến bằng Emacs hoặc Info GNU Ä‘á»™c nhất.\n"
+
+#: makeinfo/makeinfo.c:354
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\n"
+" --document-language=STR locale to use in translating Texinfo keywords\n"
+" for the output document (default C).\n"
+" --force preserve output even if errors.\n"
+" --help display this help and exit.\n"
+" --no-validate suppress node cross-reference validation.\n"
+" --no-warn suppress warnings (but not errors).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"Tùy chá»n chung:\n"
+" --error-limit=SỠthoát sau khi gặp số lỗi này (mặc định là %d).\n"
+"\t\t(_sự hạn chế lỗi_)\n"
+" --document-language=CHUá»–I\t miá»n địa phÆ°Æ¡ng cần dùng\n"
+"\t\tđể dịch các từ khoá Texinfo cho tài liệu xuất (mặc định là C).\n"
+"\t\t(_ngôn ngữ tài liệu_)\n"
+" --force bảo tồn kết xuất thậm chí nếu có lỗi (_ép "
+"buá»™c_).\n"
+" --help hiển thị trợ giúp này rồi thoát (_trợ giúp_)\n"
+" --no-validate thu hồi khả năng thầm tra tham chiếu chéo.\n"
+"\t\t(_không thẩm tra_)\n"
+" --no-warn thu hồi các cảnh báo (không phải lỗi).\n"
+"\t\t(_không cảnh báo_)\n"
+" -v, --verbose diễn tả việc đang được làm (_chi tiết_)\n"
+" --version hiển thị thông tin phiên bản rồi thoát (_phiên "
+"bản_)\n"
+
+#: makeinfo/makeinfo.c:369
+#, no-wrap
+msgid ""
+"Output format selection (default is to produce Info):\n"
+" --docbook output Docbook XML rather than Info.\n"
+" --html output HTML rather than Info.\n"
+" --xml output Texinfo XML rather than Info.\n"
+" --plaintext output plain text rather than Info.\n"
+msgstr ""
+"Chá»n định dạng xuất (mặc định là tạo Info):\n"
+" --docbook \txuất XML Docbook thay cho Info.\n"
+" --html \txuất HTML thay cho Info.\n"
+" --xml \txuất XML Texinfo thay cho Info.\n"
+" --plaintext \txuất văn bản thô thay cho Info (_nhập thô_).\n"
+
+#: makeinfo/makeinfo.c:377
+msgid ""
+"General output options:\n"
+" -E, --macro-expand=FILE output macro-expanded source to FILE,\n"
+" ignoring any @setfilename.\n"
+" --no-headers suppress node separators, Node: lines, and "
+"menus\n"
+" from Info output (thus producing plain "
+"text)\n"
+" or from HTML (thus producing shorter "
+"output);\n"
+" also, write to standard output by default.\n"
+" --no-split suppress the splitting of Info or HTML "
+"output,\n"
+" generate only one output file.\n"
+" --number-sections output chapter and sectioning numbers.\n"
+" -o, --output=FILE output to FILE (or directory if split HTML).\n"
+msgstr ""
+"Tùy chá»n xuất chung:\n"
+" -E, --macro-expand TẬP_TIN xuất vào tập tin này nguồn đã mở rộng\n"
+"\t\tbằng vĩ lệnh, cũng bỠqua @setfilename nào.\n"
+"\t\t(_vĩ lệnh mở rộng_)\n"
+" --no-headers thu hồi các bộ phân cách nút, dòng Node:\n"
+"\t\tvà trình đơn từ kết xuất Info (thì xuất văn bản thô),\n"
+"\t\thoặc từ HTML (thì tạo kết xuất ngắn hơn);\n"
+"\t\tcũng ghi vào đầu ra tiêu chuẩn theo mặc định.\t\t(_không có dòng đầu_)\n"
+" --no-split thu hồi khả năng chia tách kết xuất kiểu Info "
+"hoặc HTML,\n"
+"\t\ttạo ra chỉ một tập tin xuất (_không chia tách_).\n"
+" --number-sections xuất các số thứ tự chương và phần.\n"
+"\t\t(_đánh số các phần_)\n"
+" -o, --output=TẬP_TIN\txuất ra tập tin này (vào thư mục nếu\n"
+"\t\tHTML đã chia tách) (_kết xuất_).\n"
+
+#: makeinfo/makeinfo.c:391
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --disable-encoding do not output accented and special characters\n"
+" in Info output based on @documentencoding.\n"
+" --enable-encoding override --disable-encoding (default).\n"
+" --fill-column=NUM break Info lines at NUM characters (default %"
+"d).\n"
+" --footnote-style=STYLE output footnotes in Info according to STYLE:\n"
+" `separate' to put them in their own node;\n"
+" `end' to put them at the end of the node, "
+"in\n"
+" which they are defined (this is the "
+"default).\n"
+" --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %"
+"d).\n"
+" If VAL is `none', do not indent; if VAL is\n"
+" `asis', preserve existing indentation.\n"
+" --split-size=NUM split Info files at size NUM (default %d).\n"
+msgstr ""
+"Tùy chá»n đối vá»›i Info và nhập thô :\n"
+" --disable-encoding đừng xuất các ký tự có dấu phụ và các ký tự\n"
+"\t\tđặc biệt trong kết xuất Info dựa vào bảng mã tài liệu "
+"@documentencoding.\n"
+" --enable-encoding xuất các ký tự có dấu phụ và ký tự đặc biệt\n"
+"\t\ttrong kết xuất Info dựa vào @documentencoding.\n"
+"\t\t(_bật bảng mã_)\n"
+" --fill-column=SỠngắt các dòng Info ở số ký tự này (mặc định là %"
+"d).\n"
+"\t\t(_tô đầy cột_)\n"
+" --footnote-style=KIỂU_DÃNG\txuất các cÆ°á»›c chú trong Info\n"
+"\t\ttùy theo kiểu dáng này:\n"
+"\t\t\t« separate » (riêng) để đặt cước chú trong cùng nút;\n"
+"\t\t\t« end » (cuối) để đặt cước chú ở cuối nút trong đó\n"
+"\t\t\tnó được xác định (đây là mặc định) (_kiểu dáng cước chú_)\n"
+" --paragraph-indent=GIÃ_TRỊ\t\tthụt lá» các Ä‘oạn văn Info\n"
+"\t\ttheo số dấu cách này (mặc định là %d).\n"
+"\t\t\tGIà TRỊ là « none » (không có) thì đừng thụt lá»;\n"
+"\t\t\tGIà TRỊ là « asis » (như thế) thì bảo tồn sự thụt lỠđã có.\t\t(_đoạn "
+"văn thụt lá»_)\n"
+" --split-size=SỠchia tách các tập tin Info ở kích cỡ SỠ(mặc "
+"định là %d).\n"
+
+#: makeinfo/makeinfo.c:409
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+" --css-ref=URL generate reference to a CSS file.\n"
+" --internal-links=FILE produce list of internal links in FILE.\n"
+" --transliterate-file-names\n"
+" produce file names in ASCII transliteration.\n"
+msgstr ""
+"Tùy chá»n HTML:\n"
+" --css-include=TẬP_TIN tập tin bao gồm (include)\n"
+"\t\txuất theo kiểu dáng <style> HTML;\n"
+"\t\tTẬP_TIN là « - » thì Ä‘á»c thiết bị nhập chuẩn.\n"
+" --css-ref=URL tạo ra tham chiếu đến tập tin CSS.\n"
+" --internal-links=TẬP_TIN cung cấp danh sách các liên kết nội bộ\n"
+" trong tập tin này\n"
+" --transliterate-file-names\ttạo các tên tập tin đã chuyển chữ ASCII.\n"
+
+#: makeinfo/makeinfo.c:419
+#, c-format
+msgid ""
+"Options for XML and Docbook:\n"
+" --output-indent=VAL indent XML elements by VAL spaces (default %"
+"d).\n"
+" If VAL is 0, ignorable whitespace is "
+"dropped.\n"
+msgstr ""
+"Tùy chá»n XML và Docbook:\n"
+" --output-indent=GIÃ_TRỊ \tthụt lá» các yếu tố theo số dấu cách này\n"
+"\t\t(mặc định là %d). Giá trị là 0 thì bỠcác khoảng trắng có thể bỠqua.\n"
+"\t\t(_xuất thụt lá»_)\n"
+
+#: makeinfo/makeinfo.c:426
+msgid ""
+"Input file options:\n"
+" --commands-in-node-names allow @ commands in node names.\n"
+" -D VAR define the variable VAR, as with @set.\n"
+" -I DIR append DIR to the @include search path.\n"
+" -P DIR prepend DIR to the @include search path.\n"
+" -U VAR undefine the variable VAR, as with @clear.\n"
+msgstr ""
+"Tùy chá»n tập tin nhập vào :\n"
+" --commands-in-node-names cho phép lệnh kiểu @ trong tên nút.\n"
+"\t\t(_các lệnh trong tên nút_)\n"
+" -D BIẾN \txác định biến này, như bằng @set.\n"
+" -I THƯ_MỤC \tphụ thêm thÆ° mục này vào Ä‘Æ°á»ng dẫn tìm kiếm @include.\n"
+" -P THƯ_MỤC \tthêm thÆ° mục này vào đầu của Ä‘Æ°á»ng dẫn tìm kiếm "
+"@include.\n"
+" -U BIẾN \thủy xác định biến này, như bằng @clear.\n"
+
+#: makeinfo/makeinfo.c:435
+msgid ""
+"Conditional processing in input:\n"
+" --ifdocbook process @ifdocbook and @docbook even if\n"
+" not generating Docbook.\n"
+" --ifhtml process @ifhtml and @html even if not generating HTML.\n"
+" --ifinfo process @ifinfo even if not generating Info.\n"
+" --ifplaintext process @ifplaintext even if not generating plain text.\n"
+" --iftex process @iftex and @tex; implies --no-split.\n"
+" --ifxml process @ifxml and @xml.\n"
+" --no-ifdocbook do not process @ifdocbook and @docbook text.\n"
+" --no-ifhtml do not process @ifhtml and @html text.\n"
+" --no-ifinfo do not process @ifinfo text.\n"
+" --no-ifplaintext do not process @ifplaintext text.\n"
+" --no-iftex do not process @iftex and @tex text.\n"
+" --no-ifxml do not process @ifxml and @xml text.\n"
+"\n"
+" Also, for the --no-ifFORMAT options, do process @ifnotFORMAT text.\n"
+msgstr ""
+"Xá»­ lý Ä‘iá»u kiện trong kết nhập:\n"
+" --ifdocbook \txử lý @ifdocbook và @docbook thậm chí nếu\n"
+"\t\tkhông tạo ra Docbook.\n"
+" --ifhtml \txử lý @ifhtml và @html thậm chí nếu không tạo ra "
+"HTML.\n"
+" --ifinfo \txử lý @ifinfo thậm chí nếu không tạo ra Info.\n"
+" --ifplaintext \txử lý @ifplaintext thậm chí nếu không tạo ra nhập "
+"thô.\n"
+" --iftex \txử lý @iftex và @tex; ngụ ý « --no-split ».\n"
+" --ifxml \txử lý @ifxml và @xml.\n"
+" --no-ifdocbook\tđừng xử lý văn bản @ifdocbook và @docbook.\n"
+" --no-ifhtml \tđừng xử lý văn bản @ifhtml và @html.\n"
+" --no-ifinfo \tđừng xử lý văn bản @ifinfo.\n"
+" --no-ifplaintext\tđừng xử lý văn bản @ifplaintext.\n"
+" --no-iftex \tđừng xử lý văn bản @iftex và @tex.\n"
+" --no-ifxml \tđừng xử lý văn bản @ifxml và @xml.\n"
+"\n"
+" HÆ¡n nữa, đối vá»›i các tùy chá»n « --no-ifÄỊNH_DẠNG », có phải xá»­ lý văn bản "
+"@ifnotÄỊNH_DẠNG.\n"
+
+#: makeinfo/makeinfo.c:454
+msgid ""
+" The defaults for the @if... conditionals depend on the output format:\n"
+" if generating HTML, --ifhtml is on and the others are off;\n"
+" if generating Info, --ifinfo is on and the others are off;\n"
+" if generating plain text, --ifplaintext is on and the others are off;\n"
+" if generating XML, --ifxml is on and the others are off.\n"
+msgstr ""
+" Giá trị mặc định cho các Ä‘iá»u kiện @if... thì phụ thuá»™c vào định dạng "
+"xuất:\n"
+" tạo ra HTML thì bật « --ifhtml » và các Ä‘iá»u khác bị tắt;\n"
+" tạo ra Info thì bật « --ifinfo » và các Ä‘iá»u khác bị tắt;\n"
+" tạo ra nhập thô thì bật « --ifplaintext » và các Ä‘iá»u khác bị tắt;\n"
+" tạo ra XML thì bật « --ifxml » và các Ä‘iá»u khác bị tắt;\n"
+
+#: makeinfo/makeinfo.c:462
+msgid ""
+"Examples:\n"
+" makeinfo foo.texi write Info to foo's @setfilename\n"
+" makeinfo --html foo.texi write HTML to @setfilename\n"
+" makeinfo --xml foo.texi write Texinfo XML to @setfilename\n"
+" makeinfo --docbook foo.texi write DocBook XML to @setfilename\n"
+" makeinfo --no-headers foo.texi write plain text to standard "
+"output\n"
+"\n"
+" makeinfo --html --no-headers foo.texi write html without node lines, "
+"menus\n"
+" makeinfo --number-sections foo.texi write Info with numbered sections\n"
+" makeinfo --no-split foo.texi write one Info file however big\n"
+msgstr ""
+"Mẫu thí dụ :\n"
+" makeinfo phu.texi ghi Info vào @setfilename của phu\n"
+" makeinfo --html phu.texi ghi HTML vào @setfilename\n"
+" makeinfo --xml phu.texi ghi Texinfo XML vào @setfilename "
+"makeinfo --docbook phu.texi ghi DocBook XML vào @setfilename "
+"makeinfo --no-headers phu.texi ghi nhập thô vào thiết bị xuất chuẩn\n"
+"\n"
+" makeinfo --html --no-headers phu.texi\n"
+" \t\tghi HTML không có dòng nút hay trình đơn\n"
+" makeinfo --number-sections phu.texi\n"
+"\t\tghi Info có các phần đã đánh số\n"
+" makeinfo --no-split phu.texi\n"
+"\t\tghi một tập tin Info, bất chấp kích cỡ tối đa\n"
+
+#: makeinfo/makeinfo.c:622
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr ""
+"%s: đang bỠqua giá trị không được nhận ra « TEXINFO_OUTPUT_FORMAT » (định "
+"dạng xuất Texinfo) « %s ».\n"
+
+#: makeinfo/makeinfo.c:670 makeinfo/makeinfo.c:696 makeinfo/makeinfo.c:720
+#: makeinfo/makeinfo.c:780
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr "%s: %s đối số phải có kiểu số, không phải « %s ».\n"
+
+#: makeinfo/makeinfo.c:683
+#, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "%s: không thể mở kết xuất mở rộng vĩ lệnh « %s »"
+
+#: makeinfo/makeinfo.c:688
+#, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "%s: đang bỠqua kết xuất mở rộng vĩ lệnh thứ hai « %s ».\n"
+
+#: makeinfo/makeinfo.c:733
+#, c-format
+msgid "%s: could not open internal links output `%s'"
+msgstr "%s: không thể mở kết xuất các liên kết nội bộ « %s »"
+
+#: makeinfo/makeinfo.c:738
+#, c-format
+msgid "%s: ignoring second internal links output `%s'.\n"
+msgstr "%s: đang bỠqua kết xuất các liên kết nội bộ thứ hai « %s ».\n"
+
+#: makeinfo/makeinfo.c:751
+#, c-format
+msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
+msgstr ""
+"%s: đối số « --paragraph-indent » (thụt lỠđoạn văn) phải là:\n"
+" • numeric\tkiểu số\n"
+" • none\t\tkhông có\n"
+" • asis\t\tnhư thế\n"
+"không phải « %s ».\n"
+
+#: makeinfo/makeinfo.c:769
+#, c-format
+msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
+msgstr ""
+"%s: đối số « --footnote-style » (kiểu dáng cước chú) phải là:\n"
+" • separate\triêng\n"
+" • end\t\tcuốinkhông phải « %s ».\n"
+
+#: makeinfo/makeinfo.c:844
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: thiếu đối số tập tin.\n"
+
+#: makeinfo/makeinfo.c:1041 makeinfo/makeinfo.c:4166
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr "Lệnh đa dòng %c%s dùng sai"
+
+#: makeinfo/makeinfo.c:1044
+#, c-format
+msgid "Expected `%s'"
+msgstr "Mong đợi « %s »"
+
+#: makeinfo/makeinfo.c:1521
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "Không thể tạo thư mục « %s »: %s"
+
+#: makeinfo/makeinfo.c:1567
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "Không tìm thấy « %s » trong « %s »."
+
+#: makeinfo/makeinfo.c:1647
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr ""
+"%s: đang nhảy qua phần mở rộng vĩ lệnh ra thiết bị xuất chuẩn vì kết xuất "
+"Info đang đi ra đó.\n"
+
+#: makeinfo/makeinfo.c:1677
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "Äang tạo tập tin %s « %s » từ « %s ».\n"
+
+#: makeinfo/makeinfo.c:1744
+#, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: Ä‘ang gỡ bá» tập tin xuất vÄ© lệnh « %s » do lá»—i; hãy dùng tùy chá»n « --force "
+"» (buộc) để bảo tồn nó.\n"
+
+#: makeinfo/makeinfo.c:1799
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: Ä‘ang gỡ bá» tập tin xuất « %s » do lá»—i; hãy dùng tùy chá»n « --force "
+"» (buộc) để bảo tồn nó.\n"
+
+#: makeinfo/makeinfo.c:1818
+#, c-format
+msgid ""
+"%s: Removing internal links output file `%s' due to errors; use --force to "
+"preserve.\n"
+msgstr ""
+"%s: đang gỡ bỠtập tin kết xuất các liên kết nội bộ « %s » do lỗi; hãy dùng "
+"tùy chá»n « --force » (buá»™c) để bảo tồn nó.\n"
+
+#: makeinfo/makeinfo.c:2113
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "Lệnh không rõ « %s »"
+
+#: makeinfo/makeinfo.c:2135
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr "Dùng dấu ngoặc móc {} để đưa ra lệnh dạng đối số tới @%s"
+
+#: makeinfo/makeinfo.c:2394
+#, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s mong đợi dấu ngoặc móc {}"
+
+#: makeinfo/makeinfo.c:2407
+msgid "Unmatched }"
+msgstr "ChÆ°a khá»›p }"
+
+#: makeinfo/makeinfo.c:2455
+msgid "NO_NAME!"
+msgstr "Không có tên."
+
+#: makeinfo/makeinfo.c:2476
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s: thiếu dấu ngoặc móc đóng « } »"
+
+#: makeinfo/makeinfo.c:3482
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "Tập tin @image « %s » (cho HTML) không Ä‘á»c được: %s"
+
+#: makeinfo/makeinfo.c:3488
+#, c-format
+msgid "No such file `%s'"
+msgstr "Không có tập tin như vậy « %s »"
+
+#: makeinfo/makeinfo.c:3624
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "Tập tin @image « %s » (cho văn bản) không Ä‘á»c được: %s"
+
+#: makeinfo/makeinfo.c:3633
+msgid "@image missing filename argument"
+msgstr "@image thiếu đối số tên tập tin"
+
+#: makeinfo/makeinfo.c:3851
+#, c-format
+msgid "undefined flag: %s"
+msgstr "chưa xác định cỠ: %s"
+
+#: makeinfo/makeinfo.c:3852
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{Không có giá trị cho « %s »}"
+
+#: makeinfo/makeinfo.c:3904
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s cần đến tên"
+
+#: makeinfo/makeinfo.c:4010
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "Äã tá»›i kết thúc tập tin trÆ°á»›c khi khá»›p @end %s"
+
+#: makeinfo/makeinfo.c:4258
+#, c-format
+msgid "`%.40s...' is too long for expansion; not expanded"
+msgstr "« %.40s... » quá dài để mở rộng nên chưa mở rộng"
+
+#: makeinfo/multi.c:116
+msgid "Missing } in @multitable template"
+msgstr "Thiếu « } » trong mẫu @multitable"
+
+#: makeinfo/multi.c:260
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "Äang bá» qua văn bản rải rác « %s » sau @multitable"
+
+#: makeinfo/multi.c:400
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "Quá nhiá»u cá»™t trong mục Ä‘a bảng (tối đà là %d)"
+
+#: makeinfo/multi.c:563
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "[bất thÆ°á»ng] không thể chá»n cá»™t số %d trong Ä‘a bảng"
+
+#: makeinfo/multi.c:592
+msgid "ignoring @tab outside of multitable"
+msgstr "đang bỠqua @tab bên ngoài đa bảng"
+
+#: makeinfo/multi.c:640
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** Kết xuất đa cột từ hàng cuối:\n"
+
+#: makeinfo/multi.c:643
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* cột số %d; kết xuất = %s\n"
+
+#: makeinfo/node.c:279
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "Nút « %s » được xác định trước tại dòng %d"
+
+#: makeinfo/node.c:647
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "Äang định dạng nút %s...\n"
+
+#: makeinfo/node.c:714
+#, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr "Nút « %s » cần đến lệnh chia ra từng phần (v.d. %c%s)"
+
+#: makeinfo/node.c:878
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "Chưa ghi rõ tên nút cho lệnh « %c%s »"
+
+#: makeinfo/node.c:919 makeinfo/node.c:1163
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr "Neo « %s » và nút « %s » ánh xạ với cùng một tên tập tin"
+
+#: makeinfo/node.c:922
+msgid "This @anchor command ignored; references to it will not work"
+msgstr "Lệnh @anchor bị bỠqua nên tham chiếu đến nó sẽ không hoạt động"
+
+#: makeinfo/node.c:924 makeinfo/node.c:1166
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr ""
+"Thay đổi tên neo này, hoặc dùng tùy chá»n « --no-split » (không chia tách)"
+
+#: makeinfo/node.c:954
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr "Gặp chuá»—i bất thÆ°á»ng tại kết thúc tập tin HTML-tách « %s »"
+
+#: makeinfo/node.c:1160
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr "Cả hai neo « %s » và « %s » Ä‘á»u ánh xạ vá»›i cùng má»™t tên tập tin"
+
+#: makeinfo/node.c:1165
+msgid "@anchor command ignored; references to it will not work"
+msgstr "Lệnh @anchor bị bỠqua nên tham chiếu đến nó sẽ không hoạt động"
+
+#: makeinfo/node.c:1362
+#, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr ""
+"%s tham chiếu đến nút không tồn tại « %s » (có lẽ đã chia ra từng phần không "
+"đúng?)"
+
+#: makeinfo/node.c:1462
+#, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr ""
+"Không có gì chỉ tá»›i trÆ°á»ng kế tiếp của nút « %s » (có lẽ đã chia ra từng phần "
+"không đúng?)"
+
+#: makeinfo/node.c:1465
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "Nút này (%s) có Lùi sai"
+
+#: makeinfo/node.c:1520
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "Không có gì chỉ tá»›i trÆ°á»ng trÆ°á»›c của nút « %s »"
+
+#: makeinfo/node.c:1524
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "Nút này (%s) có Kế sai"
+
+#: makeinfo/node.c:1536
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr "« %s » không có trÆ°á»ng Lên (có lẽ đã chia ra từng phần không đúng?)"
+
+#: makeinfo/node.c:1605
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr ""
+"Nút « %s » không có mục trình đơn cho « %s », không kể nút này là đích Lên của "
+"nó"
+
+#: makeinfo/node.c:1637
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "nút chưa được tham chiếu « %s »"
+
+#: makeinfo/node.c:1727
+#, c-format
+msgid "Removing %s\n"
+msgstr "Äang gỡ bá» %s\n"
+
+#: makeinfo/node.c:1731
+#, c-format
+msgid "Can't remove file `%s': %s"
+msgstr "Không thể gỡ bỠtập tin « %s »: %s"
+
+#: makeinfo/sectioning.c:122
+#, c-format
+msgid "Appendix %c"
+msgstr "Phụ lục %c"
+
+#: makeinfo/sectioning.c:467
+#, c-format
+msgid "Internal error (search_sectioning) `%s'!"
+msgstr "Lỗi nội bộ (search_sectioning) « %s »"
+
+#: makeinfo/sectioning.c:563
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "Lỗi nội bộ (search_sectioning) « %s »."
+
+#: makeinfo/sectioning.c:624
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "%c%s quá cũ; hãy dùng %c%s thay thế"
+
+#: makeinfo/sectioning.c:640
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "Nút có tiết đoạn %ctop đã có"
+
+#: makeinfo/sectioning.c:648
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "Äây là nút %ctop"
+
+#: makeinfo/sectioning.c:664
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "%ctop được dùng trước %cnode nên dùng giá trị mặc định %s"
+
+#: makeinfo/xml.c:1669
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "Không thể Ä‘á»c tập tin @image « %s »: %s"
+
+#: makeinfo/xml.c:2014
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+"@headitem như mục cuối của @multitable thì tạo tài liệu Docbook không hợp lệ"
+
+#: makeinfo/xml.c:2150
+msgid "of"
+msgstr "của"
+
+#: makeinfo/xml.c:2155
+msgid "on"
+msgstr "trên"
+
+#: makeinfo/xref.c:127
+msgid "First argument to cross-reference may not be empty"
+msgstr "Äối số đầu tá»›i tham chiếu chéo có lẽ không rá»—ng"
+
+#: makeinfo/xref.c:252
+#, c-format
+msgid "Empty file name for HTML cross reference in `%s'"
+msgstr "Tên tập tin rỗng cho tham chiếu chéo HTML trong « %s »"
+
+#: makeinfo/xref.c:387
+msgid "End of file reached while looking for `.' or `,'"
+msgstr "Tới kết thúc tập tin trong khi tìm dấu chấm « . » hay dấu phẩy « , »"
+
+#: makeinfo/xref.c:390
+#, c-format
+msgid "`.' or `,' must follow @%s, not `%c'"
+msgstr "@%s phải có dấu chấm « . » hay dấu phẩy « , » theo sau, không phải « %c »"
+
+#: makeinfo/xref.c:392
+msgid "for cross-references in parentheses, use @pxref"
+msgstr "đối với tham chiếu chéo trong ngoặc, hãy dùng @pxref"
+
+#: makeinfo/xref.c:435
+msgid "First argument to @inforef may not be empty"
+msgstr "Äối số đầu tá»›i @inforef có lẽ không rá»—ng"
+
+#: util/texindex.c:223
+msgid "display this help and exit"
+msgstr "hiển thị trợ giúp này rồi thoát"
+
+#: util/texindex.c:225
+msgid "send output to FILE"
+msgstr "xuất ra TẬP_TIN"
+
+#: util/texindex.c:227
+msgid "display version information and exit"
+msgstr "hiển thị thông tin phiên bản rồi thoát"
+
+#: util/texindex.c:237
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "Cách sử dụng: %s [TÙY_CHỌN]... [TẬP_TIN]...\n"
+
+#: util/texindex.c:238
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr "Tạo ra chỉ mục đã sắp xếp cho mỗi TẬP_TIN xuất TeX.\n"
+
+#: util/texindex.c:241
+#, c-format
+msgid "Usually FILE... is specified as `foo.%c%c' for a document `foo.texi'.\n"
+msgstr ""
+"ThÆ°á»ng TẬP_TIN... được ghi rõ dạng « phu.%c%c » cho tài liệu dạng « phu.texi "
+"».\n"
+
+#: util/texindex.c:243
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Tùy chá»n:\n"
+
+#: util/texindex.c:743
+#, c-format
+msgid "failure reopening %s"
+msgstr "lỗi mở lại %s"
+
+#: util/texindex.c:758 util/texindex.c:786
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: không phải tập tin chỉ mục texinfo"
+
+#: util/texindex.c:993
+#, c-format
+msgid "No page number in %s"
+msgstr "Không có số thứ tự trang trong %s"
+
+#: util/texindex.c:1066
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr "mục nhập %s nằm theo một mục nhập có tên phụ"
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
new file mode 100644
index 0000000..e3158a9
--- /dev/null
+++ b/po/zh_CN.gmo
Binary files differ
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644
index 0000000..d346f52
--- /dev/null
+++ b/po/zh_CN.po
@@ -0,0 +1,3464 @@
+# Chinese Simplified translation about texinfo.
+# Copyright (C) 2002 Free Software Foundation, Inc.
+# This file is distributed under the same license as the texinfo package.
+# Wang Li <charles@linux.net.cn>, 2002.
+# Ji ZhengYu <zhengyuji@gmail.com>, 2008
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo 4.12.94\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2008-09-18 20:38+0200\n"
+"PO-Revision-Date: 2008-08-17 12:56中国标准时间\n"
+"Last-Translator: Ji ZhengYu <zhengyuji@gmail.com>\n"
+"Language-Team: Chinese (simplified) <translation-team-zh-cn@lists."
+"sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: gnulib/lib/error.c:125
+msgid "Unknown system error"
+msgstr "未知的系统错误"
+
+#: gnulib/lib/getopt.c:526 gnulib/lib/getopt.c:542
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s:选项“%sâ€å«ä¹‰ä¸æ˜Žç¡®\n"
+
+#: gnulib/lib/getopt.c:575 gnulib/lib/getopt.c:579
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s:选项“--%sâ€ä¸æŽ¥å—å‚æ•°\n"
+
+#: gnulib/lib/getopt.c:588 gnulib/lib/getopt.c:593
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s:选项“%c%sâ€ä¸æŽ¥å—å‚æ•°\n"
+
+#: gnulib/lib/getopt.c:636 gnulib/lib/getopt.c:655 gnulib/lib/getopt.c:971
+#: gnulib/lib/getopt.c:990
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s:选项“%sâ€éœ€è¦ä¸€ä¸ªå‚æ•°\n"
+
+#: gnulib/lib/getopt.c:693 gnulib/lib/getopt.c:696
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s:ä¸èƒ½è¯†åˆ«çš„选项“--%sâ€\n"
+
+#: gnulib/lib/getopt.c:704 gnulib/lib/getopt.c:707
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s:ä¸èƒ½è¯†åˆ«çš„选项“%c%sâ€\n"
+
+#: gnulib/lib/getopt.c:759 gnulib/lib/getopt.c:762
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s:éžæ³•é€‰é¡¹ -- %c\n"
+
+#: gnulib/lib/getopt.c:768 gnulib/lib/getopt.c:771
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s:无效选项 -- %c\n"
+
+#: gnulib/lib/getopt.c:823 gnulib/lib/getopt.c:839 gnulib/lib/getopt.c:1043
+#: gnulib/lib/getopt.c:1061
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s:选项需è¦ä¸€ä¸ªå‚æ•° -- %c\n"
+
+#: gnulib/lib/getopt.c:892 gnulib/lib/getopt.c:908
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s:选项“-W %sâ€çš„å«ä¹‰ä¸æ¸…\n"
+
+#: gnulib/lib/getopt.c:932 gnulib/lib/getopt.c:950
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s:选项“-W %sâ€ä¸æŽ¥å—å‚æ•°\n"
+
+#: gnulib/lib/xalloc-die.c:34 gnulib/lib/xsetenv.c:37
+#, c-format
+msgid "memory exhausted"
+msgstr "虚拟内存耗尽"
+
+#: info/echo-area.c:283 info/session.c:966
+msgid "Move forward a character"
+msgstr "å‘å‰ç§»åŠ¨ä¸€ä¸ªå­—符"
+
+#: info/echo-area.c:295 info/session.c:993
+msgid "Move backward a character"
+msgstr "å‘åŽç§»åŠ¨ä¸€ä¸ªå­—符"
+
+#: info/echo-area.c:307
+msgid "Move to the start of this line"
+msgstr "移动到本行的开头"
+
+#: info/echo-area.c:312
+msgid "Move to the end of this line"
+msgstr "移动到本行的末尾"
+
+#: info/echo-area.c:320 info/session.c:1025
+msgid "Move forward a word"
+msgstr "å‘å‰ç§»åŠ¨ä¸€ä¸ªå•è¯"
+
+#: info/echo-area.c:360 info/session.c:1049
+msgid "Move backward a word"
+msgstr "å‘åŽç§»åŠ¨ä¸€ä¸ªå•è¯"
+
+#: info/echo-area.c:400
+msgid "Delete the character under the cursor"
+msgstr "删除光标ä½ç½®çš„字符"
+
+#: info/echo-area.c:430
+msgid "Delete the character behind the cursor"
+msgstr "删除光标之åŽçš„字符"
+
+#: info/echo-area.c:451
+msgid "Cancel or quit operation"
+msgstr "å–消或退出æ“作"
+
+#: info/echo-area.c:466
+msgid "Accept (or force completion of) this line"
+msgstr "接å—(或强制完æˆ)本行"
+
+#: info/echo-area.c:471
+msgid "Insert next character verbatim"
+msgstr "原样æ’入下一个字符"
+
+#: info/echo-area.c:479
+msgid "Insert this character"
+msgstr "æ’入该字符"
+
+#: info/echo-area.c:498
+msgid "Insert a TAB character"
+msgstr "æ’入一个 tab 字符"
+
+#: info/echo-area.c:505
+msgid "Transpose characters at point"
+msgstr "å˜æ¢å…‰æ ‡å¤„字符的次åº"
+
+#: info/echo-area.c:556
+msgid "Yank back the contents of the last kill"
+msgstr "粘贴最åŽä¸€æ¬¡å‰ªåˆ‡çš„内容"
+
+#: info/echo-area.c:563
+msgid "Kill ring is empty"
+msgstr "剪贴簿为空"
+
+#: info/echo-area.c:576
+msgid "Yank back a previous kill"
+msgstr "粘贴上次剪切"
+
+#: info/echo-area.c:609
+msgid "Kill to the end of the line"
+msgstr "剪切至本行末尾"
+
+#: info/echo-area.c:622
+msgid "Kill to the beginning of the line"
+msgstr "剪切至本行开头"
+
+#: info/echo-area.c:634
+msgid "Kill the word following the cursor"
+msgstr "剪切光标之åŽçš„å•è¯"
+
+#: info/echo-area.c:654
+msgid "Kill the word preceding the cursor"
+msgstr "剪切光标之å‰çš„å•è¯"
+
+#: info/echo-area.c:870 info/echo-area.c:926
+msgid "No completions"
+msgstr "没有补é½"
+
+#: info/echo-area.c:872
+msgid "Not complete"
+msgstr "未补é½"
+
+#: info/echo-area.c:913
+msgid "List possible completions"
+msgstr "列举å¯èƒ½çš„è¡¥é½"
+
+#: info/echo-area.c:930
+msgid "Sole completion"
+msgstr "唯一的补é½"
+
+#: info/echo-area.c:939
+msgid "One completion:\n"
+msgstr "一个补é½ï¼š\n"
+
+#: info/echo-area.c:940
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d 个补é½ï¼š\n"
+
+#: info/echo-area.c:1087
+msgid "Insert completion"
+msgstr "æ’入补é½"
+
+#: info/echo-area.c:1222
+msgid "Building completions..."
+msgstr "正在创建补é½..."
+
+#: info/echo-area.c:1342
+msgid "Scroll the completions window"
+msgstr "滚动补é½çª—å£"
+
+#: info/footnotes.c:212
+msgid "Footnotes could not be displayed"
+msgstr "无法显示脚注"
+
+#: info/footnotes.c:238
+msgid "Show the footnotes associated with this node in another window"
+msgstr "在å¦ä¸€ä¸ªçª—å£ä¸­æ˜¾ç¤ºäºŽè¯¥èŠ‚点相关的脚注"
+
+#: info/footnotes.h:26
+msgid "---------- Footnotes ----------"
+msgstr "---------- 脚注 ----------"
+
+#: info/indices.c:171
+msgid "Look up a string in the index for this file"
+msgstr "在本文件的索引中æœç´¢å­—符串"
+
+#: info/indices.c:198
+msgid "Finding index entries..."
+msgstr "正在æœç´¢ç´¢å¼•æ¡ç›®..."
+
+#: info/indices.c:206
+msgid "No indices found."
+msgstr "未找到索引。"
+
+#: info/indices.c:216
+msgid "Index entry: "
+msgstr "索引æ¡ç›®ï¼š"
+
+#: info/indices.c:324
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr "从最åŽä¸€ä¸ªâ€œ\\[index-search]â€å‘½ä»¤è½¬ç§»åˆ°ä¸‹ä¸€ä¸ªåŒ¹é…的索引项目"
+
+#: info/indices.c:334
+msgid "No previous index search string."
+msgstr "没有上一个索引æœç´¢å­—符串。"
+
+#: info/indices.c:341
+msgid "No index entries."
+msgstr "没有索引æ¡ç›®ã€‚"
+
+#: info/indices.c:374
+#, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "没有 %s索引æ¡ç›®å«æœ‰â€œ%sâ€ã€‚"
+
+#: info/indices.c:375
+msgid "more "
+msgstr "更多 "
+
+#: info/indices.c:385
+msgid "CAN'T SEE THIS"
+msgstr "看ä¸åˆ°è¿™ä¸ª"
+
+#: info/indices.c:421
+#, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr "在 %2$s 中找到“%1$sâ€ã€‚(“\\[next-index-match]â€å°†è¯•å›¾å¯»æ‰¾ä¸‹ä¸€ä¸ªåŒ¹é…。)"
+
+#: info/indices.c:549
+#, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "正在æœç´¢â€œ%sâ€çš„索引..."
+
+#: info/indices.c:604
+#, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr "在å¯ç”¨çš„ info 文件的索引中å‡ä¸å«æœ‰â€œ%sâ€ã€‚"
+
+#: info/indices.c:630
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr "æ•´ç†æ‰€æœ‰å·²çŸ¥ info 文件å«æœ‰è¢«æŸ¥è¯¢å­—符串的索引并建立一个èœå•"
+
+#: info/indices.c:634
+msgid "Index apropos: "
+msgstr "索引å«æœ‰ï¼š"
+
+#: info/indices.c:662
+#, c-format
+msgid ""
+"\n"
+"* Menu: Nodes whose indices contain `%s':\n"
+msgstr ""
+"\n"
+"* èœå•ï¼šå…¶ç´¢å¼•å«æœ‰â€œ%sâ€çš„节点:\n"
+
+#: info/info.c:275 info/infokey.c:899
+#, c-format
+msgid "Try --help for more information.\n"
+msgstr "å°è¯• --更多的求助信æ¯ã€‚\n"
+
+#: info/info.c:294 info/infokey.c:145 install-info/install-info.c:2101
+#: makeinfo/makeinfo.c:802 util/texindex.c:295
+#, c-format
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+
+#: info/info.c:506
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "找ä¸åˆ°å«æœ‰â€œ%sâ€çš„索引\n"
+
+#: info/info.c:600
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [MENU-ITEM...]\n"
+"\n"
+"Read documentation in Info format.\n"
+msgstr ""
+"用法: %s [OPTION]... [MENU-ITEM...]\n"
+"\n"
+"以 Info æ ¼å¼é˜…读文档。\n"
+
+#: info/info.c:606
+msgid ""
+"Options:\n"
+" -k, --apropos=STRING look up STRING in all indices of all "
+"manuals.\n"
+" -d, --directory=DIR add DIR to INFOPATH.\n"
+" --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+" -f, --file=FILENAME specify Info file to visit."
+msgstr ""
+"选项:\n"
+" -k, --apropos=STRING 在所有手册页的索引中查找 STRING。\n"
+" -d, --directory=DIR 将 DIR 添加至 INFOPATH。\n"
+" --dribble=FILENAME 将用户的击键æ¡ç›®åœ¨ FILENAME 中。\n"
+" -f, --file=FILENAME 指定想æµè§ˆçš„ Info 文件。"
+
+#: info/info.c:613
+msgid ""
+" -h, --help display this help and exit.\n"
+" --index-search=STRING go to node pointed by index entry STRING.\n"
+" -n, --node=NODENAME specify nodes in first visited Info file.\n"
+" -o, --output=FILENAME output selected nodes to FILENAME."
+msgstr ""
+" -h, --help 显示此帮助并退出。\n"
+" --index-search=STRING 跳转至索引æ¡ç›® STRING 所指的节点。\n"
+" -n, --node=NODENAME 在首个æµè§ˆè¿‡çš„ Info 文件中指定节点。\n"
+" -o, --output=FILENAME 将选中的节点全输出至 FILENAME。"
+
+#: info/info.c:619
+msgid ""
+" -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+" --no-raw-escapes output escapes as literal text.\n"
+" --restore=FILENAME read initial keystrokes from FILENAME.\n"
+" -O, --show-options, --usage go to command-line options node."
+msgstr ""
+" -R, --raw-escapes 输出“原始â€çš„ ANSI 转义符(默认)。\n"
+" --no-raw-escapes 将转义符输出为普通文本。\n"
+" --restore=FILENAME 从 FILENAME 中读å–åˆå§‹å‡»é”®æ¡ç›®ã€‚\n"
+" -O, --show-options, --usage 跳转至命令行选项节点。"
+
+#: info/info.c:626
+#, fuzzy
+msgid " -b, --speech-friendly be friendly to speech synthesizers."
+msgstr " -b, --speech-friendly 对å‘音器å‹å¥½ã€‚"
+
+#: info/info.c:630
+msgid ""
+" --subnodes recursively output menu items.\n"
+" --vi-keys use vi-like and less-like key bindings.\n"
+" --version display version information and exit.\n"
+" -w, --where, --location print physical location of Info file."
+msgstr ""
+" --subnodes 递归输出èœå•é¡¹ã€‚\n"
+" --vi-keys 使用类似于 vi 和 less 的按键绑定。\n"
+" --version 显示版本信æ¯å¹¶é€€å‡ºã€‚\n"
+" -w, --where, --location æ‰“å° Info 文件在系统中的ä½ç½®ã€‚"
+
+#: info/info.c:636
+msgid ""
+"\n"
+"The first non-option argument, if present, is the menu entry to start from;\n"
+"it is searched for in all `dir' files along INFOPATH.\n"
+"If it is not present, info merges all `dir' files and shows the result.\n"
+"Any remaining arguments are treated as the names of menu\n"
+"items relative to the initial node visited."
+msgstr ""
+"\n"
+"如果存在第一个éžé€‰é¡¹å‚数,它将是个用于起始的èœå•æ¡ç›®ï¼›\n"
+"所有在 INFOPATH å˜é‡åŽè·Ÿç€çš„“dirâ€æ–‡ä»¶éƒ½ä¼šæœç´¢æ­¤æ¡ç›®ã€‚\n"
+"如果ä¸å­˜åœ¨æ­¤å‚数,info åˆå¹¶æ‰€æœ‰â€œdirâ€æ–‡ä»¶å¹¶æ˜¾ç¤ºç»“果。\n"
+"任何åŽç»­å‚数都被认为是与åˆå§‹æµè§ˆ\n"
+"节点有关的èœå•é¡¹å称。"
+
+#: info/info.c:643
+msgid ""
+"\n"
+"For a summary of key bindings, type h within Info."
+msgstr ""
+"\n"
+"在帮助信æ¯ä¸­æŒ‰ h 获å–有关按键绑定的内容。"
+
+#: info/info.c:646
+msgid ""
+"\n"
+"Examples:\n"
+" info show top-level dir menu\n"
+" info info show the general manual for Info readers\n"
+" info info-stnd show the manual specific to this Info program\n"
+" info emacs start at emacs node from top-level dir\n"
+" info emacs buffers start at buffers node within emacs manual\n"
+" info --show-options emacs start at node with emacs' command line options\n"
+" info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+" info -f ./foo.info show file ./foo.info, not searching dir"
+msgstr ""
+"\n"
+"范例:\n"
+" info 显示顶级目录èœå•\n"
+" info info 显示 Info readers 的普通手册\n"
+" info info-stnd 显示此 Info 程åºç‰¹å®šæ‰‹å†Œ\n"
+" info emacs 从顶级目录æµè§ˆ emacs 节点\n"
+" info emacs buffers 在 emacs 手册页中æµè§ˆ buffers 节点\n"
+" info --show-options emacs æµè§ˆä¸Ž emacs 的命令行选项有关的节点\n"
+" info --subnodes -o out.txt emacs 将整个手册页输出至 out.txt\n"
+" info -f ./foo.info 显示文件 ./foo.info,而ä¸æ˜¯æŸ¥æ‰¾ç›®å½•"
+
+#: info/info.c:657 info/infokey.c:918 makeinfo/makeinfo.c:475
+#: util/texindex.c:259
+msgid ""
+"\n"
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+"请将错误报告å‘é€åˆ° bug-texinfo@gnu.org,\n"
+"一般的问题和讨论请å‘é€åˆ° help-texinfo@gnu.org。\n"
+"Texinfo 主页:http://www.gnu.org/software/texinfo/"
+
+#: info/info.c:691
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "无法找到节点“%sâ€ã€‚"
+
+#: info/info.c:692
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "无法找到节点“(%s)%sâ€ã€‚"
+
+#: info/info.c:693
+msgid "Cannot find a window!"
+msgstr "无法找到一个窗å£ï¼"
+
+#: info/info.c:694
+msgid "Point doesn't appear within this window's node!"
+msgstr "光标没有出现在该窗å£çš„节点之中ï¼"
+
+#: info/info.c:695
+msgid "Cannot delete the last window."
+msgstr "无法删除最åŽçš„窗å£ã€‚"
+
+#: info/info.c:696
+msgid "No menu in this node."
+msgstr "该节点中没有èœå•ã€‚"
+
+#: info/info.c:697
+msgid "No footnotes in this node."
+msgstr "该节点中没有脚注。"
+
+#: info/info.c:698
+msgid "No cross references in this node."
+msgstr "该节点中没有交å‰å¼•ç”¨ã€‚"
+
+#: info/info.c:699
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "该节点中没有“%sâ€æŒ‡é’ˆ"
+
+#: info/info.c:700
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "未知的 Info 命令“%câ€ï¼›è¯·ä»¥â€œ?â€èŽ·å¾—帮助。"
+
+#: info/info.c:701
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr "终端类型“%sâ€çš„能力ä¸è¶³ä»¥æ”¯æŒ Info çš„è¿è¡Œã€‚"
+
+#: info/info.c:702
+msgid "You are already at the last page of this node."
+msgstr "您已ç»åœ¨è¯¥èŠ‚点的最åŽä¸€ä¸ªé¡µé¢ä¸­äº†ã€‚"
+
+#: info/info.c:703
+msgid "You are already at the first page of this node."
+msgstr "您已ç»åœ¨è¯¥èŠ‚点的第一页中了。"
+
+#: info/info.c:704
+msgid "Only one window."
+msgstr "åªæœ‰ä¸€ä¸ªçª—å£ã€‚"
+
+#: info/info.c:705
+msgid "Resulting window would be too small."
+msgstr "结果窗å£å°†ä¼šå¤ªå°ã€‚"
+
+#: info/info.c:706
+msgid "Not enough room for a help window, please delete a window."
+msgstr "没有足够的空间用于求助窗å£ï¼Œè¯·åˆ é™¤ä¸€ä¸ªçª—å£ã€‚"
+
+#: info/infodoc.c:45
+msgid "Basic Info command keys\n"
+msgstr "基本 Info 命令按键\n"
+
+#: info/infodoc.c:47
+msgid "\\%-10[quit-help] Close this help window.\n"
+msgstr "\\%-10[quit-help] 关闭此帮助窗å£ã€‚\n"
+
+#: info/infodoc.c:48
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] 一并退出 Info。\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr "\\%-10[get-info-help-node] 调用 Info 教程。\n"
+
+#: info/infodoc.c:51
+msgid "\\%-10[prev-line] Move up one line.\n"
+msgstr "\\%-10[prev-line] å‘上移动一行。\n"
+
+#: info/infodoc.c:52
+msgid "\\%-10[next-line] Move down one line.\n"
+msgstr "\\%-10[next-line] å‘下移动一行。\n"
+
+#: info/infodoc.c:53
+msgid "\\%-10[scroll-backward] Scroll backward one screenful.\n"
+msgstr "\\%-10[scroll-backward] å‘åŽæ»šåŠ¨ä¸€é¡µã€‚\n"
+
+#: info/infodoc.c:54
+msgid "\\%-10[scroll-forward] Scroll forward one screenful.\n"
+msgstr "\\%-10[scroll-forward] å‘å‰æ»šåŠ¨ä¸€é¡µã€‚\n"
+
+#: info/infodoc.c:55
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr "\\%-10[beginning-of-node] 移动到本节点的开头。\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr "\\%-10[end-of-node] 移动到本节点的末尾。\n"
+
+#: info/infodoc.c:58
+msgid "\\%-10[move-to-next-xref] Skip to the next hypertext link.\n"
+msgstr "\\%-10[move-to-next-xref] 跳转到下一个超文本连接。\n"
+
+#: info/infodoc.c:59
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under the "
+"cursor.\n"
+msgstr "\\%-10[select-reference-this-line] è·Ÿéšå…‰æ ‡ä¸‹çš„超文本连接。\n"
+
+#: info/infodoc.c:60
+msgid "\\%-10[history-node] Go back to the last node seen in this window.\n"
+msgstr "\\%-10[history-node] 移动到本窗å£çš„最åŽé˜…读过的节点。\n"
+
+#: info/infodoc.c:62
+msgid "\\%-10[global-prev-node] Go to the previous node in the document.\n"
+msgstr "\\%-10[global-prev-node] 移动到本文档的上一个节点。\n"
+
+#: info/infodoc.c:63
+msgid "\\%-10[global-next-node] Go to the next node in the document.\n"
+msgstr "\\%-10[global-next-node] 移动到本文档的下一个节点。\n"
+
+#: info/infodoc.c:64
+msgid "\\%-10[prev-node] Go to the previous node on this level.\n"
+msgstr "\\%-10[prev-node] 移动到åŒçº§çš„上一个节点。\n"
+
+#: info/infodoc.c:65
+msgid "\\%-10[next-node] Go to the next node on this level.\n"
+msgstr "\\%-10[next-node] 移动到åŒçº§çš„下一个节点。\n"
+
+#: info/infodoc.c:66
+msgid "\\%-10[up-node] Go up one level.\n"
+msgstr "\\%-10[up-node] 上移一层。\n"
+
+#: info/infodoc.c:67
+msgid "\\%-10[top-node] Go to the top node of this document.\n"
+msgstr "\\%-10[top-node] 移到此文档的顶层节点。\n"
+
+#: info/infodoc.c:68
+msgid "\\%-10[dir-node] Go to the main `directory' node.\n"
+msgstr "\\%-10[dir-node] 移动到主“目录â€èŠ‚点。\n"
+
+#: info/infodoc.c:70
+msgid "1...9 Pick the first...ninth item in this node's menu.\n"
+msgstr "1...9\t\t选å–节点èœå•ä¸­çš„第一至第ä¹ä¸ªé¡¹ç›®ã€‚\n"
+
+#: info/infodoc.c:71
+msgid "\\%-10[last-menu-item] Pick the last item in this node's menu.\n"
+msgstr "\\%-10[last-menu-item] 选å–节点èœå•çš„最åŽä¸€ä¸ªé¡¹ç›®ã€‚\n"
+
+#: info/infodoc.c:72
+msgid "\\%-10[menu-item] Pick a menu item specified by name.\n"
+msgstr "\\%-10[menu-item] 选å–ç”±å称指定的èœå•é¡¹ç›®ã€‚\n"
+
+#: info/infodoc.c:73
+#, fuzzy
+msgid "\\%-10[xref-item] Follow a cross reference specified by name.\n"
+msgstr "\\%-10[xref-item] è·Ÿéšç”±å称指定的交å‰å¼•ç”¨ã€‚\n"
+
+#: info/infodoc.c:74
+msgid "\\%-10[goto-node] Go to a node specified by name.\n"
+msgstr "\\%-10[goto-node] 移动到由å字指定的节点。\n"
+
+#: info/infodoc.c:76
+msgid "\\%-10[search] Search forward for a specified string.\n"
+msgstr "\\%-10[search] å‘å‰æœç´¢æŒ‡å®šçš„字符串。\n"
+
+#: info/infodoc.c:77
+msgid "\\%-10[search-previous] Search for previous occurrence.\n"
+msgstr "\\%-10[search-previous] 查找上一个出现点。\n"
+
+#: info/infodoc.c:78
+msgid "\\%-10[search-next] Search for next occurrence.\n"
+msgstr "\\%-10[search-next] 查找下一个出现点。\n"
+
+#: info/infodoc.c:79
+msgid ""
+"\\%-10[index-search] Search for a specified string in the index, and\n"
+" select the node referenced by the first entry found.\n"
+msgstr ""
+"\\%-10[index-search] 在索引æ¡ç›®ä¸­æœç´¢æŒ‡å®šçš„字符串,\n"
+" 并选择第一个找到的æ¡ç›®æ‰€å¼•ç”¨çš„节点。\n"
+
+#: info/infodoc.c:81
+msgid "\\%-10[abort-key] Cancel the current operation.\n"
+msgstr "\\%-10[abort-key] å–消当å‰æ“作。\n"
+
+#: info/infodoc.c:89
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"Info 窗å£ä¸­çš„基本命令\n"
+"******************************\n"
+
+#: info/infodoc.c:92
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s 退出本求助。\n"
+
+#: info/infodoc.c:93
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s 一并退出 Info。\n"
+
+#: info/infodoc.c:94
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s 调用 Info 教程。\n"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr " %-10s 移动到本节点的“下一个â€èŠ‚点。\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr " %-10s 移动到本节点的“上一个â€èŠ‚点。\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s 移动到本节点的“上层â€èŠ‚点。\n"
+
+#: info/infodoc.c:101
+#, c-format
+msgid ""
+" %-10s Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+" %-10s 选å–ç”±å称指定的èœå•é¡¹ç›®ã€‚\n"
+" 选å–一个èœå•é¡¹ç›®å¯¼è‡´é€‰ä¸­å¦ä¸€ä¸ªèŠ‚点。\n"
+
+#: info/infodoc.c:103
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr " %-10s è·Ÿéšäº¤å‰å¼•ç”¨ã€‚读å–引用的å称。\n"
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr " %-10s 移动到本窗å£ä¸­çš„最åŽä¸€ä¸ªå¯è§çš„节点。\n"
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr " %-10s 跳转到本节点中的下一个超文本连接。\n"
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s è·Ÿéšå…‰æ ‡ä½ç½®çš„超文本连接。\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr " %-10s 移动到“directoryâ€èŠ‚点。等价于“g (DIR)â€ã€‚\n"
+
+#: info/infodoc.c:108
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr " %-10s 移动到顶层节点。等价于“g Topâ€ã€‚\n"
+
+#: info/infodoc.c:110
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"在一个节点中移动:\n"
+"---------------------\n"
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s å‘å‰æ»šåŠ¨ä¸€é¡µã€‚\n"
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s å‘åŽæ»šåŠ¨ä¸€é¡µã€‚\n"
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s 转移到本节点的开头。\n"
+
+#: info/infodoc.c:115
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s 转移到本节点的末尾。\n"
+
+#: info/infodoc.c:116
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s å‘å‰æ»šåŠ¨ä¸€è¡Œã€‚\n"
+
+#: info/infodoc.c:117
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s å‘åŽæ»šåŠ¨ä¸€è¡Œã€‚\n"
+
+#: info/infodoc.c:119
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"其它命令:\n"
+"---------------\n"
+
+#: info/infodoc.c:121
+#, c-format
+msgid " %-10s Pick first...ninth item in node's menu.\n"
+msgstr " %-10s 选å–节点èœå•ä¸­çš„第一至第ä¹ä¸ªé¡¹ç›®ã€‚\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s 选å–节点èœå•ä¸­çš„最åŽä¸€ä¸ªé¡¹ç›®ã€‚\n"
+
+#: info/infodoc.c:125
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr ""
+" %-10s 在本 Info 文件的索引æ¡ç›®ä¸­æœç´¢æŒ‡å®šçš„字符串,\n"
+" 并选择第一个找到的æ¡ç›®æ‰€å¼•ç”¨çš„节点。\n"
+
+#: info/infodoc.c:127
+#, c-format
+msgid ""
+" %-10s Move to node specified by name.\n"
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+" %-10s 移动到由å字指定的节点。\n"
+" 您也å¯åœ¨ (FILENAME)NODENAME 中包å«æ–‡ä»¶å。\n"
+
+#: info/infodoc.c:129
+#, c-format
+msgid ""
+" %-10s Search forward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+" %-10s å‘å‰æœç´¢æŒ‡å®šçš„字符串,\n"
+" 并选择所找到的下一个实例所在的节点。\n"
+
+#: info/infodoc.c:131
+#, c-format
+msgid ""
+" %-10s Search backward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+" %-10s å‘åŽæœç´¢æŒ‡å®šçš„字符串,\n"
+" 并选择所找到的下一个实例所在的节点。\n"
+
+#: info/infodoc.c:312
+msgid "The current search path is:\n"
+msgstr "当å‰æœç´¢è·¯å¾„为:\n"
+
+#: info/infodoc.c:316
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"Info 窗å£ä¸­å¯ç”¨çš„命令:\n"
+"\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"回显区中å¯ç”¨çš„命令:\n"
+"\n"
+
+#: info/infodoc.c:343
+#, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+"以下命令åªèƒ½é€šè¿‡ %s 调用:\n"
+"\n"
+
+#: info/infodoc.c:347
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+"以下命令根本无法调用:\n"
+"\n"
+
+#: info/infodoc.c:477
+msgid "Display help message"
+msgstr "显示求助消æ¯"
+
+#: info/infodoc.c:495
+msgid "Visit Info node `(info)Help'"
+msgstr "访问 Info 节点“(info)Helpâ€"
+
+#: info/infodoc.c:633
+msgid "Print documentation for KEY"
+msgstr "打å°å…³äºŽ KEY 的文档"
+
+#: info/infodoc.c:645
+#, c-format
+msgid "Describe key: %s"
+msgstr "说明按键:%s"
+
+#: info/infodoc.c:656
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s 未定义。"
+
+#: info/infodoc.c:672 info/infodoc.c:701
+#, c-format
+msgid "%s is undefined."
+msgstr "%s 未定义。"
+
+#: info/infodoc.c:722
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s 被定义为 %s。"
+
+#: info/infodoc.c:1146
+msgid "Show what to type to execute a given command"
+msgstr "显示执行给定命令所需的按键"
+
+#: info/infodoc.c:1150
+msgid "Where is command: "
+msgstr "命令为:"
+
+#: info/infodoc.c:1172
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "“%sâ€æœªç»‘定到任何按键"
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s ä¸èƒ½é€šè¿‡ %s 调用。"
+
+#: info/infodoc.c:1183
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s å¯ä»¥é€šè¿‡ %s 调用。"
+
+#: info/infodoc.c:1188
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "没有å为“%sâ€çš„函数"
+
+#: info/infodoc.c:96
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"选择其它节点:\n"
+"----------------------\n"
+
+#: info/infokey.c:170
+msgid "incorrect number of arguments"
+msgstr "错误的å‚æ•°æ•°"
+
+#: info/infokey.c:201
+#, c-format
+msgid "cannot open input file `%s'"
+msgstr "无法打开输入文件“%sâ€"
+
+#: info/infokey.c:215
+#, c-format
+msgid "cannot create output file `%s'"
+msgstr "无法创建输出文件“%sâ€"
+
+#: info/infokey.c:226
+#, c-format
+msgid "error writing to `%s'"
+msgstr "写入“%sâ€æ—¶å‡ºé”™"
+
+#: info/infokey.c:232
+#, c-format
+msgid "error closing output file `%s'"
+msgstr "关闭输出文件“%sâ€æ—¶å‡ºé”™"
+
+#: info/infokey.c:450
+msgid "key sequence too long"
+msgstr "按键åºåˆ—过长"
+
+#: info/infokey.c:529
+msgid "missing key sequence"
+msgstr "é—æ¼æŒ‰é”®åºåˆ—"
+
+#: info/infokey.c:610
+msgid "NUL character (\\000) not permitted"
+msgstr "ä¸å…许的空字符 (\\\\000)"
+
+#: info/infokey.c:641
+#, c-format
+msgid "NUL character (^%c) not permitted"
+msgstr "ä¸å…许的空字符 (^%c)"
+
+#: info/infokey.c:665
+msgid "missing action name"
+msgstr "é—æ¼åŠ¨ä½œå称"
+
+#: info/infokey.c:681 info/infokey.c:756
+msgid "section too long"
+msgstr "节太长"
+
+#: info/infokey.c:688
+#, c-format
+msgid "unknown action `%s'"
+msgstr "未知的动作“%sâ€"
+
+#: info/infokey.c:698
+msgid "action name too long"
+msgstr "动作å过长"
+
+#: info/infokey.c:712
+#, c-format
+msgid "extra characters following action `%s'"
+msgstr "动作“%sâ€ä¹‹åŽå‡ºçŽ°é¢å¤–的字符"
+
+#: info/infokey.c:723
+msgid "missing variable name"
+msgstr "é—æ¼å˜é‡å"
+
+#: info/infokey.c:733
+msgid "missing `=' immediately after variable name"
+msgstr "å˜é‡å之åŽé—æ¼äº†â€œ=â€"
+
+#: info/infokey.c:741
+msgid "variable name too long"
+msgstr "å˜é‡å过长"
+
+#: info/infokey.c:765
+msgid "value too long"
+msgstr "值过长"
+
+#: info/infokey.c:890
+#, c-format
+msgid "\"%s\", line %u: "
+msgstr "“%sâ€ï¼Œè¡Œ %u:"
+
+#: info/infokey.c:906
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [INPUT-FILE]\n"
+"\n"
+"Compile infokey source file to infokey file. Reads INPUT-FILE (default\n"
+"$HOME/.infokey) and writes compiled key file to (by default) $HOME/.info.\n"
+"\n"
+"Options:\n"
+" --output FILE output to FILE instead of $HOME/.info\n"
+" --help display this help and exit.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"用法:%s [选项]... [输入文件]\n"
+"\n"
+"å°† infokey æºæ–‡ä»¶ç¼–译为 infokey 文件。读å–输入文件(默认为\n"
+"$HOME/.infokey) 并将编译完æˆçš„键文件写入到 (默认为) $HOME/.info。\n"
+"\n"
+"选项:\n"
+" --output FILE 输出到文件 FILE 而ä¸æ˜¯ $HOME/.info 中。\n"
+" --help 显示该求助信æ¯å¹¶é€€å‡ºã€‚\n"
+" --version 显示版本信æ¯å¹¶é€€å‡ºã€‚\n"
+
+#: info/infomap.c:955
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "忽略éžæ³•çš„ infokey 文件“%s†- 太å°"
+
+#: info/infomap.c:958
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "忽略éžæ³•çš„ infokey 文件“%s†- 太大"
+
+#: info/infomap.c:971
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "读入 infokey 文件“%sâ€æ—¶å‡ºé”™ - 读入中断"
+
+#: info/infomap.c:990
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr "éžæ³•çš„ infokey 文件“%s†(错误的 magic ç¼–å·) -- è¿è¡Œ infokey 以便更新"
+
+#: info/infomap.c:999
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr "您的 infokey 文件“%s†过时了 -- è¿è¡Œ infokey 以便更新"
+
+#: info/infomap.c:1015
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr "éžæ³•çš„ infokey 文件“%s†(错误的节长度) -- è¿è¡Œ infokey 以便更新"
+
+#: info/infomap.c:1036
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr "éžæ³•çš„ infokey 文件“%s†(错误的节编ç ) -- è¿è¡Œ infokey 以便更新"
+
+#: info/infomap.c:1171
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr "infokey æ–‡ä»¶ä¸­çš„é”™è¯¯æ•°æ® -- 忽略æŸäº›æŒ‰é”®ç»‘定"
+
+#: info/infomap.c:1221
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr "infokey æ–‡ä»¶ä¸­çš„é”™è¯¯æ•°æ® -- 忽略æŸäº›å˜é‡è®¾ç½®"
+
+#: info/m-x.c:68
+msgid "Read the name of an Info command and describe it"
+msgstr "è¯»å– Info 命令å称并说明它"
+
+#: info/m-x.c:72
+msgid "Describe command: "
+msgstr "说明命令:"
+
+#: info/m-x.c:95
+msgid "Read a command name in the echo area and execute it"
+msgstr "在回显区读入命令å并执行它"
+
+#: info/m-x.c:139
+msgid "Cannot execute an `echo-area' command here."
+msgstr "无法在这里è¿è¡Œâ€œå›žæ˜¾åŒºâ€å‘½ä»¤ã€‚"
+
+#: info/m-x.c:153
+#, c-format
+msgid "Undefined command: %s"
+msgstr "未定义的命令: %s"
+
+#: info/m-x.c:159
+msgid "Set the height of the displayed window"
+msgstr "设定显示窗å£çš„高度"
+
+#: info/m-x.c:172
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "å°†å±å¹•é«˜åº¦è®¾ç½®ä¸º (%d):"
+
+#: info/makedoc.c:166 info/makedoc.c:174
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+" æ•´ç†æºæ–‡ä»¶ä»¥ä½¿æœ¬æ–‡ä»¶åŒ…括:\n"
+"\n"
+
+#: info/makedoc.c:556
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "无法æ“作文件 %s。\n"
+
+#: info/nodemenu.c:30
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+"\n"
+"* èœå•ï¼š\n"
+" (文件)节点 è¡Œ å¤§å° å«æœ‰æ–‡ä»¶\n"
+" ---------- ----- ---- ---------------"
+
+#: info/nodemenu.c:201
+msgid ""
+"Here is the menu of nodes you have recently visited.\n"
+"Select one from this menu, or use `\\[history-node]' in another window.\n"
+msgstr ""
+"这里是您最近访问节点的èœå•ã€‚\n"
+"从èœå•ä¸­é€‰æ‹©ä¸€ä¸ªï¼Œæˆ–在其它窗å£ä¸­ä½¿ç”¨â€œ\\[history-node]â€ã€‚\n"
+
+#: info/nodemenu.c:223
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr "使一个窗å£å«æœ‰ä¸€ä¸ªåŒ…括所有当å‰è®¿é—®èŠ‚点的èœå•"
+
+#: info/nodemenu.c:303
+msgid "Select a node which has been previously visited in a visible window"
+msgstr "选择一个已ç»åœ¨å¯è§çš„窗å£ä¸­è®¿é—®çš„节点"
+
+#: info/nodemenu.c:316
+msgid "Select visited node: "
+msgstr "选择已访问的节点:"
+
+#: info/nodemenu.c:336 info/session.c:2578
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "引用消失了ï¼(%s)。"
+
+#: info/search.c:166
+#, c-format
+msgid "regexp error: %s"
+msgstr "正则表达å¼é”™è¯¯: %s"
+
+#: info/session.c:164
+#, c-format
+msgid ""
+"Welcome to Info version %s. Type \\[get-help-window] for help, \\[menu-item] "
+"for menu item."
+msgstr ""
+"欢迎使用 Info %s 版。输入 \\[get-help-window] 以获得帮助,\\[menu-item] 将得"
+"到èœå•ã€‚"
+
+#: info/session.c:625
+msgid "Move down to the next line"
+msgstr "å‘下移动到下一行"
+
+#: info/session.c:661
+msgid "Move up to the previous line"
+msgstr "å‘上移动到上一行"
+
+#: info/session.c:931
+msgid "Move to the end of the line"
+msgstr "移动到行的末尾"
+
+#: info/session.c:942
+msgid "Move to the start of the line"
+msgstr "移动到行的开头"
+
+#: info/session.c:1142
+msgid "Next"
+msgstr "下一个"
+
+#: info/session.c:1158 info/session.c:1283
+msgid "No more nodes within this document."
+msgstr "本文档中没有更多的节点。"
+
+#: info/session.c:1309
+msgid "No `Prev' for this node."
+msgstr "本节点没有“上一个â€ã€‚"
+
+#: info/session.c:1329
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr "在本文档中没有本节点的“上一个â€æˆ–“上层â€èŠ‚点。"
+
+#: info/session.c:1391
+msgid "Move forwards or down through node structure"
+msgstr "在节点结构中å‘å‰æˆ–å‘下层移动"
+
+#: info/session.c:1407
+msgid "Move backwards or up through node structure"
+msgstr "在节点结构中å‘åŽæˆ–å‘上层移动"
+
+#: info/session.c:1508
+msgid "Scroll forward in this window"
+msgstr "在本窗å£ä¸­å‘å‰æ»šåŠ¨"
+
+#: info/session.c:1516
+msgid "Scroll forward in this window and set default window size"
+msgstr "在本窗å£ä¸­å‘å‰æ»šåŠ¨å¹¶è®¾ç½®ä¸ºé»˜è®¤çª—å£å¤§å°"
+
+#: info/session.c:1524
+msgid "Scroll forward in this window staying within node"
+msgstr "在本窗å£ä¸­å‘å‰æ»šåŠ¨(ä¸ç©¿è¶ŠèŠ‚点)"
+
+#: info/session.c:1532
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr "在本窗å£ä¸­å‘å‰æ»šåŠ¨(ä¸ç©¿è¶ŠèŠ‚点)并设置默认窗å£å¤§å°"
+
+#: info/session.c:1540
+msgid "Scroll backward in this window"
+msgstr "在本窗å£ä¸­å‘åŽæ»šåŠ¨"
+
+#: info/session.c:1548
+msgid "Scroll backward in this window and set default window size"
+msgstr "在本窗å£ä¸­å‘åŽæ»šåŠ¨å¹¶è®¾ç½®ä¸ºé»˜è®¤çª—å£å¤§å°"
+
+#: info/session.c:1557
+msgid "Scroll backward in this window staying within node"
+msgstr "在本窗å£ä¸­å‘åŽæ»šåŠ¨(ä¸ç©¿è¶ŠèŠ‚点)"
+
+#: info/session.c:1565
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr "在本窗å£ä¸­å‘åŽæ»šåŠ¨(ä¸ç©¿è¶ŠèŠ‚点)并设置为默认窗å£å¤§å°"
+
+#: info/session.c:1573
+msgid "Move to the start of this node"
+msgstr "移动到本节点的开头"
+
+#: info/session.c:1580
+msgid "Move to the end of this node"
+msgstr "移动到本节点的末尾"
+
+#: info/session.c:1587
+msgid "Scroll down by lines"
+msgstr "按行å‘下滚动"
+
+#: info/session.c:1604
+msgid "Scroll up by lines"
+msgstr "按行å‘上滚动"
+
+#: info/session.c:1622
+msgid "Scroll down by half screen size"
+msgstr "å‘下滚动åŠä¸ªå±å¹•"
+
+#: info/session.c:1648
+msgid "Scroll up by half screen size"
+msgstr "å‘上滚动åŠä¸ªå±å¹•"
+
+#: info/session.c:1677
+msgid "Select the next window"
+msgstr "选择下一个窗å£"
+
+#: info/session.c:1716
+msgid "Select the previous window"
+msgstr "选择上一个窗å£"
+
+#: info/session.c:1767
+msgid "Split the current window"
+msgstr "拆分当å‰çª—å£"
+
+#: info/session.c:1848
+msgid "Delete the current window"
+msgstr "删除当å‰çª—å£"
+
+#: info/session.c:1856
+msgid "Cannot delete a permanent window"
+msgstr "无法删除永久窗å£"
+
+#: info/session.c:1888
+msgid "Delete all other windows"
+msgstr "删除所有其它窗å£"
+
+#: info/session.c:1934
+msgid "Scroll the other window"
+msgstr "滚动其它窗å£"
+
+#: info/session.c:1955
+msgid "Scroll the other window backward"
+msgstr "å‘åŽæ»šåŠ¨å…¶å®ƒçª—å£"
+
+#: info/session.c:1961
+msgid "Grow (or shrink) this window"
+msgstr "扩大(或缩å°)本窗å£"
+
+#: info/session.c:1972
+msgid "Divide the available screen space among the visible windows"
+msgstr "在å¯è§çš„窗å£é—´åˆ†é…å¯ç”¨çš„å±å¹•ç©ºé—´"
+
+#: info/session.c:1979
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "在当å‰çª—å£ä¸­åˆ‡æ¢è¡Œå·ç»•çŠ¶æ€"
+
+#: info/session.c:1986
+msgid "Toggle the usage of regular expressions in searches"
+msgstr "切æ¢æŸ¥å¯»æ—¶æ­£åˆ™è¡¨è¾¾å¼çš„用法"
+
+#: info/session.c:1990
+msgid "Using regular expressions for searches."
+msgstr "使用正则表达å¼æ¥æŸ¥å¯»"
+
+#: info/session.c:1991
+msgid "Using literal strings for searches."
+msgstr "使用普通字符串æ¥æŸ¥å¯»"
+
+#: info/session.c:2162
+msgid "Select the Next node"
+msgstr "选择下一个节点"
+
+#: info/session.c:2170
+msgid "Select the Prev node"
+msgstr "选择上一个节点"
+
+#: info/session.c:2178
+msgid "Select the Up node"
+msgstr "选择上层节点"
+
+#: info/session.c:2185
+msgid "Select the last node in this file"
+msgstr "选择本文件的最åŽä¸€ä¸ªèŠ‚点"
+
+#: info/session.c:2212 info/session.c:2245
+msgid "This window has no additional nodes"
+msgstr "该窗å£æ²¡æœ‰é™„加节点"
+
+#: info/session.c:2218
+msgid "Select the first node in this file"
+msgstr "选择本文件的第一个节点"
+
+#: info/session.c:2252
+msgid "Select the last item in this node's menu"
+msgstr "选择本节点èœå•ä¸­çš„最åŽä¸€é¡¹"
+
+#: info/session.c:2258
+msgid "Select this menu item"
+msgstr "选择本èœå•é¡¹ç›®"
+
+#: info/session.c:2291
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "本èœå•ä¸­æ²¡æœ‰ç¬¬ %d 个项目。"
+
+#: info/session.c:2485 info/session.c:2486
+#, c-format
+msgid "Menu item (%s): "
+msgstr "èœå•é¡¹ (%s):"
+
+#: info/session.c:2489
+msgid "Menu item: "
+msgstr "èœå•é¡¹ï¼š"
+
+#: info/session.c:2496 info/session.c:2497
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "è·Ÿéšäº¤å‰å¼•ç”¨ (%s):"
+
+#: info/session.c:2500
+msgid "Follow xref: "
+msgstr "è·Ÿéšäº¤å‰å¼•ç”¨ï¼š"
+
+#: info/session.c:2629
+msgid "Read a menu item and select its node"
+msgstr "读å–èœå•é¡¹å¹¶é€‰æ‹©å®ƒçš„节点"
+
+#: info/session.c:2637
+msgid "Read a footnote or cross reference and select its node"
+msgstr "读å–脚注或交å‰å¼•ç”¨å¹¶é€‰æ‹©å®ƒçš„节点"
+
+#: info/session.c:2643
+msgid "Move to the start of this node's menu"
+msgstr "移动到本节点èœå•çš„开头"
+
+#: info/session.c:2667
+msgid "Visit as many menu items at once as possible"
+msgstr "立刻访问尽å¯èƒ½å¤šçš„èœå•é¡¹"
+
+#: info/session.c:2695
+msgid "Read a node name and select it"
+msgstr "读å–节点å并选择它"
+
+#: info/session.c:2750 info/session.c:2755
+msgid "Goto node: "
+msgstr "转到节点:"
+
+#: info/session.c:2819
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "节点“%sâ€ä¸­æ²¡æœ‰èœå•ã€‚"
+
+#: info/session.c:2865
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "节点“%2$sâ€ä¸­æ²¡æœ‰èœå•é¡¹â€œ%1$sâ€ã€‚"
+
+#: info/session.c:2895
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr "无法在“%2$sâ€ä¸­æ‰¾åˆ°ç”±â€œ%1$sâ€å¼•ç”¨çš„节点。"
+
+#: info/session.c:2945
+msgid "Read a list of menus starting from dir and follow them"
+msgstr "读å–自 dir 开始的èœå•çš„列表并跟éšå®ƒä»¬"
+
+#: info/session.c:2947
+msgid "Follow menus: "
+msgstr "è·Ÿéšèœå•ï¼š"
+
+#: info/session.c:3140
+msgid "Find the node describing program invocation"
+msgstr "寻找说明程åºè°ƒç”¨çš„节点"
+
+#: info/session.c:3142
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "寻找 [%s] 的调用节点:"
+
+#: info/session.c:3180
+msgid "Read a manpage reference and select it"
+msgstr "读å–一个 man 手册的引用并选择它"
+
+#: info/session.c:3184
+msgid "Get Manpage: "
+msgstr "èŽ·å– man 手册:"
+
+#: info/session.c:3214
+msgid "Select the node `Top' in this file"
+msgstr "选择本文件中的“顶â€èŠ‚点"
+
+#: info/session.c:3220
+msgid "Select the node `(dir)'"
+msgstr "选择节点“(dir)â€"
+
+#: info/session.c:3237 info/session.c:3239
+#, c-format
+msgid "Kill node (%s): "
+msgstr "删除节点 (%s):"
+
+#: info/session.c:3291
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "无法删除节点“%sâ€"
+
+#: info/session.c:3301
+msgid "Cannot kill the last node"
+msgstr "无法删除最åŽçš„节点"
+
+#: info/session.c:3387
+msgid "Select the most recently selected node"
+msgstr "选择最近选择的节点"
+
+#: info/session.c:3393
+msgid "Kill this node"
+msgstr "删除本节点"
+
+#: info/session.c:3401
+msgid "Read the name of a file and select it"
+msgstr "读å–文件å并选择它"
+
+#: info/session.c:3405
+msgid "Find file: "
+msgstr "寻找文件:"
+
+#: info/session.c:3422
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "无法寻找“%sâ€ã€‚"
+
+#: info/session.c:3465 info/session.c:3583
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "无法创建输出文件“%sâ€ã€‚"
+
+#: info/session.c:3479 info/session.c:3601 info/session.c:3661
+msgid "Done."
+msgstr "完æˆã€‚"
+
+#: info/session.c:3534
+#, c-format
+msgid "Writing node %s..."
+msgstr "正在写入节点 %s..."
+
+#: info/session.c:3610
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr "通过管é“将本节点的内容输出到 INFO_PRINT_COMMAND"
+
+#: info/session.c:3645
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "无法打开到“%sâ€çš„管é“。"
+
+#: info/session.c:3651
+#, c-format
+msgid "Printing node %s..."
+msgstr "正在打å°èŠ‚点 %s..."
+
+#: info/session.c:3900
+msgid "Search continued from the end of the document."
+msgstr "从文档底部继续查寻。"
+
+#: info/session.c:3905
+msgid "Search continued from the beginning of the document."
+msgstr "从此文档的开头继续查找。"
+
+#: info/session.c:3922
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "正在æœç´¢å­æ–‡ä»¶ %s ..."
+
+#: info/session.c:3979
+msgid "Read a string and search for it case-sensitively"
+msgstr "读å–一个字符串并以大å°å†™æ•æ„Ÿçš„æ–¹å¼æœç´¢å®ƒ"
+
+#: info/session.c:3986
+msgid "Read a string and search for it"
+msgstr "读å–一个字符串并æœç´¢å®ƒ"
+
+#: info/session.c:3994
+msgid "Read a string and search backward for it"
+msgstr "读å–一个字符串并å‘åŽæœç´¢å®ƒ"
+
+#: info/session.c:4030 info/session.c:4036
+#, c-format
+msgid "%s%s%s [%s]: "
+msgstr "%s%s%s [%s]: "
+
+#: info/session.c:4031 info/session.c:4037
+msgid "Regexp search"
+msgstr "正则表达å¼æŸ¥æ‰¾"
+
+#: info/session.c:4032 info/session.c:4038
+msgid " case-sensitively"
+msgstr "大å°å†™æ•æ„Ÿ"
+
+#: info/session.c:4033 info/session.c:4039
+msgid " backward"
+msgstr "å‘åŽæœç´¢"
+
+#: info/session.c:4037
+msgid "Search"
+msgstr "æœç´¢"
+
+#: info/session.c:4079
+msgid "Search failed."
+msgstr "æœç´¢å¤±è´¥ã€‚"
+
+#: info/session.c:4097
+msgid "Repeat last search in the same direction"
+msgstr "以相åŒçš„æ–¹å‘é‡å¤æœ€åŽçš„æœç´¢"
+
+#: info/session.c:4100 info/session.c:4110
+msgid "No previous search string"
+msgstr "没有上次æœç´¢å­—符串"
+
+#: info/session.c:4107
+msgid "Repeat last search in the reverse direction"
+msgstr "以相åçš„æ–¹å‘é‡å¤æœ€åŽçš„æœç´¢"
+
+#: info/session.c:4126 info/session.c:4132
+msgid "Search interactively for a string as you type it"
+msgstr "在你输入的åŒæ—¶äº¤äº’å¼åœ°æœç´¢å­—符串"
+
+#: info/session.c:4212
+msgid "Regexp I-search backward: "
+msgstr "å‘åŽå¢žé‡æœç´¢æ­£åˆ™è¡¨è¾¾å¼: "
+
+#: info/session.c:4213
+msgid "I-search backward: "
+msgstr "å‘åŽå¢žé‡æœç´¢ï¼š"
+
+#: info/session.c:4215
+msgid "Regexp I-search: "
+msgstr "增é‡æœç´¢æ­£åˆ™è¡¨è¾¾å¼: "
+
+#: info/session.c:4216
+msgid "I-search: "
+msgstr "增é‡æœç´¢ï¼š"
+
+#: info/session.c:4241 info/session.c:4243
+msgid "Failing "
+msgstr "失败 "
+
+#: info/session.c:4734
+msgid "Move to the previous cross reference"
+msgstr "移动到上一个交å‰å¼•ç”¨"
+
+#: info/session.c:4752
+msgid "Move to the next cross reference"
+msgstr "移动到下一个交å‰å¼•ç”¨"
+
+#: info/session.c:4774
+msgid "Select reference or menu item appearing on this line"
+msgstr "选择出现在本行中的引用或èœå•é¡¹"
+
+#: info/session.c:4797
+msgid "Cancel current operation"
+msgstr "å–消当å‰æ“作"
+
+#: info/session.c:4804
+msgid "Quit"
+msgstr "退出"
+
+#: info/session.c:4813
+msgid "Move the cursor to a specific line of the window"
+msgstr "将光标移动到窗å£çš„指定行"
+
+#: info/session.c:4845
+msgid "Redraw the display"
+msgstr "é‡ç”»æ˜¾ç¤º"
+
+#: info/session.c:4882
+msgid "Quit using Info"
+msgstr "退出 Info"
+
+#: info/session.c:4895
+msgid "Run command bound to this key's lowercase variant"
+msgstr "è¿è¡Œåˆ°ç»‘定到本按键的å°å†™ç‰ˆæœ¬çš„命令"
+
+#: info/session.c:4906
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "未知的命令 (%s)。"
+
+#: info/session.c:4909
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "“%sâ€ä¸ºéžæ³•"
+
+#: info/session.c:4910
+#, c-format
+msgid "`%s' is invalid"
+msgstr "“%sâ€æ˜¯æ— æ•ˆçš„"
+
+#: info/session.c:5125
+msgid "Add this digit to the current numeric argument"
+msgstr "将本数字添加到当å‰æ•°å€¼å‚数中"
+
+#: info/session.c:5134
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "å¼€å¯(或乘以 4)当å‰æ•°å€¼å‚æ•°"
+
+#: info/session.c:5149
+msgid "Internally used by \\[universal-argument]"
+msgstr "由 \\[universal-argument] 内部使用"
+
+#: info/tilde.c:336
+#, c-format
+msgid "readline: Out of virtual memory!\n"
+msgstr "readline:虚拟内存耗尽ï¼\n"
+
+#: info/variables.c:37
+msgid "When \"On\", footnotes appear and disappear automatically"
+msgstr "在“开â€æ—¶ï¼Œè„šæ³¨å°†è‡ªåŠ¨å‡ºçŽ°æˆ–消失"
+
+#: info/variables.c:41
+msgid "When \"On\", creating or deleting a window resizes other windows"
+msgstr "在“开â€æ—¶ï¼Œåˆ›å»ºæˆ–删除窗å£æ—¶æ”¹å˜å…¶å®ƒçª—å£çš„大å°"
+
+#: info/variables.c:45
+msgid "When \"On\", flash the screen instead of ringing the bell"
+msgstr "在“开â€æ—¶ï¼Œå°†åˆ·æ–°å±å¹•è€Œä¸æ˜¯é¸£ç¬›"
+
+#: info/variables.c:49
+msgid "When \"On\", errors cause the bell to ring"
+msgstr "在“开â€æ—¶ï¼Œå‡ºé”™æ—¶å°†é¸£ç¬›"
+
+#: info/variables.c:53
+msgid "When \"On\", Info garbage collects files which had to be uncompressed"
+msgstr "在“开â€æ—¶ï¼ŒInfo 垃圾收集那些必须解压缩的文件"
+
+#: info/variables.c:56
+msgid "When \"On\", the portion of the matched search string is highlighted"
+msgstr "在“开â€æ—¶ï¼Œæœç´¢å­—符串的匹é…部分将被çªå‡ºæ˜¾ç¤º"
+
+#: info/variables.c:60
+msgid "Controls what happens when scrolling is requested at the end of a node"
+msgstr "控制在节点末尾时出现滚动请求将å‘生什么"
+
+#: info/variables.c:65
+msgid "Same as scroll-behaviour"
+msgstr "ç­‰åŒäºŽæ»šåŠ¨è¡Œä¸º"
+
+#: info/variables.c:69
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr "当光标移出窗å£æ˜¯æ‰€æ»šåŠ¨çš„行数"
+
+#: info/variables.c:73
+msgid "Controls whether scroll-behavior affects cursor movement commands"
+msgstr "控制滚动行为是å¦å½±å“光标移动命令"
+
+#: info/variables.c:77
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr "在“开â€æ—¶ï¼ŒInfo 接å—并显示 ISO 拉ä¸å­—符"
+
+#: info/variables.c:81
+msgid ""
+"What to do when a scrolling command is issued at the end of the last node"
+msgstr "控制在最åŽä¸€ä¸ªèŠ‚点的末尾出现滚动请求时将å‘生什么"
+
+#: info/variables.c:88
+msgid "Explain the use of a variable"
+msgstr "解释å˜é‡çš„用法"
+
+#: info/variables.c:94
+msgid "Describe variable: "
+msgstr "说明å˜é‡ï¼š"
+
+#: info/variables.c:113
+msgid "Set the value of an Info variable"
+msgstr "设定 Info å˜é‡çš„值"
+
+#: info/variables.c:119
+msgid "Set variable: "
+msgstr "设定å˜é‡ï¼š"
+
+#: info/variables.c:137
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "将 %s 设定为值 (%d):"
+
+#: info/variables.c:178
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "将 %s 设定为值 (%s):"
+
+#: info/window.c:1026
+msgid "--*** Tags out of Date ***"
+msgstr "--*** 标记过期 ***"
+
+#: info/window.c:1037
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info:(),行 ----,"
+
+#: info/window.c:1044
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info:%s,%d 行 --%s--"
+
+#: info/window.c:1048
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info:(%s)%s,%d 行 --%s--"
+
+#: info/window.c:1055
+#, c-format
+msgid " Subfile: %s"
+msgstr " å­æ–‡ä»¶ï¼š%s"
+
+#: install-info/install-info.c:221
+#, c-format
+msgid "%s: warning: "
+msgstr "%s:警告:"
+
+#: install-info/install-info.c:270
+#, c-format
+msgid " for %s"
+msgstr " %s"
+
+#: install-info/install-info.c:500
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr "\t试用“%s --helpâ€ä»¥èŽ·å¾—选项的完整列表。\n"
+
+#: install-info/install-info.c:508
+#, c-format
+msgid "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+msgstr "用法: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+
+#: install-info/install-info.c:510
+msgid "Add or remove entries in INFO-FILE from the Info directory DIR-FILE."
+msgstr "从 Info 目录 DIR-FILE çš„ INFO-FILE 文件中添加或移除æ¡ç›®ã€‚"
+
+#: install-info/install-info.c:513
+msgid ""
+"Options:\n"
+" --debug report what is being done.\n"
+" --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+" don't insert any new entries.\n"
+" --description=TEXT the description of the entry is TEXT; used with\n"
+" the --name option to become synonymous with the\n"
+" --entry option.\n"
+" --dir-file=NAME specify file name of Info directory file;\n"
+" equivalent to using the DIR-FILE argument.\n"
+" --dry-run same as --test."
+msgstr ""
+"选项:\n"
+" --debug 报告正在处ç†çš„事。\n"
+" --delete 从 DIR-FILE 中删除存在的 INFO-FILE æ¡ç›®ï¼›\n"
+" ä¸æ’入任何新的æ¡ç›®ã€‚\n"
+" --description=TEXT æ¡ç›®çš„说明为 TEXT;与 --name 选项\n"
+" åŒç”¨è·Ÿä¸Ž --entry 选项åŒç”¨\n"
+" 是一样的。\n"
+" --dir-file=NAME 指定 Info 目录文件的文件åï¼›\n"
+" ç­‰åŒäºŽä½¿ç”¨ DIR-FILE å‚数。\n"
+" --dry-run ç­‰åŒäºŽ --test。"
+
+#: install-info/install-info.c:525
+msgid ""
+" --entry=TEXT insert TEXT as an Info directory entry.\n"
+" TEXT is written as an Info menu item line followed\n"
+" by zero or more extra lines starting with "
+"whitespace.\n"
+" If you specify more than one entry, all are added.\n"
+" If you don't specify any entries, they are determined\n"
+" from information in the Info file itself.\n"
+" When removing, TEXT specifies the entry to remove.\n"
+" TEXT is only removed as a last resort, if the\n"
+" entry as determined from the Info file is not "
+"present,\n"
+" and the basename of the Info file isn't found either."
+msgstr ""
+" --entry=TEXT æ’å…¥ TEXT 作为一个 Info 目录æ¡ç›®ã€‚\n"
+" 所写入的 TEXT è¦ä½œä¸ºä¸€ä¸ª Info èœå•é¡¹åŽè·Ÿ\n"
+" 0 个或多个以空格开始的行。\n"
+" 如果您指定一个以上的æ¡ç›®ï¼Œå°†æ·»åŠ æ‰€æœ‰æ¡ç›®ã€‚\n"
+" 如果您未指定任何æ¡ç›®ï¼Œå®ƒä»¬ç”±æ¥è‡ª Info 文件\n"
+" 自身的信æ¯å†³å®šã€‚\n"
+" 删除时, TEXT 指定了è¦åˆ é™¤çš„æ¡ç›®ã€‚\n"
+" 仅当 Info 文件中作为删除定义的æ¡ç›®ä¸å­˜åœ¨ï¼Œ\n"
+" 并且还找ä¸åˆ° Info 文件的目录å,\n"
+"\t\t\té‚£ TEXT æ‰ä¼šä½œä¸ºæœ€åŽçš„删除手段。"
+
+#: install-info/install-info.c:537
+msgid ""
+" --help display this help and exit.\n"
+" --info-dir=DIR same as --dir-file=DIR/dir.\n"
+" --info-file=FILE specify Info file to install in the directory;\n"
+" equivalent to using the INFO-FILE argument.\n"
+" --item=TEXT same as --entry=TEXT.\n"
+" --keep-old do not replace entries, or remove empty sections.\n"
+" --menuentry=TEXT same as --name=TEXT.\n"
+" --name=TEXT the name of the entry is TEXT; used with --description\n"
+" to become synonymous with the --entry option.\n"
+" --no-indent do not format new entries in the DIR file.\n"
+" --quiet suppress warnings."
+msgstr ""
+" --help 显示此帮助并退出。\n"
+" --info-dir=DIR ç­‰åŒäºŽ --dir-file=DIR/dir。\n"
+" --info-file=FILE 在目录中指定è¦å®‰è£…çš„ Info 文件;\n"
+" ç­‰åŒäºŽä½¿ç”¨ INFO-FILE å‚数。\n"
+" --item=TEXT ç­‰åŒäºŽ --entry=TEXT。\n"
+" --keep-old ä¸è¦æ›¿æ¢æ¡ç›®ï¼Œæˆ–是删除空白字段。\n"
+" --menuentry=TEXT ç­‰åŒäºŽ --name=TEXT。\n"
+" --name=TEXT æ¡ç›®å为 TEXT;与 --description åŒç”¨\n"
+" 跟与 --entry 选项åŒç”¨æ˜¯ä¸€æ ·çš„。\n"
+" --no-indent ä¸è¦åœ¨ DIR 文件中格å¼åŒ–æ–°çš„æ¡ç›®ã€‚\n"
+" --quiet ä¸è¦è¾“出警告。"
+
+#: install-info/install-info.c:550
+msgid ""
+" --regex=R put this file's entries in all sections that match the\n"
+" regular expression R (ignoring case).\n"
+" --remove same as --delete.\n"
+" --remove-exactly only remove if the info file name matches exactly;\n"
+" suffixes such as .info and .gz are not ignored.\n"
+" --section=SEC put entries in section SEC of the directory.\n"
+" If you specify more than one section, all the entries\n"
+" are added in each of the sections.\n"
+" If you don't specify any sections, they are "
+"determined\n"
+" from information in the Info file itself.\n"
+" --section R SEC equivalent to --regex=R --section=SEC --add-once."
+msgstr ""
+" --regex=R 将此文件的æ¡ç›®æ”¾å…¥æ‰€æœ‰åŒ¹é…正则表达å¼\n"
+"\t\t\t R(忽略大å°å†™)的字段。\n"
+" --remove ç­‰åŒäºŽ --delete。\n"
+" --remove-exactly ä»…å½“å®Œå…¨åŒ¹é… info 文件åæ—¶æ‰åˆ é™¤ï¼›\n"
+" ä¸è¦å¿½ç•¥ç±»ä¼¼ .info å’Œ .gz 这样的åŽç¼€ã€‚\n"
+" --section=SEC å°†æ¡ç›®æ”¾å…¥ç›®å½•çš„ SEC 字段。\n"
+" 如果您指定一个以上的字段,所有的æ¡ç›®å°†è¢«æ·»åŠ è‡³\n"
+" æ¯ä¸ªå­—段。\n"
+" 如果您未指定任何字段,它们将由 Info 文件\n"
+" 自身的信æ¯æ¥å†³å®šã€‚\n"
+" --section R SEC ç­‰åŒäºŽ --regex=R --section=SEC --add-once。"
+
+#: install-info/install-info.c:563
+msgid ""
+" --silent suppress warnings.\n"
+" --test suppress updating of DIR-FILE.\n"
+" --version display version information and exit."
+msgstr ""
+" --silent ä¸è¾“出警告。\n"
+" --test ä¸æ›´æ–° DIR-FILE。\n"
+" --version 显示版本信æ¯å¹¶é€€å‡ºã€‚"
+
+#: install-info/install-info.c:570
+msgid ""
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"请将错误报告å‘é€åˆ° bug-texinfo@gnu.org,\n"
+"一般的问题和讨论请å‘é€åˆ° help-texinfo@gnu.org。\n"
+"Texinfo 主页:http://www.gnu.org/software/texinfo/"
+
+#: install-info/install-info.c:597
+#, c-format
+msgid ""
+"This is the file .../info/dir, which contains the\n"
+"topmost node of the Info hierarchy, called (dir)Top.\n"
+"The first time you invoke Info you start off looking at this node.\n"
+"\n"
+"%s\tThis is the top of the INFO tree\n"
+"\n"
+" This (the Directory node) gives a menu of major topics.\n"
+" Typing \"q\" exits, \"?\" lists all Info commands, \"d\" returns here,\n"
+" \"h\" gives a primer for first-timers,\n"
+" \"mEmacs<Return>\" visits the Emacs manual, etc.\n"
+"\n"
+" In Emacs, you can click mouse button 2 on a menu item or cross reference\n"
+" to select it.\n"
+"\n"
+"%s\n"
+msgstr ""
+"这是文件 .../info/dir,它å«æœ‰ Info 层次\n"
+"结构的最顶层节点,称为 (dir)Top。\n"
+"您第一次调用 Info 您将从该节点开始。\n"
+"\n"
+"%s\t这是 INFO 树的顶\n"
+"\n"
+" 这里 (the Directory node) 给出了主è¦ä¸»é¢˜çš„èœå•ã€‚\n"
+" 输入“qâ€å°†é€€å‡ºï¼Œè¾“入“?â€å°†åˆ—举所有 Info 命令,输入\n"
+" “dâ€å°†è¿”回这里。输入“hâ€å°†ç»™åˆæ¬¡ä½¿ç”¨çš„用户一个摘è¦ï¼Œ\n"
+" 输入“mEmacs<Return>â€å°†è®¿é—® Emacs 手册,等等。\n"
+"\n"
+" 在 Emacs中,您å¯ä»¥åœ¨èœå•é¡¹ç›®æˆ–交å‰å¼•ç”¨ä¸Šç‚¹å‡»é¼ æ ‡å³é”®ä»¥\n"
+" 选择它。\n"
+"\n"
+"%s\n"
+
+#: install-info/install-info.c:622
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr "%s:å³æ— æ³•è¯»å…¥ (%s) 也无法创建 (%s)\n"
+
+#: install-info/install-info.c:715
+#, c-format
+msgid "%s: empty file"
+msgstr "%s:空文件"
+
+#: install-info/install-info.c:1046 install-info/install-info.c:1086
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "START-INFO-DIR-ENTRY 没有匹é…çš„ END-INFO-DIR-ENTRY"
+
+#: install-info/install-info.c:1081
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "END-INFO-DIR-ENTRY 没有匹é…çš„ START-INFO-DIR-ENTRY"
+
+#: install-info/install-info.c:1946 install-info/install-info.c:1956
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr "%s: å·²ç»å­˜åœ¨äº† dir 文件: %s\n"
+
+#: install-info/install-info.c:2036
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s:Info 文件åªåº”该指定一次。\n"
+
+#: install-info/install-info.c:2069
+#, c-format
+msgid "Extra regular expression specified, ignoring `%s'"
+msgstr "指定了é¢å¤–的正则表达å¼ï¼Œå¿½ç•¥ “%sâ€"
+
+#: install-info/install-info.c:2081
+#, c-format
+msgid "Error in regular expression `%s': %s"
+msgstr "正则表达å¼â€œ%sâ€ä¸­å­˜åœ¨é”™è¯¯: %s"
+
+#: install-info/install-info.c:2139
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "多余的命令行å‚数“%sâ€"
+
+#: install-info/install-info.c:2143
+msgid "No input file specified; try --help for more information."
+msgstr "没有指定输出文件;试用 --help 以获得更多信æ¯ã€‚"
+
+#: install-info/install-info.c:2146
+msgid "No dir file specified; try --help for more information."
+msgstr "没有指定目录文件;试用 --help 以获得更多信æ¯ã€‚"
+
+#: install-info/install-info.c:2288
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "“%sâ€ä¸­æ²¡æœ‰ info 目录æ¡ç›®"
+
+#: install-info/install-info.c:2536
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "找ä¸åˆ°å…³äºŽâ€œ%sâ€çš„æ¡ç›®ï¼›æœªåˆ é™¤"
+
+#: lib/xexit.c:54
+msgid "ferror on stdout\n"
+msgstr "标准输出上 ferror 错误\n"
+
+#: lib/xexit.c:59
+msgid "fflush error on stdout\n"
+msgstr "标准输出上 fflush 错误\n"
+
+#: makeinfo/cmds.c:582 makeinfo/cmds.c:604
+#, c-format
+msgid "arguments to @%s ignored"
+msgstr "@%s çš„å‚数被忽略了"
+
+#: makeinfo/cmds.c:779
+msgid "January"
+msgstr "一月"
+
+#: makeinfo/cmds.c:779
+msgid "February"
+msgstr "二月"
+
+#: makeinfo/cmds.c:779
+msgid "March"
+msgstr "三月"
+
+#: makeinfo/cmds.c:779
+msgid "April"
+msgstr "四月"
+
+#: makeinfo/cmds.c:779
+msgid "May"
+msgstr "五月"
+
+#: makeinfo/cmds.c:780
+msgid "June"
+msgstr "六月"
+
+#: makeinfo/cmds.c:780
+msgid "July"
+msgstr "七月"
+
+#: makeinfo/cmds.c:780
+msgid "August"
+msgstr "八月"
+
+#: makeinfo/cmds.c:780
+msgid "September"
+msgstr "ä¹æœˆ"
+
+#: makeinfo/cmds.c:780
+msgid "October"
+msgstr "å月"
+
+#: makeinfo/cmds.c:781
+msgid "November"
+msgstr "å一月"
+
+#: makeinfo/cmds.c:781
+msgid "December"
+msgstr "å二月"
+
+#: makeinfo/cmds.c:1131
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "@var 中ä¸å¯é çš„字符 %c"
+
+#: makeinfo/cmds.c:1174
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "@sc çš„å‚数全部为大写,因此无效"
+
+#: makeinfo/cmds.c:1229
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "应为“{â€ï¼Œä½†çœ‹åˆ°äº†â€œ%câ€"
+
+#: makeinfo/cmds.c:1269
+msgid "end of file inside verb block"
+msgstr "文件在原文å—中结æŸ"
+
+#: makeinfo/cmds.c:1277
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "应为“}â€ï¼Œä½†çœ‹åˆ°äº†â€œ%câ€"
+
+#: makeinfo/cmds.c:1308
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr "@strong{Note...} 在 Info 中形æˆäº†ä¸€ä¸ªå‡çš„交å‰å¼•ç”¨ï¼›å¯é€šè¿‡é‡å†™é¿å…此事"
+
+#: makeinfo/cmds.c:1504
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s 已过时"
+
+#: makeinfo/cmds.c:1612
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "@sp 需è¦æ­£æ•°å‚数,而ä¸æ˜¯â€œ%sâ€"
+
+#: makeinfo/cmds.c:2023 makeinfo/footnote.c:81
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "%c%s 的错误å‚æ•°"
+
+#: makeinfo/cmds.c:2033 makeinfo/makeinfo.c:4317
+msgid "asis"
+msgstr "asis"
+
+#: makeinfo/cmds.c:2035 makeinfo/cmds.c:2065 makeinfo/makeinfo.c:4319
+msgid "none"
+msgstr "none"
+
+#: makeinfo/cmds.c:2049
+#, c-format
+msgid "Bad argument to @%s"
+msgstr "@%s çš„å‚数错误"
+
+#: makeinfo/cmds.c:2063
+msgid "insert"
+msgstr "æ’å…¥"
+
+#: makeinfo/cmds.c:2079
+#, c-format
+msgid "Bad argument to @%s: %s"
+msgstr "@%s 的错误å‚æ•°: %s"
+
+#: makeinfo/cmds.c:2162
+#, c-format
+msgid "Expected @%s on or off, not `%s'"
+msgstr "应当 @%s å¼€å¯æˆ–关闭,而ä¸æ˜¯â€œ%sâ€"
+
+#: makeinfo/cmds.c:2182
+#, c-format
+msgid "Only @%s 10 or 11 is supported, not `%s'"
+msgstr "ä»…æ”¯æŒ @%s 10 或 11,而ä¸æ˜¯â€œ%sâ€"
+
+#: makeinfo/defun.c:83
+msgid "Missing `}' in @def arg"
+msgstr "@def çš„å‚æ•°é—æ¼äº†â€œ}â€"
+
+#: makeinfo/defun.c:711
+#, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr "必须在“@%sâ€çŽ¯å¢ƒå˜é‡ä¸­ä½¿ç”¨â€œ@%sâ€"
+
+#: makeinfo/files.c:434
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s:getwd:%s,%s\n"
+
+#: makeinfo/files.c:637
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr "在输出文件åå‰é—æ¼äº†â€œ%sâ€"
+
+#: makeinfo/files.c:645
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr "写入标准输出å‰é—æ¼äº†â€œ%sâ€"
+
+#: makeinfo/files.c:693
+msgid "Output buffer not empty."
+msgstr "输出缓冲区éžç©ºã€‚"
+
+#: makeinfo/float.c:181
+#, c-format
+msgid "Requested float type `%s' not previously used"
+msgstr "所è¦çš„浮点类型“%sâ€ä¸æ˜¯ä¸Šæ¬¡æ‰€ç”¨çš„"
+
+#: makeinfo/float.c:376 makeinfo/float.c:382 makeinfo/index.c:959
+#: makeinfo/index.c:965
+msgid "See "
+msgstr "å‚阅 "
+
+#: makeinfo/footnote.c:149
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "“%c%sâ€éœ€è¦å‚数“{...}â€ï¼Œè€Œä¸ä»…仅是“%sâ€"
+
+#: makeinfo/footnote.c:164
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "脚注“%sâ€æ²¡æœ‰é—­åˆèŠ±æ‹¬å·"
+
+#: makeinfo/footnote.c:197
+msgid "Footnote defined without parent node"
+msgstr "定义的脚注没有父节点"
+
+#: makeinfo/footnote.c:209
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "脚注内的脚注是ä¸å…许的"
+
+#: makeinfo/footnote.c:301 makeinfo/index.c:187
+msgid "Footnotes"
+msgstr "脚注"
+
+#: makeinfo/html.c:91
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr "%s: 无法打开 --css-file: %s"
+
+#: makeinfo/html.c:180
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr "%s:%d: --css-file 以注释结尾"
+
+#: makeinfo/html.c:426
+msgid "[unexpected] no html tag to pop"
+msgstr "[未预料到的] 无 html 标记弹出 "
+
+#: makeinfo/html.c:800
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "[未预料到的] 无效的节点å称: “%sâ€"
+
+#: makeinfo/index.c:167
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "未知的索引“%sâ€"
+
+#: makeinfo/index.c:232
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr "Info 无法处ç†ç´¢å¼•æ¡ç›®â€œ%sâ€ä¸­çš„“:â€"
+
+#: makeinfo/index.c:410
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "索引“%sâ€å·²ç»å­˜åœ¨"
+
+#: makeinfo/index.c:453
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "@synindex 中的未知索引“%sâ€å’Œ/或“%sâ€"
+
+#: makeinfo/index.c:676
+msgid "(line )"
+msgstr "(行 )"
+
+#: makeinfo/index.c:684
+#, c-format
+msgid "(line %*d)"
+msgstr "(行 %*d)"
+
+#: makeinfo/index.c:765
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "@printindex 中的未知索引“%sâ€"
+
+#: makeinfo/index.c:834
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "关于索引“%sâ€çš„æ¡ç›®è¶…出了所有节点"
+
+#: makeinfo/index.c:837 makeinfo/index.c:873
+msgid "(outside of any node)"
+msgstr "(超出任何节点)"
+
+#: makeinfo/insertion.c:161
+#, fuzzy
+msgid "@item not allowed in argument to @itemize"
+msgstr "å‚数中ä¸å…许 @item 改为 @itemize"
+
+#: makeinfo/insertion.c:242
+msgid "Broken-Type in insertion_type_pname"
+msgstr "insertion_type_pname 中的错误类型"
+
+#: makeinfo/insertion.c:338
+msgid "Enumeration stack overflow"
+msgstr "枚举栈溢出"
+
+#: makeinfo/insertion.c:370
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "字符编å·æº¢å‡ºï¼Œä»Ž %c é‡æ–°å¼€å§‹"
+
+#: makeinfo/insertion.c:639
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s 需è¦ä¸€ä¸ªå‚æ•°: %citem çš„æ ¼å¼åŒ–å‚æ•°"
+
+#: makeinfo/insertion.c:727
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr "%cfloat 环境å˜é‡ä¸èƒ½åµŒå¥—"
+
+#: makeinfo/insertion.c:981
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "“@endâ€éœ€è¦â€œ%sâ€ï¼Œä½†çœ‹åˆ°â€œ%sâ€"
+
+#: makeinfo/insertion.c:1349
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "没有匹é…的“%cend %sâ€"
+
+#: makeinfo/insertion.c:1618
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s 需è¦å­—æ¯æˆ–æ•°å­—"
+
+#: makeinfo/insertion.c:1718
+msgid "end of file inside verbatim block"
+msgstr "文件在原文å—中结æŸ"
+
+#: makeinfo/insertion.c:1942
+#, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "“@floatâ€çŽ¯å¢ƒå˜é‡å¤–çš„ @%s 是没有æ„义的"
+
+#: makeinfo/insertion.c:1978
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "在第一个节点之å‰é‡åˆ° @menu,正在创建“顶â€èŠ‚点"
+
+#: makeinfo/insertion.c:1979
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr "您的 @top 节点å¯èƒ½åº”该包å«åœ¨ @ifnottex 而ä¸æ˜¯ @ifinfo 中?"
+
+#: makeinfo/insertion.c:1991
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "在第一个节点之å‰é‡åˆ° @detailmenu,正在创建“顶â€èŠ‚点"
+
+#: makeinfo/insertion.c:2047
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr "在“@titlepageâ€å’Œâ€œ@quotationâ€çŽ¯å¢ƒå˜é‡å¤– @%s æ— æ„义"
+
+#: makeinfo/insertion.c:2061
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "“@titlepageâ€çŽ¯å¢ƒå˜é‡å¤–çš„ @%s 是没有æ„义的"
+
+#: makeinfo/insertion.c:2092
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "未匹é…的“%c%sâ€"
+
+#: makeinfo/insertion.c:2097
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "“%c%sâ€ä¹‹åŽéœ€è¦æœ‰äº›ä»€ä¹ˆ"
+
+#: makeinfo/insertion.c:2103
+#, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "“%sâ€çš„错误å‚数“@%sâ€ï¼Œä½¿ç”¨â€œ%sâ€"
+
+#: makeinfo/insertion.c:2200
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "在“@%2$sâ€å—中“@%1$sâ€æ˜¯æ²¡æœ‰æ„义的"
+
+#: makeinfo/insertion.c:2209
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "在“%sâ€å—中 @itemx 是没有æ„义的"
+
+#: makeinfo/insertion.c:2383
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "在æ’å…¥å—之外å‘现了 %c%s"
+
+#: makeinfo/lang.c:1218
+#, c-format
+msgid "no default territory known for language `%s'"
+msgstr "语言“%sâ€æ— å·²çŸ¥çš„默认地区"
+
+#: makeinfo/lang.c:1281
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr "%s 在 ISO 639 语言编ç ä¸­æ˜¯æ— æ•ˆçš„"
+
+#: makeinfo/lang.c:1399
+#, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "ä¸èƒ½è¯†åˆ«çš„ç¼–ç å称“%sâ€"
+
+#: makeinfo/lang.c:1407
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "抱歉,ä¸æ”¯æŒç¼–ç â€œ%sâ€"
+
+#: makeinfo/lang.c:1492
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "无效的编ç å­—符“%sâ€"
+
+#: makeinfo/lang.c:1800
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr "%c%s çš„å‚数应为“iâ€æˆ–“jâ€ï¼Œè€Œä¸æ˜¯â€œ%câ€"
+
+#: makeinfo/lang.c:1804
+#, c-format
+msgid "%c%s expects a single character `i' or `j' as argument"
+msgstr "%c%s 需è¦ä»¥å•ä¸ªå­—符“iâ€æˆ–“jâ€ä¸ºå‚æ•°"
+
+#: makeinfo/macro.c:128
+#, c-format
+msgid "macro `%s' previously defined"
+msgstr "å®â€œ%sâ€å·²åœ¨å‰é¢å®šä¹‰"
+
+#: makeinfo/macro.c:132
+#, c-format
+msgid "here is the previous definition of `%s'"
+msgstr "这里是“%sâ€å‰é¢çš„定义"
+
+#: makeinfo/macro.c:359
+#, c-format
+msgid "\\ in macro expansion followed by `%s' instead of parameter name"
+msgstr "\\ 以带有“%sâ€çš„å®å±•å¼€å¼ä»£æ›¿å‚æ•°å称"
+
+#: makeinfo/macro.c:401
+#, c-format
+msgid "Macro `%s' called on line %d with too many args"
+msgstr "在第 %2$d 行中以过多的å‚数调用å®â€œ%1$sâ€"
+
+#: makeinfo/macro.c:580
+#, c-format
+msgid "%cend macro not found"
+msgstr "找ä¸åˆ°å® %cend"
+
+#: makeinfo/macro.c:591
+msgid "@allow-recursion is deprecated; please use @rmacro instead"
+msgstr "ä¸èµžæˆä½¿ç”¨ @allow-recursion;请使用 @rmacro 代替 "
+
+#: makeinfo/macro.c:606
+msgid "@quote-arg is deprecated; arguments are quoted by default"
+msgstr "ä¸èµžæˆä½¿ç”¨ @quote-argï¼›å‚数是默认引用的"
+
+#: makeinfo/macro.c:649
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "@end %s å’Œ @%s ä¸åŒ¹é…"
+
+#: makeinfo/makeinfo.c:188
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "过多的错误ï¼æ”¾å¼ƒã€‚\n"
+
+#: makeinfo/makeinfo.c:306
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d:警告:"
+
+#: makeinfo/makeinfo.c:325 makeinfo/makeinfo.c:2340
+#, c-format
+msgid "Misplaced %c"
+msgstr "错误放置的 %c"
+
+#: makeinfo/makeinfo.c:344
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "试用“%s --helpâ€ä»¥èŽ·å–更多信æ¯ã€‚\n"
+
+#: makeinfo/makeinfo.c:347
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "用法:%s [选项]... TEXINFO-文件...\n"
+
+#: makeinfo/makeinfo.c:350
+msgid ""
+"Translate Texinfo source documentation to various other formats, by default\n"
+"Info files suitable for reading online with Emacs or standalone GNU Info.\n"
+msgstr ""
+"å°† Texinfo æºæ–‡ä»¶è½¬æ¢ä¸ºå…¶å®ƒå„ç§æ ¼å¼ï¼Œé»˜è®¤è½¬æ¢ä¸ºé€‚于\n"
+"ç”± Emacs 或独立 GNU Info 在线æµè§ˆçš„ Info 文件。\n"
+
+#: makeinfo/makeinfo.c:354
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\n"
+" --document-language=STR locale to use in translating Texinfo keywords\n"
+" for the output document (default C).\n"
+" --force preserve output even if errors.\n"
+" --help display this help and exit.\n"
+" --no-validate suppress node cross-reference validation.\n"
+" --no-warn suppress warnings (but not errors).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"通用选项:\n"
+" --error-limit=NUM 在 NUM 个错误åŽé€€å‡º (默认为 %d)。\n"
+" --document-language=STR 为输出的文档翻译 Texinfo 关键字时所用\n"
+" 的地区代ç (默认为 C)。\n"
+" --force å³ä½¿å‡ºçŽ°é”™è¯¯ä¹Ÿä¿ç•™è¾“出文件。\n"
+" --help 显示该求助信æ¯å¹¶é€€å‡ºã€‚\n"
+" --no-validate ä¸è¿›è¡Œäº¤å‰å¼•ç”¨æ£€æŸ¥ã€‚\n"
+" --no-warn ä¸è¾“出警告 (ä¸æ¶‰åŠé”™è¯¯)。\n"
+" -v, --verbose 解释都åšäº†äº›ä»€ä¹ˆã€‚\n"
+" --version 显示版本信æ¯å¹¶é€€å‡ºã€‚\n"
+
+#: makeinfo/makeinfo.c:369
+#, no-wrap
+msgid ""
+"Output format selection (default is to produce Info):\n"
+" --docbook output Docbook XML rather than Info.\n"
+" --html output HTML rather than Info.\n"
+" --xml output Texinfo XML rather than Info.\n"
+" --plaintext output plain text rather than Info.\n"
+msgstr ""
+"输出格å¼é€‰æ‹© (é»˜è®¤ç”Ÿæˆ Info 文件):\n"
+" --docbook 输出 DocBook 而ä¸æ˜¯ Info。\n"
+" --html 输出 HTML 而ä¸æ˜¯ Info。\n"
+" --xml 输出 XML (TexinfoML) 而ä¸æ˜¯ Info。\n"
+" --plaintext 输出普通文本而ä¸æ˜¯ Info。\n"
+
+#: makeinfo/makeinfo.c:377
+msgid ""
+"General output options:\n"
+" -E, --macro-expand=FILE output macro-expanded source to FILE,\n"
+" ignoring any @setfilename.\n"
+" --no-headers suppress node separators, Node: lines, and "
+"menus\n"
+" from Info output (thus producing plain "
+"text)\n"
+" or from HTML (thus producing shorter "
+"output);\n"
+" also, write to standard output by default.\n"
+" --no-split suppress the splitting of Info or HTML "
+"output,\n"
+" generate only one output file.\n"
+" --number-sections output chapter and sectioning numbers.\n"
+" -o, --output=FILE output to FILE (or directory if split HTML).\n"
+msgstr ""
+"通用输出选项:\n"
+" -E, --macro-expand FILE å°†å®æ‰©å±•æºè¾“出到文件 FILE。\n"
+" 忽略所有 @setfilename。\n"
+" --no-headers ä¸åœ¨ Info 输出或 HTML 输出中生æˆèŠ‚点分隔符,\n"
+" 节点:行,和èœå•ã€‚从而生æˆæ™®é€šæ–‡æœ¬(Info\n"
+" 输出)或较短的输出(HTML 输出);\n"
+" 此外, 默认输出到标准输出。\n"
+" --no-split ä¸æ˜¯ç”Ÿæˆåˆ†å‰²çš„ Info 或 HTML 输出,\n"
+" 而是生æˆå•ä¸ªè¾“出文件。\n"
+" --number-sections 输出章节编å·ã€‚\n"
+" -o, --output=FILE 输出到文件 FILE (如果是分割的 HTML 则为目录)。\n"
+
+#: makeinfo/makeinfo.c:391
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --disable-encoding do not output accented and special characters\n"
+" in Info output based on @documentencoding.\n"
+" --enable-encoding override --disable-encoding (default).\n"
+" --fill-column=NUM break Info lines at NUM characters (default %"
+"d).\n"
+" --footnote-style=STYLE output footnotes in Info according to STYLE:\n"
+" `separate' to put them in their own node;\n"
+" `end' to put them at the end of the node, "
+"in\n"
+" which they are defined (this is the "
+"default).\n"
+" --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %"
+"d).\n"
+" If VAL is `none', do not indent; if VAL is\n"
+" `asis', preserve existing indentation.\n"
+" --split-size=NUM split Info files at size NUM (default %d).\n"
+msgstr ""
+"Info 和普通文本选项:\n"
+" --disable-encoding ä¸è¦æ ¹æ® @documentencoding 输出 Info 输出中的\n"
+" é‡éŸ³å’Œç‰¹æ®Šå­—符。\n"
+" --enable-encoding 覆盖 --disable-encoding 设置(默认)。\n"
+" --fill-column=NUM 在第 NUM 个字符处切分 Info 行 (默认为 %d)。\n"
+" --footnote-style=STYLE æ ¹æ® STYLE 输出 Info 中的脚注:\n"
+" “separateâ€å°†è„šæ³¨ç½®äºŽç‹¬ç«‹çš„节点;\n"
+" “endâ€å°†è„šæ³¨ç½®äºŽå®šä¹‰å®ƒçš„节点的末尾(默认)。\n"
+" --paragraph-indent=VAL å°† Info 段对é½åˆ° VAL 个空格 (默认为 %d).\n"
+" 如果 VAL 为“noneâ€ï¼Œåˆ™ä¸å¯¹é½ï¼›å¦‚æžœ VAL 为\n"
+" “asisâ€ï¼Œä¿ç•™çŽ°æœ‰çš„对é½ã€‚\n"
+" --split-size=NUM åœ¨å¤§å° NUM 的时候拆分 Info 文件 (默认为 %d)。\n"
+
+#: makeinfo/makeinfo.c:409
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+" --css-ref=URL generate reference to a CSS file.\n"
+" --internal-links=FILE produce list of internal links in FILE.\n"
+" --transliterate-file-names\n"
+" produce file names in ASCII transliteration.\n"
+msgstr ""
+"HTML 选项:\n"
+" --css-include=FILE 在 HTML <style> è¾“å‡ºä¸­åŒ…å« FILEï¼›\n"
+" 如果 FILE 是 - 将从标准输入读å–内容。\n"
+" --css-ref=URL 生æˆä¸€ä¸ª CSS 文件的å‚考。\n"
+" --internal-links=FILE ç”Ÿæˆ FILE 中内部连接列表。\n"
+" --transliterate-file-names\n"
+" 以 ASCII 字义生æˆæ–‡ä»¶å。\n"
+
+#: makeinfo/makeinfo.c:419
+#, c-format
+msgid ""
+"Options for XML and Docbook:\n"
+" --output-indent=VAL indent XML elements by VAL spaces (default %"
+"d).\n"
+" If VAL is 0, ignorable whitespace is "
+"dropped.\n"
+msgstr ""
+"XML 和 Docbook 选项:\n"
+" --output-indent=VAL 用 VAL 个空格缩进 XML 元素(默认 %d)。\n"
+" 如果 VAL 为 0,将丢弃å¯å¿½ç•¥çš„空格。\n"
+
+#: makeinfo/makeinfo.c:426
+msgid ""
+"Input file options:\n"
+" --commands-in-node-names allow @ commands in node names.\n"
+" -D VAR define the variable VAR, as with @set.\n"
+" -I DIR append DIR to the @include search path.\n"
+" -P DIR prepend DIR to the @include search path.\n"
+" -U VAR undefine the variable VAR, as with @clear.\n"
+msgstr ""
+"输入文件选项:\n"
+" --commands-in-node-names å…许在节点å中使用 @ 命令。\n"
+" -D VAR 定义å˜é‡ VAR,就象 @set。\n"
+" -I DIR å°† DIR 附加到 @include æœç´¢è·¯å¾„之åŽã€‚\n"
+" -P DIR å°† DIR 追加到 @include æœç´¢è·¯å¾„之å‰ã€‚\n"
+" -U VAR å–消å˜é‡ VAR 的定义,就象 @clear。\n"
+
+#: makeinfo/makeinfo.c:435
+msgid ""
+"Conditional processing in input:\n"
+" --ifdocbook process @ifdocbook and @docbook even if\n"
+" not generating Docbook.\n"
+" --ifhtml process @ifhtml and @html even if not generating HTML.\n"
+" --ifinfo process @ifinfo even if not generating Info.\n"
+" --ifplaintext process @ifplaintext even if not generating plain text.\n"
+" --iftex process @iftex and @tex; implies --no-split.\n"
+" --ifxml process @ifxml and @xml.\n"
+" --no-ifdocbook do not process @ifdocbook and @docbook text.\n"
+" --no-ifhtml do not process @ifhtml and @html text.\n"
+" --no-ifinfo do not process @ifinfo text.\n"
+" --no-ifplaintext do not process @ifplaintext text.\n"
+" --no-iftex do not process @iftex and @tex text.\n"
+" --no-ifxml do not process @ifxml and @xml text.\n"
+"\n"
+" Also, for the --no-ifFORMAT options, do process @ifnotFORMAT text.\n"
+msgstr ""
+"输入中的æ¡ä»¶å¤„ç†ï¼š\n"
+" --ifdocbook å³ä½¿ä¸ç”Ÿæˆ Docbook \n"
+" ä¹Ÿå¤„ç† @ifdocbook å’Œ @docbook。\n"
+" --ifhtml å³ä½¿ä¸æ˜¯ç”Ÿæˆ HTML ä¹Ÿå¤„ç† @ifhtml å’Œ @html。\n"
+" --ifinfo å³ä½¿ä¸æ˜¯ç”Ÿæˆ Info ä¹Ÿå¤„ç† @ifinfo。\n"
+" --ifplaintext å³ä½¿ä¸æ˜¯ç”Ÿæˆæ™®é€šæ–‡æœ¬ä¹Ÿå¤„ç† @ifplaintext。\n"
+" --iftex å¤„ç† @iftex å’Œ @texï¼›éšå« --no-split。\n"
+" --no-ifhtml ä¸è¦å¤„ç† @ifhtml å’Œ @html 文本。\n"
+" --no-ifinfo ä¸è¦å¤„ç† @ifinfo 文本。\n"
+" --no-ifplaintext ä¸è¦å¤„ç† @ifplaintext 文本。\n"
+" --no-iftex ä¸è¦å¤„ç† @iftex å’Œ @tex 文本。\n"
+
+#: makeinfo/makeinfo.c:454
+msgid ""
+" The defaults for the @if... conditionals depend on the output format:\n"
+" if generating HTML, --ifhtml is on and the others are off;\n"
+" if generating Info, --ifinfo is on and the others are off;\n"
+" if generating plain text, --ifplaintext is on and the others are off;\n"
+" if generating XML, --ifxml is on and the others are off.\n"
+msgstr ""
+" @if... æ¡ä»¶çš„默认值倚赖于输出格å¼ï¼š\n"
+" å¦‚æžœç”Ÿæˆ HTML,则 --ifhtml 默认开å¯è€Œå…¶å®ƒçš„默认关闭;\n"
+" å¦‚æžœç”Ÿæˆ Info,则 --ifinfo 默认开å¯è€Œå…¶å®ƒçš„默认关闭;\n"
+" 如果生æˆæ™®é€šæ–‡æœ¬ï¼Œåˆ™ --ifplaintext 默认开å¯è€Œå…¶å®ƒé»˜è®¤å…³é—­ï¼›\n"
+" å¦‚æžœç”Ÿæˆ XML,则 --ifxml 默认开å¯è€Œå…¶å®ƒé»˜è®¤å…³é—­ã€‚\n"
+
+#: makeinfo/makeinfo.c:462
+msgid ""
+"Examples:\n"
+" makeinfo foo.texi write Info to foo's @setfilename\n"
+" makeinfo --html foo.texi write HTML to @setfilename\n"
+" makeinfo --xml foo.texi write Texinfo XML to @setfilename\n"
+" makeinfo --docbook foo.texi write DocBook XML to @setfilename\n"
+" makeinfo --no-headers foo.texi write plain text to standard "
+"output\n"
+"\n"
+" makeinfo --html --no-headers foo.texi write html without node lines, "
+"menus\n"
+" makeinfo --number-sections foo.texi write Info with numbered sections\n"
+" makeinfo --no-split foo.texi write one Info file however big\n"
+msgstr ""
+"示例:\n"
+" makeinfo foo.texi 将 Info 写入到 foo 的 @setfilename\n"
+" makeinfo --html foo.texi 将 HTML 写入到 @setfilename\n"
+" makeinfo --xml foo.texi 将 Texinfo XML 写入到 @setfilename\n"
+" makeinfo --docbook foo.texi 将 DocBook XML 写入到 @setfilename\n"
+" makeinfo --no-headers foo.texi 将普通文本写入到标准输出\n"
+"\n"
+" makeinfo --html --no-headers foo.texi 输出 html 而ä¸è¾“出节点行和èœå•\n"
+" makeinfo --number-sections foo.texi 输出带有编å·çš„节的 Info\n"
+" makeinfo --no-split foo.texi 输出å•ä¸ª Info 文件而ä¸è®ºå¤§å°\n"
+
+#: makeinfo/makeinfo.c:622
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr "%s: 忽略ä¸å¯è¾¨è®¤çš„ TEXINFO_OUTPUT_FORMAT 值“%sâ€ã€‚\n"
+
+#: makeinfo/makeinfo.c:670 makeinfo/makeinfo.c:696 makeinfo/makeinfo.c:720
+#: makeinfo/makeinfo.c:780
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr "%s:%s å‚数必须为数值,而ä¸æ˜¯â€œ%sâ€ã€‚\n"
+
+#: makeinfo/makeinfo.c:683
+#, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "%s: 无法打开å®æ‰©å±•è¾“出“%sâ€"
+
+#: makeinfo/makeinfo.c:688
+#, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "%s: 无法打开å®æ‰©å±•è¾“出“%sâ€\n"
+
+#: makeinfo/makeinfo.c:733
+#, c-format
+msgid "%s: could not open internal links output `%s'"
+msgstr "%s: 无法打开å®æ‰©å±•è¾“出“%sâ€"
+
+#: makeinfo/makeinfo.c:738
+#, c-format
+msgid "%s: ignoring second internal links output `%s'.\n"
+msgstr "%s: 忽略二次内部连接输出“%sâ€ã€‚\n"
+
+#: makeinfo/makeinfo.c:751
+#, c-format
+msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
+msgstr "%s:--paragraph-indent çš„å‚数必须为数值/“noneâ€/“asisâ€ï¼Œè€Œä¸æ˜¯â€œ%sâ€ã€‚\n"
+
+#: makeinfo/makeinfo.c:769
+#, c-format
+msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
+msgstr "%s:--footnote-style çš„å‚数必须为“separateâ€æˆ–“endâ€ï¼Œè€Œä¸æ˜¯â€œ%sâ€ã€‚\n"
+
+#: makeinfo/makeinfo.c:844
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s:é—æ¼æ–‡ä»¶å‚数。\n"
+
+#: makeinfo/makeinfo.c:1041 makeinfo/makeinfo.c:4166
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr "使用了ä¸åˆé€‚的多行命令 %c%s"
+
+#: makeinfo/makeinfo.c:1044
+#, c-format
+msgid "Expected `%s'"
+msgstr "应为“%sâ€"
+
+#: makeinfo/makeinfo.c:1521
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "无法创建目录“%sâ€ï¼š%s"
+
+#: makeinfo/makeinfo.c:1567
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "在“%2$sâ€ä¸­æ‰¾ä¸åˆ°â€œ%1$sâ€"
+
+#: makeinfo/makeinfo.c:1647
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr "%s: 跳过展开至标准输出的å®ï¼Œç”±äºŽ Info 的输出è¦ä½¿ç”¨æ ‡å‡†è¾“出。\n"
+
+#: makeinfo/makeinfo.c:1677
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "从“%3$sâ€åˆ›å»º %1$s 文件“%2$sâ€ã€‚\n"
+
+#: makeinfo/makeinfo.c:1744
+#, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr "%s:由于错误删除å®è¾“出文件“%sâ€ï¼›ç”¨ --force ä¿ç•™å®è¾“出。\n"
+
+#: makeinfo/makeinfo.c:1799
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr "%s:由于错误删除å®è¾“出文件“%sâ€ï¼›ç”¨ --force ä¿ç•™å®è¾“出。\n"
+
+#: makeinfo/makeinfo.c:1818
+#, c-format
+msgid ""
+"%s: Removing internal links output file `%s' due to errors; use --force to "
+"preserve.\n"
+msgstr "%s:由于错误删除内部连接输出文件“%sâ€ï¼›ç”¨ --force ä¿ç•™ã€‚\n"
+
+#: makeinfo/makeinfo.c:2113
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "未知的命令“%sâ€"
+
+#: makeinfo/makeinfo.c:2135
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr "使用花括å·å°†ä¸€ä¸ªå‘½ä»¤ç”¨ä½œ @%s çš„å‚æ•°"
+
+#: makeinfo/makeinfo.c:2394
+#, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s 需è¦èŠ±æ‹¬å·"
+
+#: makeinfo/makeinfo.c:2407
+msgid "Unmatched }"
+msgstr "ä¸åŒ¹é…çš„ }"
+
+#: makeinfo/makeinfo.c:2455
+msgid "NO_NAME!"
+msgstr "æ— åå­—ï¼"
+
+#: makeinfo/makeinfo.c:2476
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s é—æ¼é—­åˆèŠ±æ‹¬å·"
+
+#: makeinfo/makeinfo.c:3482
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "@image 文件“%sâ€(对 HTML)ä¸å¯è¯»ï¼š%s"
+
+#: makeinfo/makeinfo.c:3488
+#, c-format
+msgid "No such file `%s'"
+msgstr "没有那样的文件“%sâ€"
+
+#: makeinfo/makeinfo.c:3624
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "@image 文件“%sâ€(对文本)ä¸å¯è¯»ï¼š%s"
+
+#: makeinfo/makeinfo.c:3633
+msgid "@image missing filename argument"
+msgstr "@image é—æ¼æ–‡ä»¶åå‚æ•°"
+
+#: makeinfo/makeinfo.c:3851
+#, c-format
+msgid "undefined flag: %s"
+msgstr "未定义的标识: %s"
+
+#: makeinfo/makeinfo.c:3852
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{没有“%sâ€çš„值}"
+
+#: makeinfo/makeinfo.c:3904
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s 需è¦ä¸€ä¸ªåå­—"
+
+#: makeinfo/makeinfo.c:4010
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "文件在é‡åˆ°åŒ¹é…çš„ @end %s å‰å°±ç»“æŸäº†"
+
+#: makeinfo/makeinfo.c:4258
+#, c-format
+msgid "`%.40s...' is too long for expansion; not expanded"
+msgstr "“%.40s...â€æ‰©å±•èµ·æ¥å¤ªé•¿ï¼›æœªæ‰©å±•"
+
+#: makeinfo/multi.c:116
+msgid "Missing } in @multitable template"
+msgstr "@multitable 模æ¿ä¸­é—æ¼äº† }"
+
+#: makeinfo/multi.c:260
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "忽略 @multitable 之åŽçš„过剩文本“%sâ€"
+
+#: makeinfo/multi.c:400
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "在多列表格项目中å«æœ‰å¤ªå¤šçš„列 (最大为 %d)"
+
+#: makeinfo/multi.c:563
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "[未预料到的错误] 无法在多列表格中选择第 #%d 列"
+
+#: makeinfo/multi.c:592
+msgid "ignoring @tab outside of multitable"
+msgstr "忽略多列表格外的 @tab"
+
+#: makeinfo/multi.c:640
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** 最åŽä¸€è¡Œçš„多列输出:\n"
+
+#: makeinfo/multi.c:643
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* 列 #%d:输出 = %s\n"
+
+#: makeinfo/node.c:279
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "节点“%sâ€åœ¨å‰é¢çš„(第 %d è¡Œ)定义"
+
+#: makeinfo/node.c:647
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "正在格å¼åŒ–节点 %s...\n"
+
+#: makeinfo/node.c:714
+#, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr "节点“%sâ€éœ€è¦ä¸€ä¸ªæ®µè½å‘½ä»¤ (例如:%c%s)"
+
+#: makeinfo/node.c:878
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "没有为“%c%sâ€å‘½ä»¤æŒ‡å®šèŠ‚å称"
+
+#: makeinfo/node.c:919 makeinfo/node.c:1163
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr "Anchor“%sâ€å’ŒèŠ‚点“%sâ€æ˜ å°„到åŒä¸€ä¸ªæ–‡ä»¶å"
+
+#: makeinfo/node.c:922
+msgid "This @anchor command ignored; references to it will not work"
+msgstr "忽略该 @anchor 命令;对它的引用将无法工作"
+
+#: makeinfo/node.c:924 makeinfo/node.c:1166
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr "é‡å‘½å anchor 或使用“--no-splitâ€é€‰é¡¹"
+
+#: makeinfo/node.c:954
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr "在分立 HTML 文件“%sâ€çš„末尾的æ„外字符串"
+
+#: makeinfo/node.c:1160
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr "Anchor“%sâ€å’Œâ€œ%sâ€æ˜ å°„到åŒä¸€ä¸ªæ–‡ä»¶å"
+
+#: makeinfo/node.c:1165
+msgid "@anchor command ignored; references to it will not work"
+msgstr "忽略 @anchor 命令;对它的引用将ä¸èƒ½å·¥ä½œ"
+
+#: makeinfo/node.c:1362
+#, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr "%s 引用到ä¸å­˜åœ¨çš„节点“%sâ€(也许字段ä¸æ­£ç¡®ï¼Ÿ)"
+
+#: makeinfo/node.c:1462
+#, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr "节点“%sâ€çš„下一个域没有指å‘(也许字段ä¸æ­£ç¡®ï¼Ÿ)"
+
+#: makeinfo/node.c:1465
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "该节点 (%s) å«æœ‰é”™è¯¯çš„上一个"
+
+#: makeinfo/node.c:1520
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "节点“%sâ€çš„上一个域没有指å‘"
+
+#: makeinfo/node.c:1524
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "该节点 (%s) å«æœ‰é”™è¯¯çš„下一个"
+
+#: makeinfo/node.c:1536
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr "“%sâ€æ—  Up 字段(也许字段ä¸æ­£ç¡®ï¼Ÿ)"
+
+#: makeinfo/node.c:1605
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr "尽管节点“%sâ€æ˜¯â€œ%sâ€çš„上层节点,但缺少相关的èœå•é¡¹"
+
+#: makeinfo/node.c:1637
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "未引用的节点“%sâ€"
+
+#: makeinfo/node.c:1727
+#, c-format
+msgid "Removing %s\n"
+msgstr "删除 %s\n"
+
+#: makeinfo/node.c:1731
+#, c-format
+msgid "Can't remove file `%s': %s"
+msgstr "无法删除文件“%sâ€ï¼š%s"
+
+#: makeinfo/sectioning.c:122
+#, c-format
+msgid "Appendix %c"
+msgstr "附录 %c "
+
+#: makeinfo/sectioning.c:467
+#, c-format
+msgid "Internal error (search_sectioning) `%s'!"
+msgstr "内部错误 (search_sectioning) “%sâ€ï¼"
+
+#: makeinfo/sectioning.c:563
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "内部错误 (search_sectioning) “%sâ€ï¼"
+
+#: makeinfo/sectioning.c:624
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "%c%s 已过时;用 %c%s 代替"
+
+#: makeinfo/sectioning.c:640
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "带有 %ctop 的节点作为一个节已ç»å­˜åœ¨"
+
+#: makeinfo/sectioning.c:648
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "这里是 %ctop 节点"
+
+#: makeinfo/sectioning.c:664
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "%ctop 在 %cnode 之å‰ä½¿ç”¨ï¼Œé»˜è®¤ä¸º %s"
+
+#: makeinfo/xml.c:1669
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "@image 文件“%sâ€ä¸å¯è¯»ï¼š%s"
+
+#: makeinfo/xml.c:2014
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr "作为 @multitable 的最åŽä¸€ä¸ªé¡¹ç›®ï¼Œ@headitem 生æˆæ— æ•ˆçš„ Docbook 文档"
+
+#: makeinfo/xml.c:2150
+#, fuzzy
+msgid "of"
+msgstr "çš„"
+
+#: makeinfo/xml.c:2155
+#, fuzzy
+msgid "on"
+msgstr "关于"
+
+#: makeinfo/xref.c:127
+msgid "First argument to cross-reference may not be empty"
+msgstr "交å‰å¼•ç”¨çš„第一个å‚æ•°ä¸èƒ½ä¸ºç©º"
+
+#: makeinfo/xref.c:252
+#, c-format
+msgid "Empty file name for HTML cross reference in `%s'"
+msgstr "为“%sâ€ä¸­çš„ HTML 交å‰å¼•ç”¨æ¸…空文件å"
+
+#: makeinfo/xref.c:387
+msgid "End of file reached while looking for `.' or `,'"
+msgstr "查找“。â€æˆ–“,â€æ—¶é‡åˆ°äº†æ–‡ä»¶ç»“å°¾"
+
+#: makeinfo/xref.c:390
+#, c-format
+msgid "`.' or `,' must follow @%s, not `%c'"
+msgstr "“.â€æˆ–“,â€ä¹‹åŽå¿…须为 @%s,而ä¸æ˜¯â€œ%câ€"
+
+#: makeinfo/xref.c:392
+msgid "for cross-references in parentheses, use @pxref"
+msgstr "è¦ä½¿ç”¨æ‹¬å·ä¸­çš„交å‰å¼•ç”¨ï¼Œè¯·ä½¿ç”¨ @pxref"
+
+#: makeinfo/xref.c:435
+msgid "First argument to @inforef may not be empty"
+msgstr "@inforef 的第一个å‚æ•°ä¸èƒ½ä¸ºç©º"
+
+#: util/texindex.c:223
+msgid "display this help and exit"
+msgstr "显示该求助信æ¯å¹¶é€€å‡º"
+
+#: util/texindex.c:225
+msgid "send output to FILE"
+msgstr "将输出é€å…¥ FILE"
+
+#: util/texindex.c:227
+msgid "display version information and exit"
+msgstr "显示版本信æ¯å¹¶é€€å‡º"
+
+#: util/texindex.c:237
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "用法:%s [选项]... 文件...\n"
+
+#: util/texindex.c:238
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr "为æ¯ä¸ª TeX 输出文件生æˆæŽ’åºçš„索引。\n"
+
+#: util/texindex.c:241
+#, c-format
+msgid "Usually FILE... is specified as `foo.%c%c' for a document `foo.texi'.\n"
+msgstr "对于文档“foo.texiâ€ï¼ŒFILE... 通常为“foo.%c%câ€çš„å½¢å¼ã€‚\n"
+
+#: util/texindex.c:243
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"选项:\n"
+
+#: util/texindex.c:743
+#, c-format
+msgid "failure reopening %s"
+msgstr "é‡æ–°æ‰“å¼€ %s 失败"
+
+#: util/texindex.c:758 util/texindex.c:786
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s:ä¸æ˜¯ texinfo 索引文件"
+
+#: util/texindex.c:993
+#, c-format
+msgid "No page number in %s"
+msgstr "%s 中没有页ç "
+
+#: util/texindex.c:1066
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr "æ¡ç›® %s 出现在具有次è¦å称的æ¡ç›®ä¹‹åŽ"
+
+#~ msgid ""
+#~ "Copyright (C) %s Free Software Foundation, Inc.\n"
+#~ "There is NO warranty. You may redistribute this software\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the files named COPYING.\n"
+#~ msgstr ""
+#~ "版æƒæ‰€æœ‰ (C) %s 自由软件基金会。\n"
+#~ "本软件没有任何担ä¿ã€‚您å¯ä»¥æŒ‰ç…§é€šç”¨\n"
+#~ "公共许å¯è¯(GPL)çš„æ¡æ¬¾å‘行本软件。\n"
+#~ "这方é¢çš„详情,请阅读å为 COPYING 的文件。\n"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]... [MENU-ITEM...]\n"
+#~ "\n"
+#~ "Read documentation in Info format.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --apropos=STRING look up STRING in all indices of all "
+#~ "manuals.\n"
+#~ " -d, --directory=DIR add DIR to INFOPATH.\n"
+#~ " --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+#~ " -f, --file=FILENAME specify Info file to visit.\n"
+#~ " -h, --help display this help and exit.\n"
+#~ " --index-search=STRING go to node pointed by index entry STRING.\n"
+#~ " -n, --node=NODENAME specify nodes in first visited Info file.\n"
+#~ " -o, --output=FILENAME output selected nodes to FILENAME.\n"
+#~ " -R, --raw-escapes don't remove ANSI escapes from man pages.\n"
+#~ " --restore=FILENAME read initial keystrokes from FILENAME.\n"
+#~ " -O, --show-options, --usage go to command-line options node.\n"
+#~ "%s --subnodes recursively output menu items.\n"
+#~ " --vi-keys use vi-like and less-like key bindings.\n"
+#~ " --version display version information and exit.\n"
+#~ "\n"
+#~ "The first non-option argument, if present, is the menu entry to start "
+#~ "from;\n"
+#~ "it is searched for in all `dir' files along INFOPATH.\n"
+#~ "If it is not present, info merges all `dir' files and shows the result.\n"
+#~ "Any remaining arguments are treated as the names of menu\n"
+#~ "items relative to the initial node visited.\n"
+#~ "\n"
+#~ "Examples:\n"
+#~ " info show top-level dir menu\n"
+#~ " info emacs start at emacs node from top-level dir\n"
+#~ " info emacs buffers start at buffers node within emacs manual\n"
+#~ " info --show-options emacs start at node with emacs' command line "
+#~ "options\n"
+#~ " info -f ./foo.info show file ./foo.info, not searching dir\n"
+#~ msgstr ""
+#~ "用法:%s [选项]... [èœå•é¡¹...]\n"
+#~ "\n"
+#~ "阅读 Info æ ¼å¼çš„文档。\n"
+#~ "\n"
+#~ "选项:\n"
+#~ " --apropos=STRING 在所有手册的所有索引中æœç´¢ STRING。\n"
+#~ " -d, --directory=DIR 将目录 DIR 添加到 INFOPATH 中。\n"
+#~ " --dribble=FILENAME 将用户的按键æ¡ç›®åœ¨æ–‡ä»¶ FILENAME 中。\n"
+#~ " -f, --file=FILENAME 指定è¦é˜…读的 Info 文件。\n"
+#~ " -h, --help 显示该求助信æ¯å¹¶é€€å‡ºã€‚\n"
+#~ " --index-search=STRING 转移到索引æ¡ç›® STRING 所指å‘的节点。\n"
+#~ " -n, --node=NODENAME 指定首先阅读的 Info 文件中的节点。\n"
+#~ " -o, --output=FILENAME 将选中的节点输出到文件 FILENAME 中。\n"
+#~ " -R, --raw-escapes ä¸è¦åˆ é™¤æ¥è‡ª man 页é¢çš„ ANSI 转义符。\n"
+#~ " --restore=FILENAME 从文件 FILENAME 中读å–åˆå§‹æŒ‰é”®ã€‚\n"
+#~ " -O, --show-options, --usage 转移到命令行选项节点。\n"
+#~ "%s --subnodes 递归输出èœå•æ¡ç›®ã€‚\n"
+#~ " --vi-keys 使用类 vi 和类 less 的按键绑定。\n"
+#~ " --version 显示版本信æ¯å¹¶é€€å‡ºã€‚\n"
+#~ "\n"
+#~ "如果存在éžé€‰é¡¹å‚数,则第一个éžé€‰é¡¹å‚数就是起点èœå•æ¡ç›®ï¼›\n"
+#~ "它是从 INFOPATH 中的“dirâ€æ–‡ä»¶ä¸­æœç´¢è€Œå¾—的。\n"
+#~ "如果æœç´¢ä¸åˆ°ï¼Œinfo å°±åˆå¹¶æ‰€æœ‰çš„“dirâ€æ–‡ä»¶å¹¶æ˜¾ç¤ºåˆå¹¶ç»“果。\n"
+#~ "所有剩余的å‚æ•°å‡ä½œä¸ºç›¸å¯¹äºŽé˜…读的åˆå§‹èŠ‚点的èœå•é¡¹ç›®å称。\n"
+#~ "\n"
+#~ "示例:\n"
+#~ " info 显示顶层目录èœå•\n"
+#~ " info emacs 从顶层目录中的 emacs 节点开始\n"
+#~ " info emacs buffers 从 emacs 手册的 buffers 节点开始\n"
+#~ " info --show-options emacs 从 emacs 的命令行选项节点开始\n"
+#~ " info -f ./foo.info 显示文件 ./foo.info,而ä¸æ˜¯æœç´¢ç›®å½•\n"
+
+#~ msgid ""
+#~ "\\%-10[move-to-prev-xref] Skip to previous hypertext link within this "
+#~ "node.\n"
+#~ msgstr "\\%-10[move-to-prev-xref] 跳转到本节点中的上一个超文本连接。\n"
+
+#~ msgid ""
+#~ "\\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+#~ "node] (DIR)'.\n"
+#~ msgstr ""
+#~ "\\%-10[dir-node] 移动到“directoryâ€èŠ‚点。等价于“\\[goto-node] (DIR)â€ã€‚\n"
+
+#~ msgid ""
+#~ "\\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] "
+#~ "Top'.\n"
+#~ msgstr "\\%-10[top-node] 移动到顶层节点。等价于“\\[goto-node] Topâ€ã€‚\n"
+
+#~ msgid "\\%-10[scroll-forward] Scroll forward 1 line.\n"
+#~ msgstr "\\%-10[scroll-forward] å‘å‰æ»šåŠ¨ä¸€è¡Œã€‚\n"
+
+#~ msgid "\\%-10[scroll-backward] Scroll backward 1 line.\n"
+#~ msgstr "\\%-10[scroll-backward] å‘åŽæ»šåŠ¨ä¸€è¡Œã€‚\n"
+
+#~ msgid "\\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+#~ msgstr "\\%-10[menu-digit] 选å–节点èœå•ä¸­çš„第一至第ä¹ä¸ªé¡¹ç›®ã€‚\n"
+
+#~ msgid ""
+#~ "\\%-10[search-backward] Search backward for a specified string\n"
+#~ " and select the node in which the previous occurrence is "
+#~ "found.\n"
+#~ msgstr ""
+#~ "\\%-10[search-backward] å‘åŽæœç´¢æŒ‡å®šçš„字符串\n"
+#~ " 并选择所找到的上一个实例所在的节点。\n"
+
+#~ msgid ""
+#~ " Picking a menu item causes another node to be selected.\n"
+#~ msgstr " 选å–一个èœå•é¡¹ç›®å°†é€‰ä¸­å¦ä¸€ä¸ªèŠ‚点。\n"
+
+#~ msgid ""
+#~ " %-10s Search for a specified string in the index entries of this Info\n"
+#~ msgstr " %-10s 在本 Info 文件中的索引æ¡ç›®ä¸­æœç´¢æŒ‡å®šçš„字符串,\n"
+
+#~ msgid ""
+#~ " file, and select the node referenced by the first entry "
+#~ "found.\n"
+#~ msgstr " 并选择第一个找到的æ¡ç›®æ‰€å¼•ç”¨çš„节点。\n"
+
+#~ msgid ""
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ msgstr " 您还å¯ä»¥åŒæ—¶ç»™å‡ºæ–‡ä»¶å,形å¼ä¸º (文件å)节点å。\n"
+
+#~ msgid ""
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr " 并选择找到的下一个实例所在的节点。\n"
+
+#~ msgid " %-10s Search backward for a specified string\n"
+#~ msgstr " %-10s å‘åŽæœç´¢æŒ‡å®šçš„字符串\n"
+
+#~ msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+#~ msgstr "--- 用“\\[history-node]â€æˆ–“\\[kill-node]â€é€€å‡º ---\n"
+
+#~ msgid "Following Next node..."
+#~ msgstr "è·Ÿéšä¸‹ä¸€ä¸ªèŠ‚点..."
+
+#~ msgid "Selecting first menu item..."
+#~ msgstr "选择第一个èœå•é¡¹..."
+
+#~ msgid "Selecting Next node..."
+#~ msgstr "选择下一个节点..."
+
+#~ msgid "Moving Up %d time(s), then Next."
+#~ msgstr "å‘上移动 %d 次,而åŽåŽç§»ã€‚"
+
+#~ msgid "Moving Prev in this window."
+#~ msgstr "在本窗å£ä¸­å‘上移动。"
+
+#~ msgid "Moving Up in this window."
+#~ msgstr "在本窗å£ä¸­å‘上层移动"
+
+#~ msgid "Moving to `Prev's last menu item."
+#~ msgstr "移动到å‰ä¸€ä¸ªçš„最åŽä¸€ä¸ªèœå•é¡¹ç›®ã€‚"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "\"\" is invalid"
+#~ msgstr "“â€ä¸ºéžæ³•"
+
+#~ msgid "Function"
+#~ msgstr "函数"
+
+#~ msgid "Macro"
+#~ msgstr "å®"
+
+#~ msgid "Special Form"
+#~ msgstr "特殊形å¼"
+
+#~ msgid "Variable"
+#~ msgstr "å˜é‡"
+
+#~ msgid "User Option"
+#~ msgstr "用户选项"
+
+#~ msgid "Instance Variable"
+#~ msgstr "实例å˜é‡"
+
+#~ msgid "Method"
+#~ msgstr "方法"
+
+#~ msgid "Untitled"
+#~ msgstr "无标题"
+
+#~ msgid "%s is an invalid ISO code, using %c"
+#~ msgstr "%s 是éžæ³•çš„ ISO ç ï¼Œä½¿ç”¨ %c"
+
+#~ msgid "@quote-arg only useful for single-argument macros"
+#~ msgstr "@quote-arg åªå¯¹å•å‚æ•°å®æœ‰ç”¨"
+
+#~ msgid "Cannot specify more than one macro expansion output"
+#~ msgstr "无法指定多个å®æ‰©å±•è¾“出"
+
+#~ msgid "File exists, but is not a directory"
+#~ msgstr "文件存在,但ä¸æ˜¯ç›®å½•"
+
+#~ msgid "This is %s, produced by makeinfo version %s from %s.\n"
+#~ msgstr "这是 %s,由 makeinfo 版本 %s 从 %s 生æˆã€‚\n"
+
+#~ msgid "see "
+#~ msgstr "å‚阅 "
+
+#~ msgid "No `%s.png' or `.jpg', and no extension supplied"
+#~ msgstr "ä¸æ˜¯â€œ%s.pngâ€æˆ–“.jpgâ€ï¼Œè€Œä¸”没有给出扩展å"
+
+#~ msgid "Node:"
+#~ msgstr "节点:"
+
+#~ msgid "Next:"
+#~ msgstr "下一个:"
+
+#~ msgid "Previous:"
+#~ msgstr "上一个:"
+
+#~ msgid "Up:"
+#~ msgstr "上层:"
+
+#~ msgid "Menu"
+#~ msgstr "èœå•"
+
+#~ msgid "Cross"
+#~ msgstr "交å‰å¼•ç”¨"
+
+#~ msgid "Prev"
+#~ msgstr "上一个"
+
+#~ msgid "`%s' has no Up field"
+#~ msgstr "“%sâ€æ²¡æœ‰ä¸Šå±‚域"
+
+#~ msgid "Up"
+#~ msgstr "上层"
+
+#~ msgid "node `%s' has been referenced %d times"
+#~ msgstr "节点“%sâ€å·²è¢«å¼•ç”¨äº† %d 次"
+
+#~ msgid "Table of Contents"
+#~ msgstr "目录"
+
+#~ msgid "Short Contents"
+#~ msgstr "简短目录"
+
+#~ msgid "%s: TOC should be here, but it was not found"
+#~ msgstr "%s:目录应该在这里,但它并未出现"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+#~ "\n"
+#~ "Install or delete dir entries from INFO-FILE in the Info directory file\n"
+#~ "DIR-FILE.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+#~ " don't insert any new entries.\n"
+#~ " --dir-file=NAME specify file name of Info directory file.\n"
+#~ " This is equivalent to using the DIR-FILE argument.\n"
+#~ " --entry=TEXT insert TEXT as an Info directory entry.\n"
+#~ " TEXT should have the form of an Info menu item line\n"
+#~ " plus zero or more extra lines starting with "
+#~ "whitespace.\n"
+#~ " If you specify more than one entry, they are all "
+#~ "added.\n"
+#~ " If you don't specify any entries, they are "
+#~ "determined\n"
+#~ " from information in the Info file itself.\n"
+#~ " --help display this help and exit.\n"
+#~ " --info-file=FILE specify Info file to install in the directory.\n"
+#~ " This is equivalent to using the INFO-FILE argument.\n"
+#~ " --info-dir=DIR same as --dir-file=DIR/dir.\n"
+#~ " --item=TEXT same as --entry TEXT.\n"
+#~ " An Info directory entry is actually a menu item.\n"
+#~ " --quiet suppress warnings.\n"
+#~ " --remove same as --delete.\n"
+#~ " --section=SEC put this file's entries in section SEC of the "
+#~ "directory.\n"
+#~ " If you specify more than one section, all the "
+#~ "entries\n"
+#~ " are added in each of the sections.\n"
+#~ " If you don't specify any sections, they are "
+#~ "determined\n"
+#~ " from information in the Info file itself.\n"
+#~ " --version display version information and exit.\n"
+#~ msgstr ""
+#~ "用法:%s [选项]... [INFO-文件 [DIR-文件]]\n"
+#~ "\n"
+#~ "å°† INFO-文件中的目录æ¡ç›®å®‰è£…到 Info 目录文件 DIR-文件中,或从中\n"
+#~ "删除。\n"
+#~ "\n"
+#~ "选项:\n"
+#~ " --delete 从 DIR-文件中删除关于 INFO-文件的现有æ¡ç›®ï¼›\n"
+#~ " ä¸åˆ é™¤ä»»ä½•æ–°æ¡ç›®ã€‚\n"
+#~ " --dir-file=NAME 指定 Info 目录文件的文件å。\n"
+#~ " 这等价于使用 DIR-文件å‚数。\n"
+#~ " --entry=TEXT å°† TEXT 作为 Info 目录æ¡ç›®æ’入。\n"
+#~ " TEXT çš„å½¢å¼åº”该是 Info èœå•é¡¹ç›®\n"
+#~ " 行以åŠé›¶ä¸ªæˆ–多个以空白开头的行。\n"
+#~ " 如果您指明多个æ¡ç›®ï¼Œå°†å…¨éƒ¨æ·»åŠ ã€‚\n"
+#~ " 如果您未指明任何æ¡ç›®ï¼Œå®ƒä»¬å°†ä»Ž\n"
+#~ " Info 文件自身的信æ¯æ¥åˆ¤æ–­ã€‚\n"
+#~ " --help 显示本求助信æ¯å¹¶é€€å‡ºã€‚\n"
+#~ " --info-file=FILE 指定è¦å®‰è£…到目录中的 Info 文件。\n"
+#~ " 这等价于使用 INFO-文件å‚数。\n"
+#~ " --info-dir=DIR ç­‰åŒäºŽ --dir-file=DIR/dir。\n"
+#~ " --item=TEXT ç­‰åŒäºŽ --entry 文本。\n"
+#~ " Info 目录æ¡ç›®å®žé™…上是èœå•é¡¹ç›®ã€‚\n"
+#~ " --quiet ä¸è¦è¾“出警告。\n"
+#~ " --remove ç­‰åŒäºŽ --delete。\n"
+#~ " --section=SEC 将该文件的æ¡ç›®å­˜å‚¨åˆ°ç›®å½•çš„节 SEC 中。\n"
+#~ " 如果您指明多于一个节,将加入å„个\n"
+#~ " 节中的所有æ¡ç›®ã€‚\n"
+#~ " å¦‚æžœæ‚¨æœªæŒ‡æ˜Žä»»ä½•èŠ‚ï¼Œå°†æ ¹æ® Info\n"
+#~ " 文件自身的信æ¯æ¥åˆ¤æ–­å®ƒä»¬ã€‚\n"
+#~ " --version 显示版本信æ¯å¹¶é€€å‡ºã€‚\n"
+
+#~ msgid "%s: Specify the Info directory only once.\n"
+#~ msgstr "%s:Info 目录åªåº”该指定一次。\n"
+
+#~ msgid "menu item `%s' already exists, for file `%s'"
+#~ msgstr "在文件“%2$sâ€ä¸­èœå•é¡¹â€œ%1$sâ€å·²å­˜åœ¨"
+
+#~ msgid "keep temporary files around after processing"
+#~ msgstr "在处ç†ä¹‹åŽä¿ç•™ä¸´æ—¶æ–‡ä»¶"
+
+#~ msgid "do not keep temporary files around after processing (default)"
+#~ msgstr "在处ç†ä¹‹åŽåˆ é™¤ä¸´æ—¶æ–‡ä»¶ (默认)"
+
+#~ msgid "%s; for file `%s'.\n"
+#~ msgstr "%s;文件“%sâ€ã€‚\n"
diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo
new file mode 100644
index 0000000..1fee65a
--- /dev/null
+++ b/po/zh_TW.gmo
Binary files differ
diff --git a/po/zh_TW.po b/po/zh_TW.po
new file mode 100644
index 0000000..51352b9
--- /dev/null
+++ b/po/zh_TW.po
@@ -0,0 +1,3465 @@
+# traditional Chinese translation for texinfo
+# Copyright (C) 2000 Free Software Foundation, Inc.
+# plasma <plasmaball@pchome.com.tw>, 2000.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo 4.1\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2008-09-18 20:38+0200\n"
+"PO-Revision-Date: 2002-03-08 04:56+0800\n"
+"Last-Translator: Abel Cheung <maddog@linux.org.hk>\n"
+"Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=Big5\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: gnulib/lib/error.c:125
+msgid "Unknown system error"
+msgstr ""
+
+#: gnulib/lib/getopt.c:526 gnulib/lib/getopt.c:542
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: ¿ï¶µ `%s' ¤£©ú\n"
+
+#: gnulib/lib/getopt.c:575 gnulib/lib/getopt.c:579
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: ¿ï¶µ `--%s' ¤£¥i§t¦³¤Þ¼Æ\n"
+
+#: gnulib/lib/getopt.c:588 gnulib/lib/getopt.c:593
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: ¿ï¶µ `%c%s' ¤£¥i§t¦³¤Þ¼Æ\n"
+
+#: gnulib/lib/getopt.c:636 gnulib/lib/getopt.c:655 gnulib/lib/getopt.c:971
+#: gnulib/lib/getopt.c:990
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: ¿ï¶µ `%s' ¥²¶·§t¦³¤Þ¼Æ\n"
+
+#: gnulib/lib/getopt.c:693 gnulib/lib/getopt.c:696
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: ¥¼ª¾ªº¿ï¶µ `--%s'\n"
+
+#: gnulib/lib/getopt.c:704 gnulib/lib/getopt.c:707
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: ¥¼ª¾ªº¿ï¶µ `%c%s'\n"
+
+#: gnulib/lib/getopt.c:759 gnulib/lib/getopt.c:762
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: ¤£¦Xªkªº¿ï¶µ -- %c\n"
+
+#: gnulib/lib/getopt.c:768 gnulib/lib/getopt.c:771
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: µL®Äªº¿ï¶µ -- %c\n"
+
+#: gnulib/lib/getopt.c:823 gnulib/lib/getopt.c:839 gnulib/lib/getopt.c:1043
+#: gnulib/lib/getopt.c:1061
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: ¿ï¶µ¥²¶·§t¦³¤Þ¼Æ -- %c\n"
+
+#: gnulib/lib/getopt.c:892 gnulib/lib/getopt.c:908
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: ¿ï¶µ `-W %s' ¤£©ú½T\n"
+
+#: gnulib/lib/getopt.c:932 gnulib/lib/getopt.c:950
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: ¿ï¶µ `-W %s' ¤£¥i§t¦³¤Þ¼Æ\n"
+
+#: gnulib/lib/xalloc-die.c:34 gnulib/lib/xsetenv.c:37
+#, fuzzy, c-format
+msgid "memory exhausted"
+msgstr "µêÀÀ°O¾ÐÅé¯ÓºÉ"
+
+#: info/echo-area.c:283 info/session.c:966
+msgid "Move forward a character"
+msgstr "¦V«e²¾°Ê¤@­Ó¦r¤¸"
+
+#: info/echo-area.c:295 info/session.c:993
+msgid "Move backward a character"
+msgstr "¦V«á²¾°Ê¤@­Ó¦r¤¸"
+
+#: info/echo-area.c:307
+msgid "Move to the start of this line"
+msgstr "²¾¦Ü¥»¦æ¶}ÀY"
+
+#: info/echo-area.c:312
+msgid "Move to the end of this line"
+msgstr "²¾¦Ü¥»¦æµ²§À"
+
+#: info/echo-area.c:320 info/session.c:1025
+msgid "Move forward a word"
+msgstr "¦V«e²¾°Ê¤@­Ó¦r"
+
+#: info/echo-area.c:360 info/session.c:1049
+msgid "Move backward a word"
+msgstr "¦V«á²¾°Ê¤@­Ó¦r"
+
+#: info/echo-area.c:400
+msgid "Delete the character under the cursor"
+msgstr "§R°£´å¼Ð¦ì¸mªº¦r¤¸"
+
+#: info/echo-area.c:430
+msgid "Delete the character behind the cursor"
+msgstr "§R°£´å¼Ð¦ì¸m«áªº¦r¤¸"
+
+#: info/echo-area.c:451
+msgid "Cancel or quit operation"
+msgstr "¨ú®ø©Îµ²§ô¥Ø«eªº°Ê§@"
+
+#: info/echo-area.c:466
+msgid "Accept (or force completion of) this line"
+msgstr "±µ¨ü (©Î±j­¢§¹¦¨) ¥»¦æ"
+
+#: info/echo-area.c:471
+msgid "Insert next character verbatim"
+msgstr "¤£§@Âà´«, ´¡¤J¤U¤@­Ó¦r¤¸"
+
+#: info/echo-area.c:479
+msgid "Insert this character"
+msgstr "´¡¤J¥»¦r¤¸"
+
+#: info/echo-area.c:498
+msgid "Insert a TAB character"
+msgstr "´¡¤J¤@­Ó TAB ¦r¤¸"
+
+#: info/echo-area.c:505
+msgid "Transpose characters at point"
+msgstr "ÅÜ´«´å¼Ð¦ì¸mªº¦r¤¸ªº¶¶§Ç"
+
+#: info/echo-area.c:556
+msgid "Yank back the contents of the last kill"
+msgstr "¶K¤J¤W¤@¦¸°Å¤Uªº¤º®e"
+
+#: info/echo-area.c:563
+msgid "Kill ring is empty"
+msgstr "°Å¶Kï¨S¦³¤º®e"
+
+#: info/echo-area.c:576
+msgid "Yank back a previous kill"
+msgstr "¶K¤W«e¦¸ªº°Å¤U¤º®e"
+
+#: info/echo-area.c:609
+msgid "Kill to the end of the line"
+msgstr "§R°£¦Ü¥»¦æµ²§À, ¨Ã¸m¤J°Å¶Kï"
+
+#: info/echo-area.c:622
+msgid "Kill to the beginning of the line"
+msgstr "§R°£¦Ü¥»¦æ¶}ÀY, ¨Ã¸m¤J°Å¶Kï"
+
+#: info/echo-area.c:634
+msgid "Kill the word following the cursor"
+msgstr "§R°£´å¼Ð«áªº³æ¦r, ¨Ã¸m¤J°Å¶Kï"
+
+#: info/echo-area.c:654
+msgid "Kill the word preceding the cursor"
+msgstr "§R°£´å¼Ð«eªº³æ¦r, ¨Ã¸m¤J°Å¶Kï"
+
+#: info/echo-area.c:870 info/echo-area.c:926
+msgid "No completions"
+msgstr "¨S¦³¥i¯àªº§¹¦¨¥y"
+
+#: info/echo-area.c:872
+msgid "Not complete"
+msgstr "¥¼§¹¦¨"
+
+#: info/echo-area.c:913
+msgid "List possible completions"
+msgstr "¦C¥X¥i¯àªº§¹¦¨¥y"
+
+#: info/echo-area.c:930
+msgid "Sole completion"
+msgstr "³æ¤@ªº§¹¦¨¥y"
+
+#: info/echo-area.c:939
+msgid "One completion:\n"
+msgstr "¤@­Ó§¹¦¨¥y:\n"
+
+#: info/echo-area.c:940
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d ­Ó§¹¦¨¥y:\n"
+
+#: info/echo-area.c:1087
+msgid "Insert completion"
+msgstr "´¡¤J§¹¦¨¥y"
+
+#: info/echo-area.c:1222
+msgid "Building completions..."
+msgstr "«Ø¥ß§¹¦¨¥y¤¤..."
+
+#: info/echo-area.c:1342
+msgid "Scroll the completions window"
+msgstr "±²°Ê§¹¦¨¥y¤À¹jµøµ¡"
+
+#: info/footnotes.c:212
+msgid "Footnotes could not be displayed"
+msgstr "µLªkÅã¥Üµù¸}"
+
+#: info/footnotes.c:238
+msgid "Show the footnotes associated with this node in another window"
+msgstr "±N¥»¸`ÂIªºµù¸}Åã¥Ü¦b¥t¤@­Ó¤À¹jµøµ¡¤º"
+
+#: info/footnotes.h:26
+#, fuzzy
+msgid "---------- Footnotes ----------"
+msgstr "---------------------\n"
+
+#: info/indices.c:171
+msgid "Look up a string in the index for this file"
+msgstr "¦b¥»Àɮתº¯Á¤Þ¤º¬d¸ß¦r¦ê"
+
+#: info/indices.c:198
+msgid "Finding index entries..."
+msgstr "§ä´M¯Á¤Þ¶µ¥Ø..."
+
+#: info/indices.c:206
+msgid "No indices found."
+msgstr "§ä¤£¨ì¯Á¤Þ"
+
+#: info/indices.c:216
+msgid "Index entry: "
+msgstr "¯Á¤Þ¶µ¥Ø: "
+
+#: info/indices.c:324
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr "²¾°Ê¦Ü¤U¤@­Ó²Å¦X¤W¤@¦¸ªº `\\[index-search] ©R¥Oªº·j´M¶µ¥Ø"
+
+#: info/indices.c:334
+msgid "No previous index search string."
+msgstr "¨S¦³«e¤@­Ó¯Á¤Þ·j´M¦r¦ê"
+
+#: info/indices.c:341
+msgid "No index entries."
+msgstr "¨S¦³¯Á¤Þ¶µ¥Ø."
+
+#: info/indices.c:374
+#, fuzzy, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "¨S¦³ %s¯Á¤Þ¶µ¥Ø¥]§t \"%s\"."
+
+#: info/indices.c:375
+msgid "more "
+msgstr "§ó¦hªº "
+
+#: info/indices.c:385
+msgid "CAN'T SEE THIS"
+msgstr ""
+
+#: info/indices.c:421
+#, fuzzy, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr "§ä¨ì \"%s\" ¦b %s ¤§¤¤. (`\\[next-index-match]' ¹Á¸Õ­n§ä¨ì¤U¤@­Ó¦r¦ê.)"
+
+#: info/indices.c:549
+#, fuzzy, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "±½ºË \"%s\" ªº¯Á¤Þ¤¤..."
+
+#: info/indices.c:604
+#, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr ""
+
+#: info/indices.c:630
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr "¾ã²z©Ò¦³¤wª¾ info Àɤ¤¥]§t¬d¸ß¦r¦êªº¯Á¤Þ, ¨Ã«Ø¥ß¤@­Ó¿ï³æ"
+
+#: info/indices.c:634
+msgid "Index apropos: "
+msgstr ""
+
+#: info/indices.c:662
+#, fuzzy, c-format
+msgid ""
+"\n"
+"* Menu: Nodes whose indices contain `%s':\n"
+msgstr ""
+"\n"
+"* Menu: ¨ä¯Á¤Þ¤¤¥]§t \"%s\" ªº¸`ÂI:\n"
+
+#: info/info.c:275 info/infokey.c:899
+#, c-format
+msgid "Try --help for more information.\n"
+msgstr "¸Õ¸Õ --help ¥H¨ú±o§ó¦hªº¸ê°T.\n"
+
+#: info/info.c:294 info/infokey.c:145 install-info/install-info.c:2101
+#: makeinfo/makeinfo.c:802 util/texindex.c:295
+#, c-format
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+
+#: info/info.c:506
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "§ä¤£¨ì¥]§t `%s' ªº¯Á¤Þ¶µ¥Ø\n"
+
+#: info/info.c:600
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [MENU-ITEM...]\n"
+"\n"
+"Read documentation in Info format.\n"
+msgstr ""
+
+#: info/info.c:606
+msgid ""
+"Options:\n"
+" -k, --apropos=STRING look up STRING in all indices of all "
+"manuals.\n"
+" -d, --directory=DIR add DIR to INFOPATH.\n"
+" --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+" -f, --file=FILENAME specify Info file to visit."
+msgstr ""
+
+#: info/info.c:613
+msgid ""
+" -h, --help display this help and exit.\n"
+" --index-search=STRING go to node pointed by index entry STRING.\n"
+" -n, --node=NODENAME specify nodes in first visited Info file.\n"
+" -o, --output=FILENAME output selected nodes to FILENAME."
+msgstr ""
+
+#: info/info.c:619
+msgid ""
+" -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+" --no-raw-escapes output escapes as literal text.\n"
+" --restore=FILENAME read initial keystrokes from FILENAME.\n"
+" -O, --show-options, --usage go to command-line options node."
+msgstr ""
+
+#: info/info.c:626
+msgid " -b, --speech-friendly be friendly to speech synthesizers."
+msgstr ""
+
+#: info/info.c:630
+msgid ""
+" --subnodes recursively output menu items.\n"
+" --vi-keys use vi-like and less-like key bindings.\n"
+" --version display version information and exit.\n"
+" -w, --where, --location print physical location of Info file."
+msgstr ""
+
+#: info/info.c:636
+msgid ""
+"\n"
+"The first non-option argument, if present, is the menu entry to start from;\n"
+"it is searched for in all `dir' files along INFOPATH.\n"
+"If it is not present, info merges all `dir' files and shows the result.\n"
+"Any remaining arguments are treated as the names of menu\n"
+"items relative to the initial node visited."
+msgstr ""
+
+#: info/info.c:643
+msgid ""
+"\n"
+"For a summary of key bindings, type h within Info."
+msgstr ""
+
+#: info/info.c:646
+msgid ""
+"\n"
+"Examples:\n"
+" info show top-level dir menu\n"
+" info info show the general manual for Info readers\n"
+" info info-stnd show the manual specific to this Info program\n"
+" info emacs start at emacs node from top-level dir\n"
+" info emacs buffers start at buffers node within emacs manual\n"
+" info --show-options emacs start at node with emacs' command line options\n"
+" info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+" info -f ./foo.info show file ./foo.info, not searching dir"
+msgstr ""
+
+#: info/info.c:657 info/infokey.c:918 makeinfo/makeinfo.c:475
+#: util/texindex.c:259
+#, fuzzy
+msgid ""
+"\n"
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+"µ{¦¡¯äÂÎ, ½Ð¥H¹q¤l¶l¥ó (­^¤å) ¦^³ø¦Ü bug-texinfo@gnu.org,\n"
+"¤@¯ë°ÝÃD»P°Q½×, ½Ð¥H¹q¤l¶l¥ó (­^¤å) ±H¨ì help-texinfo@gnu.org.\n"
+
+#: info/info.c:691
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "§ä¤£¨ì `%s' ¸`ÂI."
+
+#: info/info.c:692
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "§ä¤£¨ì `(%s)%s' ¸`ÂI."
+
+#: info/info.c:693
+msgid "Cannot find a window!"
+msgstr "§ä¤£¨ì¤À¹jµøµ¡!"
+
+#: info/info.c:694
+msgid "Point doesn't appear within this window's node!"
+msgstr "´å¼Ð¦ì¸m¤£¦b¥»¤À¹jµøµ¡ªº¸`ÂI¤º!"
+
+#: info/info.c:695
+msgid "Cannot delete the last window."
+msgstr "µLªk§R°£¤W¤@­Ó¤À¹jµøµ¡."
+
+#: info/info.c:696
+msgid "No menu in this node."
+msgstr "¥»¸`ÂI¨S¦³¿ï³æ."
+
+#: info/info.c:697
+msgid "No footnotes in this node."
+msgstr "¥»¸`ÂI¨S¦³µù¸}."
+
+#: info/info.c:698
+msgid "No cross references in this node."
+msgstr "¥»¸`ÂI¨S¦³¥æ¤¬°Ñ·Ó."
+
+#: info/info.c:699
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "¥»¸`ÂI¨S¦³ `%s' pointer."
+
+#: info/info.c:700
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "¥¼ª¾ªº Info ©R¥O `%c'; ¸Õ¸Õ `?' ¥H¨ú±o¨D§U¸ê°T."
+
+#: info/info.c:701
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr "²×ºÝ¾÷Ãþ«¬ `%s' µLªk¤ä´©°õ¦æ Info ©Ò»Ýªº»Ý¨D."
+
+#: info/info.c:702
+msgid "You are already at the last page of this node."
+msgstr "±z¤w¦b¥»¸`ÂIªº³Ì«á¤@­¶."
+
+#: info/info.c:703
+msgid "You are already at the first page of this node."
+msgstr "±z¤w¦b¥»¸`ÂIªº²Ä¤@­¶."
+
+#: info/info.c:704
+msgid "Only one window."
+msgstr "¥u¦³¤@­Ó¤À¹jµøµ¡."
+
+#: info/info.c:705
+msgid "Resulting window would be too small."
+msgstr "²£¥Íªº¤À¹jµøµ¡·|¤Ó¤p."
+
+#: info/info.c:706
+msgid "Not enough room for a help window, please delete a window."
+msgstr "³Ñ¤UªºªÅ¶¡¤Ó¤p, µLªk®e¯Ç¨D§U¤À¹jµøµ¡, ½Ð§R°£¤@­Ó¤À¹jµøµ¡."
+
+#: info/infodoc.c:45
+msgid "Basic Info command keys\n"
+msgstr ""
+
+#: info/infodoc.c:47
+#, fuzzy
+msgid "\\%-10[quit-help] Close this help window.\n"
+msgstr " %-10s µ²§ô¥»¨D§U.\n"
+
+#: info/infodoc.c:48
+#, fuzzy
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr " %-10s ¤@¨Öµ²§ô Info µ{¦¡.\n"
+
+#: info/infodoc.c:49
+#, fuzzy
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr " %-10s °õ¦æ Info «ü¾É½Òµ{.\n"
+
+#: info/infodoc.c:51
+#, fuzzy
+msgid "\\%-10[prev-line] Move up one line.\n"
+msgstr " %-10s ©¹«á±²°Ê¤@¦æ.\n"
+
+#: info/infodoc.c:52
+#, fuzzy
+msgid "\\%-10[next-line] Move down one line.\n"
+msgstr " %-10s ©¹«e±²°Ê¤@¦æ.\n"
+
+#: info/infodoc.c:53
+#, fuzzy
+msgid "\\%-10[scroll-backward] Scroll backward one screenful.\n"
+msgstr " %-10s ¦V«á±²°Ê¤@­¶.\n"
+
+#: info/infodoc.c:54
+#, fuzzy
+msgid "\\%-10[scroll-forward] Scroll forward one screenful.\n"
+msgstr " %-10s ¦V«e±²°Ê¤@­¶.\n"
+
+#: info/infodoc.c:55
+#, fuzzy
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr " %-10s ²¾¦Ü¥»¸`ÂIªº¶}ÀY.\n"
+
+#: info/infodoc.c:56
+#, fuzzy
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr " %-10s ²¾¦Ü¥»¸`ÂIªºµ²§À.\n"
+
+#: info/infodoc.c:58
+#, fuzzy
+msgid "\\%-10[move-to-next-xref] Skip to the next hypertext link.\n"
+msgstr " %-10s ¸õ¨ì¥»¸`ÂI¤¤ªº¤U¤@­Ó¶W¥»¤å³sµ².\n"
+
+#: info/infodoc.c:59
+#, fuzzy
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under the "
+"cursor.\n"
+msgstr " %-10s ¸òÀH´å¼Ð¤Uªº¶W¥»¤å³sµ².\n"
+
+#: info/infodoc.c:60
+#, fuzzy
+msgid "\\%-10[history-node] Go back to the last node seen in this window.\n"
+msgstr " %-10s ²¾°Ê¦Ü¥»¤À¹jµøµ¡¤¤, ¤W¤@­ÓÆ[¬Ýªº¸`ÂI.\n"
+
+#: info/infodoc.c:62
+#, fuzzy
+msgid "\\%-10[global-prev-node] Go to the previous node in the document.\n"
+msgstr " %-10s ²¾¦Ü¥»¸`ÂIªº '¤W¤@­Ó (previous)' ¸`ÂI.\n"
+
+#: info/infodoc.c:63
+#, fuzzy
+msgid "\\%-10[global-next-node] Go to the next node in the document.\n"
+msgstr " %-10s ²¾¦Ü¥»¸`ÂIªº '¤U¤@­Ó (next)' ¸`ÂI.\n"
+
+#: info/infodoc.c:64
+#, fuzzy
+msgid "\\%-10[prev-node] Go to the previous node on this level.\n"
+msgstr " %-10s ²¾¦Ü¥»¸`ÂIªº '¤W¤@­Ó (previous)' ¸`ÂI.\n"
+
+#: info/infodoc.c:65
+#, fuzzy
+msgid "\\%-10[next-node] Go to the next node on this level.\n"
+msgstr " %-10s ²¾¦Ü¥»¸`ÂIªº '¤U¤@­Ó (next)' ¸`ÂI.\n"
+
+#: info/infodoc.c:66
+#, fuzzy
+msgid "\\%-10[up-node] Go up one level.\n"
+msgstr " %-10s ²¾¦Ü¥»¸`ÂIªº '¤W¤@¼h (up)' ¸`ÂI.\n"
+
+#: info/infodoc.c:67
+#, fuzzy
+msgid "\\%-10[top-node] Go to the top node of this document.\n"
+msgstr " %-10s ²¾¦Ü¥»¸`ÂIªºµ²§À.\n"
+
+#: info/infodoc.c:68
+#, fuzzy
+msgid "\\%-10[dir-node] Go to the main `directory' node.\n"
+msgstr " %-10s ²¾¦Ü¥»¸`ÂIªºµ²§À.\n"
+
+#: info/infodoc.c:70
+#, fuzzy
+msgid "1...9 Pick the first...ninth item in this node's menu.\n"
+msgstr " %-10s ¬D¿ï¸`ÂI¥Ø¿ý¤¤ªº²Ä¤@­Ó...²Ä¤E­Ó¶µ¥Ø.\n"
+
+#: info/infodoc.c:71
+#, fuzzy
+msgid "\\%-10[last-menu-item] Pick the last item in this node's menu.\n"
+msgstr " %-10s ¬D¿ï¸`ÂI¥Ø¿ýªº³Ì«á¤@­Ó¶µ¥Ø.\n"
+
+#: info/infodoc.c:72
+#, fuzzy
+msgid "\\%-10[menu-item] Pick a menu item specified by name.\n"
+msgstr " %-10s ¥H¦WºÙ¿ï¨ú¿ï³æ¶µ¥Ø.\n"
+
+#: info/infodoc.c:73
+#, fuzzy
+msgid "\\%-10[xref-item] Follow a cross reference specified by name.\n"
+msgstr " %-10s ¸òÀH¥æ¤¬°Ñ·Ó. Ū¨ú°Ñ·Óªº¦WºÙ.\n"
+
+#: info/infodoc.c:74
+#, fuzzy
+msgid "\\%-10[goto-node] Go to a node specified by name.\n"
+msgstr " %-10s ²¾°Ê¨ì«ü©w¦WºÙªº¸`ÂI.\n"
+
+#: info/infodoc.c:76
+#, fuzzy
+msgid "\\%-10[search] Search forward for a specified string.\n"
+msgstr " %-10s ¦b¥» Info Àɤ¤, ¦V«e·j´M¤@­Ó«ü©wªº¦r¦ê,\n"
+
+#: info/infodoc.c:77
+#, fuzzy
+msgid "\\%-10[search-previous] Search for previous occurrence.\n"
+msgstr " %-10s ²¾¦Ü¥»¸`ÂIªº '¤W¤@­Ó (previous)' ¸`ÂI.\n"
+
+#: info/infodoc.c:78
+#, fuzzy
+msgid "\\%-10[search-next] Search for next occurrence.\n"
+msgstr " %-10s ¦b¥» Info Àɪº¯Á¤Þ¶µ¥Ø¤¤, ·j´M¤@­Ó«ü©wªº¦r¦ê,\n"
+
+#: info/infodoc.c:79
+#, fuzzy
+msgid ""
+"\\%-10[index-search] Search for a specified string in the index, and\n"
+" select the node referenced by the first entry found.\n"
+msgstr " ¨Ã¥B¿ï¾Ü²Ä¤@­Ó·j´M¨ìªº¶µ¥Ø©Ò°Ñ·Óªº¸`ÂI.\n"
+
+#: info/infodoc.c:81
+#, fuzzy
+msgid "\\%-10[abort-key] Cancel the current operation.\n"
+msgstr "¨ú®ø¥Ø«eªº§@·~"
+
+#: info/infodoc.c:89
+#, fuzzy
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr "******************************\n"
+
+#: info/infodoc.c:92
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s µ²§ô¥»¨D§U.\n"
+
+#: info/infodoc.c:93
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s ¤@¨Öµ²§ô Info µ{¦¡.\n"
+
+#: info/infodoc.c:94
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s °õ¦æ Info «ü¾É½Òµ{.\n"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr " %-10s ²¾¦Ü¥»¸`ÂIªº '¤U¤@­Ó (next)' ¸`ÂI.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr " %-10s ²¾¦Ü¥»¸`ÂIªº '¤W¤@­Ó (previous)' ¸`ÂI.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s ²¾¦Ü¥»¸`ÂIªº '¤W¤@¼h (up)' ¸`ÂI.\n"
+
+#: info/infodoc.c:101
+#, fuzzy, c-format
+msgid ""
+" %-10s Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr " ¿ï¨ú¿ï³æ¶µ¥Ø¥H¿ï¾Ü¥t¤@­Ó¸`ÂI.\n"
+
+#: info/infodoc.c:103
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr " %-10s ¸òÀH¥æ¤¬°Ñ·Ó. Ū¨ú°Ñ·Óªº¦WºÙ.\n"
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr " %-10s ²¾°Ê¦Ü¥»¤À¹jµøµ¡¤¤, ¤W¤@­ÓÆ[¬Ýªº¸`ÂI.\n"
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr " %-10s ¸õ¨ì¥»¸`ÂI¤¤ªº¤U¤@­Ó¶W¥»¤å³sµ².\n"
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s ¸òÀH´å¼Ð¤Uªº¶W¥»¤å³sµ².\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr " %-10s ²¾¦Ü `directory' ¸`ÂI. ¦P `g (DIR)'.\n"
+
+#: info/infodoc.c:108
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr " %-10s ²¾¦Ü Top ¸`ÂI. ¦P `g TOP'.\n"
+
+#: info/infodoc.c:110
+#, fuzzy
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr "---------------------\n"
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s ¦V«e±²°Ê¤@­¶.\n"
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s ¦V«á±²°Ê¤@­¶.\n"
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s ²¾¦Ü¥»¸`ÂIªº¶}ÀY.\n"
+
+#: info/infodoc.c:115
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s ²¾¦Ü¥»¸`ÂIªºµ²§À.\n"
+
+#: info/infodoc.c:116
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s ©¹«e±²°Ê¤@¦æ.\n"
+
+#: info/infodoc.c:117
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s ©¹«á±²°Ê¤@¦æ.\n"
+
+#: info/infodoc.c:119
+#, fuzzy
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr "---------------\n"
+
+#: info/infodoc.c:121
+#, fuzzy, c-format
+msgid " %-10s Pick first...ninth item in node's menu.\n"
+msgstr " %-10s ¬D¿ï¸`ÂI¥Ø¿ý¤¤ªº²Ä¤@­Ó...²Ä¤E­Ó¶µ¥Ø.\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s ¬D¿ï¸`ÂI¥Ø¿ýªº³Ì«á¤@­Ó¶µ¥Ø.\n"
+
+#: info/infodoc.c:125
+#, fuzzy, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr " ¨Ã¥B¿ï¾Ü²Ä¤@­Ó·j´M¨ìªº¶µ¥Ø©Ò°Ñ·Óªº¸`ÂI.\n"
+
+#: info/infodoc.c:127
+#, fuzzy, c-format
+msgid ""
+" %-10s Move to node specified by name.\n"
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr " ±z¤]¥i¥H¥]§tÀɦW, ¦p: (ÀɦW)¸`ÂI¦W.\n"
+
+#: info/infodoc.c:129
+#, fuzzy, c-format
+msgid ""
+" %-10s Search forward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr " ¨Ã¥B¿ï¾Ü¤U¤@­Ó·j´M¨ìªº¦r¦ê©Ò¦bªº¸`ÂI.\n"
+
+#: info/infodoc.c:131
+#, fuzzy, c-format
+msgid ""
+" %-10s Search backward for a specified string,\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr " ¨Ã¥B¿ï¾Ü¤U¤@­Ó·j´M¨ìªº¦r¦ê©Ò¦bªº¸`ÂI.\n"
+
+#: info/infodoc.c:312
+msgid "The current search path is:\n"
+msgstr "¥Ø«eªº·j´M¸ô®|¬°:\n"
+
+#: info/infodoc.c:316
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"¦b Info ¤À¹jµøµ¡¤¤¥i¥Îªº«ü¥O:\n"
+"\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"¦^À³°Ï¤¤¥i¥Îªº«ü¥O:\n"
+"\n"
+
+#: info/infodoc.c:343
+#, fuzzy, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+"¥H¤Uªº«ü¥O, ¥u¥i¸g¥Ñ M-x °õ¦æ:\n"
+"\n"
+
+#: info/infodoc.c:347
+#, fuzzy
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+"¥H¤Uªº«ü¥O, ¥u¥i¸g¥Ñ M-x °õ¦æ:\n"
+"\n"
+
+#: info/infodoc.c:477
+msgid "Display help message"
+msgstr "Åã¥Ü¨D§U°T®§"
+
+#: info/infodoc.c:495
+msgid "Visit Info node `(info)Help'"
+msgstr "«ô³X Info ¸`ÂI `(info)Help'"
+
+#: info/infodoc.c:633
+msgid "Print documentation for KEY"
+msgstr "¦C¥X KEY ªº¤å¥ó"
+
+#: info/infodoc.c:645
+#, c-format
+msgid "Describe key: %s"
+msgstr "´y­z«öÁä«ü¥O: %s"
+
+#: info/infodoc.c:656
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s ¥¼©w¸q."
+
+#: info/infodoc.c:672 info/infodoc.c:701
+#, c-format
+msgid "%s is undefined."
+msgstr "%s ¥¼©w¸q."
+
+#: info/infodoc.c:722
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s ©w¸q¦¨ %s."
+
+#: info/infodoc.c:1146
+msgid "Show what to type to execute a given command"
+msgstr "Åã¥Ü°õ¦æ¬Y©R¥O©Ò»ÝÁä¤Jªº«öÁä"
+
+#: info/infodoc.c:1150
+msgid "Where is command: "
+msgstr ""
+
+#: info/infodoc.c:1172
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "`%s' ¥¼Ãìµ²¨ì¥ô¦ó«öÁä"
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s ¥u¯à¸g¥Ñ %s °õ¦æ."
+
+#: info/infodoc.c:1183
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s ¥i¸g¥Ñ %s °õ¦æ."
+
+#: info/infodoc.c:1188
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "¨S¦³¦W¬° `%s' ªº¨ç¦¡"
+
+#: info/infodoc.c:96
+#, fuzzy
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr "----------------------\n"
+
+#: info/infokey.c:170
+msgid "incorrect number of arguments"
+msgstr ""
+
+#: info/infokey.c:201
+#, fuzzy, c-format
+msgid "cannot open input file `%s'"
+msgstr "µLªk¶}±Ò¦Ü `%s' ªººÞ¹D."
+
+#: info/infokey.c:215
+#, fuzzy, c-format
+msgid "cannot create output file `%s'"
+msgstr "µLªk«Ø¥ß¿é¥XÀÉ®× `%s'."
+
+#: info/infokey.c:226
+#, c-format
+msgid "error writing to `%s'"
+msgstr ""
+
+#: info/infokey.c:232
+#, fuzzy, c-format
+msgid "error closing output file `%s'"
+msgstr "µLªk«Ø¥ß¿é¥XÀÉ®× `%s'."
+
+#: info/infokey.c:450
+msgid "key sequence too long"
+msgstr ""
+
+#: info/infokey.c:529
+msgid "missing key sequence"
+msgstr ""
+
+#: info/infokey.c:610
+msgid "NUL character (\\000) not permitted"
+msgstr ""
+
+#: info/infokey.c:641
+#, c-format
+msgid "NUL character (^%c) not permitted"
+msgstr ""
+
+#: info/infokey.c:665
+#, fuzzy
+msgid "missing action name"
+msgstr "%c%s ¿òº|¥k¤j¬A¸¹"
+
+#: info/infokey.c:681 info/infokey.c:756
+msgid "section too long"
+msgstr ""
+
+#: info/infokey.c:688
+#, fuzzy, c-format
+msgid "unknown action `%s'"
+msgstr "¥¼ª¾ªº©R¥O `%s'"
+
+#: info/infokey.c:698
+msgid "action name too long"
+msgstr ""
+
+#: info/infokey.c:712
+#, c-format
+msgid "extra characters following action `%s'"
+msgstr ""
+
+#: info/infokey.c:723
+#, fuzzy
+msgid "missing variable name"
+msgstr "%s: ¿òº|Àɮפ޼Æ.\n"
+
+#: info/infokey.c:733
+msgid "missing `=' immediately after variable name"
+msgstr ""
+
+#: info/infokey.c:741
+msgid "variable name too long"
+msgstr ""
+
+#: info/infokey.c:765
+msgid "value too long"
+msgstr ""
+
+#: info/infokey.c:890
+#, c-format
+msgid "\"%s\", line %u: "
+msgstr ""
+
+#: info/infokey.c:906
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... [INPUT-FILE]\n"
+"\n"
+"Compile infokey source file to infokey file. Reads INPUT-FILE (default\n"
+"$HOME/.infokey) and writes compiled key file to (by default) $HOME/.info.\n"
+"\n"
+"Options:\n"
+" --output FILE output to FILE instead of $HOME/.info\n"
+" --help display this help and exit.\n"
+" --version display version information and exit.\n"
+msgstr ""
+
+#: info/infomap.c:955
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr ""
+
+#: info/infomap.c:958
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr ""
+
+#: info/infomap.c:971
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr ""
+
+#: info/infomap.c:990
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:999
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1015
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1036
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1171
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr ""
+
+#: info/infomap.c:1221
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr ""
+
+#: info/m-x.c:68
+msgid "Read the name of an Info command and describe it"
+msgstr "Ū¨ú Info ©R¥Oªº¦WºÙ, ¨Ã¥B´y­z¥¦"
+
+#: info/m-x.c:72
+msgid "Describe command: "
+msgstr "´y­z©R¥O: "
+
+#: info/m-x.c:95
+msgid "Read a command name in the echo area and execute it"
+msgstr "¦b¦^À³°Ï¤¤Åª¨ú©R¥O¦WºÙ, ¨Ã¥B°õ¦æ¥¦"
+
+#: info/m-x.c:139
+msgid "Cannot execute an `echo-area' command here."
+msgstr "µLªk¦b³o¸Ì°õ¦æ `echo-area' ©R¥O."
+
+#: info/m-x.c:153
+#, fuzzy, c-format
+msgid "Undefined command: %s"
+msgstr "¥¼ª¾ªº©R¥O `%s'"
+
+#: info/m-x.c:159
+msgid "Set the height of the displayed window"
+msgstr "³]©wÅã¥Üµøµ¡ªº°ª«×"
+
+#: info/m-x.c:172
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "³]©w¿Ã¹õ°ª«×¬° (%d): "
+
+#: info/makedoc.c:166 info/makedoc.c:174
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+
+#: info/makedoc.c:556
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "µLªk³B²zÀÉ®× %s.\n"
+
+#: info/nodemenu.c:30
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+"\n"
+"* ¿ï³æ:\n"
+" (ÀÉ®×)¸`ÂI ¦æ ¼Æ ¤j¤p ¥] §t ÀÉ ®×\n"
+" ---------- ----- ---- ---------------"
+
+#: info/nodemenu.c:201
+msgid ""
+"Here is the menu of nodes you have recently visited.\n"
+"Select one from this menu, or use `\\[history-node]' in another window.\n"
+msgstr ""
+"³o¬O±z³Ìªñ«ô³X¹Lªº¸`ÂI¿ï³æ.\n"
+"¦Û¥»¿ï³æ¿ï¨ú¤@¶µ, ©Î¬O¦b¥t¤@­Ó¤À¹jµøµ¡¨Ï¥Î `\\[history-node]' ©R¥O.\n"
+
+#: info/nodemenu.c:223
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr "²£¥Í¤@­Ó¤À¹jµøµ¡, ¥]§t©Ò¦³³Ìªñ«ô³X¹Lªº¸`ÂI¿ï³æ"
+
+#: info/nodemenu.c:303
+msgid "Select a node which has been previously visited in a visible window"
+msgstr "¿ï¨ú¤§«e¦b¥i¨£¤À¹jµøµ¡«ô³X¹Lªº¸`ÂI"
+
+#: info/nodemenu.c:316
+msgid "Select visited node: "
+msgstr "¿ï¨ú«ô³X¹Lªº¸`ÂI: "
+
+#: info/nodemenu.c:336 info/session.c:2578
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "¥æ¤¬°Ñ·Ó¤£¨£¤F! (%s)."
+
+#: info/search.c:166
+#, c-format
+msgid "regexp error: %s"
+msgstr ""
+
+#: info/session.c:164
+#, c-format
+msgid ""
+"Welcome to Info version %s. Type \\[get-help-window] for help, \\[menu-item] "
+"for menu item."
+msgstr ""
+"Åwªï¨Ï¥Î Info ª©¥» %s. Áä¤J \\[get-help-window] ¥H¨ú±o¨D§U¸ê°T, \\[menu-"
+"item] ¥H¨ú±o¿ï³æ¶µ¥Ø."
+
+#: info/session.c:625
+msgid "Move down to the next line"
+msgstr "²¾¦Ü¤U¤@¦æ"
+
+#: info/session.c:661
+msgid "Move up to the previous line"
+msgstr "²¾¦Ü¤W¤@¦æ"
+
+#: info/session.c:931
+msgid "Move to the end of the line"
+msgstr "²¾¦Ü¥»¦æµ²§À"
+
+#: info/session.c:942
+msgid "Move to the start of the line"
+msgstr "²¾¦Ü¥»¦æ¶}ÀY"
+
+#: info/session.c:1142
+msgid "Next"
+msgstr "¤U¤@­Ó"
+
+#: info/session.c:1158 info/session.c:1283
+msgid "No more nodes within this document."
+msgstr "¥»¤å¥ó¤¤¨S¦³§ó¦hªº¸`ÂI¤F."
+
+#: info/session.c:1309
+msgid "No `Prev' for this node."
+msgstr "¥»¸`ÂI¨S¦³ `¤W¤@­Ó (Prev)' ¸`ÂI."
+
+#: info/session.c:1329
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr "¦b¥»¤å¥ó¤¤, ¥»¸`ÂI¨S¦³ `¤W¤@­Ó (Prev)' ¸`ÂI©Î `¤W¤@¼h (Up)' ¸`ÂI."
+
+#: info/session.c:1391
+msgid "Move forwards or down through node structure"
+msgstr "¦b¸`ÂIµ²ºc¤¤, ©¹«e©Î©¹¤U²¾°Ê"
+
+#: info/session.c:1407
+msgid "Move backwards or up through node structure"
+msgstr "¦b¸`ÂIµ²ºc¤¤, ©¹«á©Î©¹¤U²¾°Ê"
+
+#: info/session.c:1508
+msgid "Scroll forward in this window"
+msgstr "¦b¥»¤À¹jµøµ¡¤¤¦V«e±²°Ê"
+
+#: info/session.c:1516
+msgid "Scroll forward in this window and set default window size"
+msgstr "¦b¥»¤À¹jµøµ¡¤¤¦V«e±²°Ê, ¨Ã¥B³]©w¦¨¹w³]ªº¤À¹jµøµ¡¤Ø¤o"
+
+#: info/session.c:1524
+#, fuzzy
+msgid "Scroll forward in this window staying within node"
+msgstr "¦b¥»¤À¹jµøµ¡¤¤¦V«e±²°Ê"
+
+#: info/session.c:1532
+#, fuzzy
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr "¦b¥»¤À¹jµøµ¡¤¤¦V«e±²°Ê, ¨Ã¥B³]©w¦¨¹w³]ªº¤À¹jµøµ¡¤Ø¤o"
+
+#: info/session.c:1540
+msgid "Scroll backward in this window"
+msgstr "¦b¥»¤À¹jµøµ¡¤¤¦V«á±²°Ê"
+
+#: info/session.c:1548
+msgid "Scroll backward in this window and set default window size"
+msgstr "¦b¥»¤À¹jµøµ¡¤¤¦V«á±²°Ê, ¨Ã¥B³]©w¦¨¹w³]ªº¤À¹jµøµ¡¤Ø¤o"
+
+#: info/session.c:1557
+#, fuzzy
+msgid "Scroll backward in this window staying within node"
+msgstr "¦b¥»¤À¹jµøµ¡¤¤¦V«á±²°Ê"
+
+#: info/session.c:1565
+#, fuzzy
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr "¦b¥»¤À¹jµøµ¡¤¤¦V«á±²°Ê, ¨Ã¥B³]©w¦¨¹w³]ªº¤À¹jµøµ¡¤Ø¤o"
+
+#: info/session.c:1573
+msgid "Move to the start of this node"
+msgstr "²¾¦Ü¥»¸`ÂIªº°_ÂI"
+
+#: info/session.c:1580
+msgid "Move to the end of this node"
+msgstr "²¾¦Ü¥»¸`ÂIªºµ²§À"
+
+#: info/session.c:1587
+msgid "Scroll down by lines"
+msgstr "¤@¦æ¦æ¦V¤U±²°Ê"
+
+#: info/session.c:1604
+msgid "Scroll up by lines"
+msgstr "¤@¦æ¦æ¦V¤W±²°Ê"
+
+#: info/session.c:1622
+msgid "Scroll down by half screen size"
+msgstr "¦V¤U±²°Ê¥b­Ó¿Ã¹õªº¤j¤p"
+
+#: info/session.c:1648
+msgid "Scroll up by half screen size"
+msgstr "¦V¤W±²°Ê¥b­Ó¿Ã¹õªº¤j¤p"
+
+#: info/session.c:1677
+msgid "Select the next window"
+msgstr "¿ï¾Ü¤U¤@­Ó¤À¹jµøµ¡"
+
+#: info/session.c:1716
+msgid "Select the previous window"
+msgstr "¿ï¾Ü«e¤@­Ó¤À¹jµøµ¡"
+
+#: info/session.c:1767
+msgid "Split the current window"
+msgstr "¤À¹j¥Ø«eªº¤À¹jµøµ¡"
+
+#: info/session.c:1848
+msgid "Delete the current window"
+msgstr "§R°£¥Ø«eªº¤À¹jµøµ¡"
+
+#: info/session.c:1856
+msgid "Cannot delete a permanent window"
+msgstr "µLªk§R°£©T©wªº¤À¹jµøµ¡"
+
+#: info/session.c:1888
+msgid "Delete all other windows"
+msgstr "§R°£©Ò¦³¨ä¥¦ªº¤À¹jµøµ¡"
+
+#: info/session.c:1934
+msgid "Scroll the other window"
+msgstr "±²°Ê¥t¤@­Ó¤À¹jµøµ¡"
+
+#: info/session.c:1955
+msgid "Scroll the other window backward"
+msgstr "¦V«á±²°Ê¥t¤@­Ó¤À¹jµøµ¡"
+
+#: info/session.c:1961
+msgid "Grow (or shrink) this window"
+msgstr "ÂX¤j (©ÎÁY¤p) ³o­Ó¤À¹jµøµ¡"
+
+#: info/session.c:1972
+msgid "Divide the available screen space among the visible windows"
+msgstr "¦b¥i¥Îªº¿Ã¹õªÅ¶¡¤¤, ¥­§¡¤À³Î©Ò¦³ªº¥i¨£¤À¹jµøµ¡"
+
+#: info/session.c:1979
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "¤Á´«¥Ø«e¤À¹jµøµ¡ªº¦Û°Ê´«¦æª¬ºA"
+
+#: info/session.c:1986
+msgid "Toggle the usage of regular expressions in searches"
+msgstr ""
+
+#: info/session.c:1990
+msgid "Using regular expressions for searches."
+msgstr ""
+
+#: info/session.c:1991
+msgid "Using literal strings for searches."
+msgstr ""
+
+#: info/session.c:2162
+msgid "Select the Next node"
+msgstr "¿ï¨ú ¤U¤@­Ó ¸`ÂI"
+
+#: info/session.c:2170
+msgid "Select the Prev node"
+msgstr "¿ï¨ú «e¤@­Ó ¸`ÂI"
+
+#: info/session.c:2178
+msgid "Select the Up node"
+msgstr "¿ï¨ú ¤W¤@¼h ¸`ÂI"
+
+#: info/session.c:2185
+msgid "Select the last node in this file"
+msgstr "¿ï¨ú¥»Àɮתº³Ì«á¤@­Ó¸`ÂI"
+
+#: info/session.c:2212 info/session.c:2245
+msgid "This window has no additional nodes"
+msgstr "¥»¤À¹jµøµ¡¨S¦³ÃB¥~ªº¸`ÂI"
+
+#: info/session.c:2218
+msgid "Select the first node in this file"
+msgstr "¿ï¨ú¥»Àɮתº²Ä¤@­Ó¸`ÂI"
+
+#: info/session.c:2252
+msgid "Select the last item in this node's menu"
+msgstr "¿ï¨ú¥»¸`ÂI¿ï³æ¤¤, ³Ì«á¤@­Ó¶µ¥Ø"
+
+#: info/session.c:2258
+msgid "Select this menu item"
+msgstr "¿ï¾Ü³o¤@­Ó¿ï³æ¶µ¥Ø"
+
+#: info/session.c:2291
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "¥»¿ï³æ¤¤¨S¦³ %d ­Ó¶µ¥Ø"
+
+#: info/session.c:2485 info/session.c:2486
+#, c-format
+msgid "Menu item (%s): "
+msgstr "¿ï³æ¶µ¥Ø (%s): "
+
+#: info/session.c:2489
+msgid "Menu item: "
+msgstr "¿ï³æ¶µ¥Ø: "
+
+#: info/session.c:2496 info/session.c:2497
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "¸òÀH¥æ¤¬°Ñ·Ó (%s): "
+
+#: info/session.c:2500
+msgid "Follow xref: "
+msgstr "¸òÀH¥æ¤¬°Ñ·Ó: "
+
+#: info/session.c:2629
+msgid "Read a menu item and select its node"
+msgstr "Ū¨ú¤@­Ó¿ï³æ¶µ¥Ø, ¨Ã¥B¿ï¾Ü¥¦ªº¸`ÂI"
+
+#: info/session.c:2637
+msgid "Read a footnote or cross reference and select its node"
+msgstr "Ū¨ú¤@­Óµù¸}©Î¥æ¤¬°Ñ·Ó, ¨Ã¥B¿ï¾Ü¥¦ªº¸`ÂI"
+
+#: info/session.c:2643
+msgid "Move to the start of this node's menu"
+msgstr "²¾¦Ü¥»¸`ÂIªº¿ï³æ¶}ÀY"
+
+#: info/session.c:2667
+msgid "Visit as many menu items at once as possible"
+msgstr "¾¨¥i¯à¤@¦¸«ô³X³Ì¦h­Ó¿ï³æ¶µ¥Ø"
+
+#: info/session.c:2695
+msgid "Read a node name and select it"
+msgstr "Ū¨ú¸`ÂI¦WºÙ, ¨Ã¥B¿ï¾Ü¥¦"
+
+#: info/session.c:2750 info/session.c:2755
+msgid "Goto node: "
+msgstr "¸õ¦Ü¸`ÂI: "
+
+#: info/session.c:2819
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "¸`ÂI `%s' ¤¤¨S¦³¿ï³æ."
+
+#: info/session.c:2865
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "¿ï³æ¶µ¥Ø `%s' ¤£¦b¸`ÂI `%s' ¤¤."
+
+#: info/session.c:2895
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr "³Q°Ñ·Óªº¸`ÂI `%s' ¦b `%s' ¤¤§ä¤£¨ì."
+
+#: info/session.c:2945
+msgid "Read a list of menus starting from dir and follow them"
+msgstr "Ū¨ú¦Û dir ¶}©lªº¸`ÂI±ø¦C, ¨Ã¥B¸òÀH¥¦­Ì"
+
+#: info/session.c:2947
+msgid "Follow menus: "
+msgstr "¸òÀH¿ï³æ: "
+
+#: info/session.c:3140
+msgid "Find the node describing program invocation"
+msgstr "§ä´M´y­zµ{¦¡°õ¦æ¤èªkªº¸`ÂI"
+
+#: info/session.c:3142
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "§ä´M [%s] ªº°õ¦æ¤èªk¸`ÂI: "
+
+#: info/session.c:3180
+msgid "Read a manpage reference and select it"
+msgstr "Ū¨ú½u¤W¤â¥U (manpage) ªº°Ñ·Ó, ¨Ã¥B¿ï¾Ü¥¦"
+
+#: info/session.c:3184
+msgid "Get Manpage: "
+msgstr "¨ú±o½u¤W¤â¥U (Manpage): "
+
+#: info/session.c:3214
+msgid "Select the node `Top' in this file"
+msgstr "¿ï¨ú¥»Àɮפ¤ªº `Top' ¸`ÂI"
+
+#: info/session.c:3220
+msgid "Select the node `(dir)'"
+msgstr "¿ï¨ú¸`ÂI `(dir)'"
+
+#: info/session.c:3237 info/session.c:3239
+#, c-format
+msgid "Kill node (%s): "
+msgstr "§R°£¸`ÂI (%s): "
+
+#: info/session.c:3291
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "µLªk§R°£¸`ÂI `%s'"
+
+#: info/session.c:3301
+msgid "Cannot kill the last node"
+msgstr "µLªk§R°£¤W¤@­Ó¸`ÂI"
+
+#: info/session.c:3387
+msgid "Select the most recently selected node"
+msgstr "¿ï¾Ü³Ìªñ¤@¦¸³Q¿ï¾Üªº¸`ÂI"
+
+#: info/session.c:3393
+msgid "Kill this node"
+msgstr "§R°£¥»¸`ÂI"
+
+#: info/session.c:3401
+msgid "Read the name of a file and select it"
+msgstr "Ū¨úÀɮצWºÙ, µM«á¿ï¨ú¥¦"
+
+#: info/session.c:3405
+msgid "Find file: "
+msgstr "§ä´MÀÉ®×: "
+
+#: info/session.c:3422
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "µLªk§ä¨ì `%s'."
+
+#: info/session.c:3465 info/session.c:3583
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "µLªk«Ø¥ß¿é¥XÀÉ®× `%s'."
+
+#: info/session.c:3479 info/session.c:3601 info/session.c:3661
+msgid "Done."
+msgstr "§¹¦¨."
+
+#: info/session.c:3534
+#, c-format
+msgid "Writing node %s..."
+msgstr "¼g¤J¸`ÂI %s ¤¤..."
+
+#: info/session.c:3610
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr "±N¥»¸`ÂIªº¤º®e, ¸g¥ÑºÞ¹D (pipe) °e¦Ü INFO_PRINT_COMMAND"
+
+#: info/session.c:3645
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "µLªk¶}±Ò¦Ü `%s' ªººÞ¹D."
+
+#: info/session.c:3651
+#, c-format
+msgid "Printing node %s..."
+msgstr "¦C¦L¸`ÂI %s ¤¤..."
+
+#: info/session.c:3900
+msgid "Search continued from the end of the document."
+msgstr ""
+
+#: info/session.c:3905
+#, fuzzy
+msgid "Search continued from the beginning of the document."
+msgstr "§R°£¦Ü¥»¦æ¶}ÀY, ¨Ã¸m¤J°Å¶Kï"
+
+#: info/session.c:3922
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "·j´M¤lÀÉ®× %s ..."
+
+#: info/session.c:3979
+msgid "Read a string and search for it case-sensitively"
+msgstr "Ū¨ú¤@­Ó¦r¦ê, µM«á¥H°Ï¤À¤j¤p¼g¤è¦¡·j´M"
+
+#: info/session.c:3986
+msgid "Read a string and search for it"
+msgstr "Ū¨ú¤@­Ó¦r¦ê, µM«á·j´M"
+
+#: info/session.c:3994
+msgid "Read a string and search backward for it"
+msgstr "Ū¨ú¤@­Ó¦r¦ê, µM«á¦V«á·j´M"
+
+#: info/session.c:4030 info/session.c:4036
+#, fuzzy, c-format
+msgid "%s%s%s [%s]: "
+msgstr "%s%s [%s]: "
+
+#: info/session.c:4031 info/session.c:4037
+msgid "Regexp search"
+msgstr ""
+
+#: info/session.c:4032 info/session.c:4038
+#, fuzzy
+msgid " case-sensitively"
+msgstr ", ¥H°Ï¤À¤j¤p¼gªº¤è¦¡"
+
+#: info/session.c:4033 info/session.c:4039
+#, fuzzy
+msgid " backward"
+msgstr "¦V«á·j´M¦r¦ê"
+
+#: info/session.c:4037
+msgid "Search"
+msgstr "·j´M¦r¦ê"
+
+#: info/session.c:4079
+msgid "Search failed."
+msgstr "·j´M¥¢±Ñ."
+
+#: info/session.c:4097
+msgid "Repeat last search in the same direction"
+msgstr "¥H¦P¼Ëªº·j´M¤è¦V­«ÂФW¦¸ªº·j´M"
+
+#: info/session.c:4100 info/session.c:4110
+msgid "No previous search string"
+msgstr "¨S¦³«e¤@¦¸ªº·j´M¦r¦ê"
+
+#: info/session.c:4107
+msgid "Repeat last search in the reverse direction"
+msgstr "¥H¬Û¤Ïªº·j´M¤è¦V­«ÂФW¦¸ªº·j´M"
+
+#: info/session.c:4126 info/session.c:4132
+msgid "Search interactively for a string as you type it"
+msgstr "¥H¤¬°Ê¤è¦¡, Ãä¿é¤J¦r¦êÃä·j´M"
+
+#: info/session.c:4212
+#, fuzzy
+msgid "Regexp I-search backward: "
+msgstr "¤Ï¦V¤¬°Ê·j´M: "
+
+#: info/session.c:4213
+msgid "I-search backward: "
+msgstr "¤Ï¦V¤¬°Ê·j´M: "
+
+#: info/session.c:4215
+#, fuzzy
+msgid "Regexp I-search: "
+msgstr "¤¬°Ê·j´M: "
+
+#: info/session.c:4216
+msgid "I-search: "
+msgstr "¤¬°Ê·j´M: "
+
+#: info/session.c:4241 info/session.c:4243
+msgid "Failing "
+msgstr "¥¢±Ñ "
+
+#: info/session.c:4734
+msgid "Move to the previous cross reference"
+msgstr "²¾°Ê¦Ü«e¤@­Ó¥æ¤¬°Ñ·Ó"
+
+#: info/session.c:4752
+msgid "Move to the next cross reference"
+msgstr "²¾°Ê¦Ü¤U¤@­Ó¥æ¤¬°Ñ·Ó"
+
+#: info/session.c:4774
+msgid "Select reference or menu item appearing on this line"
+msgstr "¿ï¾Ü¥X²{¦b¥»¦æªº°Ñ·Ó©Î¿ï³æ¶µ¥Ø"
+
+#: info/session.c:4797
+msgid "Cancel current operation"
+msgstr "¨ú®ø¥Ø«eªº§@·~"
+
+#: info/session.c:4804
+msgid "Quit"
+msgstr "µ²§ô"
+
+#: info/session.c:4813
+msgid "Move the cursor to a specific line of the window"
+msgstr "²¾°Ê´å¼Ð¦Ü¤À¹jµøµ¡¤¤ªº«ü©w¦ì¸m"
+
+#: info/session.c:4845
+msgid "Redraw the display"
+msgstr "­«Ã¸µe­±"
+
+#: info/session.c:4882
+msgid "Quit using Info"
+msgstr "µ²§ô¨Ï¥Î Info"
+
+#: info/session.c:4895
+msgid "Run command bound to this key's lowercase variant"
+msgstr ""
+
+#: info/session.c:4906
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "¥¼ª¾ªº©R¥O (%s)."
+
+#: info/session.c:4909
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "\"%s\" ¤£¦Xªk"
+
+#: info/session.c:4910
+#, fuzzy, c-format
+msgid "`%s' is invalid"
+msgstr "\"%s\" ¤£¦Xªk"
+
+#: info/session.c:5125
+msgid "Add this digit to the current numeric argument"
+msgstr "±N¥»¼Æ¦r¥[¦Ü¥Ø«eªº¼Æ­È¤Þ¼Æ"
+
+#: info/session.c:5134
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "¶}©l¥Ø«eªº¼Æ­È¤Þ¼Æ (©Î¬O­¼¥H 4)"
+
+#: info/session.c:5149
+msgid "Internally used by \\[universal-argument]"
+msgstr "¦b¤º³¡³Q \\[universal-argument] ¨Ï¥Î"
+
+#: info/tilde.c:336
+#, c-format
+msgid "readline: Out of virtual memory!\n"
+msgstr "readline: ¯ÓºÉµêÀÀ°O¾ÐÅé!\n"
+
+#: info/variables.c:37
+msgid "When \"On\", footnotes appear and disappear automatically"
+msgstr "·í³]©w¦b \"On\" ®É, µù¸}·|¦Û°Ê¥X²{»P®ø¥¢"
+
+#: info/variables.c:41
+msgid "When \"On\", creating or deleting a window resizes other windows"
+msgstr "³]©w¦b \"On\" ®É, «Ø¥ß©Î§R°£¤@­Ó¤À¹jµøµ¡·|Åܧó¨ä¥¦ªº¤À¹jµøµ¡ªº¤j¤p"
+
+#: info/variables.c:45
+msgid "When \"On\", flash the screen instead of ringing the bell"
+msgstr "³]©w¦b \"On\" ®É, ¥Hµe­±°{°Ê¥N´ÀÅT¹a"
+
+#: info/variables.c:49
+msgid "When \"On\", errors cause the bell to ring"
+msgstr "³]©w¦b \"On\" ®É, µo¥Í¿ù»~·|ÅT¹a"
+
+#: info/variables.c:53
+msgid "When \"On\", Info garbage collects files which had to be uncompressed"
+msgstr "When \"On\", Info garbage collects files which had to be uncompressed"
+
+#: info/variables.c:56
+msgid "When \"On\", the portion of the matched search string is highlighted"
+msgstr "³]©w¦b \"On\" ®É, ²Å¦X·j´M¦r¦êªº³¡¥÷·|³Q¼Ð¥Ü°_¨Ó"
+
+#: info/variables.c:60
+msgid "Controls what happens when scrolling is requested at the end of a node"
+msgstr "±±¨î¦b¸`ÂIªºµ²§À®É, ±²°Ê·|¦³¤°»ò¤ÏÀ³"
+
+#: info/variables.c:65
+msgid "Same as scroll-behaviour"
+msgstr ""
+
+#: info/variables.c:69
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr "±±¨î·í´å¼Ð²¾°Ê¦Ü¤À¹jµøµ¡¥~®É, ±²°Êªº¦æ¼Æ"
+
+#: info/variables.c:73
+msgid "Controls whether scroll-behavior affects cursor movement commands"
+msgstr ""
+
+#: info/variables.c:77
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr "·í³]©w¦b \"On\" ®É, Info ¥i±µ¨ü¨ÃÅã¥Ü ISO Latin ¦r¤¸"
+
+#: info/variables.c:81
+#, fuzzy
+msgid ""
+"What to do when a scrolling command is issued at the end of the last node"
+msgstr "±±¨î¦b¸`ÂIªºµ²§À®É, ±²°Ê·|¦³¤°»ò¤ÏÀ³"
+
+#: info/variables.c:88
+msgid "Explain the use of a variable"
+msgstr "¸ÑÄÀÅܼƪº¥Îªk"
+
+#: info/variables.c:94
+msgid "Describe variable: "
+msgstr "´y­zÅܼÆ: "
+
+#: info/variables.c:113
+msgid "Set the value of an Info variable"
+msgstr "³]©w Info Åܼƪº¼Æ­È"
+
+#: info/variables.c:119
+msgid "Set variable: "
+msgstr "³]©wÅܼÆ: "
+
+#: info/variables.c:137
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "³]©w %s ªº¼Æ­È (%d): "
+
+#: info/variables.c:178
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "³]©w %s ªº¼Æ­È (%s): "
+
+#: info/window.c:1026
+msgid "--*** Tags out of Date ***"
+msgstr ""
+
+#: info/window.c:1037
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), ¦æ¼Æ ----, "
+
+#: info/window.c:1044
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, ¦@ %d ¦æ --%s--"
+
+#: info/window.c:1048
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, ¦@ %d ¦æ --%s--"
+
+#: info/window.c:1055
+#, c-format
+msgid " Subfile: %s"
+msgstr " ¤lÀÉ®×: %s"
+
+#: install-info/install-info.c:221
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: ĵ§i: "
+
+#: install-info/install-info.c:270
+#, c-format
+msgid " for %s"
+msgstr ""
+
+#: install-info/install-info.c:500
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr "\t¸Õ¸Õ Try `%s --help' ¥H¨ú±o§¹¾ãªº°Ñ¼Æ¦Cªí.\n"
+
+#: install-info/install-info.c:508
+#, fuzzy, c-format
+msgid "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+msgstr "¥Îªk: %s [OPTION]... FILE...\n"
+
+#: install-info/install-info.c:510
+msgid "Add or remove entries in INFO-FILE from the Info directory DIR-FILE."
+msgstr ""
+
+#: install-info/install-info.c:513
+msgid ""
+"Options:\n"
+" --debug report what is being done.\n"
+" --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+" don't insert any new entries.\n"
+" --description=TEXT the description of the entry is TEXT; used with\n"
+" the --name option to become synonymous with the\n"
+" --entry option.\n"
+" --dir-file=NAME specify file name of Info directory file;\n"
+" equivalent to using the DIR-FILE argument.\n"
+" --dry-run same as --test."
+msgstr ""
+
+#: install-info/install-info.c:525
+msgid ""
+" --entry=TEXT insert TEXT as an Info directory entry.\n"
+" TEXT is written as an Info menu item line followed\n"
+" by zero or more extra lines starting with "
+"whitespace.\n"
+" If you specify more than one entry, all are added.\n"
+" If you don't specify any entries, they are determined\n"
+" from information in the Info file itself.\n"
+" When removing, TEXT specifies the entry to remove.\n"
+" TEXT is only removed as a last resort, if the\n"
+" entry as determined from the Info file is not "
+"present,\n"
+" and the basename of the Info file isn't found either."
+msgstr ""
+
+#: install-info/install-info.c:537
+msgid ""
+" --help display this help and exit.\n"
+" --info-dir=DIR same as --dir-file=DIR/dir.\n"
+" --info-file=FILE specify Info file to install in the directory;\n"
+" equivalent to using the INFO-FILE argument.\n"
+" --item=TEXT same as --entry=TEXT.\n"
+" --keep-old do not replace entries, or remove empty sections.\n"
+" --menuentry=TEXT same as --name=TEXT.\n"
+" --name=TEXT the name of the entry is TEXT; used with --description\n"
+" to become synonymous with the --entry option.\n"
+" --no-indent do not format new entries in the DIR file.\n"
+" --quiet suppress warnings."
+msgstr ""
+
+#: install-info/install-info.c:550
+msgid ""
+" --regex=R put this file's entries in all sections that match the\n"
+" regular expression R (ignoring case).\n"
+" --remove same as --delete.\n"
+" --remove-exactly only remove if the info file name matches exactly;\n"
+" suffixes such as .info and .gz are not ignored.\n"
+" --section=SEC put entries in section SEC of the directory.\n"
+" If you specify more than one section, all the entries\n"
+" are added in each of the sections.\n"
+" If you don't specify any sections, they are "
+"determined\n"
+" from information in the Info file itself.\n"
+" --section R SEC equivalent to --regex=R --section=SEC --add-once."
+msgstr ""
+
+#: install-info/install-info.c:563
+msgid ""
+" --silent suppress warnings.\n"
+" --test suppress updating of DIR-FILE.\n"
+" --version display version information and exit."
+msgstr ""
+
+#: install-info/install-info.c:570
+#, fuzzy
+msgid ""
+"Email bug reports to bug-texinfo@gnu.org,\n"
+"general questions and discussion to help-texinfo@gnu.org.\n"
+"Texinfo home page: http://www.gnu.org/software/texinfo/"
+msgstr ""
+"\n"
+"µ{¦¡¯äÂÎ, ½Ð¥H¹q¤l¶l¥ó (­^¤å) ¦^³ø¦Ü bug-texinfo@gnu.org,\n"
+"¤@¯ë°ÝÃD»P°Q½×, ½Ð¥H¹q¤l¶l¥ó (­^¤å) ±H¨ì help-texinfo@gnu.org.\n"
+
+#: install-info/install-info.c:597
+#, fuzzy, c-format
+msgid ""
+"This is the file .../info/dir, which contains the\n"
+"topmost node of the Info hierarchy, called (dir)Top.\n"
+"The first time you invoke Info you start off looking at this node.\n"
+"\n"
+"%s\tThis is the top of the INFO tree\n"
+"\n"
+" This (the Directory node) gives a menu of major topics.\n"
+" Typing \"q\" exits, \"?\" lists all Info commands, \"d\" returns here,\n"
+" \"h\" gives a primer for first-timers,\n"
+" \"mEmacs<Return>\" visits the Emacs manual, etc.\n"
+"\n"
+" In Emacs, you can click mouse button 2 on a menu item or cross reference\n"
+" to select it.\n"
+"\n"
+"%s\n"
+msgstr ""
+"³o¬OÀÉ®× .../info/dir, ¸Ì­±¥]§t¦³ Info ¿ï³æ¬[ºc¤¤³Ì¤W¼hªº¸`ÂI,\n"
+"ºÙ¬° (dir) TOP.\n"
+"±z²Ä¤@¦¸°õ¦æ Info ®É, ±z·|±q³o¸Ì¶}©l·j´M©Ò¶·ªº¸`ÂI.\n"
+"\n"
+"%s\t³o¬O INFO ¿ï³æ¾ðªº³Ì¤W¼h\n"
+"\n"
+" ³o¸Ì (Directory ¸`ÂI) ´£¨Ñ¥D­n¶µ¥Øªº¿ï³æ.\n"
+" Áä¤J \"q\" Â÷¶}, \"?\" ¦C¥X©Ò¦³ªº Info «ü¥O, \"d\" ¦^¨ì³o¸Ì,\n"
+" \"h\" Æ[¬Ýµ¹ªì¦¸¨Ï¥ÎªÌªº¤Jªù«ü¤Þ,\n"
+" \"mEmacs<Return>\" ¥iÆ[¬Ý Emacs ¤â¥U, µ¥µ¥.\n"
+"\n"
+" ¦b Emacs ¤¤, ±z¥i¥H¦b¿ï³æ¶µ¥Ø©Î¥æ¤¬°Ñ·Ó¤W, ³æÀ»·Æ¹«ªº²Ä 2 Áä\n"
+" ¥H¿ï¾Ü¥¦­Ì.\n"
+"\n"
+"* Menu:\n"
+
+#: install-info/install-info.c:622
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr "%s: µLªkŪ¨ú (%s), ¦Ó¥BµLªk«Ø¥ß (%s)\n"
+
+#: install-info/install-info.c:715
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: ªÅÀÉ®×"
+
+#: install-info/install-info.c:1046 install-info/install-info.c:1086
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "¦³ START-INFO-DIR-ENTRY, ¦ý¬O¨S¦³¬Û¹ïÀ³ªº END-INFO-DIR-ENTRY"
+
+#: install-info/install-info.c:1081
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "¦³ END-INFO-DIR-ENTRY, ¦ý¬O¨S¦³¬Û¹ïÀ³ªº START-INFO-DIR-ENTRY"
+
+#: install-info/install-info.c:1946 install-info/install-info.c:1956
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr ""
+
+#: install-info/install-info.c:2036
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: ¥u¦³«ü©w Info Àɮפ@¦¸.\n"
+
+#: install-info/install-info.c:2069
+#, c-format
+msgid "Extra regular expression specified, ignoring `%s'"
+msgstr ""
+
+#: install-info/install-info.c:2081
+#, c-format
+msgid "Error in regular expression `%s': %s"
+msgstr ""
+
+#: install-info/install-info.c:2139
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "¦h¾lªº©R¥O¦C¤Þ¼Æ `%s'"
+
+#: install-info/install-info.c:2143
+msgid "No input file specified; try --help for more information."
+msgstr "¥¼«ü©w¿é¤JÀÉ®×; ¸Õ¸Õ --help ¥H¨ú±o§ó¦hªº¸ê°T."
+
+#: install-info/install-info.c:2146
+msgid "No dir file specified; try --help for more information."
+msgstr "¥¼«ü©w dir ÀÉ®×; ¸Õ¸Õ --help ¥H¨ú±o¨ú¦hªº¸ê°T."
+
+#: install-info/install-info.c:2288
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "`%s' ¤º¨S¦³ info dir ¶µ¥Ø"
+
+#: install-info/install-info.c:2536
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "§ä¤£¨ì `%s' ªº¶µ¥Ø; ¥¼§R°£¥ô¦ó¶µ¥Ø"
+
+#: lib/xexit.c:54
+msgid "ferror on stdout\n"
+msgstr ""
+
+#: lib/xexit.c:59
+msgid "fflush error on stdout\n"
+msgstr ""
+
+#: makeinfo/cmds.c:582 makeinfo/cmds.c:604
+#, fuzzy, c-format
+msgid "arguments to @%s ignored"
+msgstr "¹ï %c%s µL¥Îªº¤Þ¼Æ"
+
+#: makeinfo/cmds.c:779
+msgid "January"
+msgstr "¤@¤ë"
+
+#: makeinfo/cmds.c:779
+msgid "February"
+msgstr "¤G¤ë"
+
+#: makeinfo/cmds.c:779
+msgid "March"
+msgstr "¤T¤ë"
+
+#: makeinfo/cmds.c:779
+msgid "April"
+msgstr "¥|¤ë"
+
+#: makeinfo/cmds.c:779
+msgid "May"
+msgstr "¤­¤ë"
+
+#: makeinfo/cmds.c:780
+msgid "June"
+msgstr "¤»¤ë"
+
+#: makeinfo/cmds.c:780
+msgid "July"
+msgstr "¤C¤ë"
+
+#: makeinfo/cmds.c:780
+msgid "August"
+msgstr "¤K¤ë"
+
+#: makeinfo/cmds.c:780
+msgid "September"
+msgstr "¤E¤ë"
+
+#: makeinfo/cmds.c:780
+msgid "October"
+msgstr "¤Q¤ë"
+
+#: makeinfo/cmds.c:781
+msgid "November"
+msgstr "¤Q¤@¤ë"
+
+#: makeinfo/cmds.c:781
+msgid "December"
+msgstr "¤Q¤G¤ë"
+
+#: makeinfo/cmds.c:1131
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr ""
+
+#: makeinfo/cmds.c:1174
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "@sc ªº¤Þ¼Æ¥þ¬O¤j¼g, ©Ò¥H¨S¦³§@¥Î"
+
+#: makeinfo/cmds.c:1229
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr ""
+
+#: makeinfo/cmds.c:1269
+msgid "end of file inside verb block"
+msgstr ""
+
+#: makeinfo/cmds.c:1277
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr ""
+
+#: makeinfo/cmds.c:1308
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+
+#: makeinfo/cmds.c:1504
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s ¤w¼o¤î¤£¥Î"
+
+#: makeinfo/cmds.c:1612
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "@sp ¥²¶·¦³¤@­Ó¥¿¾ã¼Æªº¤Þ¼Æ, ¦Ó¤£¬O `%s'"
+
+#: makeinfo/cmds.c:2023 makeinfo/footnote.c:81
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "¹ï %c%s µL¥Îªº¤Þ¼Æ"
+
+#: makeinfo/cmds.c:2033 makeinfo/makeinfo.c:4317
+msgid "asis"
+msgstr ""
+
+#: makeinfo/cmds.c:2035 makeinfo/cmds.c:2065 makeinfo/makeinfo.c:4319
+msgid "none"
+msgstr ""
+
+#: makeinfo/cmds.c:2049
+#, fuzzy, c-format
+msgid "Bad argument to @%s"
+msgstr "¹ï %c%s µL¥Îªº¤Þ¼Æ"
+
+#: makeinfo/cmds.c:2063
+msgid "insert"
+msgstr ""
+
+#: makeinfo/cmds.c:2079
+#, fuzzy, c-format
+msgid "Bad argument to @%s: %s"
+msgstr "¹ï %c%s µL¥Îªº¤Þ¼Æ"
+
+#: makeinfo/cmds.c:2162
+#, c-format
+msgid "Expected @%s on or off, not `%s'"
+msgstr ""
+
+#: makeinfo/cmds.c:2182
+#, c-format
+msgid "Only @%s 10 or 11 is supported, not `%s'"
+msgstr ""
+
+#: makeinfo/defun.c:83
+msgid "Missing `}' in @def arg"
+msgstr "@def °Ñ¼Æ¤¤¿òº| `}'"
+
+#: makeinfo/defun.c:711
+#, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr ""
+
+#: makeinfo/files.c:434
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:637
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr ""
+
+#: makeinfo/files.c:645
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr ""
+
+#: makeinfo/files.c:693
+msgid "Output buffer not empty."
+msgstr ""
+
+#: makeinfo/float.c:181
+#, c-format
+msgid "Requested float type `%s' not previously used"
+msgstr ""
+
+#: makeinfo/float.c:376 makeinfo/float.c:382 makeinfo/index.c:959
+#: makeinfo/index.c:965
+msgid "See "
+msgstr ""
+
+#: makeinfo/footnote.c:149
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "`%c%s' ¥²¶·¥]§t¤Þ¼Æ `{...}', ¦Ó¤£¬O¥u¦³ `%s'"
+
+#: makeinfo/footnote.c:164
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "µù¸} `%s' ¨S¦³¥k¤j¬A¸¹"
+
+#: makeinfo/footnote.c:197
+msgid "Footnote defined without parent node"
+msgstr "©w¸qµù¸}, ¦ý¬O¨S¦³¤÷¸`ÂI"
+
+#: makeinfo/footnote.c:209
+#, fuzzy
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "©w¸qµù¸}, ¦ý¬O¨S¦³¤÷¸`ÂI"
+
+#: makeinfo/footnote.c:301 makeinfo/index.c:187
+msgid "Footnotes"
+msgstr "µù¸}"
+
+#: makeinfo/html.c:91
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr ""
+
+#: makeinfo/html.c:180
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr ""
+
+#: makeinfo/html.c:426
+msgid "[unexpected] no html tag to pop"
+msgstr ""
+
+#: makeinfo/html.c:800
+#, fuzzy, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "%s: ¥¼ª¾ªº¿ï¶µ `%c%s'\n"
+
+#: makeinfo/index.c:167
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "¥¼ª¾ªº¯Á¤Þ `%s'"
+
+#: makeinfo/index.c:232
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr ""
+
+#: makeinfo/index.c:410
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "¯Á¤Þ `%s' ¤w¦s¦b"
+
+#: makeinfo/index.c:453
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "@synindex ¤¤¦³¥¼ª¾ªº¯Á¤Þ `%s' »P/©Î `%s'"
+
+#: makeinfo/index.c:676
+msgid "(line )"
+msgstr ""
+
+#: makeinfo/index.c:684
+#, c-format
+msgid "(line %*d)"
+msgstr ""
+
+#: makeinfo/index.c:765
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "@printindex ¤¤¦³¥¼ª¾ªº¯Á¤Þ `%s'"
+
+#: makeinfo/index.c:834
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "¯Á¤Þ `%s' ªº¶µ¥Ø¤£¦b¥ô¦óªº¸`ÂI¤º"
+
+#: makeinfo/index.c:837 makeinfo/index.c:873
+msgid "(outside of any node)"
+msgstr "(¤£¦b¥ô¦óªº¸`ÂI¤º)"
+
+#: makeinfo/insertion.c:161
+msgid "@item not allowed in argument to @itemize"
+msgstr ""
+
+#: makeinfo/insertion.c:242
+msgid "Broken-Type in insertion_type_pname"
+msgstr ""
+
+#: makeinfo/insertion.c:338
+msgid "Enumeration stack overflow"
+msgstr ""
+
+#: makeinfo/insertion.c:370
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr ""
+
+#: makeinfo/insertion.c:639
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr ""
+
+#: makeinfo/insertion.c:727
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr ""
+
+#: makeinfo/insertion.c:981
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr ""
+
+#: makeinfo/insertion.c:1349
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "No matching `%cend %s'"
+
+#: makeinfo/insertion.c:1618
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s ¥²¶·­n¦³¦r¤¸©Î¬O¼Æ¦r"
+
+#: makeinfo/insertion.c:1718
+msgid "end of file inside verbatim block"
+msgstr ""
+
+#: makeinfo/insertion.c:1942
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "@%s ¦b `@%s' °Ï¶ô¤§¤º, ¨Ã¤£¨ã¦³·N¸q"
+
+#: makeinfo/insertion.c:1978
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "@menu ¦b²Ä¤@­Ó @node ¤§«e¥X²{, ±N«Ø¥ß `Top' ¸`ÂI"
+
+#: makeinfo/insertion.c:1979
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr "¤]³\±zÀ³¸Ó§â @top ¸`ÂI¥]§t¦b @ifnottex, ¦Ó¤£¬O @ifinfo?"
+
+#: makeinfo/insertion.c:1991
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "¦b²Ä¤@­Ó¸`ÂI¤§«e¥X²{ @detailmenu, ±N«Ø¥ß `Top' ¸`ÂI"
+
+#: makeinfo/insertion.c:2047
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr ""
+
+#: makeinfo/insertion.c:2061
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "@%s ¦b `@%s' °Ï¶ô¤§¤º, ¨Ã¤£¨ã¦³·N¸q"
+
+#: makeinfo/insertion.c:2092
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "¥¼°t¹ïªº `%c%s'"
+
+#: makeinfo/insertion.c:2097
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "¦b `%c%s' ¤§«á¥²¶·­n¦³ªF¦è"
+
+#: makeinfo/insertion.c:2103
+#, fuzzy, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "¹ï %c%s µL¥Îªº¤Þ¼Æ"
+
+#: makeinfo/insertion.c:2200
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "@%s ¦b `@%s' °Ï¶ô¤§¤º, ¨Ã¤£¨ã¦³·N¸q"
+
+#: makeinfo/insertion.c:2209
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "`%s' °Ï¶ô¤§¤º, @itemx ¨ÃµL·N¸q"
+
+#: makeinfo/insertion.c:2383
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr ""
+
+#: makeinfo/lang.c:1218
+#, c-format
+msgid "no default territory known for language `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:1281
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr "%s ¤£¬O¤@­Ó¦Xªkªº ISO 639 »y¨¥½X"
+
+#: makeinfo/lang.c:1399
+#, fuzzy, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "%s: ¥¼ª¾ªº¿ï¶µ `%c%s'\n"
+
+#: makeinfo/lang.c:1407
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr ""
+
+#: makeinfo/lang.c:1492
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:1800
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr "%c%s ´Á±æ¨Ï¥Î `i' ©Î `j' §@¬°¤Þ¼Æ, ¦Ó¤£¬O `%c'"
+
+#: makeinfo/lang.c:1804
+#, c-format
+msgid "%c%s expects a single character `i' or `j' as argument"
+msgstr "%c%s ´Á±æ¨Ï¥Î¤@­Ó¦r¥À `i' ©Î `j' §@¬°¤Þ¼Æ"
+
+#: makeinfo/macro.c:128
+#, c-format
+msgid "macro `%s' previously defined"
+msgstr "¥¨¶° `%s' ¤w©w¸q¹L"
+
+#: makeinfo/macro.c:132
+#, c-format
+msgid "here is the previous definition of `%s'"
+msgstr "³o¸Ì¬O `%s' ¤§«eªº©w¸q"
+
+#: makeinfo/macro.c:359
+#, c-format
+msgid "\\ in macro expansion followed by `%s' instead of parameter name"
+msgstr ""
+
+#: makeinfo/macro.c:401
+#, c-format
+msgid "Macro `%s' called on line %d with too many args"
+msgstr "¥¨¶° `%s' ¦b²Ä %d ¦æ³Q©I¥s, ¦ý¬O¤Þ¼Æ¹L¦h"
+
+#: makeinfo/macro.c:580
+#, c-format
+msgid "%cend macro not found"
+msgstr ""
+
+#: makeinfo/macro.c:591
+msgid "@allow-recursion is deprecated; please use @rmacro instead"
+msgstr ""
+
+#: makeinfo/macro.c:606
+msgid "@quote-arg is deprecated; arguments are quoted by default"
+msgstr ""
+
+#: makeinfo/macro.c:649
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "@end %s »P @%s ¤£²Å¦X"
+
+#: makeinfo/makeinfo.c:188
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "¿ù»~¹L¦h! ©ñ±ó.\n"
+
+#: makeinfo/makeinfo.c:306
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: ĵ§i: "
+
+#: makeinfo/makeinfo.c:325 makeinfo/makeinfo.c:2340
+#, c-format
+msgid "Misplaced %c"
+msgstr "»~¸mªº %c"
+
+#: makeinfo/makeinfo.c:344
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "¸Õ¸Õ `%s --help' ¥H¨ú±o§ó¦hªº¸ê°T.\n"
+
+#: makeinfo/makeinfo.c:347
+#, fuzzy, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "¥Îªk: %s [OPTION]... FILE...\n"
+
+#: makeinfo/makeinfo.c:350
+msgid ""
+"Translate Texinfo source documentation to various other formats, by default\n"
+"Info files suitable for reading online with Emacs or standalone GNU Info.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:354
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\n"
+" --document-language=STR locale to use in translating Texinfo keywords\n"
+" for the output document (default C).\n"
+" --force preserve output even if errors.\n"
+" --help display this help and exit.\n"
+" --no-validate suppress node cross-reference validation.\n"
+" --no-warn suppress warnings (but not errors).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:369
+#, no-wrap
+msgid ""
+"Output format selection (default is to produce Info):\n"
+" --docbook output Docbook XML rather than Info.\n"
+" --html output HTML rather than Info.\n"
+" --xml output Texinfo XML rather than Info.\n"
+" --plaintext output plain text rather than Info.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:377
+msgid ""
+"General output options:\n"
+" -E, --macro-expand=FILE output macro-expanded source to FILE,\n"
+" ignoring any @setfilename.\n"
+" --no-headers suppress node separators, Node: lines, and "
+"menus\n"
+" from Info output (thus producing plain "
+"text)\n"
+" or from HTML (thus producing shorter "
+"output);\n"
+" also, write to standard output by default.\n"
+" --no-split suppress the splitting of Info or HTML "
+"output,\n"
+" generate only one output file.\n"
+" --number-sections output chapter and sectioning numbers.\n"
+" -o, --output=FILE output to FILE (or directory if split HTML).\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:391
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --disable-encoding do not output accented and special characters\n"
+" in Info output based on @documentencoding.\n"
+" --enable-encoding override --disable-encoding (default).\n"
+" --fill-column=NUM break Info lines at NUM characters (default %"
+"d).\n"
+" --footnote-style=STYLE output footnotes in Info according to STYLE:\n"
+" `separate' to put them in their own node;\n"
+" `end' to put them at the end of the node, "
+"in\n"
+" which they are defined (this is the "
+"default).\n"
+" --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %"
+"d).\n"
+" If VAL is `none', do not indent; if VAL is\n"
+" `asis', preserve existing indentation.\n"
+" --split-size=NUM split Info files at size NUM (default %d).\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:409
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+" --css-ref=URL generate reference to a CSS file.\n"
+" --internal-links=FILE produce list of internal links in FILE.\n"
+" --transliterate-file-names\n"
+" produce file names in ASCII transliteration.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:419
+#, c-format
+msgid ""
+"Options for XML and Docbook:\n"
+" --output-indent=VAL indent XML elements by VAL spaces (default %"
+"d).\n"
+" If VAL is 0, ignorable whitespace is "
+"dropped.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:426
+msgid ""
+"Input file options:\n"
+" --commands-in-node-names allow @ commands in node names.\n"
+" -D VAR define the variable VAR, as with @set.\n"
+" -I DIR append DIR to the @include search path.\n"
+" -P DIR prepend DIR to the @include search path.\n"
+" -U VAR undefine the variable VAR, as with @clear.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:435
+msgid ""
+"Conditional processing in input:\n"
+" --ifdocbook process @ifdocbook and @docbook even if\n"
+" not generating Docbook.\n"
+" --ifhtml process @ifhtml and @html even if not generating HTML.\n"
+" --ifinfo process @ifinfo even if not generating Info.\n"
+" --ifplaintext process @ifplaintext even if not generating plain text.\n"
+" --iftex process @iftex and @tex; implies --no-split.\n"
+" --ifxml process @ifxml and @xml.\n"
+" --no-ifdocbook do not process @ifdocbook and @docbook text.\n"
+" --no-ifhtml do not process @ifhtml and @html text.\n"
+" --no-ifinfo do not process @ifinfo text.\n"
+" --no-ifplaintext do not process @ifplaintext text.\n"
+" --no-iftex do not process @iftex and @tex text.\n"
+" --no-ifxml do not process @ifxml and @xml text.\n"
+"\n"
+" Also, for the --no-ifFORMAT options, do process @ifnotFORMAT text.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:454
+msgid ""
+" The defaults for the @if... conditionals depend on the output format:\n"
+" if generating HTML, --ifhtml is on and the others are off;\n"
+" if generating Info, --ifinfo is on and the others are off;\n"
+" if generating plain text, --ifplaintext is on and the others are off;\n"
+" if generating XML, --ifxml is on and the others are off.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:462
+#, fuzzy
+msgid ""
+"Examples:\n"
+" makeinfo foo.texi write Info to foo's @setfilename\n"
+" makeinfo --html foo.texi write HTML to @setfilename\n"
+" makeinfo --xml foo.texi write Texinfo XML to @setfilename\n"
+" makeinfo --docbook foo.texi write DocBook XML to @setfilename\n"
+" makeinfo --no-headers foo.texi write plain text to standard "
+"output\n"
+"\n"
+" makeinfo --html --no-headers foo.texi write html without node lines, "
+"menus\n"
+" makeinfo --number-sections foo.texi write Info with numbered sections\n"
+" makeinfo --no-split foo.texi write one Info file however big\n"
+msgstr ""
+"\n"
+"@if... µ¥§PÂ_«ü¥Oªº¹w³]­È, ·|¨Ì¿é¥X®æ¦¡¤£¦P¦Ó¤£¦P:\n"
+"¦pªG²£¥Í HTML, --ifhtml ·|¶}±Ò, ¨ä¥¦«hÃö³¬;\n"
+"¦pªG²£¥Í Info ©Î´¶³qªº¤å¦rÀÉ, --ifinfo ·|¶}±Ò, ¨ä¥¦«hÃö³¬.\n"
+"\n"
+"½d¨Ò:\n"
+" makeinfo foo.texi ¿é¥X Info ¦Ü foo ªº @setfilename\n"
+" makeinfo --html foo.texi ¿é¥X HTML ¦Ü foo ªº @setfilename\n"
+" makeinfo --no-headers -o - foo.texi ¿é¥X´¶³q¤å¦r®æ¦¡¦Ü¼Ð·Ç¿é¥X\n"
+" makeinfo --number-sections foo.texi ¥H¦³½s¸¹ªº¸`¨Ó¿é¥X Info\n"
+" makeinfo --no-split foo.texi ¤£ºÞÀɮצ³¦h¤j, ¿é¥X¦¨¤@­Ó Info ÀÉ\n"
+"\n"
+"µ{¦¡¯äÂÎ, ½Ð¥H¹q¤l¶l¥ó (­^¤å) ¦^³ø¦Ü bug-texinfo@gnu.org,\n"
+"¤@¯ë°ÝÃD»P°Q½×, ½Ð¥H¹q¤l¶l¥ó (­^¤å) ±H¨ì help-texinfo@gnu.org."
+
+#: makeinfo/makeinfo.c:622
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:670 makeinfo/makeinfo.c:696 makeinfo/makeinfo.c:720
+#: makeinfo/makeinfo.c:780
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr "%s: %s ¤Þ¼Æ¥²¶·¬°¼Æ­È, ¦Ó¤£¬O `%s'.\n"
+
+#: makeinfo/makeinfo.c:683
+#, fuzzy, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "µLªk«Ø¥ß¿é¥XÀÉ®× `%s'."
+
+#: makeinfo/makeinfo.c:688
+#, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:733
+#, fuzzy, c-format
+msgid "%s: could not open internal links output `%s'"
+msgstr "µLªk«Ø¥ß¿é¥XÀÉ®× `%s'."
+
+#: makeinfo/makeinfo.c:738
+#, c-format
+msgid "%s: ignoring second internal links output `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:751
+#, c-format
+msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
+msgstr "%s: --paragraph-indent ªº¤Þ¼Æ¥²¶·¬° ¼Æ­È/`none'/`asis', ¦Ó¤£¬O `%s'.\n"
+
+#: makeinfo/makeinfo.c:769
+#, c-format
+msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
+msgstr "%s: --footnote-style ªº¤Þ¼Æ¥²¶·¬° `separate' ©Î `end', ¦Ó¤£¬O `%s'.\n"
+
+#: makeinfo/makeinfo.c:844
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: ¿òº|Àɮפ޼Æ.\n"
+
+#: makeinfo/makeinfo.c:1041 makeinfo/makeinfo.c:4166
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1044
+#, c-format
+msgid "Expected `%s'"
+msgstr "Expected `%s'"
+
+#: makeinfo/makeinfo.c:1521
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1567
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "`%s' ¥¼¥X²{¦b `%s' ¤º"
+
+#: makeinfo/makeinfo.c:1647
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1677
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1744
+#, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr "%s: ¦]¬°¿ù»~, ²¾°£¥¨¶°¿é¥XÀÉ `%s'; ­Y­n«O¦s¥¦, ½Ð¨Ï¥Î --force ¿ï¶µ.\n"
+
+#: makeinfo/makeinfo.c:1799
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr "%s: ¦]¬°¿ù»~, ²¾°£¿é¥XÀÉ `%s'; ­Y­n«O¦s¥¦, ½Ð¨Ï¥Î --force ¿ï¶µ.\n"
+
+#: makeinfo/makeinfo.c:1818
+#, fuzzy, c-format
+msgid ""
+"%s: Removing internal links output file `%s' due to errors; use --force to "
+"preserve.\n"
+msgstr "%s: ¦]¬°¿ù»~, ²¾°£¿é¥XÀÉ `%s'; ­Y­n«O¦s¥¦, ½Ð¨Ï¥Î --force ¿ï¶µ.\n"
+
+#: makeinfo/makeinfo.c:2113
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "¥¼ª¾ªº©R¥O `%s'"
+
+#: makeinfo/makeinfo.c:2135
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr "¨Ï¥Î¤j¬A¸¹±N©R¥O¥]°_¨Ó, ¥H§@¬° @%s ªº¤Þ¼Æ"
+
+#: makeinfo/makeinfo.c:2394
+#, fuzzy, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s ¹w­p­n¦³ `{...}'"
+
+#: makeinfo/makeinfo.c:2407
+msgid "Unmatched }"
+msgstr "¥¼°t¹ïªº }"
+
+#: makeinfo/makeinfo.c:2455
+msgid "NO_NAME!"
+msgstr "NO_NAME!"
+
+#: makeinfo/makeinfo.c:2476
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s ¿òº|¥k¤j¬A¸¹"
+
+#: makeinfo/makeinfo.c:3482
+#, fuzzy, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "@image ÀÉ®× `%s' µLªkŪ¨ú: %s"
+
+#: makeinfo/makeinfo.c:3488
+#, fuzzy, c-format
+msgid "No such file `%s'"
+msgstr "`%s' ¥¼¥X²{¦b `%s' ¤º"
+
+#: makeinfo/makeinfo.c:3624
+#, fuzzy, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "@image ÀÉ®× `%s' µLªkŪ¨ú: %s"
+
+#: makeinfo/makeinfo.c:3633
+msgid "@image missing filename argument"
+msgstr "@image ¨S¦³ÀɦW¤Þ¼Æ"
+
+#: makeinfo/makeinfo.c:3851
+#, c-format
+msgid "undefined flag: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3852
+#, c-format
+msgid "{No value for `%s'}"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3904
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s ¥²¶·­n¦³¦WºÙ"
+
+#: makeinfo/makeinfo.c:4010
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "¦b°t¹ïªº @end %s ¤§«e, ¥ý¨ì¹FÀÉ®×µ²§À"
+
+#: makeinfo/makeinfo.c:4258
+#, c-format
+msgid "`%.40s...' is too long for expansion; not expanded"
+msgstr ""
+
+#: makeinfo/multi.c:116
+msgid "Missing } in @multitable template"
+msgstr "¦b @multitable ¼Ëª©¤¤, ¨S¦³ }"
+
+#: makeinfo/multi.c:260
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr ""
+
+#: makeinfo/multi.c:400
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "multitable ¶µ¥Ø¤¤¦³¤Ó¦hªºÄæ¦ì (³Ì¤j­È¬° %d)"
+
+#: makeinfo/multi.c:563
+#, fuzzy, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "µLªk¿ï¨ú multitable ¤¤ªºÄæ¦ì #%d"
+
+#: makeinfo/multi.c:592
+msgid "ignoring @tab outside of multitable"
+msgstr "©¿²¤ multitable ¥~ªº @tab"
+
+#: makeinfo/multi.c:640
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr ""
+
+#: makeinfo/multi.c:643
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* Äæ¦ì #%d: ¿é¥X = %s\n"
+
+#: makeinfo/node.c:279
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "¸`ÂI `%s' ¤w¦b²Ä %d ¦æ©w¸q¹L¤F"
+
+#: makeinfo/node.c:647
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "½s±Æ¸`ÂI %s ªº®æ¦¡¤¤...\n"
+
+#: makeinfo/node.c:714
+#, fuzzy, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr "¸`ÂI `%s' ¥²¶·¨Ï¥Î¤À¬q©R¥O (sectioning command) (¨Ò¦p: %c%s)"
+
+#: makeinfo/node.c:878
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "`%c%s' ©R¥O¤¤¥¼«ü©w¸`ÂI¦WºÙ"
+
+#: makeinfo/node.c:919 makeinfo/node.c:1163
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr ""
+
+#: makeinfo/node.c:922
+msgid "This @anchor command ignored; references to it will not work"
+msgstr ""
+
+#: makeinfo/node.c:924 makeinfo/node.c:1166
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr ""
+
+#: makeinfo/node.c:954
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr ""
+
+#: makeinfo/node.c:1160
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr ""
+
+#: makeinfo/node.c:1165
+msgid "@anchor command ignored; references to it will not work"
+msgstr ""
+
+#: makeinfo/node.c:1362
+#, fuzzy, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr "%s °Ñ·Ó¨ì¤£¦s¦bªº¸`ÂI: `%s'"
+
+#: makeinfo/node.c:1462
+#, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1465
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "¥»¸`ÂI (%s) ªº «e¤@­Ó (Prev) ¸`ÂI¦³°ÝÃD"
+
+#: makeinfo/node.c:1520
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr ""
+
+#: makeinfo/node.c:1524
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "¥»¸`ÂI (%s) ªº ¤U¤@­Ó (Next) ¸`ÂI¦³°ÝÃD"
+
+#: makeinfo/node.c:1536
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1605
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr ""
+
+#: makeinfo/node.c:1637
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "¥¼³Q°Ñ·Óªº¸`ÂI `%s'"
+
+#: makeinfo/node.c:1727
+#, c-format
+msgid "Removing %s\n"
+msgstr ""
+
+#: makeinfo/node.c:1731
+#, fuzzy, c-format
+msgid "Can't remove file `%s': %s"
+msgstr "µLªk«Ø¥ß¿é¥XÀÉ®× `%s'."
+
+#: makeinfo/sectioning.c:122
+#, fuzzy, c-format
+msgid "Appendix %c"
+msgstr "ªþ¿ý %c"
+
+#: makeinfo/sectioning.c:467
+#, fuzzy, c-format
+msgid "Internal error (search_sectioning) `%s'!"
+msgstr "¤º³¡¿ù»~ (search_sectioning) \"%s\"!"
+
+#: makeinfo/sectioning.c:563
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "¤º³¡¿ù»~ (search_sectioning) \"%s\"!"
+
+#: makeinfo/sectioning.c:624
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "%c%s ¤w¼o±ó¤£¥Î; ½Ð§ï¥Î %c%s"
+
+#: makeinfo/sectioning.c:640
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr ""
+
+#: makeinfo/sectioning.c:648
+#, c-format
+msgid "Here is the %ctop node"
+msgstr ""
+
+#: makeinfo/sectioning.c:664
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr ""
+
+#: makeinfo/xml.c:1669
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "@image ÀÉ®× `%s' µLªkŪ¨ú: %s"
+
+#: makeinfo/xml.c:2014
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+
+#: makeinfo/xml.c:2150
+msgid "of"
+msgstr ""
+
+#: makeinfo/xml.c:2155
+msgid "on"
+msgstr ""
+
+#: makeinfo/xref.c:127
+msgid "First argument to cross-reference may not be empty"
+msgstr ""
+
+#: makeinfo/xref.c:252
+#, c-format
+msgid "Empty file name for HTML cross reference in `%s'"
+msgstr ""
+
+#: makeinfo/xref.c:387
+msgid "End of file reached while looking for `.' or `,'"
+msgstr ""
+
+#: makeinfo/xref.c:390
+#, fuzzy, c-format
+msgid "`.' or `,' must follow @%s, not `%c'"
+msgstr "`.' ©Î `,' ¥²¶·¸òµÛ¥æ¤¬°Ñ·Ó, ¦Ó¤£¬O %c"
+
+#: makeinfo/xref.c:392
+#, fuzzy
+msgid "for cross-references in parentheses, use @pxref"
+msgstr "¥»¸`ÂI¨S¦³¥æ¤¬°Ñ·Ó."
+
+#: makeinfo/xref.c:435
+msgid "First argument to @inforef may not be empty"
+msgstr ""
+
+#: util/texindex.c:223
+msgid "display this help and exit"
+msgstr "Åã¥Ü¨D§U¸ê°T, µM«áÂ÷¶}"
+
+#: util/texindex.c:225
+msgid "send output to FILE"
+msgstr "±N¿é¥X°e¦Ü FILE"
+
+#: util/texindex.c:227
+msgid "display version information and exit"
+msgstr "Åã¥Üª©¥»¸ê°T, µM«áÂ÷¶}"
+
+#: util/texindex.c:237
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "¥Îªk: %s [OPTION]... FILE...\n"
+
+#: util/texindex.c:238
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr "¬°¨C­Ó TeX ¿é¥X FILE ²£¥Í¤@­Ó±Æ§Çªº¯Á¤Þ.\n"
+
+#: util/texindex.c:241
+#, c-format
+msgid "Usually FILE... is specified as `foo.%c%c' for a document `foo.texi'.\n"
+msgstr "³q±`¤å¥ó `foo.texi' ªº FILE... ¤Þ¼Æ·|«ü©w¬° `foo.%c%c'.\n"
+
+#: util/texindex.c:243
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"¿ï¶µ:\n"
+
+#: util/texindex.c:743
+#, c-format
+msgid "failure reopening %s"
+msgstr "­«·s¶}±Ò %s ®Éµo¥Í¿ù»~"
+
+#: util/texindex.c:758 util/texindex.c:786
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: ¤£¬O¤@­Ó texinfo ¯Á¤ÞÀÉ"
+
+#: util/texindex.c:993
+#, c-format
+msgid "No page number in %s"
+msgstr "¦b %s ¤¤¨S¦³­¶½X"
+
+#: util/texindex.c:1066
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr ""
+
+#, fuzzy
+#~ msgid ""
+#~ "\\%-10[search] Search forward for a specified string\n"
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr " ¨Ã¥B¿ï¾Ü¤U¤@­Ó·j´M¨ìªº¦r¦ê©Ò¦bªº¸`ÂI.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "\\%-10[goto-node] Move to node specified by name.\n"
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ msgstr " ±z¤]¥i¥H¥]§tÀɦW, ¦p: (ÀɦW)¸`ÂI¦W.\n"
+
+#, fuzzy
+#~ msgid "\\%-10[next-node] Move to the next node of current section.\n"
+#~ msgstr " %-10s ²¾¦Ü¥»¸`ÂIªº '¤U¤@­Ó (next)' ¸`ÂI.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "\\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+#~ "node] (DIR)'.\n"
+#~ msgstr " %-10s ²¾¦Ü `directory' ¸`ÂI. ¦P `g (DIR)'.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "\\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] "
+#~ "Top'.\n"
+#~ msgstr " %-10s ²¾¦Ü Top ¸`ÂI. ¦P `g TOP'.\n"
+
+#, fuzzy
+#~ msgid "\\%-10[scroll-forward-page-only] Scroll forward within this node.\n"
+#~ msgstr " %-10s ©¹«e±²°Ê¤@¦æ.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "\\%-10[scroll-backward-page-only] Scroll backward within this node.\n"
+#~ msgstr " %-10s ©¹«á±²°Ê¤@¦æ.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "\\%-10[search-backward] Search backward for a specified string\n"
+#~ " and select the node in which the previous occurrence is "
+#~ "found.\n"
+#~ msgstr " ¨Ã¥B¿ï¾Ü¤U¤@­Ó·j´M¨ìªº¦r¦ê©Ò¦bªº¸`ÂI.\n"
+
+#~ msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+#~ msgstr "--- ¨Ï¥Î `\\[history-node]' ©Î `\\[kill-node]' Â÷¶}---\n"
+
+#, fuzzy
+#~ msgid "\\%-10[move-to-prev-xref] Skip to previous hypertext link [*].\n"
+#~ msgstr " %-10s ¸õ¨ì¥»¸`ÂI¤¤ªº¤U¤@­Ó¶W¥»¤å³sµ².\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]... [MENU-ITEM...]\n"
+#~ "\n"
+#~ "Read documentation in Info format.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --apropos=STRING look up STRING in all indices of all "
+#~ "manuals.\n"
+#~ " -d, --directory=DIR add DIR to INFOPATH.\n"
+#~ " --dribble=FILENAME remember user keystrokes in FILENAME.\n"
+#~ " -f, --file=FILENAME specify Info file to visit.\n"
+#~ " -h, --help display this help and exit.\n"
+#~ " --index-search=STRING go to node pointed by index entry STRING.\n"
+#~ " -n, --node=NODENAME specify nodes in first visited Info file.\n"
+#~ " -o, --output=FILENAME output selected nodes to FILENAME.\n"
+#~ " -R, --raw-escapes output \"raw\" ANSI escapes (default).\n"
+#~ " --no-raw-escapes output escapes as literal text.\n"
+#~ " --restore=FILENAME read initial keystrokes from FILENAME.\n"
+#~ " -O, --show-options, --usage go to command-line options node.\n"
+#~ "%s --subnodes recursively output menu items.\n"
+#~ " -w, --where, --location print physical location of Info file.\n"
+#~ " --vi-keys use vi-like and less-like key bindings.\n"
+#~ " --version display version information and exit.\n"
+#~ "\n"
+#~ "The first non-option argument, if present, is the menu entry to start "
+#~ "from;\n"
+#~ "it is searched for in all `dir' files along INFOPATH.\n"
+#~ "If it is not present, info merges all `dir' files and shows the result.\n"
+#~ "Any remaining arguments are treated as the names of menu\n"
+#~ "items relative to the initial node visited.\n"
+#~ "\n"
+#~ "Examples:\n"
+#~ " info show top-level dir menu\n"
+#~ " info emacs start at emacs node from top-level dir\n"
+#~ " info emacs buffers start at buffers node within emacs manual\n"
+#~ " info --show-options emacs start at node with emacs' command line "
+#~ "options\n"
+#~ " info --subnodes -o out.txt emacs dump entire manual to out.txt\n"
+#~ " info -f ./foo.info show file ./foo.info, not searching dir\n"
+#~ msgstr ""
+#~ "¥Îªk: %s [OPTION]... [MENU-ITEM...]\n"
+#~ "\n"
+#~ "¾\Ū Info ®æ¦¡ªº¤å¥ó.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --apropos=SUBJECT ¦b©Ò¦³ªº¤â¥Uªº¯Á¤Þ¤¤´M§ä SUBJECT.\n"
+#~ " --directory=DIR ±N DIR ¥[¦Ü INFOPATH ¤¤.\n"
+#~ " --dribble=FILENAME ±N¨Ï¥ÎªÌªº«öÁä°O¿ý¦b FILENAME ¤¤.\n"
+#~ " --file=FILENAME «ü©w«ô³Xªº Info ÀÉ®×.\n"
+#~ " --help Åã¥Ü¥»¨D§U¸ê°T, µM«áÂ÷¶}.\n"
+#~ " --index-search=STRING ¸õ¦Ü¯Á¤Þ¶µ¥Ø STRING ©Ò«ü¦Vªº¸`ÂI.\n"
+#~ " --node=NODENAME «ü©w²Ä¤@­Ó«ô³Xªº Info Àɮפ¤ªº¸`ÂI.\n"
+#~ " --output=FILENAME ±N¿ï¾Üªº¸`ÂI¿é¥X¦ÜÀÉ®× FILENAME.\n"
+#~ " --restore=FILENAME ¦ÛÀÉ®× FILENAME Ū¨úªì©lªº«öÁä.\n"
+#~ " --show-options, --usage ¸õ¦Ü©R¥O¦C¿ï¶µªº¸`ÂI.\n"
+#~ " --subnodes ¥H»¼°j¤è¦¡¿é¥X¿ï³æ¶µ¥Ø.\n"
+#~ "%s --vi-keys ¨Ï¥ÎÃþ¦ü vi »P less ªº«öÁä¤è¦¡.\n"
+#~ " --version Åã¥Üª©¥»¸ê°T, µM«áµ²§ô.\n"
+#~ "\n"
+#~ "¦pªG¦³«D¿ï¶µªº¤Þ¼Æ, ²Ä¤@­Ó«D¿ï¶µªº¤Þ¼Æ¬O¶}©lªº¿ï³æ¶µ¥Ø;\n"
+#~ "¥¦·|³Q¥Î¨Ó·í§@¦b INFOPATH ¤ºªº©Ò¦³ dir Àɮתº·j´M¼Ðªº.\n"
+#~ "¦pªG¨S¦³ªº¸Ü, info ·|²Î¦X©Ò¦³ªº dir ÀÉ®×, µM«áÅã¥Üµ²ªG.\n"
+#~ "³Ñ¤Uªº¤Þ¼Æ·|³Q·í§@¬Û¹ï©ó³Ìªì«ô³X¸`ÂIªº¿ï³æ¶µ¥Øªº¦WºÙ.\n"
+#~ "\n"
+#~ "½d¨Ò:\n"
+#~ " info Åã¥Ü³Ì¤W¼hªº¿ï³æ\n"
+#~ " info emacs ¥H³Ì¤W¼h¤¤ªº emacs ¸`ÂI§@¬°°_ÂI\n"
+#~ " info emacs buffers ¥H emacs ¤â¥U¤¤ªº buffers ¸`ÂI§@¬°°_ÂI\n"
+#~ " info --show-options emacs ¥H¤¶²Ð emacs ªº°õ¦æ¿ï¶µªº¸`ÂI§@¬°°_ÂI\n"
+#~ " info -f ./foo.info Åã¥ÜÀÉ®× ./foo.info, ¤£·j´M¥Ø¿ý\n"
+#~ "\n"
+#~ "µ{¦¡¯äÂÎ, ½Ð¥H¹q¤l¶l¥ó (­^¤å) ¦^³ø¦Ü bug-texinfo@gnu.org,\n"
+#~ "¤@¯ë°ÝÃD»P°Q½×, ½Ð¥H¹q¤l¶l¥ó (­^¤å) ±H¨ì help-texinfo@gnu.org.\n"
+
+#~ msgid ""
+#~ " Picking a menu item causes another node to be selected.\n"
+#~ msgstr " ¿ï¨ú¿ï³æ¶µ¥Ø¥H¿ï¾Ü¥t¤@­Ó¸`ÂI.\n"
+
+#~ msgid ""
+#~ " You may include a filename as well, as in (FILENAME)"
+#~ "NODENAME.\n"
+#~ msgstr " ±z¤]¥i¥H¥]§tÀɦW, ¦p: (ÀɦW)¸`ÂI¦W.\n"
+
+#, fuzzy
+#~ msgid " %-10s Search backward for a specified string\n"
+#~ msgstr " %-10s ¦b¥» Info Àɤ¤, ¦V«á·j´M¤@­Ó«ü©wªº¦r¦ê,\n"
+
+#~ msgid ""
+#~ " and select the node in which the next occurrence is found.\n"
+#~ msgstr " ¨Ã¥B¿ï¾Ü¤U¤@­Ó·j´M¨ìªº¦r¦ê©Ò¦bªº¸`ÂI.\n"
+
+#~ msgid "Following Next node..."
+#~ msgstr "¸òÀH¤U¤@­Ó¸`ÂI..."
+
+#~ msgid "Selecting first menu item..."
+#~ msgstr "¿ï¨ú²Ä¤@­Ó¿ï³æ¶µ¥Ø..."
+
+#~ msgid "Selecting Next node..."
+#~ msgstr "¿ï¨ú¤U¤@­Ó¸`ÂI..."
+
+#~ msgid "Moving Up %d time(s), then Next."
+#~ msgstr "©¹¤W¤@¼h²¾°Ê %d ¦¸, µM«á©¹¤U¤@­Ó¤è¦V²¾°Ê."
+
+#~ msgid "Moving Prev in this window."
+#~ msgstr "¦V¥»¤À¹jµøµ¡ªº ¤W¤@­Ó (Prev) ¸`ÂI²¾°Ê."
+
+#~ msgid "Moving Up in this window."
+#~ msgstr "¦V¥»¤À¹jµøµ¡ªº¤W¤@¼h¸`ÂI²¾°Ê."
+
+#~ msgid "Moving to `Prev's last menu item."
+#~ msgstr "²¾¦Ü«e¤@­Ó¸`ÂIªº³Ì«á¤@­Ó¥Ø¿ý¶µ¥Ø."
+
+#~ msgid " "
+#~ msgstr " "
+
+#, fuzzy
+#~ msgid "Macro"
+#~ msgstr "¤T¤ë"
+
+#, fuzzy
+#~ msgid "Variable"
+#~ msgstr "³]©wÅܼÆ: "
+
+#, fuzzy
+#~ msgid "User Option"
+#~ msgstr "´¡¤J§¹¦¨¥y"
+
+#, fuzzy
+#~ msgid "Instance Variable"
+#~ msgstr "´y­zÅܼÆ: "
+
+#~ msgid "This is %s, produced by makeinfo version %s from %s.\n"
+#~ msgstr "³o¬O %s, ¥Ñ makeinfo ª©¥» %s ¦Û %s ²£¥Íªº.\n"
+
+#~ msgid "Next:"
+#~ msgstr "¤U¤@­Ó:"
+
+#~ msgid "Previous:"
+#~ msgstr "¤W¤@­Ó:"
+
+#~ msgid "Up:"
+#~ msgstr "¤W¤@¼h:"
+
+#~ msgid "Menu"
+#~ msgstr "¥Ø¿ý"
+
+#~ msgid "Prev"
+#~ msgstr "«e¤@­Ó"
+
+#~ msgid "Up"
+#~ msgstr "¤W¤@¼h"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+#~ "\n"
+#~ "Add or remove entries in INFO-FILE from the Info directory DIR-FILE.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --debug report what is being done.\n"
+#~ " --delete delete existing entries for INFO-FILE from DIR-FILE;\n"
+#~ " don't insert any new entries.\n"
+#~ " --dir-file=NAME specify file name of Info directory file.\n"
+#~ " This is equivalent to using the DIR-FILE argument.\n"
+#~ " --entry=TEXT insert TEXT as an Info directory entry.\n"
+#~ " TEXT should have the form of an Info menu item line\n"
+#~ " plus zero or more extra lines starting with "
+#~ "whitespace.\n"
+#~ " If you specify more than one entry, they are all "
+#~ "added.\n"
+#~ " If you don't specify any entries, they are "
+#~ "determined\n"
+#~ " from information in the Info file itself.\n"
+#~ " --help display this help and exit.\n"
+#~ " --info-file=FILE specify Info file to install in the directory.\n"
+#~ " This is equivalent to using the INFO-FILE argument.\n"
+#~ " --info-dir=DIR same as --dir-file=DIR/dir.\n"
+#~ " --item=TEXT same as --entry TEXT.\n"
+#~ " An Info directory entry is actually a menu item.\n"
+#~ " --quiet suppress warnings.\n"
+#~ " --remove same as --delete.\n"
+#~ " --remove-exactly only remove if the info file name matches exactly;\n"
+#~ " .info and/or .gz suffixes are not ignored.\n"
+#~ " --section=SEC put this file's entries in section SEC of the "
+#~ "directory.\n"
+#~ " If you specify more than one section, all the "
+#~ "entries\n"
+#~ " are added in each of the sections.\n"
+#~ " If you don't specify any sections, they are "
+#~ "determined\n"
+#~ " from information in the Info file itself.\n"
+#~ " --section-regex=R if an entry is added to a section that does not "
+#~ "exist,\n"
+#~ " look for a section matching basic regular expression "
+#~ "R\n"
+#~ " (and ignoring case) before starting a new section.\n"
+#~ " --test suppress updating of DIR-FILE.\n"
+#~ " --silent suppress warnings.\n"
+#~ " --version display version information and exit.\n"
+#~ msgstr ""
+#~ "¥Îªk: %s [OPTION]... [INFO-FILE [DIR-FILE]]\n"
+#~ "\n"
+#~ "¦Û Info ¥Ø¿ýÀÉ®× DIR-FILE ªº INFO-FILE ¤¤, ¦w¸Ë©Î²¾°£ dir ¶µ¥Ø.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --delete ¦Û DIR-FILE ¤¤, §R°£²{¦³ªº INFO-FILE ¶µ¥Ø;\n"
+#~ " ¤£·s¼W¥ô¦ó·sªº¶µ¥Ø.\n"
+#~ " --dir-file=NAME «ü©w Info ¥Ø¿ýÀɮתºÀɮצWºÙ.\n"
+#~ " ¥»¿ï¶µ»P¨Ï¥Î DIR-FILE ¤Þ¼Æ¬Û¦P.\n"
+#~ " --entry=TEXT ¥H TEXT §@¬° Info directory ¶µ¥Ø.\n"
+#~ " TEXT À³¸Ó»P Info ¥Ø¿ý¶µ¥Øªº¼gªk¦³¬Û¦P®æ¦¡\n"
+#~ " ¦A¥[¤W¹s­Ó¥H¤Wªº¥HªÅ¥Õ¦r¤¸¶}©lªº¸ê®Æ¦æ.\n"
+#~ " ¦pªG±z«ü©w¶W¹L¤@­Ó¥H¤Wªº¶µ¥Ø, ¥¦­Ì¥þ³£·|³Q¥[¶i¥h.\n"
+#~ " ¦pªG±z¨S¦³«ü©w¥ô¦óªº¶µ¥Ø, ¥¦­Ì·|¥H Info Àɮפ¤ªº\n"
+#~ "\t\t ¸ê°T¨Ó¨M©w.\n"
+#~ " --help Åã¥Ü¨D§U¸ê°T, µM«áÂ÷¶}.\n"
+#~ " --info-file=FILE «ü©w­n¦w¸Ë¦b¥Ø¿ý¤¤ªº Info ÀÉ®×.\n"
+#~ " ¥»¿ï¶µ»P¨Ï¥Î INFO-FILE ¤Þ¼Æ¬Û¦P.\n"
+#~ " --info-dir=DIR »P --dir-file=DIR/dir ¬Û¦P.\n"
+#~ " --item=TEXT »P --entry TEXT ¬Û¦P.\n"
+#~ " ¤@­Ó Info directory ¶µ¥Ø¨ä¹ê´N¬O¤@­Ó¿ï³æ¶µ¥Ø.\n"
+#~ " --quiet ¤£Åã¥Üĵ§i°T®§.\n"
+#~ " --remove »P --delete ¬Û¦P.\n"
+#~ " --section=SEC ±N¥»Àɮתº¶µ¥Ø©ñ¦b¥Ø¿ý¤¤ªº SEC ¸`.\n"
+#~ " ¦pªG±z«ü©w¶W¹L¤@­Ó¥H¤Wªº¸`, ©Ò¦³ªº¶µ¥Ø³£·|\n"
+#~ "\t\t ·s¼W¦b¨C¤@­Ó¸`¤º.\n"
+#~ " ¦pªG±z¨S¦³«ü©w¥ô¦óªº¸`, ¥¦­Ì·|¥H Info Àɮפ¤ªº\n"
+#~ " ¸ê°T¨Ó¨M©w.\n"
+#~ " --version Åã¥Üª©¥»¸ê°T, µM«áÂ÷¶}.\n"
+#~ "\n"
+#~ "µ{¦¡¯äÂÎ, ½Ð¥H¹q¤l¶l¥ó (­^¤å) ¦^³ø¦Ü bug-texinfo@gnu.org,\n"
+#~ "¤@¯ë°ÝÃD»P°Q½×, ½Ð¥H¹q¤l¶l¥ó (­^¤å) ±H¨ì help-texinfo@gnu.org.\n"
+
+#~ msgid "menu item `%s' already exists, for file `%s'"
+#~ msgstr "¥Ø¿ý¶µ¥Ø `%s' ¤w¦s¦b, ¬Oµ¹ÀÉ®× `%s' ªº"
+
+#, fuzzy
+#~ msgid "\\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+#~ msgstr " %-10s ¬D¿ï¸`ÂI¥Ø¿ý¤¤ªº²Ä¤@­Ó...²Ä¤E­Ó¶µ¥Ø.\n"
+
+#~ msgid "node `%s' has been referenced %d times"
+#~ msgstr "¸`ÂI `%s' ¤w³Q°Ñ·Ó %d ¦¸"
+
+#, fuzzy
+#~ msgid ""
+#~ "Copyright (C) %s Free Software Foundation, Inc.\n"
+#~ "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n"
+#~ "PARTICULAR PURPOSE. You may redistribute copies of GNU %s\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the file named COPYING.\n"
+#~ msgstr ""
+#~ "Copyright (C) %s ¦Û¥Ñ³nÅé°òª÷·| Free Software Foundation, Inc.\n"
+#~ "¥»³nÅé*¤£§@¥ô¦ó«OÃÒ*. ±z¥i¦b GNU ¤½¦@±ÂÅv \n"
+#~ "(GNU General Public License) ªº±ø´Ú¤U´²§G¥»³nÅé.\n"
+#~ "±ýª¾§ó¦hªº¸Ô±¡, ½Ð¬ÝÀɦW¬° COPYING ªºÀÉ®×.\n"
+
+#~ msgid "@quote-arg only useful for single-argument macros"
+#~ msgstr "@quote-arg ¥u¦b³æ¤@¤Þ¼Æªº¥¨¶°¦³¥Î"
+
+#~ msgid "keep temporary files around after processing"
+#~ msgstr "³B²z§¹²¦«á, ¤£²¾°£¼È¦sÀÉ"
+
+#~ msgid "do not keep temporary files around after processing (default)"
+#~ msgstr "³B²z§¹²¦«á, ²¾°£¼È¦sÀÉ (¹w³]­È)"
+
+#~ msgid ""
+#~ " file, and select the node referenced by the first entry "
+#~ "found.\n"
+#~ msgstr " ¨Ã¥B¿ï¾Ü²Ä¤@­Ó·j´M¨ìªº¶µ¥Ø©Ò°Ñ·Óªº¸`ÂI.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "There is NO warranty. You may redistribute this software\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the files named COPYING.\n"
+#~ msgstr ""
+#~ "Copyright (C) %s ¦Û¥Ñ³nÅé°òª÷·| Free Software Foundation, Inc.\n"
+#~ "¥»³nÅé*¤£§@¥ô¦ó«OÃÒ*. ±z¥i¦b GNU ¤½¦@±ÂÅv \n"
+#~ "(GNU General Public License) ªº±ø´Ú¤U´²§G¥»³nÅé.\n"
+#~ "±ýª¾§ó¦hªº¸Ô±¡, ½Ð¬ÝÀɦW¬° COPYING ªºÀÉ®×.\n"
+
+#~ msgid "%s: Specify the Info directory only once.\n"
+#~ msgstr "%s: ¥u¦³«ü©w Info ¥Ø¿ý¤@¦¸.\n"
+
+#~ msgid "\"\" is invalid"
+#~ msgstr "\"\" ¤£¦Xªk"
+
+#, fuzzy
+#~ msgid "%s is an invalid ISO code, using %c"
+#~ msgstr "%s ¤£¬O¤@­Ó¦Xªkªº ISO 639 »y¨¥½X"
+
+#~ msgid "Node:"
+#~ msgstr "¸`ÂI:"
+
+#~ msgid "`%s' has no Up field"
+#~ msgstr "`%s' ¨S¦³ ¤W¤@¼h (Up) Äæ¦ì"
+
+#, fuzzy
+#~ msgid ""
+#~ "Email bug reports to bug-texinfo@gnu.org,\n"
+#~ "general questions and discussion to help-texinfo@gnu.org."
+#~ msgstr ""
+#~ "\n"
+#~ "µ{¦¡¯äÂÎ, ½Ð¥H¹q¤l¶l¥ó (­^¤å) ¦^³ø¦Ü bug-texinfo@gnu.org,\n"
+#~ "¤@¯ë°ÝÃD»P°Q½×, ½Ð¥H¹q¤l¶l¥ó (­^¤å) ±H¨ì help-texinfo@gnu.org.\n"
+
+#~ msgid "Basic Commands in Info Windows\n"
+#~ msgstr "Info ¤À¹jµøµ¡¤ºªº°ò¥»«ü¥O\n"
+
+#~ msgid "Moving within a node:\n"
+#~ msgstr "¦b¸`ÂI¤º²¾°Ê:\n"
+
+#~ msgid "Selecting other nodes:\n"
+#~ msgstr "¿ï¾Ü¨ä¥¦ªº¸`ÂI:\n"
+
+#~ msgid "Other commands:\n"
+#~ msgstr "¨ä¥¦«ü¥O:\n"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+#~ "\n"
+#~ "Translate Texinfo source documentation to various other formats:\n"
+#~ "Info files suitable for reading online with Emacs or standalone GNU Info\n"
+#~ "(by default); plain text (with --no-headers); or HTML (with --html).\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " --commands-in-node-names allow @ commands in node names.\n"
+#~ " -D VAR define a variable, as with @set.\n"
+#~ " -E, --macro-expand FILE output macro-expanded source to FILE.\n"
+#~ " --error-limit=NUM quit after NUM errors (default %d).\n"
+#~ " --fill-column=NUM break Info lines at NUM characters (default %"
+#~ "d).\n"
+#~ " --footnote-style=STYLE output footnotes according to STYLE:\n"
+#~ " `separate' to place footnotes in their own "
+#~ "node,\n"
+#~ " `end' to place the footnotes at the end of "
+#~ "the\n"
+#~ " node in which they are defined (the "
+#~ "default).\n"
+#~ " --force preserve output even if errors.\n"
+#~ " --help display this help and exit.\n"
+#~ " --html output HTML rather than Info format;\n"
+#~ " -I DIR append DIR to the @include search path.\n"
+#~ " --ifhtml process @ifhtml and @html text even when not\n"
+#~ " generating HTML.\n"
+#~ " --ifinfo process @ifinfo text even when generating "
+#~ "HTML.\n"
+#~ " --iftex process @iftex and @tex text.\n"
+#~ " implies --no-split.\n"
+#~ msgstr ""
+#~ "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+#~ "\n"
+#~ "±N Texinfo ªº­ì©l½X¤å¥óÂà´«¦Ü¨ä¥¦ªº®æ¦¡:\n"
+#~ "Info ÀɾA¦X¥H Emacs ©Î¬O¿W¥ßªº GNU Info µ{¦¡§@½u¤WŪ¨ú (¹w³]);\n"
+#~ "¯Â¤å¦r (¨Ï¥Î --no-headers ¿ï¶µ); ©Î HTML (¨Ï¥Î --html ¿ï¶µ).\n"
+#~ "\n"
+#~ "¿ï¶µ:\n"
+#~ " --commands-in-node-names ¤¹³\¸`ÂI¦WºÙ¤¤¨Ï¥Î @ ©R¥O.\n"
+#~ " -D VAR ¦p¦P @set ¤@¯ë©w¸q¤@­ÓÅܼÆ.\n"
+#~ " -E, --macro-expand FILE ±N¤w®i¶}¥¨¶°ªº­ì©l½X¿é¥X¦ÜÀÉ®× FILE.\n"
+#~ " --error-limit=NUM ¦b NUM ­Ó¿ù»~«áµ²§ô (¹w³]­È¬° %d).\n"
+#~ " --fill-column=NUM ¨C¦æ¦b NUM ­Ó¦r¤¸³BÂ_¦æ (¹w³]­È¬° %d).\n"
+#~ " --footnote-style=STYLE ¥H STYLE ¤è¦¡¿é¥Xµù¸}:\n"
+#~ " `separate' ¬O±Nµù¸}©ñ¸m¦b¥¦­Ì¦Û¤vªº¸`ÂI,\n"
+#~ " `end' ¬O±Nµù¸}©ñ¸m¦b¥¦­Ì³Q©w¸qªº¸`ÂI\n"
+#~ " ªº§ÀºÝ (¹w³]­È).\n"
+#~ " --force §Y¨Ï¦³¿ù»~²£¥Í, ¤]ºû«ù¿é¥X.\n"
+#~ " --help Åã¥Ü¨D§U¸ê°T, µM«áÂ÷¶}.\n"
+#~ " --html ¿é¥X HTML ®æ¦¡, ¦Ó«D Info;\n"
+#~ " -I DIR ±N DIR ¥[¦b @include ·j´M¸ô®|¤§«á.\n"
+#~ " --ifhtml §Y¨Ï¤£¿é¥X HTML ®æ¦¡, ¤]¤@¨Ö³B²z @ifhtml\n"
+#~ " »P @html ¤å¦r.\n"
+#~ " --ifinfo §Y¨Ï¿é¥X HTML, ¤]¤@¨Ö³B²z @ifinfo ¤å¦r\n"
+#~ " --iftex ³B²z @iftex »P @tex ¤å¦r.\n"
+#~ " Áô§t --no-split ¿ï¶µ.\n"
+
+#~ msgid ""
+#~ " --no-headers suppress Info node separators and Node: lines "
+#~ "and\n"
+#~ " write to standard output without --output.\n"
+#~ " --no-ifhtml do not process @ifhtml and @html text.\n"
+#~ " --no-ifinfo do not process @ifinfo text.\n"
+#~ " --no-iftex do not process @iftex and @tex text.\n"
+#~ " --no-split suppress splitting of large Info output files "
+#~ "or\n"
+#~ " generation of one HTML file per node.\n"
+#~ " --no-validate suppress node cross-reference validation.\n"
+#~ " --no-warn suppress warnings (but not errors).\n"
+#~ " --number-sections include chapter, section, etc. numbers in "
+#~ "output.\n"
+#~ " -o, --output=FILE output to FILE, ignoring any @setfilename.\n"
+#~ " -P DIR prepend DIR to the @include search path.\n"
+#~ " --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default %"
+#~ "d).\n"
+#~ " if VAL is `none', do not indent;\n"
+#~ " if VAL is `asis', preserve existing "
+#~ "indentation.\n"
+#~ " --reference-limit=NUM warn about at most NUM references (default %"
+#~ "d).\n"
+#~ " -U VAR undefine a variable, as with @clear.\n"
+#~ " -v, --verbose explain what is being done.\n"
+#~ " --version display version information and exit.\n"
+#~ msgstr ""
+#~ " --no-headers ¤£²£¥Í Info ¸`ÂI¤À¹j½u»P ¸`ÂI: ¦æ, ¥H¤Î\n"
+#~ " ¥¼«ü©w --output ®É, ¿é¥X¦Ü¼Ð·Ç¿é¥X³]³Æ.\n"
+#~ " --no-ifhtml ¤£³B²z @ifhtml »P @html ¤å¦r.\n"
+#~ " --no-ifinfo ¤£³B²z @ifinfo ¤å¦r.\n"
+#~ " --no-iftex ¤£³B²z @iftex »P @tex ¤å¦r.\n"
+#~ " --no-split ¤£¤À³Î¤jªº Info ¿é¥XÀÉ®×, ¤]¤£¤@­Ó¸`ÂI\n"
+#~ " ´N²£¥Í¤@­Ó HTML ÀÉ®×\n"
+#~ " --no-validate ¤£¹ï¸`ÂIªº¥æ¤¬°Ñ·Ó§@¦³®ÄÀˬd.\n"
+#~ " --no-warn ¤£Åã¥Üĵ§i (¦ý¬O¤£¥]¬A¿ù»~).\n"
+#~ " --number-sections ¦b¿é¥X®ÉÅã¥Ü³¹¸`µ¥ªº½s¸¹.\n"
+#~ " -o, --output=FILE ¿é¥X¦ÜÀÉ®× FILE, ©¿²¤¥ô¦óªº @setfilename ³]"
+#~ "©w.\n"
+#~ " -P DIR ±N DIR ¥[¦b @include ·j´M¸ô®|¤§«e.\n"
+#~ " --paragraph-indent=VAL ±N Info ¬q¸¨ÁY±Æ VAL ­ÓªÅ¥Õ (¹w³]­È¬° %d).\n"
+#~ " ¦pªG VAL ¬° `none', ¤£§@ÁY±Æ;\n"
+#~ " ¦pªG VAL ¬° `asis', «O¯d¥Ø«eªº ÁY±Æ.\n"
+#~ " --reference-limit=NUM ³Ì¦hĵ§i NUM ­Ó°Ñ·Ó (¹w³]­È¬° %d).\n"
+#~ " -U VAR ¨ú®øÅܼƪº©w¸q, ¦p¦P @clear.\n"
+#~ " -v, --verbose ¸ÑÄÀ¥Ø«e¥¿¦b§@ªº¨Æ.\n"
+#~ " --version Åã¥Üª©¥»¸ê°T, µM«áµ²§ô.\n"
+
+#~ msgid "No .png or .jpg for `%s'"
+#~ msgstr "¨S¦³µ¹ `%s' ªº .png ©Î .jpg"
diff --git a/system.h b/system.h
new file mode 100644
index 0000000..51fd0ae
--- /dev/null
+++ b/system.h
@@ -0,0 +1,260 @@
+/* system.h: system-dependent declarations; include this first.
+ $Id: system.h,v 1.10 2008/07/26 17:13:26 karl Exp $
+
+ Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+ 2006, 2007, 2008 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/>. */
+
+#ifndef TEXINFO_SYSTEM_H
+#define TEXINFO_SYSTEM_H
+
+#define _GNU_SOURCE
+
+#include <config.h>
+
+#ifdef MIKTEX
+#include <gnu-miktex.h>
+#define S_ISDIR(x) ((x)&_S_IFDIR)
+#else
+/* MiKTeX defines substring() in a separate DLL, where it has its
+ own __declspec declaration. We don't want to try to duplicate
+ this Microsoft-ism here. */
+extern char *substring (const char *, const char *);
+#endif
+
+/* Assume ANSI C89 headers are available. */
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+/* Use POSIX headers. If they are not available, we use the substitute
+ provided by gnulib. */
+#include <getopt.h>
+#include <unistd.h>
+
+/* For gettext (NLS). */
+#define const
+#include "gettext.h"
+#undef const
+
+#define _(String) gettext (String)
+#define N_(String) (String)
+
+/* Additional gnulib includes. */
+#include "mbchar.h"
+#include "mbswidth.h"
+#include "xalloc.h"
+#include "xsetenv.h"
+#if HAVE_MBRTOWC
+#include "mbiter.h"
+#endif
+
+#include <errno.h>
+#ifndef errno
+extern int errno;
+#endif
+#ifdef VMS
+#include <perror.h>
+#endif
+
+#ifndef HAVE_DECL_STRERROR
+extern char *strerror ();
+#endif
+
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#ifndef PATH_MAX
+#ifndef _POSIX_PATH_MAX
+# define _POSIX_PATH_MAX 255
+#endif
+#define PATH_MAX _POSIX_PATH_MAX
+#endif
+
+#ifndef HAVE_DECL_STRCOLL
+extern int strcoll ();
+#endif
+
+#include <sys/stat.h>
+#if STAT_MACROS_BROKEN
+# undef S_ISDIR
+#endif
+#if !defined(S_ISDIR) && defined(S_IFDIR)
+# define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
+#endif
+
+#ifdef HAVE_SYS_FILE_H
+#include <sys/file.h>
+#endif /* HAVE_SYS_FILE_H */
+
+#ifndef O_RDONLY
+/* Since <fcntl.h> is POSIX, prefer that to <sys/fcntl.h>.
+ This also avoids some useless warnings on (at least) Linux. */
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#else /* not HAVE_FCNTL_H */
+#ifdef HAVE_SYS_FCNTL_H
+#include <sys/fcntl.h>
+#endif /* not HAVE_SYS_FCNTL_H */
+#endif /* not HAVE_FCNTL_H */
+#endif /* not O_RDONLY */
+
+/* MS-DOS and similar non-Posix systems have some peculiarities:
+ - they distinguish between binary and text files;
+ - they use both `/' and `\\' as directory separator in file names;
+ - they can have a drive letter X: prepended to a file name;
+ - they have a separate root directory on each drive;
+ - their filesystems are case-insensitive;
+ - directories in environment variables (like INFOPATH) are separated
+ by `;' rather than `:';
+ - text files can have their lines ended either with \n or with \r\n pairs;
+ These are all parameterized here except the last, which is
+ handled by the source code as appropriate (mostly, in info/). */
+#ifndef O_BINARY
+# ifdef _O_BINARY
+# define O_BINARY _O_BINARY
+# else
+# define O_BINARY 0
+# endif
+#endif /* O_BINARY */
+
+/* We'd like to take advantage of _doprnt if it's around, a la error.c,
+ but then we'd have no VA_SPRINTF. */
+#if HAVE_VPRINTF
+# if __STDC__
+# include <stdarg.h>
+# define VA_START(args, lastarg) va_start(args, lastarg)
+# else
+# include <varargs.h>
+# define VA_START(args, lastarg) va_start(args)
+# endif
+# define VA_FPRINTF(file, fmt, ap) vfprintf (file, fmt, ap)
+# define VA_SPRINTF(str, fmt, ap) vsprintf (str, fmt, ap)
+#else /* not HAVE_VPRINTF */
+# define VA_START(args, lastarg)
+# define va_alist a1, a2, a3, a4, a5, a6, a7, a8
+# define va_dcl char *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8;
+# define va_end(args)
+#endif
+
+#if O_BINARY
+# ifdef HAVE_IO_H
+# include <io.h>
+# endif
+# ifdef __MSDOS__
+# include <limits.h>
+# ifdef __DJGPP__
+# define HAVE_LONG_FILENAMES(dir) (pathconf (dir, _PC_NAME_MAX) > 12)
+# define NULL_DEVICE "/dev/null"
+# define DEFAULT_INFOPATH "c:/djgpp/info;/usr/local/info;/usr/info;."
+ /* DJGPP supports /dev/null, which is okay for Unix aficionados,
+ shell scripts and Makefiles, but interactive DOS die-hards
+ would probably want to have NUL as well. */
+# define ALSO_NULL_DEVICE "NUL"
+# else /* O_BINARY && !__DJGPP__ */
+# define HAVE_LONG_FILENAMES(dir) (0)
+# define NULL_DEVICE "NUL"
+# endif /* O_BINARY && !__DJGPP__ */
+# define SET_SCREEN_SIZE_HELPER terminal_prep_terminal()
+# define DEFAULT_INFO_PRINT_COMMAND ">PRN"
+# else /* O_BINARY && !__MSDOS__ */
+# define setmode(f,m) _setmode(f,m)
+# define HAVE_LONG_FILENAMES(dir) (1)
+# define NULL_DEVICE "NUL"
+# endif /* O_BINARY && !__MSDOS__ */
+# ifdef __CYGWIN__
+# define DEFAULT_TMPDIR "/tmp/"
+# define PATH_SEP ":"
+# define STRIP_DOT_EXE 0
+# undef NULL_DEVICE
+# define NULL_DEVICE "/dev/null"
+# define PIPE_USE_FORK 1
+# else /* O_BINARY && !__CYGWIN__ */
+# define DEFAULT_TMPDIR "c:/"
+# define PATH_SEP ";"
+# define STRIP_DOT_EXE 1
+# endif /* O_BINARY && !__CYGWIN__ */
+ /* Back to any O_BINARY system. */
+# define FILENAME_CMP mbscasecmp
+# define FILENAME_CMPN mbsncasecmp
+# define FOPEN_RBIN "rb"
+# define FOPEN_WBIN "wb"
+# define HAVE_DRIVE(n) ((n)[0] && (n)[1] == ':')
+# define IS_SLASH(c) ((c) == '/' || (c) == '\\')
+# define IS_ABSOLUTE(n) (IS_SLASH((n)[0]) || HAVE_DRIVE(n))
+# define PIPE_USE_FORK 0
+# define SET_BINARY(f) do {if (!isatty(f)) setmode(f,O_BINARY);} while(0)
+
+#else /* not O_BINARY, i.e., Unix */
+# define SET_BINARY(f) (void)0
+# define FOPEN_RBIN "r"
+# define FOPEN_WBIN "w"
+# define IS_SLASH(c) ((c) == '/')
+# define HAVE_DRIVE(n) (0)
+# define IS_ABSOLUTE(n) ((n)[0] == '/')
+# define FILENAME_CMP strcmp
+# define FILENAME_CMPN strncmp
+# define HAVE_LONG_FILENAMES(dir) (1)
+# define PATH_SEP ":"
+# define STRIP_DOT_EXE 0
+# ifdef VMS
+# define DEFAULT_TMPDIR "sys$scratch:"
+# else
+# define DEFAULT_TMPDIR "/tmp/"
+# endif
+# define NULL_DEVICE "/dev/null"
+# define PIPE_USE_FORK 1
+#endif /* not O_BINARY */
+
+/* Everything but DJGPP. */
+#ifndef ALSO_NULL_DEVICE
+# define ALSO_NULL_DEVICE ""
+#endif
+
+#ifdef HAVE_PWD_H
+#include <pwd.h>
+#endif
+/* Some systems don't declare this function in pwd.h. */
+struct passwd *getpwnam (const char *name);
+
+/* Our library routines not included in any system library. */
+extern void *xmalloc (size_t), *xrealloc (void *, size_t);
+extern char *xstrdup (const char *);
+extern void xexit (int);
+
+/* For convenience. */
+#define STREQ(s1,s2) (strcmp (s1, s2) == 0)
+#define STRCASEEQ(s1,s2) (strcasecmp (s1, s2) == 0)
+#define STRNCASEEQ(s1,s2,n) (strncasecmp (s1, s2, n) == 0)
+
+/* We don't need anything fancy. If we did need something fancy, gnulib
+ has it. */
+#ifdef MIN
+#undef MIN
+#endif
+#define MIN(a,b) ((a) < (b) ? (a) : (b))
+#ifdef MAX
+#undef MAX
+#endif
+#define MAX(a,b) ((a) > (b) ? (a) : (b))
+
+#ifdef DMALLOC_DEBUG
+#define DMALLOC_FUNC_CHECK
+#include "dmalloc.h"
+#endif
+
+#endif /* TEXINFO_SYSTEM_H */
diff --git a/util/Makefile.am b/util/Makefile.am
new file mode 100644
index 0000000..fec2df9
--- /dev/null
+++ b/util/Makefile.am
@@ -0,0 +1,62 @@
+# $Id: Makefile.am,v 1.34 2008/03/25 10:51:20 akim Exp $
+# Makefile.am for texinfo/util.
+# Run automake in .. to produce Makefile.in from this.
+#
+# This file is free software; as a special exception the author 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.
+
+bin_PROGRAMS = texindex
+bin_SCRIPTS = texi2dvi texi2pdf pdftexi2dvi
+
+# for auctex.
+pdftexi2dvi: texi2pdf
+ cp -f $(srcdir)/texi2pdf $@
+
+localedir = $(datadir)/locale
+AM_CPPFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/gnulib/lib \
+ -I$(top_builddir)/gnulib/lib \
+ -DLOCALEDIR=\"$(localedir)\"
+LDADD = ../lib/libtxi.a $(top_builddir)/gnulib/lib/libgnu.a $(LIBINTL)
+
+dist_pkgdata_DATA = texinfo.dtd texinfo.xsl
+pkgdata_DATA = texinfo.cat
+
+# we don't actually use version.texi in the rule, but it's one way of
+# noticing when the version changes.
+texinfo.cat: texinfo-cat.in $(top_srcdir)/doc/version.texi
+ sed 's/__VERSION__/@VERSION@/g' $(srcdir)/texinfo-cat.in >$@
+
+# Most of these are for fun. The only official/installed ones are the
+# *texi2* scripts.
+#
+EXTRA_DIST = README deref.c dir-example fix-info-dir fixfonts \
+ fixref.gawk gdoc gen-dir-node gendocs.sh gendocs_template infosrch \
+ install-info-html outline.gawk pdftexi2dvi \
+ prepinfo.awk tex3patch texi-docstring-magic.el texi2dvi texi2pdf txitextest \
+ $(dist_pkgdata_DATA) texinfo-cat.in
+CLEANFILES = $(pkgdata_DATA)
+
+
+# Let's not stress people's TeX installations, etc.
+if MAINTAINER_MODE
+TESTS = \
+bibtex.test \
+dvipdf.test \
+latex2html.test \
+local.test \
+texi2dvi.test
+
+EXTRA_DIST += $(TESTS)
+
+# Each test case depends on defs.
+check_SCRIPTS = defs
+distclean-local:
+ -rm -rf testSubDir
+endif
diff --git a/util/Makefile.in b/util/Makefile.in
new file mode 100644
index 0000000..fd17739
--- /dev/null
+++ b/util/Makefile.in
@@ -0,0 +1,882 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008 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@
+
+# $Id: Makefile.am,v 1.34 2008/03/25 10:51:20 akim Exp $
+# Makefile.am for texinfo/util.
+# Run automake in .. to produce Makefile.in from this.
+#
+# This file is free software; as a special exception the author 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@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@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 = texindex$(EXEEXT)
+@MAINTAINER_MODE_TRUE@am__append_1 = $(TESTS)
+subdir = util
+DIST_COMMON = README $(dist_pkgdata_DATA) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(srcdir)/defs.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/gnulib/m4/alloca.m4 \
+ $(top_srcdir)/gnulib/m4/argz.m4 \
+ $(top_srcdir)/gnulib/m4/codeset.m4 \
+ $(top_srcdir)/gnulib/m4/eealloc.m4 \
+ $(top_srcdir)/gnulib/m4/environ.m4 \
+ $(top_srcdir)/gnulib/m4/error.m4 \
+ $(top_srcdir)/gnulib/m4/exitfail.m4 \
+ $(top_srcdir)/gnulib/m4/extensions.m4 \
+ $(top_srcdir)/gnulib/m4/getopt.m4 \
+ $(top_srcdir)/gnulib/m4/gettext.m4 \
+ $(top_srcdir)/gnulib/m4/gettimeofday.m4 \
+ $(top_srcdir)/gnulib/m4/glibc21.m4 \
+ $(top_srcdir)/gnulib/m4/gnulib-common.m4 \
+ $(top_srcdir)/gnulib/m4/gnulib-comp.m4 \
+ $(top_srcdir)/gnulib/m4/iconv.m4 \
+ $(top_srcdir)/gnulib/m4/include_next.m4 \
+ $(top_srcdir)/gnulib/m4/inline.m4 \
+ $(top_srcdir)/gnulib/m4/intlmacosx.m4 \
+ $(top_srcdir)/gnulib/m4/lib-ld.m4 \
+ $(top_srcdir)/gnulib/m4/lib-link.m4 \
+ $(top_srcdir)/gnulib/m4/lib-prefix.m4 \
+ $(top_srcdir)/gnulib/m4/localcharset.m4 \
+ $(top_srcdir)/gnulib/m4/longlong.m4 \
+ $(top_srcdir)/gnulib/m4/malloc.m4 \
+ $(top_srcdir)/gnulib/m4/malloca.m4 \
+ $(top_srcdir)/gnulib/m4/mbchar.m4 \
+ $(top_srcdir)/gnulib/m4/mbiter.m4 \
+ $(top_srcdir)/gnulib/m4/mbrtowc.m4 \
+ $(top_srcdir)/gnulib/m4/mbscasecmp.m4 \
+ $(top_srcdir)/gnulib/m4/mbschr.m4 \
+ $(top_srcdir)/gnulib/m4/mbslen.m4 \
+ $(top_srcdir)/gnulib/m4/mbsncasecmp.m4 \
+ $(top_srcdir)/gnulib/m4/mbsstr.m4 \
+ $(top_srcdir)/gnulib/m4/mbstate_t.m4 \
+ $(top_srcdir)/gnulib/m4/mbswidth.m4 \
+ $(top_srcdir)/gnulib/m4/memchr.m4 \
+ $(top_srcdir)/gnulib/m4/memcmp.m4 \
+ $(top_srcdir)/gnulib/m4/memcpy.m4 \
+ $(top_srcdir)/gnulib/m4/memmem.m4 \
+ $(top_srcdir)/gnulib/m4/memmove.m4 \
+ $(top_srcdir)/gnulib/m4/mempcpy.m4 \
+ $(top_srcdir)/gnulib/m4/mkstemp.m4 \
+ $(top_srcdir)/gnulib/m4/nls.m4 \
+ $(top_srcdir)/gnulib/m4/onceonly.m4 \
+ $(top_srcdir)/gnulib/m4/po.m4 \
+ $(top_srcdir)/gnulib/m4/progtest.m4 \
+ $(top_srcdir)/gnulib/m4/setenv.m4 \
+ $(top_srcdir)/gnulib/m4/stdbool.m4 \
+ $(top_srcdir)/gnulib/m4/stdint.m4 \
+ $(top_srcdir)/gnulib/m4/stdlib_h.m4 \
+ $(top_srcdir)/gnulib/m4/stpcpy.m4 \
+ $(top_srcdir)/gnulib/m4/strdup.m4 \
+ $(top_srcdir)/gnulib/m4/strerror.m4 \
+ $(top_srcdir)/gnulib/m4/string_h.m4 \
+ $(top_srcdir)/gnulib/m4/strndup.m4 \
+ $(top_srcdir)/gnulib/m4/strnlen.m4 \
+ $(top_srcdir)/gnulib/m4/sys_stat_h.m4 \
+ $(top_srcdir)/gnulib/m4/sys_time_h.m4 \
+ $(top_srcdir)/gnulib/m4/tempname.m4 \
+ $(top_srcdir)/gnulib/m4/unistd_h.m4 \
+ $(top_srcdir)/gnulib/m4/wchar.m4 \
+ $(top_srcdir)/gnulib/m4/wchar_t.m4 \
+ $(top_srcdir)/gnulib/m4/wctype.m4 \
+ $(top_srcdir)/gnulib/m4/wcwidth.m4 \
+ $(top_srcdir)/gnulib/m4/wint_t.m4 \
+ $(top_srcdir)/gnulib/m4/xalloc.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 = defs
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" \
+ "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(pkgdatadir)"
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS)
+texindex_SOURCES = texindex.c
+texindex_OBJECTS = texindex.$(OBJEXT)
+texindex_LDADD = $(LDADD)
+am__DEPENDENCIES_1 =
+texindex_DEPENDENCIES = ../lib/libtxi.a \
+ $(top_builddir)/gnulib/lib/libgnu.a $(am__DEPENDENCIES_1)
+binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
+SCRIPTS = $(bin_SCRIPTS)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = texindex.c
+DIST_SOURCES = texindex.c
+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 = `echo $$p | sed -e 's|^.*/||'`;
+dist_pkgdataDATA_INSTALL = $(INSTALL_DATA)
+pkgdataDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(dist_pkgdata_DATA) $(pkgdata_DATA)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+ARGZ_H = @ARGZ_H@
+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@
+GETOPT_H = @GETOPT_H@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_DUP2 = @GNULIB_DUP2@
+GNULIB_ENVIRON = @GNULIB_ENVIRON@
+GNULIB_FCHDIR = @GNULIB_FCHDIR@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+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_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRSEP = @GNULIB_STRSEP@
+GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
+GNULIB_STRSTR = @GNULIB_STRSTR@
+GNULIB_STRTOD = @GNULIB_STRTOD@
+GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
+GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GREP = @GREP@
+HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR = @HAVE_DECL_STRERROR@
+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_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SETENV = @HAVE_SETENV@
+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_SLEEP = @HAVE_SLEEP@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRNDUP = @HAVE_STRNDUP@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNSETENV = @HAVE_UNSETENV@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE__BOOL = @HAVE__BOOL@
+HELP2MAN = @HELP2MAN@
+HEVEA = @HEVEA@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LDFLAGS = @LDFLAGS@
+LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@
+LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_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_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_FCHDIR = @REPLACE_FCHDIR@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+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@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYS_STAT_H = @SYS_STAT_H@
+SYS_TIME_H = @SYS_TIME_H@
+TERMLIBS = @TERMLIBS@
+TEX = @TEX@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+VOID_UNSETENV = @VOID_UNSETENV@
+WCHAR_H = @WCHAR_H@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WCTYPE_H = @WCTYPE_H@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+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@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_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@
+localedir = $(datadir)/locale
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+native_tools = @native_tools@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+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@
+bin_SCRIPTS = texi2dvi texi2pdf pdftexi2dvi
+AM_CPPFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/gnulib/lib \
+ -I$(top_builddir)/gnulib/lib \
+ -DLOCALEDIR=\"$(localedir)\"
+
+LDADD = ../lib/libtxi.a $(top_builddir)/gnulib/lib/libgnu.a $(LIBINTL)
+dist_pkgdata_DATA = texinfo.dtd texinfo.xsl
+pkgdata_DATA = texinfo.cat
+
+# Most of these are for fun. The only official/installed ones are the
+# *texi2* scripts.
+#
+EXTRA_DIST = README deref.c dir-example fix-info-dir fixfonts \
+ fixref.gawk gdoc gen-dir-node gendocs.sh gendocs_template \
+ infosrch install-info-html outline.gawk pdftexi2dvi \
+ prepinfo.awk tex3patch texi-docstring-magic.el texi2dvi \
+ texi2pdf txitextest $(dist_pkgdata_DATA) texinfo-cat.in \
+ $(am__append_1)
+CLEANFILES = $(pkgdata_DATA)
+
+# Let's not stress people's TeX installations, etc.
+@MAINTAINER_MODE_TRUE@TESTS = \
+@MAINTAINER_MODE_TRUE@bibtex.test \
+@MAINTAINER_MODE_TRUE@dvipdf.test \
+@MAINTAINER_MODE_TRUE@latex2html.test \
+@MAINTAINER_MODE_TRUE@local.test \
+@MAINTAINER_MODE_TRUE@texi2dvi.test
+
+
+# Each test case depends on defs.
+@MAINTAINER_MODE_TRUE@check_SCRIPTS = defs
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu util/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu util/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+defs: $(top_builddir)/config.status $(srcdir)/defs.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ if test -f $$p \
+ ; then \
+ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+ $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+ else :; fi; \
+ done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+ rm -f "$(DESTDIR)$(bindir)/$$f"; \
+ done
+
+clean-binPROGRAMS:
+ -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+texindex$(EXEEXT): $(texindex_OBJECTS) $(texindex_DEPENDENCIES)
+ @rm -f texindex$(EXEEXT)
+ $(LINK) $(texindex_OBJECTS) $(texindex_LDADD) $(LIBS)
+install-binSCRIPTS: $(bin_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+ @list='$(bin_SCRIPTS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f $$d$$p; then \
+ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+ echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+ $(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \
+ else :; fi; \
+ done
+
+uninstall-binSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_SCRIPTS)'; for p in $$list; do \
+ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+ rm -f "$(DESTDIR)$(bindir)/$$f"; \
+ done
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/texindex.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+install-dist_pkgdataDATA: $(dist_pkgdata_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)"
+ @list='$(dist_pkgdata_DATA)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(am__strip_dir) \
+ echo " $(dist_pkgdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgdatadir)/$$f'"; \
+ $(dist_pkgdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgdatadir)/$$f"; \
+ done
+
+uninstall-dist_pkgdataDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(dist_pkgdata_DATA)'; for p in $$list; do \
+ f=$(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(pkgdatadir)/$$f'"; \
+ rm -f "$(DESTDIR)$(pkgdatadir)/$$f"; \
+ done
+install-pkgdataDATA: $(pkgdata_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)"
+ @list='$(pkgdata_DATA)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(am__strip_dir) \
+ echo " $(pkgdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgdatadir)/$$f'"; \
+ $(pkgdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgdatadir)/$$f"; \
+ done
+
+uninstall-pkgdataDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkgdata_DATA)'; for p in $$list; do \
+ f=$(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(pkgdatadir)/$$f'"; \
+ rm -f "$(DESTDIR)$(pkgdatadir)/$$f"; \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; ws='[ ]'; \
+ srcdir=$(srcdir); export srcdir; \
+ list=' $(TESTS) '; \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *$$ws$$tst$$ws*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ echo "XPASS: $$tst"; \
+ ;; \
+ *) \
+ echo "PASS: $$tst"; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *$$ws$$tst$$ws*) \
+ xfail=`expr $$xfail + 1`; \
+ echo "XFAIL: $$tst"; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ echo "FAIL: $$tst"; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ echo "SKIP: $$tst"; \
+ fi; \
+ done; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="All $$all tests passed"; \
+ else \
+ banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all tests failed"; \
+ else \
+ banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ skipped="($$skip tests were not run)"; \
+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ echo "$$dashes"; \
+ echo "$$banner"; \
+ test -z "$$skipped" || echo "$$skipped"; \
+ test -z "$$report" || echo "$$report"; \
+ echo "$$dashes"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
+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 $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$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
+ $(MAKE) $(AM_MAKEFLAGS) $(check_SCRIPTS)
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(PROGRAMS) $(SCRIPTS) $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(pkgdatadir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+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:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+@MAINTAINER_MODE_FALSE@distclean-local:
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-local distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-dist_pkgdataDATA install-pkgdataDATA
+
+install-dvi: install-dvi-am
+
+install-exec-am: install-binPROGRAMS install-binSCRIPTS
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \
+ uninstall-dist_pkgdataDATA uninstall-pkgdataDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+ clean-binPROGRAMS clean-generic ctags distclean \
+ distclean-compile distclean-generic distclean-local \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-binPROGRAMS install-binSCRIPTS \
+ install-data install-data-am install-dist_pkgdataDATA \
+ 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-pkgdataDATA \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+ uninstall-am uninstall-binPROGRAMS uninstall-binSCRIPTS \
+ uninstall-dist_pkgdataDATA uninstall-pkgdataDATA
+
+
+# for auctex.
+pdftexi2dvi: texi2pdf
+ cp -f $(srcdir)/texi2pdf $@
+
+# we don't actually use version.texi in the rule, but it's one way of
+# noticing when the version changes.
+texinfo.cat: texinfo-cat.in $(top_srcdir)/doc/version.texi
+ sed 's/__VERSION__/@VERSION@/g' $(srcdir)/texinfo-cat.in >$@
+@MAINTAINER_MODE_TRUE@distclean-local:
+@MAINTAINER_MODE_TRUE@ -rm -rf testSubDir
+# 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/util/README b/util/README
new file mode 100644
index 0000000..8ed7b07
--- /dev/null
+++ b/util/README
@@ -0,0 +1,13 @@
+$Id: README,v 1.6 2008/01/02 01:36:32 karl Exp $
+texinfo/util/README
+
+ Copyright (C) 2002, 2008 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.
+
+Assorted Texinfo-related files.
+
+texindex, texi2dvi, texi2pdf, pdftexi2dvi, and the XML stuff get installed.
+The other items here are for your amusement and/or hacking pleasure.
diff --git a/util/bibtex.test b/util/bibtex.test
new file mode 100755
index 0000000..0bb29a0
--- /dev/null
+++ b/util/bibtex.test
@@ -0,0 +1,57 @@
+#! /bin/sh
+# Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+#
+# This file is part of GNU Texinfo.
+#
+# GNU Texinfo is free software; you can redistribute it and/or modify
+# 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 Texinfo is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+required='hevea'
+
+. ./defs || exit 1
+
+set -e
+
+create_input_tex <<EOF
+\cite{texinfo.doc}
+\bibliographystyle{plain}
+\bibliography{sample}
+EOF
+
+cat >sample.bib <<EOF
+@misc{texinfo.doc,
+ title = "{GNU Texinfo}: The {GNU} documentation format",
+ author = "Robert J. Chassell and Richard M. Stallman",
+ year = "1988"
+}
+EOF
+
+
+# check HTML|INFO|TEXT|DVI|PDF
+# ----------------------------
+check ()
+{
+ out=$1
+ # Testing the local build mode.
+ TEXI2DVI_pass --$out --batch --tidy input.tex
+ # There should only be the DVI and the TEXI file.
+ assert_files input.$out input.tex sample.bib input.t2d
+ cp input.$out /tmp/foo
+ rm input.$out
+}
+
+# Currently we don't use bibtex with hevea. This is to be fixed.
+for out in dvi pdf # html info text
+do
+ check $out
+done
diff --git a/util/defs.in b/util/defs.in
new file mode 100644
index 0000000..f70b1e7
--- /dev/null
+++ b/util/defs.in
@@ -0,0 +1,364 @@
+# -*- shell-script -*-
+# @configure_input@
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+#
+# (This file was originally part of GNU Automake.)
+#
+# 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/>.
+
+# Defines for Automake testing environment.
+# Tom Tromey <tromey@cygnus.com>
+
+# Be Bourne compatible.
+# (Snippet copied from configure's initialization in Autoconf 2.57.)
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+fi
+
+# Ensure we are running from the right directory.
+test -f ./defs || {
+ echo "defs: not found in current directory" 1>&2
+ exit 1
+}
+
+# If srcdir is not set, then we are not running from `make check', be verbose.
+if test -z "$srcdir"; then
+ VERBOSE=x
+ # compute $srcdir.
+ srcdir=`echo "$0" | sed -e 's,/[^\\/]*$,,'`
+ test $srcdir = $0 && srcdir=.
+fi
+
+# Ensure $srcdir is set correctly.
+test -f $srcdir/defs.in || {
+ echo "$srcdir/defs.in not found, check \$srcdir" 1>&2
+ exit 1
+}
+
+me=`echo "$0" | sed -e 's,.*[\\/],,;s/\.test$//'`
+
+# See how redirections should work. User can set VERBOSE to see all
+# output.
+test -z "$VERBOSE" && {
+ exec > /dev/null 2>&1
+}
+
+# Make sure we override the user shell.
+SHELL='@SHELL@'
+export SHELL
+
+srcdir_abs=`cd $srcdir && pwd`
+test -z "$TEXI2DVI" && TEXI2DVI=$srcdir_abs/texi2dvi
+
+# be sure we use texi2dvi and texindex from our own directory, not
+# whatever happens to be in the path.
+echo "defs: prepending $srcdir_abs to PATH for testing."
+PATH="@abs_builddir@:@abs_srcdir@:$PATH"
+
+# Some shells forget to export modified environment variables.
+# (See note about `export' in the Autoconf manual.)
+export PATH
+
+# User can override various tools used.
+test -z "$PERL" && PERL='@PERL@'
+
+if test -n "$required"
+then
+ for tool in $required
+ do
+ # Check that each required tool is present.
+ case $tool in
+ hevea)
+ # HeVeA supports -version only. Use configure to find it.
+ test -n "@HEVEA@" || exit 77
+ ;;
+ tex)
+ # No all versions of Tex support `--version', so we use
+ # a configure check.
+ test -n "@TEX@" || exit 77
+ ;;
+ # Generic case: the tool must support --version.
+ *)
+ echo "$me: running $tool --version"
+ ( $tool --version ) || exit 77
+ ;;
+ esac
+ done
+fi
+
+
+# Always use an absolute srcdir. Otherwise symlinks made in subdirs
+# of the test dir just won't work.
+case "$srcdir" in
+ [\\/]* | ?:[\\/]*)
+ ;;
+
+ *)
+ srcdir=`CDPATH=: && cd "$srcdir" && pwd`
+ ;;
+esac
+
+chmod -R a+rwx testSubDir > /dev/null 2>&1
+rm -rf testSubDir > /dev/null 2>&1
+mkdir testSubDir
+
+# Copy in some files we need.
+cp $srcdir/../doc/texinfo.tex testSubDir || exit 1
+
+cd ./testSubDir
+
+
+# Unset the user's envvars that might change the behavior.
+unset TEXI2DVI_BUILD_MODE
+unset TEXI2DVI_BUILD_DIRECTORY
+
+echo "=== Running test $0"
+
+# POSIX no longer requires 'egrep' and 'fgrep',
+# but some hosts lack 'grep -E' and 'grep -F'.
+EGREP='@EGREP@'
+FGREP='@FGREP@'
+
+# The amount we should wait after modifying files depends on the platform.
+# For instance, Windows '95, '98 and ME have 2-second granularity
+# and can be up to 3 seconds in the future w.r.t. the system clock.
+sleep='sleep @MODIFICATION_DELAY@'
+
+# The tests call `make -e' but we do not want $srcdir from the environment
+# to override the definition from the Makefile.
+testsrcdir=$srcdir
+unset srcdir
+
+
+# create_input_texi < INPUT
+# -------------------------
+# Create input.texi adding stdin inside a default prologue/epilogue
+create_input_texi ()
+{
+ {
+ cat << END
+\input texinfo @c -*-texinfo-*-
+@setfilename input
+@settitle input
+
+@ifnottex
+@node Top
+@top input
+@end ifnottex
+
+END
+ cat
+ cat << END
+@bye
+END
+ } >input.texi
+}
+
+
+# create_input_tex < INPUT
+# ------------------------
+# Create input.tex adding stdin inside a default prologue/epilogue
+create_input_tex ()
+{
+ {
+ cat << END
+\documentclass{article}
+
+\begin{document}
+END
+ cat
+ cat << END
+\end{document}
+END
+ } >input.tex
+}
+
+
+# TEXI2DVI_run status [options...]
+# --------------------------------
+# Run texi2dvi with OPTIONS, and fail if does not exit with STATUS.
+TEXI2DVI_run ()
+{
+ expected_exitcode=$1
+ shift
+ exitcode=0
+ if test -n "$VERBOSE"; then
+ set x --debug --verbose ${1+"$@"}
+ shift
+ fi
+ texi2dvi ${1+"$@"} 2>stderr >stdout || exitcode=$?
+ cat stderr
+ cat stdout
+ test $exitcode = $expected_exitcode || exit 1
+}
+
+
+# TEXI2DVI_fail [options...]
+# ---------------------------
+# Run texi2dvi with OPTIONS, and fail if does not exit with failure.
+TEXI2DVI_fail ()
+{
+ TEXI2DVI_run 1 ${1+"$@"}
+}
+
+
+# TEXI2DVI_pass [options...]
+# ---------------------------
+# Run texi2dvi with OPTIONS, and fail if does not exit with failure.
+TEXI2DVI_pass ()
+{
+ TEXI2DVI_run 0 ${1+"$@"}
+}
+
+
+# optionset_get N OPTIONSET<1> -- OPTIONSET<2> -- ...
+# ---------------------------------------------------
+# Return OPTIONSET<N>
+optionset_get ()
+{
+ n=$1
+ shift
+ # Find the optionset.
+ while test $n != 1; do
+ case $1 in
+ --) n=`expr $n - 1`;;
+ esac
+ shift
+ done
+ # Return the optionset.
+ while true; do
+ case $#:$1 in
+ 0:) break;;
+ *:--) shift; break;;
+ *) echo "$1"; shift;;
+ esac
+ done
+}
+
+# list_files ()
+# -------------
+# Return the sorted list of files in this directory, except the "invisible" ones.
+list_files ()
+{
+ for f in *
+ do
+ case $f in
+ texinfo.tex | stdout | stderr | ls.expected | ls.value );;
+ *) echo $f;;
+ esac
+ done | sort
+}
+
+
+# assert_files (EXPECTED-FILES)
+# -----------------------------
+# Only those files are valid in the current directory.
+assert_files ()
+{
+ if test -n "$VERBOSE"; then
+ ls
+ fi
+ list_files > ls.value
+ echo "$*" | tr ' ' '\n' | sort > ls.expected
+ diff -u ls.expected ls.value
+}
+
+
+# assert_and_remove_files (EXPECTED-FILES)
+# ----------------------------------------
+# Only those files are valid in the current directory. Remove them
+# afterwards.
+assert_and_remove_files ()
+{
+ assert_files "$@"
+ rm -rf "$@"
+}
+
+
+# title TITLE...
+# --------------
+# Make a huge title to ease the reading of the output.
+title ()
+{
+ (
+ set +x
+ echo " $@ " | sed -e 's/./=/g'
+ echo " $@ "
+ echo " $@ " | sed -e 's/./=/g'
+ )
+}
+
+# $latex_paragraph
+# ----------------
+# Some lengthy LaTeX.
+# grep -E '^[a-zA-Z]+$' /usr/share/dict/words | sed 200q | pr --page-width=76 --column=5 --omit-header
+latex_paragraph='
+A Acrux Aegean Ahmad Albany
+AOL Actaeon Aelfric Ahmadabad Albee
+Aachen Acton Aeneas Ahmed Alberio
+Aaliyah Acts Aeneid Ahriman Albert
+Aaron Acuff Aeolus Aida Alberta
+Abbas Ada Aeroflot Aiken Alberto
+Abbasid Adam Aeschylus Aileen Albigensian
+Abbott Adams Aesculapius Aimee Albion
+Abby Adan Aesop Ainu Albireo
+Abdul Adana Afghan Airedale Albuquerque
+Abe Adar Afghanistan Airedales Alcatraz
+Abel Addams Afghans Aisha Alcestis
+Abelard Adderley Africa Ajax Alcibiades
+Abelson Addie African Akbar Alcmena
+Aberdeen Addison Africans Akhmatova Alcoa
+Abernathy Adela Afrikaans Akihito Alcott
+Abidjan Adelaide Afrikaner Akita Alcuin
+Abigail Adele Afrikaners Akkad Alcyone
+Abilene Adeline Afro Akron Aldan
+Abner Aden Afrocentrism Al Aldebaran
+Abraham Adenauer Afros Ala Alden
+Abram Adhara Ag Alabama Alderamin
+Abrams Adidas Agamemnon Alabaman Aldo
+Absalom Adirondack Agassi Alabamans Aldrin
+Abuja Adirondacks Agassiz Alabamian Alec
+Abyssinia Adkins Agatha Alabamians Aleichem
+Abyssinian Adler Aggie Aladdin Alejandra
+Ac Adolf Aglaia Alamo Alejandro
+Acadia Adolfo Agnes Alamogordo Alembert
+Acapulco Adolph Agnew Alan Aleppo
+Accra Adonis Agni Alana Aleut
+Acevedo Adonises Agra Alar Aleutian
+Achaean Adrian Agricola Alaric Alex
+Achebe Adriana Agrippa Alaska Alexander
+Achernar Adriatic Agrippina Alaskan Alexandra
+Acheson Adrienne Aguilar Alaskans Alexandria
+Achilles Advent Aguinaldo Alba Alexei
+Aconcagua Adventist Aguirre Albania Alexis
+Acosta Advents Agustin Albanian Alfonso
+Acropolis Advil Ahab Albanians Alfonzo
+'
+
+
+# Turn on shell traces when VERBOSE is set.
+if test -n "$VERBOSE"; then
+ set -x
+else
+ :
+fi
+pwd
diff --git a/util/deref.c b/util/deref.c
new file mode 100644
index 0000000..98e8ce0
--- /dev/null
+++ b/util/deref.c
@@ -0,0 +1,208 @@
+/*
+ * deref.c
+ *
+ * Make all texinfo references into the one argument form.
+ *
+ * Arnold Robbins
+ * arnold@gnu.org
+ * Written: December, 1991
+ * Released: November, 1998
+ *
+ * Copyright 1991, 1998 Arnold David Robbins
+ *
+ * DEREF is free software; you can redistribute it and/or modify
+ * 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.
+ *
+ * DEREF is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * LIMITATIONS:
+ * One texinfo cross reference per line.
+ * Cross references may not cross newlines.
+ * Use of fgets for input (to be fixed).
+ */
+
+#include <stdio.h>
+#include <ctype.h>
+#include <errno.h>
+
+/* for gcc on the 3B1, delete if this gives you grief */
+extern int fclose(FILE *fp);
+extern int fprintf(FILE *fp, const char *str, ...);
+/* extern int sprintf(char *str, const char *fmt, ...); */
+extern int fputs(char *buf, FILE *fp);
+
+extern char *strerror(int errno);
+extern char *strchr(char *cp, int ch);
+extern int strncmp(const char *s1, const char *s2, int count);
+
+extern int errno;
+
+void process(FILE *fp);
+void repair(char *line, char *ref, int toffset);
+
+int Errs = 0;
+char *Name = "stdin";
+int Line = 0;
+char *Me;
+
+/* main --- handle arguments, global vars for errors */
+
+int
+main(int argc, char **argv)
+{
+ FILE *fp;
+
+ Me = argv[0];
+
+ if (argc == 1)
+ process(stdin);
+ else
+ for (argc--, argv++; *argv != NULL; argc--, argv++) {
+ if (argv[0][0] == '-' && argv[0][1] == '\0') {
+ Name = "stdin";
+ Line = 0;
+ process(stdin);
+ } else if ((fp = fopen(*argv, "r")) != NULL) {
+ Name = *argv;
+ Line = 0;
+ process(fp);
+ fclose(fp);
+ } else {
+ fprintf(stderr, "%s: can not open: %s\n",
+ *argv, strerror(errno));
+ Errs++;
+ }
+ }
+ return Errs != 0;
+}
+
+/* isref --- decide if we've seen a texinfo cross reference */
+
+int
+isref(char *cp)
+{
+ if (strncmp(cp, "@ref{", 5) == 0)
+ return 5;
+ if (strncmp(cp, "@xref{", 6) == 0)
+ return 6;
+ if (strncmp(cp, "@pxref{", 7) == 0)
+ return 7;
+ return 0;
+}
+
+/* process --- read files, look for references, fix them up */
+
+void
+process(FILE *fp)
+{
+ char buf[BUFSIZ];
+ char *cp;
+ int count;
+
+ while (fgets(buf, sizeof buf, fp) != NULL) {
+ Line++;
+ cp = strchr(buf, '@');
+ if (cp == NULL) {
+ fputs(buf, stdout);
+ continue;
+ }
+ do {
+ count = isref(cp);
+ if (count == 0) {
+ cp++;
+ cp = strchr(cp, '@');
+ if (cp == NULL) {
+ fputs(buf, stdout);
+ goto next;
+ }
+ continue;
+ }
+ /* got one */
+ repair(buf, cp, count);
+ break;
+ } while (cp != NULL);
+ next: ;
+ }
+}
+
+/* repair --- turn all texinfo cross references into the one argument form */
+
+void
+repair(char *line, char *ref, int toffset)
+{
+ int braces = 1; /* have seen first left brace */
+ char *cp;
+
+ ref += toffset;
+
+ /* output line up to and including left brace in reference */
+ for (cp = line; cp <= ref; cp++)
+ putchar(*cp);
+
+ /* output node name */
+ for (; *cp && *cp != '}' && *cp != ',' && *cp != '\n'; cp++)
+ putchar(*cp);
+
+ if (*cp != '}') { /* could have been one arg xref */
+ /* skip to matching right brace */
+ for (; braces > 0; cp++) {
+ switch (*cp) {
+ case '@':
+ cp++; /* blindly skip next character */
+ break;
+ case '{':
+ braces++;
+ break;
+ case '}':
+ braces--;
+ break;
+ case '\n':
+ case '\0':
+ Errs++;
+ fprintf(stderr,
+ "%s: %s: %d: mismatched braces\n",
+ Me, Name, Line);
+ goto out;
+ default:
+ break;
+ }
+ }
+ out:
+ ;
+ }
+
+ putchar('}');
+ if (*cp == '}')
+ cp++;
+
+ /* now the rest of the line */
+ for (; *cp; cp++)
+ putchar(*cp);
+ return;
+}
+
+/* strerror --- return error string, delete if in your library */
+
+char *
+strerror(int errno)
+{
+ static char buf[100];
+ extern int sys_nerr;
+ extern char *sys_errlist[];
+
+ if (errno < sys_nerr && errno >= 0)
+ return sys_errlist[errno];
+
+ sprintf(buf, "unknown error %d", errno);
+ return buf;
+}
diff --git a/util/dir-example b/util/dir-example
new file mode 100644
index 0000000..eac9490
--- /dev/null
+++ b/util/dir-example
@@ -0,0 +1,494 @@
+This is the directory file `dir' a.k.a. `DIR', which contains the
+ topmost node of the Info hierarchy.
+This particular dir file is merely made available for your hacking
+ pleasure, not official or standard in any way. If it doesn't make sense
+ to you, or you don't like it, ignore it.
+rms suggested that we follow the categories of the Free Software
+ Directory (http://www.gnu.org/directory/) where possible. Since
+ capitalization in the directory is random, I've chosen to use
+ `minimum' capitals, just the first word and proper nouns.
+If you have dir entries for Texinfo manuals you'd like to be added here,
+ please send them to karl@gnu.org.
+
+$Id: dir-example,v 1.77 2008/03/25 15:09:14 karl Exp $
+
+File: dir, Node: Top, This is the top of the INFO tree.
+
+This is the Info main menu (aka directory node).
+A few useful Info commands:
+
+ `q' quits;
+ `?' lists all Info commands;
+ `h' starts the Info tutorial;
+ `mTexinfo RET' visits the Texinfo manual, etc.
+
+Not all of the topics shown below may be available on this system.
+
+* Menu:
+
+Basics
+* Bash: (bash). The GNU Bourne-Again SHell.
+* BC: (bc). Arbitrary precision calculator language.
+* Common options: (coreutils)Common options. Common options.
+* Coreutils: (coreutils). Core GNU (file, text, shell) utilities.
+* DC: (dc). Postfix desk calculator.
+* Date input formats: (coreutils)Date input formats.
+* Ed: (ed). The GNU line editor.
+* File permissions: (coreutils)File permissions. Access modes.
+* Finding files: (find). Operating on files matching certain criteria.
+* Gcal: (gcal). GNU calendar program.
+* Hello: (hello). Hello, GNU world.
+* Time: (time). Measuring program resource usage.
+
+Text creation and manipulation
+* Diffutils: (diff). Comparing and merging files.
+* Gawk: (gawk). A text scanning and processing language.
+* M4: (m4). A powerful macro processor.
+* grep: (grep). Print lines matching a pattern.
+* sed: (sed). Stream EDitor.
+* Wdiff: (wdiff). Word difference finder and related tools.
+
+Texinfo documentation system
+* Info: (info). Documentation browsing system.
+* Texi2HTML: (texi2html). Texinfo to HTML Converter.
+* Texinfo: (texinfo). The GNU documentation format.
+* info standalone: (info-stnd). Standalone Info reader.
+* infokey: (info-stnd)Invoking infokey. Compile Info customizations.
+* install-info: (texinfo)Invoking install-info. Updating info/dir entries.
+* makeinfo: (texinfo)Creating an Info File. Translate Texinfo source.
+* texi2dvi: (texinfo)Format with texi2dvi. Printing Texinfo documentation.
+* texindex: (texinfo)Format with tex/texindex. Sorting Texinfo index files.
+
+Archiving
+* Cpio: (cpio). Copy-in-copy-out archiver to tape or disk.
+* Shar utilities: (sharutils). Shell archiver, uuencode/uudecode.
+* Tar: (tar). Making tape (or disk) archives.
+
+Compression
+* bzip2: (bzip2). General (de)compression of files (blocksort).
+* Gzip: (gzip). General (de)compression of files (lzw).
+
+Email
+* Anubis: (anubis). The GNU outgoing mail processor.
+* Mailutils: (mailutils). Utilities & library for mailboxes, protocols.
+
+Network applications
+* Gawkinet: (gawkinet). TCP/IP Internetworking With `gawk'.
+* Wget: (wget). Non-interactive network downloader.
+
+Printing Tools
+* PreScript: (a2ps) PreScript. Input language for a2ps
+* a2ps: (a2ps). PostScript Generating Utility
+* card: (a2ps) card. Print Reference Cards
+* fixnt: (a2ps) fixnt. Fixing Microsoft NT PostScript Files
+* fixps: (a2ps) fixps. Fixing Some Ill Designed PostScript Files
+* ogonkify: (ogonkify). Ogonkify
+* pdiff: (a2ps) pdiff. Produce Pretty Comparison of Files
+* psmandup: (a2ps) psmandup. Printing Duplex on Simplex Printers
+* psset: (a2ps) psset. Inserting calls to setpagedevice
+
+Software development
+* As: (as). Assembler.
+* Autoconf: (autoconf). Create source code configuration scripts.
+* Automake: (automake). Making GNU standards-compliant Makefiles.
+* Binutils: (binutils). The GNU binary utilities.
+* Cpp: (cpp). The GNU C preprocessor.
+* Cpplib: (cppinternals). Cpplib internals.
+* CVS: (cvs). Concurrent Versions System
+* DejaGnu: (dejagnu). Testing framework.
+* Dmalloc: (dmalloc). Malloc debug library.
+* Gdb: (gdb). The GNU debugger.
+* bison: (bison). GNU parser generator (Yacc replacement).
+* egcs: (egcs). Experimental GNU C compiler.
+* Flex: (flex). A fast scanner generator.
+* g77: (g77). GNU Fortran 77 compiler.
+* Gasp: (gasp). GNU Assembler preprocessor.
+* gcc: (gcc). The GNU Compiler Collection.
+* gccinstall: (gccinstall). Installing the GNU Compiler Collection.
+* gccint: (gccint). Internals of the GNU Compiler Collection.
+* Gnats: (gnats). Cygnus bug tracking system.
+* Gnulib: (gnulib). Source files to share among distributions.
+* Gperf: (gperf). Perfect hash function generator.
+* Gprof: (gprof). Profiler.
+* Guile Reference: (guile). The Guile reference manual.
+* Guile Tutorial: (guile-tut). The Guile Tutorial.
+* ID database: (id-utils). Identifier database utilities.
+* Indent: (indent). Prettyprinter for programs.
+* Ld: (ld). Linker.
+* Libtool: (libtool). Generic library support script.
+* Make: (make). Remake files automatically.
+* Remsync: (remsync). Remote synchronization of directory trees.
+* Send PR: (send-pr). Cygnus bug reporting for Gnats.
+* Source config: (cfg-paper). Some theory on configuring source packages.
+* help2man: (help2man). Automatic manual page generation from -help.
+
+Emacs
+* Ada mode: (ada-mode). The GNU Emacs mode for editing Ada.
+* Autotype: (autotype). Convenient features for text that you enter frequently
+ in Emacs.
+* CC Mode: (ccmode). Emacs mode for editing C, C++, Objective-C,
+ Java, Pike, and IDL code.
+* CL: (cl). Partial Common Lisp support for Emacs Lisp.
+* Dired-X: (dired-x). Dired Extra Features.
+* EUDC: (eudc). A client for directory servers (LDAP, PH)
+* Ebrowse: (ebrowse). A C++ class browser for Emacs.
+* Ediff: (ediff). A visual interface for comparing and merging programs.
+* Emacs: (emacs). The extensible self-documenting text editor.
+* Elisp: (elisp). The Emacs Lisp Reference Manual.
+* Emacs FAQ: (efaq). Frequently Asked Questions about Emacs.
+* Emacs MIME: (emacs-mime). The MIME de/composition library.
+* Eshell: (eshell). A command shell implemented in Emacs Lisp.
+* Forms: (forms). Emacs package for editing data bases
+ by filling in forms.
+* Gnus: (gnus). The newsreader Gnus.
+* IDLWAVE: (idlwave). Major mode and shell for IDL and WAVE/CL files.
+* Intro Elisp: (emacs-lisp-intro). Introduction to Elisp programming.
+
+* AUC TeX: (auctex). Editing (La)TeX files.
+* MH-E: (mh-e). Emacs interface to the MH mail system.
+* Message: (message). Mail and news composition mode that goes with Gnus.
+* PCL-CVS: (pcl-cvs). Emacs front-end to CVS.
+* RefTeX: (reftex). Emacs support for LaTeX cross-references and citations.
+* SC: (sc). Supercite lets you cite parts of messages you're
+ replying to, in flexible ways.
+* Speedbar: (speedbar). File/Tag summarizing utility.
+* TRAMP: (tramp). Transparent Remote Access, Multiple Protocol
+ Emacs remote file access via rsh and rcp.
+* VIP: (vip). An older VI-emulation for Emacs.
+* VIPER: (viper). The newest Emacs VI-emulation mode.
+ (also, A VI Plan for Emacs Rescue or the VI PERil.)
+* VM: (vm). View Mail for Emacs.
+* Widget: (widget). Documenting the "widget" package used by the
+ Emacs Custom facility.
+* WoMan: (woman). Browse UN*X Manual Pages `Wo (without) Man'.
+
+Typesetting
+* Font utilities: (fontu). Programs for font manipulation.
+* Groff: (groff). The GNU troff document formatting system.
+* GV: (gv). The GNU PostScript and PDF viewer.
+
+GNU Gettext Utilities
+* ISO3166: (gettext)Country Codes. ISO 3166 country codes.
+* ISO639: (gettext)Language Codes. ISO 639 language codes.
+* autopoint: (gettext)autopoint Invocation. Copy gettext infrastructure.
+* envsubst: (gettext)envsubst Invocation. Expand environment variables.
+* gettext: (gettext). GNU gettext utilities.
+* gettextize: (gettext)gettextize Invocation. Prepare a package for gettext.
+* msgattrib: (gettext)msgattrib Invocation. Select part of a PO file.
+* msgcat: (gettext)msgcat Invocation. Combine several PO files.
+* msgcmp: (gettext)msgcmp Invocation. Compare a PO file and template.
+* msgcomm: (gettext)msgcomm Invocation. Match two PO files.
+* msgconv: (gettext)msgconv Invocation. Convert PO file to encoding.
+* msgen: (gettext)msgen Invocation. Create an English PO file.
+* msgexec: (gettext)msgexec Invocation. Process a PO file.
+* msgfilter: (gettext)msgfilter Invocation. Pipe a PO file through a filter.
+* msgfmt: (gettext)msgfmt Invocation. Make MO files out of PO files.
+* msggrep: (gettext)msggrep Invocation. Select part of a PO file.
+* msginit: (gettext)msginit Invocation. Create a fresh PO file.
+* msgmerge: (gettext)msgmerge Invocation. Update a PO file from template.
+* msgunfmt: (gettext)msgunfmt Invocation. Uncompile MO file into PO file.
+* msguniq: (gettext)msguniq Invocation. Unify duplicates for PO file.
+* ngettext: (gettext)ngettext Invocation. Translate a message with plural.
+* xgettext: (gettext)xgettext Invocation. Extract strings into a PO file.
+
+Software libraries
+* Annotate: (annotate). High-level GDB to GUI's.
+* Bfd: (bfd). The Binary File Descriptor library.
+* Gdb-Internals: (gdbint). The GNU debugger's internals.
+* GDB library: (libgdb). Application programming interface to GDB.
+* GDBM: (gdbm). Hashed databases.
+* GDK: (gdk). General drawing kit.
+* GTK: (gtk). GIMP toolkit.
+* History: (history). Recall previous lines of input.
+* Ld internals: (ldint). GNU linker internals.
+* Libc: (libc). C library.
+* Mmalloc: (mmalloc). The GNU mapped-malloc package.
+* Stabs: (stabs). The "stabs" debugging information format.
+* Readline: (readline). General command-line interface.
+* Termcap: (termcap). All about /etc/termcap.
+
+C++ libraries
+* Iostream: (iostream). C++ input/output.
+* autosprintf: (autosprintf). Support for printf format strings in C++.
+
+GNU organization
+* Maintain: (maintain). GNU maintainer guidelines.
+* Maintaining Findutils: (find-maint). Maintaining GNU findutils.
+* Standards: (standards). GNU coding standards.
+
+GNU music project
+* LilyPond: (lilypond). The GNU music typesetter.
+* LilyPond internals: (lilypond-internals). LilyPond internals.
+* ly2dvi: (lilypond)Invoking ly2dvi:: Titling LilyPond scores.
+* convert-ly: (lilypond)Invoking convert-ly:: Older LilyPond versions.
+* midi2ly: (lilypond)Invoking midi2ly:: Importing MIDI.
+* etf2ly: (lilypond)Invoking etf2ly:: Importing Finale.
+* abc2ly: (lilypond)Invoking abc2ly:: Importing ABC.
+* pmx2ly: (lilypond)Invoking pmx2ly:: Importing PMX.
+* musedata2ly: (lilypond)Invoking musedata2ly::Importing Musedata.
+* mup2ly: (lilypond)Invoking mup2ly:: Importing MUP.
+
+TeX
+* Afm2tfm: (dvips)Invoking afm2tfm. Making Type 1 fonts available to TeX.
+* Dvips: (dvips). DVI-to-PostScript translator.
+* DVI-to-PNG: (dvipng). DVI to Portable Network Graphics (PNG).
+* Eplain: (eplain). Expanding on plain TeX.
+* Kpathsearch: (kpathsea). File lookup along search paths.
+* LaTeX: (latex2e). LaTeX2e.
+* MakeIndex: (makeindex). Index creation for TeX.
+* Naming TeX fonts: (fontname). Filenames for TeX fonts.
+* TDS: (tds). Standard TeX directory structure.
+* TeXDraw: (texdraw). Drawing PostScript diagrams within TeX.
+* Web2c: (web2c). TeX, Metafont, and their companion programs.
+
+DOS
+* GNUish: (gnuish). GNU utilities for DOS.
+* Mtools: (mtools). Access DOS disks from Unix.
+
+Science
+* R FAQ: (R-FAQ). The R statistical language FAQ.
+
+Other things
+* Jargon: (jargon). The jargon file.
+* Netpbm: (netpbm). Images/graphics manipulation programs.
+* JED: (jed). JED editor documentation.
+* Octave: (octave). Octave - A language for numerical computation.
+* PRCS: (prcs). Project revision control system.
+* Screen: (screen). Terminal multiplexer.
+
+Individual utilities
+* aclocal: (automake)Invoking aclocal. Generating aclocal.m4.
+* addr2line: (binutils)addr2line. Convert addresses to file and line.
+* ar: (binutils)ar. Create, modify, and extract from archives.
+* at-pr: (gnats)at-pr. Bug report timely reminders.
+* autoconf: (autoconf)autoconf Invocation. How to create configuration scripts.
+* autoheader: (autoconf)autoheader Invocation. How to create configuration templates
+* autom4te: (autoconf)autom4te Invocation. The Autoconf executables backbone.
+* automake: (automake)Invoking Automake. Generating Makefile.in.
+* autoreconf: (autoconf)autoreconf Invocation. Remaking multiple `configure' scripts
+* autoscan: (autoconf)autoscan Invocation. Semi-automatic `configure.ac' writing
+* autoupdate: (autoconf)autoupdate Invocation. Automatic update of `configure.ac'
+* awk: (gawk)Invoking gawk. Text scanning and processing.
+* base64: (coreutils)base64 invocation. Base64 encode/decode data.
+* basename: (coreutils)basename invocation. Strip directory and suffix.
+* bibtex: (web2c)BibTeX invocation. Maintaining bibliographies.
+* c++filt: (binutils)c++filt. Filter to demangle encoded C++ symbols.
+* cat: (coreutils)cat invocation. Concatenate and write files.
+* chgrp: (coreutils)chgrp invocation. Change file groups.
+* chmod: (coreutils)chmod invocation. Change file permissions.
+* chown: (coreutils)chown invocation. Change file owners/groups.
+* chroot: (coreutils)chroot invocation. Specify the root directory.
+* cksum: (coreutils)cksum invocation. Print POSIX CRC checksum.
+* cmp: (diff)Invoking cmp. Compare 2 files byte by byte.
+* comm: (coreutils)comm invocation. Compare sorted files by line.
+* comsatd: (mailutils)comsatd. Comsat daemon.
+* config.status: (autoconf)config.status Invocation. Recreating configurations.
+* configure: (autoconf)configure Invocation. Configuring a package.
+* cp: (coreutils)cp invocation. Copy files.
+* csplit: (coreutils)csplit invocation. Split by context.
+* cut: (coreutils)cut invocation. Print selected parts of lines.
+* cvs: (cvs)CVS commands. Concurrent Versions System
+* cvsclient: (cvsclient). The CVS client/server protocol.
+* cxxfilt: (binutils)c++filt. MS-DOS name for c++filt.
+* date: (coreutils)date invocation. Print/set system date and time.
+* dd: (coreutils)dd invocation. Copy and convert a file.
+* df: (coreutils)df invocation. Report file system disk usage.
+* diff3: (diff)Invoking diff3. Compare 3 files line by line.
+* diff: (diff)Invoking diff. Compare 2 files line by line.
+* dir: (coreutils)dir invocation. List directories briefly.
+* dircolors: (coreutils)dircolors invocation. Color setup for ls.
+* dirname: (coreutils)dirname invocation. Strip non-directory suffix.
+* dlltool: (binutils)dlltool. Create files needed to build and use DLLs.
+* dmp: (web2c)Dmp invocation. Troff->MPX (MetaPost pictures).
+* du: (coreutils)du invocation. Report on disk usage.
+* dvicopy: (web2c)DVIcopy invocation. Virtual font expansion
+* dvipng: (dvipng)Invoking dvipng. A DVI-to-PNG translator.
+* dvitomp: (web2c)DVItoMP invocation. DVI to MPX (MetaPost pictures).
+* dvitype: (web2c)DVItype invocation. DVI to human-readable text.
+* echo: (coreutils)echo invocation. Print a line of text.
+* edit-pr: (gnats)Invoking edit-pr. Changing bugs.
+* egrep: (grep)Invoking. grep -E.
+* env: (coreutils)env invocation. Modify the environment.
+* expand: (coreutils)expand invocation. Convert tabs to spaces.
+* expr: (coreutils)expr invocation. Evaluate expressions.
+* factor: (coreutils)factor invocation. Print prime factors
+* false: (coreutils)false invocation. Do nothing, unsuccessfully.
+* fgrep: (fgrep)Invoking. grep -F.
+* fid: (id-utils)fid invocation. Listing a file's tokens.
+* file-pr: (gnats)file-pr. Processing incoming traffic.
+* find: (find)Invoking find. Finding and acting on files.
+* fmt: (coreutils)fmt invocation. Reformat paragraph text.
+* fnid: (id-utils)fnid invocation. Looking up file names.
+* fold: (coreutils)fold invocation. Wrap long input lines.
+* frm: (mailutils)frm. List headers from a mailbox.
+* ftp: (inetutils)ftp invocation. File Transfer Protocol.
+* ftpd: (inetutils)ftpd invocation. FTP Daemon.
+* gcal2txt: (gcal)Invoking gcal2txt. Calendar resource to text file.
+* gftodvi: (web2c)GFtoDVI invocation. Generic font proofsheets.
+* gftopk: (web2c)GFtoPK invocation. Generic to packed fonts.
+* gftype: (web2c)GFtype invocation. GF to human-readable text.
+* git: (git). GNU interactive tools.
+* groups: (coreutils)groups invocation. Print group names a user is in.
+* guimb: (mailutils)guimb. Mailbox processing language.
+* gunzip: (gzip)Overview. Decompression.
+* gzexe: (gzip)Overview. Compress executables.
+* head: (coreutils)head invocation. Output the first part of files.
+* hostid: (coreutils)hostid invocation. Print numeric host identifier.
+* hostname: (coreutils)hostname invocation. Print or set system name.
+* id: (coreutils)id invocation. Print user identity.
+* ifnames: (autoconf)ifnames Invocation. Listing conditionals in source.
+* imap4d: (mailutils)imap4d. IMAP4 daemon.
+* inetd: (inetutils)inetd invocation. Internet super-server.
+* inimf: (web2c)inimf invocation. Initial Metafont.
+* inimp: (web2c)inimp invocation. Initial MetaPost.
+* initex: (web2c)initex invocation. Initial TeX.
+* install: (coreutils)install invocation. Copy and change attributes.
+* join: (coreutils)join invocation. Join lines on a common field.
+* kill: (coreutils)kill invocation. Send a signal to processes.
+* kpsewhich: (kpathsea)Invoking kpsewhich. TeX file searching.
+* libtoolize: (libtool)Invoking libtoolize. Adding libtool support.
+* lid: (id-utils)lid invocation. Matching words and patterns.
+* link: (coreutils)link invocation. Make hard links between files.
+* ln: (coreutils)ln invocation. Make links between files.
+* locate: (find)Invoking locate. Finding files in a database.
+* logger: (inetutils)logger invocation. Logger.
+* logname: (coreutils)logname invocation. Print current login name.
+* ls: (coreutils)ls invocation. List directory contents.
+* mail-files: (sharutils)mail-files invocation. Send files to remote site.
+* mail.local: (mailutils)mail.local. Deliver mail to local mailbox.
+* mail: (mailutils)mail. Send and receive mail.
+* mailshar: (sharutils)mailshar invocation. Make and send a shell archive.
+* makempx: (web2c)MakeMPX invocation. MetaPost label typesetting.
+* maketexmf: (kpathsea)MakeTeX scripts. MF source generation.
+* maketexpk: (kpathsea)MakeTeX scripts. PK bitmap generation.
+* maketextex: (kpathsea)MakeTeX scripts. TeX source generation.
+* maketextfm: (kpathsea)MakeTeX scripts. TeX font metric generation.
+* md5sum: (coreutils)md5sum invocation. Print or check MD5 digests.
+* mdiff: (wdiff)mdiff invocation. Line cluster finder.
+* messages: (mailutils)messages. Count messages in mailbox.
+* mf: (web2c)mf invocation. Creating typeface families.
+* mft: (web2c)MFT invocation. Prettyprinting Metafont source.
+* mgetty: (mgetty). Faxes, voicemail and more.
+* mkdir: (coreutils)mkdir invocation. Create directories.
+* mkfifo: (coreutils)mkfifo invocation. Create FIFOs (named pipes).
+* mkid: (id-utils)mkid invocation. Creating an ID database.
+* mknod: (coreutils)mknod invocation. Create special files.
+* mp: (web2c)mp invocation. Creating technical diagrams.
+* mpto: (web2c)MPto invocation. MetaPost label extraction.
+* mv: (coreutils)mv invocation. Rename files.
+* networking(inet) utilities: (inetutils). GNU networking utilities.
+* newer: (web2c)Newer invocation. Compare modification times.
+* nice: (coreutils)nice invocation. Modify niceness.
+* nl: (coreutils)nl invocation. Number lines and write files.
+* nlmconv: (binutils)nlmconv. Converts object code into an NLM.
+* nm: (binutils)nm. List symbols from object files.
+* nohup: (coreutils)nohup invocation. Immunize to hangups.
+* objcopy: (binutils)objcopy. Copy and translate object files.
+* objdump: (binutils)objdump. Display information from object files.
+* od: (coreutils)od invocation. Dump files in octal, etc.
+* paste: (coreutils)paste invocation. Merge lines of files.
+* patch: (diff)Invoking patch. Apply a patch to a file.
+* patgen: (web2c)Patgen invocation. Creating hyphenation patterns.
+* pathchk: (coreutils)pathchk invocation. Check file name portability.
+* ping: (inetutils)ping invocation. Packets to network hosts.
+* pktogf: (web2c)PKtoGF invocation. Packed to generic fonts.
+* pktype: (web2c)PKtype invocation. PK to human-readable text.
+* pltotf: (web2c)PLtoTF invocation. Property list to TFM.
+* pooltype: (web2c)Pooltype invocation. Display WEB pool files.
+* pop3d: (mailutils)pop3d. POP3 daemon.
+* pr-addr: (gnats)pr-addr. Bug report address retrieval.
+* pr-edit: (gnats)pr-edit. The edit-pr driver.
+* pr: (coreutils)pr invocation. Paginate or columnate files.
+* printenv: (coreutils)printenv invocation. Print environment variables.
+* printf: (coreutils)printf invocation. Format and print data.
+* ptx: (coreutils)ptx invocation. Produce permuted indexes.
+* pwd: (coreutils)pwd invocation. Print working directory.
+* query-pr: (gnats)Invoking query-pr. Bug searching/reporting.
+* queue-pr: (gnats)queue-pr. Handling incoming traffic.
+* ranlib: (binutils)ranlib. Generate index to archive contents.
+* rcp: (inetutils)rcp invocation. Strip non-directory suffix.
+* readelf: (binutils)readelf. Display the contents of ELF format files.
+* readlink: (coreutils)readlink invocation. Print referent of a symlink.
+* readmsg: (mailutils)readmsg. Extract messages from a folder.
+* rexecd: (inetutils)rexecd invocation. Remote execution server.
+* rlogin: (inetutils)rlogin invocation. Remote login.
+* rlogind: (inetutils)rlogind invocation. Remote login server.
+* rm: (coreutils)rm invocation. Remove files.
+* rmdir: (coreutils)rmdir invocation. Remove empty directories.
+* rsh: (inetutils)rsh invocation. Remote shell.
+* rshd: (inetutils)rshd invocation. Remote shell server.
+* sdiff: (diff)Invoking sdiff. Merge 2 files side-by-side.
+* send-pr: (gnats)Invoking send-pr. Submitting bugs.
+* seq: (coreutils)seq invocation. Print numeric sequences
+* sha1sum: (coreutils)sha1sum invocation. Print or check SHA-1 digests.
+* sha2: (coreutils)sha2 utilities. Print or check SHA-2 digests.
+* shar: (sharutils)shar invocation. Make a shell archive.
+* shred: (coreutils)shred invocation. Remove files more securely.
+* shuf: (coreutils)shuf invocation. Shuffling text files.
+* sieve: (mailutils)sieve. Mail filtering utility.
+* size: (binutils)size. List section sizes and total size.
+* sleep: (coreutils)sleep invocation. Delay for a specified time.
+* sort: (coreutils)sort invocation. Sort text files.
+* split: (coreutils)split invocation. Split into fixed-size pieces.
+* stat: (coreutils)stat invocation. Report file(system) status.
+* strings: (binutils)strings. List printable strings from files.
+* strip: (binutils)strip. Discard symbols.
+* stty: (coreutils)stty invocation. Print/change terminal settings.
+* su: (coreutils)su invocation. Modify user and group ID.
+* sum: (coreutils)sum invocation. Print traditional checksum.
+* sync: (coreutils)sync invocation. Synchronize memory and disk.
+* syslogd: (inetutils)syslogd invocation. Syslog server.
+* tabs: (tput)Invoking tabs. Tab settings.
+* tac: (coreutils)tac invocation. Reverse files.
+* tail: (coreutils)tail invocation. Output the last part of files.
+* talk: (inetutils)talk invocation. Talk client.
+* talkd: (inetutils)talkd invocation. Talk server.
+* tangle: (web2c)Tangle invocation. WEB to Pascal.
+* tar: (tar)tar invocation. Invoking GNU `tar'.
+* tcal: (gcal)Invoking tcal. Run Gcal with tomorrow's date.
+* tee: (coreutils)tee invocation. Redirect to multiple files.
+* test: (coreutils)test invocation. File/string tests.
+* testsuite: (autoconf)testsuite Invocation. Running an Autotest test suite.
+* tex: (web2c)tex invocation. Typesetting.
+* tftopl: (web2c)TFtoPL invocation. TFM -> property list.
+* tftp: (inetutils)tftp invocation. Trivial FTP.
+* touch: (coreutils)touch invocation. Change file timestamps.
+* tput: (tput)Invoking tput. Termcap in shell scripts.
+* tr: (coreutils)tr invocation. Translate characters.
+* true: (coreutils)true invocation. Do nothing, successfully.
+* tsort: (coreutils)tsort invocation. Topological sort.
+* tty: (coreutils)tty invocation. Print terminal name.
+* txt2gcal: (gcal)Invoking txt2gcal. Calendar text to resource file.
+* umb-scheme: (umb-scheme). UMB Scheme Interpreter.
+* uname: (coreutils)uname invocation. Print system information.
+* unexpand: (coreutils)unexpand invocation. Convert spaces to tabs.
+* unify: (wdiff)unify invocation. Diff format converter.
+* uniq: (coreutils)uniq invocation. Uniquify files.
+* unlink: (coreutils)unlink invocation. Removal via unlink(2).
+* unshar: (sharutils)unshar invocation. Explode a shell archive.
+* updatedb: (find)Invoking updatedb. Building the locate database.
+* users: (coreutils)users invocation. Print current user names.
+* uudecode: (sharutils)uudecode invocation. Restore file from 7-bits.
+* uuencode: (sharutils)uuencode invocation. Force binary file to 7-bits.
+* vdir: (coreutils)vdir invocation. List directories verbosely.
+* vftovp: (web2c)VFtoVP invocation. Virtual font -> virtual pl.
+* view-pr: (gnats)Invoking view-pr. Showing bug reports.
+* virmf: (web2c)virmf invocation. Virgin Metafont.
+* virmp: (web2c)virmp invocation. Virgin MetaPost.
+* virtex: (web2c)virtex invocation. Virgin TeX.
+* vptovf: (web2c)VPtoVF invocation. Virtual pl -> virtual font.
+* wc: (coreutils)wc invocation. Line, word, and byte counts.
+* weave: (web2c)Weave invocation. WEB to TeX.
+* who: (coreutils)who invocation. Print who is logged in.
+* whoami: (coreutils)whoami invocation. Print effective user ID.
+* windmc: (binutils)windmc. Generator for Windows message resources.
+* windres: (binutils)windres. Manipulate Windows resources.
+* xargs: (find)Invoking xargs. Operating on many files.
+* xtokid: (id-utils)xtokid invocation. Testing mkid scanners.
+* yes: (coreutils)yes invocation. Print a string indefinitely.
+* zcat: (gzip)Overview. Decompression to stdout.
+* zdiff: (gzip)Overview. Compare compressed files.
+* zforce: (gzip)Overview. Force .gz extension on files.
+* zgrep: (gzip)Overview. Search compressed files.
+* zmore: (gzip)Overview. Decompression output by pages.
+* zsh: (zsh). An enhanced Bourne shell.
diff --git a/util/dvipdf.test b/util/dvipdf.test
new file mode 100755
index 0000000..f66375b
--- /dev/null
+++ b/util/dvipdf.test
@@ -0,0 +1,66 @@
+#! /bin/sh
+# Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+#
+# This file is part of GNU Texinfo.
+#
+# GNU Texinfo is free software; you can redistribute it and/or modify
+# 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 Texinfo is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+required='tex'
+
+. ./defs || exit 1
+
+set -e
+
+# one_run ARGS -- FILES
+# ---------------------
+# Run texi2dvi with ARGS, expect the FILES to be left. Remove them.
+one_run ()
+{
+ # Use pstricks.
+ cat >input.tex <<EOF
+\documentclass[a4paper]{article}
+\usepackage{pst-node}
+\pagestyle{empty}
+\begin{document}
+\begin{psmatrix}
+ A & B & C & D & E & F
+\end{psmatrix}
+\psset{arrows=->}
+\nccircle{1,1}{0.5}
+\nccircle[angleA=30]{1,2}{0.4}
+\nccircle[arrows=-,nodesep=0.05]{1,3}{0.2}
+\ncloop[angleB=180]{1,4}{1,4}
+\ncloop[angleB=180,linearc=0.35,nodesep=0.1]{1,5}{1,5}
+\ncloop[angleB=180,linearc=0.15,loopsize=0.4]{1,6}{1,6}
+
+\vspace{1cm}
+\begin{psmatrix}
+ A & B & C & D
+\end{psmatrix}
+\psset{arrows=->,nodesep=0.05}
+\ncangles[armA=0.8,armB=0,angleA=70,angleB=110,linearc=0.22]{1,1}{1,1}
+\ncdiag[arm=0.9,angleA=70,angleB=110,linearc=0.3]{1,2}{1,2}
+\ncdiag[arm=0.8,angleA=50,angleB=130,linearc=0.25]{1,3}{1,3}
+\ncdiag[arm=0.8,angleA=50,angleB=130,linearc=0.28]{1,4}{1,4}
+\end{document}
+EOF
+
+ TEXI2DVI_pass $(optionset_get 1 "$@") input.tex
+ # There should only be the expected and input files.
+ assert_and_remove_files $(optionset_get 2 "$@") input.tex
+}
+
+one_run --dvipdf --batch --clean \
+ -- \
+ input.pdf
diff --git a/util/fix-info-dir b/util/fix-info-dir
new file mode 100755
index 0000000..b1144ed
--- /dev/null
+++ b/util/fix-info-dir
@@ -0,0 +1,317 @@
+#!/bin/sh
+#fix-info-dir (GNU texinfo)
+VERSION=1.1
+#Copyright (C) 1998, 2003 Free Software Foundation, Inc.
+#fix-info-dir comes with NO WARRANTY, to the extent permitted by law.
+#You may redistribute copies of fix-info-dir
+#under the terms of the GNU General Public License.
+#For more information about these matters, see the files named COPYING."
+#fix-info-dir was derived from update-info and gen-dir-node
+# The skeleton file contains info topic names in the
+# order they should appear in the output. There are three special
+# lines that alter the behavior: a line consisting of just "--" causes
+# the next line to be echoed verbatim to the output. A line
+# containing just "%%" causes all the remaining filenames (wildcards
+# allowed) in the rest of the file to be ignored. A line containing
+# just "!!" exits the script when reached (unless preceded by a line
+# containing just "--").
+#Author: Richard L. Hawes, rhawes@dmapub.dma.org.
+
+# ###SECTION 1### Constants
+set -h 2>/dev/null
+# ENVIRONMENT
+if test -z "$TMPDIR"; then
+ TMPDIR="/usr/tmp"
+fi
+if test -z "$LINENO"; then
+ LINENO="0"
+fi
+
+MENU_BEGIN='^\*\([ ]\)\{1,\}Menu:'
+MENU_ITEM='^\* ([^ ]).*:([ ])+\('
+MENU_FILTER1='s/^\*\([ ]\)\{1,\}/* /'
+MENU_FILTER2='s/\([ ]\)\{1,\}$//g'
+
+TMP_FILE1="${TMPDIR}/fx${$}.info"
+TMP_FILE2="${TMPDIR}/fy${$}.info"
+TMP_FILE_LIST="$TMP_FILE1 $TMP_FILE2"
+
+TRY_HELP_MSG="Try --help for more information"
+
+# ###SECTION 100### main program
+#variables set by options
+CREATE_NODE=""
+DEBUG=":"
+MODE=""
+#
+Total="0"
+Changed=""
+
+while test "$*"; do
+ case "$1" in
+ -c|--create) CREATE_NODE="y";;
+ --debug) set -eux; DEBUG="set>&2";;
+ -d|--delete) MODE="Detect_Invalid";;
+ +d);;
+ --version)
+cat<<VersionEOF
+fix-info-dir (GNU Texinfo) $VERSION
+Copyright (C) 1998 Free Software Foundation, Inc.
+fix-info-dir comes with NO WARRANTY, to the extent permitted by law.
+You may redistribute copies of fix-info-dir
+under the terms of the GNU General Public License.
+For more information about these matters, see the files named COPYING.
+Author: Richard L. Hawes
+VersionEOF
+ exit;;
+
+ --help)
+cat<<HelpEndOfFile
+Usage: fix-info-dir [OPTION]... [INFO_DIR/[DIR_FILE]] [SKELETON]
+
+It detects and inserts missing menu items into the info dir file.
+The info dir must be the current directory.
+
+Options:
+-c, --create create a new info node
+-d, --delete delete invalid menu items (ignore missing menu items)
+ --debug print debug information to standard error path
+ --help print this help message and exit
+ --version print current version and exit
+Backup of the info node has a '.old' suffix added. This is a shell script.
+Environment Variables: TMPDIR
+Email bug reports to bug-texinfo@gnu.org.
+HelpEndOfFile
+ exit;;
+
+ [-+]*) echo "$0:$LINENO: \"$1\" is not a valid option">&2
+ echo "$TRY_HELP_MSG">&2
+ exit 2;;
+ *) break;;
+ esac
+ shift
+done
+
+ORIGINAL_DIR=`pwd`
+
+if test "$#" -gt "0"; then
+ INFO_DIR="$1"
+ shift
+else
+ INFO_DIR=$DEFAULT_INFO_DIR
+fi
+
+if test ! -d "${INFO_DIR}"; then
+ DIR_FILE=`basename ${INFO_DIR}`;
+ INFO_DIR=`dirname ${INFO_DIR}`;
+else
+ DIR_FILE="dir"
+fi
+
+cd "$INFO_DIR"||exit
+
+
+if test "$CREATE_NODE"; then
+ if test "$#" -gt "0"; then
+ if test `expr $1 : /` = '1'; then
+ SKELETON="$1"
+ else
+ SKELETON="$ORIGINAL_DIR/$1"
+ fi
+ if test ! -r "$SKELETON" && test -f "$SKELETON"; then
+ echo "$0:$LINENO: $SKELETON is not readable">&2
+ exit 2
+ fi
+ shift
+ else
+ SKELETON=/dev/null
+
+ fi
+else
+ if test ! -f "$DIR_FILE"; then
+ echo "$0:$LINENO: $DIR_FILE is irregular or nonexistant">&2
+ exit 2
+ elif test ! -r "$DIR_FILE"; then
+ echo "$0:$LINENO: $DIR_FILE is not readable">&2
+ exit 2
+ elif test ! -w "$DIR_FILE"; then
+ echo "$0:$LINENO: $DIR_FILE is not writeable">&2
+ exit 2
+ fi
+fi
+
+if test "$#" -gt "0"; then
+ echo "$0:$LINENO: Too many parameters">&2
+ echo "$TRY_HELP_MSG">&2
+ exit 2
+fi
+
+if test -f "$DIR_FILE"; then
+ cp "$DIR_FILE" "$DIR_FILE.old"
+ echo "Backed up $DIR_FILE to $DIR_FILE.old."
+fi
+
+if test "$CREATE_NODE"; then
+ if test "$MODE"; then
+ echo "$0:$LINENO: ERROR: Illogical option combination: -d -c">&2
+ echo "$TRY_HELP_MSG">&2
+ exit 2
+ fi
+ echo "Creating new Info Node: `pwd`/$DIR_FILE"
+ Changed="y"
+
+{
+
+ ### output the dir header
+ echo "-*- Text -*-"
+ echo "This file was generated automatically by $0."
+ echo "This version was generated on `date`"
+ echo "by `whoami`@`hostname` for `pwd`"
+
+ cat<<DIR_FILE_END_OF_FILE
+This is the file .../info/$DIR_FILE, which contains the topmost node of the
+Info hierarchy. The first time you invoke Info you start off
+looking at that node, which is ($DIR_FILE)Top.
+
+
+File: $DIR_FILE Node: Top This is the top of the INFO tree
+
+ This (the Directory node) gives a menu of major topics.
+ Typing "q" exits, "?" lists all Info commands, "d" returns here,
+ "h" gives a primer for first-timers,
+ "mEmacs<Return>" visits the Emacs topic, etc.
+
+ In Emacs, you can click mouse button 2 on a menu item or cross reference
+ to select it.
+
+* Menu: The list of major topics begins on the next line.
+
+DIR_FILE_END_OF_FILE
+
+### go through the list of files in the skeleton. If an info file
+### exists, grab the ENTRY information from it. If an entry exists
+### use it, otherwise create a minimal $DIR_FILE entry.
+
+ # Read one line from the file. This is so that we can echo lines with
+ # whitespace and quoted characters in them.
+ while read fileline; do
+ # flag fancy features
+ if test ! -z "$echoline"; then # echo line
+ echo "$fileline"
+ echoline=""
+ continue
+ elif test "${fileline}" = "--"; then
+ # echo the next line
+ echoline="1"
+ continue
+ elif test "${fileline}" = "%%"; then
+ # skip remaining files listed in skeleton file
+ skip="1"
+ continue
+ elif test "${fileline}" = "!!"; then
+ # quit now
+ break
+ fi
+
+ # handle files if they exist
+ for file in $fileline""; do
+ fname=
+ if test -z "$file"; then
+ break
+ fi
+ # Find the file to operate upon.
+ if test -r "$file"; then
+ fname="$file"
+ elif test -r "${file}.info"; then
+ fname="${file}.info"
+ elif test -r "${file}.gz"; then
+ fname="${file}.gz"
+ elif test -r "${file}.info.gz"; then
+ fname="${file}.info.gz"
+ else
+ echo "$0:$LINENO: can't find info file for ${file}?">&2
+ continue
+ fi
+
+ # if we found something and aren't skipping, do the entry
+ if test "$skip"; then
+ continue
+ fi
+
+ infoname=`echo $file|sed -e 's/.info$//'`
+ entry=`zcat -f $fname|\
+ sed -e '1,/START-INFO-DIR-ENTRY/d'\
+ -e '/END-INFO-DIR-ENTRY/,$d'`
+ if [ ! -z "${entry}" ]; then
+ echo "${entry}"
+ else
+ echo "* ${infoname}: (${infoname})."
+ fi
+ Total=`expr "$Total" + "1"`
+ done
+ done
+}>$DIR_FILE<$SKELETON
+fi
+
+trap ' eval "$DEBUG"; rm -f $TMP_FILE_LIST; exit ' 0
+trap ' rm -f $TMP_FILE_LIST
+ exit ' 1
+trap ' rm -f $TMP_FILE_LIST
+ echo "$0:$LINENO: received INT signal.">&2
+ exit ' 2
+trap ' rm -f $TMP_FILE_LIST
+ echo "$0:$LINENO: received QUIT signal.">&2
+ exit ' 3
+
+sed -e "1,/$MENU_BEGIN/d" -e "$MENU_FILTER1" -e "$MENU_FILTER2"<$DIR_FILE\
+|sed -n -e '/\* /{
+s/).*$//g
+s/\.gz$//
+s/\.info$//
+s/^.*(//p
+}'|sort -u>$TMP_FILE1
+ls -F|sed -e '/\/$/d' -e '/[-.][0-9]/d'\
+ -e "/^$DIR_FILE\$/d" -e "/^$DIR_FILE.old\$/d"\
+ -e 's/[*@]$//' -e 's/\.gz$//' -e 's/\.info$//'|sort>$TMP_FILE2
+
+if test -z "$MODE"; then
+ #Detect Missing
+ DONE_MSG="total menu item(s) were inserted into `pwd`/$DIR_FILE"
+ for Info_Name in `comm -13 $TMP_FILE1 $TMP_FILE2`; do
+ if test -r "$Info_Name"; then
+ Info_File="$Info_Name"
+ elif test -r "${Info_Name}.info"; then
+ Info_File="${Info_Name}.info"
+ elif test -r "${Info_Name}.gz"; then
+ Info_File="${Info_Name}.gz"
+ elif test -r "${Info_Name}.info.gz"; then
+ Info_File="${Info_Name}.info.gz"
+ else
+ echo "$0:$LINENO: can't find info file for ${Info_Name}?">&2
+ continue
+ fi
+ Changed="y"
+ if install-info $Info_File $DIR_FILE; then
+ Total=`expr "$Total" + "1"`
+ fi
+ done
+else
+ # Detect Invalid
+ DONE_MSG="total invalid menu item(s) were removed from `pwd`/$DIR_FILE"
+ for Info_Name in `comm -23 $TMP_FILE1 $TMP_FILE2`; do
+ Changed="y"
+ if install-info --remove $Info_Name $DIR_FILE; then
+ Total=`expr "$Total" + "1"`
+ fi
+ done
+fi
+
+# print summary
+if test "$Changed"; then
+ echo "$Total $DONE_MSG"
+else
+ echo "Nothing to do"
+fi
+rm -f $TMP_FILE_LIST
+eval "$DEBUG"
+exit 0
diff --git a/util/fixfonts b/util/fixfonts
new file mode 100755
index 0000000..ee2ea71
--- /dev/null
+++ b/util/fixfonts
@@ -0,0 +1,84 @@
+#!/bin/sh
+# Make links named `lcircle10' for all TFM and GF/PK files, if no
+# lcircle10 files already exist.
+
+# Don't override definition of prefix and/or libdir if they are
+# already defined in the environment.
+if test "z${prefix}" = "z" ; then
+ prefix=/usr/local
+else
+ # prefix may contain references to other variables, thanks to make.
+ eval prefix=\""${prefix}"\"
+fi
+
+if test "z${libdir}" = "z" ; then
+ libdir="${prefix}/lib/tex"
+else
+ # libdir may contain references to other variables, thanks to make.
+ eval libdir=\""${libdir}"\"
+fi
+
+texlibdir="${libdir}"
+texfontdir="${texlibdir}/fonts"
+
+# Directories for the different font formats, in case they're not all
+# stored in one place.
+textfmdir="${textfmdir-${texfontdir}}"
+texpkdir="${texpkdir-${texfontdir}}"
+texgfdir="${texgfdir-${texfontdir}}"
+
+test "z${TMPDIR}" = "z" && TMPDIR="/tmp"
+
+tempfile="${TMPDIR}/circ$$"
+tempfile2="${TMPDIR}/circ2$$"
+
+# EXIT SIGHUP SIGINT SIGQUIT SIGTERM
+#trap 'rm -f "${tempfile}" "${tempfile2}"' 0 1 2 3 15
+
+# Find all the fonts with names that include `circle'.
+(cd "${texfontdir}"; find . -name '*circle*' -print > "${tempfile}")
+
+# If they have lcircle10.tfm, assume everything is there, and quit.
+if grep 'lcircle10\.tfm' "${tempfile}" > /dev/null 2>&1 ; then
+ echo "Found lcircle10.tfm."
+ exit 0
+fi
+
+# No TFM file for lcircle. Make a link to circle10.tfm if it exists,
+# and then make a link to the bitmap files.
+grep 'circle10\.tfm' "${tempfile}" > "${tempfile2}" \
+ || {
+ echo "I can't find any circle fonts in ${texfontdir}.
+If it isn't installed somewhere else, you need to get the Metafont sources
+from somewhere, e.g., labrea.stanford.edu:pub/tex/latex/circle10.mf, and
+run Metafont on them."
+ exit 1
+ }
+
+# We have circle10.tfm. (If we have it more than once, take the first
+# one.) Make the link.
+tempfile2_line1="`sed -ne '1p;q' \"${tempfile2}\"`"
+ln "${tempfile2_line1}" "${textfmdir}/lcircle10.tfm"
+echo "Linked to ${tempfile2_line1}."
+
+# Now make a link for the PK files, if any.
+(cd "${texpkdir}"
+ for f in `grep 'circle10.*pk' "${tempfile}"` ; do
+ set - `echo "$f" \
+ | sed -ne '/\//!s/^/.\//;s/\(.*\)\/\([^\/][^\/]*\)$/\1 \2/;p'`
+ ln "$f" "${1}/l${2}"
+ echo "Linked to $f."
+ done
+)
+
+# And finally for the GF files.
+(cd "${texgfdir}"
+ for f in `grep 'circle10.*gf' "${tempfile}"` ; do
+ set - `echo "$f" \
+ | sed -ne '/\//!s/^/.\//;s/\(.*\)\/\([^\/][^\/]*\)$/\1 \2/;p'`
+ ln "$f" "${1}/l${2}"
+ echo "Linked to $f."
+ done
+)
+
+# eof
diff --git a/util/fixref.gawk b/util/fixref.gawk
new file mode 100644
index 0000000..4a692f7
--- /dev/null
+++ b/util/fixref.gawk
@@ -0,0 +1,143 @@
+#! /usr/local/bin/gawk -f
+
+# fixref.awk --- fix xrefs in texinfo documents
+# Copyright 1991, 1998 Arnold David Robbins
+
+# FIXREF is free software; you can redistribute it and/or modify
+# 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.
+#
+# FIXREF is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Updated: Jul 21 1992 --- change unknown
+# Updated: Jul 18 1997 --- bug fix
+
+# usage: gawk -f fixref.awk input-file > output-file
+# or if you have #!: fixref.awk input-file > output-file
+
+# Limitations:
+# 1. no more than one cross reference on a line
+# 2. cross references may not cross a newline
+
+BEGIN \
+{
+ # we make two passes over the file. To do that we artificially
+ # tweak the argument vector to do a variable assignment
+
+ if (ARGC != 2) {
+ printf("usage: %s texinfo-file\n", ARGV[0]) > "/dev/stderr"
+ exit 1
+ }
+ ARGV[2] = "pass=2"
+ ARGV[3] = ARGV[1]
+ ARGC = 4
+
+ # examine paragraphs
+ RS = ""
+
+ heading = "@(chapter|appendix|unnumbered|(appendix(sec|subsec|subsubsec))|section|subsection|subsubsection|unnumberedsec|heading|top)"
+
+ pass = 1
+
+ # put space between paragraphs on output
+ ORS = "\n\n"
+}
+
+pass == 1 && NF == 0 { next }
+
+# pass == 1 && /@node/ \
+# bug fix 7/18/96
+pass == 1 && /^@node/ \
+{
+ lname = name = ""
+ n = split($0, lines, "\n")
+ for (i = 1; i <= n; i++) {
+ if (lines[i] ~ ("^" heading)) {
+ sub(heading, "", lines[i])
+ sub(/^[ \t]*/, "", lines[i])
+ lname = lines[i]
+# printf "long name is '%s'\n", lines[i]
+ } else if (lines[i] ~ /@node/) {
+ sub(/@node[ \t]*/, "", lines[i])
+ sub(/[ \t]*,.*$/, "", lines[i])
+ name = lines[i]
+# printf "node name is '%s'\n", lines[i]
+ }
+ }
+ if (name && lname)
+ names[name] = lname
+ else if (lname)
+ printf("node name for %s missing!\n", lname) > "/dev/stderr"
+ else
+ printf("long name for %s missing!\n", name) > "/dev/stderr"
+
+ if (name ~ /:/)
+ printf("node `%s' contains a `:'\n", name) > "/dev/stderr"
+
+ if (lname) {
+ if (lname ~ /:/)
+ printf("name `%s' contains a `:'\n", lname) > "/dev/stderr"
+ else if (lname ~ /,/) {
+ printf("name `%s' contains a `,'\n", lname) > "/dev/stderr"
+ gsub(/,/, " ", lname)
+ names[name] = lname # added 7/18/97
+ }
+ }
+}
+
+pass == 2 && /@(x|px)?ref{/ \
+{
+ # split the paragraph into lines
+ # write them out one by one after fixing them
+ n = split($0, lines, "\n")
+ for (i = 1; i <= n; i++)
+ if (lines[i] ~ /@(x|px)?ref{/) {
+ res = updateref(lines[i])
+ printf "%s\n", res
+ } else
+ printf "%s\n", lines[i]
+
+ printf "\n" # avoid ORS
+ next
+}
+
+function updateref(orig, refkind, line)
+{
+ line = orig # work on a copy
+
+ # find the beginning of the reference
+ match(line, "@(x|px)?ref{")
+ refkind = substr(line, RSTART, RLENGTH)
+
+ # pull out just the node name
+ sub(/.*ref{/, "", line)
+ sub(/}.*$/, "", line)
+ sub(/,.*/, "", line)
+
+# debugging
+# printf("found ref to node '%s'\n", line) > "/dev/stderr"
+
+ # If the node name and the section name are the same
+ # we don't want to bother doing this.
+
+ if (! (line in names)) # sanity checking
+ printf("no long name for %s\n", line) > "/dev/stderr"
+ else if (names[line] != line && names[line] !~ /[:,]/) {
+ # build up new ref
+ newref = refkind line ", ," names[line] "}"
+ pat = refkind line "[^}]*}"
+
+ sub(pat, newref, orig)
+ }
+
+ return orig
+}
+
+pass == 2 { print }
diff --git a/util/gdoc b/util/gdoc
new file mode 100644
index 0000000..3c52fb0
--- /dev/null
+++ b/util/gdoc
@@ -0,0 +1,914 @@
+#!/usr/bin/perl
+
+## Copyright (c) 2002, 2003 Simon Josefsson ##
+## added -texinfo, -listfunc ##
+## man page revamp ##
+## various improvements ##
+## Copyright (c) 1998 Michael Zucchi, All Rights Reserved ##
+## hacked to allow -tex option --nmav ##
+## ##
+## This software falls under the GNU Public License. Please read ##
+## the COPYING file for more information ##
+
+#
+# This will read a 'c' file and scan for embedded comments in the
+# style of gnome comments (+minor extensions - see below).
+#
+# This program is modified by Nikos Mavroyanopoulos, for the gnutls
+# project.
+
+# Note: This only supports 'c'.
+
+# usage:
+# gdoc [ -docbook | -html | -text | -man | -tex | -texinfo | -listfunc ]
+# [ -sourceversion verno ] [ -includefuncprefix ] [ -bugsto address ]
+# [ -seeinfo infonode ] [ -copyright notice ] [ -verbatimcopying ]
+# [ -function funcname [ -function funcname ...] ] c file(s)s > outputfil
+e
+#
+# Set output format using one of -docbook, -html, -text, -man, -tex,
+# -texinfo, or -listfunc. Default is man.
+#
+# -sourceversion
+# Version number for source code, e.g. '1.0.4'. Used in 'man' headers.
+# Defaults to using current date.
+#
+# -includefuncprefix
+# For man pages, generate a #include <FILE.h> based on the function
+# prefix. For example, a function gss_init_sec_context will generate
+# an include statement of #include <gss.h>.
+#
+# -bugsto address
+# For man pages, include a section about reporting bugs and mention
+# the given e-mail address, e.g 'bug-libidn@gnu.org'.
+#
+# -seeinfo infonode
+# For man pages, include a section that point to an info manual
+# for more information.
+#
+# -copyright notice
+# For man pages, include a copyright section with the given
+# notice after a preamble. Use, e.g., '2002, 2003 Simon Josefsson'.
+#
+# -verbatimcopying
+# For man pages, and when the -copyright parameter is used,
+# add a licensing statement that say verbatim copying is permitted.
+#
+# -function funcname
+# If set, then only generate documentation for the given function(s). A
+ll
+# other functions are ignored.
+#
+# c files - list of 'c' files to process
+#
+# All output goes to stdout, with errors to stderr.
+
+#
+# format of comments.
+# In the following table, (...)? signifies optional structure.
+# (...)* signifies 0 or more structure elements
+# /**
+# * function_name(:)? (- short description)?
+# (* @parameterx: (description of parameter x)?)*
+# (* a blank line)?
+# * (Description:)? (Description of function)?
+# * (Section header: (section description)? )*
+# (*)?*/
+#
+# So .. the trivial example would be:
+#
+# /**
+# * my_function
+# **/
+#
+# If the Description: header tag is ommitted, then there must be a blank line
+# after the last parameter specification.
+# e.g.
+# /**
+# * my_function - does my stuff
+# * @my_arg: its mine damnit
+# *
+# * Does my stuff explained.
+# */
+#
+# or, could also use:
+# /**
+# * my_function - does my stuff
+# * @my_arg: its mine damnit
+# * Description: Does my stuff explained.
+# */
+# etc.
+#
+# All descriptions can be multiline, apart from the short function description
+.
+#
+# All descriptive text is further processed, scanning for the following specia
+l
+# patterns, which are highlighted appropriately.
+#
+# 'funcname()' - function
+# '$ENVVAR' - environmental variable
+# '&struct_name' - name of a structure
+# '@parameter' - name of a parameter
+# '%CONST' - name of a constant.
+
+#
+# Extensions for LaTeX:
+#
+# 1. the symbol '->' will be replaced with a rightarrow
+# 2. x^y with ${x}^{y}$.
+# 3. xxx\: with xxx:
+
+use POSIX qw(strftime);
+
+# match expressions used to find embedded type information
+$type_constant = "\\\%(\\w+)";
+$type_func = "(\\w+\\(\\))";
+$type_param = "\\\@(\\w+)";
+$type_struct = "\\\&(\\w+)";
+$type_env = "(\\\$\\w+)";
+
+
+# Output conversion substitutions.
+# One for each output format
+
+# these work fairly well
+%highlights_html = ( $type_constant, "<i>\$1</i>",
+ $type_func, "<b>\$1</b>",
+ $type_struct, "<i>\$1</i>",
+ $type_param, "<tt><b>\$1</b></tt>" );
+$blankline_html = "<p>";
+
+%highlights_texinfo = ( $type_constant, "\\\@var{\$1}",
+ $type_func, "\\\@code{\$1}",
+ $type_struct, "\\\@code{\$1}",
+ $type_param, "\\\@code{\$1}" );
+$blankline_texinfo = "";
+
+%highlights_tex = ( $type_constant, "{\\\\it \$1}",
+ $type_func, "{\\\\bf \$1}",
+ $type_struct, "{\\\\it \$1}",
+ $type_param, "{\\\\bf \$1}" );
+$blankline_tex = "\\\\";
+
+# sgml, docbook format
+%highlights_sgml = ( $type_constant, "<replaceable class=\"option\">\$1</repla
+ceable>",
+ $type_func, "<function>\$1</function>",
+ $type_struct, "<structname>\$1</structname>",
+ $type_env, "<envar>\$1</envar>",
+ $type_param, "<parameter>\$1</parameter>" );
+$blankline_sgml = "</para><para>\n";
+
+# these are pretty rough
+%highlights_man = ( $type_constant, "\\n.I \\\"\$1\\\"\\n",
+ $type_func, "\\n.B \\\"\$1\\\"\\n",
+ $type_struct, "\\n.I \\\"\$1\\\"\\n",
+ $type_param."([\.\, ]*)\n?", "\\n.I \\\"\$1\$2\\\"\\n" );
+$blankline_man = "";
+
+# text-mode
+%highlights_text = ( $type_constant, "\$1",
+ $type_func, "\$1",
+ $type_struct, "\$1",
+ $type_param, "\$1" );
+$blankline_text = "";
+
+
+sub usage {
+ print "Usage: $0 [ -v ] [ -docbook | -html | -text | -man | -tex | -texinf
+o -listfunc ]\n";
+ print " [ -sourceversion verno ] [ -includefuncprefix ]\n";
+ print " [ -bugsto address ] [ -seeinfo infonode ] [ -copyright not
+ice]\n";
+ print " [ -verbatimcopying ]\n";
+ print " [ -function funcname [ -function funcname ...] ]\n";
+ print " c source file(s) > outputfile\n";
+ exit 1;
+}
+
+# read arguments
+if ($#ARGV==-1) {
+ usage();
+}
+
+$verbose = 0;
+$output_mode = "man";
+%highlights = %highlights_man;
+$blankline = $blankline_man;
+$modulename = "API Documentation";
+$sourceversion = strftime "%Y-%m-%d", localtime;
+$function_only = 0;
+while ($ARGV[0] =~ m/^-(.*)/) {
+ $cmd = shift @ARGV;
+ if ($cmd eq "-html") {
+ $output_mode = "html";
+ %highlights = %highlights_html;
+ $blankline = $blankline_html;
+ } elsif ($cmd eq "-man") {
+ $output_mode = "man";
+ %highlights = %highlights_man;
+ $blankline = $blankline_man;
+ } elsif ($cmd eq "-tex") {
+ $output_mode = "tex";
+ %highlights = %highlights_tex;
+ $blankline = $blankline_tex;
+ } elsif ($cmd eq "-texinfo") {
+ $output_mode = "texinfo";
+ %highlights = %highlights_texinfo;
+ $blankline = $blankline_texinfo;
+ } elsif ($cmd eq "-text") {
+ $output_mode = "text";
+ %highlights = %highlights_text;
+ $blankline = $blankline_text;
+ } elsif ($cmd eq "-docbook") {
+ $output_mode = "sgml";
+ %highlights = %highlights_sgml;
+ $blankline = $blankline_sgml;
+ } elsif ($cmd eq "-listfunc") {
+ $output_mode = "listfunc";
+ } elsif ($cmd eq "-module") { # not needed for sgml, inherits from calling
+ document
+ $modulename = shift @ARGV;
+ } elsif ($cmd eq "-sourceversion") {
+ $sourceversion = shift @ARGV;
+ } elsif ($cmd eq "-includefuncprefix") {
+ $includefuncprefix = 1;
+ } elsif ($cmd eq "-bugsto") {
+ $bugsto = shift @ARGV;
+ } elsif ($cmd eq "-copyright") {
+ $copyright = shift @ARGV;
+ } elsif ($cmd eq "-verbatimcopying") {
+ $verbatimcopying = 1;
+ } elsif ($cmd eq "-seeinfo") {
+ $seeinfo = shift @ARGV;
+ } elsif ($cmd eq "-function") { # to only output specific functions
+ $function_only = 1;
+ $function = shift @ARGV;
+ $function_table{$function} = 1;
+ } elsif ($cmd eq "-v") {
+ $verbose = 1;
+ } elsif (($cmd eq "-h") || ($cmd eq "--help")) {
+ usage();
+ }
+}
+
+##
+# dumps section contents to arrays/hashes intended for that purpose.
+#
+sub dump_section {
+ my $name = shift @_;
+ my $contents = join "\n", @_;
+
+ if ($name =~ m/$type_constant/) {
+ $name = $1;
+# print STDERR "constant section '$1' = '$contents'\n";
+ $constants{$name} = $contents;
+ } elsif ($name =~ m/$type_param/) {
+# print STDERR "parameter def '$1' = '$contents'\n";
+ $name = $1;
+ $parameters{$name} = $contents;
+ } else {
+# print STDERR "other section '$name' = '$contents'\n";
+ $sections{$name} = $contents;
+ push @sectionlist, $name;
+ }
+}
+
+##
+# output function
+#
+# parameters, a hash.
+# function => "function name"
+# parameterlist => @list of parameters
+# parameters => %parameter descriptions
+# sectionlist => @list of sections
+# sections => %descriont descriptions
+#
+
+sub repstr {
+ $pattern = shift;
+ $repl = shift;
+ $match1 = shift;
+ $match2 = shift;
+ $match3 = shift;
+ $match4 = shift;
+
+ $output = $repl;
+ $output =~ s,\$1,$match1,g;
+ $output =~ s,\$2,$match2,g;
+ $output =~ s,\$3,$match3,g;
+ $output =~ s,\$4,$match4,g;
+
+ eval "\$return = qq/$output/";
+
+# print "pattern $pattern matched 1=$match1 2=$match2 3=$match3 4=$match4 r
+eplace $repl yielded $output interpolated $return\n";
+
+ $return;
+}
+
+sub output_highlight {
+ my $contents = join "\n", @_;
+ my $line;
+
+ foreach $pattern (keys %highlights) {
+# print "scanning pattern $pattern ($highlights{$pattern})\n";
+ $contents =~ s:$pattern:repstr($pattern, $highlights{$pattern}, $1, $2
+, $3, $4):gse;
+ }
+ foreach $line (split "\n", $contents) {
+ if ($line eq ""){
+ print $lineprefix, $blankline;
+ } else {
+ print $lineprefix, $line;
+ }
+ print "\n";
+ }
+}
+
+sub just_highlight {
+ my $contents = join "\n", @_;
+ my $line;
+ my $ret = "";
+
+ foreach $pattern (keys %highlights) {
+# print "scanning pattern $pattern ($highlights{$pattern})\n";
+ $contents =~ s:$pattern:repstr($pattern, $highlights{$pattern}, $1, $2
+, $3, $4):gse;
+ }
+ foreach $line (split "\n", $contents) {
+ if ($line eq ""){
+ $ret = $ret . $lineprefix . $blankline;
+ } else {
+ $ret = $ret . $lineprefix . $line;
+ }
+ $ret = $ret . "\n";
+ }
+
+ return $ret;
+}
+
+# output in texinfo
+sub output_texinfo {
+ my %args = %{$_[0]};
+ my ($parameter, $section);
+ my $count;
+
+ print "\@deftypefun {" . $args{'functiontype'} . "} ";
+ print "{".$args{'function'}."} ";
+ print "(";
+ $count = 0;
+ foreach $parameter (@{$args{'parameterlist'}}) {
+ print $args{'parametertypes'}{$parameter}." \@var{".$parameter."}";
+ if ($count != $#{$args{'parameterlist'}}) {
+ $count++;
+ print ", ";
+ }
+ }
+ print ")\n";
+ foreach $parameter (@{$args{'parameterlist'}}) {
+ if ($args{'parameters'}{$parameter}) {
+ print "\@var{".$parameter."}: ";
+ output_highlight($args{'parameters'}{$parameter});
+ print "\n";
+ }
+ }
+ foreach $section (@{$args{'sectionlist'}}) {
+ print "\n\@strong{$section:} " if $section ne $section_default;
+ $args{'sections'}{$section} =~ s:([{}]):\@\1:gs;
+ output_highlight($args{'sections'}{$section});
+ }
+ print "\@end deftypefun\n\n";
+}
+
+# output in html
+sub output_html {
+ my %args = %{$_[0]};
+ my ($parameter, $section);
+ my $count;
+ print "\n\n<a name=\"". $args{'function'} . "\">&nbsp</a><h2>Function</h2>
+\n";
+
+ print "<i>".$args{'functiontype'}."</i>\n";
+ print "<b>".$args{'function'}."</b>\n";
+ print "(";
+ $count = 0;
+ foreach $parameter (@{$args{'parameterlist'}}) {
+ print "<i>".$args{'parametertypes'}{$parameter}."</i> <b>".$parameter.
+"</b>\n";
+ if ($count != $#{$args{'parameterlist'}}) {
+ $count++;
+ print ", ";
+ }
+ }
+ print ")\n";
+
+ print "<h3>Arguments</h3>\n";
+ print "<dl>\n";
+ foreach $parameter (@{$args{'parameterlist'}}) {
+ print "<dt><i>".$args{'parametertypes'}{$parameter}."</i> <b>".$parame
+ter."</b>\n";
+ print "<dd>";
+ output_highlight($args{'parameters'}{$parameter});
+ }
+ print "</dl>\n";
+ foreach $section (@{$args{'sectionlist'}}) {
+ print "<h3>$section</h3>\n";
+ print "<ul>\n";
+ output_highlight($args{'sections'}{$section});
+ print "</ul>\n";
+ }
+ print "<hr>\n";
+}
+
+# output in tex
+sub output_tex {
+ my %args = %{$_[0]};
+ my ($parameter, $section);
+ my $count;
+ my $func = $args{'function'};
+ my $param;
+ my $param2;
+ my $sec;
+ my $check;
+ my $type;
+
+ $func =~ s/_/\\_/g;
+
+ print "\n\n\\subsection{". $func . "}\n\\label{" . $args{'function'} . "}\
+n";
+
+ $type = $args{'functiontype'};
+ $type =~ s/_/\\_/g;
+
+ print "{\\it ".$type."}\n";
+ print "{\\bf ".$func."}\n";
+ print "(";
+ $count = 0;
+ foreach $parameter (@{$args{'parameterlist'}}) {
+ $param = $args{'parametertypes'}{$parameter};
+ $param2 = $parameter;
+ $param =~ s/_/\\_/g;
+ $param2 =~ s/_/\\_/g;
+
+ print "{\\it ".$param."} {\\bf ".$param2."}";
+ if ($count != $#{$args{'parameterlist'}}) {
+ $count++;
+ print ", ";
+ }
+ }
+ print ")\n";
+
+ print "\n{\\large{Arguments}}\n";
+
+ print "\\begin{itemize}\n";
+ $check=0;
+ foreach $parameter (@{$args{'parameterlist'}}) {
+ $param1 = $args{'parametertypes'}{$parameter};
+ $param1 =~ s/_/\\_/g;
+ $param2 = $parameter;
+ $param2 =~ s/_/\\_/g;
+
+ $check = 1;
+ print "\\item {\\it ".$param1."} {\\bf ".$param2."}: \n";
+# print "\n";
+
+ $param3 = $args{'parameters'}{$parameter};
+ $param3 =~ s/&([a-zA-Z\_]+)/{\\it \1}/g;
+
+ $out = just_highlight($param3);
+ $out =~ s/_/\\_/g;
+ print $out;
+ }
+ if ($check==0) {
+ print "\\item void\n";
+ }
+ print "\\end{itemize}\n";
+
+ foreach $section (@{$args{'sectionlist'}}) {
+ $sec = $section;
+ $sec =~ s/_/\\_/g;
+ $sec =~ s/&([a-zA-Z\_]+)/{\\it \1}/g;
+
+ print "\n{\\large{$sec}}\\\\\n";
+ print "\\begin{rmfamily}\n";
+
+ $sec = $args{'sections'}{$section};
+ $sec =~ s/\\:/:/g;
+ $sec =~ s/&([a-zA-Z\_]+)/{\\it \1}/g;
+ $sec =~ s/->/\$\\rightarrow\$/g;
+ $sec =~ s/([0-9]+)\^([0-9]+)/\$\{\1\}\^\{\2\}\$/g;
+
+ $out = just_highlight($sec);
+ $out =~ s/_/\\_/g;
+
+ print $out;
+ print "\\end{rmfamily}\n";
+ }
+ print "\n";
+}
+
+
+# output in sgml DocBook
+sub output_sgml {
+ my %args = %{$_[0]};
+ my ($parameter, $section);
+ my $count;
+ my $id;
+
+ $id = $args{'module'}."-".$args{'function'};
+ $id =~ s/[^A-Za-z0-9]/-/g;
+
+ print "<refentry>\n";
+ print "<refmeta>\n";
+ print "<refentrytitle><phrase id=\"$id\">".$args{'function'}."</phrase></r
+efentrytitle>\n";
+ print "</refmeta>\n";
+ print "<refnamediv>\n";
+ print " <refname>".$args{'function'}."</refname>\n";
+ print " <refpurpose>\n";
+ print " ".$args{'purpose'}."\n";
+ print " </refpurpose>\n";
+ print "</refnamediv>\n";
+
+ print "<refsynopsisdiv>\n";
+ print " <title>Synopsis</title>\n";
+ print " <funcsynopsis>\n";
+ print " <funcdef>".$args{'functiontype'}." ";
+ print "<function>".$args{'function'}." ";
+ print "</function></funcdef>\n";
+
+# print "<refsect1>\n";
+# print " <title>Synopsis</title>\n";
+# print " <funcsynopsis>\n";
+# print " <funcdef>".$args{'functiontype'}." ";
+# print "<function>".$args{'function'}." ";
+# print "</function></funcdef>\n";
+
+ $count = 0;
+ if ($#{$args{'parameterlist'}} >= 0) {
+ foreach $parameter (@{$args{'parameterlist'}}) {
+ print " <paramdef>".$args{'parametertypes'}{$parameter};
+ print " <parameter>$parameter</parameter></paramdef>\n";
+ }
+ } else {
+ print " <void>\n";
+ }
+ print " </funcsynopsis>\n";
+ print "</refsynopsisdiv>\n";
+# print "</refsect1>\n";
+
+ # print parameters
+ print "<refsect1>\n <title>Arguments</title>\n";
+# print "<para>\nArguments\n";
+ if ($#{$args{'parameterlist'}} >= 0) {
+ print " <variablelist>\n";
+ foreach $parameter (@{$args{'parameterlist'}}) {
+ print " <varlistentry>\n <term><parameter>$parameter</parameter
+></term>\n";
+ print " <listitem>\n <para>\n";
+ $lineprefix=" ";
+ output_highlight($args{'parameters'}{$parameter});
+ print " </para>\n </listitem>\n </varlistentry>\n";
+ }
+ print " </variablelist>\n";
+ } else {
+ print " <para>\n None\n </para>\n";
+ }
+ print "</refsect1>\n";
+
+ # print out each section
+ $lineprefix=" ";
+ foreach $section (@{$args{'sectionlist'}}) {
+ print "<refsect1>\n <title>$section</title>\n <para>\n";
+# print "<para>\n$section\n";
+ if ($section =~ m/EXAMPLE/i) {
+ print "<example><para>\n";
+ }
+ output_highlight($args{'sections'}{$section});
+# print "</para>";
+ if ($section =~ m/EXAMPLE/i) {
+ print "</para></example>\n";
+ }
+ print " </para>\n</refsect1>\n";
+ }
+
+ print "\n\n";
+}
+
+##
+# output in man
+sub output_man {
+ my %args = %{$_[0]};
+ my ($parameter, $section);
+ my $count;
+
+ print ".TH \"$args{'function'}\" 3 \"$args{'sourceversion'}\" \"". $args{'
+module'} . "\" \"". $args{'module'} . "\"\n";
+
+ print ".SH NAME\n";
+
+ print $args{'function'}."\n";
+
+ print ".SH SYNOPSIS\n";
+ print ".B #include <". lc((split /_/, $args{'function'})[0]) . ".h>\n"
+ if $args{'includefuncprefix'};
+ print ".sp\n";
+ print ".BI \"".$args{'functiontype'}." ".$args{'function'}."(";
+ $count = 0;
+ foreach $parameter (@{$args{'parameterlist'}}) {
+ print $args{'parametertypes'}{$parameter}." \" ".$parameter." \"";
+ if ($count != $#{$args{'parameterlist'}}) {
+ $count++;
+ print ", ";
+ }
+ }
+ print ");\"\n";
+
+ print ".SH ARGUMENTS\n";
+ foreach $parameter (@{$args{'parameterlist'}}) {
+ print ".IP \"".$args{'parametertypes'}{$parameter}." ".$parameter."\"
+12\n";
+ output_highlight($args{'parameters'}{$parameter});
+ }
+ foreach $section (@{$args{'sectionlist'}}) {
+ print ".SH \"" . uc($section) . "\"\n";
+ output_highlight($args{'sections'}{$section});
+ }
+
+ if ($args{'bugsto'}) {
+ print ".SH \"REPORTING BUGS\"\n";
+ print "Report bugs to <". $args{'bugsto'} . ">.\n";
+ }
+
+ if ($args{'copyright'}) {
+ print ".SH COPYRIGHT\n";
+ print "Copyright \\(co ". $args{'copyright'} . ".\n";
+ if ($args{'verbatimcopying'}) {
+ print ".br\n";
+ print "Permission is granted to make and distribute verbatim copie
+s of this\n";
+ print "manual provided the copyright notice and this permission no
+tice are\n";
+ print "preserved on all copies.\n";
+ }
+ }
+
+ if ($args{'seeinfo'}) {
+ print ".SH \"SEE ALSO\"\n";
+ print "The full documentation for\n";
+ print ".B " . $args{'module'} . "\n";
+ print "is maintained as a Texinfo manual. If the\n";
+ print ".B info\n";
+ print "and\n";
+ print ".B " . $args{'module'} . "\n";
+ print "programs are properly installed at your site, the command\n";
+ print ".IP\n";
+ print ".B info " . $args{'seeinfo'} . "\n";
+ print ".PP\n";
+ print "should give you access to the complete manual.\n";
+ }
+}
+
+sub output_listfunc {
+ my %args = %{$_[0]};
+ print $args{'function'} . "\n";
+}
+
+##
+# output in text
+sub output_text {
+ my %args = %{$_[0]};
+ my ($parameter, $section);
+
+ print "Function = ".$args{'function'}."\n";
+ print " return type: ".$args{'functiontype'}."\n\n";
+ foreach $parameter (@{$args{'parameterlist'}}) {
+ print " ".$args{'parametertypes'}{$parameter}." ".$parameter."\n";
+ print " -> ".$args{'parameters'}{$parameter}."\n";
+ }
+ foreach $section (@{$args{'sectionlist'}}) {
+ print " $section:\n";
+ print " -> ";
+ output_highlight($args{'sections'}{$section});
+ }
+}
+
+##
+# generic output function - calls the right one based
+# on current output mode.
+sub output_function {
+# output_html(@_);
+ eval "output_".$output_mode."(\@_);";
+}
+
+
+##
+# takes a function prototype and spits out all the details
+# stored in the global arrays/hsahes.
+sub dump_function {
+ my $prototype = shift @_;
+
+ if ($prototype =~ m/^()([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/ ||
+ $prototype =~ m/^(\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/ ||
+ $prototype =~ m/^(\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/ ||
+ $prototype =~ m/^(\w+\s+\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/ ||
+ $prototype =~ m/^(\w+\s+\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/)
+ {
+ $return_type = $1;
+ $function_name = $2;
+ $args = $3;
+
+# print STDERR "ARGS = '$args'\n";
+
+ foreach $arg (split ',', $args) {
+ # strip leading/trailing spaces
+ $arg =~ s/^\s*//;
+ $arg =~ s/\s*$//;
+# print STDERR "SCAN ARG: '$arg'\n";
+ @args = split('\s', $arg);
+
+# print STDERR " -> @args\n";
+ $param = pop @args;
+# print STDERR " -> @args\n";
+ if ($param =~ m/^(\*+)(.*)/) {
+ $param = $2;
+ push @args, $1;
+ }
+ if ($param =~ m/^(.*)(\[\])$/) {
+ $param = $1;
+ push @args, $2;
+ }
+# print STDERR " :> @args\n";
+ $type = join " ", @args;
+
+ if ($parameters{$param} eq "" && $param != "void") {
+ $parameters{$param} = "-- undescribed --";
+ print STDERR "Warning($lineno): Function parameter '$param' no
+t described in '$function_name'\n";
+ }
+
+ push @parameterlist, $param;
+ $parametertypes{$param} = $type;
+
+# print STDERR "param = '$param', type = '$type'\n";
+ }
+ } else {
+ print STDERR "Error($lineno): cannot understand prototype: '$prototype
+'\n";
+ return;
+ }
+
+ if ($function_only==0 || defined($function_table{$function_name})) {
+ output_function({'function' => $function_name,
+ 'module' => $modulename,
+ 'sourceversion' => $sourceversion,
+ 'includefuncprefix' => $includefuncprefix,
+ 'bugsto' => $bugsto,
+ 'copyright' => $copyright,
+ 'verbatimcopying' => $verbatimcopying,
+ 'seeinfo' => $seeinfo,
+ 'functiontype' => $return_type,
+ 'parameterlist' => \@parameterlist,
+ 'parameters' => \%parameters,
+ 'parametertypes' => \%parametertypes,
+ 'sectionlist' => \@sectionlist,
+ 'sections' => \%sections,
+ 'purpose' => $function_purpose
+ });
+ }
+}
+
+######################################################################
+# main
+# states
+# 0 - normal code
+# 1 - looking for function name
+# 2 - scanning field start.
+# 3 - scanning prototype.
+$state = 0;
+$section = "";
+
+$doc_special = "\@\%\$\&";
+
+$doc_start = "^/\\*\\*\$";
+$doc_end = "\\*/";
+$doc_com = "\\s*\\*\\s*";
+$doc_func = $doc_com."(\\w+):?";
+$doc_sect = $doc_com."([".$doc_special."[:upper:]][\\w ]+):(.*)";
+$doc_content = $doc_com."(.*)";
+
+%constants = ();
+%parameters = ();
+@parameterlist = ();
+%sections = ();
+@sectionlist = ();
+
+$contents = "";
+$section_default = "Description"; # default section
+$section = $section_default;
+
+$lineno = 0;
+foreach $file (@ARGV) {
+ if (!open(IN,"<$file")) {
+ print STDERR "Error: Cannot open file $file\n";
+ next;
+ }
+ while (<IN>) {
+ $lineno++;
+
+ if ($state == 0) {
+ if (/$doc_start/o) {
+ $state = 1; # next line is always the function nam
+e
+ }
+ } elsif ($state == 1) { # this line is the function name (always)
+ if (/$doc_func/o) {
+ $function = $1;
+ $state = 2;
+ if (/-(.*)/) {
+ $function_purpose = $1;
+ } else {
+ $function_purpose = "";
+ }
+ if ($verbose) {
+ print STDERR "Info($lineno): Scanning doc for $function\n"
+;
+ }
+ } else {
+ print STDERR "WARN($lineno): Cannot understand $_ on line $lin
+eno",
+ " - I thought it was a doc line\n";
+ $state = 0;
+ }
+ } elsif ($state == 2) { # look for head: lines, and include content
+ if (/$doc_sect/o) {
+ $newsection = $1;
+ $newcontents = $2;
+
+ if ($contents ne "") {
+ dump_section($section, $contents);
+ $section = $section_default;
+ }
+
+ $contents = $newcontents;
+ if ($contents ne "") {
+ $contents .= "\n";
+ }
+ $section = $newsection;
+ } elsif (/$doc_end/) {
+
+ if ($contents ne "") {
+ dump_section($section, $contents);
+ $section = $section_default;
+ $contents = "";
+ }
+
+# print STDERR "end of doc comment, looking for prototype\n";
+ $prototype = "";
+ $state = 3;
+ } elsif (/$doc_content/) {
+ # miguel-style comment kludge, look for blank lines after
+ # @parameter line to signify start of description
+ if ($1 eq "" && $section =~ m/^@/) {
+ dump_section($section, $contents);
+ $section = $section_default;
+ $contents = "";
+ } else {
+ $contents .= $1."\n";
+ }
+ } else {
+ # i dont know - bad line? ignore.
+ print STDERR "WARNING($lineno): bad line: $_";
+ }
+ } elsif ($state == 3) { # scanning for function { (end of prototype)
+ if (m#\s*/\*\s+MACDOC\s*#io) {
+ # do nothing
+ }
+ elsif (/([^\{]*)/) {
+ $prototype .= $1;
+ }
+ if (/\{/) {
+ $prototype =~ s@/\*.*?\*/@@gos; # strip comments.
+ $prototype =~ s@[\r\n]+@ @gos; # strip newlines/cr's.
+ $prototype =~ s@^ +@@gos; # strip leading spaces
+ dump_function($prototype);
+
+ $function = "";
+ %constants = ();
+ %parameters = ();
+ %parametertypes = ();
+ @parameterlist = ();
+ %sections = ();
+ @sectionlist = ();
+ $prototype = "";
+
+ $state = 0;
+ }
+ }
+ }
+}
+
+
+
diff --git a/util/gen-dir-node b/util/gen-dir-node
new file mode 100755
index 0000000..262bdd7
--- /dev/null
+++ b/util/gen-dir-node
@@ -0,0 +1,212 @@
+#!/bin/sh
+# $Id: gen-dir-node,v 1.3 2004/04/11 17:56:47 karl Exp $
+# Generate the top-level Info node, given a directory of Info files
+# and (optionally) a skeleton file. The output will be suitable for a
+# top-level dir file. The skeleton file contains info topic names in the
+# order they should appear in the output. There are three special
+# lines that alter the behavior: a line consisting of just "--" causes
+# the next line to be echoed verbatim to the output. A line
+# containing just "%%" causes all the remaining filenames (wildcards
+# allowed) in the rest of the file to be ignored. A line containing
+# just "!!" exits the script when reached (unless preceded by a line
+# containing just "--"). Once the script reaches the end of the
+# skeleton file, it goes through the remaining files in the directory
+# in order, putting their entries at the end. The script will use the
+# ENTRY information in each info file if it exists. Otherwise it will
+# make a minimal entry.
+
+# sent by Jeffrey Osier <jeffrey@cygnus.com>, who thinks it came from
+# zoo@winternet.com (david d `zoo' zuhn)
+
+# modified 7 April 1995 by Joe Harrington <jh@tecate.gsfc.nasa.gov> to
+# take special flags
+
+INFODIR=$1
+if [ $# = 2 ] ; then
+ SKELETON=$2
+else
+ SKELETON=/dev/null
+fi
+
+skip=
+
+if [ $# -gt 2 ] ; then
+ echo usage: $0 info-directory [ skeleton-file ] 1>&2
+ exit 1
+elif [ -z "${INFODIR}" ] ; then
+ INFODIR="%%DEFAULT_INFO_DIR%%"
+else
+ true
+fi
+
+if [ ! -d ${INFODIR} ] ; then
+ echo "$0: first argument must specify a directory"
+ exit 1
+fi
+
+### output the dir header
+echo "-*- Text -*-"
+echo "This file was generated automatically by $0."
+echo "This version was generated on `date`"
+echo "by `whoami`@`hostname` for `(cd ${INFODIR}; pwd)`"
+
+cat << moobler
+\$Id: gen-dir-node,v 1.3 2004/04/11 17:56:47 karl Exp $
+This is the file .../info/dir, which contains the topmost node of the
+Info hierarchy. The first time you invoke Info you start off
+looking at that node, which is (dir)Top.
+
+File: dir Node: Top This is the top of the INFO tree
+
+ This (the Directory node) gives a menu of major topics.
+ Typing "q" exits, "?" lists all Info commands, "d" returns here,
+ "h" gives a primer for first-timers,
+ "mEmacs<Return>" visits the Emacs topic, etc.
+
+ In Emacs, you can click mouse button 2 on a menu item or cross reference
+ to select it.
+
+* Menu: The list of major topics begins on the next line.
+
+moobler
+
+### go through the list of files in the skeleton. If an info file
+### exists, grab the ENTRY information from it. If an entry exists
+### use it, otherwise create a minimal dir entry.
+###
+### Then remove that file from the list of existing files. If any
+### additional files remain (ones that don't have a skeleton entry),
+### then generate entries for those in the same way, putting the info for
+### those at the end....
+
+infofiles=`(cd ${INFODIR}; /bin/ls | grep -v '\-[0-9]*$' | egrep -v '^dir$|^dir\.info$|^dir\.orig$')`
+
+# echoing gets clobbered by backquotes; we do it the hard way...
+lines=`wc $SKELETON | awk '{print $1}'`
+line=1
+while [ $lines -ge $line ] ; do
+ # Read one line from the file. This is so that we can echo lines with
+ # whitespace and quoted characters in them.
+ fileline=`awk NR==$line $SKELETON`
+
+ # flag fancy features
+ if [ ! -z "$echoline" ] ; then # echo line
+ echo "$fileline"
+ fileline=
+ echoline=
+ elif [ "${fileline}" = "--" ] ; then # should we echo the next line?
+ echoline=1
+ elif [ "${fileline}" = "%%" ] ; then # eliminate remaining files from dir?
+ skip=1
+ elif [ "${fileline}" = "!!" ] ; then # quit now
+ exit 0
+ fi
+
+ # handle files if they exist
+ for file in $fileline"" ; do # expand wildcards ("" handles blank lines)
+
+ fname=
+
+ if [ -z "$echoline" ] && [ ! -z "$file" ] ; then
+ # Find the file to operate upon. Check both possible names.
+ infoname=`echo $file | sed 's/\.info$//'`
+ noext=
+ ext=
+ if [ -f ${INFODIR}/$infoname ] ; then
+ noext=$infoname
+ fi
+ if [ -f ${INFODIR}/${infoname}.info ] ; then
+ ext=${infoname}.info
+ fi
+
+ # If it exists with both names take what was said in the file.
+ if [ ! -z "$ext" ] && [ ! -z "$noext" ]; then
+ fname=$file
+ warn="### Warning: $ext and $noext both exist! Using ${file}. ###"
+ elif [ ! -z "${noext}${ext}" ]; then
+ # just take the name if it exists only once
+ fname=${noext}${ext}
+ fi
+
+ # if we found something and aren't skipping, do the entry
+ if [ ! -z "$fname" ] ; then
+ if [ -z "$skip" ] ; then
+
+ if [ ! -z "$warn" ] ; then # issue any warning
+ echo $warn
+ warn=
+ fi
+
+ entry=`sed -e '1,/START-INFO-DIR-ENTRY/d' \
+ -e '/END-INFO-DIR-ENTRY/,$d' ${INFODIR}/$fname`
+ if [ ! -z "${entry}" ] ; then
+ echo "${entry}"
+ else
+ echo "* ${infoname}: (${infoname})."
+ fi
+ fi
+
+ # remove the name from the directory listing
+ infofiles=`echo "" ${infofiles} "" | sed -e "s/ ${fname} / /" -e "s/ / /g"`
+
+ fi
+
+ fi
+
+ done
+
+ line=`expr $line + 1`
+done
+
+if [ -z "${infofiles}" ] ; then
+ exit 0
+elif [ $lines -gt 0 ]; then
+ echo
+fi
+
+# Sort remaining files by INFO-DIR-SECTION.
+prevsect=
+filesectdata=`(cd ${INFODIR}; fgrep INFO-DIR-SECTION /dev/null ${infofiles} | \
+ fgrep -v 'INFO-DIR-SECTION Miscellaneous' | \
+ sort -t: -k2 -k1 | tr ' ' '_')`
+for sectdata in ${filesectdata}; do
+ file=`echo ${sectdata} | cut -d: -f1`
+ section=`sed -n -e 's/^INFO-DIR-SECTION //p' ${INFODIR}/${file}`
+ infofiles=`echo "" ${infofiles} "" | sed -e "s/ ${file} / /" -e "s/ / /g"`
+
+ if [ "${prevsect}" != "${section}" ] ; then
+ if [ ! -z "${prevsect}" ] ; then
+ echo ""
+ fi
+ echo "${section}"
+ prevsect="${section}"
+ fi
+
+ infoname=`echo $file | sed 's/\.info$//'`
+ entry=`sed -e '1,/START-INFO-DIR-ENTRY/d' \
+ -e '/END-INFO-DIR-ENTRY/,$d' ${INFODIR}/${file}`
+ if [ ! -z "${entry}" ] ; then
+ echo "${entry}"
+ elif [ ! -d "${INFODIR}/${file}" ] ; then
+ echo "* ${infoname}: (${infoname})."
+ fi
+done
+
+# Process miscellaneous files.
+for file in ${infofiles}; do
+ if [ ! -z "${prevsect}" ] ; then
+ echo ""
+ echo "Miscellaneous"
+ prevsect=""
+ fi
+
+ infoname=`echo $file | sed 's/\.info$//'`
+ entry=`sed -e '1,/START-INFO-DIR-ENTRY/d' \
+ -e '/END-INFO-DIR-ENTRY/,$d' ${INFODIR}/${file}`
+
+ if [ ! -z "${entry}" ] ; then
+ echo "${entry}"
+ elif [ ! -d "${INFODIR}/${file}" ] ; then
+ echo "* ${infoname}: (${infoname})."
+ fi
+done
diff --git a/util/gendocs.sh b/util/gendocs.sh
new file mode 100755
index 0000000..aded2c4
--- /dev/null
+++ b/util/gendocs.sh
@@ -0,0 +1,351 @@
+#!/bin/sh
+# gendocs.sh -- generate a GNU manual in many formats. This script is
+# mentioned in maintain.texi. See the help message below for usage details.
+
+scriptversion=2008-03-05.14
+
+# Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008
+# 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/>.
+#
+# Original author: Mohit Agarwal.
+# Send bug reports and any other correspondence to bug-texinfo@gnu.org.
+
+prog=`basename "$0"`
+srcdir=`pwd`
+
+scripturl="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs.sh"
+templateurl="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs_template"
+
+: ${SETLANG="env LANG= LC_MESSAGES= LC_ALL= LANGUAGE="}
+: ${MAKEINFO="makeinfo"}
+: ${TEXI2DVI="texi2dvi -t @finalout"}
+: ${DVIPS="dvips"}
+: ${DOCBOOK2HTML="docbook2html"}
+: ${DOCBOOK2PDF="docbook2pdf"}
+: ${DOCBOOK2PS="docbook2ps"}
+: ${DOCBOOK2TXT="docbook2txt"}
+: ${GENDOCS_TEMPLATE_DIR="."}
+: ${TEXI2HTML="texi2html"}
+unset CDPATH
+unset use_texi2html
+
+version="gendocs.sh $scriptversion
+
+Copyright (C) 2007 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: $prog [OPTION]... PACKAGE MANUAL-TITLE
+
+Generate various output formats from PACKAGE.texinfo (or .texi or .txi) source.
+See the GNU Maintainers document for a more extensive discussion:
+ http://www.gnu.org/prep/maintain_toc.html
+
+Options:
+ -o OUTDIR write files into OUTDIR, instead of manual/.
+ --docbook convert to DocBook too (xml, txt, html, pdf and ps).
+ --html ARG pass indicated ARG to makeinfo or texi2html for HTML targets.
+ --texi2html use texi2html to generate HTML targets.
+ --help display this help and exit successfully.
+ --version display version information and exit successfully.
+
+Simple example: $prog emacs \"GNU Emacs Manual\"
+
+Typical sequence:
+ cd YOURPACKAGESOURCE/doc
+ wget \"$scripturl\"
+ wget \"$templateurl\"
+ $prog YOURMANUAL \"GNU YOURMANUAL - One-line description\"
+
+Output will be in a new subdirectory \"manual\" (by default, use -o OUTDIR
+to override). Move all the new files into your web CVS tree, as
+explained in the Web Pages node of maintain.texi.
+
+MANUAL-TITLE is included as part of the HTML <title> of the overall
+manual/index.html file. It should include the name of the package being
+documented. manual/index.html is created by substitution from the file
+$GENDOCS_TEMPLATE_DIR/gendocs_template. (Feel free to modify the
+generic template for your own purposes.)
+
+If you have several manuals, you'll need to run this script several
+times with different YOURMANUAL values, specifying a different output
+directory with -o each time. Then write (by hand) an overall index.html
+with links to them all.
+
+If a manual's texinfo sources are spread across several directories,
+first copy or symlink all Texinfo sources into a single directory.
+(Part of the script's work is to make a tar.gz of the sources.)
+
+You can set the environment variables MAKEINFO, TEXI2DVI, and DVIPS to
+control the programs that get executed, and GENDOCS_TEMPLATE_DIR to
+control where the gendocs_template file is looked for. (With --docbook,
+the environment variables DOCBOOK2HTML, DOCBOOK2PDF, DOCBOOK2PS, and
+DOCBOOK2TXT are also respected.)
+
+By default, makeinfo is run in the default (English) locale, since
+that's the language of most Texinfo manuals. If you happen to have a
+non-English manual and non-English web site, check the SETLANG setting
+in the source.
+
+Email bug reports or enhancement requests to bug-texinfo@gnu.org.
+"
+
+calcsize()
+{
+ size=`ls -ksl $1 | awk '{print $1}'`
+ echo $size
+}
+
+outdir=manual
+html=
+PACKAGE=
+MANUAL_TITLE=
+
+while test $# -gt 0; do
+ case $1 in
+ --help) echo "$usage"; exit 0;;
+ --version) echo "$version"; exit 0;;
+ -o) shift; outdir=$1;;
+ --docbook) docbook=yes;;
+ --html) shift; html=$1;;
+ --texi2html) use_texi2html=1;;
+ -*)
+ echo "$0: Unknown or ambiguous option \`$1'." >&2
+ echo "$0: Try \`--help' for more information." >&2
+ exit 1;;
+ *)
+ if test -z "$PACKAGE"; then
+ PACKAGE=$1
+ elif test -z "$MANUAL_TITLE"; then
+ MANUAL_TITLE=$1
+ else
+ echo "$0: extra non-option argument \`$1'." >&2
+ exit 1
+ fi;;
+ esac
+ shift
+done
+
+if test -s "$srcdir/$PACKAGE.texinfo"; then
+ srcfile=$srcdir/$PACKAGE.texinfo
+elif test -s "$srcdir/$PACKAGE.texi"; then
+ srcfile=$srcdir/$PACKAGE.texi
+elif test -s "$srcdir/$PACKAGE.txi"; then
+ srcfile=$srcdir/$PACKAGE.txi
+else
+ echo "$0: cannot find .texinfo or .texi or .txi for $PACKAGE in $srcdir." >&2
+ exit 1
+fi
+
+if test ! -r $GENDOCS_TEMPLATE_DIR/gendocs_template; then
+ echo "$0: cannot read $GENDOCS_TEMPLATE_DIR/gendocs_template." >&2
+ echo "$0: it is available from $templateurl." >&2
+ exit 1
+fi
+
+case $outdir in
+ /*) dotdot_outdir="$outdir";;
+ *) dotdot_outdir="../$outdir";;
+esac
+
+echo Generating output formats for $srcfile
+
+cmd="$SETLANG $MAKEINFO -o $PACKAGE.info \"$srcfile\""
+echo "Generating info files... ($cmd)"
+eval "$cmd"
+mkdir -p $outdir/
+tar czf $outdir/$PACKAGE.info.tar.gz $PACKAGE.info*
+info_tgz_size=`calcsize $outdir/$PACKAGE.info.tar.gz`
+# do not mv the info files, there's no point in having them available
+# separately on the web.
+
+cmd="${TEXI2DVI} \"$srcfile\""
+echo "Generating dvi ... ($cmd)"
+eval "$cmd"
+
+# now, before we compress dvi:
+echo Generating postscript...
+${DVIPS} $PACKAGE -o
+gzip -f -9 $PACKAGE.ps
+ps_gz_size=`calcsize $PACKAGE.ps.gz`
+mv $PACKAGE.ps.gz $outdir/
+
+# compress/finish dvi:
+gzip -f -9 $PACKAGE.dvi
+dvi_gz_size=`calcsize $PACKAGE.dvi.gz`
+mv $PACKAGE.dvi.gz $outdir/
+
+cmd="${TEXI2DVI} --pdf \"$srcfile\""
+echo "Generating pdf ... ($cmd)"
+eval "$cmd"
+pdf_size=`calcsize $PACKAGE.pdf`
+mv $PACKAGE.pdf $outdir/
+
+cmd="$SETLANG $MAKEINFO -o $PACKAGE.txt --no-split --no-headers \"$srcfile\""
+echo "Generating ASCII... ($cmd)"
+eval "$cmd"
+ascii_size=`calcsize $PACKAGE.txt`
+gzip -f -9 -c $PACKAGE.txt >$outdir/$PACKAGE.txt.gz
+ascii_gz_size=`calcsize $outdir/$PACKAGE.txt.gz`
+mv $PACKAGE.txt $outdir/
+
+html_split() {
+ cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html --split=$1 $html --node-files \"$srcfile\""
+ echo "Generating html by $1... ($cmd)"
+ eval "$cmd"
+ split_html_dir=$PACKAGE.html
+ (
+ cd ${split_html_dir} || exit 1
+ ln -sf ${PACKAGE}.html index.html
+ tar -czf $dotdot_outdir/${PACKAGE}.html_$1.tar.gz -- *.html
+ )
+ eval html_$1_tgz_size=`calcsize $outdir/${PACKAGE}.html_$1.tar.gz`
+ rm -f $outdir/html_$1/*.html
+ mkdir -p $outdir/html_$1/
+ mv ${split_html_dir}/*.html $outdir/html_$1/
+ rmdir ${split_html_dir}
+}
+
+if test -z "$use_texi2html"; then
+ cmd="$SETLANG $MAKEINFO --no-split --html -o $PACKAGE.html $html \"$srcfile\""
+ echo "Generating monolithic html... ($cmd)"
+ rm -rf $PACKAGE.html # in case a directory is left over
+ eval "$cmd"
+ html_mono_size=`calcsize $PACKAGE.html`
+ gzip -f -9 -c $PACKAGE.html >$outdir/$PACKAGE.html.gz
+ html_mono_gz_size=`calcsize $outdir/$PACKAGE.html.gz`
+ mv $PACKAGE.html $outdir/
+
+ cmd="$SETLANG $MAKEINFO --html -o $PACKAGE.html $html \"$srcfile\""
+ echo "Generating html by node... ($cmd)"
+ eval "$cmd"
+ split_html_dir=$PACKAGE.html
+ (
+ cd ${split_html_dir} || exit 1
+ tar -czf $dotdot_outdir/${PACKAGE}.html_node.tar.gz -- *.html
+ )
+ html_node_tgz_size=`calcsize $outdir/${PACKAGE}.html_node.tar.gz`
+ rm -f $outdir/html_node/*.html
+ mkdir -p $outdir/html_node/
+ mv ${split_html_dir}/*.html $outdir/html_node/
+ rmdir ${split_html_dir}
+else
+ cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $html \"$srcfile\""
+ echo "Generating monolithic html... ($cmd)"
+ rm -rf $PACKAGE.html # in case a directory is left over
+ eval "$cmd"
+ html_mono_size=`calcsize $PACKAGE.html`
+ gzip -f -9 -c $PACKAGE.html >$outdir/$PACKAGE.html.gz
+ html_mono_gz_size=`calcsize $outdir/$PACKAGE.html.gz`
+ mv $PACKAGE.html $outdir/
+
+ html_split node
+ html_split chapter
+ html_split section
+fi
+
+echo Making .tar.gz for sources...
+srcfiles=`ls *.texinfo *.texi *.txi *.eps 2>/dev/null`
+tar cvzfh $outdir/$PACKAGE.texi.tar.gz $srcfiles
+texi_tgz_size=`calcsize $outdir/$PACKAGE.texi.tar.gz`
+
+if test -n "$docbook"; then
+ cmd="$SETLANG $MAKEINFO -o - --docbook \"$srcfile\" > ${srcdir}/$PACKAGE-db.xml"
+ echo "Generating docbook XML... $(cmd)"
+ eval "$cmd"
+ docbook_xml_size=`calcsize $PACKAGE-db.xml`
+ gzip -f -9 -c $PACKAGE-db.xml >$outdir/$PACKAGE-db.xml.gz
+ docbook_xml_gz_size=`calcsize $outdir/$PACKAGE-db.xml.gz`
+ mv $PACKAGE-db.xml $outdir/
+
+ cmd="${DOCBOOK2HTML} -o $split_html_db_dir ${outdir}/$PACKAGE-db.xml"
+ echo "Generating docbook HTML... ($cmd)"
+ eval "$cmd"
+ split_html_db_dir=html_node_db
+ (
+ cd ${split_html_db_dir} || exit 1
+ tar -czf $dotdot_outdir/${PACKAGE}.html_node_db.tar.gz -- *.html
+ )
+ html_node_db_tgz_size=`calcsize $outdir/${PACKAGE}.html_node_db.tar.gz`
+ rm -f $outdir/html_node_db/*.html
+ mkdir -p $outdir/html_node_db
+ mv ${split_html_db_dir}/*.html $outdir/html_node_db/
+ rmdir ${split_html_db_dir}
+
+ cmd="${DOCBOOK2TXT} ${outdir}/$PACKAGE-db.xml"
+ echo "Generating docbook ASCII... ($cmd)"
+ eval "$cmd"
+ docbook_ascii_size=`calcsize $PACKAGE-db.txt`
+ mv $PACKAGE-db.txt $outdir/
+
+ cmd="${DOCBOOK2PS} ${outdir}/$PACKAGE-db.xml"
+ echo "Generating docbook PS... $(cmd)"
+ eval "$cmd"
+ gzip -f -9 -c $PACKAGE-db.ps >$outdir/$PACKAGE-db.ps.gz
+ docbook_ps_gz_size=`calcsize $outdir/$PACKAGE-db.ps.gz`
+ mv $PACKAGE-db.ps $outdir/
+
+ cmd="${DOCBOOK2PDF} ${outdir}/$PACKAGE-db.xml"
+ echo "Generating docbook PDF... ($cmd)"
+ eval "$cmd"
+ docbook_pdf_size=`calcsize $PACKAGE-db.pdf`
+ mv $PACKAGE-db.pdf $outdir/
+fi
+
+echo Writing index file...
+if test -z "$use_texi2html"; then
+ CONDS="/%%IF *HTML_SECTION%%/,/%%ENDIF *HTML_SECTION%%/d;\
+ /%%IF *HTML_CHAPTER%%/,/%%ENDIF *HTML_CHAPTER%%/d"
+else
+ CONDS="/%%ENDIF.*%%/d;/%%IF *HTML_SECTION%%/d;/%%IF *HTML_CHAPTER%%/d"
+fi
+curdate=`$SETLANG date '+%B %d, %Y'`
+sed \
+ -e "s!%%TITLE%%!$MANUAL_TITLE!g" \
+ -e "s!%%DATE%%!$curdate!g" \
+ -e "s!%%PACKAGE%%!$PACKAGE!g" \
+ -e "s!%%HTML_MONO_SIZE%%!$html_mono_size!g" \
+ -e "s!%%HTML_MONO_GZ_SIZE%%!$html_mono_gz_size!g" \
+ -e "s!%%HTML_NODE_TGZ_SIZE%%!$html_node_tgz_size!g" \
+ -e "s!%%HTML_SECTION_TGZ_SIZE%%!$html_section_tgz_size!g" \
+ -e "s!%%HTML_CHAPTER_TGZ_SIZE%%!$html_chapter_tgz_size!g" \
+ -e "s!%%INFO_TGZ_SIZE%%!$info_tgz_size!g" \
+ -e "s!%%DVI_GZ_SIZE%%!$dvi_gz_size!g" \
+ -e "s!%%PDF_SIZE%%!$pdf_size!g" \
+ -e "s!%%PS_GZ_SIZE%%!$ps_gz_size!g" \
+ -e "s!%%ASCII_SIZE%%!$ascii_size!g" \
+ -e "s!%%ASCII_GZ_SIZE%%!$ascii_gz_size!g" \
+ -e "s!%%TEXI_TGZ_SIZE%%!$texi_tgz_size!g" \
+ -e "s!%%DOCBOOK_HTML_NODE_TGZ_SIZE%%!$html_node_db_tgz_size!g" \
+ -e "s!%%DOCBOOK_ASCII_SIZE%%!$docbook_ascii_size!g" \
+ -e "s!%%DOCBOOK_PS_GZ_SIZE%%!$docbook_ps_gz_size!g" \
+ -e "s!%%DOCBOOK_PDF_SIZE%%!$docbook_pdf_size!g" \
+ -e "s!%%DOCBOOK_XML_SIZE%%!$docbook_xml_size!g" \
+ -e "s!%%DOCBOOK_XML_GZ_SIZE%%!$docbook_xml_gz_size!g" \
+ -e "s,%%SCRIPTURL%%,$scripturl,g" \
+ -e "s!%%SCRIPTNAME%%!$prog!g" \
+ -e "$CONDS" \
+$GENDOCS_TEMPLATE_DIR/gendocs_template >$outdir/index.html
+
+echo "Done! See $outdir/ subdirectory for new files."
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/util/gendocs_template b/util/gendocs_template
new file mode 100644
index 0000000..abf3b1f
--- /dev/null
+++ b/util/gendocs_template
@@ -0,0 +1,100 @@
+<!--#include virtual="/server/header.html" -->
+<title>%%TITLE%% - GNU Project - Free Software Foundation (FSF)</title>
+<!--#include virtual="/server/banner.html" -->
+<h2>%%TITLE%%</h2>
+
+<!-- This document is in XML, and xhtml 1.0 -->
+<!-- Please make sure to properly nest your tags -->
+<!-- and ensure that your final document validates -->
+<!-- consistent with W3C xhtml 1.0 and CSS standards -->
+<!-- See validator.w3.org -->
+
+<address>Free Software Foundation</address>
+<address>last updated %%DATE%%</address>
+
+<p>This manual (%%PACKAGE%%) is available in the following formats:</p>
+
+<ul>
+<li><a href="%%PACKAGE%%.html">HTML
+ (%%HTML_MONO_SIZE%%K bytes)</a> - entirely on one web page.</li>
+<li><a href="html_node/index.html">HTML</a> - with one web page per
+ node.</li>
+%%IF HTML_SECTION%%
+<li><a href="html_section/index.html">HTML</a> - with one web page per
+ section.</li>
+%%ENDIF HTML_SECTION%%
+%%IF HTML_CHAPTER%%
+<li><a href="html_chapter/index.html">HTML</a> - with one web page per
+ chapter.</li>
+%%ENDIF HTML_CHAPTER%%
+<li><a href="%%PACKAGE%%.html.gz">HTML compressed
+ (%%HTML_MONO_GZ_SIZE%%K gzipped characters)</a> - entirely on
+ one web page.</li>
+<li><a href="%%PACKAGE%%.html_node.tar.gz">HTML compressed
+ (%%HTML_NODE_TGZ_SIZE%%K gzipped tar file)</a> -
+ with one web page per node.</li>
+%%IF HTML_SECTION%%
+<li><a href="%%PACKAGE%%.html_section.tar.gz">HTML compressed
+ (%%HTML_SECTION_TGZ_SIZE%%K gzipped tar file)</a> -
+ with one web page per section.</li>
+%%ENDIF HTML_SECTION%%
+%%IF HTML_CHAPTER%%
+<li><a href="%%PACKAGE%%.html_chapter.tar.gz">HTML compressed
+ (%%HTML_CHAPTER_TGZ_SIZE%%K gzipped tar file)</a> -
+ with one web page per chapter.</li>
+%%ENDIF HTML_CHAPTER%%
+<li><a href="%%PACKAGE%%.info.tar.gz">Info document
+ (%%INFO_TGZ_SIZE%%K bytes gzipped tar file)</a>.</li>
+<li><a href="%%PACKAGE%%.txt">ASCII text
+ (%%ASCII_SIZE%%K bytes)</a>.</li>
+<li><a href="%%PACKAGE%%.txt.gz">ASCII text compressed
+ (%%ASCII_GZ_SIZE%%K bytes gzipped)</a>.</li>
+<li><a href="%%PACKAGE%%.dvi.gz">TeX dvi file
+ (%%DVI_GZ_SIZE%%K bytes gzipped)</a>.</li>
+<li><a href="%%PACKAGE%%.ps.gz">PostScript file
+ (%%PS_GZ_SIZE%%K bytes gzipped)</a>.</li>
+<li><a href="%%PACKAGE%%.pdf">PDF file
+ (%%PDF_SIZE%%K bytes)</a>.</li>
+<li><a href="%%PACKAGE%%.texi.tar.gz">Texinfo source
+ (%%TEXI_TGZ_SIZE%%K bytes gzipped tar file).</a></li>
+</ul>
+
+<p>You can <a href="http://shop.fsf.org/">buy printed copies of
+some manuals</a> (among other items) from the Free Software Foundation;
+this helps support FSF activities.</p>
+
+<p>(This page generated by the <a href="%%SCRIPTURL%%">%%SCRIPTNAME%%
+script</a>.)</p>
+
+<!-- If needed, change the copyright block at the bottom. In general, -->
+<!-- all pages on the GNU web server should have the section about -->
+<!-- verbatim copying. Please do NOT remove this without talking -->
+<!-- with the webmasters first. -->
+<!-- Please make sure the copyright date is consistent with the document -->
+<!-- and that it is like this "2001, 2002" not this "2001-2002." -->
+</div><!-- for id="content", starts in the include above -->
+<!--#include virtual="/server/footer.html" -->
+<div id="footer">
+
+<p>
+Please send FSF &amp; GNU inquiries to
+<a href="mailto:gnu@gnu.org"><em>gnu@gnu.org</em></a>.
+There are also <a href="/contact/">other ways to contact</a>
+the FSF.
+<br />
+Please send broken links and other corrections or suggestions to
+<a href="mailto:webmasters@gnu.org"><em>webmasters@gnu.org</em></a>.
+</p>
+
+<p>
+Copyright &copy; 2008 Free Software Foundation, Inc.,
+</p>
+<address>51 Franklin Street, Fifth Floor, Boston, MA 02111, USA</address>
+<p>Verbatim copying and distribution of this entire article is
+permitted in any medium, provided this notice is preserved.
+</p>
+
+</div>
+</div>
+</body>
+</html>
diff --git a/util/infosrch b/util/infosrch
new file mode 100755
index 0000000..af4a9a6
--- /dev/null
+++ b/util/infosrch
@@ -0,0 +1,104 @@
+#!/usr/local/bin/perl -w
+# $Id: infosrch,v 1.2 2004/04/11 17:56:47 karl Exp $
+# infosrch does a regex search on an info manual.
+# By Harry Putnam <reader@newsguy.com>.
+
+($myscript = $0) =~ s:^.*/::;
+$six = '';
+
+if($ARGV[0] eq "help"){
+ &usage;
+ exit;
+}
+if($ARGV[0] eq "-e"){
+ shift;
+ $six = "true";
+}
+if(!$ARGV[1]){
+ &usage;
+ exit;
+}
+
+$target = shift;
+$regex = shift;
+
+$shell_proc = "info --output - --subnodes 2>/dev/null $target";
+
+open(SHELL_PROC," $shell_proc|");
+while(<SHELL_PROC>){
+ chomp;
+ push @lines,$_;
+}
+close(SHELL_PROC);
+$cnt = 0;
+for(@lines){
+ if(/$regex/ && !$six){
+ print "$target\n $lines[($cnt-1)]\n<$cnt> $lines[$cnt]\n $lines[($cnt+1)]\n";
+ print "-- \n";
+ }elsif(/$regex/ && $six){
+ print "$target\n";
+ if($lines[($cnt-6)]){
+ print " $lines[($cnt-6)]\n";
+ }
+ if($lines[($cnt-5)]){
+ print " $lines[($cnt-5)]\n";
+ }
+ if($lines[($cnt-4)]){
+ print " $lines[($cnt-4)]\n";
+ }
+ if($lines[($cnt-3)]){
+ print " $lines[($cnt-3)]\n";
+ }
+ if($lines[($cnt-2)]){
+ print " $lines[($cnt-2)]\n";
+ }
+ if($lines[($cnt-1)]){
+ print " $lines[($cnt-1)]\n";
+ }
+ if($lines[$cnt]){
+ print "$cnt $lines[$cnt]\n";
+ }
+ if($lines[($cnt+1)]){
+ print " $lines[($cnt+1)]\n";
+ }
+ if($lines[($cnt+2)]){
+ print " $lines[($cnt+2)]\n";
+ }
+ if($lines[($cnt+3)]){
+ print " $lines[($cnt+3)]\n";
+ }
+ if($lines[($cnt+4)]){
+ print " $lines[($cnt+4)]\n";
+ }
+ if($lines[($cnt+5)]){
+ print " $lines[($cnt+5)]\n";
+ }
+ if($lines[($cnt+6)]){
+ print " $lines[($cnt+6)]\n";
+ }
+ print "-- \n";
+ }
+ $cnt++;
+}
+
+sub usage {
+ print <<EOM;
+
+Purpose: Extract full text from info node and search it by regex
+Usage: $myscript [-e] TARGET REGEX
+
+Where TARGET is an info node such as `emacs', `bash' etc, and
+REGEX is what you want to find in it.
+
+The -e flag is not required but if used then 6 lines preceding and six
+lines following any hits will be printed. The default (with no -e flag)
+is to print one line before and after.
+
+The output has the line number prepended to the line containing the
+actual regex.
+
+Info command used:
+ info --output - --subnodes 2>/dev/null TARGET
+
+EOM
+}
diff --git a/util/install-info-html b/util/install-info-html
new file mode 100644
index 0000000..4d10295
--- /dev/null
+++ b/util/install-info-html
@@ -0,0 +1,157 @@
+#!@BASH@
+# $Id: install-info-html,v 1.3 2004/04/11 17:56:47 karl Exp $
+
+name=install-info-html
+version=1.0
+
+all=
+index_dir=.
+
+#
+# debugging
+#
+debug_echo=:
+
+
+#
+# print usage
+#
+function help ()
+{
+ cat << EOF
+$name $version
+Install HTML info document.
+
+Usage: $name [OPTION]... [DOCUMENT-DIR]...
+
+Options:
+ -a,--all assume all subdirectories of index to be DOCUMENT-DIRs
+ -d,--dir=DIR set index directory to DIR (default=.)
+ -D,--debug print debugging info
+ -h,--help this help text
+ -v,--version show version
+EOF
+}
+
+
+function cleanup ()
+{
+ $debug_echo "cleaning ($?)..."
+}
+
+trap cleanup 0 9 15
+
+#
+# Find command line options and switches
+#
+
+# "x:" x takes argument
+#
+options="adhvW:"
+#
+# ugh, "\-" is a hack to support long options
+# must be in double quotes for bash-2.0
+
+while getopts "\-:$options" O
+do
+ $debug_echo "O: \`$O'"
+ $debug_echo "arg: \`$OPTARG'"
+ case $O in
+ a)
+ all=yes
+ ;;
+ D)
+ [ "$debug_echo" = "echo" ] && set -x
+ debug_echo=echo
+ ;;
+ h)
+ help;
+ exit 0
+ ;;
+ v)
+ echo $name $version
+ exit 0
+ ;;
+ d)
+ index_dir=$OPTARG
+ ;;
+ # a long option!
+ -)
+ case "$OPTARG" in
+ a*|-a*)
+ all=yes
+ ;;
+ de*|-de*)
+ [ "$debug_echo" = "echo" ] && set -x
+ debug_echo=echo
+ ;;
+ h*|-h*)
+ help;
+ exit 0
+ ;;
+ di*|-di*)
+ index_dir="`expr \"$OPTARG\" ':' '[^=]*=\(.*\)'`"
+ ;;
+ version|-version)
+ echo $name $version
+ exit 0
+ ;;
+ *|-*)
+ echo "$0: invalid option -- \"$OPTARG\""
+ help;
+ exit -1
+ ;;
+ esac
+ esac
+done
+shift `expr $OPTIND - 1`
+
+#
+# Input file name
+#
+if [ -z "$all" ] && [ -z "$1" ]; then
+ help
+ echo "$name: No HTML documents given"
+ exit 2
+fi
+
+if [ -n "$all" ] && [ -n "$1" ]; then
+ echo "$name: --all specified, ignoring DIRECTORY-DIRs"
+fi
+
+if [ -n "$all" ]; then
+ document_dirs=`/bin/ls -d1 $index_dir`
+else
+ document_dirs=$*
+fi
+
+index_file=$index_dir/index.html
+rm -f $index_file
+echo -n "$name: Writing index: $index_file..."
+
+# head
+cat >> $index_file <<EOF
+<html>
+<head><title>Info documentation index</title></head>
+<body>
+<h1>Info documentation index</h1>
+This is the directory file \`index.html' a.k.a. \`DIR', which contains the
+topmost node of the HTML Info hierarchy.
+<p>
+This is all very much Work in Progress (WiP).
+<p>
+<ul>
+EOF
+
+#list
+for i in $document_dirs; do
+ echo "<li> <a href=\"$i/$i.html\">$i</a></li>"
+done >> $index_file
+
+# foot
+cat >> $index_file <<EOF
+</ul>
+</body>
+</html>
+EOF
+echo
diff --git a/util/latex2html.test b/util/latex2html.test
new file mode 100755
index 0000000..d52bf2f
--- /dev/null
+++ b/util/latex2html.test
@@ -0,0 +1,79 @@
+#! /bin/sh
+# Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+#
+# This file is part of GNU Texinfo.
+#
+# GNU Texinfo is free software; you can redistribute it and/or modify
+# 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 Texinfo is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+required='hevea'
+
+. ./defs || exit 1
+
+set -e
+
+# Force the creation of auxiliary files.
+# Force it to be big enough to trigger the info file splitting.
+{
+ echo "\tableofcontents"
+ for section in 1 2 3 4 5 6
+ do
+ echo "\section{$i}"
+ for subsection in 1 2 3 4 5 6
+ do
+ echo "\subsection{$i}"
+ echo "$latex_paragraph"
+ done
+ done
+} |
+create_input_tex
+
+
+# run_hevea_check FORMAT OPTIONS
+# ------------------------------
+run_hevea_check ()
+{
+ title "$@"
+
+ format="$1"
+ shift
+
+ # Testing the local build mode.
+ TEXI2DVI_pass --batch --$format "$@" input.tex
+
+ # Compute the expected output.
+ outfiles=input.$out
+ case $format in
+ info) outfiles="$outfiles input.info-1 input.info-2";;
+ esac
+
+ # Compute the aux files.
+ case $format:$@ in
+ *clean* ) auxfiles='';;
+ *tidy* ) auxfiles='input.t2d';;
+ html:*|text:* ) auxfiles='input.haux input.htoc';;
+ dvi:* ) auxfiles='input.aux input.log input.toc';;
+ * ) auxfiles='';;
+ esac
+ # There should only be the expected output and the source file.
+ assert_files input.tex $outfiles $auxfiles
+ rm -fr $outfiles $auxfiles
+}
+
+for opt in "" "--clean" "--tidy"
+do
+ for out in html info text
+ do
+ run_hevea_check $out $opt
+ done
+done
diff --git a/util/local.test b/util/local.test
new file mode 100755
index 0000000..ff4aa79
--- /dev/null
+++ b/util/local.test
@@ -0,0 +1,59 @@
+#! /bin/sh
+# Copyright (C) 2003, 2005, 2007, 2008 Free Software Foundation, Inc.
+#
+# This file is part of GNU Texinfo.
+#
+# GNU Texinfo is free software; you can redistribute it and/or modify
+# 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 Texinfo is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Make sure no "local" variable identifier is used twice, since
+# local is not actually portable.
+
+. ./defs || exit 1
+
+set -e
+
+# Make sure quotes are used to protect the value. See the comment in
+# texi2dvi itself about local.
+if sed -e 's/^[ ]*#.*//' $TEXI2DVI |
+ $EGREP "\blocal [a-zA-Z_0-9]*=[^\"']" |
+ $EGREP -v "\blocal [a-zA-Z_0-9]*=[a-zA-Z0-9]*$" |
+ grep .
+then
+ false
+else
+ true
+fi
+
+
+# Make sure each name is used only once.
+if sed -n -e 's/^#.*//' \
+ -e 's/local \([a-zA-Z_0-9]*\)/\1/gp' $TEXI2DVI |
+ sort |
+ uniq -c |
+ grep -v '^.*1 ' |
+ grep .
+then
+ false
+else
+ true
+fi
+
+
+# Make sure we don't use $().
+if $FGREP '$(' $TEXI2DVI
+then
+ false
+else
+ true
+fi
diff --git a/util/outline.gawk b/util/outline.gawk
new file mode 100644
index 0000000..fa67263
--- /dev/null
+++ b/util/outline.gawk
@@ -0,0 +1,144 @@
+#! /usr/local/bin/gawk -f
+
+# texi.outline --- produce an outline from a texinfo source file
+#
+# Copyright (C) 1998 Arnold David Robbins (arnold@gnu.org)
+#
+# TEXI.OUTLINE is free software; you can redistribute it and/or modify
+# 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.
+#
+# TEXI.OUTLINE is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# NOTE:
+# This program uses gensub(), which is specific to gawk.
+# With some work (split, substr, etc), it could be made to work
+# on other awks, but it's not worth the trouble for me.
+
+BEGIN \
+{
+ # Levels at which different nodes can be
+ Level["@top"] = 0
+ Level["@appendix"] = 1
+ Level["@chapter"] = 1
+ Level["@majorheading"] = 1
+ Level["@unnumbered"] = 1
+ Level["@appendixsec"] = 2
+ Level["@heading"] = 2
+ Level["@section"] = 2
+ Level["@unnumberedsec"] = 2
+ Level["@unnumberedsubsec"] = 3
+ Level["@appendixsubsec"] = 3
+ Level["@subheading"] = 3
+ Level["@subsection"] = 3
+ Level["@appendixsubsubsec"] = 4
+ Level["@subsubheading"] = 4
+ Level["@subsubsection"] = 4
+ Level["@unnumberedsubsubsec"] = 4
+
+ # insure that we were called correctly
+ if (ARGC != 2) {
+ printf("usage: %s texinfo-file\n", ARGV[0]) > "/dev/stderr"
+ exit 1
+ }
+
+ # init header counters
+ app_letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ app_h = 0
+ l1_h = l2_h = l3_h = l4_h = 0
+}
+
+# skip lines we're not interested in
+/^[^@]/ || ! ($1 in Level) { next }
+
+Level[$1] == 1 {
+ if ($1 !~ /^@unnumbered/ || $1 !~ /heading/)
+ l1_h++
+ l2_h = l3_h = l4_h = 0
+ Ntabs = 0
+ Number = makenumber($1)
+ Title = maketitle($0)
+ print_title()
+}
+
+Level[$1] == 2 {
+ l2_h++
+ l3_h = l4_h = 0
+ Ntabs = 1
+ Number = makenumber($1)
+ Title = maketitle($0)
+ print_title()
+}
+
+Level[$1] == 3 {
+ l3_h++
+ l4_h = 0
+ Ntabs = 2
+ Number = makenumber($1)
+ Title = maketitle($0)
+ print_title()
+}
+
+Level[$1] == 4 {
+ l4_h++
+ Ntabs = 3
+ Number = makenumber($1)
+ Title = maketitle($0)
+ print_title()
+}
+
+# maketitle --- extract title
+
+function maketitle(str, text)
+{
+ $1 = "" # clobber section keyword
+ text = $0
+ gsub(/^[ \t]*/, "", text)
+ text = gensub(/@[a-z]+{/, "", "g", text)
+ text = gensub(/([^@])}/, "\\1", "g", text)
+ return text
+}
+
+# print_title --- print the title
+
+function print_title( i)
+{
+ for (i = 1; i <= Ntabs; i++)
+ printf "\t"
+ printf("%s %s\n", Number, Title)
+}
+
+# makenumber --- construct a heading number from levels and section command
+
+function makenumber(command, result, lev1)
+{
+ result = ""
+ if (command ~ /^@appendix/) {
+ if (Level[command] == 1)
+ app_h++
+
+ lev1 = substr(app_letters, app_h, 1)
+ } else if (command ~ /^@unnumbered/ || command ~ /heading/) {
+ lev1 = "(unnumbered)"
+ } else
+ lev1 = l1_h ""
+
+ result = lev1 "."
+ if (l2_h > 0) {
+ result = result l2_h "."
+ if (l3_h > 0) {
+ result = result l3_h "."
+ if (l4_h > 0) {
+ result = result l4_h "."
+ }
+ }
+ }
+ return result
+}
diff --git a/util/pdftexi2dvi b/util/pdftexi2dvi
new file mode 100755
index 0000000..17708e7
--- /dev/null
+++ b/util/pdftexi2dvi
@@ -0,0 +1,19 @@
+#!/bin/sh
+# $Id: pdftexi2dvi,v 1.3 2007/07/05 15:22:26 karl Exp $
+# Written by Thomas Esser. Public domain.
+# Execute texi2dvi --pdf.
+
+test -f /bin/ksh && test -z "$RUNNING_KSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
+ && { RUNNING_KSH=true; export RUNNING_KSH; exec /bin/ksh $0 ${1+"$@"}; }
+unset RUNNING_KSH
+
+test -f /bin/bsh && test -z "$RUNNING_BSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \
+ && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; }
+unset RUNNING_BSH
+
+# hack around a bug in zsh:
+test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"'
+
+texi2dvi --pdf ${1+"$@"}
diff --git a/util/prepinfo.awk b/util/prepinfo.awk
new file mode 100644
index 0000000..18e668b
--- /dev/null
+++ b/util/prepinfo.awk
@@ -0,0 +1,355 @@
+#! /usr/local/bin/gawk -f
+
+# prepinfo.awk --- fix node lines and menus
+#
+# Copyright 1998 Arnold Robbins, arnold@gnu.org
+#
+# PREPINFO is free software; you can redistribute it and/or modify
+# 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.
+#
+# PREPINFO is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+BEGIN \
+{
+ # manifest constants
+ TRUE = 1
+ FALSE = 0
+
+ # Levels at which different nodes can be
+ Level["@top"] = 0
+ Level["@appendix"] = 1
+ Level["@chapter"] = 1
+ Level["@majorheading"] = 1
+ Level["@unnumbered"] = 1
+ Level["@appendixsec"] = 2
+ Level["@heading"] = 2
+ Level["@section"] = 2
+ Level["@unnumberedsec"] = 2
+ Level["@unnumberedsubsec"] = 3
+ Level["@appendixsubsec"] = 3
+ Level["@subheading"] = 3
+ Level["@subsection"] = 3
+ Level["@appendixsubsubsec"] = 4
+ Level["@subsubheading"] = 4
+ Level["@subsubsection"] = 4
+ Level["@unnumberedsubsubsec"] = 4
+
+ # Length of menus
+ Menumargin = 78
+
+ # Length of menu item
+ Min_menitem_length = 29
+
+ # insure that we were called correctly
+ if (ARGC != 2) {
+ printf("usage: %s texinfo-file\n", ARGV[0]) > "/dev/stderr"
+ exit 1
+ }
+
+ # Arrange for two passes over input file
+ Pass = 1
+ ARGV[2] = "Pass=2"
+ ARGV[3] = ARGV[1]
+ ARGC = 4
+ Lastlevel = -1
+
+ # Initialize stacks
+ Up[-1] = "(dir)"
+ Prev[0] = "(dir)"
+
+ if (Debug == "args") {
+ for (i = 0; i < ARGC; i++)
+ printf("ARGV[%d] = %s\n", i, ARGV[i]) > "/dev/stderr"
+ }
+}
+
+$1 == "@node" \
+{
+ Name = getnodename($0)
+ Nodeseen = TRUE
+
+ if ((l = length(Name)) > Maxlen)
+ Maxlen = l
+
+ if (Debug == "nodenames")
+ printf("Name = %s\n", Name) > "/dev/stderr"
+
+ if (Pass == 1)
+ next
+}
+
+Pass == 1 && /^@c(omment)?[ \t]+fakenode/ \
+{
+ if (Debug == "fakenodes")
+ printf("fakenode at %d\n", FNR) > "/dev/stderr"
+ Fakenode = TRUE
+ next
+}
+
+Pass == 1 && ($1 in Level) \
+{
+ # skip fake nodes --- titles without associated @node lines
+ if (Fakenode) {
+ if (Debug == "fakenodes")
+ printf("%s at %d is a fakenode\n", $1, FNR) > "/dev/stderr"
+ Fakenode = FALSE
+ next
+ }
+
+ if (Debug == "titles")
+ printf("Processing %s: Name = %s\n", $1, Name) > "/dev/stderr"
+
+ # save type
+ type = $1
+
+ if (! Nodeseen) {
+ err_prefix()
+ printf("%s line with no @node or fakenode line\n",
+ type) > "/dev/stderr"
+ Badheading[FNR] = 1
+ # ??? used ???
+ next
+ } else
+ Nodeseen = FALSE # reset it
+
+ # Squirrel away the info
+ levelnum = Level[type]
+ Node[Name ".level"] = levelnum
+ Node[Name ".name"] = Name
+ if (Debug == "titles") {
+ printf("Node[%s\".level\"] = %s\n", Name, Node[Name ".level"]) > "/dev/stderr"
+ printf("Node[%s\".name\"] = %s\n", Name, Node[Name ".name"]) > "/dev/stderr"
+ }
+
+ if (levelnum == Lastlevel) { # e.g., two sections in a row
+ Node[Name ".up"] = Up[levelnum - 1]
+ if (levelnum in Prev) {
+ Node[Prev[levelnum] ".next"] = Name
+ Node[Name ".prev"] = Prev[levelnum]
+ }
+ Prev[levelnum] = Name
+ Up[levelnum] = Name # ???
+ } else if (levelnum < Lastlevel) { # section, now chapter
+ Lastlevel = levelnum
+ Node[Name ".up"] = Up[levelnum - 1]
+ if (levelnum in Prev) {
+ Node[Name ".prev"] = Prev[levelnum]
+ Node[Prev[levelnum] ".next"] = Name
+ }
+ Prev[levelnum] = Name
+ Up[levelnum] = Name
+ } else { # chapter, now section, levelnum > Lastlevel
+ Node[Name ".up"] = Up[levelnum - 1]
+ Node[Up[Lastlevel] ".child"] = Name
+ Up[levelnum] = Name
+ Prev[levelnum] = Name
+ Lastlevel = levelnum
+ }
+
+ # For master menu
+ if (Level[$1] >= 2)
+ List[++Sequence] = Name
+
+ if (Debug == "titles") {
+ printf("Node[%s\".prev\"] = %s\n", Name, Node[Name ".prev"]) > "/dev/stderr"
+ printf("Node[%s\".up\"] = %s\n", Name, Node[Name ".up"]) > "/dev/stderr"
+ printf("Node[%s\".child\"] = %s\n", Name, Node[Name ".child"]) > "/dev/stderr"
+ }
+}
+
+Pass == 2 && Debug == "dumptitles" && FNR <= 1 \
+{
+ for (i in Node)
+ printf("Node[%s] = %s\n", i, Node[i]) | "sort 1>&2"
+ close("sort 1>&2")
+}
+
+/^@menu/ && Pass == 1, /^@end[ \t]+menu/ && Pass == 1 \
+{
+ if (/^@menu/ || /^@end[ \t]+menu/)
+ next
+
+# if (Debug == "menu")
+# printf("processing: %s\n", $0) > "/dev/stderr"
+
+ if (/^\*/) {
+ if (In_menitem) { # file away info from previousline
+ Node[node ".mendesc"] = desc
+ Node[node ".longdesc"] = longdesc
+ if (Debug == "mendesc") {
+ printf("Node[%s.mendesc] = %s\n",
+ node, Node[node ".mendesc"]) > "/dev/stderr"
+ printf("Node[%s.longdesc] = %s\n",
+ node, Node[node ".longdesc"]) > "/dev/stderr"
+ }
+ }
+ In_menitem = TRUE
+
+ # pull apart menu item
+ $1 = "" # nuke ``*''
+ $0 = $0 # reparse line
+ i1 = index($0, ":")
+ if (i1 <= 0) {
+ err_prefix()
+ printf("badly formed menu item") > "/dev/stderr"
+ next
+ }
+ if (substr($0, i1+1, 1) != ":") { # desc: node. long desc
+ i2 = index($0, ".")
+ if (i2 <= 0) {
+ err_prefix()
+ printf("badly formed menu item") > "/dev/stderr"
+ next
+ }
+ desc = substr($0, 1, i1 - 1)
+ sub(/^[ \t]+/, "", node)
+ sub(/[ \t]+$/, "", node)
+ longdesc = substr($0, i2 + 1)
+ } else { # nodname:: long desc
+ desc = ""
+ node = substr($0, 1, i1 - 1)
+ sub(/^[ \t]+/, "", node)
+ sub(/[ \t]+$/, "", node)
+ longdesc = substr($0, i1 + 2)
+ }
+ } else if (In_menitem) { # continuation line
+ longdesc = longdesc " " $0
+ } else
+ In_menitem = FALSE
+
+ Node[node ".mendesc"] = desc
+ Node[node ".longdesc"] = longdesc
+ if (Debug == "mendesc") {
+ printf("Node[%s.mendesc] = %s\n",
+ node, Node[node ".mendesc"]) > "/dev/stderr"
+ printf("Node[%s.longdesc] = %s\n",
+ node, Node[node ".longdesc"]) > "/dev/stderr"
+ }
+
+ if (Debug == "menu")
+ printf("Menu:: Name %s: desc %s: longdesc %s\n",
+ node, desc, longdesc) > "/dev/stderr"
+}
+
+function err_prefix()
+{
+ printf("%s: %s: %d: ", ARGV[0], FILENAME, FNR) > "/dev/stderr"
+}
+
+function getnodename(str)
+{
+ sub(/@node[ \t]+/, "", str)
+ sub(/,.*/, "", str)
+ if (Debug == "nodenames")
+ printf("getnodename: return %s\n", str) > "/dev/stderr"
+ return str
+}
+
+Pass == 2 && /^@node/ \
+{
+ Name = getnodename($0)
+
+ # Top node is special. It's next is the first child
+ n = Node[Name ".next"]
+ if (Node[Name ".level"] == 0 && n == "")
+ n = Node[Name ".child"]
+
+ printf("@node %s, %s, %s, %s\n", Name, n,
+ Node[Name ".prev"] ? Node[Name ".prev"] : Node[Name ".up"],
+ Node[Name ".up"])
+ next
+}
+
+Pass == 2 && /^@menu/ \
+{
+ # First, nuke current contents of menu
+ do {
+ if ((getline) <= 0) {
+ err_prefix()
+ printf("unexpected EOF inside menu\n") > "/dev/stderr"
+ exit 1
+ }
+ } while (! /^@end[ \t]+menu/)
+
+ # next, compute maximum length of a node name
+ max = 0
+ for (n = Node[Name ".child"]; (n ".next") in Node; n = Node[n ".next"]) {
+ if ((n ".desc") in Node)
+ s = Node[n ".desc"] ": " n "."
+ else
+ s = n "::"
+ l = length(s)
+ if (l > max)
+ max = l
+ }
+ if (max < Min_menitem_length)
+ max = Min_menitem_length
+
+ # now dump the menu
+ print "@menu"
+
+ for (n = Node[Name ".child"]; (n ".next") in Node; n = Node[n ".next"]) {
+ print_menuitem(n, max)
+ }
+ print_menuitem(n, max)
+
+ if (Name == "Top") { # Master Menu
+ if (Maxlen < Min_menitem_length)
+ Maxlen = Min_menitem_length
+ print ""
+ for (i = 1; i <= Sequence; i++)
+ print_menuitem(List[i], Maxlen)
+ print ""
+ }
+ print "@end menu"
+ next
+}
+
+Pass == 2 # print
+
+
+function print_menuitem(n, max, nodesc, i, dwords, count, p)
+{
+ nodesc = FALSE
+ if (! ((n ".longdesc") in Node)) {
+ err_prefix()
+ printf("warning: %s: no long description\n", n) > "/dev/stderr"
+ nodesc = TRUE
+ } else {
+ for (i in dwords)
+ delete dwords[i]
+ count = split(Node[n ".longdesc"], dwords, "[ \t\n]+")
+ }
+ if ((n ".desc") in Node)
+ s = Node[n ".desc"] ": " n "."
+ else
+ s = n "::"
+ printf("* %-*s", max, s)
+
+ if (Debug == "mendescitem")
+ printf("<* %-*s>\n", max, s) > "/dev/stderr"
+
+ p = max + 2
+ if (! nodesc) {
+ for (i = 1; i <= count; i++) {
+ l = length(dwords[i])
+ if (l == 0)
+ continue
+ if (p + l + 1 > Menumargin) {
+ printf("\n%*s", max + 2, " ")
+ p = max + 2
+ }
+ printf(" %s", dwords[i])
+ p += l + 1
+ }
+ }
+ print ""
+}
diff --git a/util/tex3patch b/util/tex3patch
new file mode 100755
index 0000000..046c794
--- /dev/null
+++ b/util/tex3patch
@@ -0,0 +1,70 @@
+#!/bin/sh
+# Auxiliary script to work around TeX 3.0 bug. ---- tex3patch ----
+# patches texinfo.tex in current directory, or in directory given as arg.
+
+ANYVERSION=no
+
+for arg in $1 $2
+do
+ case $arg in
+ --dammit | -d ) ANYVERSION=yes ;;
+
+ * ) dir=$arg
+ esac
+done
+
+if [ -z "$dir" ]; then
+ dir='.'
+fi
+
+if [ 2 -lt $# ] || [ ! -f "$dir/texinfo.tex" ]; then
+ echo "To patch texinfo.tex for peaceful coexistence with Unix TeX 3.0,"
+ echo "run $0"
+ echo "with no arguments in the same directory as texinfo.tex; or run"
+ echo " $0 DIRECTORY"
+ echo "(where DIRECTORY is a path leading to texinfo.tex)."
+ exit
+fi
+
+if [ -z "$TMPDIR" ]; then
+ TMPDIR=/tmp
+fi
+
+echo "Checking for \`dummy.tfm'"
+
+( cd $TMPDIR; tex '\relax \batchmode \font\foo=dummy \bye' )
+
+grep -s '3.0' $TMPDIR/texput.log
+if [ 1 = "$?" ] && [ "$ANYVERSION" != "yes" ]; then
+ echo "You probably do not need this patch,"
+ echo "since your TeX does not seem to be version 3.0."
+ echo "If you insist on applying the patch, run $0"
+ echo "again with the option \`--dammit'"
+ exit
+fi
+
+grep -s 'file not found' $TMPDIR/texput.log
+if [ 0 = $? ]; then
+ echo "This patch requires the dummy font metric file \`dummy.tfm',"
+ echo "which does not seem to be part of your TeX installation."
+ echo "Please get your TeX maintainer to install \`dummy.tfm',"
+ echo "then run this script again."
+ exit
+fi
+rm $TMPDIR/texput.log
+
+echo "Patching $dir/texinfo.tex"
+
+sed -e 's/%%*\\font\\nullfont/\\font\\nullfont/' \
+ $dir/texinfo.tex >$TMPDIR/texinfo.tex
+mv $dir/texinfo.tex $dir/texinfo.tex-distrib; mv $TMPDIR/texinfo.tex $dir
+
+if [ 0 = $? ]; then
+ echo "Patched $dir/texinfo.tex to avoid TeX 3.0 bug."
+ echo "The original version is saved as $dir/texinfo.tex-distrib."
+else
+ echo "Patch failed. Sorry."
+fi
+----------------------------------------tex3patch ends
+
+
diff --git a/util/texi-docstring-magic.el b/util/texi-docstring-magic.el
new file mode 100644
index 0000000..ab66c91
--- /dev/null
+++ b/util/texi-docstring-magic.el
@@ -0,0 +1,347 @@
+;; texi-docstring-magic.el -- munge internal docstrings into texi
+;;
+;; Keywords: lisp, docs, tex
+;; Author: David Aspinall <da@dcs.ed.ac.uk>
+;; Copyright (C) 1998 David Aspinall
+;; Maintainer: David Aspinall <da@dcs.ed.ac.uk>
+;;
+;; $Id: texi-docstring-magic.el,v 1.3 2007/07/01 21:20:33 karl Exp $
+;;
+;; This package is distributed under the terms of the
+;; GNU General Public License, Version 3.
+;; You should have a copy of the GPL with your version of
+;; GNU Emacs or the Texinfo distribution.
+;;
+;;
+;; This package generates Texinfo source fragments from Emacs
+;; docstrings. This avoids documenting functions and variables
+;; in more than one place, and automatically adds Texinfo markup
+;; to docstrings.
+;;
+;; It relies heavily on you following the Elisp documentation
+;; conventions to produce sensible output, check the Elisp manual
+;; for details. In brief:
+;;
+;; * The first line of a docstring should be a complete sentence.
+;; * Arguments to functions should be written in upper case: ARG1..ARGN
+;; * User options (variables users may want to set) should have docstrings
+;; beginning with an asterisk.
+;;
+;; Usage:
+;;
+;; Write comments of the form:
+;;
+;; @c TEXI DOCSTRING MAGIC: my-package-function-or-variable-name
+;;
+;; In your texi source, mypackage.texi. From within an Emacs session
+;; where my-package is loaded, visit mypackage.texi and run
+;; M-x texi-docstring-magic to update all of the documentation strings.
+;;
+;; This will insert @defopt, @deffn and the like underneath the
+;; magic comment strings.
+;;
+;; The default value for user options will be printed.
+;;
+;; Symbols are recognized if they are defined for faces, functions,
+;; or variables (in that order).
+;;
+;; Automatic markup rules:
+;;
+;; 1. Indented lines are gathered into @lisp environment.
+;; 2. Pieces of text `stuff' or surrounded in quotes marked up with @samp.
+;; 3. Words *emphasized* are made @strong{emphasized}
+;; 4. Words sym-bol which are symbols become @code{sym-bol}.
+;; 5. Upper cased words ARG corresponding to arguments become @var{arg}.
+;; In fact, you can any word longer than three letters, so that
+;; metavariables can be used easily.
+;; FIXME: to escape this, use `ARG'
+;; 6. Words 'sym which are lisp-quoted are marked with @code{'sym}.
+;;
+;; -----
+;;
+;; Useful key binding when writing Texinfo:
+;;
+;; (define-key TeXinfo-mode-map "C-cC-d" 'texi-docstring-magic-insert-magic)
+;;
+;; -----
+;;
+;; Useful enhancements to do:
+;;
+;; * Use customize properties (e.g. group, simple types)
+;; * Look for a "texi-docstring" property for symbols
+;; so TeXInfo can be defined directly in case automatic markup
+;; goes badly wrong.
+;; * Add tags to special comments so that user can specify face,
+;; function, or variable binding for a symbol in case more than
+;; one binding exists.
+;;
+;; ------
+
+(defun texi-docstring-magic-splice-sep (strings sep)
+ "Return concatenation of STRINGS spliced together with separator SEP."
+ (let (str)
+ (while strings
+ (setq str (concat str (car strings)))
+ (if (cdr strings)
+ (setq str (concat str sep)))
+ (setq strings (cdr strings)))
+ str))
+
+(defconst texi-docstring-magic-munge-table
+ '(;; 1. Indented lines are gathered into @lisp environment.
+ ("\\(^.*\\S-.*$\\)"
+ t
+ (let
+ ((line (match-string 0 docstring)))
+ (if (eq (char-syntax (string-to-char line)) ?\ )
+ ;; whitespace
+ (if in-quoted-region
+ line
+ (setq in-quoted-region t)
+ (concat "@lisp\n" line))
+ ;; non-white space
+ (if in-quoted-region
+ (progn
+ (setq in-quoted-region nil)
+ (concat "@end lisp\n" line))
+ line))))
+ ;; 2. Pieces of text `stuff' or surrounded in quotes
+ ;; are marked up with @samp. NB: Must be backquote
+ ;; followed by forward quote for this to work.
+ ;; Can't use two forward quotes else problems with
+ ;; symbols.
+ ;; Odd hack: because ' is a word constituent in text/texinfo
+ ;; mode, putting this first enables the recognition of args
+ ;; and symbols put inside quotes.
+ ("\\(`\\([^']+\\)'\\)"
+ t
+ (concat "@samp{" (match-string 2 docstring) "}"))
+ ;; 3. Words *emphasized* are made @strong{emphasized}
+ ("\\(\\*\\(\\w+\\)\\*\\)"
+ t
+ (concat "@strong{" (match-string 2 docstring) "}"))
+ ;; 4. Words sym-bol which are symbols become @code{sym-bol}.
+ ;; Must have at least one hyphen to be recognized,
+ ;; terminated in whitespace, end of line, or punctuation.
+ ;; (Only consider symbols made from word constituents
+ ;; and hyphen.
+ ("\\(\\(\\w+\\-\\(\\w\\|\\-\\)+\\)\\)\\(\\s\)\\|\\s-\\|\\s.\\|$\\)"
+ (or (boundp (intern (match-string 2 docstring)))
+ (fboundp (intern (match-string 2 docstring))))
+ (concat "@code{" (match-string 2 docstring) "}"
+ (match-string 4 docstring)))
+ ;; 5. Upper cased words ARG corresponding to arguments become
+ ;; @var{arg}
+ ;; In fact, include any word so long as it is more than 3 characters
+ ;; long. (Comes after symbols to avoid recognizing the
+ ;; lowercased form of an argument as a symbol)
+ ;; FIXME: maybe we don't want to downcase stuff already
+ ;; inside @samp
+ ;; FIXME: should - terminate? should _ be included?
+ ("\\([A-Z0-9\\-]+\\)\\(/\\|\)\\|}\\|\\s-\\|\\s.\\|$\\)"
+ (or (> (length (match-string 1 docstring)) 3)
+ (member (downcase (match-string 1 docstring)) args))
+ (concat "@var{" (downcase (match-string 1 docstring)) "}"
+ (match-string 2 docstring)))
+
+ ;; 6. Words 'sym which are lisp quoted are
+ ;; marked with @code.
+ ("\\(\\(\\s-\\|^\\)'\\(\\(\\w\\|\\-\\)+\\)\\)\\(\\s\)\\|\\s-\\|\\s.\\|$\\)"
+ t
+ (concat (match-string 2 docstring)
+ "@code{'" (match-string 3 docstring) "}"
+ (match-string 5 docstring)))
+ ;; 7,8. Clean up for @lisp environments left with spurious newlines
+ ;; after 1.
+ ("\\(\\(^\\s-*$\\)\n@lisp\\)" t "@lisp")
+ ("\\(\\(^\\s-*$\\)\n@end lisp\\)" t "@end lisp"))
+ "Table of regexp matches and replacements used to markup docstrings.
+Format of table is a list of elements of the form
+ (regexp predicate replacement-form)
+If regexp matches and predicate holds, then replacement-form is
+evaluated to get the replacement for the match.
+predicate and replacement-form can use variables arg,
+and forms such as (match-string 1 docstring)
+Match string 1 is assumed to determine the
+length of the matched item, hence where parsing restarts from.
+The replacement must cover the whole match (match string 0),
+including any whitespace included to delimit matches.")
+
+
+(defun texi-docstring-magic-munge-docstring (docstring args)
+ "Markup DOCSTRING for texi according to regexp matches."
+ (let ((case-fold-search nil))
+ (dolist (test texi-docstring-magic-munge-table docstring)
+ (let ((regexp (nth 0 test))
+ (predicate (nth 1 test))
+ (replace (nth 2 test))
+ (i 0)
+ in-quoted-region)
+
+ (while (and
+ (< i (length docstring))
+ (string-match regexp docstring i))
+ (setq i (match-end 1))
+ (if (eval predicate)
+ (let* ((origlength (- (match-end 0) (match-beginning 0)))
+ (replacement (eval replace))
+ (newlength (length replacement)))
+ (setq docstring
+ (replace-match replacement t t docstring))
+ (setq i (+ i (- newlength origlength))))))
+ (if in-quoted-region
+ (setq docstring (concat docstring "\n@end lisp"))))))
+ ;; Force a new line after (what should be) the first sentence,
+ ;; if not already a new paragraph.
+ (let*
+ ((pos (string-match "\n" docstring))
+ (needscr (and pos
+ (not (string= "\n"
+ (substring docstring
+ (1+ pos)
+ (+ pos 2)))))))
+ (if (and pos needscr)
+ (concat (substring docstring 0 pos)
+ "@*\n"
+ (substring docstring (1+ pos)))
+ docstring)))
+
+(defun texi-docstring-magic-texi (env grp name docstring args &optional endtext)
+ "Make a texi def environment ENV for entity NAME with DOCSTRING."
+ (concat "@def" env (if grp (concat " " grp) "") " " name
+ " "
+ (texi-docstring-magic-splice-sep args " ")
+ ;; " "
+ ;; (texi-docstring-magic-splice-sep extras " ")
+ "\n"
+ (texi-docstring-magic-munge-docstring docstring args)
+ "\n"
+ (or endtext "")
+ "@end def" env "\n"))
+
+(defun texi-docstring-magic-format-default (default)
+ "Make a default value string for the value DEFAULT.
+Markup as @code{stuff} or @lisp stuff @end lisp."
+ (let ((text (format "%S" default)))
+ (concat
+ "\nThe default value is "
+ (if (string-match "\n" text)
+ ;; Carriage return will break @code, use @lisp
+ (if (stringp default)
+ (concat "the string: \n@lisp\n" default "\n@end lisp\n")
+ (concat "the value: \n@lisp\n" text "\n@end lisp\n"))
+ (concat "@code{" text "}.\n")))))
+
+
+(defun texi-docstring-magic-texi-for (symbol)
+ (cond
+ ;; Faces
+ ((find-face symbol)
+ (let*
+ ((face symbol)
+ (name (symbol-name face))
+ (docstring (or (face-doc-string face)
+ "Not documented."))
+ (useropt (eq ?* (string-to-char docstring))))
+ ;; Chop off user option setting
+ (if useropt
+ (setq docstring (substring docstring 1)))
+ (texi-docstring-magic-texi "fn" "Face" name docstring nil)))
+ ((fboundp symbol)
+ ;; Functions.
+ ;; We don't handle macros, aliases, or compiled fns properly.
+ (let*
+ ((function symbol)
+ (name (symbol-name function))
+ (docstring (or (documentation function)
+ "Not documented."))
+ (def (symbol-function function))
+ (argsyms (cond ((eq (car-safe def) 'lambda)
+ (nth 1 def))))
+ (args (mapcar 'symbol-name argsyms)))
+ (if (commandp function)
+ (texi-docstring-magic-texi "fn" "Command" name docstring args)
+ (texi-docstring-magic-texi "un" nil name docstring args))))
+ ((boundp symbol)
+ ;; Variables.
+ (let*
+ ((variable symbol)
+ (name (symbol-name variable))
+ (docstring (or (documentation-property variable
+ 'variable-documentation)
+ "Not documented."))
+ (useropt (eq ?* (string-to-char docstring)))
+ (default (if useropt
+ (texi-docstring-magic-format-default
+ (default-value symbol)))))
+ ;; Chop off user option setting
+ (if useropt
+ (setq docstring (substring docstring 1)))
+ (texi-docstring-magic-texi
+ (if useropt "opt" "var") nil name docstring nil default)))
+ (t
+ (error "Don't know anything about symbol %s" (symbol-name symbol)))))
+
+(defconst texi-docstring-magic-comment
+ "@c TEXI DOCSTRING MAGIC:"
+ "Magic string in a texi buffer expanded into @defopt, or @deffn.")
+
+(defun texi-docstring-magic ()
+ "Update all texi docstring magic annotations in buffer."
+ (interactive)
+ (save-excursion
+ (goto-char (point-min))
+ (let ((magic (concat "^"
+ (regexp-quote texi-docstring-magic-comment)
+ "\\s-*\\(\\(\\w\\|\\-\\)+\\)$"))
+ p
+ symbol)
+ (while (re-search-forward magic nil t)
+ (setq symbol (intern (match-string 1)))
+ (forward-line)
+ (setq p (point))
+ ;; If comment already followed by an environment, delete it.
+ (if (and
+ (looking-at "@def\\(\\w+\\)\\s-")
+ (search-forward (concat "@end def" (match-string 1)) nil t))
+ (progn
+ (forward-line)
+ (delete-region p (point))))
+ (insert
+ (texi-docstring-magic-texi-for symbol))))))
+
+(defun texi-docstring-magic-face-at-point ()
+ (ignore-errors
+ (let ((stab (syntax-table)))
+ (unwind-protect
+ (save-excursion
+ (set-syntax-table emacs-lisp-mode-syntax-table)
+ (or (not (zerop (skip-syntax-backward "_w")))
+ (eq (char-syntax (char-after (point))) ?w)
+ (eq (char-syntax (char-after (point))) ?_)
+ (forward-sexp -1))
+ (skip-chars-forward "'")
+ (let ((obj (read (current-buffer))))
+ (and (symbolp obj) (find-face obj) obj)))
+ (set-syntax-table stab)))))
+
+(defun texi-docstring-magic-insert-magic (symbol)
+ (interactive
+ (let* ((v (or (variable-at-point)
+ (function-at-point)
+ (texi-docstring-magic-face-at-point)))
+ (val (let ((enable-recursive-minibuffers t))
+ (completing-read
+ (if v
+ (format "Magic docstring for symbol (default %s): " v)
+ "Magic docstring for symbol: ")
+ obarray '(lambda (sym)
+ (or (boundp sym)
+ (fboundp sym)
+ (find-face sym)))
+ t nil 'variable-history))))
+ (list (if (equal val "") v (intern val)))))
+ (insert "\n" texi-docstring-magic-comment " " (symbol-name symbol)))
+
+
+(provide 'texi-docstring-magic)
diff --git a/util/texi2dvi b/util/texi2dvi
new file mode 100755
index 0000000..18b2214
--- /dev/null
+++ b/util/texi2dvi
@@ -0,0 +1,1792 @@
+#! /bin/sh
+# texi2dvi --- produce DVI (or PDF) files from Texinfo (or (La)TeX) sources.
+# $Id: texi2dvi,v 1.135 2008/09/18 18:46:01 karl Exp $
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008 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/>.
+#
+# Original author: Noah Friedman.
+#
+# Please send bug reports, etc. to bug-texinfo@gnu.org.
+# If possible, please send a copy of the output of the script called with
+# the `--debug' option when making a bug report.
+
+test -f /bin/ksh && test -z "$RUNNING_KSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
+ && { RUNNING_KSH=true; export RUNNING_KSH; exec /bin/ksh $0 ${1+"$@"}; }
+unset RUNNING_KSH
+
+# No failure shall remain unpunished.
+set -e
+
+# This string is expanded by rcs automatically when this file is checked out.
+rcs_revision='$Revision: 1.135 $'
+rcs_version=`set - $rcs_revision; echo $2`
+program=`echo $0 | sed -e 's!.*/!!'`
+
+build_mode=${TEXI2DVI_BUILD_MODE:-local}
+build_dir=${TEXI2DVI_BUILD_DIRECTORY:-.}
+
+# Initialize variables for option overriding and otherwise.
+# Don't use `unset' since old bourne shells don't have this command.
+# Instead, assign them an empty value.
+action=compile
+batch=false # true for batch mode
+debug=false
+escape="\\"
+expand= # t for expansion via makeinfo
+includes=
+line_error=true # Pass --file-line-error to TeX.
+no_line_error=false # absolutely do not pass --file-line-error to TeX
+oname= # --output
+out_lang=dvi
+quiet=false # by default let the tools' message be displayed
+recode=false
+set_language=
+src_specials=
+textra= # Extra TeX commands to insert in the input file.
+txiprereq=19990129 # minimum texinfo.tex version with macro expansion
+verb=false # true for verbose mode
+translate_file= # name of charset translation file
+recode_from= # if not empty, recode from this encoding to @documentencoding
+
+orig_pwd=`pwd`
+
+# We have to initialize IFS to space tab newline since we save and
+# restore IFS and apparently POSIX allows stupid/broken behavior with
+# empty-but-set IFS.
+# http://lists.gnu.org/archive/html/automake-patches/2006-05/msg00008.html
+# We need space, tab and new line, in precisely that order. And don't leave
+# trailing blanks.
+space=' '
+tab=' '
+newline='
+'
+IFS="$space$tab$newline"
+
+# In case someone pedantic insists on using grep -E.
+: ${EGREP=egrep}
+
+# Systems which define $COMSPEC or $ComSpec use semicolons to separate
+# directories in TEXINPUTS -- except for Cygwin et al., where COMSPEC
+# might be inherited, but : is used.
+if test -n "$COMSPEC$ComSpec" \
+ && uname | $EGREP -iv 'cygwin|mingw|djgpp' >/dev/null; then
+ path_sep=";"
+else
+ path_sep=":"
+fi
+
+# Pacify verbose cds.
+CDPATH=${ZSH_VERSION+.}$path_sep
+
+# If $TEX is set to a directory, don't use it.
+test -n "$TEX" && test -d "$TEX" && unset TEX
+
+#
+## --------------------- ##
+## Auxiliary functions. ##
+## --------------------- ##
+
+# In case `local' is not supported by the shell, provide a function
+# that simulates it by simply performing the assignments. This means
+# that we must not expect `local' to work, i.e., we must not (i) rely
+# on it during recursion, and (ii) have two local declarations of the
+# same variable. (ii) is easy to check statically, and our test suite
+# does make sure there is never twice a static local declaration of a
+# variable. (i) cannot be checked easily, so just be careful.
+#
+# Note that since we might use a function simulating `local', we can
+# no longer rely on the fact that no IFS-splitting is performed. So,
+# while
+#
+# foo=$bar
+#
+# is fine (no IFS-splitting), never write
+#
+# local foo=$bar
+#
+# but rather
+#
+# local foo="$bar"
+(
+ foo=bar
+ test_local () {
+ local foo=foo
+ }
+ test_local
+ test $foo = bar
+) || local () {
+ case $1 in
+ *=*) eval "$1";;
+ esac
+}
+
+
+# cd_orig
+# -------
+# Return to the original directory.
+cd_orig ()
+{
+ # In case $orig_pwd is on a different drive (for DOS).
+ cd /
+
+ # Return to the original directory so that
+ # - the next file is processed in correct conditions
+ # - the temporary file can be removed
+ cd "$orig_pwd" || exit 1
+}
+
+# func_dirname FILE
+# -----------------
+# Return the directory part of FILE.
+func_dirname ()
+{
+ dirname "$1" 2>/dev/null \
+ || { echo "$1" | sed 's!/[^/]*$!!;s!^$!.!'; }
+}
+
+
+# absolute NAME -> ABS-NAME
+# -------------------------
+# Return an absolute path to NAME.
+absolute ()
+{
+ case $1 in
+ [\\/]* | ?:[\\/]*)
+ # Absolute paths don't need to be expanded.
+ echo "$1"
+ ;;
+ *) local slashes
+ slashes=`echo "$1" | sed -n 's,.*[^/]\(/*\)$,\1,p'`
+ local rel
+ rel=$orig_pwd/`func_dirname "$1"`
+ if test -d "$rel"; then
+ (cd "$rel" 2>/dev/null &&
+ local n
+ n=`pwd`/`basename "$1"`"$slashes"
+ echo "$n")
+ else
+ error 1 "not a directory: $rel"
+ fi
+ ;;
+ esac
+}
+
+
+# ensure_dir DIR1 DIR2...
+# -----------------------
+# Make sure the directories exist.
+ensure_dir ()
+{
+ for dir
+ do
+ test -d "$dir" \
+ || mkdir "$dir" \
+ || error 1 "cannot create directory: $dir"
+ done
+}
+
+
+# error EXIT_STATUS LINE1 LINE2...
+# --------------------------------
+# Report an error and exit with failure if EXIT_STATUS is non null.
+error ()
+{
+ local s="$1"
+ shift
+ report "$@"
+ if test "$s" != 0; then
+ exit $s
+ fi
+}
+
+
+# findprog PROG
+# -------------
+# Return true if PROG is somewhere in PATH, else false.
+findprog ()
+{
+ local saveIFS="$IFS"
+ IFS=$path_sep # break path components at the path separator
+ for dir in $PATH; do
+ IFS=$saveIFS
+ # The basic test for an executable is `test -f $f && test -x $f'.
+ # (`test -x' is not enough, because it can also be true for directories.)
+ # We have to try this both for $1 and $1.exe.
+ #
+ # Note: On Cygwin and DJGPP, `test -x' also looks for .exe. On Cygwin,
+ # also `test -f' has this enhancement, bot not on DJGPP. (Both are
+ # design decisions, so there is little chance to make them consistent.)
+ # Thusly, it seems to be difficult to make use of these enhancements.
+ #
+ if { test -f "$dir/$1" && test -x "$dir/$1"; } ||
+ { test -f "$dir/$1.exe" && test -x "$dir/$1.exe"; }; then
+ return 0
+ fi
+ done
+ return 1
+}
+
+# report LINE1 LINE2...
+# ---------------------
+# Report some information on stderr.
+report ()
+{
+ for i in "$@"
+ do
+ echo >&2 "$0: $i"
+ done
+}
+
+
+# run COMMAND-LINE
+# ----------------
+# Run the COMMAND-LINE verbosely, and catching errors as failures.
+run ()
+{
+ verbose "Running $@"
+ "$@" 2>&5 1>&2 ||
+ error 1 "$1 failed"
+}
+
+
+# usage
+# -----
+# Display usage and exit successfully.
+usage ()
+{
+ # We used to simply have `echo "$usage"', but coping with the
+ # changing behavior of `echo' is much harder than simply using a
+ # here-doc.
+ #
+ # echo '\noto' echo '\\noto' echo -e '\\noto'
+ # bash 3.1 \noto \\noto \noto
+ # bash 3.2 %oto \noto -e \noto
+ #
+ # where % denotes the eol character.
+ cat <<EOF
+Usage: $program [OPTION]... FILE...
+
+Run each Texinfo or (La)TeX FILE through TeX in turn until all
+cross-references are resolved, building all indices. The directory
+containing each FILE is searched for included files. The suffix of FILE
+is used to determine its language ((La)TeX or Texinfo). To process
+(e)plain TeX files, set the environment variable LATEX=tex.
+
+In order to make texi2dvi a drop-in replacement of TeX/LaTeX in AUC-TeX,
+the FILE may also be composed of the following simple TeX commands.
+ \`\\input{FILE}' the actual file to compile
+ \`\\nonstopmode' same as --batch
+
+Makeinfo is used to perform Texinfo macro expansion before running TeX
+when needed.
+
+General options:
+ -b, --batch no interaction
+ -D, --debug turn on shell debugging (set -x)
+ -h, --help display this help and exit successfully
+ -o, --output=OFILE leave output in OFILE (implies --clean);
+ only one input FILE may be specified in this case
+ -q, --quiet no output unless errors (implies --batch)
+ -s, --silent same as --quiet
+ -v, --version display version information and exit successfully
+ -V, --verbose report on what is done
+
+TeX tuning:
+ -@ use @input instead of \input for preloaded Texinfo
+ --dvi output a DVI file [default]
+ --dvipdf output a PDF file via DVI (using dvipdf)
+ -e, -E, --expand force macro expansion using makeinfo
+ -I DIR search DIR for Texinfo files
+ -l, --language=LANG specify LANG for FILE, either latex or texinfo
+ --no-line-error do not pass --file-line-error to TeX
+ -p, --pdf use pdftex or pdflatex for processing
+ -r, --recode call recode before TeX to translate input
+ --recode-from=ENC recode from ENC to the @documentencoding
+ --src-specials pass --src-specials to TeX
+ -t, --command=CMD insert CMD in copy of input file
+ or --texinfo=CMD multiple values accumulate
+ --translate-file=FILE use given charset translation file for TeX
+
+Build modes:
+ --build=MODE specify the treatment of auxiliary files [$build_mode]
+ --tidy same as --build=tidy
+ -c, --clean same as --build=clean
+ --build-dir=DIR specify where the tidy compilation is performed;
+ implies --tidy;
+ defaults to TEXI2DVI_BUILD_DIRECTORY [$build_dir]
+ --mostly-clean remove the auxiliary files and directories
+ but not the output
+
+The MODE specifies where the TeX compilation takes place, and, as a
+consequence, how auxiliary files are treated. The build mode
+can also be set using the environment variable TEXI2DVI_BUILD_MODE.
+
+Valid MODEs are:
+ \`local' compile in the current directory, leaving all the auxiliary
+ files around. This is the traditional TeX use.
+ \`tidy' compile in a local *.t2d directory, where the auxiliary files
+ are left. Output files are copied back to the original file.
+ \`clean' same as \`tidy', but remove the auxiliary directory afterwards.
+ Every compilation therefore requires the full cycle.
+
+Using the \`tidy' mode brings several advantages:
+ - the current directory is not cluttered with plethora of temporary files.
+ - clutter can be even reduced using --build-dir=dir: all the *.t2d
+ directories are stored there.
+ - clutter can be reduced to zero using, e.g., --build-dir=/tmp/\$USER.t2d
+ or --build-dir=\$HOME/.t2d.
+ - the output file is updated after every succesful TeX run, for
+ sake of concurrent visualization of the output. In a \`local' build
+ the viewer stops during the whole TeX run.
+ - if the compilation fails, the previous state of the output file
+ is preserved.
+ - PDF and DVI compilation are kept in separate subdirectories
+ preventing any possibility of auxiliary file incompatibility.
+
+On the other hand, because \`tidy' compilation takes place in another
+directory, occasionally TeX won't be able to find some files (e.g., when
+using \\graphicspath): in that case use -I to specify the additional
+directories to consider.
+
+The values of the BIBTEX, LATEX (or PDFLATEX), MAKEINDEX, MAKEINFO,
+TEX (or PDFTEX), TEXINDEX, and THUMBPDF environment variables are used
+to run those commands, if they are set. Any CMD strings are added
+after @setfilename for Texinfo input, in the first line for LaTeX input.
+
+Email bug reports to <bug-texinfo@gnu.org>,
+general questions and discussion to <help-texinfo@gnu.org>.
+Texinfo home page: http://www.gnu.org/software/texinfo/
+EOF
+ exit 0
+}
+
+
+# verbose WORD1 WORD2
+# -------------------
+# Report some verbose information.
+verbose ()
+{
+ if $verb; then
+ echo >&2 "$0: $@"
+ fi
+}
+
+
+# version
+# -------
+# Display version info and exit succesfully.
+version ()
+{
+ cat <<EOF
+texi2dvi (GNU Texinfo 4.13) $rcs_version
+
+Copyright (C) 2008 Free Software Foundation, Inc.
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+EOF
+ exit 0
+}
+
+
+## ---------------- ##
+## Handling lists. ##
+## ---------------- ##
+
+
+# list_append LIST-NAME ELEM
+# --------------------------
+# Set LIST-NAME to its former contents, with ELEM appended.
+list_append ()
+{
+ local la_l="$1"
+ shift
+ eval set X \$$la_l "$@"
+ shift
+ eval $la_l=\""$@"\"
+}
+
+
+# list_concat_dirs LIST-NAME DIR-LIST
+# -----------------------------------
+# Append to LIST-NAME all the components (included empty) from
+# the $path_sep separated list DIR-LIST. Make the paths absolute.
+list_concat_dirs ()
+{
+ local lcd_list="$1"
+ # Empty path components are meaningful to tex. We rewrite them as
+ # `EMPTY' so they don't get lost when we split on $path_sep.
+ # Hopefully no one will have an actual directory named EMPTY.
+ local replace_EMPTY="-e 's/^$path_sep/EMPTY$path_sep/g' \
+ -e 's/$path_sep\$/${path_sep}EMPTY/g' \
+ -e 's/$path_sep$path_sep/${path_sep}EMPTY:/g'"
+ save_IFS=$IFS
+ IFS=$path_sep
+ set x `echo "$2" | eval sed $replace_EMPTY`; shift
+ IFS=$save_IFS
+ local dir
+ for dir
+ do
+ case $dir in
+ EMPTY)
+ list_append $lcd_list ""
+ ;;
+ *)
+ if test -d $dir; then
+ dir=`absolute "$dir"`
+ list_append $lcd_list "$dir"
+ fi
+ ;;
+ esac
+ done
+}
+
+
+# list_prefix LIST-NAME SEP -> STRING
+# -----------------------------------
+# Return a string that is composed of the LIST-NAME with each item
+# preceded by SEP.
+list_prefix ()
+{
+ local lp_p="$2"
+ eval set X \$$1
+ shift
+ local lp_res
+ for i
+ do
+ lp_res="$lp_res \"$lp_p\" \"$i\""
+ done
+ echo "$lp_res"
+}
+
+# list_infix LIST-NAME SEP -> STRING
+# ----------------------------------
+# Same as list_prefix, but a separator.
+list_infix ()
+{
+ eval set X \$$1
+ shift
+ local la_IFS="$IFS"
+ IFS=$path_sep
+ echo "$*"
+ IFS=$la_IFS
+}
+
+# list_dir_to_abs LIST-NAME
+# -------------------------
+# Convert the list to using only absolute dir names.
+# Currently unused, but should replace absolute_filenames some day.
+list_dir_to_abs ()
+{
+ local ld_l="$1"
+ eval set X \$$ld_l
+ shift
+ local ld_res
+ for dir
+ do
+ dir=`absolute "$dir"`
+ test -d "$dir" || continue
+ ld_res="$ld_res \"$dir\""
+ done
+ set X $ld_res; shift
+ eval $ld_l=\"$@\"
+}
+
+
+## ------------------------------ ##
+## Language auxiliary functions. ##
+## ------------------------------ ##
+
+# out_lang_tex
+# ------------
+# Return the tex output language (DVI or PDF) for $OUT_LANG.
+out_lang_tex ()
+{
+ case $out_lang in
+ dvi | ps | dvipdf ) echo dvi;;
+ pdf ) echo $out_lang;;
+ html | info | text ) echo $out_lang;;
+ *) error 1 "$0: invalid out_lang: $1";;
+ esac
+}
+
+
+# out_lang_ext
+# ------------
+# Return the extension for $OUT_LANG.
+out_lang_ext ()
+{
+ case $out_lang in
+ dvipdf ) echo pdf;;
+ dvi | html | info | pdf | ps | text ) echo $out_lang;;
+ *) error 1 "$0: invalid out_lang: $1";;
+ esac
+}
+
+
+## ------------------------- ##
+## TeX auxiliary functions. ##
+## ------------------------- ##
+
+# Save TEXINPUTS so we can construct a new TEXINPUTS path for each file.
+# Likewise for bibtex and makeindex.
+tex_envvars="BIBINPUTS BSTINPUTS DVIPSHEADERS INDEXSTYLE MFINPUTS MPINPUTS \
+TEXINPUTS TFMFONTS"
+for var in $tex_envvars; do
+ eval ${var}_orig=\$$var
+ export $var
+done
+
+
+# absolute_filenames TEX-PATH -> TEX-PATH
+# ---------------------------------------
+# Convert relative paths to absolute paths, so we can run in another
+# directory (e.g., in tidy build mode, or during the macro-support
+# detection). Prepend ".".
+absolute_filenames ()
+{
+ # Empty path components are meaningful to tex. We rewrite them as
+ # `EMPTY' so they don't get lost when we split on $path_sep.
+ # Hopefully no one will have an actual directory named EMPTY.
+ local replace_empty="-e 's/^$path_sep/EMPTY$path_sep/g' \
+ -e 's/$path_sep\$/${path_sep}EMPTY/g' \
+ -e 's/$path_sep$path_sep/${path_sep}EMPTY:/g'"
+ local res
+ res=`echo "$1" | eval sed $replace_empty`
+ save_IFS=$IFS
+ IFS=$path_sep
+ set x $res; shift
+ res=.
+ for dir
+ do
+ case $dir in
+ EMPTY)
+ res=$res$path_sep
+ ;;
+ *)
+ if test -d "$dir"; then
+ res=$res$path_sep`absolute "$dir"`
+ else
+ # Even if $dir is not a directory, preserve it in the path.
+ # It might contain metacharacters that TeX will expand in
+ # turn, e.g., /some/path/{a,b,c}. This will not get the
+ # implicit absolutification of the path, but we can't help that.
+ res=$res$path_sep$dir
+ fi
+ ;;
+ esac
+ done
+ echo "$res"
+}
+
+
+# output_base_name FILE
+# ---------------------
+# The name of FILE, possibly renamed to satisfy --output.
+output_base_name ()
+{
+ case $oname in
+ '') echo "$1";;
+ *) local out_noext
+ out_noext=`echo "$oname" | sed 's/\.[^.]*$//'`
+ local file_ext
+ file_ext=`echo "$1" | sed 's/^.*\.//'`
+ echo "$out_noext.$file_ext"
+ ;;
+ esac
+}
+
+
+# move_to_dest FILE...
+# --------------------
+# Move FILE to the place where the user expects it. Truly move it, that
+# is, it must not remain in its build location unless that is also the
+# output location. (Otherwise it might appear as an extra file in make
+# distcheck.)
+#
+# FILE can be the principal output (in which case -o directly applies), or
+# an auxiliary file with the same base name.
+move_to_dest ()
+{
+ local dest
+ local destfile
+ local destdir
+ local destbase
+ local sourcedir
+ local sourcebase
+
+ for file
+ do
+ case $tidy:$oname in
+ true:) dest=$orig_pwd;;
+ false:) dest=;;
+ *:*) dest=`output_base_name "$file"`;;
+ esac
+ if test ! -f "$file"; then
+ error 1 "no such file or directory: $file"
+ fi
+ if test -n "$dest"; then
+ # We need to know whether $dest is a directory.
+ if test -d "$dest"; then
+ destdir=$dest
+ destfile=$dest/$file
+ else
+ destdir="`dirname $dest`"
+ destfile=$dest
+ fi
+ # We want to compare the source location and the output location,
+ # and if they are different, do the move. But if they are the
+ # same, we must preserve the source. Since we can't assume
+ # stat(1) or test -ef is available, resort to comparing the
+ # directory names, canonicalized with pwd. We can't use cmp -s
+ # since the output file might not actually change from run to run;
+ # e.g., TeX DVI output is timestamped to only the nearest minute.
+ destdir=`cd $destdir && pwd`
+ destbase=`basename $destfile`
+ #
+ sourcedir=`dirname $file`
+ sourcedir=`cd $sourcedir && pwd`
+ sourcebase=`basename $file`
+ #
+ if test "$sourcedir/$sourcebase" != "$destdir/$destbase"; then
+ verbose "Moving $file to $destfile"
+ rm -f "$destfile"
+ mv "$file" "$destfile"
+ fi
+ fi
+ done
+}
+
+
+## --------------------- ##
+## Managing xref files. ##
+## --------------------- ##
+
+# aux_file_p FILE
+# ---------------
+# Return with success with FILE is an aux file.
+aux_file_p ()
+{
+ test -f "$1" || return 1
+ case $1 in
+ *.aux) return 0;;
+ *) return 1;;
+ esac
+}
+
+# bibaux_file_p FILE
+# ------------------
+# Return with success with FILE is an aux file containing citation
+# requests.
+bibaux_file_p ()
+{
+ test -s "$1" || return 1
+ if (grep '^\\bibstyle[{]' "$1" \
+ && grep '^\\bibdata[{]' "$1" \
+ ## The following line is suspicious: fails when there
+ ## are citations in sub aux files. We need to be
+ ## smarter in this case.
+ ## && grep '^\\citation[{]' "$f"
+ ) >&6 2>&1;
+ then
+ return 0
+ fi
+ return 1
+}
+
+# index_file_p FILE
+# -----------------
+# Return with success with FILE is an index file.
+# When index.sty is used, there is a space before the brace.
+index_file_p ()
+{
+ test -f "$1" || return 1
+ case `sed '1q' "$1"` in
+ "\\entry{"*|"\\indexentry{"*|"\\indexentry {"*) return 0;;
+ *) return 1;;
+ esac
+}
+
+# xref_file_p FILE
+# ----------------
+# Return with success if FILE is an xref file (indexes, tables and lists).
+xref_file_p ()
+{
+ test -f "$1" || return 1
+ # If the file is not suitable to be an index or xref file, don't
+ # process it. It's suitable if the first character is a
+ # backslash or right quote or at, as long as the first line isn't
+ # \input texinfo.
+ case `sed '1q' "$1"` in
+ "\\input texinfo"*) return 1;;
+ [\\''@]*) return 0;;
+ *) return 1;;
+ esac
+}
+
+
+# generated_files_get FILENAME-NOEXT [PREDICATE-FILTER]
+# -----------------------------------------------------
+# Return the list of files generated by the TeX compilation of FILENAME-NOEXT.
+generated_files_get ()
+{
+ local filter=true
+ if test -n "$2"; then
+ filter=$2
+ fi
+
+ # Gather the files created by TeX.
+ (
+ if test -f "$1.log"; then
+ sed -n -e "s,^\\\\openout.* = \`\\(.*\\)'\\.,\\1,p" "$1.log"
+ fi
+ echo "$1.log"
+ ) |
+ # Depending on these files, infer outputs from other tools.
+ while read file; do
+ echo $file
+ case $in_lang in
+ texinfo)
+ # texindex: texinfo.cp -> texinfo.cps
+ if index_file_p $file; then
+ echo ${file}s
+ fi
+ ;;
+ latex)
+ if aux_file_p $file; then
+ # bibtex: *.aux -> *.bbl and *.blg.
+ echo $file | sed 's/^\(.*\)\.aux$/\1.bbl/'
+ echo $file | sed 's/^\(.*\)\.aux$/\1.blg/'
+ # -recorder: .fls
+ echo $file | sed 's/^\(.*\)\.aux$/\1.fls/'
+ fi
+ ;;
+ esac
+ done |
+ # Filter existing files matching the criterion.
+ #
+ # With an input file name containing a space, this produces a
+ # "command not found" message (and filtering is ineffective).
+ # The situation with a newline is presumably even worse.
+ while read file; do
+ if $filter "$file"; then
+ echo $file
+ fi
+ done |
+ sort |
+ # Some files are opened several times, e.g., listings.sty's *.vrb.
+ uniq
+}
+
+
+# xref_files_save
+# ---------------
+# Save the xref files.
+xref_files_save ()
+{
+ # Save copies of auxiliary files for later comparison.
+ xref_files_orig=`generated_files_get "$in_noext" xref_file_p`
+ if test -n "$xref_files_orig"; then
+ verbose "Backing up xref files: $xref_files_orig"
+ # The following line improves `cp $xref_files_orig "$work_bak"'
+ # by preserving the directory parts. Think of
+ # cp chap1/main.aux chap2/main.aux $work_bak.
+ #
+ # Users may have, e.g., --keep-old-files. Don't let this interfere.
+ # (Don't use unset for the sake of ancient shells.)
+ TAR_OPTIONS=; export TAR_OPTIONS
+ tar cf - $xref_files_orig | (cd "$work_bak" && tar xf -)
+ fi
+}
+
+
+# xref_files_changed
+# ------------------
+# Whether the xref files were changed since the previous run.
+xref_files_changed ()
+{
+ # LaTeX (and the package changebar) report in the LOG file if it
+ # should be rerun. This is needed for files included from
+ # subdirs, since texi2dvi does not try to compare xref files in
+ # subdirs. Performing xref files test is still good since LaTeX
+ # does not report changes in xref files.
+ if grep "Rerun to get" "$in_noext.log" >&6 2>&1; then
+ return 0
+ fi
+
+ # If old and new lists don't at least have the same file list,
+ # then one file or another has definitely changed.
+ xref_files_new=`generated_files_get "$in_noext" xref_file_p`
+ verbose "Original xref files = $xref_files_orig"
+ verbose "New xref files = $xref_files_new"
+ if test "x$xref_files_orig" != "x$xref_files_new"; then
+ return 0
+ fi
+
+ # Compare each file until we find a difference.
+ for this_file in $xref_files_new; do
+ verbose "Comparing xref file `echo $this_file | sed 's|\./||g'` ..."
+ # cmp -s returns nonzero exit status if files differ.
+ if cmp -s "$this_file" "$work_bak/$this_file"; then :; else
+ verbose "xref file `echo $this_file | sed 's|\./||g'` differed ..."
+ if $debug; then
+ diff -u "$work_bak/$this_file" "$this_file"
+ fi
+ return 0
+ fi
+ done
+
+ # No change.
+ return 1
+}
+
+
+
+## ----------------------- ##
+## Running the TeX suite. ##
+## ----------------------- ##
+
+
+
+# run_tex ()
+# ----------
+# Run TeX as "$tex $in_input", taking care of errors and logs.
+run_tex ()
+{
+ case $in_lang:`out_lang_tex` in
+ latex:dvi) tex=${LATEX:-latex};;
+ latex:pdf) tex=${PDFLATEX:-pdflatex};;
+ texinfo:dvi)
+ # MetaPost also uses the TEX environment variable. If the user
+ # has set TEX=latex for that reason, don't bomb out.
+ case $TEX in
+ *latex) tex=tex;; # don't bother trying to find etex
+ *) tex=$TEX
+ esac;;
+ texinfo:pdf) tex=$PDFTEX;;
+
+ *) error 1 "$0: $out_lang not supported for $in_lang";;
+ esac
+
+ # Beware of aux files in subdirectories that require the
+ # subdirectory to exist.
+ case $in_lang:$tidy in
+ latex:true)
+ sed -n 's|^[ ]*\\include{\(.*\)/.*}.*|\1|p' "$in_input" |
+ sort -u |
+ while read d
+ do
+ ensure_dir "$work_build/$d"
+ done
+ ;;
+ esac
+
+ # Note that this will be used via an eval: quote properly.
+ local cmd="$tex"
+
+ # If possible, make TeX report error locations in GNU format.
+ if test "${tex_help:+set}" != set; then
+ # Go to a temporary directory to try --help, since old versions that
+ # don't accept --help will generate a texput.log.
+ tex_help_dir=$t2ddir/tex_help
+ ensure_dir "$tex_help_dir"
+ tex_help=`cd "$tex_help_dir" >&6 && $tex --help </dev/null 2>&1`
+ fi
+ if $no_line_error; then :; else
+ # The mk program and perhaps others want to parse TeX's
+ # original error messages.
+ case $line_error:$tex_help in
+ true:*file-line-error*) cmd="$cmd --file-line-error";;
+ esac
+ fi
+
+ # Tell TeX about TCX file, if specified.
+ test -n "$translate_file" && cmd="$cmd --translate-file=$translate_file"
+
+ # Tell TeX to make source specials (for backtracking from output to
+ # source, given a sufficiently smart editor), if specifed.
+ test -n "$src_specials" && cmd="$cmd $src_specials"
+
+ # Tell TeX to be batch if requested.
+ if $batch; then
+ # \batchmode does not show terminal output at all, so we don't
+ # want that. And even in batch mode, TeX insists on having input
+ # from the user. Close its stdin to make it impossible.
+ cmd="$cmd </dev/null '${escape}nonstopmode' '${escape}input'"
+ fi
+
+ # we'd like to handle arbitrary input file names, such as a~b.tex.
+ # This isn't a general way to do it :), though it does work, kind of.
+ # cmd="$cmd '${escape}catcode126=12 \input '"
+
+ # TeX's \input does not (easily or reliably) support whitespace
+ # characters or other special characters in file names. Our intensive
+ # use of absolute file names makes this worse: the enclosing directory
+ # names may include white spaces. Improve the situation using a
+ # symbolic link to the filename in the current directory, in tidy mode
+ # only. Do not alter in_input.
+ #
+ # The filename is almost always tokenized using plain TeX conventions
+ # (the exception would be if the user made a texinfo.fmt file). Not
+ # all the plain TeX special characters cause trouble, but there's no
+ # harm in making the link.
+ #
+ case $tidy:`func_dirname "$in_input"` in
+ true:*["$space$tab$newline\"#\$%\\^_{}"]*)
+ _run_tex_file_name=`basename "$in_input"`
+ if test ! -f "$_run_tex_file_name"; then
+ # It might not be a file, clear it.
+ run rm -f "$_run_tex_file_name"
+ run ln -s "$in_input"
+ fi
+ cmd="$cmd '$_run_tex_file_name'"
+ ;;
+
+ *)
+ cmd="$cmd '$in_input'"
+ ;;
+ esac
+
+ verbose "$0: Running $cmd ..."
+ if eval "$cmd" >&5; then
+ case $out_lang in
+ dvi | pdf ) move_to_dest "$in_noext.$out_lang";;
+ esac
+ else
+ error 1 "$tex exited with bad status, quitting."
+ fi
+}
+
+# run_bibtex ()
+# -------------
+# Run bibtex on current file.
+# - If its input (AUX) exists.
+# - If some citations are missing (LOG contains `Citation').
+# or the LOG complains of a missing .bbl
+#
+# Don't try to be too smart:
+#
+# 1. Running bibtex only if the bbl file exists and is older than
+# the LaTeX file is wrong, since the document might include files
+# that have changed.
+#
+# 3. Because there can be several AUX (if there are \include's),
+# but a single LOG, looking for missing citations in LOG is
+# easier, though we take the risk to match false messages.
+run_bibtex ()
+{
+ case $in_lang in
+ latex) bibtex=${BIBTEX:-bibtex};;
+ texinfo) return;;
+ esac
+
+ # "Citation undefined" is for LaTeX, "Undefined citation" for btxmac.tex.
+ # The no .aux && \bibdata test is also for btxmac, in case it was the
+ # first run of a bibtex-using document. Otherwise, it's possible that
+ # bibtex would never be run.
+ if test -r "$in_noext.aux" \
+ && test -r "$in_noext.log" \
+ && (grep 'Warning:.*Citation.*undefined' "$in_noext.log" \
+ || grep '.*Undefined citation' "$in_noext.log" \
+ || grep 'No file .*\.bbl\.' "$in_noext.log") \
+ || (grep 'No \.aux file' "$in_noext.log" \
+ && grep '^\\bibdata' "$in_noext.aux") \
+ >&6 2>&1; \
+ then
+ for f in `generated_files_get "$in_noext" bibaux_file_p`
+ do
+ run $bibtex "$f"
+ done
+ fi
+}
+
+# run_index ()
+# ------------
+# Run texindex (or makeindex) on current index files. If they already
+# exist, and after running TeX a first time the index files don't
+# change, then there's no reason to run TeX again. But we won't know
+# that if the index files are out of date or nonexistent.
+run_index ()
+{
+ case $in_lang in
+ latex) texindex=${MAKEINDEX:-makeindex};;
+ texinfo) texindex=${TEXINDEX:-texindex};;
+ esac
+ index_files=`generated_files_get $in_noext index_file_p`
+ if test -n "$texindex" && test -n "$index_files"; then
+ run $texindex $index_files
+ fi
+}
+
+
+# run_thumbpdf ()
+# ---------------
+run_thumbpdf ()
+{
+ if test `out_lang_tex` = pdf \
+ && test -r "$in_noext.log" \
+ && grep 'thumbpdf\.sty' "$in_noext.log" >&6 2>&1; \
+ then
+ thumbpdf=${THUMBPDF:-thumbpdf}
+ thumbcmd="$thumbpdf $in_dir/$in_noext"
+ verbose "Running $thumbcmd ..."
+ if $thumbcmd >&5; then
+ run_tex
+ else
+ report "$thumbpdf exited with bad status." \
+ "Ignoring its output."
+ fi
+ fi
+}
+
+
+# run_dvipdf FILE.dvi
+# -------------------
+# Convert FILE.dvi to FILE.pdf.
+run_dvipdf ()
+{
+ # Find which dvi->pdf program is available.
+ if test -z "$dvipdf"; then
+ for i in "$DVIPDF" dvipdfmx dvipdfm dvipdf dvi2pdf dvitopdf;
+ do
+ if findprog $i; then
+ dvipdf=$i
+ fi
+ done
+ fi
+ # These tools have varying interfaces, some 'input output', others
+ # 'input -o output'. They all seem to accept 'input' only,
+ # outputting using the expected file name.
+ run $dvipdf "$1"
+ if test ! -f `echo "$1" | sed -e 's/\.dvi$/.pdf/'`; then
+ error 1 "$0: cannot find output file"
+ fi
+}
+
+# run_tex_suite ()
+# ----------------
+# Run the TeX tools until a fix point is reached.
+run_tex_suite ()
+{
+ # Move to the working directory.
+ if $tidy; then
+ verbose "cd $work_build"
+ cd "$work_build" || exit 1
+ fi
+
+ # Count the number of cycles.
+ local cycle=0
+
+ while :; do
+ cycle=`expr $cycle + 1`
+ verbose "Cycle $cycle for $command_line_filename"
+
+ xref_files_save
+
+ # We run bibtex first, because I can see reasons for the indexes
+ # to change after bibtex is run, but I see no reason for the
+ # converse.
+ run_bibtex
+ run_index
+ run_core_conversion
+
+ xref_files_changed || break
+ done
+
+ # If we were using thumbpdf and producing PDF, then run thumbpdf
+ # and TeX one last time.
+ run_thumbpdf
+
+ # Install the result if we didn't already (i.e., if the output is
+ # dvipdf or ps).
+ case $out_lang in
+ dvipdf)
+ run_dvipdf "$in_noext.`out_lang_tex`"
+ move_to_dest "$in_noext.`out_lang_ext`"
+ ;;
+ ps)
+ dvips -o "$in_noext.`out_lang_ext`" "$in_noext.`out_lang_tex`"
+ move_to_dest "$in_noext.`out_lang_ext`"
+ ;;
+ esac
+
+ cd_orig
+}
+
+## -------------------------------- ##
+## TeX processing auxiliary tools. ##
+## -------------------------------- ##
+
+
+# A sed script that preprocesses Texinfo sources in order to keep the
+# iftex sections only. We want to remove non TeX sections, and comment
+# (with `@c texi2dvi') TeX sections so that makeinfo does not try to
+# parse them. Nevertheless, while commenting TeX sections, don't
+# comment @macro/@end macro so that makeinfo does propagate them.
+# Unfortunately makeinfo --iftex --no-ifinfo doesn't work well enough
+# (yet), makeinfo can't parse the TeX commands, so work around with sed.
+#
+comment_iftex=\
+'/^@tex/,/^@end tex/{
+ s/^/@c texi2dvi/
+}
+/^@iftex/,/^@end iftex/{
+ s/^/@c texi2dvi/
+ /^@c texi2dvi@macro/,/^@c texi2dvi@end macro/{
+ s/^@c texi2dvi//
+ }
+}
+/^@ifnottex/,/^@end ifnottex/{
+ s/^/@c (texi2dvi)/
+}
+/^@ifinfo/,/^@end ifinfo/{
+ /^@node/p
+ /^@menu/,/^@end menu/p
+ t
+ s/^/@c (texi2dvi)/
+}
+s/^@ifnotinfo/@c texi2dvi@ifnotinfo/
+s/^@end ifnotinfo/@c texi2dvi@end ifnotinfo/'
+
+# Uncommenting is simple: Remove any leading `@c texi2dvi'.
+uncomment_iftex='s/^@c texi2dvi//'
+
+
+# run_makeinfo ()
+# ---------------
+# Expand macro commands in the original source file using Makeinfo.
+# Always use `end' footnote style, since the `separate' style
+# generates different output (arguably this is a bug in -E). Discard
+# main info output, the user asked to run TeX, not makeinfo.
+run_makeinfo ()
+{
+ test $in_lang = texinfo \
+ || return 0
+
+ # Unless required by the user, makeinfo expansion is wanted only
+ # if texinfo.tex is too old.
+ if test "$expand" = t; then
+ makeinfo=${MAKEINFO:-makeinfo}
+ else
+ # Check if texinfo.tex performs macro expansion by looking for
+ # its version. The version is a date of the form YEAR-MO-DA.
+ # We don't need to use [0-9] to match the digits since anyway
+ # the comparison with $txiprereq, a number, will fail with non
+ # digits.
+ # Run in a temporary directory to avoid leaving files.
+ version_test_dir=$t2ddir/version_test
+ ensure_dir "$version_test_dir"
+ (
+ cd "$version_test_dir"
+ echo '\input texinfo.tex @bye' >txiversion.tex
+ # Be sure that if tex wants to fail, it is not interactive:
+ # close stdin.
+ $TEX txiversion.tex </dev/null >txiversion.out 2>txiversion.err
+ )
+ if test $? != 0; then
+ cat "$version_test_dir/txiversion.out"
+ cat "$version_test_dir/txiversion.err" >&2
+ error 1 "texinfo.tex appears to be broken, quitting."
+ fi
+ eval `sed -n 's/^.*\[\(.*\)version \(....\)-\(..\)-\(..\).*$/txiformat=\1 txiversion="\2\3\4"/p' "$version_test_dir/txiversion.out"`
+ verbose "texinfo.tex preloaded as \`$txiformat', version is \`$txiversion' ..."
+ if test "$txiprereq" -le "$txiversion" >&6 2>&1; then
+ makeinfo=
+ else
+ makeinfo=${MAKEINFO:-makeinfo}
+ fi
+ # As long as we had to run TeX, offer the user this convenience:
+ if test "$txiformat" = Texinfo; then
+ escape=@
+ fi
+ fi
+
+ if test -n "$makeinfo"; then
+ # in_src: the file with macros expanded.
+ # Use the same basename to generate the same aux file names.
+ work_src=$workdir/src
+ ensure_dir "$work_src"
+ in_src=$work_src/$in_base
+ local miincludes
+ miincludes=`list_prefix includes -I`
+ verbose "Macro-expanding $command_line_filename to $in_src ..."
+ # eval $makeinfo because it might be defined as something complex
+ # (running missing) and then we end up with things like '"-I"',
+ # and "-I" (including the quotes) is not an option name. This
+ # happens with gettext 0.14.5, at least.
+ sed "$comment_iftex" "$command_line_filename" \
+ | eval $makeinfo --footnote-style=end -I "$in_dir" $miincludes \
+ -o /dev/null --macro-expand=- \
+ | sed "$uncomment_iftex" >"$in_src"
+ # Continue only if everything succeeded.
+ if test $? -ne 0 \
+ || test ! -r "$in_src"; then
+ verbose "Expansion failed, ignored...";
+ else
+ in_input=$in_src
+ fi
+ fi
+}
+
+# insert_commands ()
+# ------------------
+# Used most commonly for @finalout, @smallbook, etc.
+insert_commands ()
+{
+ local textra_cmd
+ case $in_lang in
+ latex) textra_cmd=1i;;
+ texinfo) textra_cmd='/^@setfilename/a';;
+ *) error 1 "internal error, unknown language: $in_lang";;
+ esac
+
+ if test -n "$textra"; then
+ # _xtr. The file with the user's extra commands.
+ work_xtr=$workdir/xtr
+ in_xtr=$work_xtr/$in_base
+ ensure_dir "$work_xtr"
+ verbose "Inserting extra commands: $textra"
+ sed "$textra_cmd\\
+$textra" "$in_input" >"$in_xtr"
+ in_input=$in_xtr
+ fi
+}
+
+# run_recode ()
+# -------------
+# If this is a Texinfo file with a specified input encoding, and
+# recode is available, then recode to plain 7 bit Texinfo.
+run_recode ()
+{
+ local from
+ local to
+
+ if test $in_lang = texinfo; then
+ pgm='s/^ *@documentencoding *\([^ ][^ ]*\) *$/\1/
+ t found
+ d
+ :found
+ q'
+ encoding=`sed -e "$pgm" "$in_input"`
+ if $recode && test -n "$encoding" && findprog recode; then
+ if test -n "$recode_from"; then
+ from=$recode_from
+ to=$encoding
+ else
+ from=$encoding
+ to=$texinfo
+ fi
+ verbose "Recoding from $from to $to."
+ # _rcd. The Texinfo file recoded in 7bit.
+ work_rcd=$workdir/recode
+ in_rcd=$work_rcd/$in_base
+ ensure_dir "$work_rcd"
+ if recode "$encoding..$to" <"$in_input" >"$in_rcd" \
+ && test -s "$in_rcd"; then
+ in_input=$in_rcd
+ else
+ verbose "Recoding failed, using original input."
+ fi
+ fi
+ fi
+}
+
+# compute_language FILENAME
+# -------------------------
+# Return the short string describing the language in which FILENAME
+# is written: `texinfo' or `latex'.
+compute_language ()
+{
+ # If the user explicitly specified the language, use that.
+ # Otherwise, if the first line is \input texinfo, assume it's texinfo.
+ # Otherwise, guess from the file extension.
+ if test -n "$set_language"; then
+ echo $set_language
+ elif sed 1q "$1" | grep 'input texinfo' >&6; then
+ echo texinfo
+ else
+ # Get the type of the file (latex or texinfo) from the given language
+ # we just guessed, or from the file extension if not set yet.
+ case $1 in
+ *.ltx | *.tex | *.drv | *.dtx) echo latex;;
+ *) echo texinfo;;
+ esac
+ fi
+}
+
+
+# run_hevea (MODE)
+# ----------------
+# Convert to HTML/INFO/TEXT.
+#
+# Don't pass `-noiso' to hevea: it's useless in HTML since anyway the
+# charset is set to latin1, and troublesome in other modes since
+# accented characters loose their accents.
+#
+# Don't pass `-o DEST' to hevea because in that case it leaves all its
+# auxiliary files there too... Too bad, because it means we will need
+# to handle images some day.
+run_hevea ()
+{
+ local hevea="${HEVEA:-hevea}"
+ local run_hevea="$hevea"
+
+ case $1 in
+ html) ;;
+ text|info) run_hevea="$run_hevea -$1";;
+ *) error 1 "run_hevea: invalid argument: $1";;
+ esac
+
+ # Compiling to the tmp directory enables to preserve a previous
+ # successful compilation.
+ run_hevea="$run_hevea -fix -O -o '$out_base'"
+ run_hevea="$run_hevea `list_prefix includes -I` -I '$orig_pwd' "
+ run_hevea="$run_hevea '$in_input'"
+
+ if $debug; then
+ run_hevea="$run_hevea -v -v"
+ fi
+
+ verbose "running $run_hevea"
+ if eval "$run_hevea" >&5; then
+ # hevea leaves trailing white spaces, this is annoying.
+ case $1 in text|info)
+ perl -pi -e 's/[ \t]+$//g' "$out_base"*;;
+ esac
+ case $1 in
+ html|text) move_to_dest "$out_base";;
+ info) # There can be foo.info-1, foo.info-2 etc.
+ move_to_dest "$out_base"*;;
+ esac
+ else
+ error 1 "$hevea exited with bad status, quitting."
+ fi
+}
+
+
+# run_core_conversion ()
+# ----------------------
+# Run the TeX (or HeVeA).
+run_core_conversion ()
+{
+ case $in_lang:`out_lang_tex` in
+ *:dvi|*:pdf)
+ run_tex;;
+ latex:html|latex:text|latex:info)
+ run_hevea $out_lang;;
+ *)
+ error 1 "invalid input/output combination: $in_lang/$out_lang";;
+ esac
+}
+
+
+# compile ()
+# ----------
+# Run the full compilation chain, from pre-processing to installation
+# of the output at its expected location.
+compile ()
+{
+ # Source file might include additional sources.
+ # We want `.:$orig_pwd' before anything else. (We'll add `.:' later
+ # after all other directories have been turned into absolute paths.)
+ # `.' goes first to ensure that any old .aux, .cps,
+ # etc. files in ${directory} don't get used in preference to fresher
+ # files in `.'. Include orig_pwd in case we are in clean build mode, where
+ # we've cd'd to a temp directory.
+ txincludes=`list_infix includes $path_sep`
+ common="$orig_pwd$path_sep$in_dir$path_sep$txincludes$path_sep"
+ for var in $tex_envvars; do
+ eval val="\$common\$${var}_orig"
+ # Convert relative paths to absolute paths, so we can run in another
+ # directory (e.g., in clean build mode, or during the macro-support
+ # detection). ".:" is added here.
+ val=`absolute_filenames "$val"`
+ eval $var="\"$val\""
+ export $var
+ eval verbose \"$var=\'\$${var}\'\"
+ done
+
+ # --expand
+ run_makeinfo
+
+ # --command, --texinfo
+ insert_commands
+
+ # --recode
+ run_recode
+
+ # Run until a fix point is reached.
+ run_tex_suite
+}
+
+
+# remove FILES
+# ------------
+remove ()
+{
+ verbose "Removing" "$@"
+ rm -rf "$@"
+}
+
+
+# mostly_clean
+# ------------
+# Remove auxiliary files and directories. Changes the current directory.
+mostly_clean ()
+{
+ cd_orig
+ set X "$t2ddir"
+ shift
+ $tidy || {
+ local log="$work_build/$in_noext.log"
+ set X ${1+"$@"} "$log" `generated_files_get "$work_build/$in_noext"`
+ shift
+ }
+ remove ${1+"$@"}
+}
+
+
+# cleanup ()
+# ----------
+# Remove what should be removed according to options.
+# Called at the end of each compilation cycle, and at the end of
+# the script. Changes the current directory.
+cleanup ()
+{
+ case $build_mode in
+ local) cd_orig; remove "$t2ddir";;
+ clean) mostly_clean;;
+ tidy) ;;
+ esac
+}
+
+
+
+## ---------------------- ##
+## Command line parsing. ##
+## ---------------------- ##
+
+# Push a token among the arguments that will be used to notice when we
+# ended options/arguments parsing.
+# Use "set dummy ...; shift" rather than 'set - ..." because on
+# Solaris set - turns off set -x (but keeps set -e).
+# Use ${1+"$@"} rather than "$@" because Digital Unix and Ultrix 4.3
+# still expand "$@" to a single argument (the empty string) rather
+# than nothing at all.
+arg_sep="$$--$$"
+set dummy ${1+"$@"} "$arg_sep"; shift
+
+#
+# Parse command line arguments.
+while test x"$1" != x"$arg_sep"; do
+
+ # Handle --option=value by splitting apart and putting back on argv.
+ case "$1" in
+ --*=*)
+ opt=`echo "$1" | sed -e 's/=.*//'`
+ val=`echo "$1" | sed -e 's/[^=]*=//'`
+ shift
+ set dummy "$opt" "$val" ${1+"$@"}; shift
+ ;;
+ esac
+
+ # This recognizes --quark as --quiet. So what.
+ case "$1" in
+ -@ ) escape=@;;
+ # Silently and without documentation accept -b and --b[atch] as synonyms.
+ -b | --batch) batch=true;;
+ --build) shift; build_mode=$1;;
+ --build-dir) shift; build_dir=$1; build_mode=tidy;;
+ -c | --clean) build_mode=clean;;
+ -D | --debug) debug=true;;
+ --dvi) out_lang=dvi;;
+ --dvipdf) out_lang=dvipdf;;
+ -e | -E | --expand) expand=t;;
+ -h | --help) usage;;
+ --html) out_lang=html;;
+ -I) shift; list_concat_dirs includes "$1";;
+ --info) out_lang=info;;
+ -l | --lang | --language) shift; set_language=$1;;
+ --mostly-clean) action=mostly-clean;;
+ --no-line-error) no_line_error=true;;
+ -o | --out | --output)
+ shift
+ # Make it absolute, just in case we also have --clean, or whatever.
+ oname=`absolute "$1"`;;
+ -p | --pdf) out_lang=pdf;;
+ --ps) out_lang=ps;;
+ -q | -s | --quiet | --silent) quiet=true; batch=true;;
+ -r | --recode) recode=true;;
+ --recode-from) shift; recode=true; recode_from="$1";;
+ --src-specials) src_specials=--src-specials;;
+ -t | --texinfo | --command ) shift; textra="$textra\\
+"`echo "$1" | sed 's/\\\\/\\\\\\\\/g'`;;
+ --text) out_lang=text;;
+ --translate-file ) shift; translate_file="$1";;
+ --tidy) build_mode=tidy;;
+ -v | --vers*) version;;
+ -V | --verb*) verb=true;;
+ --) # What remains are not options.
+ shift
+ while test x"$1" != x"$arg_sep"; do
+ set dummy ${1+"$@"} "$1"; shift
+ shift
+ done
+ break;;
+ -*)
+ error 1 "Unknown or ambiguous option \`$1'." \
+ "Try \`--help' for more information."
+ ;;
+ *) set dummy ${1+"$@"} "$1"; shift;;
+ esac
+ shift
+done
+# Pop the token
+shift
+
+# $tidy: compile in a t2d directory.
+# $clean: remove all the aux files.
+case $build_mode in
+ local) clean=false; tidy=false;;
+ tidy) clean=false; tidy=true;;
+ clean) clean=true; tidy=true;;
+ *) error 1 "invalid build mode: $build_mode";;
+esac
+
+# Interpret remaining command line args as filenames.
+case $# in
+ 0)
+ error 2 "Missing file arguments." "Try \`--help' for more information."
+ ;;
+ 1) ;;
+ *)
+ if test -n "$oname"; then
+ error 2 "Can't use option \`--output' with more than one argument."
+ fi
+ ;;
+esac
+
+
+# We can't do much without tex.
+#
+if findprog ${TEX:-tex}; then :; else cat <<EOM
+You don't have a working TeX binary (${TEX:-tex}) installed anywhere in
+your PATH, and texi2dvi cannot proceed without one. If you want to use
+this script, you'll need to install TeX (if you don't have it) or change
+your PATH or TEX environment variable (if you do). See the --help
+output for more details.
+
+For information about obtaining TeX, please see http://www.tug.org. If
+you happen to be using Debian, you can get it with this command:
+ apt-get install tetex-bin
+EOM
+ exit 1
+fi
+
+
+# We want to use etex (or pdftex) if they are available, and the user
+# didn't explicitly specify. We don't check for elatex and pdfelatex
+# because (as of 2003), the LaTeX team has asked that new distributions
+# use etex by default anyway.
+#
+# End up with the TEX and PDFTEX variables set to what we are going to use.
+if test -z "$TEX"; then
+ if findprog etex; then TEX=etex; else TEX=tex; fi
+fi
+#
+if test -z "$PDFTEX"; then
+ if findprog pdfetex; then PDFTEX=pdfetex; else PDFTEX=pdftex; fi
+fi
+
+
+# File descriptor usage:
+# 0 standard input
+# 1 standard output (--verbose messages)
+# 2 standard error
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 5 tools output (turned off by --quiet)
+# 6 tracing/debugging (set -x output, etc.)
+
+
+# Main tools' output (TeX, etc.) that TeX users are used to seeing.
+#
+# If quiet, discard, else redirect to the message flow.
+if $quiet; then
+ exec 5>/dev/null
+else
+ exec 5>&1
+fi
+
+
+# Enable tracing, and auxiliary tools output.
+#
+# Should be used where you'd typically use /dev/null to throw output
+# away. But sometimes it is convenient to see that output (e.g., from
+# a grep) to aid debugging. Especially debugging at distance, via the
+# user.
+if $debug; then
+ exec 6>&1
+ set -x
+else
+ exec 6>/dev/null
+fi
+
+#
+
+# input_file_name_decode
+# ----------------------
+# Decode COMMAND_LINE_FILENAME, and compute:
+# - COMMAND_LINE_FILENAME clean of TeX commands
+# - IN_DIR
+# The directory to the input file, possibly absolute if needed.
+# - IN_DIR_ABS
+# The absolute directory of the input file.
+# - IN_BASE
+# The input file base name (no directory part).
+# - IN_NOEXT
+# The input file name without extensions (nor directory part).
+# - IN_INPUT
+# Defaults to COMMAND_LINE_FILENAME, but might change if the
+# input is preprocessed (recode etc.). With directory, possibly absolute.
+input_file_name_decode ()
+{
+ # See if we are run from within AUC-Tex, in which case we are
+ # passed `\input{FOO.tex}' or even `\nonstopmode\input{FOO.tex}'.
+ case $command_line_filename in
+ *\\nonstopmode*)
+ batch=true;;
+ esac
+ case $command_line_filename in
+ *\\input{*}*)
+ # Let AUC-TeX error parser deal with line numbers.
+ line_error=false
+ command_line_filename=`\
+ expr X"$command_line_filename" : X'.*input{\([^}]*\)}'`
+ ;;
+ esac
+
+ # If the COMMAND_LINE_FILENAME is not absolute (e.g., --debug.tex),
+ # prepend `./' in order to avoid that the tools take it as an option.
+ echo "$command_line_filename" | $EGREP '^(/|[A-z]:/)' >&6 \
+ || command_line_filename="./$command_line_filename"
+
+ # See if the file exists. If it doesn't we're in trouble since, even
+ # though the user may be able to reenter a valid filename at the tex
+ # prompt (assuming they're attending the terminal), this script won't
+ # be able to find the right xref files and so forth.
+ test -r "$command_line_filename" ||
+ error 1 "cannot read $command_line_filename, skipping."
+
+ # Get the name of the current directory.
+ in_dir=`func_dirname "$command_line_filename"`
+ in_dir_abs=`absolute "$in_dir"`
+ # In a clean build, we `cd', so get an absolute file name.
+ if $tidy; then
+ in_dir=$in_dir_abs
+ fi
+
+ # Strip directory part but leave extension.
+ in_base=`basename "$command_line_filename"`
+ # Strip extension.
+ in_noext=`echo "$in_base" | sed 's/\.[^.]*$//'`
+
+ # The normalized file name to compile. Must always point to the
+ # file to actually compile (in case of recoding, macro-expansion etc.).
+ in_input=$in_dir/$in_base
+
+
+ # Compute the output file name.
+ if test x"$oname" != x; then
+ out_name=$oname
+ else
+ out_name=$in_noext.`out_lang_ext`
+ fi
+ out_dir=`func_dirname "$out_name"`
+ out_dir_abs=`absolute "$out_dir"`
+ out_base=`basename "$out_name"`
+ out_noext=`echo "$out_base" | sed 's/\.[^.]*$//'`
+}
+
+
+## -------------- ##
+## TeXify files. ##
+## -------------- ##
+
+for command_line_filename
+do
+ verbose "Processing $command_line_filename ..."
+
+ input_file_name_decode
+
+ # `texinfo' or `latex'?
+ in_lang=`compute_language "$command_line_filename"`
+
+ # An auxiliary directory used for all the auxiliary tasks involved
+ # in compiling this document.
+ case $build_dir in
+ '' | . ) t2ddir=$out_noext.t2d ;;
+ *) # Avoid collisions between multiple occurrences of the same
+ # file. The sed expression is fragile if the cwd has
+ # active characters.
+ t2ddir=$build_dir/`echo "$out_dir_abs/$out_noext.t2d" |
+ sed "s,^$orig_pwd/,," |
+ sed 's,/,!,g'`
+ esac
+ # Remove it at exit if clean mode.
+ trap "cleanup" 0 1 2 15
+
+ ensure_dir "$build_dir" "$t2ddir"
+
+ # We will change directory, better work with an absolute path...
+ t2ddir=`absolute "$t2ddir"`
+ # Sometimes there are incompatibilities between auxiliary files for
+ # DVI and PDF. The contents can also change whether we work on PDF
+ # and/or DVI. So keep separate spaces for each.
+ workdir=$t2ddir/`out_lang_tex`
+ ensure_dir "$workdir"
+
+ # _build. In a tidy build, where the auxiliary files are output.
+ if $tidy; then
+ work_build=$workdir/build
+ else
+ work_build=.
+ fi
+
+ # _bak. Copies of the previous auxiliary files (another round is
+ # run if they differ from the new ones).
+ work_bak=$workdir/bak
+
+ # Make those directories.
+ ensure_dir "$work_build" "$work_bak"
+
+ case $action in
+ compile)
+ # Compile the document.
+ compile
+ cleanup
+ ;;
+
+ mostly-clean)
+ mostly_clean
+ ;;
+ esac
+done
+
+verbose "done."
+exit 0 # exit successfully, not however we ended the loop.
diff --git a/util/texi2dvi.test b/util/texi2dvi.test
new file mode 100755
index 0000000..2f3f075
--- /dev/null
+++ b/util/texi2dvi.test
@@ -0,0 +1,84 @@
+#! /bin/sh
+# Copyright (C) 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+#
+# This file is part of GNU Texinfo.
+#
+# GNU Texinfo is free software; you can redistribute it and/or modify
+# 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 Texinfo is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+required='tex'
+
+. ./defs || exit 1
+
+set -e
+
+# one_run ARGS -- FILES
+# ---------------------
+# Run texi2dvi with ARGS, expect the FILES to be left. Remove them.
+one_run ()
+{
+ # Testing the local build mode.
+ # Use @foo to check that -t works properly.
+ echo "@foo" | create_input_texi
+ TEXI2DVI_pass $(optionset_get 1 "$@") \
+ -t '@macro foo' \
+ -t 'Foo' \
+ -t '@end macro' \
+ input.texi
+ # There should only be the expected FILES and the input file.
+ assert_and_remove_files $(optionset_get 2 "$@") input.texi
+}
+
+one_run --batch \
+ -- \
+ input.aux input.cp input.dvi input.fn input.ky input.log \
+ input.pg input.tp input.vr
+
+
+one_run --batch -o output.dvi \
+ -- \
+ input.aux input.cp input.fn input.ky input.log \
+ input.pg input.tp input.vr output.dvi
+
+
+# Testing the clean build mode.
+for mode in --clean --build=clean
+do
+ # There should only be the DVI and the TEXI file.
+ one_run $mode --batch -- input.dvi
+
+ # There should only be the DVI and the TEXI file.
+ one_run $mode --batch -o output.dvi -- output.dvi
+done
+
+
+# Testing the tidy build mode.
+one_run --build=tidy --batch -o output.dvi \
+ -- \
+ output.dvi output.t2d
+
+
+# mostly-clean should remove auxiliary files, but not the expected
+# output.
+touch output.dvi
+one_run --build=tidy --batch -o output.dvi --mostly-clean \
+ -- \
+ output.dvi
+
+
+# There should only be the DVI and the TEXI file.
+create_input_texi </dev/null
+cp input.texi input2.texi
+one_run --clean --batch input.texi input2.texi \
+ -- \
+ input2.dvi input2.texi input.dvi
diff --git a/util/texi2pdf b/util/texi2pdf
new file mode 100755
index 0000000..a030a74
--- /dev/null
+++ b/util/texi2pdf
@@ -0,0 +1,19 @@
+#!/bin/sh
+# $Id: texi2pdf,v 1.2 2005/01/28 01:52:04 karl Exp $
+# Written by Thomas Esser. Public domain.
+# Execute texi2dvi --pdf.
+
+test -f /bin/ksh && test -z "$RUNNING_KSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
+ && { RUNNING_KSH=true; export RUNNING_KSH; exec /bin/ksh $0 ${1+"$@"}; }
+unset RUNNING_KSH
+
+test -f /bin/bsh && test -z "$RUNNING_BSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \
+ && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; }
+unset RUNNING_BSH
+
+# hack around a bug in zsh:
+test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"'
+
+texi2dvi --pdf ${1+"$@"}
diff --git a/util/texindex.c b/util/texindex.c
new file mode 100644
index 0000000..431f27e
--- /dev/null
+++ b/util/texindex.c
@@ -0,0 +1,1194 @@
+/* texindex -- sort TeX index dribble output into an actual index.
+ $Id: texindex.c,v 1.24 2008/02/22 19:18:25 karl Exp $
+
+ Copyright (C) 1987, 1991, 1992, 1996, 1997, 1998, 1999, 2000, 2001,
+ 2002, 2003, 2004, 2005, 2006, 2007, 2008 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 "system.h"
+#include <getopt.h>
+
+char *program_name = "texindex";
+
+#if defined (emacs)
+# include "../src/config.h"
+/* Some s/os.h files redefine these. */
+# undef read
+# undef close
+# undef write
+# undef open
+#endif
+
+#if !defined (HAVE_MEMSET)
+#undef memset
+#define memset(ptr, ignore, count) bzero (ptr, count)
+#endif
+
+#if !defined (SEEK_SET)
+# define SEEK_SET 0
+# define SEEK_CUR 1
+# define SEEK_END 2
+#endif /* !SEEK_SET */
+
+/* When sorting in core, this structure describes one line
+ and the position and length of its first keyfield. */
+struct lineinfo
+{
+ char *text; /* The actual text of the line. */
+ union {
+ char *text; /* The start of the key (for textual comparison). */
+ long number; /* The numeric value (for numeric comparison). */
+ } key;
+ long keylen; /* Length of KEY field. */
+};
+
+/* This structure describes a field to use as a sort key. */
+struct keyfield
+{
+ int startwords; /* Number of words to skip. */
+ int startchars; /* Number of additional chars to skip. */
+ int endwords; /* Number of words to ignore at end. */
+ int endchars; /* Ditto for characters of last word. */
+ char ignore_blanks; /* Non-zero means ignore spaces and tabs. */
+ char fold_case; /* Non-zero means case doesn't matter. */
+ char reverse; /* Non-zero means compare in reverse order. */
+ char numeric; /* Non-zeros means field is ASCII numeric. */
+ char positional; /* Sort according to file position. */
+ char braced; /* Count balanced-braced groupings as fields. */
+};
+
+/* Vector of keyfields to use. */
+struct keyfield keyfields[3];
+
+/* Number of keyfields stored in that vector. */
+int num_keyfields = 3;
+
+/* Vector of input file names, terminated with a null pointer. */
+char **infiles;
+
+/* Vector of corresponding output file names, or NULL, meaning default it
+ (add an `s' to the end). */
+char **outfiles;
+
+/* Length of `infiles'. */
+int num_infiles;
+
+/* Pointer to the array of pointers to lines being sorted. */
+char **linearray;
+
+/* The allocated length of `linearray'. */
+long nlines;
+
+/* During in-core sort, this points to the base of the data block
+ which contains all the lines of data. */
+char *text_base;
+
+/* Initially 0; changed to 1 if we want initials in this index. */
+int need_initials;
+
+/* Remembers the first initial letter seen in this index, so we can
+ determine whether we need initials in the sorted form. */
+char first_initial;
+
+/* Forward declarations of functions in this file. */
+void decode_command (int argc, char **argv);
+void sort_in_core (char *infile, int total, char *outfile);
+char **parsefile (char *filename, char **nextline, char *data, long int size);
+char *find_field (struct keyfield *keyfield, char *str, long int *lengthptr);
+char *find_pos (char *str, int words, int chars, int ignore_blanks);
+long find_value (char *start, long int length);
+char *find_braced_pos (char *str, int words, int chars, int ignore_blanks);
+char *find_braced_end (char *str);
+void writelines (char **linearray, int nlines, FILE *ostream);
+int compare_field (struct keyfield *keyfield, char *start1,
+ long int length1, long int pos1, char *start2,
+ long int length2, long int pos2);
+int compare_full (const void *, const void *);
+void pfatal_with_name (const char *name);
+void fatal (const char *format, const char *arg);
+void error (const char *format, const char *arg);
+void *xmalloc (), *xrealloc ();
+static char *concat3 (const char *, const char *, const char *);
+
+int
+main (int argc, char *argv[])
+{
+ int i;
+
+#ifdef HAVE_SETLOCALE
+ /* Set locale via LC_ALL. */
+ setlocale (LC_ALL, "");
+#endif
+
+ /* Set the text message domain. */
+ bindtextdomain (PACKAGE, LOCALEDIR);
+ textdomain (PACKAGE);
+
+ /* In case we write to a redirected stdout that fails. */
+ /* not ready atexit (close_stdout); */
+
+ /* Describe the kind of sorting to do. */
+ /* The first keyfield uses the first braced field and folds case. */
+ keyfields[0].braced = 1;
+ keyfields[0].fold_case = 1;
+ keyfields[0].endwords = -1;
+ keyfields[0].endchars = -1;
+
+ /* The second keyfield uses the second braced field, numerically. */
+ keyfields[1].braced = 1;
+ keyfields[1].numeric = 1;
+ keyfields[1].startwords = 1;
+ keyfields[1].endwords = -1;
+ keyfields[1].endchars = -1;
+
+ /* The third keyfield (which is ignored while discarding duplicates)
+ compares the whole line. */
+ keyfields[2].endwords = -1;
+ keyfields[2].endchars = -1;
+
+ decode_command (argc, argv);
+
+ /* Process input files completely, one by one. */
+
+ for (i = 0; i < num_infiles; i++)
+ {
+ int desc;
+ off_t ptr;
+ char *outfile;
+ struct stat instat;
+
+ desc = open (infiles[i], O_RDONLY, 0);
+ if (desc < 0)
+ pfatal_with_name (infiles[i]);
+
+ if (stat (infiles[i], &instat))
+ pfatal_with_name (infiles[i]);
+ if (S_ISDIR (instat.st_mode))
+ {
+#ifdef EISDIR
+ errno = EISDIR;
+#endif
+ pfatal_with_name (infiles[i]);
+ }
+
+ lseek (desc, (off_t) 0, SEEK_END);
+ ptr = (off_t) lseek (desc, (off_t) 0, SEEK_CUR);
+
+ close (desc);
+
+ outfile = outfiles[i];
+ if (!outfile)
+ outfile = concat3 (infiles[i], "s", "");
+
+ need_initials = 0;
+ first_initial = '\0';
+
+ if (ptr != (int)ptr)
+ {
+ fprintf (stderr, "%s: %s: file too large\n", program_name,
+ infiles[i]);
+ xexit (1);
+ }
+ sort_in_core (infiles[i], (int)ptr, outfile);
+ }
+
+ xexit (0);
+ return 0; /* Avoid bogus warnings. */
+}
+
+typedef struct
+{
+ char *long_name;
+ char *short_name;
+ int *variable_ref;
+ int variable_value;
+ char *arg_name;
+ char *doc_string;
+} TEXINDEX_OPTION;
+
+TEXINDEX_OPTION texindex_options[] = {
+ { "--help", "-h", (int *)NULL, 0, (char *)NULL,
+ N_("display this help and exit") },
+ { "--output", "-o", (int *)NULL, 0, "FILE",
+ N_("send output to FILE") },
+ { "--version", (char *)NULL, (int *)NULL, 0, (char *)NULL,
+ N_("display version information and exit") },
+ { (char *)NULL, (char *)NULL, (int *)NULL, 0, (char *)NULL }
+};
+
+void
+usage (int result_value)
+{
+ register int i;
+ FILE *f = result_value ? stderr : stdout;
+
+ fprintf (f, _("Usage: %s [OPTION]... FILE...\n"), program_name);
+ fprintf (f, _("Generate a sorted index for each TeX output FILE.\n"));
+ /* Avoid trigraph nonsense. */
+ fprintf (f,
+_("Usually FILE... is specified as `foo.%c%c\' for a document `foo.texi'.\n"),
+ '?', '?'); /* avoid trigraph in cat-id-tbl.c */
+ fprintf (f, _("\nOptions:\n"));
+
+ for (i = 0; texindex_options[i].long_name; i++)
+ {
+ putc (' ', f);
+
+ if (texindex_options[i].short_name)
+ fprintf (f, "%s, ", texindex_options[i].short_name);
+
+ fprintf (f, "%s %s",
+ texindex_options[i].long_name,
+ texindex_options[i].arg_name
+ ? texindex_options[i].arg_name : "");
+
+ fprintf (f, "\t%s\n", _(texindex_options[i].doc_string));
+ }
+ fputs (_("\n\
+Email bug reports to bug-texinfo@gnu.org,\n\
+general questions and discussion to help-texinfo@gnu.org.\n\
+Texinfo home page: http://www.gnu.org/software/texinfo/"), f);
+ fputs ("\n", f);
+
+ xexit (result_value);
+}
+
+/* Decode the command line arguments to set the parameter variables
+ and set up the vector of keyfields and the vector of input files. */
+
+void
+decode_command (int argc, char **argv)
+{
+ int arg_index = 1;
+ char **ip;
+ char **op;
+
+ /* Allocate ARGC input files, which must be enough. */
+
+ infiles = (char **) xmalloc (argc * sizeof (char *));
+ outfiles = (char **) xmalloc (argc * sizeof (char *));
+ ip = infiles;
+ op = outfiles;
+
+ while (arg_index < argc)
+ {
+ char *arg = argv[arg_index++];
+
+ if (*arg == '-')
+ {
+ if (strcmp (arg, "--version") == 0)
+ {
+ printf ("texindex (GNU %s) %s\n", PACKAGE, VERSION);
+ puts ("");
+ printf (_("Copyright (C) %s Free Software Foundation, Inc.\n\
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n\
+This is free software: you are free to change and redistribute it.\n\
+There is NO WARRANTY, to the extent permitted by law.\n"),
+ "2008");
+ xexit (0);
+ }
+ else if ((strcmp (arg, "--keep") == 0) ||
+ (strcmp (arg, "-k") == 0))
+ {
+ /* Ignore, for backward compatibility */
+ }
+ else if ((strcmp (arg, "--help") == 0) ||
+ (strcmp (arg, "-h") == 0))
+ {
+ usage (0);
+ }
+ else if ((strcmp (arg, "--output") == 0) ||
+ (strcmp (arg, "-o") == 0))
+ {
+ if (argv[arg_index] != (char *)NULL)
+ {
+ arg_index++;
+ if (op > outfiles)
+ *(op - 1) = argv[arg_index];
+ }
+ else
+ usage (1);
+ }
+ else
+ usage (1);
+ }
+ else
+ {
+ *ip++ = arg;
+ *op++ = (char *)NULL;
+ }
+ }
+
+ /* Record number of keyfields and terminate list of filenames. */
+ num_infiles = ip - infiles;
+ *ip = (char *)NULL;
+ if (num_infiles == 0)
+ usage (1);
+}
+
+/* Compare LINE1 and LINE2 according to the specified set of keyfields. */
+
+int
+compare_full (const void *p1, const void *p2)
+{
+ char **line1 = (char **) p1;
+ char **line2 = (char **) p2;
+ int i;
+
+ /* Compare using the first keyfield;
+ if that does not distinguish the lines, try the second keyfield;
+ and so on. */
+
+ for (i = 0; i < num_keyfields; i++)
+ {
+ long length1, length2;
+ char *start1 = find_field (&keyfields[i], *line1, &length1);
+ char *start2 = find_field (&keyfields[i], *line2, &length2);
+ int tem = compare_field (&keyfields[i], start1, length1,
+ *line1 - text_base,
+ start2, length2, *line2 - text_base);
+ if (tem)
+ {
+ if (keyfields[i].reverse)
+ return -tem;
+ return tem;
+ }
+ }
+
+ return 0; /* Lines match exactly. */
+}
+
+/* Compare LINE1 and LINE2, described by structures
+ in which the first keyfield is identified in advance.
+ For positional sorting, assumes that the order of the lines in core
+ reflects their nominal order. */
+int
+compare_prepared (const void *p1, const void *p2)
+{
+ struct lineinfo *line1 = (struct lineinfo *) p1;
+ struct lineinfo *line2 = (struct lineinfo *) p2;
+ int i;
+ int tem;
+ char *text1, *text2;
+
+ /* Compare using the first keyfield, which has been found for us already. */
+ if (keyfields->positional)
+ {
+ if (line1->text - text_base > line2->text - text_base)
+ tem = 1;
+ else
+ tem = -1;
+ }
+ else if (keyfields->numeric)
+ tem = line1->key.number - line2->key.number;
+ else
+ tem = compare_field (keyfields, line1->key.text, line1->keylen, 0,
+ line2->key.text, line2->keylen, 0);
+ if (tem)
+ {
+ if (keyfields->reverse)
+ return -tem;
+ return tem;
+ }
+
+ text1 = line1->text;
+ text2 = line2->text;
+
+ /* Compare using the second keyfield;
+ if that does not distinguish the lines, try the third keyfield;
+ and so on. */
+
+ for (i = 1; i < num_keyfields; i++)
+ {
+ long length1, length2;
+ char *start1 = find_field (&keyfields[i], text1, &length1);
+ char *start2 = find_field (&keyfields[i], text2, &length2);
+ int tem = compare_field (&keyfields[i], start1, length1,
+ text1 - text_base,
+ start2, length2, text2 - text_base);
+ if (tem)
+ {
+ if (keyfields[i].reverse)
+ return -tem;
+ return tem;
+ }
+ }
+
+ return 0; /* Lines match exactly. */
+}
+
+/* Like compare_full but more general.
+ You can pass any strings, and you can say how many keyfields to use.
+ POS1 and POS2 should indicate the nominal positional ordering of
+ the two lines in the input. */
+
+int
+compare_general (char *str1, char *str2, long int pos1, long int pos2, int use_keyfields)
+{
+ int i;
+
+ /* Compare using the first keyfield;
+ if that does not distinguish the lines, try the second keyfield;
+ and so on. */
+
+ for (i = 0; i < use_keyfields; i++)
+ {
+ long length1, length2;
+ char *start1 = find_field (&keyfields[i], str1, &length1);
+ char *start2 = find_field (&keyfields[i], str2, &length2);
+ int tem = compare_field (&keyfields[i], start1, length1, pos1,
+ start2, length2, pos2);
+ if (tem)
+ {
+ if (keyfields[i].reverse)
+ return -tem;
+ return tem;
+ }
+ }
+
+ return 0; /* Lines match exactly. */
+}
+
+/* Find the start and length of a field in STR according to KEYFIELD.
+ A pointer to the starting character is returned, and the length
+ is stored into the int that LENGTHPTR points to. */
+
+char *
+find_field (struct keyfield *keyfield, char *str, long int *lengthptr)
+{
+ char *start;
+ char *end;
+ char *(*fun) ();
+
+ if (keyfield->braced)
+ fun = find_braced_pos;
+ else
+ fun = find_pos;
+
+ start = (*fun) (str, keyfield->startwords, keyfield->startchars,
+ keyfield->ignore_blanks);
+ if (keyfield->endwords < 0)
+ {
+ if (keyfield->braced)
+ end = find_braced_end (start);
+ else
+ {
+ end = start;
+ while (*end && *end != '\n')
+ end++;
+ }
+ }
+ else
+ {
+ end = (*fun) (str, keyfield->endwords, keyfield->endchars, 0);
+ if (end - str < start - str)
+ end = start;
+ }
+ *lengthptr = end - start;
+ return start;
+}
+
+/* Return a pointer to a specified place within STR,
+ skipping (from the beginning) WORDS words and then CHARS chars.
+ If IGNORE_BLANKS is nonzero, we skip all blanks
+ after finding the specified word. */
+
+char *
+find_pos (char *str, int words, int chars, int ignore_blanks)
+{
+ int i;
+ char *p = str;
+
+ for (i = 0; i < words; i++)
+ {
+ char c;
+ /* Find next bunch of nonblanks and skip them. */
+ while ((c = *p) == ' ' || c == '\t')
+ p++;
+ while ((c = *p) && c != '\n' && !(c == ' ' || c == '\t'))
+ p++;
+ if (!*p || *p == '\n')
+ return p;
+ }
+
+ while (*p == ' ' || *p == '\t')
+ p++;
+
+ for (i = 0; i < chars; i++)
+ {
+ if (!*p || *p == '\n')
+ break;
+ p++;
+ }
+ return p;
+}
+
+/* Like find_pos but assumes that each field is surrounded by braces
+ and that braces within fields are balanced. */
+
+char *
+find_braced_pos (char *str, int words, int chars, int ignore_blanks)
+{
+ int i;
+ int bracelevel;
+ char *p = str;
+ char c;
+
+ for (i = 0; i < words; i++)
+ {
+ bracelevel = 1;
+ while ((c = *p++) != '{' && c != '\n' && c)
+ /* Do nothing. */ ;
+ if (c != '{')
+ return p - 1;
+ while (bracelevel)
+ {
+ c = *p++;
+ if (c == '{')
+ bracelevel++;
+ if (c == '}')
+ bracelevel--;
+ if (c == 0 || c == '\n')
+ return p - 1;
+ }
+ }
+
+ while ((c = *p++) != '{' && c != '\n' && c)
+ /* Do nothing. */ ;
+
+ if (c != '{')
+ return p - 1;
+
+ if (ignore_blanks)
+ while ((c = *p) == ' ' || c == '\t')
+ p++;
+
+ for (i = 0; i < chars; i++)
+ {
+ if (!*p || *p == '\n')
+ break;
+ p++;
+ }
+ return p;
+}
+
+/* Find the end of the balanced-brace field which starts at STR.
+ The position returned is just before the closing brace. */
+
+char *
+find_braced_end (char *str)
+{
+ int bracelevel;
+ char *p = str;
+ char c;
+
+ bracelevel = 1;
+ while (bracelevel)
+ {
+ c = *p++;
+ if (c == '{')
+ bracelevel++;
+ if (c == '}')
+ bracelevel--;
+ if (c == 0 || c == '\n')
+ return p - 1;
+ }
+ return p - 1;
+}
+
+long
+find_value (char *start, long int length)
+{
+ while (length != 0L)
+ {
+ if (isdigit (*start))
+ return atol (start);
+ length--;
+ start++;
+ }
+ return 0l;
+}
+
+/* Vector used to translate characters for comparison.
+ This is how we make all alphanumerics follow all else,
+ and ignore case in the first sorting. */
+int char_order[256];
+
+void
+init_char_order (void)
+{
+ int i;
+ for (i = 1; i < 256; i++)
+ char_order[i] = i;
+
+ for (i = '0'; i <= '9'; i++)
+ char_order[i] += 512;
+
+ for (i = 'a'; i <= 'z'; i++)
+ {
+ char_order[i] = 512 + i;
+ char_order[i + 'A' - 'a'] = 512 + i;
+ }
+}
+
+/* Compare two fields (each specified as a start pointer and a character count)
+ according to KEYFIELD.
+ The sign of the value reports the relation between the fields. */
+
+int
+compare_field (struct keyfield *keyfield, char *start1, long int length1,
+ long int pos1, char *start2, long int length2, long int pos2)
+{
+ if (keyfields->positional)
+ {
+ if (pos1 > pos2)
+ return 1;
+ else
+ return -1;
+ }
+ if (keyfield->numeric)
+ {
+ long value = find_value (start1, length1) - find_value (start2, length2);
+ if (value > 0)
+ return 1;
+ if (value < 0)
+ return -1;
+ return 0;
+ }
+ else
+ {
+ char *p1 = start1;
+ char *p2 = start2;
+ char *e1 = start1 + length1;
+ char *e2 = start2 + length2;
+
+ while (1)
+ {
+ int c1, c2;
+
+ if (p1 == e1)
+ c1 = 0;
+ else
+ c1 = *p1++;
+ if (p2 == e2)
+ c2 = 0;
+ else
+ c2 = *p2++;
+
+ if (char_order[c1] != char_order[c2])
+ return char_order[c1] - char_order[c2];
+ if (!c1)
+ break;
+ }
+
+ /* Strings are equal except possibly for case. */
+ p1 = start1;
+ p2 = start2;
+ while (1)
+ {
+ int c1, c2;
+
+ if (p1 == e1)
+ c1 = 0;
+ else
+ c1 = *p1++;
+ if (p2 == e2)
+ c2 = 0;
+ else
+ c2 = *p2++;
+
+ if (c1 != c2)
+ /* Reverse sign here so upper case comes out last. */
+ return c2 - c1;
+ if (!c1)
+ break;
+ }
+
+ return 0;
+ }
+}
+
+/* Sort INFILE, whose size is TOTAL,
+ assuming that is small enough to be done in-core,
+ then indexify it and send the output to OUTFILE (or to stdout). */
+
+void
+sort_in_core (char *infile, int total, char *outfile)
+{
+ char **nextline;
+ char *data = (char *) xmalloc (total + 1);
+ char *file_data;
+ long file_size;
+ int i;
+ FILE *ostream = stdout;
+ struct lineinfo *lineinfo;
+
+ /* Read the contents of the file into the moby array `data'. */
+
+ int desc = open (infile, O_RDONLY, 0);
+
+ if (desc < 0)
+ fatal (_("failure reopening %s"), infile);
+ for (file_size = 0;;)
+ {
+ i = read (desc, data + file_size, total - file_size);
+ if (i <= 0)
+ break;
+ file_size += i;
+ }
+ file_data = data;
+ data[file_size] = 0;
+
+ close (desc);
+
+ if (file_size > 0 && data[0] != '\\' && data[0] != '@')
+ {
+ error (_("%s: not a texinfo index file"), infile);
+ return;
+ }
+
+ init_char_order ();
+
+ /* Sort routines want to know this address. */
+
+ text_base = data;
+
+ /* Create the array of pointers to lines, with a default size
+ frequently enough. */
+
+ nlines = total / 50;
+ if (!nlines)
+ nlines = 2;
+ linearray = (char **) xmalloc (nlines * sizeof (char *));
+
+ /* `nextline' points to the next free slot in this array.
+ `nlines' is the allocated size. */
+
+ nextline = linearray;
+
+ /* Parse the input file's data, and make entries for the lines. */
+
+ nextline = parsefile (infile, nextline, file_data, file_size);
+ if (nextline == 0)
+ {
+ error (_("%s: not a texinfo index file"), infile);
+ return;
+ }
+
+ /* Sort the lines. */
+
+ /* If we have enough space, find the first keyfield of each line in advance.
+ Make a `struct lineinfo' for each line, which records the keyfield
+ as well as the line, and sort them. */
+
+ lineinfo = malloc ((nextline - linearray) * sizeof (struct lineinfo));
+
+ if (lineinfo)
+ {
+ struct lineinfo *lp;
+ char **p;
+
+ for (lp = lineinfo, p = linearray; p != nextline; lp++, p++)
+ {
+ lp->text = *p;
+ lp->key.text = find_field (keyfields, *p, &lp->keylen);
+ if (keyfields->numeric)
+ lp->key.number = find_value (lp->key.text, lp->keylen);
+ }
+
+ qsort (lineinfo, nextline - linearray, sizeof (struct lineinfo),
+ compare_prepared);
+
+ for (lp = lineinfo, p = linearray; p != nextline; lp++, p++)
+ *p = lp->text;
+
+ free (lineinfo);
+ }
+ else
+ qsort (linearray, nextline - linearray, sizeof (char *), compare_full);
+
+ /* Open the output file. */
+
+ if (outfile)
+ {
+ ostream = fopen (outfile, "w");
+ if (!ostream)
+ pfatal_with_name (outfile);
+ }
+
+ writelines (linearray, nextline - linearray, ostream);
+ if (outfile)
+ fclose (ostream);
+
+ free (linearray);
+ free (data);
+}
+
+/* Parse an input string in core into lines.
+ DATA is the input string, and SIZE is its length.
+ Data goes in LINEARRAY starting at NEXTLINE.
+ The value returned is the first entry in LINEARRAY still unused.
+ Value 0 means input file contents are invalid. */
+
+char **
+parsefile (char *filename, char **nextline, char *data, long int size)
+{
+ char *p, *end;
+ char **line = nextline;
+
+ p = data;
+ end = p + size;
+ *end = 0;
+
+ while (p != end)
+ {
+ if (p[0] != '\\' && p[0] != '@')
+ return 0;
+
+ *line = p;
+
+ /* Find the first letter of the first field of this line. If it
+ is different from the first letter of the first field of the
+ first line, we need initial headers in the output index. */
+ while (*p && *p != '{')
+ p++;
+ if (p == end)
+ return 0;
+ p++;
+ if (first_initial)
+ {
+ if (first_initial != toupper (*p))
+ need_initials = 1;
+ }
+ else
+ first_initial = toupper (*p);
+
+ while (*p && *p != '\n')
+ p++;
+ if (p != end)
+ p++;
+
+ line++;
+ if (line == linearray + nlines)
+ {
+ char **old = linearray;
+ linearray = xrealloc (linearray, sizeof (char *) * (nlines *= 4));
+ line += linearray - old;
+ }
+ }
+
+ return line;
+}
+
+/* Indexification is a filter applied to the sorted lines
+ as they are being written to the output file.
+ Multiple entries for the same name, with different page numbers,
+ get combined into a single entry with multiple page numbers.
+ The first braced field, which is used for sorting, is discarded.
+ However, its first character is examined, folded to lower case,
+ and if it is different from that in the previous line fed to us
+ a \initial line is written with one argument, the new initial.
+
+ If an entry has four braced fields, then the second and third
+ constitute primary and secondary names.
+ In this case, each change of primary name
+ generates a \primary line which contains only the primary name,
+ and in between these are \secondary lines which contain
+ just a secondary name and page numbers. */
+
+/* The last primary name we wrote a \primary entry for.
+ If only one level of indexing is being done, this is the last name seen. */
+char *lastprimary;
+/* Length of storage allocated for lastprimary. */
+int lastprimarylength;
+
+/* Similar, for the secondary name. */
+char *lastsecondary;
+int lastsecondarylength;
+
+/* Zero if we are not in the middle of writing an entry.
+ One if we have written the beginning of an entry but have not
+ yet written any page numbers into it.
+ Greater than one if we have written the beginning of an entry
+ plus at least one page number. */
+int pending;
+
+/* The initial (for sorting purposes) of the last primary entry written.
+ When this changes, a \initial {c} line is written */
+
+char *lastinitial;
+
+int lastinitiallength;
+
+/* When we need a string of length 1 for the value of lastinitial,
+ store it here. */
+
+char lastinitial1[2];
+
+/* Initialize static storage for writing an index. */
+
+void
+init_index (void)
+{
+ pending = 0;
+ lastinitial = lastinitial1;
+ lastinitial1[0] = 0;
+ lastinitial1[1] = 0;
+ lastinitiallength = 0;
+ lastprimarylength = 100;
+ lastprimary = (char *) xmalloc (lastprimarylength + 1);
+ memset (lastprimary, '\0', lastprimarylength + 1);
+ lastsecondarylength = 100;
+ lastsecondary = (char *) xmalloc (lastsecondarylength + 1);
+ memset (lastsecondary, '\0', lastsecondarylength + 1);
+}
+
+/* Indexify. Merge entries for the same name,
+ insert headers for each initial character, etc. */
+
+void
+indexify (char *line, FILE *ostream)
+{
+ char *primary, *secondary, *pagenumber;
+ int primarylength, secondarylength = 0, pagelength;
+ int nosecondary;
+ int initiallength;
+ char *initial;
+ char initial1[2];
+ register char *p;
+
+ /* First, analyze the parts of the entry fed to us this time. */
+
+ p = find_braced_pos (line, 0, 0, 0);
+ if (*p == '{')
+ {
+ initial = p;
+ /* Get length of inner pair of braces starting at `p',
+ including that inner pair of braces. */
+ initiallength = find_braced_end (p + 1) + 1 - p;
+ }
+ else
+ {
+ initial = initial1;
+ initial1[0] = toupper (*p);
+ initial1[1] = 0;
+ initiallength = 1;
+ }
+
+ pagenumber = find_braced_pos (line, 1, 0, 0);
+ pagelength = find_braced_end (pagenumber) - pagenumber;
+ if (pagelength == 0)
+ fatal (_("No page number in %s"), line);
+
+ primary = find_braced_pos (line, 2, 0, 0);
+ primarylength = find_braced_end (primary) - primary;
+
+ secondary = find_braced_pos (line, 3, 0, 0);
+ nosecondary = !*secondary;
+ if (!nosecondary)
+ secondarylength = find_braced_end (secondary) - secondary;
+
+ /* If the primary is different from before, make a new primary entry. */
+ if (strncmp (primary, lastprimary, primarylength))
+ {
+ /* Close off current secondary entry first, if one is open. */
+ if (pending)
+ {
+ fputs ("}\n", ostream);
+ pending = 0;
+ }
+
+ /* If this primary has a different initial, include an entry for
+ the initial. */
+ if (need_initials &&
+ (initiallength != lastinitiallength ||
+ strncmp (initial, lastinitial, initiallength)))
+ {
+ fprintf (ostream, "\\initial {");
+ fwrite (initial, 1, initiallength, ostream);
+ fputs ("}\n", ostream);
+ if (initial == initial1)
+ {
+ lastinitial = lastinitial1;
+ *lastinitial1 = *initial1;
+ }
+ else
+ {
+ lastinitial = initial;
+ }
+ lastinitiallength = initiallength;
+ }
+
+ /* Make the entry for the primary. */
+ if (nosecondary)
+ fputs ("\\entry {", ostream);
+ else
+ fputs ("\\primary {", ostream);
+ fwrite (primary, primarylength, 1, ostream);
+ if (nosecondary)
+ {
+ fputs ("}{", ostream);
+ pending = 1;
+ }
+ else
+ fputs ("}\n", ostream);
+
+ /* Record name of most recent primary. */
+ if (lastprimarylength < primarylength)
+ {
+ lastprimarylength = primarylength + 100;
+ lastprimary = (char *) xrealloc (lastprimary,
+ 1 + lastprimarylength);
+ }
+ strncpy (lastprimary, primary, primarylength);
+ lastprimary[primarylength] = 0;
+
+ /* There is no current secondary within this primary, now. */
+ lastsecondary[0] = 0;
+ }
+
+ /* Should not have an entry with no subtopic following one with a
+ subtopic. */
+
+ if (nosecondary && *lastsecondary)
+ error (_("entry %s follows an entry with a secondary name"), line);
+
+ /* Start a new secondary entry if necessary. */
+ if (!nosecondary && strncmp (secondary, lastsecondary, secondarylength))
+ {
+ if (pending)
+ {
+ fputs ("}\n", ostream);
+ pending = 0;
+ }
+
+ /* Write the entry for the secondary. */
+ fputs ("\\secondary {", ostream);
+ fwrite (secondary, secondarylength, 1, ostream);
+ fputs ("}{", ostream);
+ pending = 1;
+
+ /* Record name of most recent secondary. */
+ if (lastsecondarylength < secondarylength)
+ {
+ lastsecondarylength = secondarylength + 100;
+ lastsecondary = (char *) xrealloc (lastsecondary,
+ 1 + lastsecondarylength);
+ }
+ strncpy (lastsecondary, secondary, secondarylength);
+ lastsecondary[secondarylength] = 0;
+ }
+
+ /* Here to add one more page number to the current entry. */
+ if (pending++ != 1)
+ fputs (", ", ostream); /* Punctuate first, if this is not the first. */
+ fwrite (pagenumber, pagelength, 1, ostream);
+}
+
+/* Close out any unfinished output entry. */
+
+void
+finish_index (FILE *ostream)
+{
+ if (pending)
+ fputs ("}\n", ostream);
+ free (lastprimary);
+ free (lastsecondary);
+}
+
+/* Copy the lines in the sorted order.
+ Each line is copied out of the input file it was found in. */
+
+void
+writelines (char **linearray, int nlines, FILE *ostream)
+{
+ char **stop_line = linearray + nlines;
+ char **next_line;
+
+ init_index ();
+
+ /* Output the text of the lines, and free the buffer space. */
+
+ for (next_line = linearray; next_line != stop_line; next_line++)
+ {
+ /* Output the line only if distinct from previous one. */
+ if (next_line == linearray
+ /* Compare previous line with this one, using only the
+ explicitly specd keyfields. */
+ || compare_general (*(next_line - 1), *next_line, 0L, 0L,
+ num_keyfields - 1))
+ {
+ char *p = *next_line;
+ char c;
+
+ while ((c = *p++) && c != '\n')
+ /* Do nothing. */ ;
+ *(p - 1) = 0;
+ indexify (*next_line, ostream);
+ }
+ }
+
+ finish_index (ostream);
+}
+
+/* Print error message and exit. */
+
+void
+fatal (const char *format, const char *arg)
+{
+ error (format, arg);
+ xexit (1);
+}
+
+/* Print error message. FORMAT is printf control string, ARG is arg for it. */
+void
+error (const char *format, const char *arg)
+{
+ printf ("%s: ", program_name);
+ printf (format, arg);
+ if (format[strlen (format) -1] != '\n')
+ printf ("\n");
+}
+
+void
+perror_with_name (const char *name)
+{
+ fprintf (stderr, "%s: ", program_name);
+ perror (name);
+}
+
+void
+pfatal_with_name (const char *name)
+{
+ perror_with_name (name);
+ xexit (1);
+}
+
+
+/* Return a newly-allocated string concatenating S1, S2, and S3. */
+
+static char *
+concat3 (const char *s1, const char *s2, const char *s3)
+{
+ int len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3);
+ char *result = (char *) xmalloc (len1 + len2 + len3 + 1);
+
+ strcpy (result, s1);
+ strcpy (result + len1, s2);
+ strcpy (result + len1 + len2, s3);
+ *(result + len1 + len2 + len3) = 0;
+
+ return result;
+}
diff --git a/util/texinfo-cat.in b/util/texinfo-cat.in
new file mode 100644
index 0000000..f0f0674
--- /dev/null
+++ b/util/texinfo-cat.in
@@ -0,0 +1,3 @@
+OVERRIDE YES
+
+PUBLIC "-//GNU//DTD TexinfoML V__VERSION__//EN" "texinfo.dtd"
diff --git a/util/texinfo.dtd b/util/texinfo.dtd
new file mode 100644
index 0000000..d07fdf6
--- /dev/null
+++ b/util/texinfo.dtd
@@ -0,0 +1,507 @@
+<!-- $Id: texinfo.dtd,v 1.13 2008/01/31 18:33:27 karl Exp $
+ Document Type Definition for Texinfo XML output (the '-'-xml option).
+
+ Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+ 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.
+
+ Author: Philippe Martin
+ Contributors:
+ Karl Eichwalder
+ Alper Ersoy
+ Karl Berry
+ Torsten Bronger
+-->
+
+<!-- * ENTITIES * -->
+
+<!-- Meta-information -->
+<!ENTITY % metainformation "setfilename | settitle | dircategory
+ | documentdescription">
+<!ENTITY % variables "setvalue | clearvalue">
+
+<!-- Document language -->
+<!ENTITY % lang "documentlanguage">
+
+<!-- Language codes -->
+<!ENTITY % languagecodes "aa|ab|af|am|ar|as|ay|az|ba|be|bg|bh|bi|bn|bo|br|ca|co|cs|cy|da|de|dz|el|en|eo|es|et|eu|fa|fi|fj|fo|fr|fy|ga|gd|gl|gn|gu|ha|he|hi|hr|hu|hy|ia|id|ie|ik|is|it|iu|ja|jw|ka|kk|kl|km|kn|ko|ks|ku|ky|la|ln|lo|lt|lv|mg|mi|mk|ml|mn|mo|mr|ms|mt|my|na|ne|nl|no|oc|om|or|pa|pl|ps|pt|qu|rm|rn|ro|ru|rw|sa|sd|sg|sh|si|sk|sl|sm|sn|so|sq|sr|ss|st|su|sv|sw|ta|te|tg|th|ti|tk|tl|tn|to|tr|ts|tt|tw|ug|uk|ur|uz|vi|vo|wo|xh|yi|yo|za|zh|zu">
+
+<!-- ToC -->
+<!ENTITY % toc "contents | shortcontents">
+
+<!-- Title page -->
+<!ENTITY % titlepage_cmds "author | booktitle | booksubtitle">
+
+<!-- block -->
+<!ENTITY % block "menu | para | quotation | example | smallexample | lisp
+ | smalllisp | cartouche | copying
+ | format | smallformat | display
+ | smalldisplay | itemize | enumerate | sp | center | group
+ | table | multitable | definition | float | image">
+
+<!-- API definitions -->
+<!ENTITY % definition.cmds "defcategory | deffunction | defvariable | defparam
+ | defdelimiter | deftype | defparamtype | defdatatype
+ | defclass | defclassvar | defoperation">
+
+<!-- Headings -->
+<!ENTITY % headings "majorheading | chapheading | heading | subheading
+ | subsubheading">
+
+
+<!-- Sectioning -->
+<!ENTITY % section.level1 "top | chapter | unnumbered | appendix">
+
+<!ENTITY % section.level2 "section | unnumberedsec | appendixsec">
+
+<!ENTITY % section.level3 "subsection | unnumberedsubsec | appendixsubsec">
+
+<!ENTITY % section.level4 "subsubsection | unnumberedsubsubsec
+ | appendixsubsubsec">
+
+<!ENTITY % section.all "%section.level1; | %section.level2; | %section.level3;
+ | %section.level4;">
+
+
+<!ENTITY % section.level1.content "(%block;
+ | %section.level2;
+ | %section.level3;
+ | %section.level4;
+ | verbatim | titlepage | %toc;
+ | %lang; | %variables;
+ | %headings;
+ | listoffloats
+ | printindex)*">
+
+<!ENTITY % section.level2.content "(%block;
+ | %section.level3;
+ | %section.level4;
+ | verbatim | titlepage | %toc;
+ | %lang; | %variables;
+ | %headings;)*">
+
+<!ENTITY % section.level3.content "(%block;
+ | %section.level4;
+ | verbatim | titlepage | %toc;
+ | %lang; | %variables;
+ | %headings;)*">
+
+<!ENTITY % section.level4.content "(%block;
+ | verbatim | titlepage | %toc;
+ | %lang; | %variables;
+ | %headings;)*">
+
+<!-- Options (many missing) -->
+<!ENTITY % onoff "on|off">
+<!ENTITY % option.cmds "frenchspacing">
+
+<!-- Inline -->
+<!ENTITY % Inline.emphasize "strong | emph">
+<!ENTITY % Inline.fonts "b | i | r | sansserif | slanted | titlefont | tt
+ | sc">
+<!ENTITY % Inline.footnote "footnote">
+<!ENTITY % Inline.markup "code | command | env | file | option | samp | verb
+ | dfn | cite | key | kbd | var | acronym | url">
+<!ENTITY % Inline.math "math | dmn">
+<!ENTITY % Inline.reference "xref | inforef | indexterm | email | uref">
+<!ENTITY % Inline.misc "click | clicksequence | logo | punct">
+
+<!ENTITY % Inline.phrase
+ "%Inline.emphasize; | %Inline.misc; | %Inline.fonts;
+ | %Inline.markup; | %Inline.math; | %Inline.reference;
+ | %Inline.footnote; | %option.cmds; ">
+
+
+<!-- * ELEMENTS * -->
+
+<!-- TOP Level Element -->
+<!ELEMENT texinfo ((%metainformation; | titlepage | node | synindex | %block; | %toc;
+ | %variables; | %lang;)* )>
+<!ATTLIST texinfo xml:lang (%languagecodes;) 'en'>
+
+<!-- meta-information -->
+<!ELEMENT setfilename (#PCDATA)>
+<!ELEMENT settitle (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT dircategory (#PCDATA)>
+
+<!ELEMENT setvalue (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT clearvalue EMPTY>
+<!ATTLIST setvalue
+ name CDATA #REQUIRED>
+<!ATTLIST clearvalue
+ name CDATA #REQUIRED>
+
+<!-- ToC -->
+<!ELEMENT contents EMPTY>
+<!ELEMENT shortcontents EMPTY>
+
+<!-- Document language -->
+<!ELEMENT documentlanguage EMPTY>
+<!ATTLIST documentlanguage xml:lang (%languagecodes;) 'en'>
+
+<!-- Titlepage -->
+<!ELEMENT titlepage (%titlepage_cmds; | %block;)*>
+<!ELEMENT author (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT booktitle (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT booksubtitle (#PCDATA | %Inline.phrase;)*>
+
+<!-- NODES -->
+<!ELEMENT node (nodename, nodenext?, nodeprev?, nodeup?,
+ (%section.all; | %block; | %toc; | %lang;)*) >
+
+<!ELEMENT nodename (#PCDATA)>
+<!ELEMENT nodenext (#PCDATA)>
+<!ELEMENT nodeprev (#PCDATA)>
+<!ELEMENT nodeup (#PCDATA)>
+
+
+<!-- SECTIONING -->
+<!ELEMENT top (title?, (%section.level1.content;))>
+
+<!ELEMENT chapter (title?, (%section.level1.content;))>
+<!ELEMENT section (title?, (%section.level2.content;))>
+<!ELEMENT subsection (title?, (%section.level3.content;))>
+<!ELEMENT subsubsection (title?, (%section.level4.content;))>
+
+<!ELEMENT unnumbered (title?, (%section.level1.content;))>
+<!ELEMENT unnumberedsec (title?, (%section.level2.content;))>
+<!ELEMENT unnumberedsubsec (title?, (%section.level3.content;))>
+<!ELEMENT unnumberedsubsubsec (title?, (%section.level4.content;))>
+
+<!ELEMENT appendix (title?, (%section.level1.content;))>
+<!ELEMENT appendixsec (title?, (%section.level2.content;))>
+<!ELEMENT appendixsubsec (title?, (%section.level3.content;))>
+<!ELEMENT appendixsubsubsec (title?, (%section.level4.content;))>
+
+<!-- Headings and titles -->
+<!ELEMENT majorheading (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT chapheading (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT heading (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT subheading (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT subsubheading (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT title (#PCDATA | %Inline.phrase;)*>
+
+<!-- Negative Indentation in Blocks -->
+<!ELEMENT exdent (#PCDATA | %Inline.phrase;)*>
+
+
+<!-- BLOCK Elements -->
+
+<!ELEMENT quotation (%block; | %Inline.phrase; | exdent)*>
+<!ELEMENT documentdescription (#PCDATA | %block; | %Inline.phrase;)*>
+<!ELEMENT example (#PCDATA | %block; | %Inline.phrase; | exdent)*>
+<!ELEMENT smallexample (#PCDATA | %block; | %Inline.phrase; | exdent)*>
+<!ELEMENT lisp (#PCDATA | %block; | %Inline.phrase; | exdent)*>
+<!ELEMENT smalllisp (#PCDATA | %block; | %Inline.phrase; | exdent)*>
+<!ELEMENT cartouche (#PCDATA | %block; | %Inline.phrase; | exdent)*>
+<!ELEMENT copying (#PCDATA | %block; | %Inline.phrase; | exdent)*>
+<!ELEMENT format (#PCDATA | %block; | %Inline.phrase; | exdent)*>
+<!ELEMENT smallformat (#PCDATA | %block; | %Inline.phrase; | exdent)*>
+<!ELEMENT display (#PCDATA | %block; | %Inline.phrase; | exdent)*>
+<!ELEMENT smalldisplay (#PCDATA | %block; | %Inline.phrase; | exdent)*>
+<!ELEMENT center (#PCDATA | %block; | %Inline.phrase; | exdent)*>
+<!ELEMENT group (#PCDATA | %block; | %Inline.phrase; | exdent)*>
+
+<!ELEMENT image (alttext)>
+<!ELEMENT alttext (#PCDATA)>
+<!ATTLIST image
+ name CDATA #REQUIRED
+ extension CDATA #REQUIRED
+ width CDATA #REQUIRED
+ height CDATA #REQUIRED>
+
+<!-- Whitespace in these elements are always preserved -->
+<!ATTLIST example xml:space (preserve) #FIXED 'preserve'>
+<!ATTLIST smallexample xml:space (preserve) #FIXED 'preserve'>
+<!ATTLIST lisp xml:space (preserve) #FIXED 'preserve'>
+<!ATTLIST smalllisp xml:space (preserve) #FIXED 'preserve'>
+<!ATTLIST display xml:space (preserve) #FIXED 'preserve'>
+<!ATTLIST smalldisplay xml:space (preserve) #FIXED 'preserve'>
+<!ATTLIST format xml:space (preserve) #FIXED 'preserve'>
+<!ATTLIST smallformat xml:space (preserve) #FIXED 'preserve'>
+
+<!ELEMENT verbatim (#PCDATA)>
+<!ATTLIST verbatim xml:space (preserve) #FIXED 'preserve'>
+
+<!ELEMENT para (#PCDATA | %Inline.phrase; | %lang;)*>
+<!ATTLIST para
+ role CDATA #IMPLIED>
+
+<!ELEMENT menu (menuentry | detailmenu | para)*>
+<!ELEMENT detailmenu (menuentry | para)*>
+<!ELEMENT menuentry (menunode?, menutitle?, menucomment?)>
+<!ELEMENT menunode (#PCDATA)>
+<!ELEMENT menutitle (#PCDATA)>
+<!ELEMENT menucomment (#PCDATA | %Inline.phrase;)*>
+
+<!-- Floating displays -->
+<!ELEMENT float (floattype, floatpos, (%block;)*,
+ ((caption, shortcaption?) | (shortcaption, caption))?)>
+<!ATTLIST float
+ name CDATA #IMPLIED>
+<!ELEMENT floattype (#PCDATA)>
+<!ELEMENT floatpos (#PCDATA)>
+<!ELEMENT caption (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT shortcaption (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT listoffloats EMPTY>
+<!ATTLIST listoffloats
+ type CDATA #IMPLIED>
+
+<!-- Lists -->
+<!ELEMENT itemize (itemfunction, (item | itemize | enumerate | indexterm)*)>
+<!ELEMENT enumerate (item | itemize | enumerate | indexterm)*>
+<!ATTLIST enumerate
+ first CDATA #IMPLIED>
+
+<!ELEMENT item (%block;)*>
+
+<!ELEMENT itemfunction (#PCDATA | %Inline.phrase;)*>
+
+<!-- Tables -->
+<!ELEMENT table (tableitem | indexterm)+>
+<!ELEMENT tableitem ((tableterm, indexterm*)+, item?)>
+<!ELEMENT tableterm (#PCDATA | %Inline.phrase;)*>
+
+<!ELEMENT multitable (columnfraction*, thead?, tbody)>
+<!ELEMENT columnfraction (#PCDATA)>
+<!ELEMENT thead (row+)>
+<!ELEMENT tbody (row+)>
+<!ELEMENT row (entry*)>
+<!ELEMENT entry (#PCDATA | %Inline.phrase;)*>
+
+<!-- API definitions -->
+<!ELEMENT definition (definitionterm | definitionitem | indexterm)+>
+<!ELEMENT definitionterm (%definition.cmds; | indexterm)+>
+<!ELEMENT definitionitem (%block;)*>
+
+<!ELEMENT defcategory (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT deffunction (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT defvariable (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT defparam (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT defdelimiter (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT deftype (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT defparamtype (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT defdatatype (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT defclass (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT defclassvar (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT defoperation (#PCDATA | %Inline.phrase;)*>
+
+<!-- INLINE Elements -->
+
+<!-- options -->
+<!ELEMENT frenchspacing (#PCDATA)> <!-- must be on or off -->
+<!ATTLIST frenchspacing val (%onoff;) 'off'>
+
+<!-- emphasize -->
+<!ELEMENT strong (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT emph (#PCDATA | %Inline.phrase;)*>
+
+<!-- small caps -->
+<!ELEMENT sc (#PCDATA | %Inline.phrase;)*>
+
+<!-- fonts -->
+<!ELEMENT b (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT i (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT r (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT sansserif (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT slanted (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT titlefont (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT tt (#PCDATA | %Inline.phrase;)*>
+
+<!-- markup -->
+<!ELEMENT code (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT command (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT env (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT file (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT option (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT samp (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT dfn (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT cite (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT key (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT kbd (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT var (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT url (#PCDATA | %Inline.phrase;)*>
+
+<!ELEMENT acronym (acronymword, acronymdesc?)>
+<!ELEMENT acronymword (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT acronymdesc (#PCDATA | %Inline.phrase;)*>
+
+<!ELEMENT abbrev (abbrevword, abbrevdesc?)>
+<!ELEMENT abbrevword (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT abbrevdesc (#PCDATA | %Inline.phrase;)*>
+
+<!-- math -->
+<!ELEMENT math (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT dmn (#PCDATA | %Inline.phrase;)*>
+
+<!-- reference -->
+<!ELEMENT anchor EMPTY>
+<!ATTLIST anchor
+ name CDATA #IMPLIED>
+
+<!ELEMENT xref (xrefnodename | xrefinfoname | xrefinfofile
+ | xrefprintedname | xrefprinteddesc)*>
+<!ELEMENT xrefnodename (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT xrefinfoname (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT xrefinfofile (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT xrefprintedname (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT xrefprinteddesc (#PCDATA | %Inline.phrase;)*>
+
+<!ELEMENT inforef (inforefnodename | inforefrefname | inforefinfoname)*>
+<!ELEMENT inforefnodename (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT inforefrefname (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT inforefinfoname (#PCDATA | %Inline.phrase;)*>
+
+<!ELEMENT synindex EMPTY>
+<!ATTLIST synindex
+ code (yes|no) 'no'
+ from NMTOKEN #REQUIRED
+ to NMTOKEN #REQUIRED>
+<!ELEMENT indexterm (#PCDATA | %Inline.phrase;)*>
+<!ATTLIST indexterm
+ index CDATA #IMPLIED>
+
+<!ELEMENT email (emailaddress, emailname?)>
+<!ELEMENT emailaddress (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT emailname (#PCDATA | %Inline.phrase;)*>
+
+<!ELEMENT uref (urefurl, urefdesc?, urefreplacement?)>
+<!ELEMENT urefurl (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT urefdesc (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT urefreplacement (#PCDATA | %Inline.phrase;)*>
+
+<!ELEMENT footnote (para)>
+
+
+<!ELEMENT punct (#PCDATA)>
+<!ATTLIST punct
+ end-of-sentence (yes|no) #IMPLIED>
+<!ELEMENT logo (#PCDATA)>
+<!ELEMENT linebreak EMPTY>
+
+<!ENTITY tex "<logo>TeX</logo>">
+<!ENTITY latex "<logo>LaTeX</logo>">
+<!ENTITY ellipsis "&#x2026;">
+<!ENTITY lt "&#x3c;">
+<!ENTITY gt "&#x3e;">
+<!ENTITY bullet "&#x2022;">
+<!ENTITY copyright "&#xa9;">
+<!ENTITY registered "&#xae;">
+<!ENTITY euro "&#x20ac;">
+<!ENTITY pounds "&#xa3;">
+<!ENTITY minus "&#x2212;">
+<!ENTITY linebreak "<linebreak/>">
+<!ENTITY space " "> <!-- Should become an element. -->
+<!ENTITY dots "<punct end-of-sentence='no'>&#x2026;</punct>">
+<!ENTITY enddots "<punct end-of-sentence='yes'>&#x2026;</punct>">
+<!ENTITY amp "&#x26;">
+<!ENTITY lsquo "&#x2018;">
+<!ENTITY rsquo "&#x2019;">
+<!ENTITY sbquo "&#x201a;">
+<!ENTITY ldquo "&#x201c;">
+<!ENTITY rdquo "&#x201d;">
+<!ENTITY bdquo "&#x201e;">
+<!ENTITY laquo "&#xab;">
+<!ENTITY raquo "&#xbb;">
+<!ENTITY lsaquo "&#x2039;">
+<!ENTITY rsaquo "&#x203a;">
+<!ENTITY mdash "&#x2014;">
+<!ENTITY ndash "&#x2013;">
+<!ENTITY period "<punct end-of-sentence='no'>.</punct>">
+<!ENTITY eosperiod "<punct end-of-sentence='yes'>.</punct>">
+<!ENTITY quest "<punct end-of-sentence='no'>?</punct>">
+<!ENTITY eosquest "<punct end-of-sentence='yes'>?</punct>">
+<!ENTITY excl "<punct end-of-sentence='no'>!</punct>">
+<!ENTITY eosexcl "<punct end-of-sentence='yes'>!</punct>">
+
+<!ENTITY auml "&#xe4;">
+<!ENTITY ouml "&#xf6;">
+<!ENTITY uuml "&#xfc;">
+<!ENTITY Auml "&#xc4;">
+<!ENTITY Ouml "&#xd6;">
+<!ENTITY Uuml "&#xdc;">
+<!ENTITY Euml "&#xcb;">
+<!ENTITY euml "&#xeb;">
+<!ENTITY Iuml "&#xcf;">
+<!ENTITY iuml "&#xef;">
+<!ENTITY yuml "&#xff;">
+<!ENTITY uml "&#xa8;">
+
+<!ENTITY Aacute "&#xc1;">
+<!ENTITY Eacute "&#xc9;">
+<!ENTITY Iacute "&#xcd;">
+<!ENTITY Oacute "&#xd3;">
+<!ENTITY Uacute "&#xda;">
+<!ENTITY Yacute "&#xdd;">
+<!ENTITY aacute "&#xe1;">
+<!ENTITY eacute "&#xe9;">
+<!ENTITY iacute "&#xed;">
+<!ENTITY oacute "&#xf3;">
+<!ENTITY uacute "&#xfa;">
+<!ENTITY yacute "&#xfd;">
+
+<!ENTITY ccedil "&#xe7;">
+<!ENTITY Ccedil "&#xc7;">
+
+<!ENTITY Acirc "&#xc2;">
+<!ENTITY Ecirc "&#xca;">
+<!ENTITY Icirc "&#xc3;">
+<!ENTITY Ocirc "&#xd4;">
+<!ENTITY Ucirc "&#xdb;">
+<!ENTITY acirc "&#xe2;">
+<!ENTITY ecirc "&#xea;">
+<!ENTITY icirc "&#xee;">
+<!ENTITY ocirc "&#xf4;">
+<!ENTITY ucirc "&#xfb;">
+
+<!ENTITY Agrave "&#xc0;">
+<!ENTITY Egrave "&#xc8;">
+<!ENTITY Igrave "&#xcc;">
+<!ENTITY Ograve "&#xd2;">
+<!ENTITY Ugrave "&#xd9;">
+<!ENTITY agrave "&#xe0;">
+<!ENTITY egrave "&#xe8;">
+<!ENTITY igrave "&#xec;">
+<!ENTITY ograve "&#xf2;">
+<!ENTITY ugrave "&#xf9;">
+
+<!ENTITY Atilde "&#xc3;">
+<!ENTITY Ntilde "&#xd1;">
+<!ENTITY Otilde "&#xd5;">
+<!ENTITY atilde "&#xe3;">
+<!ENTITY ntilde "&#xf1;">
+<!ENTITY otilde "&#xf5;">
+
+<!ENTITY oslash "&#xf8;">
+<!ENTITY Oslash "&#xd8;">
+
+<!ENTITY ordm "&#xba;">
+<!ENTITY ordf "&#xaa;">
+
+<!ENTITY iexcl "&#xa1;">
+<!ENTITY pound "&#xa3;">
+<!ENTITY iquest "&#xbf;">
+<!ENTITY AElig "&#xc6;">
+<!ENTITY aelig "&#xe6;">
+<!ENTITY OElig "&#x152;">
+<!ENTITY oelig "&#x153;">
+<!ENTITY Aring "&#xc5;">
+<!ENTITY aring "&#xe5;">
+<!ENTITY szlig "&#xdf;">
+
+<!ENTITY rarr "&#x2192;">
+<!ENTITY rArr "&#x21d2;">
+
+<!ENTITY macr "&#xaf;">
+
+
+<!-- fixxme: not yet classified -->
+
+<!ELEMENT sp (#PCDATA)>
+<!ATTLIST sp
+ lines CDATA #IMPLIED>
+<!ELEMENT printindex (#PCDATA)>
+
diff --git a/util/texinfo.xsl b/util/texinfo.xsl
new file mode 100644
index 0000000..5225517
--- /dev/null
+++ b/util/texinfo.xsl
@@ -0,0 +1,242 @@
+<?xml version='1.0'?>
+<!-- $Id: texinfo.xsl,v 1.1 2004/04/11 17:56:47 karl Exp $ -->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ version="1.0">
+
+<xsl:output method="html" indent="yes"/>
+
+<!-- root rule -->
+<xsl:template match="/">
+ <html>
+ <head><title>
+ <xsl:apply-templates select="TEXINFO/SETTITLE" mode="head"/>
+ </title></head>
+ <body bgcolor="#FFFFFF"><xsl:apply-templates/>
+</body></html>
+</xsl:template>
+
+
+<xsl:template match="TEXINFO">
+ <xsl:apply-templates/>
+</xsl:template>
+
+
+<xsl:template match="TEXINFO/SETFILENAME">
+</xsl:template>
+
+<xsl:template match="TEXINFO/SETTITLE" mode="head">
+ <xsl:apply-templates/>
+</xsl:template>
+
+<xsl:template match="TEXINFO/SETTITLE">
+ <h1><xsl:apply-templates/></h1>
+</xsl:template>
+
+
+<xsl:template match="TEXINFO/DIRCATEGORY">
+</xsl:template>
+
+<xsl:template match="//PARA">
+ <p><xsl:apply-templates/></p>
+</xsl:template>
+
+<xsl:template match="//EMPH">
+ <i><xsl:apply-templates/></i>
+</xsl:template>
+
+<!-- The node -->
+<xsl:template match="TEXINFO/NODE">
+ <hr/>
+ <p>
+ <xsl:apply-templates select="NODENAME" mode="select"/>
+ <xsl:apply-templates select="NODEPREV" mode="select"/>
+ <xsl:apply-templates select="NODEUP" mode="select"/>
+ <xsl:apply-templates select="NODENEXT" mode="select"/>
+ <xsl:apply-templates/>
+ <h2>Footnotes</h2>
+ <ol>
+ <xsl:apply-templates select=".//FOOTNOTE" mode="footnote"/>
+ </ol>
+ </p>
+</xsl:template>
+
+<xsl:template match="TEXINFO/NODE/NODENAME" mode="select">
+<h2>
+ <a>
+ <xsl:attribute name="name">
+ <xsl:apply-templates/>
+ </xsl:attribute>
+ <xsl:apply-templates/>
+ </a>
+</h2>
+</xsl:template>
+
+<xsl:template match="TEXINFO/NODE/NODENAME"/>
+
+
+<xsl:template match="TEXINFO/NODE/NODEPREV" mode="select">
+ [ <b>Previous: </b>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:text>#</xsl:text>
+ <xsl:apply-templates/>
+ </xsl:attribute>
+ <xsl:apply-templates/>
+ </a> ]
+</xsl:template>
+
+<xsl:template match="TEXINFO/NODE/NODEPREV"/>
+
+<xsl:template match="TEXINFO/NODE/NODEUP" mode="select">
+ [ <b>Up: </b>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:text>#</xsl:text>
+ <xsl:apply-templates/>
+ </xsl:attribute>
+ <xsl:apply-templates/>
+ </a> ]
+</xsl:template>
+
+<xsl:template match="TEXINFO/NODE/NODEUP"/>
+
+<xsl:template match="TEXINFO/NODE/NODENEXT" mode="select">
+ [ <b>Next: </b>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:text>#</xsl:text>
+ <xsl:apply-templates/>
+ </xsl:attribute>
+ <xsl:apply-templates/>
+ </a> ]
+</xsl:template>
+
+<xsl:template match="TEXINFO/NODE/NODENEXT"/>
+
+<!-- Menu -->
+<xsl:template match="//MENU">
+ <h3>Menu</h3>
+ <xsl:apply-templates/>
+</xsl:template>
+
+<xsl:template match="//MENU/MENUENTRY">
+ <a>
+ <xsl:attribute name="href">
+ <xsl:text>#</xsl:text>
+ <xsl:apply-templates select="MENUNODE"/>
+ </xsl:attribute>
+ <xsl:apply-templates select="MENUTITLE"/>
+ </a>:
+ <xsl:apply-templates select="MENUCOMMENT"/>
+ <br/>
+</xsl:template>
+
+<xsl:template match="//MENU/MENUENTRY/MENUNODE">
+ <xsl:apply-templates/>
+</xsl:template>
+
+<xsl:template match="//MENU/MENUENTRY/MENUTITLE">
+ <xsl:apply-templates/>
+</xsl:template>
+
+<xsl:template match="//MENU/MENUENTRY/MENUCOMMENT">
+ <xsl:apply-templates mode="menucomment"/>
+</xsl:template>
+
+<xsl:template match="PARA" mode="menucomment">
+ <xsl:apply-templates/>
+</xsl:template>
+
+<xsl:template match="//PARA">
+ <p><xsl:apply-templates/></p>
+</xsl:template>
+
+<!-- LISTS -->
+<xsl:template match="//ITEMIZE">
+ <ul>
+ <xsl:apply-templates/>
+ </ul>
+</xsl:template>
+
+<xsl:template match="//ITEMIZE/ITEM">
+ <li>
+ <xsl:apply-templates/>
+ </li>
+</xsl:template>
+
+<xsl:template match="//ENUMERATE">
+ <ol>
+ <xsl:apply-templates/>
+ </ol>
+</xsl:template>
+
+<xsl:template match="//ENUMERATE/ITEM">
+ <li>
+ <xsl:apply-templates/>
+ </li>
+</xsl:template>
+
+<!-- INLINE -->
+<xsl:template match="//CODE">
+ <tt>
+ <xsl:apply-templates/>
+ </tt>
+</xsl:template>
+
+<xsl:template match="//DFN">
+ <i><b>
+ <xsl:apply-templates/>
+ </b></i>
+</xsl:template>
+
+<xsl:template match="//STRONG">
+ <b>
+ <xsl:apply-templates/>
+ </b>
+</xsl:template>
+
+<xsl:template match="//CENTER">
+ <center>
+ <xsl:apply-templates/>
+ </center>
+</xsl:template>
+
+<xsl:template match="//VAR">
+ <i>
+ <xsl:apply-templates/>
+ </i>
+</xsl:template>
+
+<xsl:template match="//KBD">
+ <tt>
+ <xsl:apply-templates/>
+ </tt>
+</xsl:template>
+
+<xsl:template match="//KEY">
+ <b>
+ <xsl:apply-templates/>
+ </b>
+</xsl:template>
+
+<!-- BLOCKS -->
+<xsl:template match="//DISPLAY">
+ <pre>
+ <xsl:apply-templates/>
+ </pre>
+</xsl:template>
+
+
+<!-- INDEX -->
+<xsl:template match="//INDEXTERM">
+</xsl:template>
+
+<!-- FOOTNOTE -->
+<xsl:template match="//FOOTNOTE">
+</xsl:template>
+
+<xsl:template match="//FOOTNOTE" mode="footnote">
+ <li><xsl:apply-templates/></li>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/util/txitextest b/util/txitextest
new file mode 100755
index 0000000..4a85b01
--- /dev/null
+++ b/util/txitextest
@@ -0,0 +1,77 @@
+#!/bin/sh
+# $Id: txitextest,v 1.8 2006/08/14 13:18:20 karl Exp $
+# Test texinfo.tex changes by running various manuals through with an
+# old version, saving the .ps result from dvips, doing the same with a
+# new version, and comparing. Idea from Stepan Kasal.
+#
+# Another option is to run the manuals all the way through using
+# texi2dvi, which tests in another way.
+
+tsrc=`dirname $0`/..
+PATH=$tsrc/util:$PATH
+
+tdoc=$tsrc/doc
+default_manuals="$tdoc/texinfo.txi $tdoc/info.texi $tdoc/info-stnd.texi"
+
+olddir=$tsrc/../gnulib/config
+newdir=$tdoc
+tempdir=$tsrc/@tests/test
+full=false
+manuals=
+
+while test $# -gt 0; do
+ case $1 in
+ --f*) full=true;;
+ --o*) shift; olddir="$1";;
+ --n*) shift; newdir="$1";;
+ --t*) shift; tempdir="$1";;
+ -*) echo "$0: unknown option \`$1'." >&2; exit 1;;
+ *) manuals="$manuals $1";;
+ esac
+ shift
+done
+
+test -z "$manuals" && manuals=$default_manuals
+initial_dir=`pwd`
+
+cd $tempdir || exit 1
+rm -f *
+
+run_tex() \
+{
+ TEXINPUTS=.:$mandir: tex $manual \
+ || { echo "tex $manual failed." >&2; exit 1; }
+}
+
+for manual in $manuals; do
+ mandir=`dirname $manual`
+ test $mandir = . && mandir=$initial_dir
+ manual_base=`basename "$manual" | sed 's/\.[^.]*$//'`
+
+ rm -rf $manual_base.* texinfo.tex
+ ln -s $newdir/texinfo.tex texinfo.tex
+
+ if $full; then
+ # instead of comparing, do full test of just the new texinfo.tex.
+ echo "$0: testing $manual_base... (tex)"
+ texi2dvi $manual || { echo "texi2dvi $manual failed." >&2; exit 1; }
+ echo "$0: testing $manual_base... (pdf)"
+ texi2dvi --pdf $manual \
+ || { echo "texi2dvi --pdf $manual failed." >&2; exit 1; }
+
+ else
+ echo "$0: testing $manual_base... (new)"
+ run_tex
+ dvips $manual_base -o || exit 1
+ mv $manual_base.ps new.$manual_base.ps
+
+ echo "$0: testing $manual_base... (old)"
+ rm -rf $manual_base.* texinfo.tex
+ ln -s $olddir/texinfo.tex texinfo.tex
+ run_tex
+ dvips $manual_base -o || exit 1
+ mv $manual_base.ps old.$manual_base.ps
+
+ diff -U0 old.$manual_base.ps new.$manual_base.ps
+ fi
+done